/*! p5.js v1.4.0 June 29, 2021 */
(function(f) {
  if (typeof exports === 'object' && typeof module !== 'undefined') {
    module.exports = f();
  } else if (typeof define === 'function' && define.amd) {
    define([], f);
  } else {
    var g;
    if (typeof window !== 'undefined') {
      g = window;
    } else if (typeof global !== 'undefined') {
      g = global;
    } else if (typeof self !== 'undefined') {
      g = self;
    } else {
      g = this;
    }
    g.p5 = f();
  }
})(function() {
  var define, module, exports;
  return (function() {
    function r(e, n, t) {
      function o(i, f) {
        if (!n[i]) {
          if (!e[i]) {
            var c = 'function' == typeof require && require;
            if (!f && c) return c(i, !0);
            if (u) return u(i, !0);
            var a = new Error("Cannot find module '" + i + "'");
            throw ((a.code = 'MODULE_NOT_FOUND'), a);
          }
          var p = (n[i] = { exports: {} });
          e[i][0].call(
            p.exports,
            function(r) {
              var n = e[i][1][r];
              return o(n || r);
            },
            p,
            p.exports,
            r,
            e,
            n,
            t
          );
        }
        return n[i].exports;
      }
      for (var u = 'function' == typeof require && require, i = 0; i < t.length; i++)
        o(t[i]);
      return o;
    }
    return r;
  })()(
    {
      1: [
        function(_dereq_, module, exports) {
          module.exports = {
            p5: {
              describe: {
                name: 'describe',
                params: [
                  {
                    name: 'text',
                    description: '<p>description of the canvas</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'display',
                    description: '<p>either LABEL or FALLBACK</p>\n',
                    type: 'Constant',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Environment'
              },
              describeElement: {
                name: 'describeElement',
                params: [
                  {
                    name: 'name',
                    description: '<p>name of the element</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'text',
                    description: '<p>description of the element</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'display',
                    description: '<p>either LABEL or FALLBACK</p>\n',
                    type: 'Constant',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Environment'
              },
              textOutput: {
                name: 'textOutput',
                params: [
                  {
                    name: 'display',
                    description: '<p>either FALLBACK or LABEL</p>\n',
                    type: 'Constant',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Environment'
              },
              gridOutput: {
                name: 'gridOutput',
                params: [
                  {
                    name: 'display',
                    description: '<p>either FALLBACK or LABEL</p>\n',
                    type: 'Constant',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Environment'
              },
              alpha: {
                name: 'alpha',
                params: [
                  {
                    name: 'color',
                    description:
                      '<p><a href="#/p5.Color">p5.Color</a> object, color components,\n                                        or CSS color</p>\n',
                    type: 'p5.Color|Number[]|String'
                  }
                ],
                class: 'p5',
                module: 'Color'
              },
              blue: {
                name: 'blue',
                params: [
                  {
                    name: 'color',
                    description:
                      '<p><a href="#/p5.Color">p5.Color</a> object, color components,\n                                        or CSS color</p>\n',
                    type: 'p5.Color|Number[]|String'
                  }
                ],
                class: 'p5',
                module: 'Color'
              },
              brightness: {
                name: 'brightness',
                params: [
                  {
                    name: 'color',
                    description:
                      '<p><a href="#/p5.Color">p5.Color</a> object, color components,\n                                        or CSS color</p>\n',
                    type: 'p5.Color|Number[]|String'
                  }
                ],
                class: 'p5',
                module: 'Color'
              },
              color: {
                name: 'color',
                class: 'p5',
                module: 'Color',
                overloads: [
                  {
                    params: [
                      {
                        name: 'gray',
                        description:
                          '<p>number specifying value between white and black.</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'alpha',
                        description:
                          '<p>alpha value relative to current color range\n                                (default is 0-255)</p>\n',
                        type: 'Number',
                        optional: true
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'v1',
                        description:
                          '<p>red or hue value relative to\n                                the current color range</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'v2',
                        description:
                          '<p>green or saturation value\n                                relative to the current color range</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'v3',
                        description:
                          '<p>blue or brightness value\n                                relative to the current color range</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'alpha',
                        description: '',
                        type: 'Number',
                        optional: true
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'value',
                        description: '<p>a color string</p>\n',
                        type: 'String'
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'values',
                        description:
                          '<p>an array containing the red,green,blue &\n                                and alpha components of the color</p>\n',
                        type: 'Number[]'
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'color',
                        description: '',
                        type: 'p5.Color'
                      }
                    ]
                  }
                ]
              },
              green: {
                name: 'green',
                params: [
                  {
                    name: 'color',
                    description:
                      '<p><a href="#/p5.Color">p5.Color</a> object, color components,\n                                        or CSS color</p>\n',
                    type: 'p5.Color|Number[]|String'
                  }
                ],
                class: 'p5',
                module: 'Color'
              },
              hue: {
                name: 'hue',
                params: [
                  {
                    name: 'color',
                    description:
                      '<p><a href="#/p5.Color">p5.Color</a> object, color components,\n                                        or CSS color</p>\n',
                    type: 'p5.Color|Number[]|String'
                  }
                ],
                class: 'p5',
                module: 'Color'
              },
              lerpColor: {
                name: 'lerpColor',
                params: [
                  {
                    name: 'c1',
                    description: '<p>interpolate from this color</p>\n',
                    type: 'p5.Color'
                  },
                  {
                    name: 'c2',
                    description: '<p>interpolate to this color</p>\n',
                    type: 'p5.Color'
                  },
                  {
                    name: 'amt',
                    description: '<p>number between 0 and 1</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Color'
              },
              lightness: {
                name: 'lightness',
                params: [
                  {
                    name: 'color',
                    description:
                      '<p><a href="#/p5.Color">p5.Color</a> object, color components,\n                                        or CSS color</p>\n',
                    type: 'p5.Color|Number[]|String'
                  }
                ],
                class: 'p5',
                module: 'Color'
              },
              red: {
                name: 'red',
                params: [
                  {
                    name: 'color',
                    description:
                      '<p><a href="#/p5.Color">p5.Color</a> object, color components,\n                                        or CSS color</p>\n',
                    type: 'p5.Color|Number[]|String'
                  }
                ],
                class: 'p5',
                module: 'Color'
              },
              saturation: {
                name: 'saturation',
                params: [
                  {
                    name: 'color',
                    description:
                      '<p><a href="#/p5.Color">p5.Color</a> object, color components,\n                                        or CSS color</p>\n',
                    type: 'p5.Color|Number[]|String'
                  }
                ],
                class: 'p5',
                module: 'Color'
              },
              background: {
                name: 'background',
                class: 'p5',
                module: 'Color',
                overloads: [
                  {
                    params: [
                      {
                        name: 'color',
                        description:
                          '<p>any value created by the <a href="#/p5/color">color()</a> function</p>\n',
                        type: 'p5.Color'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'colorstring',
                        description:
                          '<p>color string, possible formats include: integer\n                        rgb() or rgba(), percentage rgb() or rgba(),\n                        3-digit hex, 6-digit hex</p>\n',
                        type: 'String'
                      },
                      {
                        name: 'a',
                        description:
                          '<p>opacity of the background relative to current\n                            color range (default is 0-255)</p>\n',
                        type: 'Number',
                        optional: true
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'gray',
                        description: '<p>specifies a value between white and black</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'a',
                        description: '',
                        type: 'Number',
                        optional: true
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'v1',
                        description:
                          '<p>red or hue value (depending on the current color\n                       mode)</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'v2',
                        description:
                          '<p>green or saturation value (depending on the current\n                       color mode)</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'v3',
                        description:
                          '<p>blue or brightness value (depending on the current\n                       color mode)</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'a',
                        description: '',
                        type: 'Number',
                        optional: true
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'values',
                        description:
                          '<p>an array containing the red, green, blue\n                                and alpha components of the color</p>\n',
                        type: 'Number[]'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'image',
                        description:
                          '<p>image created with <a href="#/p5/loadImage">loadImage()</a> or <a href="#/p5/createImage">createImage()</a>,\n                            to set as background\n                            (must be same size as the sketch window)</p>\n',
                        type: 'p5.Image'
                      },
                      {
                        name: 'a',
                        description: '',
                        type: 'Number',
                        optional: true
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              clear: {
                name: 'clear',
                class: 'p5',
                module: 'Color'
              },
              colorMode: {
                name: 'colorMode',
                class: 'p5',
                module: 'Color',
                overloads: [
                  {
                    params: [
                      {
                        name: 'mode',
                        description:
                          '<p>either RGB, HSB or HSL, corresponding to\n                         Red/Green/Blue and Hue/Saturation/Brightness\n                         (or Lightness)</p>\n',
                        type: 'Constant'
                      },
                      {
                        name: 'max',
                        description: '<p>range for all values</p>\n',
                        type: 'Number',
                        optional: true
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'mode',
                        description: '',
                        type: 'Constant'
                      },
                      {
                        name: 'max1',
                        description:
                          '<p>range for the red or hue depending on the\n                             current color mode</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'max2',
                        description:
                          '<p>range for the green or saturation depending\n                             on the current color mode</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'max3',
                        description:
                          '<p>range for the blue or brightness/lightness\n                             depending on the current color mode</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'maxA',
                        description: '<p>range for the alpha</p>\n',
                        type: 'Number',
                        optional: true
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              fill: {
                name: 'fill',
                class: 'p5',
                module: 'Color',
                overloads: [
                  {
                    params: [
                      {
                        name: 'v1',
                        description:
                          '<p>red or hue value relative to\n                                the current color range</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'v2',
                        description:
                          '<p>green or saturation value\n                                relative to the current color range</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'v3',
                        description:
                          '<p>blue or brightness value\n                                relative to the current color range</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'alpha',
                        description: '',
                        type: 'Number',
                        optional: true
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'value',
                        description: '<p>a color string</p>\n',
                        type: 'String'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'gray',
                        description: '<p>a gray value</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'alpha',
                        description: '',
                        type: 'Number',
                        optional: true
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'values',
                        description:
                          '<p>an array containing the red,green,blue &\n                                and alpha components of the color</p>\n',
                        type: 'Number[]'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'color',
                        description: '<p>the fill color</p>\n',
                        type: 'p5.Color'
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              noFill: {
                name: 'noFill',
                class: 'p5',
                module: 'Color'
              },
              noStroke: {
                name: 'noStroke',
                class: 'p5',
                module: 'Color'
              },
              stroke: {
                name: 'stroke',
                class: 'p5',
                module: 'Color',
                overloads: [
                  {
                    params: [
                      {
                        name: 'v1',
                        description:
                          '<p>red or hue value relative to\n                                the current color range</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'v2',
                        description:
                          '<p>green or saturation value\n                                relative to the current color range</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'v3',
                        description:
                          '<p>blue or brightness value\n                                relative to the current color range</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'alpha',
                        description: '',
                        type: 'Number',
                        optional: true
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'value',
                        description: '<p>a color string</p>\n',
                        type: 'String'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'gray',
                        description: '<p>a gray value</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'alpha',
                        description: '',
                        type: 'Number',
                        optional: true
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'values',
                        description:
                          '<p>an array containing the red,green,blue &\n                                and alpha components of the color</p>\n',
                        type: 'Number[]'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'color',
                        description: '<p>the stroke color</p>\n',
                        type: 'p5.Color'
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              erase: {
                name: 'erase',
                params: [
                  {
                    name: 'strengthFill',
                    description:
                      "<p>A number (0-255) for the strength of erasing for a shape's fill.\n                                       This will default to 255 when no argument is given, which\n                                       is full strength.</p>\n",
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'strengthStroke',
                    description:
                      "<p>A number (0-255) for the strength of erasing for a shape's stroke.\n                                       This will default to 255 when no argument is given, which\n                                       is full strength.</p>\n",
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Color'
              },
              noErase: {
                name: 'noErase',
                class: 'p5',
                module: 'Color'
              },
              arc: {
                name: 'arc',
                params: [
                  {
                    name: 'x',
                    description: "<p>x-coordinate of the arc's ellipse</p>\n",
                    type: 'Number'
                  },
                  {
                    name: 'y',
                    description: "<p>y-coordinate of the arc's ellipse</p>\n",
                    type: 'Number'
                  },
                  {
                    name: 'w',
                    description: "<p>width of the arc's ellipse by default</p>\n",
                    type: 'Number'
                  },
                  {
                    name: 'h',
                    description: "<p>height of the arc's ellipse by default</p>\n",
                    type: 'Number'
                  },
                  {
                    name: 'start',
                    description: '<p>angle to start the arc, specified in radians</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'stop',
                    description: '<p>angle to stop the arc, specified in radians</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'mode',
                    description:
                      '<p>optional parameter to determine the way of drawing\n                        the arc. either CHORD, PIE or OPEN</p>\n',
                    type: 'Constant',
                    optional: true
                  },
                  {
                    name: 'detail',
                    description:
                      "<p>optional parameter for WebGL mode only. This is to\n                        specify the number of vertices that makes up the\n                        perimeter of the arc. Default value is 25. Won't\n                        draw a stroke for a detail of more than 50.</p>\n",
                    type: 'Integer',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Shape'
              },
              ellipse: {
                name: 'ellipse',
                class: 'p5',
                module: 'Shape',
                overloads: [
                  {
                    params: [
                      {
                        name: 'x',
                        description: '<p>x-coordinate of the center of ellipse.</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y',
                        description: '<p>y-coordinate of the center of ellipse.</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'w',
                        description: '<p>width of the ellipse.</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'h',
                        description: '<p>height of the ellipse.</p>\n',
                        type: 'Number',
                        optional: true
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'x',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'y',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'w',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'h',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'detail',
                        description:
                          "<p>optional parameter for WebGL mode only. This is to\n                        specify the number of vertices that makes up the\n                        perimeter of the ellipse. Default value is 25. Won't\n                        draw a stroke for a detail of more than 50.</p>\n",
                        type: 'Integer',
                        optional: true
                      }
                    ]
                  }
                ]
              },
              circle: {
                name: 'circle',
                params: [
                  {
                    name: 'x',
                    description: '<p>x-coordinate of the centre of the circle.</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'y',
                    description: '<p>y-coordinate of the centre of the circle.</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'd',
                    description: '<p>diameter of the circle.</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Shape'
              },
              line: {
                name: 'line',
                class: 'p5',
                module: 'Shape',
                overloads: [
                  {
                    params: [
                      {
                        name: 'x1',
                        description: '<p>the x-coordinate of the first point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y1',
                        description: '<p>the y-coordinate of the first point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'x2',
                        description: '<p>the x-coordinate of the second point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y2',
                        description: '<p>the y-coordinate of the second point</p>\n',
                        type: 'Number'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'x1',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'y1',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'z1',
                        description: '<p>the z-coordinate of the first point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'x2',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'y2',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'z2',
                        description: '<p>the z-coordinate of the second point</p>\n',
                        type: 'Number'
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              point: {
                name: 'point',
                class: 'p5',
                module: 'Shape',
                overloads: [
                  {
                    params: [
                      {
                        name: 'x',
                        description: '<p>the x-coordinate</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y',
                        description: '<p>the y-coordinate</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'z',
                        description: '<p>the z-coordinate (for WebGL mode)</p>\n',
                        type: 'Number',
                        optional: true
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'coordinate_vector',
                        description: '<p>the coordinate vector</p>\n',
                        type: 'p5.Vector'
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              quad: {
                name: 'quad',
                class: 'p5',
                module: 'Shape',
                overloads: [
                  {
                    params: [
                      {
                        name: 'x1',
                        description: '<p>the x-coordinate of the first point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y1',
                        description: '<p>the y-coordinate of the first point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'x2',
                        description: '<p>the x-coordinate of the second point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y2',
                        description: '<p>the y-coordinate of the second point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'x3',
                        description: '<p>the x-coordinate of the third point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y3',
                        description: '<p>the y-coordinate of the third point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'x4',
                        description: '<p>the x-coordinate of the fourth point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y4',
                        description: '<p>the y-coordinate of the fourth point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'detailX',
                        description: '<p>number of segments in the x-direction</p>\n',
                        type: 'Integer',
                        optional: true
                      },
                      {
                        name: 'detailY',
                        description: '<p>number of segments in the y-direction</p>\n',
                        type: 'Integer',
                        optional: true
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'x1',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'y1',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'z1',
                        description: '<p>the z-coordinate of the first point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'x2',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'y2',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'z2',
                        description: '<p>the z-coordinate of the second point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'x3',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'y3',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'z3',
                        description: '<p>the z-coordinate of the third point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'x4',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'y4',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'z4',
                        description: '<p>the z-coordinate of the fourth point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'detailX',
                        description: '',
                        type: 'Integer',
                        optional: true
                      },
                      {
                        name: 'detailY',
                        description: '',
                        type: 'Integer',
                        optional: true
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              rect: {
                name: 'rect',
                class: 'p5',
                module: 'Shape',
                overloads: [
                  {
                    params: [
                      {
                        name: 'x',
                        description: '<p>x-coordinate of the rectangle.</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y',
                        description: '<p>y-coordinate of the rectangle.</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'w',
                        description: '<p>width of the rectangle.</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'h',
                        description: '<p>height of the rectangle.</p>\n',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'tl',
                        description: '<p>optional radius of top-left corner.</p>\n',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'tr',
                        description: '<p>optional radius of top-right corner.</p>\n',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'br',
                        description: '<p>optional radius of bottom-right corner.</p>\n',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'bl',
                        description: '<p>optional radius of bottom-left corner.</p>\n',
                        type: 'Number',
                        optional: true
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'x',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'y',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'w',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'h',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'detailX',
                        description:
                          '<p>number of segments in the x-direction (for WebGL mode)</p>\n',
                        type: 'Integer',
                        optional: true
                      },
                      {
                        name: 'detailY',
                        description:
                          '<p>number of segments in the y-direction (for WebGL mode)</p>\n',
                        type: 'Integer',
                        optional: true
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              square: {
                name: 'square',
                params: [
                  {
                    name: 'x',
                    description: '<p>x-coordinate of the square.</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'y',
                    description: '<p>y-coordinate of the square.</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 's',
                    description: '<p>side size of the square.</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'tl',
                    description: '<p>optional radius of top-left corner.</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'tr',
                    description: '<p>optional radius of top-right corner.</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'br',
                    description: '<p>optional radius of bottom-right corner.</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'bl',
                    description: '<p>optional radius of bottom-left corner.</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Shape'
              },
              triangle: {
                name: 'triangle',
                params: [
                  {
                    name: 'x1',
                    description: '<p>x-coordinate of the first point</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'y1',
                    description: '<p>y-coordinate of the first point</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'x2',
                    description: '<p>x-coordinate of the second point</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'y2',
                    description: '<p>y-coordinate of the second point</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'x3',
                    description: '<p>x-coordinate of the third point</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'y3',
                    description: '<p>y-coordinate of the third point</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Shape'
              },
              ellipseMode: {
                name: 'ellipseMode',
                params: [
                  {
                    name: 'mode',
                    description: '<p>either CENTER, RADIUS, CORNER, or CORNERS</p>\n',
                    type: 'Constant'
                  }
                ],
                class: 'p5',
                module: 'Shape'
              },
              noSmooth: {
                name: 'noSmooth',
                class: 'p5',
                module: 'Shape'
              },
              rectMode: {
                name: 'rectMode',
                params: [
                  {
                    name: 'mode',
                    description: '<p>either CORNER, CORNERS, CENTER, or RADIUS</p>\n',
                    type: 'Constant'
                  }
                ],
                class: 'p5',
                module: 'Shape'
              },
              smooth: {
                name: 'smooth',
                class: 'p5',
                module: 'Shape'
              },
              strokeCap: {
                name: 'strokeCap',
                params: [
                  {
                    name: 'cap',
                    description: '<p>either ROUND, SQUARE or PROJECT</p>\n',
                    type: 'Constant'
                  }
                ],
                class: 'p5',
                module: 'Shape'
              },
              strokeJoin: {
                name: 'strokeJoin',
                params: [
                  {
                    name: 'join',
                    description: '<p>either MITER, BEVEL, ROUND</p>\n',
                    type: 'Constant'
                  }
                ],
                class: 'p5',
                module: 'Shape'
              },
              strokeWeight: {
                name: 'strokeWeight',
                params: [
                  {
                    name: 'weight',
                    description: '<p>the weight of the stroke (in pixels)</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Shape'
              },
              bezier: {
                name: 'bezier',
                class: 'p5',
                module: 'Shape',
                overloads: [
                  {
                    params: [
                      {
                        name: 'x1',
                        description: '<p>x-coordinate for the first anchor point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y1',
                        description: '<p>y-coordinate for the first anchor point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'x2',
                        description: '<p>x-coordinate for the first control point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y2',
                        description: '<p>y-coordinate for the first control point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'x3',
                        description: '<p>x-coordinate for the second control point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y3',
                        description: '<p>y-coordinate for the second control point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'x4',
                        description: '<p>x-coordinate for the second anchor point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y4',
                        description: '<p>y-coordinate for the second anchor point</p>\n',
                        type: 'Number'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'x1',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'y1',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'z1',
                        description: '<p>z-coordinate for the first anchor point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'x2',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'y2',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'z2',
                        description: '<p>z-coordinate for the first control point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'x3',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'y3',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'z3',
                        description: '<p>z-coordinate for the second control point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'x4',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'y4',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'z4',
                        description: '<p>z-coordinate for the second anchor point</p>\n',
                        type: 'Number'
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              bezierDetail: {
                name: 'bezierDetail',
                params: [
                  {
                    name: 'detail',
                    description: '<p>resolution of the curves</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Shape'
              },
              bezierPoint: {
                name: 'bezierPoint',
                params: [
                  {
                    name: 'a',
                    description: '<p>coordinate of first point on the curve</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'b',
                    description: '<p>coordinate of first control point</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'c',
                    description: '<p>coordinate of second control point</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'd',
                    description: '<p>coordinate of second point on the curve</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 't',
                    description: '<p>value between 0 and 1</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Shape'
              },
              bezierTangent: {
                name: 'bezierTangent',
                params: [
                  {
                    name: 'a',
                    description: '<p>coordinate of first point on the curve</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'b',
                    description: '<p>coordinate of first control point</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'c',
                    description: '<p>coordinate of second control point</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'd',
                    description: '<p>coordinate of second point on the curve</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 't',
                    description: '<p>value between 0 and 1</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Shape'
              },
              curve: {
                name: 'curve',
                class: 'p5',
                module: 'Shape',
                overloads: [
                  {
                    params: [
                      {
                        name: 'x1',
                        description:
                          '<p>x-coordinate for the beginning control point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y1',
                        description:
                          '<p>y-coordinate for the beginning control point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'x2',
                        description: '<p>x-coordinate for the first point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y2',
                        description: '<p>y-coordinate for the first point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'x3',
                        description: '<p>x-coordinate for the second point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y3',
                        description: '<p>y-coordinate for the second point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'x4',
                        description: '<p>x-coordinate for the ending control point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y4',
                        description: '<p>y-coordinate for the ending control point</p>\n',
                        type: 'Number'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'x1',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'y1',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'z1',
                        description:
                          '<p>z-coordinate for the beginning control point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'x2',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'y2',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'z2',
                        description: '<p>z-coordinate for the first point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'x3',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'y3',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'z3',
                        description: '<p>z-coordinate for the second point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'x4',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'y4',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'z4',
                        description: '<p>z-coordinate for the ending control point</p>\n',
                        type: 'Number'
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              curveDetail: {
                name: 'curveDetail',
                params: [
                  {
                    name: 'resolution',
                    description: '<p>resolution of the curves</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Shape'
              },
              curveTightness: {
                name: 'curveTightness',
                params: [
                  {
                    name: 'amount',
                    description:
                      '<p>amount of deformation from the original vertices</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Shape'
              },
              curvePoint: {
                name: 'curvePoint',
                params: [
                  {
                    name: 'a',
                    description: '<p>coordinate of first control point of the curve</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'b',
                    description: '<p>coordinate of first point</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'c',
                    description: '<p>coordinate of second point</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'd',
                    description: '<p>coordinate of second control point</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 't',
                    description: '<p>value between 0 and 1</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Shape'
              },
              curveTangent: {
                name: 'curveTangent',
                params: [
                  {
                    name: 'a',
                    description: '<p>coordinate of first control point</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'b',
                    description: '<p>coordinate of first point on the curve</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'c',
                    description: '<p>coordinate of second point on the curve</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'd',
                    description: '<p>coordinate of second conrol point</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 't',
                    description: '<p>value between 0 and 1</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Shape'
              },
              beginContour: {
                name: 'beginContour',
                class: 'p5',
                module: 'Shape'
              },
              beginShape: {
                name: 'beginShape',
                params: [
                  {
                    name: 'kind',
                    description:
                      '<p>either POINTS, LINES, TRIANGLES, TRIANGLE_FAN\n                               TRIANGLE_STRIP, QUADS, QUAD_STRIP or TESS</p>\n',
                    type: 'Constant',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Shape'
              },
              bezierVertex: {
                name: 'bezierVertex',
                class: 'p5',
                module: 'Shape',
                overloads: [
                  {
                    params: [
                      {
                        name: 'x2',
                        description: '<p>x-coordinate for the first control point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y2',
                        description: '<p>y-coordinate for the first control point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'x3',
                        description: '<p>x-coordinate for the second control point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y3',
                        description: '<p>y-coordinate for the second control point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'x4',
                        description: '<p>x-coordinate for the anchor point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y4',
                        description: '<p>y-coordinate for the anchor point</p>\n',
                        type: 'Number'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'x2',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'y2',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'z2',
                        description:
                          '<p>z-coordinate for the first control point (for WebGL mode)</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'x3',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'y3',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'z3',
                        description:
                          '<p>z-coordinate for the second control point (for WebGL mode)</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'x4',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'y4',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'z4',
                        description:
                          '<p>z-coordinate for the anchor point (for WebGL mode)</p>\n',
                        type: 'Number'
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              curveVertex: {
                name: 'curveVertex',
                class: 'p5',
                module: 'Shape',
                overloads: [
                  {
                    params: [
                      {
                        name: 'x',
                        description: '<p>x-coordinate of the vertex</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y',
                        description: '<p>y-coordinate of the vertex</p>\n',
                        type: 'Number'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'x',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'y',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'z',
                        description: '<p>z-coordinate of the vertex (for WebGL mode)</p>\n',
                        type: 'Number',
                        optional: true
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              endContour: {
                name: 'endContour',
                class: 'p5',
                module: 'Shape'
              },
              endShape: {
                name: 'endShape',
                params: [
                  {
                    name: 'mode',
                    description: '<p>use CLOSE to close the shape</p>\n',
                    type: 'Constant',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Shape'
              },
              quadraticVertex: {
                name: 'quadraticVertex',
                class: 'p5',
                module: 'Shape',
                overloads: [
                  {
                    params: [
                      {
                        name: 'cx',
                        description: '<p>x-coordinate for the control point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'cy',
                        description: '<p>y-coordinate for the control point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'x3',
                        description: '<p>x-coordinate for the anchor point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y3',
                        description: '<p>y-coordinate for the anchor point</p>\n',
                        type: 'Number'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'cx',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'cy',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'cz',
                        description:
                          '<p>z-coordinate for the control point (for WebGL mode)</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'x3',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'y3',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'z3',
                        description:
                          '<p>z-coordinate for the anchor point (for WebGL mode)</p>\n',
                        type: 'Number'
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              vertex: {
                name: 'vertex',
                class: 'p5',
                module: 'Shape',
                overloads: [
                  {
                    params: [
                      {
                        name: 'x',
                        description: '<p>x-coordinate of the vertex</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y',
                        description: '<p>y-coordinate of the vertex</p>\n',
                        type: 'Number'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'x',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'y',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'z',
                        description:
                          '<p>z-coordinate of the vertex.\n                      Defaults to 0 if not specified.</p>\n',
                        type: 'Number'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'x',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'y',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'z',
                        description: '',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'u',
                        description: "<p>the vertex's texture u-coordinate</p>\n",
                        type: 'Number'
                      },
                      {
                        name: 'v',
                        description: "<p>the vertex's texture v-coordinate</p>\n",
                        type: 'Number'
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              normal: {
                name: 'normal',
                class: 'p5',
                module: 'Shape',
                overloads: [
                  {
                    params: [
                      {
                        name: 'vector',
                        description: '<p>A p5.Vector representing the vertex normal.</p>\n',
                        type: 'Vector'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'x',
                        description: '<p>The x component of the vertex normal.</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y',
                        description: '<p>The y component of the vertex normal.</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'z',
                        description: '<p>The z component of the vertex normal.</p>\n',
                        type: 'Number'
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              VERSION: {
                name: 'VERSION',
                class: 'p5',
                module: 'Constants'
              },
              P2D: {
                name: 'P2D',
                class: 'p5',
                module: 'Constants'
              },
              WEBGL: {
                name: 'WEBGL',
                class: 'p5',
                module: 'Constants'
              },
              ARROW: {
                name: 'ARROW',
                class: 'p5',
                module: 'Constants'
              },
              CROSS: {
                name: 'CROSS',
                class: 'p5',
                module: 'Constants'
              },
              HAND: {
                name: 'HAND',
                class: 'p5',
                module: 'Constants'
              },
              MOVE: {
                name: 'MOVE',
                class: 'p5',
                module: 'Constants'
              },
              TEXT: {
                name: 'TEXT',
                class: 'p5',
                module: 'Constants'
              },
              WAIT: {
                name: 'WAIT',
                class: 'p5',
                module: 'Constants'
              },
              HALF_PI: {
                name: 'HALF_PI',
                class: 'p5',
                module: 'Constants'
              },
              PI: {
                name: 'PI',
                class: 'p5',
                module: 'Constants'
              },
              QUARTER_PI: {
                name: 'QUARTER_PI',
                class: 'p5',
                module: 'Constants'
              },
              TAU: {
                name: 'TAU',
                class: 'p5',
                module: 'Constants'
              },
              TWO_PI: {
                name: 'TWO_PI',
                class: 'p5',
                module: 'Constants'
              },
              DEGREES: {
                name: 'DEGREES',
                class: 'p5',
                module: 'Constants'
              },
              RADIANS: {
                name: 'RADIANS',
                class: 'p5',
                module: 'Constants'
              },
              CORNER: {
                name: 'CORNER',
                class: 'p5',
                module: 'Constants'
              },
              CORNERS: {
                name: 'CORNERS',
                class: 'p5',
                module: 'Constants'
              },
              RADIUS: {
                name: 'RADIUS',
                class: 'p5',
                module: 'Constants'
              },
              RIGHT: {
                name: 'RIGHT',
                class: 'p5',
                module: 'Constants'
              },
              LEFT: {
                name: 'LEFT',
                class: 'p5',
                module: 'Constants'
              },
              CENTER: {
                name: 'CENTER',
                class: 'p5',
                module: 'Constants'
              },
              TOP: {
                name: 'TOP',
                class: 'p5',
                module: 'Constants'
              },
              BOTTOM: {
                name: 'BOTTOM',
                class: 'p5',
                module: 'Constants'
              },
              BASELINE: {
                name: 'BASELINE',
                class: 'p5',
                module: 'Constants'
              },
              POINTS: {
                name: 'POINTS',
                class: 'p5',
                module: 'Constants'
              },
              LINES: {
                name: 'LINES',
                class: 'p5',
                module: 'Constants'
              },
              LINE_STRIP: {
                name: 'LINE_STRIP',
                class: 'p5',
                module: 'Constants'
              },
              LINE_LOOP: {
                name: 'LINE_LOOP',
                class: 'p5',
                module: 'Constants'
              },
              TRIANGLES: {
                name: 'TRIANGLES',
                class: 'p5',
                module: 'Constants'
              },
              TRIANGLE_FAN: {
                name: 'TRIANGLE_FAN',
                class: 'p5',
                module: 'Constants'
              },
              TRIANGLE_STRIP: {
                name: 'TRIANGLE_STRIP',
                class: 'p5',
                module: 'Constants'
              },
              QUADS: {
                name: 'QUADS',
                class: 'p5',
                module: 'Constants'
              },
              QUAD_STRIP: {
                name: 'QUAD_STRIP',
                class: 'p5',
                module: 'Constants'
              },
              TESS: {
                name: 'TESS',
                class: 'p5',
                module: 'Constants'
              },
              CLOSE: {
                name: 'CLOSE',
                class: 'p5',
                module: 'Constants'
              },
              OPEN: {
                name: 'OPEN',
                class: 'p5',
                module: 'Constants'
              },
              CHORD: {
                name: 'CHORD',
                class: 'p5',
                module: 'Constants'
              },
              PIE: {
                name: 'PIE',
                class: 'p5',
                module: 'Constants'
              },
              PROJECT: {
                name: 'PROJECT',
                class: 'p5',
                module: 'Constants'
              },
              SQUARE: {
                name: 'SQUARE',
                class: 'p5',
                module: 'Constants'
              },
              ROUND: {
                name: 'ROUND',
                class: 'p5',
                module: 'Constants'
              },
              BEVEL: {
                name: 'BEVEL',
                class: 'p5',
                module: 'Constants'
              },
              MITER: {
                name: 'MITER',
                class: 'p5',
                module: 'Constants'
              },
              RGB: {
                name: 'RGB',
                class: 'p5',
                module: 'Constants'
              },
              HSB: {
                name: 'HSB',
                class: 'p5',
                module: 'Constants'
              },
              HSL: {
                name: 'HSL',
                class: 'p5',
                module: 'Constants'
              },
              AUTO: {
                name: 'AUTO',
                class: 'p5',
                module: 'Constants'
              },
              ALT: {
                name: 'ALT',
                class: 'p5',
                module: 'Constants'
              },
              BACKSPACE: {
                name: 'BACKSPACE',
                class: 'p5',
                module: 'Constants'
              },
              CONTROL: {
                name: 'CONTROL',
                class: 'p5',
                module: 'Constants'
              },
              DELETE: {
                name: 'DELETE',
                class: 'p5',
                module: 'Constants'
              },
              DOWN_ARROW: {
                name: 'DOWN_ARROW',
                class: 'p5',
                module: 'Constants'
              },
              ENTER: {
                name: 'ENTER',
                class: 'p5',
                module: 'Constants'
              },
              ESCAPE: {
                name: 'ESCAPE',
                class: 'p5',
                module: 'Constants'
              },
              LEFT_ARROW: {
                name: 'LEFT_ARROW',
                class: 'p5',
                module: 'Constants'
              },
              OPTION: {
                name: 'OPTION',
                class: 'p5',
                module: 'Constants'
              },
              RETURN: {
                name: 'RETURN',
                class: 'p5',
                module: 'Constants'
              },
              RIGHT_ARROW: {
                name: 'RIGHT_ARROW',
                class: 'p5',
                module: 'Constants'
              },
              SHIFT: {
                name: 'SHIFT',
                class: 'p5',
                module: 'Constants'
              },
              TAB: {
                name: 'TAB',
                class: 'p5',
                module: 'Constants'
              },
              UP_ARROW: {
                name: 'UP_ARROW',
                class: 'p5',
                module: 'Constants'
              },
              BLEND: {
                name: 'BLEND',
                class: 'p5',
                module: 'Constants'
              },
              REMOVE: {
                name: 'REMOVE',
                class: 'p5',
                module: 'Constants'
              },
              ADD: {
                name: 'ADD',
                class: 'p5',
                module: 'Constants'
              },
              DARKEST: {
                name: 'DARKEST',
                class: 'p5',
                module: 'Constants'
              },
              LIGHTEST: {
                name: 'LIGHTEST',
                class: 'p5',
                module: 'Constants'
              },
              DIFFERENCE: {
                name: 'DIFFERENCE',
                class: 'p5',
                module: 'Constants'
              },
              SUBTRACT: {
                name: 'SUBTRACT',
                class: 'p5',
                module: 'Constants'
              },
              EXCLUSION: {
                name: 'EXCLUSION',
                class: 'p5',
                module: 'Constants'
              },
              MULTIPLY: {
                name: 'MULTIPLY',
                class: 'p5',
                module: 'Constants'
              },
              SCREEN: {
                name: 'SCREEN',
                class: 'p5',
                module: 'Constants'
              },
              REPLACE: {
                name: 'REPLACE',
                class: 'p5',
                module: 'Constants'
              },
              OVERLAY: {
                name: 'OVERLAY',
                class: 'p5',
                module: 'Constants'
              },
              HARD_LIGHT: {
                name: 'HARD_LIGHT',
                class: 'p5',
                module: 'Constants'
              },
              SOFT_LIGHT: {
                name: 'SOFT_LIGHT',
                class: 'p5',
                module: 'Constants'
              },
              DODGE: {
                name: 'DODGE',
                class: 'p5',
                module: 'Constants'
              },
              BURN: {
                name: 'BURN',
                class: 'p5',
                module: 'Constants'
              },
              THRESHOLD: {
                name: 'THRESHOLD',
                class: 'p5',
                module: 'Constants'
              },
              GRAY: {
                name: 'GRAY',
                class: 'p5',
                module: 'Constants'
              },
              OPAQUE: {
                name: 'OPAQUE',
                class: 'p5',
                module: 'Constants'
              },
              INVERT: {
                name: 'INVERT',
                class: 'p5',
                module: 'Constants'
              },
              POSTERIZE: {
                name: 'POSTERIZE',
                class: 'p5',
                module: 'Constants'
              },
              DILATE: {
                name: 'DILATE',
                class: 'p5',
                module: 'Constants'
              },
              ERODE: {
                name: 'ERODE',
                class: 'p5',
                module: 'Constants'
              },
              BLUR: {
                name: 'BLUR',
                class: 'p5',
                module: 'Constants'
              },
              NORMAL: {
                name: 'NORMAL',
                class: 'p5',
                module: 'Constants'
              },
              ITALIC: {
                name: 'ITALIC',
                class: 'p5',
                module: 'Constants'
              },
              BOLD: {
                name: 'BOLD',
                class: 'p5',
                module: 'Constants'
              },
              BOLDITALIC: {
                name: 'BOLDITALIC',
                class: 'p5',
                module: 'Constants'
              },
              CHAR: {
                name: 'CHAR',
                class: 'p5',
                module: 'Constants'
              },
              WORD: {
                name: 'WORD',
                class: 'p5',
                module: 'Constants'
              },
              LINEAR: {
                name: 'LINEAR',
                class: 'p5',
                module: 'Constants'
              },
              QUADRATIC: {
                name: 'QUADRATIC',
                class: 'p5',
                module: 'Constants'
              },
              BEZIER: {
                name: 'BEZIER',
                class: 'p5',
                module: 'Constants'
              },
              CURVE: {
                name: 'CURVE',
                class: 'p5',
                module: 'Constants'
              },
              STROKE: {
                name: 'STROKE',
                class: 'p5',
                module: 'Constants'
              },
              FILL: {
                name: 'FILL',
                class: 'p5',
                module: 'Constants'
              },
              TEXTURE: {
                name: 'TEXTURE',
                class: 'p5',
                module: 'Constants'
              },
              IMMEDIATE: {
                name: 'IMMEDIATE',
                class: 'p5',
                module: 'Constants'
              },
              IMAGE: {
                name: 'IMAGE',
                class: 'p5',
                module: 'Constants'
              },
              NEAREST: {
                name: 'NEAREST',
                class: 'p5',
                module: 'Constants'
              },
              REPEAT: {
                name: 'REPEAT',
                class: 'p5',
                module: 'Constants'
              },
              CLAMP: {
                name: 'CLAMP',
                class: 'p5',
                module: 'Constants'
              },
              MIRROR: {
                name: 'MIRROR',
                class: 'p5',
                module: 'Constants'
              },
              LANDSCAPE: {
                name: 'LANDSCAPE',
                class: 'p5',
                module: 'Constants'
              },
              PORTRAIT: {
                name: 'PORTRAIT',
                class: 'p5',
                module: 'Constants'
              },
              GRID: {
                name: 'GRID',
                class: 'p5',
                module: 'Constants'
              },
              AXES: {
                name: 'AXES',
                class: 'p5',
                module: 'Constants'
              },
              LABEL: {
                name: 'LABEL',
                class: 'p5',
                module: 'Constants'
              },
              FALLBACK: {
                name: 'FALLBACK',
                class: 'p5',
                module: 'Constants'
              },
              print: {
                name: 'print',
                params: [
                  {
                    name: 'contents',
                    description:
                      '<p>any combination of Number, String, Object, Boolean,\n                      Array to print</p>\n',
                    type: 'Any'
                  }
                ],
                class: 'p5',
                module: 'Environment'
              },
              frameCount: {
                name: 'frameCount',
                class: 'p5',
                module: 'Environment'
              },
              deltaTime: {
                name: 'deltaTime',
                class: 'p5',
                module: 'Environment'
              },
              focused: {
                name: 'focused',
                class: 'p5',
                module: 'Environment'
              },
              cursor: {
                name: 'cursor',
                params: [
                  {
                    name: 'type',
                    description:
                      "<p>Built-In: either ARROW, CROSS, HAND, MOVE, TEXT and WAIT\n                              Native CSS properties: 'grab', 'progress', 'cell' etc.\n                              External: path for cursor's images\n                              (Allowed File extensions: .cur, .gif, .jpg, .jpeg, .png)\n                              For more information on Native CSS cursors and url visit:\n                              <a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/cursor\">https://developer.mozilla.org/en-US/docs/Web/CSS/cursor</a></p>\n",
                    type: 'String|Constant'
                  },
                  {
                    name: 'x',
                    description:
                      '<p>the horizontal active spot of the cursor (must be less than 32)</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'y',
                    description:
                      '<p>the vertical active spot of the cursor (must be less than 32)</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Environment'
              },
              frameRate: {
                name: 'frameRate',
                class: 'p5',
                module: 'Environment',
                overloads: [
                  {
                    params: [
                      {
                        name: 'fps',
                        description:
                          '<p>number of frames to be displayed every second</p>\n',
                        type: 'Number'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: []
                  }
                ]
              },
              noCursor: {
                name: 'noCursor',
                class: 'p5',
                module: 'Environment'
              },
              displayWidth: {
                name: 'displayWidth',
                class: 'p5',
                module: 'Environment'
              },
              displayHeight: {
                name: 'displayHeight',
                class: 'p5',
                module: 'Environment'
              },
              windowWidth: {
                name: 'windowWidth',
                class: 'p5',
                module: 'Environment'
              },
              windowHeight: {
                name: 'windowHeight',
                class: 'p5',
                module: 'Environment'
              },
              windowResized: {
                name: 'windowResized',
                params: [
                  {
                    name: 'event',
                    description: '<p>optional Event callback argument.</p>\n',
                    type: 'Object',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Environment'
              },
              width: {
                name: 'width',
                class: 'p5',
                module: 'Environment'
              },
              height: {
                name: 'height',
                class: 'p5',
                module: 'Environment'
              },
              fullscreen: {
                name: 'fullscreen',
                params: [
                  {
                    name: 'val',
                    description:
                      '<p>whether the sketch should be in fullscreen mode\nor not</p>\n',
                    type: 'Boolean',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Environment'
              },
              pixelDensity: {
                name: 'pixelDensity',
                class: 'p5',
                module: 'Environment',
                overloads: [
                  {
                    params: [
                      {
                        name: 'val',
                        description: '<p>whether or how much the sketch should scale</p>\n',
                        type: 'Number'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: []
                  }
                ]
              },
              displayDensity: {
                name: 'displayDensity',
                class: 'p5',
                module: 'Environment'
              },
              getURL: {
                name: 'getURL',
                class: 'p5',
                module: 'Environment'
              },
              getURLPath: {
                name: 'getURLPath',
                class: 'p5',
                module: 'Environment'
              },
              getURLParams: {
                name: 'getURLParams',
                class: 'p5',
                module: 'Environment'
              },
              preload: {
                name: 'preload',
                class: 'p5',
                module: 'Structure'
              },
              setup: {
                name: 'setup',
                class: 'p5',
                module: 'Structure'
              },
              draw: {
                name: 'draw',
                class: 'p5',
                module: 'Structure'
              },
              remove: {
                name: 'remove',
                class: 'p5',
                module: 'Structure'
              },
              disableFriendlyErrors: {
                name: 'disableFriendlyErrors',
                class: 'p5',
                module: 'Structure'
              },
              let: {
                name: 'let',
                class: 'p5',
                module: 'Foundation'
              },
              const: {
                name: 'const',
                class: 'p5',
                module: 'Foundation'
              },
              '===': {
                name: '===',
                class: 'p5',
                module: 'Foundation'
              },
              '>': {
                name: '>',
                class: 'p5',
                module: 'Foundation'
              },
              '>=': {
                name: '>=',
                class: 'p5',
                module: 'Foundation'
              },
              '<': {
                name: '<',
                class: 'p5',
                module: 'Foundation'
              },
              '<=': {
                name: '<=',
                class: 'p5',
                module: 'Foundation'
              },
              'if-else': {
                name: 'if-else',
                class: 'p5',
                module: 'Foundation'
              },
              function: {
                name: 'function',
                class: 'p5',
                module: 'Foundation'
              },
              return: {
                name: 'return',
                class: 'p5',
                module: 'Foundation'
              },
              boolean: {
                name: 'boolean',
                params: [
                  {
                    name: 'n',
                    description: '<p>value to parse</p>\n',
                    type: 'String|Boolean|Number|Array'
                  }
                ],
                class: 'p5',
                module: 'Data'
              },
              string: {
                name: 'string',
                class: 'p5',
                module: 'Foundation'
              },
              number: {
                name: 'number',
                class: 'p5',
                module: 'Foundation'
              },
              object: {
                name: 'object',
                class: 'p5',
                module: 'Foundation'
              },
              class: {
                name: 'class',
                class: 'p5',
                module: 'Foundation'
              },
              for: {
                name: 'for',
                class: 'p5',
                module: 'Foundation'
              },
              while: {
                name: 'while',
                class: 'p5',
                module: 'Foundation'
              },
              createCanvas: {
                name: 'createCanvas',
                params: [
                  {
                    name: 'w',
                    description: '<p>width of the canvas</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'h',
                    description: '<p>height of the canvas</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'renderer',
                    description: '<p>either P2D or WEBGL</p>\n',
                    type: 'Constant',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Rendering'
              },
              resizeCanvas: {
                name: 'resizeCanvas',
                params: [
                  {
                    name: 'w',
                    description: '<p>width of the canvas</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'h',
                    description: '<p>height of the canvas</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'noRedraw',
                    description: "<p>don't redraw the canvas immediately</p>\n",
                    type: 'Boolean',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Rendering'
              },
              noCanvas: {
                name: 'noCanvas',
                class: 'p5',
                module: 'Rendering'
              },
              createGraphics: {
                name: 'createGraphics',
                params: [
                  {
                    name: 'w',
                    description: '<p>width of the offscreen graphics buffer</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'h',
                    description: '<p>height of the offscreen graphics buffer</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'renderer',
                    description:
                      '<p>either P2D or WEBGL\n                              undefined defaults to p2d</p>\n',
                    type: 'Constant',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Rendering'
              },
              blendMode: {
                name: 'blendMode',
                params: [
                  {
                    name: 'mode',
                    description:
                      '<p>blend mode to set for canvas.\n               either BLEND, DARKEST, LIGHTEST, DIFFERENCE, MULTIPLY,\n               EXCLUSION, SCREEN, REPLACE, OVERLAY, HARD_LIGHT,\n               SOFT_LIGHT, DODGE, BURN, ADD, REMOVE or SUBTRACT</p>\n',
                    type: 'Constant'
                  }
                ],
                class: 'p5',
                module: 'Rendering'
              },
              drawingContext: {
                name: 'drawingContext',
                class: 'p5',
                module: 'Rendering'
              },
              noLoop: {
                name: 'noLoop',
                class: 'p5',
                module: 'Structure'
              },
              loop: {
                name: 'loop',
                class: 'p5',
                module: 'Structure'
              },
              isLooping: {
                name: 'isLooping',
                class: 'p5',
                module: 'Structure'
              },
              push: {
                name: 'push',
                class: 'p5',
                module: 'Structure'
              },
              pop: {
                name: 'pop',
                class: 'p5',
                module: 'Structure'
              },
              redraw: {
                name: 'redraw',
                params: [
                  {
                    name: 'n',
                    description: '<p>Redraw for n-times. The default value is 1.</p>\n',
                    type: 'Integer',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Structure'
              },
              p5: {
                name: 'p5',
                params: [
                  {
                    name: 'sketch',
                    description: '<p>a function containing a p5.js sketch</p>\n',
                    type: 'Object'
                  },
                  {
                    name: 'node',
                    description:
                      '<p>ID or pointer to HTML DOM node to contain sketch in</p>\n',
                    type: 'String|Object'
                  }
                ],
                class: 'p5',
                module: 'Structure'
              },
              applyMatrix: {
                name: 'applyMatrix',
                params: [
                  {
                    name: 'a',
                    description:
                      '<p>numbers which define the 2x3 matrix to be multiplied, or an array of numbers</p>\n',
                    type: 'Number|Array'
                  },
                  {
                    name: 'b',
                    description:
                      '<p>numbers which define the 2x3 matrix to be multiplied</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'c',
                    description:
                      '<p>numbers which define the 2x3 matrix to be multiplied</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'd',
                    description:
                      '<p>numbers which define the 2x3 matrix to be multiplied</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'e',
                    description:
                      '<p>numbers which define the 2x3 matrix to be multiplied</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'f',
                    description:
                      '<p>numbers which define the 2x3 matrix to be multiplied</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Transform'
              },
              resetMatrix: {
                name: 'resetMatrix',
                class: 'p5',
                module: 'Transform'
              },
              rotate: {
                name: 'rotate',
                params: [
                  {
                    name: 'angle',
                    description:
                      '<p>the angle of rotation, specified in radians\n                       or degrees, depending on current angleMode</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'axis',
                    description: '<p>(in 3d) the axis to rotate around</p>\n',
                    type: 'p5.Vector|Number[]',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Transform'
              },
              rotateX: {
                name: 'rotateX',
                params: [
                  {
                    name: 'angle',
                    description:
                      '<p>the angle of rotation, specified in radians\n                       or degrees, depending on current angleMode</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Transform'
              },
              rotateY: {
                name: 'rotateY',
                params: [
                  {
                    name: 'angle',
                    description:
                      '<p>the angle of rotation, specified in radians\n                       or degrees, depending on current angleMode</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Transform'
              },
              rotateZ: {
                name: 'rotateZ',
                params: [
                  {
                    name: 'angle',
                    description:
                      '<p>the angle of rotation, specified in radians\n                       or degrees, depending on current angleMode</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Transform'
              },
              scale: {
                name: 'scale',
                class: 'p5',
                module: 'Transform',
                overloads: [
                  {
                    params: [
                      {
                        name: 's',
                        description:
                          '<p>percent to scale the object, or percentage to\n                     scale the object in the x-axis if multiple arguments\n                     are given</p>\n',
                        type: 'Number|p5.Vector|Number[]'
                      },
                      {
                        name: 'y',
                        description: '<p>percent to scale the object in the y-axis</p>\n',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'z',
                        description:
                          '<p>percent to scale the object in the z-axis (webgl only)</p>\n',
                        type: 'Number',
                        optional: true
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'scales',
                        description: '<p>per-axis percents to scale the object</p>\n',
                        type: 'p5.Vector|Number[]'
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              shearX: {
                name: 'shearX',
                params: [
                  {
                    name: 'angle',
                    description:
                      '<p>angle of shear specified in radians or degrees,\n                       depending on current angleMode</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Transform'
              },
              shearY: {
                name: 'shearY',
                params: [
                  {
                    name: 'angle',
                    description:
                      '<p>angle of shear specified in radians or degrees,\n                       depending on current angleMode</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Transform'
              },
              translate: {
                name: 'translate',
                class: 'p5',
                module: 'Transform',
                overloads: [
                  {
                    params: [
                      {
                        name: 'x',
                        description: '<p>left/right translation</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y',
                        description: '<p>up/down translation</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'z',
                        description: '<p>forward/backward translation (webgl only)</p>\n',
                        type: 'Number',
                        optional: true
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'vector',
                        description: '<p>the vector to translate by</p>\n',
                        type: 'p5.Vector'
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              storeItem: {
                name: 'storeItem',
                params: [
                  {
                    name: 'key',
                    description: '',
                    type: 'String'
                  },
                  {
                    name: 'value',
                    description: '',
                    type: 'String|Number|Object|Boolean|p5.Color|p5.Vector'
                  }
                ],
                class: 'p5',
                module: 'Data'
              },
              getItem: {
                name: 'getItem',
                params: [
                  {
                    name: 'key',
                    description:
                      '<p>name that you wish to use to store in local storage</p>\n',
                    type: 'String'
                  }
                ],
                class: 'p5',
                module: 'Data'
              },
              clearStorage: {
                name: 'clearStorage',
                class: 'p5',
                module: 'Data'
              },
              removeItem: {
                name: 'removeItem',
                params: [
                  {
                    name: 'key',
                    description: '',
                    type: 'String'
                  }
                ],
                class: 'p5',
                module: 'Data'
              },
              createStringDict: {
                name: 'createStringDict',
                class: 'p5',
                module: 'Data',
                overloads: [
                  {
                    params: [
                      {
                        name: 'key',
                        description: '',
                        type: 'String'
                      },
                      {
                        name: 'value',
                        description: '',
                        type: 'String'
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'object',
                        description: '<p>object</p>\n',
                        type: 'Object'
                      }
                    ]
                  }
                ]
              },
              createNumberDict: {
                name: 'createNumberDict',
                class: 'p5',
                module: 'Data',
                overloads: [
                  {
                    params: [
                      {
                        name: 'key',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'value',
                        description: '',
                        type: 'Number'
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'object',
                        description: '<p>object</p>\n',
                        type: 'Object'
                      }
                    ]
                  }
                ]
              },
              select: {
                name: 'select',
                params: [
                  {
                    name: 'selectors',
                    description: '<p>CSS selector string of element to search for</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'container',
                    description:
                      '<p>CSS selector string, <a href="#/p5.Element">p5.Element</a>, or\n                                            HTML element to search within</p>\n',
                    type: 'String|p5.Element|HTMLElement',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'DOM'
              },
              selectAll: {
                name: 'selectAll',
                params: [
                  {
                    name: 'selectors',
                    description: '<p>CSS selector string of elements to search for</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'container',
                    description:
                      '<p>CSS selector string, <a href="#/p5.Element">p5.Element</a>\n                                            , or HTML element to search within</p>\n',
                    type: 'String|p5.Element|HTMLElement',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'DOM'
              },
              removeElements: {
                name: 'removeElements',
                class: 'p5',
                module: 'DOM'
              },
              changed: {
                name: 'changed',
                params: [
                  {
                    name: 'fxn',
                    description:
                      '<p>function to be fired when the value of\n                               an element changes.\n                               if <code>false</code> is passed instead, the previously\n                               firing function will no longer fire.</p>\n',
                    type: 'Function|Boolean'
                  }
                ],
                class: 'p5',
                module: 'DOM'
              },
              input: {
                name: 'input',
                params: [
                  {
                    name: 'fxn',
                    description:
                      '<p>function to be fired when any user input is\n                               detected within the element.\n                               if <code>false</code> is passed instead, the previously\n                               firing function will no longer fire.</p>\n',
                    type: 'Function|Boolean'
                  }
                ],
                class: 'p5',
                module: 'DOM'
              },
              createDiv: {
                name: 'createDiv',
                params: [
                  {
                    name: 'html',
                    description: '<p>inner HTML for element created</p>\n',
                    type: 'String',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'DOM'
              },
              createP: {
                name: 'createP',
                params: [
                  {
                    name: 'html',
                    description: '<p>inner HTML for element created</p>\n',
                    type: 'String',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'DOM'
              },
              createSpan: {
                name: 'createSpan',
                params: [
                  {
                    name: 'html',
                    description: '<p>inner HTML for element created</p>\n',
                    type: 'String',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'DOM'
              },
              createImg: {
                name: 'createImg',
                class: 'p5',
                module: 'DOM',
                overloads: [
                  {
                    params: [
                      {
                        name: 'src',
                        description: '<p>src path or url for image</p>\n',
                        type: 'String'
                      },
                      {
                        name: 'alt',
                        description:
                          '<p><a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Img#Attributes">alternate text</a> to be used if image does not load. You can use also an empty string (<code>""</code>) if that an image is not intended to be viewed.</p>\n',
                        type: 'String'
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'src',
                        description: '',
                        type: 'String'
                      },
                      {
                        name: 'alt',
                        description: '',
                        type: 'String'
                      },
                      {
                        name: 'crossOrigin',
                        description:
                          '<p><a href="https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes">crossOrigin property</a> of the <code>img</code> element; use either \'anonymous\' or \'use-credentials\' to retrieve the image with cross-origin access (for later use with <code>canvas</code>. if an empty string(<code>""</code>) is passed, CORS is not used</p>\n',
                        type: 'String'
                      },
                      {
                        name: 'successCallback',
                        description:
                          '<p>callback to be called once image data is loaded with the <a href="#/p5.Element">p5.Element</a> as argument</p>\n',
                        type: 'Function',
                        optional: true
                      }
                    ]
                  }
                ]
              },
              createA: {
                name: 'createA',
                params: [
                  {
                    name: 'href',
                    description: '<p>url of page to link to</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'html',
                    description: '<p>inner html of link element to display</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'target',
                    description:
                      '<p>target where new link should open,\n                            could be _blank, _self, _parent, _top.</p>\n',
                    type: 'String',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'DOM'
              },
              createSlider: {
                name: 'createSlider',
                params: [
                  {
                    name: 'min',
                    description: '<p>minimum value of the slider</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'max',
                    description: '<p>maximum value of the slider</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'value',
                    description: '<p>default value of the slider</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'step',
                    description:
                      '<p>step size for each tick of the slider (if step is set to 0, the slider will move continuously from the minimum to the maximum value)</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'DOM'
              },
              createButton: {
                name: 'createButton',
                params: [
                  {
                    name: 'label',
                    description: '<p>label displayed on the button</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'value',
                    description: '<p>value of the button</p>\n',
                    type: 'String',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'DOM'
              },
              createCheckbox: {
                name: 'createCheckbox',
                params: [
                  {
                    name: 'label',
                    description: '<p>label displayed after checkbox</p>\n',
                    type: 'String',
                    optional: true
                  },
                  {
                    name: 'value',
                    description:
                      '<p>value of the checkbox; checked is true, unchecked is false</p>\n',
                    type: 'Boolean',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'DOM'
              },
              createSelect: {
                name: 'createSelect',
                class: 'p5',
                module: 'DOM',
                overloads: [
                  {
                    params: [
                      {
                        name: 'multiple',
                        description:
                          '<p>true if dropdown should support multiple selections</p>\n',
                        type: 'Boolean',
                        optional: true
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'existing',
                        description: '<p>DOM select element</p>\n',
                        type: 'Object'
                      }
                    ]
                  }
                ]
              },
              createRadio: {
                name: 'createRadio',
                class: 'p5',
                module: 'DOM',
                overloads: [
                  {
                    params: [
                      {
                        name: 'containerElement',
                        description:
                          '<p>An container HTML Element either a div\nor span inside which all existing radio inputs will be considered as options.</p>\n',
                        type: 'Object'
                      },
                      {
                        name: 'name',
                        description: '<p>A name parameter for each Input Element.</p>\n',
                        type: 'String',
                        optional: true
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'name',
                        description: '',
                        type: 'String'
                      }
                    ]
                  },
                  {
                    params: []
                  }
                ]
              },
              createColorPicker: {
                name: 'createColorPicker',
                params: [
                  {
                    name: 'value',
                    description: '<p>default color of element</p>\n',
                    type: 'String|p5.Color',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'DOM'
              },
              createInput: {
                name: 'createInput',
                class: 'p5',
                module: 'DOM',
                overloads: [
                  {
                    params: [
                      {
                        name: 'value',
                        description: '<p>default value of the input box</p>\n',
                        type: 'String'
                      },
                      {
                        name: 'type',
                        description:
                          '<p>type of text, ie text, password etc. Defaults to text.\n  Needs a value to be specified first.</p>\n',
                        type: 'String',
                        optional: true
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'value',
                        description: '',
                        type: 'String',
                        optional: true
                      }
                    ]
                  }
                ]
              },
              createFileInput: {
                name: 'createFileInput',
                params: [
                  {
                    name: 'callback',
                    description: '<p>callback function for when a file is loaded</p>\n',
                    type: 'Function'
                  },
                  {
                    name: 'multiple',
                    description:
                      '<p>optional, to allow multiple files to be selected</p>\n',
                    type: 'Boolean',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'DOM'
              },
              createVideo: {
                name: 'createVideo',
                params: [
                  {
                    name: 'src',
                    description:
                      '<p>path to a video file, or array of paths for\n                            supporting different browsers</p>\n',
                    type: 'String|String[]'
                  },
                  {
                    name: 'callback',
                    description:
                      "<p>callback function to be called upon\n                            'canplaythrough' event fire, that is, when the\n                            browser can play the media, and estimates that\n                            enough data has been loaded to play the media\n                            up to its end without having to stop for\n                            further buffering of content</p>\n",
                    type: 'Function',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'DOM'
              },
              createAudio: {
                name: 'createAudio',
                params: [
                  {
                    name: 'src',
                    description:
                      '<p>path to an audio file, or array of paths\n                            for supporting different browsers</p>\n',
                    type: 'String|String[]',
                    optional: true
                  },
                  {
                    name: 'callback',
                    description:
                      "<p>callback function to be called upon\n                            'canplaythrough' event fire, that is, when the\n                            browser can play the media, and estimates that\n                            enough data has been loaded to play the media\n                            up to its end without having to stop for\n                            further buffering of content</p>\n",
                    type: 'Function',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'DOM'
              },
              VIDEO: {
                name: 'VIDEO',
                class: 'p5',
                module: 'DOM'
              },
              AUDIO: {
                name: 'AUDIO',
                class: 'p5',
                module: 'DOM'
              },
              createCapture: {
                name: 'createCapture',
                params: [
                  {
                    name: 'type',
                    description:
                      '<p>type of capture, either VIDEO or\n                                  AUDIO if none specified, default both,\n                                  or a Constraints object</p>\n',
                    type: 'String|Constant|Object'
                  },
                  {
                    name: 'callback',
                    description:
                      '<p>function to be called once\n                                  stream has loaded</p>\n',
                    type: 'Function',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'DOM'
              },
              createElement: {
                name: 'createElement',
                params: [
                  {
                    name: 'tag',
                    description: '<p>tag for the new element</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'content',
                    description: '<p>html content to be inserted into the element</p>\n',
                    type: 'String',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'DOM'
              },
              deviceOrientation: {
                name: 'deviceOrientation',
                class: 'p5',
                module: 'Events'
              },
              accelerationX: {
                name: 'accelerationX',
                class: 'p5',
                module: 'Events'
              },
              accelerationY: {
                name: 'accelerationY',
                class: 'p5',
                module: 'Events'
              },
              accelerationZ: {
                name: 'accelerationZ',
                class: 'p5',
                module: 'Events'
              },
              pAccelerationX: {
                name: 'pAccelerationX',
                class: 'p5',
                module: 'Events'
              },
              pAccelerationY: {
                name: 'pAccelerationY',
                class: 'p5',
                module: 'Events'
              },
              pAccelerationZ: {
                name: 'pAccelerationZ',
                class: 'p5',
                module: 'Events'
              },
              rotationX: {
                name: 'rotationX',
                class: 'p5',
                module: 'Events'
              },
              rotationY: {
                name: 'rotationY',
                class: 'p5',
                module: 'Events'
              },
              rotationZ: {
                name: 'rotationZ',
                class: 'p5',
                module: 'Events'
              },
              pRotationX: {
                name: 'pRotationX',
                class: 'p5',
                module: 'Events'
              },
              pRotationY: {
                name: 'pRotationY',
                class: 'p5',
                module: 'Events'
              },
              pRotationZ: {
                name: 'pRotationZ',
                class: 'p5',
                module: 'Events'
              },
              turnAxis: {
                name: 'turnAxis',
                class: 'p5',
                module: 'Events'
              },
              setMoveThreshold: {
                name: 'setMoveThreshold',
                params: [
                  {
                    name: 'value',
                    description: '<p>The threshold value</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Events'
              },
              setShakeThreshold: {
                name: 'setShakeThreshold',
                params: [
                  {
                    name: 'value',
                    description: '<p>The threshold value</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Events'
              },
              deviceMoved: {
                name: 'deviceMoved',
                class: 'p5',
                module: 'Events'
              },
              deviceTurned: {
                name: 'deviceTurned',
                class: 'p5',
                module: 'Events'
              },
              deviceShaken: {
                name: 'deviceShaken',
                class: 'p5',
                module: 'Events'
              },
              keyIsPressed: {
                name: 'keyIsPressed',
                class: 'p5',
                module: 'Events'
              },
              key: {
                name: 'key',
                class: 'p5',
                module: 'Events'
              },
              keyCode: {
                name: 'keyCode',
                class: 'p5',
                module: 'Events'
              },
              keyPressed: {
                name: 'keyPressed',
                params: [
                  {
                    name: 'event',
                    description: '<p>optional KeyboardEvent callback argument.</p>\n',
                    type: 'Object',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Events'
              },
              keyReleased: {
                name: 'keyReleased',
                params: [
                  {
                    name: 'event',
                    description: '<p>optional KeyboardEvent callback argument.</p>\n',
                    type: 'Object',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Events'
              },
              keyTyped: {
                name: 'keyTyped',
                params: [
                  {
                    name: 'event',
                    description: '<p>optional KeyboardEvent callback argument.</p>\n',
                    type: 'Object',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Events'
              },
              keyIsDown: {
                name: 'keyIsDown',
                params: [
                  {
                    name: 'code',
                    description: '<p>The key to check for.</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Events'
              },
              movedX: {
                name: 'movedX',
                class: 'p5',
                module: 'Events'
              },
              movedY: {
                name: 'movedY',
                class: 'p5',
                module: 'Events'
              },
              mouseX: {
                name: 'mouseX',
                class: 'p5',
                module: 'Events'
              },
              mouseY: {
                name: 'mouseY',
                class: 'p5',
                module: 'Events'
              },
              pmouseX: {
                name: 'pmouseX',
                class: 'p5',
                module: 'Events'
              },
              pmouseY: {
                name: 'pmouseY',
                class: 'p5',
                module: 'Events'
              },
              winMouseX: {
                name: 'winMouseX',
                class: 'p5',
                module: 'Events'
              },
              winMouseY: {
                name: 'winMouseY',
                class: 'p5',
                module: 'Events'
              },
              pwinMouseX: {
                name: 'pwinMouseX',
                class: 'p5',
                module: 'Events'
              },
              pwinMouseY: {
                name: 'pwinMouseY',
                class: 'p5',
                module: 'Events'
              },
              mouseButton: {
                name: 'mouseButton',
                class: 'p5',
                module: 'Events'
              },
              mouseIsPressed: {
                name: 'mouseIsPressed',
                class: 'p5',
                module: 'Events'
              },
              mouseMoved: {
                name: 'mouseMoved',
                params: [
                  {
                    name: 'event',
                    description: '<p>optional MouseEvent callback argument.</p>\n',
                    type: 'Object',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Events'
              },
              mouseDragged: {
                name: 'mouseDragged',
                params: [
                  {
                    name: 'event',
                    description: '<p>optional MouseEvent callback argument.</p>\n',
                    type: 'Object',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Events'
              },
              mousePressed: {
                name: 'mousePressed',
                params: [
                  {
                    name: 'event',
                    description: '<p>optional MouseEvent callback argument.</p>\n',
                    type: 'Object',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Events'
              },
              mouseReleased: {
                name: 'mouseReleased',
                params: [
                  {
                    name: 'event',
                    description: '<p>optional MouseEvent callback argument.</p>\n',
                    type: 'Object',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Events'
              },
              mouseClicked: {
                name: 'mouseClicked',
                params: [
                  {
                    name: 'event',
                    description: '<p>optional MouseEvent callback argument.</p>\n',
                    type: 'Object',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Events'
              },
              doubleClicked: {
                name: 'doubleClicked',
                params: [
                  {
                    name: 'event',
                    description: '<p>optional MouseEvent callback argument.</p>\n',
                    type: 'Object',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Events'
              },
              mouseWheel: {
                name: 'mouseWheel',
                params: [
                  {
                    name: 'event',
                    description: '<p>optional WheelEvent callback argument.</p>\n',
                    type: 'Object',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Events'
              },
              requestPointerLock: {
                name: 'requestPointerLock',
                class: 'p5',
                module: 'Events'
              },
              exitPointerLock: {
                name: 'exitPointerLock',
                class: 'p5',
                module: 'Events'
              },
              touches: {
                name: 'touches',
                class: 'p5',
                module: 'Events'
              },
              touchStarted: {
                name: 'touchStarted',
                params: [
                  {
                    name: 'event',
                    description: '<p>optional TouchEvent callback argument.</p>\n',
                    type: 'Object',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Events'
              },
              touchMoved: {
                name: 'touchMoved',
                params: [
                  {
                    name: 'event',
                    description: '<p>optional TouchEvent callback argument.</p>\n',
                    type: 'Object',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Events'
              },
              touchEnded: {
                name: 'touchEnded',
                params: [
                  {
                    name: 'event',
                    description: '<p>optional TouchEvent callback argument.</p>\n',
                    type: 'Object',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Events'
              },
              createImage: {
                name: 'createImage',
                params: [
                  {
                    name: 'width',
                    description: '<p>width in pixels</p>\n',
                    type: 'Integer'
                  },
                  {
                    name: 'height',
                    description: '<p>height in pixels</p>\n',
                    type: 'Integer'
                  }
                ],
                class: 'p5',
                module: 'Image'
              },
              saveCanvas: {
                name: 'saveCanvas',
                class: 'p5',
                module: 'Image',
                overloads: [
                  {
                    params: [
                      {
                        name: 'selectedCanvas',
                        description:
                          '<p>a variable\n                                representing a specific html5 canvas (optional)</p>\n',
                        type: 'p5.Element|HTMLCanvasElement'
                      },
                      {
                        name: 'filename',
                        description: '',
                        type: 'String',
                        optional: true
                      },
                      {
                        name: 'extension',
                        description: "<p>'jpg' or 'png'</p>\n",
                        type: 'String',
                        optional: true
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'filename',
                        description: '',
                        type: 'String',
                        optional: true
                      },
                      {
                        name: 'extension',
                        description: '',
                        type: 'String',
                        optional: true
                      }
                    ]
                  }
                ]
              },
              saveFrames: {
                name: 'saveFrames',
                params: [
                  {
                    name: 'filename',
                    description: '',
                    type: 'String'
                  },
                  {
                    name: 'extension',
                    description: "<p>'jpg' or 'png'</p>\n",
                    type: 'String'
                  },
                  {
                    name: 'duration',
                    description: '<p>Duration in seconds to save the frames for.</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'framerate',
                    description: '<p>Framerate to save the frames in.</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'callback',
                    description:
                      '<p>A callback function that will be executed\n                                to handle the image data. This function\n                                should accept an array as argument. The\n                                array will contain the specified number of\n                                frames of objects. Each object has three\n                                properties: imageData - an\n                                image/octet-stream, filename and extension.</p>\n',
                    type: 'Function(Array)',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Image'
              },
              loadImage: {
                name: 'loadImage',
                params: [
                  {
                    name: 'path',
                    description: '<p>Path of the image to be loaded</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'successCallback',
                    description:
                      '<p>Function to be called once\n                               the image is loaded. Will be passed the\n                               <a href="#/p5.Image">p5.Image</a>.</p>\n',
                    type: 'function(p5.Image)',
                    optional: true
                  },
                  {
                    name: 'failureCallback',
                    description:
                      '<p>called with event error if\n                               the image fails to load.</p>\n',
                    type: 'Function(Event)',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Image'
              },
              image: {
                name: 'image',
                class: 'p5',
                module: 'Image',
                overloads: [
                  {
                    params: [
                      {
                        name: 'img',
                        description: '<p>the image to display</p>\n',
                        type: 'p5.Image|p5.Element'
                      },
                      {
                        name: 'x',
                        description:
                          '<p>the x-coordinate of the top-left corner of the image</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y',
                        description:
                          '<p>the y-coordinate of the top-left corner of the image</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'width',
                        description: '<p>the width to draw the image</p>\n',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'height',
                        description: '<p>the height to draw the image</p>\n',
                        type: 'Number',
                        optional: true
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'img',
                        description: '',
                        type: 'p5.Image|p5.Element'
                      },
                      {
                        name: 'dx',
                        description:
                          '<p>the x-coordinate of the destination\n                          rectangle in which to draw the source image</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'dy',
                        description:
                          '<p>the y-coordinate of the destination\n                          rectangle in which to draw the source image</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'dWidth',
                        description: '<p>the width of the destination rectangle</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'dHeight',
                        description: '<p>the height of the destination rectangle</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'sx',
                        description:
                          '<p>the x-coordinate of the subsection of the source\nimage to draw into the destination rectangle</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'sy',
                        description:
                          '<p>the y-coordinate of the subsection of the source\nimage to draw into the destination rectangle</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'sWidth',
                        description:
                          '<p>the width of the subsection of the\n                          source image to draw into the destination\n                          rectangle</p>\n',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'sHeight',
                        description:
                          '<p>the height of the subsection of the\n                           source image to draw into the destination rectangle</p>\n',
                        type: 'Number',
                        optional: true
                      }
                    ]
                  }
                ]
              },
              tint: {
                name: 'tint',
                class: 'p5',
                module: 'Image',
                overloads: [
                  {
                    params: [
                      {
                        name: 'v1',
                        description:
                          '<p>red or hue value relative to\n                                the current color range</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'v2',
                        description:
                          '<p>green or saturation value\n                                relative to the current color range</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'v3',
                        description:
                          '<p>blue or brightness value\n                                relative to the current color range</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'alpha',
                        description: '',
                        type: 'Number',
                        optional: true
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'value',
                        description: '<p>a color string</p>\n',
                        type: 'String'
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'gray',
                        description: '<p>a gray value</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'alpha',
                        description: '',
                        type: 'Number',
                        optional: true
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'values',
                        description:
                          '<p>an array containing the red,green,blue &\n                                and alpha components of the color</p>\n',
                        type: 'Number[]'
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'color',
                        description: '<p>the tint color</p>\n',
                        type: 'p5.Color'
                      }
                    ]
                  }
                ]
              },
              noTint: {
                name: 'noTint',
                class: 'p5',
                module: 'Image'
              },
              imageMode: {
                name: 'imageMode',
                params: [
                  {
                    name: 'mode',
                    description: '<p>either CORNER, CORNERS, or CENTER</p>\n',
                    type: 'Constant'
                  }
                ],
                class: 'p5',
                module: 'Image'
              },
              pixels: {
                name: 'pixels',
                class: 'p5',
                module: 'Image'
              },
              blend: {
                name: 'blend',
                class: 'p5',
                module: 'Image',
                overloads: [
                  {
                    params: [
                      {
                        name: 'srcImage',
                        description: '<p>source image</p>\n',
                        type: 'p5.Image'
                      },
                      {
                        name: 'sx',
                        description:
                          "<p>X coordinate of the source's upper left corner</p>\n",
                        type: 'Integer'
                      },
                      {
                        name: 'sy',
                        description:
                          "<p>Y coordinate of the source's upper left corner</p>\n",
                        type: 'Integer'
                      },
                      {
                        name: 'sw',
                        description: '<p>source image width</p>\n',
                        type: 'Integer'
                      },
                      {
                        name: 'sh',
                        description: '<p>source image height</p>\n',
                        type: 'Integer'
                      },
                      {
                        name: 'dx',
                        description:
                          "<p>X coordinate of the destination's upper left corner</p>\n",
                        type: 'Integer'
                      },
                      {
                        name: 'dy',
                        description:
                          "<p>Y coordinate of the destination's upper left corner</p>\n",
                        type: 'Integer'
                      },
                      {
                        name: 'dw',
                        description: '<p>destination image width</p>\n',
                        type: 'Integer'
                      },
                      {
                        name: 'dh',
                        description: '<p>destination image height</p>\n',
                        type: 'Integer'
                      },
                      {
                        name: 'blendMode',
                        description:
                          '<p>the blend mode. either\n    BLEND, DARKEST, LIGHTEST, DIFFERENCE,\n    MULTIPLY, EXCLUSION, SCREEN, REPLACE, OVERLAY, HARD_LIGHT,\n    SOFT_LIGHT, DODGE, BURN, ADD or NORMAL.</p>\n',
                        type: 'Constant'
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'sx',
                        description: '',
                        type: 'Integer'
                      },
                      {
                        name: 'sy',
                        description: '',
                        type: 'Integer'
                      },
                      {
                        name: 'sw',
                        description: '',
                        type: 'Integer'
                      },
                      {
                        name: 'sh',
                        description: '',
                        type: 'Integer'
                      },
                      {
                        name: 'dx',
                        description: '',
                        type: 'Integer'
                      },
                      {
                        name: 'dy',
                        description: '',
                        type: 'Integer'
                      },
                      {
                        name: 'dw',
                        description: '',
                        type: 'Integer'
                      },
                      {
                        name: 'dh',
                        description: '',
                        type: 'Integer'
                      },
                      {
                        name: 'blendMode',
                        description: '',
                        type: 'Constant'
                      }
                    ]
                  }
                ]
              },
              copy: {
                name: 'copy',
                class: 'p5',
                module: 'Image',
                overloads: [
                  {
                    params: [
                      {
                        name: 'srcImage',
                        description: '<p>source image</p>\n',
                        type: 'p5.Image|p5.Element'
                      },
                      {
                        name: 'sx',
                        description:
                          "<p>X coordinate of the source's upper left corner</p>\n",
                        type: 'Integer'
                      },
                      {
                        name: 'sy',
                        description:
                          "<p>Y coordinate of the source's upper left corner</p>\n",
                        type: 'Integer'
                      },
                      {
                        name: 'sw',
                        description: '<p>source image width</p>\n',
                        type: 'Integer'
                      },
                      {
                        name: 'sh',
                        description: '<p>source image height</p>\n',
                        type: 'Integer'
                      },
                      {
                        name: 'dx',
                        description:
                          "<p>X coordinate of the destination's upper left corner</p>\n",
                        type: 'Integer'
                      },
                      {
                        name: 'dy',
                        description:
                          "<p>Y coordinate of the destination's upper left corner</p>\n",
                        type: 'Integer'
                      },
                      {
                        name: 'dw',
                        description: '<p>destination image width</p>\n',
                        type: 'Integer'
                      },
                      {
                        name: 'dh',
                        description: '<p>destination image height</p>\n',
                        type: 'Integer'
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'sx',
                        description: '',
                        type: 'Integer'
                      },
                      {
                        name: 'sy',
                        description: '',
                        type: 'Integer'
                      },
                      {
                        name: 'sw',
                        description: '',
                        type: 'Integer'
                      },
                      {
                        name: 'sh',
                        description: '',
                        type: 'Integer'
                      },
                      {
                        name: 'dx',
                        description: '',
                        type: 'Integer'
                      },
                      {
                        name: 'dy',
                        description: '',
                        type: 'Integer'
                      },
                      {
                        name: 'dw',
                        description: '',
                        type: 'Integer'
                      },
                      {
                        name: 'dh',
                        description: '',
                        type: 'Integer'
                      }
                    ]
                  }
                ]
              },
              filter: {
                name: 'filter',
                params: [
                  {
                    name: 'filterType',
                    description:
                      '<p>either THRESHOLD, GRAY, OPAQUE, INVERT,\n                               POSTERIZE, BLUR, ERODE, DILATE or BLUR.\n                               See Filters.js for docs on\n                               each available filter</p>\n',
                    type: 'Constant'
                  },
                  {
                    name: 'filterParam',
                    description:
                      '<p>an optional parameter unique\n                               to each filter, see above</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Image'
              },
              get: {
                name: 'get',
                class: 'p5',
                module: 'Image',
                overloads: [
                  {
                    params: [
                      {
                        name: 'x',
                        description: '<p>x-coordinate of the pixel</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y',
                        description: '<p>y-coordinate of the pixel</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'w',
                        description: '<p>width</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'h',
                        description: '<p>height</p>\n',
                        type: 'Number'
                      }
                    ]
                  },
                  {
                    params: []
                  },
                  {
                    params: [
                      {
                        name: 'x',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'y',
                        description: '',
                        type: 'Number'
                      }
                    ]
                  }
                ]
              },
              loadPixels: {
                name: 'loadPixels',
                class: 'p5',
                module: 'Image'
              },
              set: {
                name: 'set',
                params: [
                  {
                    name: 'x',
                    description: '<p>x-coordinate of the pixel</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'y',
                    description: '<p>y-coordinate of the pixel</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'c',
                    description:
                      '<p>insert a grayscale value | a pixel array |\n                               a <a href="#/p5.Color">p5.Color</a> object | a <a href="#/p5.Image">p5.Image</a> to copy</p>\n',
                    type: 'Number|Number[]|Object'
                  }
                ],
                class: 'p5',
                module: 'Image'
              },
              updatePixels: {
                name: 'updatePixels',
                params: [
                  {
                    name: 'x',
                    description:
                      '<p>x-coordinate of the upper-left corner of region\n                        to update</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'y',
                    description:
                      '<p>y-coordinate of the upper-left corner of region\n                        to update</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'w',
                    description: '<p>width of region to update</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'h',
                    description: '<p>height of region to update</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Image'
              },
              loadJSON: {
                name: 'loadJSON',
                class: 'p5',
                module: 'IO',
                overloads: [
                  {
                    params: [
                      {
                        name: 'path',
                        description: '<p>name of the file or url to load</p>\n',
                        type: 'String'
                      },
                      {
                        name: 'jsonpOptions',
                        description: '<p>options object for jsonp related settings</p>\n',
                        type: 'Object',
                        optional: true
                      },
                      {
                        name: 'datatype',
                        description: '<p>"json" or "jsonp"</p>\n',
                        type: 'String',
                        optional: true
                      },
                      {
                        name: 'callback',
                        description:
                          '<p>function to be executed after\n                                   <a href="#/p5/loadJSON">loadJSON()</a> completes, data is passed\n                                   in as first argument</p>\n',
                        type: 'Function',
                        optional: true
                      },
                      {
                        name: 'errorCallback',
                        description:
                          '<p>function to be executed if\n                                   there is an error, response is passed\n                                   in as first argument</p>\n',
                        type: 'Function',
                        optional: true
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'path',
                        description: '',
                        type: 'String'
                      },
                      {
                        name: 'datatype',
                        description: '',
                        type: 'String'
                      },
                      {
                        name: 'callback',
                        description: '',
                        type: 'Function',
                        optional: true
                      },
                      {
                        name: 'errorCallback',
                        description: '',
                        type: 'Function',
                        optional: true
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'path',
                        description: '',
                        type: 'String'
                      },
                      {
                        name: 'callback',
                        description: '',
                        type: 'Function'
                      },
                      {
                        name: 'errorCallback',
                        description: '',
                        type: 'Function',
                        optional: true
                      }
                    ]
                  }
                ]
              },
              loadStrings: {
                name: 'loadStrings',
                params: [
                  {
                    name: 'filename',
                    description: '<p>name of the file or url to load</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'callback',
                    description:
                      '<p>function to be executed after <a href="#/p5/loadStrings">loadStrings()</a>\n                              completes, Array is passed in as first\n                              argument</p>\n',
                    type: 'Function',
                    optional: true
                  },
                  {
                    name: 'errorCallback',
                    description:
                      '<p>function to be executed if\n                              there is an error, response is passed\n                              in as first argument</p>\n',
                    type: 'Function',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'IO'
              },
              loadTable: {
                name: 'loadTable',
                params: [
                  {
                    name: 'filename',
                    description: '<p>name of the file or URL to load</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'extension',
                    description:
                      '<p>parse the table by comma-separated values "csv", semicolon-separated\n                                     values "ssv", or tab-separated values "tsv"</p>\n',
                    type: 'String',
                    optional: true
                  },
                  {
                    name: 'header',
                    description: '<p>"header" to indicate table has header row</p>\n',
                    type: 'String',
                    optional: true
                  },
                  {
                    name: 'callback',
                    description:
                      '<p>function to be executed after\n                                     <a href="#/p5/loadTable">loadTable()</a> completes. On success, the\n                                     <a href="#/p5.Table">Table</a> object is passed in as the\n                                     first argument.</p>\n',
                    type: 'Function',
                    optional: true
                  },
                  {
                    name: 'errorCallback',
                    description:
                      '<p>function to be executed if\n                                     there is an error, response is passed\n                                     in as first argument</p>\n',
                    type: 'Function',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'IO'
              },
              loadXML: {
                name: 'loadXML',
                params: [
                  {
                    name: 'filename',
                    description: '<p>name of the file or URL to load</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'callback',
                    description:
                      '<p>function to be executed after <a href="#/p5/loadXML">loadXML()</a>\n                              completes, XML object is passed in as\n                              first argument</p>\n',
                    type: 'Function',
                    optional: true
                  },
                  {
                    name: 'errorCallback',
                    description:
                      '<p>function to be executed if\n                              there is an error, response is passed\n                              in as first argument</p>\n',
                    type: 'Function',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'IO'
              },
              loadBytes: {
                name: 'loadBytes',
                params: [
                  {
                    name: 'file',
                    description: '<p>name of the file or URL to load</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'callback',
                    description:
                      '<p>function to be executed after <a href="#/p5/loadBytes">loadBytes()</a>\n                                   completes</p>\n',
                    type: 'Function',
                    optional: true
                  },
                  {
                    name: 'errorCallback',
                    description:
                      '<p>function to be executed if there\n                                   is an error</p>\n',
                    type: 'Function',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'IO'
              },
              httpGet: {
                name: 'httpGet',
                class: 'p5',
                module: 'IO',
                overloads: [
                  {
                    params: [
                      {
                        name: 'path',
                        description: '<p>name of the file or url to load</p>\n',
                        type: 'String'
                      },
                      {
                        name: 'datatype',
                        description:
                          '<p>"json", "jsonp", "binary", "arrayBuffer",\n                                   "xml", or "text"</p>\n',
                        type: 'String',
                        optional: true
                      },
                      {
                        name: 'data',
                        description: '<p>param data passed sent with request</p>\n',
                        type: 'Object|Boolean',
                        optional: true
                      },
                      {
                        name: 'callback',
                        description:
                          '<p>function to be executed after\n                                   <a href="#/p5/httpGet">httpGet()</a> completes, data is passed in\n                                   as first argument</p>\n',
                        type: 'Function',
                        optional: true
                      },
                      {
                        name: 'errorCallback',
                        description:
                          '<p>function to be executed if\n                                   there is an error, response is passed\n                                   in as first argument</p>\n',
                        type: 'Function',
                        optional: true
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'path',
                        description: '',
                        type: 'String'
                      },
                      {
                        name: 'data',
                        description: '',
                        type: 'Object|Boolean'
                      },
                      {
                        name: 'callback',
                        description: '',
                        type: 'Function',
                        optional: true
                      },
                      {
                        name: 'errorCallback',
                        description: '',
                        type: 'Function',
                        optional: true
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'path',
                        description: '',
                        type: 'String'
                      },
                      {
                        name: 'callback',
                        description: '',
                        type: 'Function'
                      },
                      {
                        name: 'errorCallback',
                        description: '',
                        type: 'Function',
                        optional: true
                      }
                    ]
                  }
                ]
              },
              httpPost: {
                name: 'httpPost',
                class: 'p5',
                module: 'IO',
                overloads: [
                  {
                    params: [
                      {
                        name: 'path',
                        description: '<p>name of the file or url to load</p>\n',
                        type: 'String'
                      },
                      {
                        name: 'datatype',
                        description:
                          '<p>"json", "jsonp", "xml", or "text".\n                                   If omitted, <a href="#/p5/httpPost">httpPost()</a> will guess.</p>\n',
                        type: 'String',
                        optional: true
                      },
                      {
                        name: 'data',
                        description: '<p>param data passed sent with request</p>\n',
                        type: 'Object|Boolean',
                        optional: true
                      },
                      {
                        name: 'callback',
                        description:
                          '<p>function to be executed after\n                                   <a href="#/p5/httpPost">httpPost()</a> completes, data is passed in\n                                   as first argument</p>\n',
                        type: 'Function',
                        optional: true
                      },
                      {
                        name: 'errorCallback',
                        description:
                          '<p>function to be executed if\n                                   there is an error, response is passed\n                                   in as first argument</p>\n',
                        type: 'Function',
                        optional: true
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'path',
                        description: '',
                        type: 'String'
                      },
                      {
                        name: 'data',
                        description: '',
                        type: 'Object|Boolean'
                      },
                      {
                        name: 'callback',
                        description: '',
                        type: 'Function',
                        optional: true
                      },
                      {
                        name: 'errorCallback',
                        description: '',
                        type: 'Function',
                        optional: true
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'path',
                        description: '',
                        type: 'String'
                      },
                      {
                        name: 'callback',
                        description: '',
                        type: 'Function'
                      },
                      {
                        name: 'errorCallback',
                        description: '',
                        type: 'Function',
                        optional: true
                      }
                    ]
                  }
                ]
              },
              httpDo: {
                name: 'httpDo',
                class: 'p5',
                module: 'IO',
                overloads: [
                  {
                    params: [
                      {
                        name: 'path',
                        description: '<p>name of the file or url to load</p>\n',
                        type: 'String'
                      },
                      {
                        name: 'method',
                        description:
                          '<p>either "GET", "POST", or "PUT",\n                                   defaults to "GET"</p>\n',
                        type: 'String',
                        optional: true
                      },
                      {
                        name: 'datatype',
                        description: '<p>"json", "jsonp", "xml", or "text"</p>\n',
                        type: 'String',
                        optional: true
                      },
                      {
                        name: 'data',
                        description: '<p>param data passed sent with request</p>\n',
                        type: 'Object',
                        optional: true
                      },
                      {
                        name: 'callback',
                        description:
                          '<p>function to be executed after\n                                   <a href="#/p5/httpGet">httpGet()</a> completes, data is passed in\n                                   as first argument</p>\n',
                        type: 'Function',
                        optional: true
                      },
                      {
                        name: 'errorCallback',
                        description:
                          '<p>function to be executed if\n                                   there is an error, response is passed\n                                   in as first argument</p>\n',
                        type: 'Function',
                        optional: true
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'path',
                        description: '',
                        type: 'String'
                      },
                      {
                        name: 'options',
                        description:
                          '<p>Request object options as documented in the\n                                   "fetch" API\n<a href="https://developer.mozilla.org/en/docs/Web/API/Fetch_API">reference</a></p>\n',
                        type: 'Object'
                      },
                      {
                        name: 'callback',
                        description: '',
                        type: 'Function',
                        optional: true
                      },
                      {
                        name: 'errorCallback',
                        description: '',
                        type: 'Function',
                        optional: true
                      }
                    ]
                  }
                ]
              },
              createWriter: {
                name: 'createWriter',
                params: [
                  {
                    name: 'name',
                    description: '<p>name of the file to be created</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'extension',
                    description: '',
                    type: 'String',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'IO'
              },
              save: {
                name: 'save',
                params: [
                  {
                    name: 'objectOrFilename',
                    description:
                      '<p>If filename is provided, will\n                                           save canvas as an image with\n                                           either png or jpg extension\n                                           depending on the filename.\n                                           If object is provided, will\n                                           save depending on the object\n                                           and filename (see examples\n                                           above).</p>\n',
                    type: 'Object|String',
                    optional: true
                  },
                  {
                    name: 'filename',
                    description:
                      '<p>If an object is provided as the first\n                             parameter, then the second parameter\n                             indicates the filename,\n                             and should include an appropriate\n                             file extension (see examples above).</p>\n',
                    type: 'String',
                    optional: true
                  },
                  {
                    name: 'options',
                    description:
                      '<p>Additional options depend on\n                          filetype. For example, when saving JSON,\n                          <code>true</code> indicates that the\n                          output will be optimized for filesize,\n                          rather than readability.</p>\n',
                    type: 'Boolean|String',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'IO'
              },
              saveJSON: {
                name: 'saveJSON',
                params: [
                  {
                    name: 'json',
                    description: '',
                    type: 'Array|Object'
                  },
                  {
                    name: 'filename',
                    description: '',
                    type: 'String'
                  },
                  {
                    name: 'optimize',
                    description:
                      '<p>If true, removes line breaks\n                               and spaces from the output\n                               file to optimize filesize\n                               (but not readability).</p>\n',
                    type: 'Boolean',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'IO'
              },
              saveStrings: {
                name: 'saveStrings',
                params: [
                  {
                    name: 'list',
                    description: '<p>string array to be written</p>\n',
                    type: 'String[]'
                  },
                  {
                    name: 'filename',
                    description: '<p>filename for output</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'extension',
                    description: "<p>the filename's extension</p>\n",
                    type: 'String',
                    optional: true
                  },
                  {
                    name: 'isCRLF',
                    description: '<p>if true, change line-break to CRLF</p>\n',
                    type: 'Boolean',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'IO'
              },
              saveTable: {
                name: 'saveTable',
                params: [
                  {
                    name: 'Table',
                    description:
                      '<p>the <a href="#/p5.Table">Table</a> object to save to a file</p>\n',
                    type: 'p5.Table'
                  },
                  {
                    name: 'filename',
                    description: '<p>the filename to which the Table should be saved</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'options',
                    description: '<p>can be one of "tsv", "csv", or "html"</p>\n',
                    type: 'String',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'IO'
              },
              abs: {
                name: 'abs',
                params: [
                  {
                    name: 'n',
                    description: '<p>number to compute</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Math'
              },
              ceil: {
                name: 'ceil',
                params: [
                  {
                    name: 'n',
                    description: '<p>number to round up</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Math'
              },
              constrain: {
                name: 'constrain',
                params: [
                  {
                    name: 'n',
                    description: '<p>number to constrain</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'low',
                    description: '<p>minimum limit</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'high',
                    description: '<p>maximum limit</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Math'
              },
              dist: {
                name: 'dist',
                class: 'p5',
                module: 'Math',
                overloads: [
                  {
                    params: [
                      {
                        name: 'x1',
                        description: '<p>x-coordinate of the first point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y1',
                        description: '<p>y-coordinate of the first point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'x2',
                        description: '<p>x-coordinate of the second point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y2',
                        description: '<p>y-coordinate of the second point</p>\n',
                        type: 'Number'
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'x1',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'y1',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'z1',
                        description: '<p>z-coordinate of the first point</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'x2',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'y2',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'z2',
                        description: '<p>z-coordinate of the second point</p>\n',
                        type: 'Number'
                      }
                    ]
                  }
                ]
              },
              exp: {
                name: 'exp',
                params: [
                  {
                    name: 'n',
                    description: '<p>exponent to raise</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Math'
              },
              floor: {
                name: 'floor',
                params: [
                  {
                    name: 'n',
                    description: '<p>number to round down</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Math'
              },
              lerp: {
                name: 'lerp',
                params: [
                  {
                    name: 'start',
                    description: '<p>first value</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'stop',
                    description: '<p>second value</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'amt',
                    description: '<p>number</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Math'
              },
              log: {
                name: 'log',
                params: [
                  {
                    name: 'n',
                    description: '<p>number greater than 0</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Math'
              },
              mag: {
                name: 'mag',
                params: [
                  {
                    name: 'a',
                    description: '<p>first value</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'b',
                    description: '<p>second value</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Math'
              },
              map: {
                name: 'map',
                params: [
                  {
                    name: 'value',
                    description: '<p>the incoming value to be converted</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'start1',
                    description: "<p>lower bound of the value's current range</p>\n",
                    type: 'Number'
                  },
                  {
                    name: 'stop1',
                    description: "<p>upper bound of the value's current range</p>\n",
                    type: 'Number'
                  },
                  {
                    name: 'start2',
                    description: "<p>lower bound of the value's target range</p>\n",
                    type: 'Number'
                  },
                  {
                    name: 'stop2',
                    description: "<p>upper bound of the value's target range</p>\n",
                    type: 'Number'
                  },
                  {
                    name: 'withinBounds',
                    description: '<p>constrain the value to the newly mapped range</p>\n',
                    type: 'Boolean',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Math'
              },
              max: {
                name: 'max',
                class: 'p5',
                module: 'Math',
                overloads: [
                  {
                    params: [
                      {
                        name: 'n0',
                        description: '<p>Number to compare</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'n1',
                        description: '<p>Number to compare</p>\n',
                        type: 'Number'
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'nums',
                        description: '<p>Numbers to compare</p>\n',
                        type: 'Number[]'
                      }
                    ]
                  }
                ]
              },
              min: {
                name: 'min',
                class: 'p5',
                module: 'Math',
                overloads: [
                  {
                    params: [
                      {
                        name: 'n0',
                        description: '<p>Number to compare</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'n1',
                        description: '<p>Number to compare</p>\n',
                        type: 'Number'
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'nums',
                        description: '<p>Numbers to compare</p>\n',
                        type: 'Number[]'
                      }
                    ]
                  }
                ]
              },
              norm: {
                name: 'norm',
                params: [
                  {
                    name: 'value',
                    description: '<p>incoming value to be normalized</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'start',
                    description: "<p>lower bound of the value's current range</p>\n",
                    type: 'Number'
                  },
                  {
                    name: 'stop',
                    description: "<p>upper bound of the value's current range</p>\n",
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Math'
              },
              pow: {
                name: 'pow',
                params: [
                  {
                    name: 'n',
                    description: '<p>base of the exponential expression</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'e',
                    description: '<p>power by which to raise the base</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Math'
              },
              round: {
                name: 'round',
                params: [
                  {
                    name: 'n',
                    description: '<p>number to round</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'decimals',
                    description:
                      '<p>number of decimal places to round to, default is 0</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Math'
              },
              sq: {
                name: 'sq',
                params: [
                  {
                    name: 'n',
                    description: '<p>number to square</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Math'
              },
              sqrt: {
                name: 'sqrt',
                params: [
                  {
                    name: 'n',
                    description: '<p>non-negative number to square root</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Math'
              },
              fract: {
                name: 'fract',
                params: [
                  {
                    name: 'num',
                    description:
                      '<p>Number whose fractional part needs to be found out</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Math'
              },
              createVector: {
                name: 'createVector',
                params: [
                  {
                    name: 'x',
                    description: '<p>x component of the vector</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'y',
                    description: '<p>y component of the vector</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'z',
                    description: '<p>z component of the vector</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Math'
              },
              noise: {
                name: 'noise',
                params: [
                  {
                    name: 'x',
                    description: '<p>x-coordinate in noise space</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'y',
                    description: '<p>y-coordinate in noise space</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'z',
                    description: '<p>z-coordinate in noise space</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Math'
              },
              noiseDetail: {
                name: 'noiseDetail',
                params: [
                  {
                    name: 'lod',
                    description: '<p>number of octaves to be used by the noise</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'falloff',
                    description: '<p>falloff factor for each octave</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Math'
              },
              noiseSeed: {
                name: 'noiseSeed',
                params: [
                  {
                    name: 'seed',
                    description: '<p>the seed value</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Math'
              },
              randomSeed: {
                name: 'randomSeed',
                params: [
                  {
                    name: 'seed',
                    description: '<p>the seed value</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Math'
              },
              random: {
                name: 'random',
                class: 'p5',
                module: 'Math',
                overloads: [
                  {
                    params: [
                      {
                        name: 'min',
                        description: '<p>the lower bound (inclusive)</p>\n',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'max',
                        description: '<p>the upper bound (exclusive)</p>\n',
                        type: 'Number',
                        optional: true
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'choices',
                        description: '<p>the array to choose from</p>\n',
                        type: 'Array'
                      }
                    ]
                  }
                ]
              },
              randomGaussian: {
                name: 'randomGaussian',
                params: [
                  {
                    name: 'mean',
                    description: '<p>the mean</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'sd',
                    description: '<p>the standard deviation</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Math'
              },
              acos: {
                name: 'acos',
                params: [
                  {
                    name: 'value',
                    description: '<p>the value whose arc cosine is to be returned</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Math'
              },
              asin: {
                name: 'asin',
                params: [
                  {
                    name: 'value',
                    description: '<p>the value whose arc sine is to be returned</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Math'
              },
              atan: {
                name: 'atan',
                params: [
                  {
                    name: 'value',
                    description: '<p>the value whose arc tangent is to be returned</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Math'
              },
              atan2: {
                name: 'atan2',
                params: [
                  {
                    name: 'y',
                    description: '<p>y-coordinate of the point</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'x',
                    description: '<p>x-coordinate of the point</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Math'
              },
              cos: {
                name: 'cos',
                params: [
                  {
                    name: 'angle',
                    description: '<p>the angle</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Math'
              },
              sin: {
                name: 'sin',
                params: [
                  {
                    name: 'angle',
                    description: '<p>the angle</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Math'
              },
              tan: {
                name: 'tan',
                params: [
                  {
                    name: 'angle',
                    description: '<p>the angle</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Math'
              },
              degrees: {
                name: 'degrees',
                params: [
                  {
                    name: 'radians',
                    description: '<p>the radians value to convert to degrees</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Math'
              },
              radians: {
                name: 'radians',
                params: [
                  {
                    name: 'degrees',
                    description: '<p>the degree value to convert to radians</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Math'
              },
              angleMode: {
                name: 'angleMode',
                params: [
                  {
                    name: 'mode',
                    description: '<p>either RADIANS or DEGREES</p>\n',
                    type: 'Constant'
                  }
                ],
                class: 'p5',
                module: 'Math'
              },
              textAlign: {
                name: 'textAlign',
                class: 'p5',
                module: 'Typography',
                overloads: [
                  {
                    params: [
                      {
                        name: 'horizAlign',
                        description:
                          '<p>horizontal alignment, either LEFT,\n                           CENTER, or RIGHT</p>\n',
                        type: 'Constant'
                      },
                      {
                        name: 'vertAlign',
                        description:
                          '<p>vertical alignment, either TOP,\n                           BOTTOM, CENTER, or BASELINE</p>\n',
                        type: 'Constant',
                        optional: true
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: []
                  }
                ]
              },
              textLeading: {
                name: 'textLeading',
                class: 'p5',
                module: 'Typography',
                overloads: [
                  {
                    params: [
                      {
                        name: 'leading',
                        description:
                          '<p>the size in pixels for spacing between lines</p>\n',
                        type: 'Number'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: []
                  }
                ]
              },
              textSize: {
                name: 'textSize',
                class: 'p5',
                module: 'Typography',
                overloads: [
                  {
                    params: [
                      {
                        name: 'theSize',
                        description: '<p>the size of the letters in units of pixels</p>\n',
                        type: 'Number'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: []
                  }
                ]
              },
              textStyle: {
                name: 'textStyle',
                class: 'p5',
                module: 'Typography',
                overloads: [
                  {
                    params: [
                      {
                        name: 'theStyle',
                        description:
                          '<p>styling for text, either NORMAL,\n                           ITALIC, BOLD or BOLDITALIC</p>\n',
                        type: 'Constant'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: []
                  }
                ]
              },
              textWidth: {
                name: 'textWidth',
                params: [
                  {
                    name: 'theText',
                    description: '<p>the String of characters to measure</p>\n',
                    type: 'String'
                  }
                ],
                class: 'p5',
                module: 'Typography'
              },
              textAscent: {
                name: 'textAscent',
                class: 'p5',
                module: 'Typography'
              },
              textDescent: {
                name: 'textDescent',
                class: 'p5',
                module: 'Typography'
              },
              textWrap: {
                name: 'textWrap',
                params: [
                  {
                    name: 'wrapStyle',
                    description: '<p>text wrapping style, either WORD or CHAR</p>\n',
                    type: 'Constant'
                  }
                ],
                class: 'p5',
                module: 'Typography'
              },
              loadFont: {
                name: 'loadFont',
                params: [
                  {
                    name: 'path',
                    description: '<p>name of the file or url to load</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'callback',
                    description:
                      '<p>function to be executed after\n                                   <a href="#/p5/loadFont">loadFont()</a> completes</p>\n',
                    type: 'Function',
                    optional: true
                  },
                  {
                    name: 'onError',
                    description:
                      '<p>function to be executed if\n                                   an error occurs</p>\n',
                    type: 'Function',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Typography'
              },
              text: {
                name: 'text',
                params: [
                  {
                    name: 'str',
                    description:
                      '<p>the alphanumeric\n                                            symbols to be displayed</p>\n',
                    type: 'String|Object|Array|Number|Boolean'
                  },
                  {
                    name: 'x',
                    description: '<p>x-coordinate of text</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'y',
                    description: '<p>y-coordinate of text</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'x2',
                    description:
                      '<p>by default, the width of the text box,\n                    see <a href="#/p5/rectMode">rectMode()</a> for more info</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'y2',
                    description:
                      '<p>by default, the height of the text box,\n                    see <a href="#/p5/rectMode">rectMode()</a> for more info</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Typography'
              },
              textFont: {
                name: 'textFont',
                class: 'p5',
                module: 'Typography',
                overloads: [
                  {
                    params: []
                  },
                  {
                    params: [
                      {
                        name: 'font',
                        description:
                          '<p>a font loaded via <a href="#/p5/loadFont">loadFont()</a>,\nor a String representing a <a href="https://mzl.la/2dOw8WD">web safe font</a>\n(a font that is generally available across all systems)</p>\n',
                        type: 'Object|String'
                      },
                      {
                        name: 'size',
                        description: '<p>the font size to use</p>\n',
                        type: 'Number',
                        optional: true
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              append: {
                name: 'append',
                params: [
                  {
                    name: 'array',
                    description: '<p>Array to append</p>\n',
                    type: 'Array'
                  },
                  {
                    name: 'value',
                    description: '<p>to be added to the Array</p>\n',
                    type: 'Any'
                  }
                ],
                class: 'p5',
                module: 'Data'
              },
              arrayCopy: {
                name: 'arrayCopy',
                class: 'p5',
                module: 'Data',
                overloads: [
                  {
                    params: [
                      {
                        name: 'src',
                        description: '<p>the source Array</p>\n',
                        type: 'Array'
                      },
                      {
                        name: 'srcPosition',
                        description: '<p>starting position in the source Array</p>\n',
                        type: 'Integer'
                      },
                      {
                        name: 'dst',
                        description: '<p>the destination Array</p>\n',
                        type: 'Array'
                      },
                      {
                        name: 'dstPosition',
                        description: '<p>starting position in the destination Array</p>\n',
                        type: 'Integer'
                      },
                      {
                        name: 'length',
                        description: '<p>number of Array elements to be copied</p>\n',
                        type: 'Integer'
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'src',
                        description: '',
                        type: 'Array'
                      },
                      {
                        name: 'dst',
                        description: '',
                        type: 'Array'
                      },
                      {
                        name: 'length',
                        description: '',
                        type: 'Integer',
                        optional: true
                      }
                    ]
                  }
                ]
              },
              concat: {
                name: 'concat',
                params: [
                  {
                    name: 'a',
                    description: '<p>first Array to concatenate</p>\n',
                    type: 'Array'
                  },
                  {
                    name: 'b',
                    description: '<p>second Array to concatenate</p>\n',
                    type: 'Array'
                  }
                ],
                class: 'p5',
                module: 'Data'
              },
              reverse: {
                name: 'reverse',
                params: [
                  {
                    name: 'list',
                    description: '<p>Array to reverse</p>\n',
                    type: 'Array'
                  }
                ],
                class: 'p5',
                module: 'Data'
              },
              shorten: {
                name: 'shorten',
                params: [
                  {
                    name: 'list',
                    description: '<p>Array to shorten</p>\n',
                    type: 'Array'
                  }
                ],
                class: 'p5',
                module: 'Data'
              },
              shuffle: {
                name: 'shuffle',
                params: [
                  {
                    name: 'array',
                    description: '<p>Array to shuffle</p>\n',
                    type: 'Array'
                  },
                  {
                    name: 'bool',
                    description: '<p>modify passed array</p>\n',
                    type: 'Boolean',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Data'
              },
              sort: {
                name: 'sort',
                params: [
                  {
                    name: 'list',
                    description: '<p>Array to sort</p>\n',
                    type: 'Array'
                  },
                  {
                    name: 'count',
                    description: '<p>number of elements to sort, starting from 0</p>\n',
                    type: 'Integer',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Data'
              },
              splice: {
                name: 'splice',
                params: [
                  {
                    name: 'list',
                    description: '<p>Array to splice into</p>\n',
                    type: 'Array'
                  },
                  {
                    name: 'value',
                    description: '<p>value to be spliced in</p>\n',
                    type: 'Any'
                  },
                  {
                    name: 'position',
                    description: '<p>in the array from which to insert data</p>\n',
                    type: 'Integer'
                  }
                ],
                class: 'p5',
                module: 'Data'
              },
              subset: {
                name: 'subset',
                params: [
                  {
                    name: 'list',
                    description: '<p>Array to extract from</p>\n',
                    type: 'Array'
                  },
                  {
                    name: 'start',
                    description: '<p>position to begin</p>\n',
                    type: 'Integer'
                  },
                  {
                    name: 'count',
                    description: '<p>number of values to extract</p>\n',
                    type: 'Integer',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Data'
              },
              float: {
                name: 'float',
                params: [
                  {
                    name: 'str',
                    description: '<p>float string to parse</p>\n',
                    type: 'String'
                  }
                ],
                class: 'p5',
                module: 'Data'
              },
              int: {
                name: 'int',
                class: 'p5',
                module: 'Data',
                overloads: [
                  {
                    params: [
                      {
                        name: 'n',
                        description: '<p>value to parse</p>\n',
                        type: 'String|Boolean|Number'
                      },
                      {
                        name: 'radix',
                        description: '<p>the radix to convert to (default: 10)</p>\n',
                        type: 'Integer',
                        optional: true
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'ns',
                        description: '<p>values to parse</p>\n',
                        type: 'Array'
                      },
                      {
                        name: 'radix',
                        description: '',
                        type: 'Integer',
                        optional: true
                      }
                    ]
                  }
                ]
              },
              str: {
                name: 'str',
                params: [
                  {
                    name: 'n',
                    description: '<p>value to parse</p>\n',
                    type: 'String|Boolean|Number|Array'
                  }
                ],
                class: 'p5',
                module: 'Data'
              },
              byte: {
                name: 'byte',
                class: 'p5',
                module: 'Data',
                overloads: [
                  {
                    params: [
                      {
                        name: 'n',
                        description: '<p>value to parse</p>\n',
                        type: 'String|Boolean|Number'
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'ns',
                        description: '<p>values to parse</p>\n',
                        type: 'Array'
                      }
                    ]
                  }
                ]
              },
              char: {
                name: 'char',
                class: 'p5',
                module: 'Data',
                overloads: [
                  {
                    params: [
                      {
                        name: 'n',
                        description: '<p>value to parse</p>\n',
                        type: 'String|Number'
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'ns',
                        description: '<p>values to parse</p>\n',
                        type: 'Array'
                      }
                    ]
                  }
                ]
              },
              unchar: {
                name: 'unchar',
                class: 'p5',
                module: 'Data',
                overloads: [
                  {
                    params: [
                      {
                        name: 'n',
                        description: '<p>value to parse</p>\n',
                        type: 'String'
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'ns',
                        description: '<p>values to parse</p>\n',
                        type: 'Array'
                      }
                    ]
                  }
                ]
              },
              hex: {
                name: 'hex',
                class: 'p5',
                module: 'Data',
                overloads: [
                  {
                    params: [
                      {
                        name: 'n',
                        description: '<p>value to parse</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'digits',
                        description: '',
                        type: 'Number',
                        optional: true
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'ns',
                        description: '<p>array of values to parse</p>\n',
                        type: 'Number[]'
                      },
                      {
                        name: 'digits',
                        description: '',
                        type: 'Number',
                        optional: true
                      }
                    ]
                  }
                ]
              },
              unhex: {
                name: 'unhex',
                class: 'p5',
                module: 'Data',
                overloads: [
                  {
                    params: [
                      {
                        name: 'n',
                        description: '<p>value to parse</p>\n',
                        type: 'String'
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'ns',
                        description: '<p>values to parse</p>\n',
                        type: 'Array'
                      }
                    ]
                  }
                ]
              },
              join: {
                name: 'join',
                params: [
                  {
                    name: 'list',
                    description: '<p>array of Strings to be joined</p>\n',
                    type: 'Array'
                  },
                  {
                    name: 'separator',
                    description: '<p>String to be placed between each item</p>\n',
                    type: 'String'
                  }
                ],
                class: 'p5',
                module: 'Data'
              },
              match: {
                name: 'match',
                params: [
                  {
                    name: 'str',
                    description: '<p>the String to be searched</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'regexp',
                    description: '<p>the regexp to be used for matching</p>\n',
                    type: 'String'
                  }
                ],
                class: 'p5',
                module: 'Data'
              },
              matchAll: {
                name: 'matchAll',
                params: [
                  {
                    name: 'str',
                    description: '<p>the String to be searched</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'regexp',
                    description: '<p>the regexp to be used for matching</p>\n',
                    type: 'String'
                  }
                ],
                class: 'p5',
                module: 'Data'
              },
              nf: {
                name: 'nf',
                class: 'p5',
                module: 'Data',
                overloads: [
                  {
                    params: [
                      {
                        name: 'num',
                        description: '<p>the Number to format</p>\n',
                        type: 'Number|String'
                      },
                      {
                        name: 'left',
                        description:
                          '<p>number of digits to the left of the\n                               decimal point</p>\n',
                        type: 'Integer|String',
                        optional: true
                      },
                      {
                        name: 'right',
                        description:
                          '<p>number of digits to the right of the\n                               decimal point</p>\n',
                        type: 'Integer|String',
                        optional: true
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'nums',
                        description: '<p>the Numbers to format</p>\n',
                        type: 'Array'
                      },
                      {
                        name: 'left',
                        description: '',
                        type: 'Integer|String',
                        optional: true
                      },
                      {
                        name: 'right',
                        description: '',
                        type: 'Integer|String',
                        optional: true
                      }
                    ]
                  }
                ]
              },
              nfc: {
                name: 'nfc',
                class: 'p5',
                module: 'Data',
                overloads: [
                  {
                    params: [
                      {
                        name: 'num',
                        description: '<p>the Number to format</p>\n',
                        type: 'Number|String'
                      },
                      {
                        name: 'right',
                        description:
                          '<p>number of digits to the right of the\n                                 decimal point</p>\n',
                        type: 'Integer|String',
                        optional: true
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'nums',
                        description: '<p>the Numbers to format</p>\n',
                        type: 'Array'
                      },
                      {
                        name: 'right',
                        description: '',
                        type: 'Integer|String',
                        optional: true
                      }
                    ]
                  }
                ]
              },
              nfp: {
                name: 'nfp',
                class: 'p5',
                module: 'Data',
                overloads: [
                  {
                    params: [
                      {
                        name: 'num',
                        description: '<p>the Number to format</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'left',
                        description:
                          '<p>number of digits to the left of the decimal\n                               point</p>\n',
                        type: 'Integer',
                        optional: true
                      },
                      {
                        name: 'right',
                        description:
                          '<p>number of digits to the right of the\n                               decimal point</p>\n',
                        type: 'Integer',
                        optional: true
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'nums',
                        description: '<p>the Numbers to format</p>\n',
                        type: 'Number[]'
                      },
                      {
                        name: 'left',
                        description: '',
                        type: 'Integer',
                        optional: true
                      },
                      {
                        name: 'right',
                        description: '',
                        type: 'Integer',
                        optional: true
                      }
                    ]
                  }
                ]
              },
              nfs: {
                name: 'nfs',
                class: 'p5',
                module: 'Data',
                overloads: [
                  {
                    params: [
                      {
                        name: 'num',
                        description: '<p>the Number to format</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'left',
                        description:
                          '<p>number of digits to the left of the decimal\n                               point</p>\n',
                        type: 'Integer',
                        optional: true
                      },
                      {
                        name: 'right',
                        description:
                          '<p>number of digits to the right of the\n                               decimal point</p>\n',
                        type: 'Integer',
                        optional: true
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'nums',
                        description: '<p>the Numbers to format</p>\n',
                        type: 'Array'
                      },
                      {
                        name: 'left',
                        description: '',
                        type: 'Integer',
                        optional: true
                      },
                      {
                        name: 'right',
                        description: '',
                        type: 'Integer',
                        optional: true
                      }
                    ]
                  }
                ]
              },
              split: {
                name: 'split',
                params: [
                  {
                    name: 'value',
                    description: '<p>the String to be split</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'delim',
                    description: '<p>the String used to separate the data</p>\n',
                    type: 'String'
                  }
                ],
                class: 'p5',
                module: 'Data'
              },
              splitTokens: {
                name: 'splitTokens',
                params: [
                  {
                    name: 'value',
                    description: '<p>the String to be split</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'delim',
                    description:
                      '<p>list of individual Strings that will be used as\n                         separators</p>\n',
                    type: 'String',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Data'
              },
              trim: {
                name: 'trim',
                class: 'p5',
                module: 'Data',
                overloads: [
                  {
                    params: [
                      {
                        name: 'str',
                        description: '<p>a String to be trimmed</p>\n',
                        type: 'String'
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'strs',
                        description: '<p>an Array of Strings to be trimmed</p>\n',
                        type: 'Array'
                      }
                    ]
                  }
                ]
              },
              day: {
                name: 'day',
                class: 'p5',
                module: 'IO'
              },
              hour: {
                name: 'hour',
                class: 'p5',
                module: 'IO'
              },
              minute: {
                name: 'minute',
                class: 'p5',
                module: 'IO'
              },
              millis: {
                name: 'millis',
                class: 'p5',
                module: 'IO'
              },
              month: {
                name: 'month',
                class: 'p5',
                module: 'IO'
              },
              second: {
                name: 'second',
                class: 'p5',
                module: 'IO'
              },
              year: {
                name: 'year',
                class: 'p5',
                module: 'IO'
              },
              plane: {
                name: 'plane',
                params: [
                  {
                    name: 'width',
                    description: '<p>width of the plane</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'height',
                    description: '<p>height of the plane</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'detailX',
                    description:
                      '<p>Optional number of triangle\n                            subdivisions in x-dimension</p>\n',
                    type: 'Integer',
                    optional: true
                  },
                  {
                    name: 'detailY',
                    description:
                      '<p>Optional number of triangle\n                            subdivisions in y-dimension</p>\n',
                    type: 'Integer',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Shape'
              },
              box: {
                name: 'box',
                params: [
                  {
                    name: 'width',
                    description: '<p>width of the box</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'Height',
                    description: '<p>height of the box</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'depth',
                    description: '<p>depth of the box</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'detailX',
                    description:
                      '<p>Optional number of triangle\n                           subdivisions in x-dimension</p>\n',
                    type: 'Integer',
                    optional: true
                  },
                  {
                    name: 'detailY',
                    description:
                      '<p>Optional number of triangle\n                           subdivisions in y-dimension</p>\n',
                    type: 'Integer',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Shape'
              },
              sphere: {
                name: 'sphere',
                params: [
                  {
                    name: 'radius',
                    description: '<p>radius of circle</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'detailX',
                    description: '<p>optional number of subdivisions in x-dimension</p>\n',
                    type: 'Integer',
                    optional: true
                  },
                  {
                    name: 'detailY',
                    description: '<p>optional number of subdivisions in y-dimension</p>\n',
                    type: 'Integer',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Shape'
              },
              cylinder: {
                name: 'cylinder',
                params: [
                  {
                    name: 'radius',
                    description: '<p>radius of the surface</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'height',
                    description: '<p>height of the cylinder</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'detailX',
                    description:
                      '<p>number of subdivisions in x-dimension;\n                              default is 24</p>\n',
                    type: 'Integer',
                    optional: true
                  },
                  {
                    name: 'detailY',
                    description:
                      '<p>number of subdivisions in y-dimension;\n                              default is 1</p>\n',
                    type: 'Integer',
                    optional: true
                  },
                  {
                    name: 'bottomCap',
                    description: '<p>whether to draw the bottom of the cylinder</p>\n',
                    type: 'Boolean',
                    optional: true
                  },
                  {
                    name: 'topCap',
                    description: '<p>whether to draw the top of the cylinder</p>\n',
                    type: 'Boolean',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Shape'
              },
              cone: {
                name: 'cone',
                params: [
                  {
                    name: 'radius',
                    description: '<p>radius of the bottom surface</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'height',
                    description: '<p>height of the cone</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'detailX',
                    description:
                      '<p>number of segments,\n                            the more segments the smoother geometry\n                            default is 24</p>\n',
                    type: 'Integer',
                    optional: true
                  },
                  {
                    name: 'detailY',
                    description:
                      '<p>number of segments,\n                            the more segments the smoother geometry\n                            default is 1</p>\n',
                    type: 'Integer',
                    optional: true
                  },
                  {
                    name: 'cap',
                    description: '<p>whether to draw the base of the cone</p>\n',
                    type: 'Boolean',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Shape'
              },
              ellipsoid: {
                name: 'ellipsoid',
                params: [
                  {
                    name: 'radiusx',
                    description: '<p>x-radius of ellipsoid</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'radiusy',
                    description: '<p>y-radius of ellipsoid</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'radiusz',
                    description: '<p>z-radius of ellipsoid</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'detailX',
                    description:
                      '<p>number of segments,\n                                   the more segments the smoother geometry\n                                   default is 24. Avoid detail number above\n                                   150, it may crash the browser.</p>\n',
                    type: 'Integer',
                    optional: true
                  },
                  {
                    name: 'detailY',
                    description:
                      '<p>number of segments,\n                                   the more segments the smoother geometry\n                                   default is 16. Avoid detail number above\n                                   150, it may crash the browser.</p>\n',
                    type: 'Integer',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Shape'
              },
              torus: {
                name: 'torus',
                params: [
                  {
                    name: 'radius',
                    description: '<p>radius of the whole ring</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'tubeRadius',
                    description: '<p>radius of the tube</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'detailX',
                    description:
                      '<p>number of segments in x-dimension,\n                               the more segments the smoother geometry\n                               default is 24</p>\n',
                    type: 'Integer',
                    optional: true
                  },
                  {
                    name: 'detailY',
                    description:
                      '<p>number of segments in y-dimension,\n                               the more segments the smoother geometry\n                               default is 16</p>\n',
                    type: 'Integer',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Shape'
              },
              orbitControl: {
                name: 'orbitControl',
                params: [
                  {
                    name: 'sensitivityX',
                    description: '<p>sensitivity to mouse movement along X axis</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'sensitivityY',
                    description: '<p>sensitivity to mouse movement along Y axis</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'sensitivityZ',
                    description: '<p>sensitivity to scroll movement along Z axis</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Lights, Camera'
              },
              debugMode: {
                name: 'debugMode',
                class: 'p5',
                module: 'Lights, Camera',
                overloads: [
                  {
                    params: []
                  },
                  {
                    params: [
                      {
                        name: 'mode',
                        description: '<p>either GRID or AXES</p>\n',
                        type: 'Constant'
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'mode',
                        description: '',
                        type: 'Constant'
                      },
                      {
                        name: 'gridSize',
                        description: '<p>size of one side of the grid</p>\n',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'gridDivisions',
                        description: '<p>number of divisions in the grid</p>\n',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'xOff',
                        description: '<p>X axis offset from origin (0,0,0)</p>\n',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'yOff',
                        description: '<p>Y axis offset from origin (0,0,0)</p>\n',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'zOff',
                        description: '<p>Z axis offset from origin (0,0,0)</p>\n',
                        type: 'Number',
                        optional: true
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'mode',
                        description: '',
                        type: 'Constant'
                      },
                      {
                        name: 'axesSize',
                        description: '<p>size of axes icon</p>\n',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'xOff',
                        description: '',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'yOff',
                        description: '',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'zOff',
                        description: '',
                        type: 'Number',
                        optional: true
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'gridSize',
                        description: '',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'gridDivisions',
                        description: '',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'gridXOff',
                        description: '',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'gridYOff',
                        description: '',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'gridZOff',
                        description: '',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'axesSize',
                        description: '',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'axesXOff',
                        description: '',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'axesYOff',
                        description: '',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'axesZOff',
                        description: '',
                        type: 'Number',
                        optional: true
                      }
                    ]
                  }
                ]
              },
              noDebugMode: {
                name: 'noDebugMode',
                class: 'p5',
                module: 'Lights, Camera'
              },
              ambientLight: {
                name: 'ambientLight',
                class: 'p5',
                module: 'Lights, Camera',
                overloads: [
                  {
                    params: [
                      {
                        name: 'v1',
                        description:
                          '<p>red or hue value relative to\n                                the current color range</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'v2',
                        description:
                          '<p>green or saturation value\n                                relative to the current color range</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'v3',
                        description:
                          '<p>blue or brightness value\n                                relative to the current color range</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'alpha',
                        description: '<p>the alpha value</p>\n',
                        type: 'Number',
                        optional: true
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'value',
                        description: '<p>a color string</p>\n',
                        type: 'String'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'gray',
                        description: '<p>a gray value</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'alpha',
                        description: '',
                        type: 'Number',
                        optional: true
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'values',
                        description:
                          '<p>an array containing the red,green,blue &\n                                and alpha components of the color</p>\n',
                        type: 'Number[]'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'color',
                        description: '<p>the ambient light color</p>\n',
                        type: 'p5.Color'
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              specularColor: {
                name: 'specularColor',
                class: 'p5',
                module: 'Lights, Camera',
                overloads: [
                  {
                    params: [
                      {
                        name: 'v1',
                        description:
                          '<p>red or hue value relative to\n                                the current color range</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'v2',
                        description:
                          '<p>green or saturation value\n                                relative to the current color range</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'v3',
                        description:
                          '<p>blue or brightness value\n                                relative to the current color range</p>\n',
                        type: 'Number'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'value',
                        description: '<p>a color string</p>\n',
                        type: 'String'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'gray',
                        description: '<p>a gray value</p>\n',
                        type: 'Number'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'values',
                        description:
                          '<p>an array containing the red,green,blue &\n                                and alpha components of the color</p>\n',
                        type: 'Number[]'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'color',
                        description: '<p>the ambient light color</p>\n',
                        type: 'p5.Color'
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              directionalLight: {
                name: 'directionalLight',
                class: 'p5',
                module: 'Lights, Camera',
                overloads: [
                  {
                    params: [
                      {
                        name: 'v1',
                        description:
                          '<p>red or hue value (depending on the current\ncolor mode),</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'v2',
                        description: '<p>green or saturation value</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'v3',
                        description: '<p>blue or brightness value</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'position',
                        description: '<p>the direction of the light</p>\n',
                        type: 'p5.Vector'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'color',
                        description:
                          '<p>color Array, CSS color string,\n                                            or <a href="#/p5.Color">p5.Color</a> value</p>\n',
                        type: 'Number[]|String|p5.Color'
                      },
                      {
                        name: 'x',
                        description: '<p>x axis direction</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y',
                        description: '<p>y axis direction</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'z',
                        description: '<p>z axis direction</p>\n',
                        type: 'Number'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'color',
                        description: '',
                        type: 'Number[]|String|p5.Color'
                      },
                      {
                        name: 'position',
                        description: '',
                        type: 'p5.Vector'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'v1',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'v2',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'v3',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'x',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'y',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'z',
                        description: '',
                        type: 'Number'
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              pointLight: {
                name: 'pointLight',
                class: 'p5',
                module: 'Lights, Camera',
                overloads: [
                  {
                    params: [
                      {
                        name: 'v1',
                        description:
                          '<p>red or hue value (depending on the current\ncolor mode),</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'v2',
                        description: '<p>green or saturation value</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'v3',
                        description: '<p>blue or brightness value</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'x',
                        description: '<p>x axis position</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y',
                        description: '<p>y axis position</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'z',
                        description: '<p>z axis position</p>\n',
                        type: 'Number'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'v1',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'v2',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'v3',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'position',
                        description: '<p>the position of the light</p>\n',
                        type: 'p5.Vector'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'color',
                        description:
                          '<p>color Array, CSS color string,\nor <a href="#/p5.Color">p5.Color</a> value</p>\n',
                        type: 'Number[]|String|p5.Color'
                      },
                      {
                        name: 'x',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'y',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'z',
                        description: '',
                        type: 'Number'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'color',
                        description: '',
                        type: 'Number[]|String|p5.Color'
                      },
                      {
                        name: 'position',
                        description: '',
                        type: 'p5.Vector'
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              lights: {
                name: 'lights',
                class: 'p5',
                module: 'Lights, Camera'
              },
              lightFalloff: {
                name: 'lightFalloff',
                params: [
                  {
                    name: 'constant',
                    description: '<p>constant value for determining falloff</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'linear',
                    description: '<p>linear value for determining falloff</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'quadratic',
                    description: '<p>quadratic value for determining falloff</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Lights, Camera'
              },
              spotLight: {
                name: 'spotLight',
                class: 'p5',
                module: 'Lights, Camera',
                overloads: [
                  {
                    params: [
                      {
                        name: 'v1',
                        description:
                          '<p>red or hue value (depending on the current\ncolor mode),</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'v2',
                        description: '<p>green or saturation value</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'v3',
                        description: '<p>blue or brightness value</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'x',
                        description: '<p>x axis position</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y',
                        description: '<p>y axis position</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'z',
                        description: '<p>z axis position</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'rx',
                        description: '<p>x axis direction of light</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'ry',
                        description: '<p>y axis direction of light</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'rz',
                        description: '<p>z axis direction of light</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'angle',
                        description:
                          '<p>optional parameter for angle. Defaults to PI/3</p>\n',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'conc',
                        description:
                          '<p>optional parameter for concentration. Defaults to 100</p>\n',
                        type: 'Number',
                        optional: true
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'color',
                        description:
                          '<p>color Array, CSS color string,\nor <a href="#/p5.Color">p5.Color</a> value</p>\n',
                        type: 'Number[]|String|p5.Color'
                      },
                      {
                        name: 'position',
                        description: '<p>the position of the light</p>\n',
                        type: 'p5.Vector'
                      },
                      {
                        name: 'direction',
                        description: '<p>the direction of the light</p>\n',
                        type: 'p5.Vector'
                      },
                      {
                        name: 'angle',
                        description: '',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'conc',
                        description: '',
                        type: 'Number',
                        optional: true
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'v1',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'v2',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'v3',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'position',
                        description: '',
                        type: 'p5.Vector'
                      },
                      {
                        name: 'direction',
                        description: '',
                        type: 'p5.Vector'
                      },
                      {
                        name: 'angle',
                        description: '',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'conc',
                        description: '',
                        type: 'Number',
                        optional: true
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'color',
                        description: '',
                        type: 'Number[]|String|p5.Color'
                      },
                      {
                        name: 'x',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'y',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'z',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'direction',
                        description: '',
                        type: 'p5.Vector'
                      },
                      {
                        name: 'angle',
                        description: '',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'conc',
                        description: '',
                        type: 'Number',
                        optional: true
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'color',
                        description: '',
                        type: 'Number[]|String|p5.Color'
                      },
                      {
                        name: 'position',
                        description: '',
                        type: 'p5.Vector'
                      },
                      {
                        name: 'rx',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'ry',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'rz',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'angle',
                        description: '',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'conc',
                        description: '',
                        type: 'Number',
                        optional: true
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'v1',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'v2',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'v3',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'x',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'y',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'z',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'direction',
                        description: '',
                        type: 'p5.Vector'
                      },
                      {
                        name: 'angle',
                        description: '',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'conc',
                        description: '',
                        type: 'Number',
                        optional: true
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'v1',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'v2',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'v3',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'position',
                        description: '',
                        type: 'p5.Vector'
                      },
                      {
                        name: 'rx',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'ry',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'rz',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'angle',
                        description: '',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'conc',
                        description: '',
                        type: 'Number',
                        optional: true
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'color',
                        description: '',
                        type: 'Number[]|String|p5.Color'
                      },
                      {
                        name: 'x',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'y',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'z',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'rx',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'ry',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'rz',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'angle',
                        description: '',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'conc',
                        description: '',
                        type: 'Number',
                        optional: true
                      }
                    ]
                  }
                ]
              },
              noLights: {
                name: 'noLights',
                class: 'p5',
                module: 'Lights, Camera'
              },
              loadModel: {
                name: 'loadModel',
                class: 'p5',
                module: 'Shape',
                overloads: [
                  {
                    params: [
                      {
                        name: 'path',
                        description: '<p>Path of the model to be loaded</p>\n',
                        type: 'String'
                      },
                      {
                        name: 'normalize',
                        description:
                          '<p>If true, scale the model to a\n                                     standardized size when loading</p>\n',
                        type: 'Boolean'
                      },
                      {
                        name: 'successCallback',
                        description:
                          '<p>Function to be called\n                                    once the model is loaded. Will be passed\n                                    the 3D model object.</p>\n',
                        type: 'function(p5.Geometry)',
                        optional: true
                      },
                      {
                        name: 'failureCallback',
                        description:
                          '<p>called with event error if\n                                        the model fails to load.</p>\n',
                        type: 'Function(Event)',
                        optional: true
                      },
                      {
                        name: 'fileType',
                        description:
                          '<p>The file extension of the model\n                                     (<code>.stl</code>, <code>.obj</code>).</p>\n',
                        type: 'String',
                        optional: true
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'path',
                        description: '',
                        type: 'String'
                      },
                      {
                        name: 'successCallback',
                        description: '',
                        type: 'function(p5.Geometry)',
                        optional: true
                      },
                      {
                        name: 'failureCallback',
                        description: '',
                        type: 'Function(Event)',
                        optional: true
                      },
                      {
                        name: 'fileType',
                        description: '',
                        type: 'String',
                        optional: true
                      }
                    ]
                  }
                ]
              },
              model: {
                name: 'model',
                params: [
                  {
                    name: 'model',
                    description: '<p>Loaded 3d model to be rendered</p>\n',
                    type: 'p5.Geometry'
                  }
                ],
                class: 'p5',
                module: 'Shape'
              },
              loadShader: {
                name: 'loadShader',
                params: [
                  {
                    name: 'vertFilename',
                    description:
                      '<p>path to file containing vertex shader\nsource code</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'fragFilename',
                    description:
                      '<p>path to file containing fragment shader\nsource code</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'callback',
                    description:
                      '<p>callback to be executed after loadShader\ncompletes. On success, the Shader object is passed as the first argument.</p>\n',
                    type: 'Function',
                    optional: true
                  },
                  {
                    name: 'errorCallback',
                    description:
                      '<p>callback to be executed when an error\noccurs inside loadShader. On error, the error is passed as the first\nargument.</p>\n',
                    type: 'Function',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Lights, Camera'
              },
              createShader: {
                name: 'createShader',
                params: [
                  {
                    name: 'vertSrc',
                    description: '<p>source code for the vertex shader</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'fragSrc',
                    description: '<p>source code for the fragment shader</p>\n',
                    type: 'String'
                  }
                ],
                class: 'p5',
                module: 'Lights, Camera'
              },
              shader: {
                name: 'shader',
                params: [
                  {
                    name: 's',
                    description:
                      '<p>the desired <a href="#/p5.Shader">p5.Shader</a> to use for rendering\nshapes.</p>\n',
                    type: 'p5.Shader',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Lights, Camera'
              },
              resetShader: {
                name: 'resetShader',
                class: 'p5',
                module: 'Lights, Camera'
              },
              texture: {
                name: 'texture',
                params: [
                  {
                    name: 'tex',
                    description:
                      '<p>2-dimensional graphics\n                   to render as texture</p>\n',
                    type: 'p5.Image|p5.MediaElement|p5.Graphics'
                  }
                ],
                class: 'p5',
                module: 'Lights, Camera'
              },
              textureMode: {
                name: 'textureMode',
                params: [
                  {
                    name: 'mode',
                    description: '<p>either IMAGE or NORMAL</p>\n',
                    type: 'Constant'
                  }
                ],
                class: 'p5',
                module: 'Lights, Camera'
              },
              textureWrap: {
                name: 'textureWrap',
                params: [
                  {
                    name: 'wrapX',
                    description: '<p>either CLAMP, REPEAT, or MIRROR</p>\n',
                    type: 'Constant'
                  },
                  {
                    name: 'wrapY',
                    description: '<p>either CLAMP, REPEAT, or MIRROR</p>\n',
                    type: 'Constant',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Lights, Camera'
              },
              normalMaterial: {
                name: 'normalMaterial',
                class: 'p5',
                module: 'Lights, Camera'
              },
              ambientMaterial: {
                name: 'ambientMaterial',
                class: 'p5',
                module: 'Lights, Camera',
                overloads: [
                  {
                    params: [
                      {
                        name: 'v1',
                        description:
                          '<p>gray value, red or hue value\n                        (depending on the current color mode),</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'v2',
                        description: '<p>green or saturation value</p>\n',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'v3',
                        description: '<p>blue or brightness value</p>\n',
                        type: 'Number',
                        optional: true
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'color',
                        description: '<p>color, color Array, or CSS color string</p>\n',
                        type: 'Number[]|String|p5.Color'
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              emissiveMaterial: {
                name: 'emissiveMaterial',
                class: 'p5',
                module: 'Lights, Camera',
                overloads: [
                  {
                    params: [
                      {
                        name: 'v1',
                        description:
                          '<p>gray value, red or hue value\n                        (depending on the current color mode),</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'v2',
                        description: '<p>green or saturation value</p>\n',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'v3',
                        description: '<p>blue or brightness value</p>\n',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'a',
                        description: '<p>opacity</p>\n',
                        type: 'Number',
                        optional: true
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'color',
                        description: '<p>color, color Array, or CSS color string</p>\n',
                        type: 'Number[]|String|p5.Color'
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              specularMaterial: {
                name: 'specularMaterial',
                class: 'p5',
                module: 'Lights, Camera',
                overloads: [
                  {
                    params: [
                      {
                        name: 'gray',
                        description:
                          '<p>number specifying value between white and black.</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'alpha',
                        description:
                          '<p>alpha value relative to current color range\n                                (default is 0-255)</p>\n',
                        type: 'Number',
                        optional: true
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'v1',
                        description:
                          '<p>red or hue value relative to\n                                the current color range</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'v2',
                        description:
                          '<p>green or saturation value\n                                relative to the current color range</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'v3',
                        description:
                          '<p>blue or brightness value\n                                relative to the current color range</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'alpha',
                        description: '',
                        type: 'Number',
                        optional: true
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'color',
                        description: '<p>color Array, or CSS color string</p>\n',
                        type: 'Number[]|String|p5.Color'
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              shininess: {
                name: 'shininess',
                params: [
                  {
                    name: 'shine',
                    description:
                      '<p>Degree of Shininess.\n                      Defaults to 1.</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'Lights, Camera'
              },
              camera: {
                name: 'camera',
                params: [
                  {
                    name: 'x',
                    description: '<p>camera position value on x axis</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'y',
                    description: '<p>camera position value on y axis</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'z',
                    description: '<p>camera position value on z axis</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'centerX',
                    description: '<p>x coordinate representing center of the sketch</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'centerY',
                    description: '<p>y coordinate representing center of the sketch</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'centerZ',
                    description: '<p>z coordinate representing center of the sketch</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'upX',
                    description: "<p>x component of direction 'up' from camera</p>\n",
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'upY',
                    description: "<p>y component of direction 'up' from camera</p>\n",
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'upZ',
                    description: "<p>z component of direction 'up' from camera</p>\n",
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Lights, Camera'
              },
              perspective: {
                name: 'perspective',
                params: [
                  {
                    name: 'fovy',
                    description:
                      '<p>camera frustum vertical field of view,\n                          from bottom to top of view, in <a href="#/p5/angleMode">angleMode</a> units</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'aspect',
                    description: '<p>camera frustum aspect ratio</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'near',
                    description: '<p>frustum near plane length</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'far',
                    description: '<p>frustum far plane length</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Lights, Camera'
              },
              ortho: {
                name: 'ortho',
                params: [
                  {
                    name: 'left',
                    description: '<p>camera frustum left plane</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'right',
                    description: '<p>camera frustum right plane</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'bottom',
                    description: '<p>camera frustum bottom plane</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'top',
                    description: '<p>camera frustum top plane</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'near',
                    description: '<p>camera frustum near plane</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'far',
                    description: '<p>camera frustum far plane</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Lights, Camera'
              },
              frustum: {
                name: 'frustum',
                params: [
                  {
                    name: 'left',
                    description: '<p>camera frustum left plane</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'right',
                    description: '<p>camera frustum right plane</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'bottom',
                    description: '<p>camera frustum bottom plane</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'top',
                    description: '<p>camera frustum top plane</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'near',
                    description: '<p>camera frustum near plane</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'far',
                    description: '<p>camera frustum far plane</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'Lights, Camera'
              },
              createCamera: {
                name: 'createCamera',
                class: 'p5',
                module: 'Lights, Camera'
              },
              setCamera: {
                name: 'setCamera',
                params: [
                  {
                    name: 'cam',
                    description: '<p>p5.Camera object</p>\n',
                    type: 'p5.Camera'
                  }
                ],
                class: 'p5',
                module: 'Lights, Camera'
              },
              setAttributes: {
                name: 'setAttributes',
                class: 'p5',
                module: 'Rendering',
                overloads: [
                  {
                    params: [
                      {
                        name: 'key',
                        description: '<p>Name of attribute</p>\n',
                        type: 'String'
                      },
                      {
                        name: 'value',
                        description: '<p>New value of named attribute</p>\n',
                        type: 'Boolean'
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'obj',
                        description: '<p>object with key-value pairs</p>\n',
                        type: 'Object'
                      }
                    ]
                  }
                ]
              },
              getAudioContext: {
                name: 'getAudioContext',
                class: 'p5',
                module: 'p5.sound'
              },
              userStartAudio: {
                params: [
                  {
                    name: 'element(s)',
                    description:
                      '<p>This argument can be an Element,\n                              Selector String, NodeList, p5.Element,\n                              jQuery Element, or an Array of any of those.</p>\n',
                    type: 'Element|Array',
                    optional: true
                  },
                  {
                    name: 'callback',
                    description:
                      '<p>Callback to invoke when the AudioContext\n                              has started</p>\n',
                    type: 'Function',
                    optional: true
                  }
                ],
                name: 'userStartAudio',
                class: 'p5',
                module: 'p5.sound'
              },
              getOutputVolume: {
                name: 'getOutputVolume',
                class: 'p5',
                module: 'p5.sound'
              },
              outputVolume: {
                name: 'outputVolume',
                params: [
                  {
                    name: 'volume',
                    description:
                      '<p>Volume (amplitude) between 0.0\n                                   and 1.0 or modulating signal/oscillator</p>\n',
                    type: 'Number|Object'
                  },
                  {
                    name: 'rampTime',
                    description: '<p>Fade for t seconds</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'timeFromNow',
                    description:
                      '<p>Schedule this event to happen at\n                               t seconds in the future</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'p5.sound'
              },
              soundOut: {
                name: 'soundOut',
                class: 'p5',
                module: 'p5.sound'
              },
              sampleRate: {
                name: 'sampleRate',
                class: 'p5',
                module: 'p5.sound'
              },
              freqToMidi: {
                name: 'freqToMidi',
                params: [
                  {
                    name: 'frequency',
                    description:
                      '<p>A freqeuncy, for example, the "A"\n                           above Middle C is 440Hz</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'p5.sound'
              },
              midiToFreq: {
                name: 'midiToFreq',
                params: [
                  {
                    name: 'midiNote',
                    description: '<p>The number of a MIDI note</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'p5.sound'
              },
              soundFormats: {
                name: 'soundFormats',
                params: [
                  {
                    name: 'formats',
                    description: "<p>i.e. 'mp3', 'wav', 'ogg'</p>\n",
                    type: 'String',
                    optional: true,
                    multiple: true
                  }
                ],
                class: 'p5',
                module: 'p5.sound'
              },
              saveSound: {
                name: 'saveSound',
                params: [
                  {
                    name: 'soundFile',
                    description: '<p>p5.SoundFile that you wish to save</p>\n',
                    type: 'p5.SoundFile'
                  },
                  {
                    name: 'fileName',
                    description: '<p>name of the resulting .wav file.</p>\n',
                    type: 'String'
                  }
                ],
                class: 'p5',
                module: 'p5.sound'
              },
              loadSound: {
                name: 'loadSound',
                params: [
                  {
                    name: 'path',
                    description:
                      "<p>Path to the sound file, or an array with\n                                  paths to soundfiles in multiple formats\n                                  i.e. ['sound.ogg', 'sound.mp3'].\n                                  Alternately, accepts an object: either\n                                  from the HTML5 File API, or a p5.File.</p>\n",
                    type: 'String|Array'
                  },
                  {
                    name: 'successCallback',
                    description: '<p>Name of a function to call once file loads</p>\n',
                    type: 'Function',
                    optional: true
                  },
                  {
                    name: 'errorCallback',
                    description:
                      '<p>Name of a function to call if there is\n                                    an error loading the file.</p>\n',
                    type: 'Function',
                    optional: true
                  },
                  {
                    name: 'whileLoading',
                    description:
                      '<p>Name of a function to call while file is loading.\n                               This function will receive the percentage loaded\n                               so far, from 0.0 to 1.0.</p>\n',
                    type: 'Function',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'p5.sound'
              },
              createConvolver: {
                name: 'createConvolver',
                params: [
                  {
                    name: 'path',
                    description: '<p>path to a sound file</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'callback',
                    description:
                      '<p>function to call if loading is successful.\n                              The object will be passed in as the argument\n                              to the callback function.</p>\n',
                    type: 'Function',
                    optional: true
                  },
                  {
                    name: 'errorCallback',
                    description:
                      '<p>function to call if loading is not successful.\n                              A custom error will be passed in as the argument\n                              to the callback function.</p>\n',
                    type: 'Function',
                    optional: true
                  }
                ],
                class: 'p5',
                module: 'p5.sound'
              },
              setBPM: {
                name: 'setBPM',
                params: [
                  {
                    name: 'BPM',
                    description: '<p>Beats Per Minute</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'rampTime',
                    description: '<p>Seconds from now</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5',
                module: 'p5.sound'
              }
            },
            'p5.Color': {
              toString: {
                name: 'toString',
                params: [
                  {
                    name: 'format',
                    description:
                      "<p>How the color string will be formatted.\nLeaving this empty formats the string as rgba(r, g, b, a).\n'#rgb' '#rgba' '#rrggbb' and '#rrggbbaa' format as hexadecimal color codes.\n'rgb' 'hsb' and 'hsl' return the color formatted in the specified color mode.\n'rgba' 'hsba' and 'hsla' are the same as above but with alpha channels.\n'rgb%' 'hsb%' 'hsl%' 'rgba%' 'hsba%' and 'hsla%' format as percentages.</p>\n",
                    type: 'String',
                    optional: true
                  }
                ],
                class: 'p5.Color',
                module: 'Color'
              },
              setRed: {
                name: 'setRed',
                params: [
                  {
                    name: 'red',
                    description: '<p>the new red value</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.Color',
                module: 'Color'
              },
              setGreen: {
                name: 'setGreen',
                params: [
                  {
                    name: 'green',
                    description: '<p>the new green value</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.Color',
                module: 'Color'
              },
              setBlue: {
                name: 'setBlue',
                params: [
                  {
                    name: 'blue',
                    description: '<p>the new blue value</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.Color',
                module: 'Color'
              },
              setAlpha: {
                name: 'setAlpha',
                params: [
                  {
                    name: 'alpha',
                    description: '<p>the new alpha value</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.Color',
                module: 'Color'
              }
            },
            'p5.Element': {
              elt: {
                name: 'elt',
                class: 'p5.Element',
                module: 'DOM'
              },
              parent: {
                name: 'parent',
                class: 'p5.Element',
                module: 'DOM',
                overloads: [
                  {
                    params: [
                      {
                        name: 'parent',
                        description:
                          '<p>the ID, DOM node, or <a href="#/p5.Element">p5.Element</a>\n                         of desired parent element</p>\n',
                        type: 'String|p5.Element|Object'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: []
                  }
                ]
              },
              id: {
                name: 'id',
                class: 'p5.Element',
                module: 'DOM',
                overloads: [
                  {
                    params: [
                      {
                        name: 'id',
                        description: '<p>ID of the element</p>\n',
                        type: 'String'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: []
                  }
                ]
              },
              class: {
                name: 'class',
                class: 'p5.Element',
                module: 'DOM',
                overloads: [
                  {
                    params: [
                      {
                        name: 'class',
                        description: '<p>class to add</p>\n',
                        type: 'String'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: []
                  }
                ]
              },
              mousePressed: {
                name: 'mousePressed',
                params: [
                  {
                    name: 'fxn',
                    description:
                      '<p>function to be fired when mouse is\n                               pressed over the element.\n                               if <code>false</code> is passed instead, the previously\n                               firing function will no longer fire.</p>\n',
                    type: 'Function|Boolean'
                  }
                ],
                class: 'p5.Element',
                module: 'DOM'
              },
              doubleClicked: {
                name: 'doubleClicked',
                params: [
                  {
                    name: 'fxn',
                    description:
                      '<p>function to be fired when mouse is\n                               double clicked over the element.\n                               if <code>false</code> is passed instead, the previously\n                               firing function will no longer fire.</p>\n',
                    type: 'Function|Boolean'
                  }
                ],
                class: 'p5.Element',
                module: 'DOM'
              },
              mouseWheel: {
                name: 'mouseWheel',
                params: [
                  {
                    name: 'fxn',
                    description:
                      '<p>function to be fired when mouse is\n                               scrolled over the element.\n                               if <code>false</code> is passed instead, the previously\n                               firing function will no longer fire.</p>\n',
                    type: 'Function|Boolean'
                  }
                ],
                class: 'p5.Element',
                module: 'DOM'
              },
              mouseReleased: {
                name: 'mouseReleased',
                params: [
                  {
                    name: 'fxn',
                    description:
                      '<p>function to be fired when mouse is\n                               released over the element.\n                               if <code>false</code> is passed instead, the previously\n                               firing function will no longer fire.</p>\n',
                    type: 'Function|Boolean'
                  }
                ],
                class: 'p5.Element',
                module: 'DOM'
              },
              mouseClicked: {
                name: 'mouseClicked',
                params: [
                  {
                    name: 'fxn',
                    description:
                      '<p>function to be fired when mouse is\n                               clicked over the element.\n                               if <code>false</code> is passed instead, the previously\n                               firing function will no longer fire.</p>\n',
                    type: 'Function|Boolean'
                  }
                ],
                class: 'p5.Element',
                module: 'DOM'
              },
              mouseMoved: {
                name: 'mouseMoved',
                params: [
                  {
                    name: 'fxn',
                    description:
                      '<p>function to be fired when a mouse moves\n                               over the element.\n                               if <code>false</code> is passed instead, the previously\n                               firing function will no longer fire.</p>\n',
                    type: 'Function|Boolean'
                  }
                ],
                class: 'p5.Element',
                module: 'DOM'
              },
              mouseOver: {
                name: 'mouseOver',
                params: [
                  {
                    name: 'fxn',
                    description:
                      '<p>function to be fired when a mouse moves\n                               onto the element.\n                               if <code>false</code> is passed instead, the previously\n                               firing function will no longer fire.</p>\n',
                    type: 'Function|Boolean'
                  }
                ],
                class: 'p5.Element',
                module: 'DOM'
              },
              mouseOut: {
                name: 'mouseOut',
                params: [
                  {
                    name: 'fxn',
                    description:
                      '<p>function to be fired when a mouse\n                               moves off of an element.\n                               if <code>false</code> is passed instead, the previously\n                               firing function will no longer fire.</p>\n',
                    type: 'Function|Boolean'
                  }
                ],
                class: 'p5.Element',
                module: 'DOM'
              },
              touchStarted: {
                name: 'touchStarted',
                params: [
                  {
                    name: 'fxn',
                    description:
                      '<p>function to be fired when a touch\n                               starts over the element.\n                               if <code>false</code> is passed instead, the previously\n                               firing function will no longer fire.</p>\n',
                    type: 'Function|Boolean'
                  }
                ],
                class: 'p5.Element',
                module: 'DOM'
              },
              touchMoved: {
                name: 'touchMoved',
                params: [
                  {
                    name: 'fxn',
                    description:
                      '<p>function to be fired when a touch moves over\n                               the element.\n                               if <code>false</code> is passed instead, the previously\n                               firing function will no longer fire.</p>\n',
                    type: 'Function|Boolean'
                  }
                ],
                class: 'p5.Element',
                module: 'DOM'
              },
              touchEnded: {
                name: 'touchEnded',
                params: [
                  {
                    name: 'fxn',
                    description:
                      '<p>function to be fired when a touch ends\n                               over the element.\n                               if <code>false</code> is passed instead, the previously\n                               firing function will no longer fire.</p>\n',
                    type: 'Function|Boolean'
                  }
                ],
                class: 'p5.Element',
                module: 'DOM'
              },
              dragOver: {
                name: 'dragOver',
                params: [
                  {
                    name: 'fxn',
                    description:
                      '<p>function to be fired when a file is\n                               dragged over the element.\n                               if <code>false</code> is passed instead, the previously\n                               firing function will no longer fire.</p>\n',
                    type: 'Function|Boolean'
                  }
                ],
                class: 'p5.Element',
                module: 'DOM'
              },
              dragLeave: {
                name: 'dragLeave',
                params: [
                  {
                    name: 'fxn',
                    description:
                      '<p>function to be fired when a file is\n                               dragged off the element.\n                               if <code>false</code> is passed instead, the previously\n                               firing function will no longer fire.</p>\n',
                    type: 'Function|Boolean'
                  }
                ],
                class: 'p5.Element',
                module: 'DOM'
              },
              addClass: {
                name: 'addClass',
                params: [
                  {
                    name: 'class',
                    description: '<p>name of class to add</p>\n',
                    type: 'String'
                  }
                ],
                class: 'p5.Element',
                module: 'DOM'
              },
              removeClass: {
                name: 'removeClass',
                params: [
                  {
                    name: 'class',
                    description: '<p>name of class to remove</p>\n',
                    type: 'String'
                  }
                ],
                class: 'p5.Element',
                module: 'DOM'
              },
              hasClass: {
                name: 'hasClass',
                params: [
                  {
                    name: 'c',
                    description: '<p>class name of class to check</p>\n',
                    type: 'String'
                  }
                ],
                class: 'p5.Element',
                module: 'DOM'
              },
              toggleClass: {
                name: 'toggleClass',
                params: [
                  {
                    name: 'c',
                    description: '<p>class name to toggle</p>\n',
                    type: 'String'
                  }
                ],
                class: 'p5.Element',
                module: 'DOM'
              },
              child: {
                name: 'child',
                class: 'p5.Element',
                module: 'DOM',
                overloads: [
                  {
                    params: []
                  },
                  {
                    params: [
                      {
                        name: 'child',
                        description:
                          '<p>the ID, DOM node, or <a href="#/p5.Element">p5.Element</a>\n                        to add to the current element</p>\n',
                        type: 'String|p5.Element',
                        optional: true
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              center: {
                name: 'center',
                params: [
                  {
                    name: 'align',
                    description:
                      "<p>passing 'vertical', 'horizontal' aligns element accordingly</p>\n",
                    type: 'String',
                    optional: true
                  }
                ],
                class: 'p5.Element',
                module: 'DOM'
              },
              html: {
                name: 'html',
                class: 'p5.Element',
                module: 'DOM',
                overloads: [
                  {
                    params: []
                  },
                  {
                    params: [
                      {
                        name: 'html',
                        description: '<p>the HTML to be placed inside the element</p>\n',
                        type: 'String',
                        optional: true
                      },
                      {
                        name: 'append',
                        description: '<p>whether to append HTML to existing</p>\n',
                        type: 'Boolean',
                        optional: true
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              position: {
                name: 'position',
                class: 'p5.Element',
                module: 'DOM',
                overloads: [
                  {
                    params: []
                  },
                  {
                    params: [
                      {
                        name: 'x',
                        description:
                          '<p>x-position relative to upper left of window (optional)</p>\n',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'y',
                        description:
                          '<p>y-position relative to upper left of window (optional)</p>\n',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'positionType',
                        description:
                          '<p>it can be static, fixed, relative, sticky, initial or inherit (optional)</p>\n',
                        type: 'String'
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              style: {
                name: 'style',
                class: 'p5.Element',
                module: 'DOM',
                overloads: [
                  {
                    params: [
                      {
                        name: 'property',
                        description: '<p>property to be set</p>\n',
                        type: 'String'
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'property',
                        description: '',
                        type: 'String'
                      },
                      {
                        name: 'value',
                        description: '<p>value to assign to property</p>\n',
                        type: 'String|p5.Color'
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              attribute: {
                name: 'attribute',
                class: 'p5.Element',
                module: 'DOM',
                overloads: [
                  {
                    params: []
                  },
                  {
                    params: [
                      {
                        name: 'attr',
                        description: '<p>attribute to set</p>\n',
                        type: 'String'
                      },
                      {
                        name: 'value',
                        description: '<p>value to assign to attribute</p>\n',
                        type: 'String'
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              removeAttribute: {
                name: 'removeAttribute',
                params: [
                  {
                    name: 'attr',
                    description: '<p>attribute to remove</p>\n',
                    type: 'String'
                  }
                ],
                class: 'p5.Element',
                module: 'DOM'
              },
              value: {
                name: 'value',
                class: 'p5.Element',
                module: 'DOM',
                overloads: [
                  {
                    params: []
                  },
                  {
                    params: [
                      {
                        name: 'value',
                        description: '',
                        type: 'String|Number'
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              show: {
                name: 'show',
                class: 'p5.Element',
                module: 'DOM'
              },
              hide: {
                name: 'hide',
                class: 'p5.Element',
                module: 'DOM'
              },
              size: {
                name: 'size',
                class: 'p5.Element',
                module: 'DOM',
                overloads: [
                  {
                    params: []
                  },
                  {
                    params: [
                      {
                        name: 'w',
                        description:
                          '<p>width of the element, either AUTO, or a number</p>\n',
                        type: 'Number|Constant'
                      },
                      {
                        name: 'h',
                        description:
                          '<p>height of the element, either AUTO, or a number</p>\n',
                        type: 'Number|Constant',
                        optional: true
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              remove: {
                name: 'remove',
                class: 'p5.Element',
                module: 'DOM'
              },
              drop: {
                name: 'drop',
                params: [
                  {
                    name: 'callback',
                    description:
                      '<p>callback to receive loaded file, called for each file dropped.</p>\n',
                    type: 'Function'
                  },
                  {
                    name: 'fxn',
                    description:
                      '<p>callback triggered once when files are dropped with the drop event.</p>\n',
                    type: 'Function',
                    optional: true
                  }
                ],
                class: 'p5.Element',
                module: 'DOM'
              }
            },
            'p5.Graphics': {
              reset: {
                name: 'reset',
                class: 'p5.Graphics',
                module: 'Rendering'
              },
              remove: {
                name: 'remove',
                class: 'p5.Graphics',
                module: 'Rendering'
              }
            },
            JSON: {
              stringify: {
                name: 'stringify',
                params: [
                  {
                    name: 'object',
                    description:
                      '<p>:Javascript object that you would like to convert to JSON</p>\n',
                    type: 'Object'
                  }
                ],
                class: 'JSON',
                module: 'Foundation'
              }
            },
            console: {
              log: {
                name: 'log',
                params: [
                  {
                    name: 'message',
                    description:
                      '<p>:Message that you would like to print to the console</p>\n',
                    type: 'String|Expression|Object'
                  }
                ],
                class: 'console',
                module: 'Foundation'
              }
            },
            'p5.TypedDict': {
              size: {
                name: 'size',
                class: 'p5.TypedDict',
                module: 'Data'
              },
              hasKey: {
                name: 'hasKey',
                params: [
                  {
                    name: 'key',
                    description: '<p>that you want to look up</p>\n',
                    type: 'Number|String'
                  }
                ],
                class: 'p5.TypedDict',
                module: 'Data'
              },
              get: {
                name: 'get',
                params: [
                  {
                    name: 'the',
                    description: '<p>key you want to access</p>\n',
                    type: 'Number|String'
                  }
                ],
                class: 'p5.TypedDict',
                module: 'Data'
              },
              set: {
                name: 'set',
                params: [
                  {
                    name: 'key',
                    description: '',
                    type: 'Number|String'
                  },
                  {
                    name: 'value',
                    description: '',
                    type: 'Number|String'
                  }
                ],
                class: 'p5.TypedDict',
                module: 'Data'
              },
              create: {
                name: 'create',
                class: 'p5.TypedDict',
                module: 'Data',
                overloads: [
                  {
                    params: [
                      {
                        name: 'key',
                        description: '',
                        type: 'Number|String'
                      },
                      {
                        name: 'value',
                        description: '',
                        type: 'Number|String'
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'obj',
                        description: '<p>key/value pair</p>\n',
                        type: 'Object'
                      }
                    ]
                  }
                ]
              },
              clear: {
                name: 'clear',
                class: 'p5.TypedDict',
                module: 'Data'
              },
              remove: {
                name: 'remove',
                params: [
                  {
                    name: 'key',
                    description: '<p>for the pair to remove</p>\n',
                    type: 'Number|String'
                  }
                ],
                class: 'p5.TypedDict',
                module: 'Data'
              },
              print: {
                name: 'print',
                class: 'p5.TypedDict',
                module: 'Data'
              },
              saveTable: {
                name: 'saveTable',
                class: 'p5.TypedDict',
                module: 'Data'
              },
              saveJSON: {
                name: 'saveJSON',
                class: 'p5.TypedDict',
                module: 'Data'
              }
            },
            'p5.NumberDict': {
              add: {
                name: 'add',
                params: [
                  {
                    name: 'Key',
                    description: '<p>for the value you wish to add to</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'Number',
                    description: '<p>to add to the value</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.NumberDict',
                module: 'Data'
              },
              sub: {
                name: 'sub',
                params: [
                  {
                    name: 'Key',
                    description: '<p>for the value you wish to subtract from</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'Number',
                    description: '<p>to subtract from the value</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.NumberDict',
                module: 'Data'
              },
              mult: {
                name: 'mult',
                params: [
                  {
                    name: 'Key',
                    description: '<p>for value you wish to multiply</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'Amount',
                    description: '<p>to multiply the value by</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.NumberDict',
                module: 'Data'
              },
              div: {
                name: 'div',
                params: [
                  {
                    name: 'Key',
                    description: '<p>for value you wish to divide</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'Amount',
                    description: '<p>to divide the value by</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.NumberDict',
                module: 'Data'
              },
              minValue: {
                name: 'minValue',
                class: 'p5.NumberDict',
                module: 'Data'
              },
              maxValue: {
                name: 'maxValue',
                class: 'p5.NumberDict',
                module: 'Data'
              },
              minKey: {
                name: 'minKey',
                class: 'p5.NumberDict',
                module: 'Data'
              },
              maxKey: {
                name: 'maxKey',
                class: 'p5.NumberDict',
                module: 'Data'
              }
            },
            'p5.MediaElement': {
              src: {
                name: 'src',
                class: 'p5.MediaElement',
                module: 'DOM'
              },
              play: {
                name: 'play',
                class: 'p5.MediaElement',
                module: 'DOM'
              },
              stop: {
                name: 'stop',
                class: 'p5.MediaElement',
                module: 'DOM'
              },
              pause: {
                name: 'pause',
                class: 'p5.MediaElement',
                module: 'DOM'
              },
              loop: {
                name: 'loop',
                class: 'p5.MediaElement',
                module: 'DOM'
              },
              noLoop: {
                name: 'noLoop',
                class: 'p5.MediaElement',
                module: 'DOM'
              },
              autoplay: {
                name: 'autoplay',
                params: [
                  {
                    name: 'shouldAutoplay',
                    description: '<p>whether the element should autoplay</p>\n',
                    type: 'Boolean'
                  }
                ],
                class: 'p5.MediaElement',
                module: 'DOM'
              },
              volume: {
                name: 'volume',
                class: 'p5.MediaElement',
                module: 'DOM',
                overloads: [
                  {
                    params: []
                  },
                  {
                    params: [
                      {
                        name: 'val',
                        description: '<p>volume between 0.0 and 1.0</p>\n',
                        type: 'Number'
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              speed: {
                name: 'speed',
                class: 'p5.MediaElement',
                module: 'DOM',
                overloads: [
                  {
                    params: []
                  },
                  {
                    params: [
                      {
                        name: 'speed',
                        description: '<p>speed multiplier for element playback</p>\n',
                        type: 'Number'
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              time: {
                name: 'time',
                class: 'p5.MediaElement',
                module: 'DOM',
                overloads: [
                  {
                    params: []
                  },
                  {
                    params: [
                      {
                        name: 'time',
                        description: '<p>time to jump to (in seconds)</p>\n',
                        type: 'Number'
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              duration: {
                name: 'duration',
                class: 'p5.MediaElement',
                module: 'DOM'
              },
              onended: {
                name: 'onended',
                params: [
                  {
                    name: 'callback',
                    description:
                      '<p>function to call when the\n                            soundfile has ended. The\n                            media element will be passed\n                            in as the argument to the\n                            callback.</p>\n',
                    type: 'Function'
                  }
                ],
                class: 'p5.MediaElement',
                module: 'DOM'
              },
              connect: {
                name: 'connect',
                params: [
                  {
                    name: 'audioNode',
                    description:
                      '<p>AudioNode from the Web Audio API,\nor an object from the p5.sound library</p>\n',
                    type: 'AudioNode|Object'
                  }
                ],
                class: 'p5.MediaElement',
                module: 'DOM'
              },
              disconnect: {
                name: 'disconnect',
                class: 'p5.MediaElement',
                module: 'DOM'
              },
              showControls: {
                name: 'showControls',
                class: 'p5.MediaElement',
                module: 'DOM'
              },
              hideControls: {
                name: 'hideControls',
                class: 'p5.MediaElement',
                module: 'DOM'
              },
              addCue: {
                name: 'addCue',
                params: [
                  {
                    name: 'time',
                    description:
                      "<p>Time in seconds, relative to this media\n                            element's playback. For example, to trigger\n                            an event every time playback reaches two\n                            seconds, pass in the number 2. This will be\n                            passed as the first parameter to\n                            the callback function.</p>\n",
                    type: 'Number'
                  },
                  {
                    name: 'callback',
                    description:
                      '<p>Name of a function that will be\n                            called at the given time. The callback will\n                            receive time and (optionally) param as its\n                            two parameters.</p>\n',
                    type: 'Function'
                  },
                  {
                    name: 'value',
                    description:
                      '<p>An object to be passed as the\n                            second parameter to the\n                            callback function.</p>\n',
                    type: 'Object',
                    optional: true
                  }
                ],
                class: 'p5.MediaElement',
                module: 'DOM'
              },
              removeCue: {
                name: 'removeCue',
                params: [
                  {
                    name: 'id',
                    description: '<p>ID of the cue, as returned by addCue</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.MediaElement',
                module: 'DOM'
              },
              clearCues: {
                name: 'clearCues',
                params: [
                  {
                    name: 'id',
                    description: '<p>ID of the cue, as returned by addCue</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.MediaElement',
                module: 'DOM'
              }
            },
            'p5.File': {
              file: {
                name: 'file',
                class: 'p5.File',
                module: 'DOM'
              },
              type: {
                name: 'type',
                class: 'p5.File',
                module: 'DOM'
              },
              subtype: {
                name: 'subtype',
                class: 'p5.File',
                module: 'DOM'
              },
              name: {
                name: 'name',
                class: 'p5.File',
                module: 'DOM'
              },
              size: {
                name: 'size',
                class: 'p5.File',
                module: 'DOM'
              },
              data: {
                name: 'data',
                class: 'p5.File',
                module: 'DOM'
              }
            },
            'p5.Image': {
              width: {
                name: 'width',
                class: 'p5.Image',
                module: 'Image'
              },
              height: {
                name: 'height',
                class: 'p5.Image',
                module: 'Image'
              },
              pixels: {
                name: 'pixels',
                class: 'p5.Image',
                module: 'Image'
              },
              loadPixels: {
                name: 'loadPixels',
                class: 'p5.Image',
                module: 'Image'
              },
              updatePixels: {
                name: 'updatePixels',
                class: 'p5.Image',
                module: 'Image',
                overloads: [
                  {
                    params: [
                      {
                        name: 'x',
                        description:
                          '<p>x-offset of the target update area for the\n                             underlying canvas</p>\n',
                        type: 'Integer'
                      },
                      {
                        name: 'y',
                        description:
                          '<p>y-offset of the target update area for the\n                             underlying canvas</p>\n',
                        type: 'Integer'
                      },
                      {
                        name: 'w',
                        description:
                          '<p>height of the target update area for the\n                             underlying canvas</p>\n',
                        type: 'Integer'
                      },
                      {
                        name: 'h',
                        description:
                          '<p>height of the target update area for the\n                             underlying canvas</p>\n',
                        type: 'Integer'
                      }
                    ]
                  },
                  {
                    params: []
                  }
                ]
              },
              get: {
                name: 'get',
                class: 'p5.Image',
                module: 'Image',
                overloads: [
                  {
                    params: [
                      {
                        name: 'x',
                        description: '<p>x-coordinate of the pixel</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y',
                        description: '<p>y-coordinate of the pixel</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'w',
                        description: '<p>width</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'h',
                        description: '<p>height</p>\n',
                        type: 'Number'
                      }
                    ]
                  },
                  {
                    params: []
                  },
                  {
                    params: [
                      {
                        name: 'x',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'y',
                        description: '',
                        type: 'Number'
                      }
                    ]
                  }
                ]
              },
              set: {
                name: 'set',
                params: [
                  {
                    name: 'x',
                    description: '<p>x-coordinate of the pixel</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'y',
                    description: '<p>y-coordinate of the pixel</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'a',
                    description:
                      '<p>grayscale value | pixel array |\n                               a <a href="#/p5.Color">p5.Color</a> | image to copy</p>\n',
                    type: 'Number|Number[]|Object'
                  }
                ],
                class: 'p5.Image',
                module: 'Image'
              },
              resize: {
                name: 'resize',
                params: [
                  {
                    name: 'width',
                    description: '<p>the resized image width</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'height',
                    description: '<p>the resized image height</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.Image',
                module: 'Image'
              },
              copy: {
                name: 'copy',
                class: 'p5.Image',
                module: 'Image',
                overloads: [
                  {
                    params: [
                      {
                        name: 'srcImage',
                        description: '<p>source image</p>\n',
                        type: 'p5.Image|p5.Element'
                      },
                      {
                        name: 'sx',
                        description:
                          "<p>X coordinate of the source's upper left corner</p>\n",
                        type: 'Integer'
                      },
                      {
                        name: 'sy',
                        description:
                          "<p>Y coordinate of the source's upper left corner</p>\n",
                        type: 'Integer'
                      },
                      {
                        name: 'sw',
                        description: '<p>source image width</p>\n',
                        type: 'Integer'
                      },
                      {
                        name: 'sh',
                        description: '<p>source image height</p>\n',
                        type: 'Integer'
                      },
                      {
                        name: 'dx',
                        description:
                          "<p>X coordinate of the destination's upper left corner</p>\n",
                        type: 'Integer'
                      },
                      {
                        name: 'dy',
                        description:
                          "<p>Y coordinate of the destination's upper left corner</p>\n",
                        type: 'Integer'
                      },
                      {
                        name: 'dw',
                        description: '<p>destination image width</p>\n',
                        type: 'Integer'
                      },
                      {
                        name: 'dh',
                        description: '<p>destination image height</p>\n',
                        type: 'Integer'
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'sx',
                        description: '',
                        type: 'Integer'
                      },
                      {
                        name: 'sy',
                        description: '',
                        type: 'Integer'
                      },
                      {
                        name: 'sw',
                        description: '',
                        type: 'Integer'
                      },
                      {
                        name: 'sh',
                        description: '',
                        type: 'Integer'
                      },
                      {
                        name: 'dx',
                        description: '',
                        type: 'Integer'
                      },
                      {
                        name: 'dy',
                        description: '',
                        type: 'Integer'
                      },
                      {
                        name: 'dw',
                        description: '',
                        type: 'Integer'
                      },
                      {
                        name: 'dh',
                        description: '',
                        type: 'Integer'
                      }
                    ]
                  }
                ]
              },
              mask: {
                name: 'mask',
                params: [
                  {
                    name: 'srcImage',
                    description: '<p>source image</p>\n',
                    type: 'p5.Image'
                  }
                ],
                class: 'p5.Image',
                module: 'Image'
              },
              filter: {
                name: 'filter',
                params: [
                  {
                    name: 'filterType',
                    description:
                      '<p>either THRESHOLD, GRAY, OPAQUE, INVERT,\n                               POSTERIZE, ERODE, DILATE or BLUR.\n                               See Filters.js for docs on\n                               each available filter</p>\n',
                    type: 'Constant'
                  },
                  {
                    name: 'filterParam',
                    description:
                      '<p>an optional parameter unique\n                               to each filter, see above</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.Image',
                module: 'Image'
              },
              blend: {
                name: 'blend',
                class: 'p5.Image',
                module: 'Image',
                overloads: [
                  {
                    params: [
                      {
                        name: 'srcImage',
                        description: '<p>source image</p>\n',
                        type: 'p5.Image'
                      },
                      {
                        name: 'sx',
                        description:
                          "<p>X coordinate of the source's upper left corner</p>\n",
                        type: 'Integer'
                      },
                      {
                        name: 'sy',
                        description:
                          "<p>Y coordinate of the source's upper left corner</p>\n",
                        type: 'Integer'
                      },
                      {
                        name: 'sw',
                        description: '<p>source image width</p>\n',
                        type: 'Integer'
                      },
                      {
                        name: 'sh',
                        description: '<p>source image height</p>\n',
                        type: 'Integer'
                      },
                      {
                        name: 'dx',
                        description:
                          "<p>X coordinate of the destination's upper left corner</p>\n",
                        type: 'Integer'
                      },
                      {
                        name: 'dy',
                        description:
                          "<p>Y coordinate of the destination's upper left corner</p>\n",
                        type: 'Integer'
                      },
                      {
                        name: 'dw',
                        description: '<p>destination image width</p>\n',
                        type: 'Integer'
                      },
                      {
                        name: 'dh',
                        description: '<p>destination image height</p>\n',
                        type: 'Integer'
                      },
                      {
                        name: 'blendMode',
                        description:
                          '<p>the blend mode. either\n    BLEND, DARKEST, LIGHTEST, DIFFERENCE,\n    MULTIPLY, EXCLUSION, SCREEN, REPLACE, OVERLAY, HARD_LIGHT,\n    SOFT_LIGHT, DODGE, BURN, ADD or NORMAL.</p>\n<p>Available blend modes are: normal | multiply | screen | overlay |\n           darken | lighten | color-dodge | color-burn | hard-light |\n           soft-light | difference | exclusion | hue | saturation |\n           color | luminosity</p>\n<p><a href="http://blogs.adobe.com/webplatform/2013/01/28/blending-features-in-canvas/">http://blogs.adobe.com/webplatform/2013/01/28/blending-features-in-canvas/</a></p>\n',
                        type: 'Constant'
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'sx',
                        description: '',
                        type: 'Integer'
                      },
                      {
                        name: 'sy',
                        description: '',
                        type: 'Integer'
                      },
                      {
                        name: 'sw',
                        description: '',
                        type: 'Integer'
                      },
                      {
                        name: 'sh',
                        description: '',
                        type: 'Integer'
                      },
                      {
                        name: 'dx',
                        description: '',
                        type: 'Integer'
                      },
                      {
                        name: 'dy',
                        description: '',
                        type: 'Integer'
                      },
                      {
                        name: 'dw',
                        description: '',
                        type: 'Integer'
                      },
                      {
                        name: 'dh',
                        description: '',
                        type: 'Integer'
                      },
                      {
                        name: 'blendMode',
                        description: '',
                        type: 'Constant'
                      }
                    ]
                  }
                ]
              },
              save: {
                name: 'save',
                params: [
                  {
                    name: 'filename',
                    description: '<p>give your file a name</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'extension',
                    description: "<p>'png' or 'jpg'</p>\n",
                    type: 'String'
                  }
                ],
                class: 'p5.Image',
                module: 'Image'
              },
              reset: {
                name: 'reset',
                class: 'p5.Image',
                module: 'Image'
              },
              getCurrentFrame: {
                name: 'getCurrentFrame',
                class: 'p5.Image',
                module: 'Image'
              },
              setFrame: {
                name: 'setFrame',
                params: [
                  {
                    name: 'index',
                    description:
                      '<p>the index for the frame that should be displayed</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.Image',
                module: 'Image'
              },
              numFrames: {
                name: 'numFrames',
                class: 'p5.Image',
                module: 'Image'
              },
              play: {
                name: 'play',
                class: 'p5.Image',
                module: 'Image'
              },
              pause: {
                name: 'pause',
                class: 'p5.Image',
                module: 'Image'
              },
              delay: {
                name: 'delay',
                params: [
                  {
                    name: 'd',
                    description:
                      '<p>the amount in milliseconds to delay between switching frames</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'index',
                    description:
                      '<p>the index of the frame that should have the new delay value {optional}</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.Image',
                module: 'Image'
              }
            },
            'p5.PrintWriter': {
              write: {
                name: 'write',
                params: [
                  {
                    name: 'data',
                    description: '<p>all data to be written by the PrintWriter</p>\n',
                    type: 'Array'
                  }
                ],
                class: 'p5.PrintWriter',
                module: 'IO'
              },
              print: {
                name: 'print',
                params: [
                  {
                    name: 'data',
                    description: '<p>all data to be printed by the PrintWriter</p>\n',
                    type: 'Array'
                  }
                ],
                class: 'p5.PrintWriter',
                module: 'IO'
              },
              clear: {
                name: 'clear',
                class: 'p5.PrintWriter',
                module: 'IO'
              },
              close: {
                name: 'close',
                class: 'p5.PrintWriter',
                module: 'IO'
              }
            },
            'p5.Table': {
              columns: {
                name: 'columns',
                class: 'p5.Table',
                module: 'IO'
              },
              rows: {
                name: 'rows',
                class: 'p5.Table',
                module: 'IO'
              },
              addRow: {
                name: 'addRow',
                params: [
                  {
                    name: 'row',
                    description: '<p>row to be added to the table</p>\n',
                    type: 'p5.TableRow',
                    optional: true
                  }
                ],
                class: 'p5.Table',
                module: 'IO'
              },
              removeRow: {
                name: 'removeRow',
                params: [
                  {
                    name: 'id',
                    description: '<p>ID number of the row to remove</p>\n',
                    type: 'Integer'
                  }
                ],
                class: 'p5.Table',
                module: 'IO'
              },
              getRow: {
                name: 'getRow',
                params: [
                  {
                    name: 'rowID',
                    description: '<p>ID number of the row to get</p>\n',
                    type: 'Integer'
                  }
                ],
                class: 'p5.Table',
                module: 'IO'
              },
              getRows: {
                name: 'getRows',
                class: 'p5.Table',
                module: 'IO'
              },
              findRow: {
                name: 'findRow',
                params: [
                  {
                    name: 'value',
                    description: '<p>The value to match</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'column',
                    description:
                      '<p>ID number or title of the\n                               column to search</p>\n',
                    type: 'Integer|String'
                  }
                ],
                class: 'p5.Table',
                module: 'IO'
              },
              findRows: {
                name: 'findRows',
                params: [
                  {
                    name: 'value',
                    description: '<p>The value to match</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'column',
                    description:
                      '<p>ID number or title of the\n                               column to search</p>\n',
                    type: 'Integer|String'
                  }
                ],
                class: 'p5.Table',
                module: 'IO'
              },
              matchRow: {
                name: 'matchRow',
                params: [
                  {
                    name: 'regexp',
                    description: '<p>The regular expression to match</p>\n',
                    type: 'String|RegExp'
                  },
                  {
                    name: 'column',
                    description:
                      '<p>The column ID (number) or\n                                 title (string)</p>\n',
                    type: 'String|Integer'
                  }
                ],
                class: 'p5.Table',
                module: 'IO'
              },
              matchRows: {
                name: 'matchRows',
                params: [
                  {
                    name: 'regexp',
                    description: '<p>The regular expression to match</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'column',
                    description:
                      '<p>The column ID (number) or\n                                 title (string)</p>\n',
                    type: 'String|Integer',
                    optional: true
                  }
                ],
                class: 'p5.Table',
                module: 'IO'
              },
              getColumn: {
                name: 'getColumn',
                params: [
                  {
                    name: 'column',
                    description: '<p>String or Number of the column to return</p>\n',
                    type: 'String|Number'
                  }
                ],
                class: 'p5.Table',
                module: 'IO'
              },
              clearRows: {
                name: 'clearRows',
                class: 'p5.Table',
                module: 'IO'
              },
              addColumn: {
                name: 'addColumn',
                params: [
                  {
                    name: 'title',
                    description: '<p>title of the given column</p>\n',
                    type: 'String',
                    optional: true
                  }
                ],
                class: 'p5.Table',
                module: 'IO'
              },
              getColumnCount: {
                name: 'getColumnCount',
                class: 'p5.Table',
                module: 'IO'
              },
              getRowCount: {
                name: 'getRowCount',
                class: 'p5.Table',
                module: 'IO'
              },
              removeTokens: {
                name: 'removeTokens',
                params: [
                  {
                    name: 'chars',
                    description: '<p>String listing characters to be removed</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'column',
                    description:
                      '<p>Column ID (number)\n                                 or name (string)</p>\n',
                    type: 'String|Integer',
                    optional: true
                  }
                ],
                class: 'p5.Table',
                module: 'IO'
              },
              trim: {
                name: 'trim',
                params: [
                  {
                    name: 'column',
                    description:
                      '<p>Column ID (number)\n                                 or name (string)</p>\n',
                    type: 'String|Integer',
                    optional: true
                  }
                ],
                class: 'p5.Table',
                module: 'IO'
              },
              removeColumn: {
                name: 'removeColumn',
                params: [
                  {
                    name: 'column',
                    description: '<p>columnName (string) or ID (number)</p>\n',
                    type: 'String|Integer'
                  }
                ],
                class: 'p5.Table',
                module: 'IO'
              },
              set: {
                name: 'set',
                params: [
                  {
                    name: 'row',
                    description: '<p>row ID</p>\n',
                    type: 'Integer'
                  },
                  {
                    name: 'column',
                    description:
                      '<p>column ID (Number)\n                              or title (String)</p>\n',
                    type: 'String|Integer'
                  },
                  {
                    name: 'value',
                    description: '<p>value to assign</p>\n',
                    type: 'String|Number'
                  }
                ],
                class: 'p5.Table',
                module: 'IO'
              },
              setNum: {
                name: 'setNum',
                params: [
                  {
                    name: 'row',
                    description: '<p>row ID</p>\n',
                    type: 'Integer'
                  },
                  {
                    name: 'column',
                    description:
                      '<p>column ID (Number)\n                              or title (String)</p>\n',
                    type: 'String|Integer'
                  },
                  {
                    name: 'value',
                    description: '<p>value to assign</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.Table',
                module: 'IO'
              },
              setString: {
                name: 'setString',
                params: [
                  {
                    name: 'row',
                    description: '<p>row ID</p>\n',
                    type: 'Integer'
                  },
                  {
                    name: 'column',
                    description:
                      '<p>column ID (Number)\n                              or title (String)</p>\n',
                    type: 'String|Integer'
                  },
                  {
                    name: 'value',
                    description: '<p>value to assign</p>\n',
                    type: 'String'
                  }
                ],
                class: 'p5.Table',
                module: 'IO'
              },
              get: {
                name: 'get',
                params: [
                  {
                    name: 'row',
                    description: '<p>row ID</p>\n',
                    type: 'Integer'
                  },
                  {
                    name: 'column',
                    description:
                      '<p>columnName (string) or\n                                  ID (number)</p>\n',
                    type: 'String|Integer'
                  }
                ],
                class: 'p5.Table',
                module: 'IO'
              },
              getNum: {
                name: 'getNum',
                params: [
                  {
                    name: 'row',
                    description: '<p>row ID</p>\n',
                    type: 'Integer'
                  },
                  {
                    name: 'column',
                    description:
                      '<p>columnName (string) or\n                                  ID (number)</p>\n',
                    type: 'String|Integer'
                  }
                ],
                class: 'p5.Table',
                module: 'IO'
              },
              getString: {
                name: 'getString',
                params: [
                  {
                    name: 'row',
                    description: '<p>row ID</p>\n',
                    type: 'Integer'
                  },
                  {
                    name: 'column',
                    description:
                      '<p>columnName (string) or\n                                  ID (number)</p>\n',
                    type: 'String|Integer'
                  }
                ],
                class: 'p5.Table',
                module: 'IO'
              },
              getObject: {
                name: 'getObject',
                params: [
                  {
                    name: 'headerColumn',
                    description:
                      '<p>Name of the column which should be used to\n                             title each row object (optional)</p>\n',
                    type: 'String',
                    optional: true
                  }
                ],
                class: 'p5.Table',
                module: 'IO'
              },
              getArray: {
                name: 'getArray',
                class: 'p5.Table',
                module: 'IO'
              }
            },
            'p5.TableRow': {
              set: {
                name: 'set',
                params: [
                  {
                    name: 'column',
                    description:
                      '<p>Column ID (Number)\n                              or Title (String)</p>\n',
                    type: 'String|Integer'
                  },
                  {
                    name: 'value',
                    description: '<p>The value to be stored</p>\n',
                    type: 'String|Number'
                  }
                ],
                class: 'p5.TableRow',
                module: 'IO'
              },
              setNum: {
                name: 'setNum',
                params: [
                  {
                    name: 'column',
                    description:
                      '<p>Column ID (Number)\n                              or Title (String)</p>\n',
                    type: 'String|Integer'
                  },
                  {
                    name: 'value',
                    description:
                      '<p>The value to be stored\n                              as a Float</p>\n',
                    type: 'Number|String'
                  }
                ],
                class: 'p5.TableRow',
                module: 'IO'
              },
              setString: {
                name: 'setString',
                params: [
                  {
                    name: 'column',
                    description:
                      '<p>Column ID (Number)\n                              or Title (String)</p>\n',
                    type: 'String|Integer'
                  },
                  {
                    name: 'value',
                    description:
                      '<p>The value to be stored\n                              as a String</p>\n',
                    type: 'String|Number|Boolean|Object'
                  }
                ],
                class: 'p5.TableRow',
                module: 'IO'
              },
              get: {
                name: 'get',
                params: [
                  {
                    name: 'column',
                    description:
                      '<p>columnName (string) or\n                                 ID (number)</p>\n',
                    type: 'String|Integer'
                  }
                ],
                class: 'p5.TableRow',
                module: 'IO'
              },
              getNum: {
                name: 'getNum',
                params: [
                  {
                    name: 'column',
                    description:
                      '<p>columnName (string) or\n                                 ID (number)</p>\n',
                    type: 'String|Integer'
                  }
                ],
                class: 'p5.TableRow',
                module: 'IO'
              },
              getString: {
                name: 'getString',
                params: [
                  {
                    name: 'column',
                    description:
                      '<p>columnName (string) or\n                                 ID (number)</p>\n',
                    type: 'String|Integer'
                  }
                ],
                class: 'p5.TableRow',
                module: 'IO'
              }
            },
            'p5.XML': {
              getParent: {
                name: 'getParent',
                class: 'p5.XML',
                module: 'IO'
              },
              getName: {
                name: 'getName',
                class: 'p5.XML',
                module: 'IO'
              },
              setName: {
                name: 'setName',
                params: [
                  {
                    name: 'the',
                    description: '<p>new name of the node</p>\n',
                    type: 'String'
                  }
                ],
                class: 'p5.XML',
                module: 'IO'
              },
              hasChildren: {
                name: 'hasChildren',
                class: 'p5.XML',
                module: 'IO'
              },
              listChildren: {
                name: 'listChildren',
                class: 'p5.XML',
                module: 'IO'
              },
              getChildren: {
                name: 'getChildren',
                params: [
                  {
                    name: 'name',
                    description: '<p>element name</p>\n',
                    type: 'String',
                    optional: true
                  }
                ],
                class: 'p5.XML',
                module: 'IO'
              },
              getChild: {
                name: 'getChild',
                params: [
                  {
                    name: 'name',
                    description: '<p>element name or index</p>\n',
                    type: 'String|Integer'
                  }
                ],
                class: 'p5.XML',
                module: 'IO'
              },
              addChild: {
                name: 'addChild',
                params: [
                  {
                    name: 'node',
                    description:
                      '<p>a <a href="#/p5.XML">p5.XML</a> Object which will be the child to be added</p>\n',
                    type: 'p5.XML'
                  }
                ],
                class: 'p5.XML',
                module: 'IO'
              },
              removeChild: {
                name: 'removeChild',
                params: [
                  {
                    name: 'name',
                    description: '<p>element name or index</p>\n',
                    type: 'String|Integer'
                  }
                ],
                class: 'p5.XML',
                module: 'IO'
              },
              getAttributeCount: {
                name: 'getAttributeCount',
                class: 'p5.XML',
                module: 'IO'
              },
              listAttributes: {
                name: 'listAttributes',
                class: 'p5.XML',
                module: 'IO'
              },
              hasAttribute: {
                name: 'hasAttribute',
                params: [
                  {
                    name: 'the',
                    description: '<p>attribute to be checked</p>\n',
                    type: 'String'
                  }
                ],
                class: 'p5.XML',
                module: 'IO'
              },
              getNum: {
                name: 'getNum',
                params: [
                  {
                    name: 'name',
                    description: '<p>the non-null full name of the attribute</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'defaultValue',
                    description: '<p>the default value of the attribute</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.XML',
                module: 'IO'
              },
              getString: {
                name: 'getString',
                params: [
                  {
                    name: 'name',
                    description: '<p>the non-null full name of the attribute</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'defaultValue',
                    description: '<p>the default value of the attribute</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.XML',
                module: 'IO'
              },
              setAttribute: {
                name: 'setAttribute',
                params: [
                  {
                    name: 'name',
                    description: '<p>the full name of the attribute</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'value',
                    description: '<p>the value of the attribute</p>\n',
                    type: 'Number|String|Boolean'
                  }
                ],
                class: 'p5.XML',
                module: 'IO'
              },
              getContent: {
                name: 'getContent',
                params: [
                  {
                    name: 'defaultValue',
                    description: '<p>value returned if no content is found</p>\n',
                    type: 'String',
                    optional: true
                  }
                ],
                class: 'p5.XML',
                module: 'IO'
              },
              setContent: {
                name: 'setContent',
                params: [
                  {
                    name: 'text',
                    description: '<p>the new content</p>\n',
                    type: 'String'
                  }
                ],
                class: 'p5.XML',
                module: 'IO'
              },
              serialize: {
                name: 'serialize',
                class: 'p5.XML',
                module: 'IO'
              }
            },
            'p5.Vector': {
              x: {
                name: 'x',
                class: 'p5.Vector',
                module: 'Math'
              },
              y: {
                name: 'y',
                class: 'p5.Vector',
                module: 'Math'
              },
              z: {
                name: 'z',
                class: 'p5.Vector',
                module: 'Math'
              },
              toString: {
                name: 'toString',
                class: 'p5.Vector',
                module: 'Math'
              },
              set: {
                name: 'set',
                class: 'p5.Vector',
                module: 'Math',
                overloads: [
                  {
                    params: [
                      {
                        name: 'x',
                        description: '<p>the x component of the vector</p>\n',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'y',
                        description: '<p>the y component of the vector</p>\n',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'z',
                        description: '<p>the z component of the vector</p>\n',
                        type: 'Number',
                        optional: true
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'value',
                        description: '<p>the vector to set</p>\n',
                        type: 'p5.Vector|Number[]'
                      }
                    ],
                    chainable: 1
                  }
                ]
              },
              copy: {
                name: 'copy',
                class: 'p5.Vector',
                module: 'Math'
              },
              add: {
                name: 'add',
                class: 'p5.Vector',
                module: 'Math',
                overloads: [
                  {
                    params: [
                      {
                        name: 'x',
                        description: '<p>the x component of the vector to be added</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y',
                        description: '<p>the y component of the vector to be added</p>\n',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'z',
                        description: '<p>the z component of the vector to be added</p>\n',
                        type: 'Number',
                        optional: true
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'value',
                        description: '<p>the vector to add</p>\n',
                        type: 'p5.Vector|Number[]'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'v1',
                        description:
                          '<p>a <a href="#/p5.Vector">p5.Vector</a> to add</p>\n',
                        type: 'p5.Vector'
                      },
                      {
                        name: 'v2',
                        description:
                          '<p>a <a href="#/p5.Vector">p5.Vector</a> to add</p>\n',
                        type: 'p5.Vector'
                      },
                      {
                        name: 'target',
                        description: '<p>the vector to receive the result</p>\n',
                        type: 'p5.Vector',
                        optional: true
                      }
                    ],
                    static: 1
                  }
                ]
              },
              rem: {
                name: 'rem',
                class: 'p5.Vector',
                module: 'Math',
                overloads: [
                  {
                    params: [
                      {
                        name: 'x',
                        description: '<p>the x component of divisor vector</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y',
                        description: '<p>the y component of divisor vector</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'z',
                        description: '<p>the z component of divisor vector</p>\n',
                        type: 'Number'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'value',
                        description: '<p>divisor vector</p>\n',
                        type: 'p5.Vector | Number[]'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'v1',
                        description:
                          '<p>dividend <a href="#/p5.Vector">p5.Vector</a></p>\n',
                        type: 'p5.Vector'
                      },
                      {
                        name: 'v2',
                        description: '<p>divisor <a href="#/p5.Vector">p5.Vector</a></p>\n',
                        type: 'p5.Vector'
                      }
                    ],
                    static: 1
                  },
                  {
                    params: [
                      {
                        name: 'v1',
                        description: '',
                        type: 'p5.Vector'
                      },
                      {
                        name: 'v2',
                        description: '',
                        type: 'p5.Vector'
                      }
                    ],
                    static: 1
                  }
                ]
              },
              sub: {
                name: 'sub',
                class: 'p5.Vector',
                module: 'Math',
                overloads: [
                  {
                    params: [
                      {
                        name: 'x',
                        description: '<p>the x component of the vector to subtract</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y',
                        description: '<p>the y component of the vector to subtract</p>\n',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'z',
                        description: '<p>the z component of the vector to subtract</p>\n',
                        type: 'Number',
                        optional: true
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'value',
                        description: '<p>the vector to subtract</p>\n',
                        type: 'p5.Vector|Number[]'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'v1',
                        description:
                          '<p>a <a href="#/p5.Vector">p5.Vector</a> to subtract from</p>\n',
                        type: 'p5.Vector'
                      },
                      {
                        name: 'v2',
                        description:
                          '<p>a <a href="#/p5.Vector">p5.Vector</a> to subtract</p>\n',
                        type: 'p5.Vector'
                      },
                      {
                        name: 'target',
                        description: '<p>the vector to receive the result</p>\n',
                        type: 'p5.Vector',
                        optional: true
                      }
                    ],
                    static: 1
                  }
                ]
              },
              mult: {
                name: 'mult',
                class: 'p5.Vector',
                module: 'Math',
                overloads: [
                  {
                    params: [
                      {
                        name: 'n',
                        description: '<p>The number to multiply with the vector</p>\n',
                        type: 'Number'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'x',
                        description:
                          '<p>The number to multiply with the x component of the vector</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y',
                        description:
                          '<p>The number to multiply with the y component of the vector</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'z',
                        description:
                          '<p>The number to multiply with the z component of the vector</p>\n',
                        type: 'Number',
                        optional: true
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'arr',
                        description:
                          '<p>The array to multiply with the components of the vector</p>\n',
                        type: 'Number[]'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'v',
                        description:
                          '<p>The vector to multiply with the components of the original vector</p>\n',
                        type: 'p5.Vector'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'x',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'y',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'z',
                        description: '',
                        type: 'Number',
                        optional: true
                      }
                    ],
                    static: 1
                  },
                  {
                    params: [
                      {
                        name: 'v',
                        description: '',
                        type: 'p5.Vector'
                      },
                      {
                        name: 'n',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'target',
                        description: '<p>the vector to receive the result</p>\n',
                        type: 'p5.Vector',
                        optional: true
                      }
                    ],
                    static: 1
                  },
                  {
                    params: [
                      {
                        name: 'v0',
                        description: '',
                        type: 'p5.Vector'
                      },
                      {
                        name: 'v1',
                        description: '',
                        type: 'p5.Vector'
                      },
                      {
                        name: 'target',
                        description: '',
                        type: 'p5.Vector',
                        optional: true
                      }
                    ],
                    static: 1
                  },
                  {
                    params: [
                      {
                        name: 'v0',
                        description: '',
                        type: 'p5.Vector'
                      },
                      {
                        name: 'arr',
                        description: '',
                        type: 'Number[]'
                      },
                      {
                        name: 'target',
                        description: '',
                        type: 'p5.Vector',
                        optional: true
                      }
                    ],
                    static: 1
                  }
                ]
              },
              div: {
                name: 'div',
                class: 'p5.Vector',
                module: 'Math',
                overloads: [
                  {
                    params: [
                      {
                        name: 'n',
                        description: '<p>The number to divide the vector by</p>\n',
                        type: 'Number'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'x',
                        description:
                          '<p>The number to divide with the x component of the vector</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y',
                        description:
                          '<p>The number to divide with the y component of the vector</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'z',
                        description:
                          '<p>The number to divide with the z component of the vector</p>\n',
                        type: 'Number',
                        optional: true
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'arr',
                        description:
                          '<p>The array to divide the components of the vector by</p>\n',
                        type: 'Number[]'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'v',
                        description:
                          '<p>The vector to divide the components of the original vector by</p>\n',
                        type: 'p5.Vector'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'x',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'y',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'z',
                        description: '',
                        type: 'Number',
                        optional: true
                      }
                    ],
                    static: 1
                  },
                  {
                    params: [
                      {
                        name: 'v',
                        description: '',
                        type: 'p5.Vector'
                      },
                      {
                        name: 'n',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'target',
                        description: '<p>the vector to receive the result</p>\n',
                        type: 'p5.Vector',
                        optional: true
                      }
                    ],
                    static: 1
                  },
                  {
                    params: [
                      {
                        name: 'v0',
                        description: '',
                        type: 'p5.Vector'
                      },
                      {
                        name: 'v1',
                        description: '',
                        type: 'p5.Vector'
                      },
                      {
                        name: 'target',
                        description: '',
                        type: 'p5.Vector',
                        optional: true
                      }
                    ],
                    static: 1
                  },
                  {
                    params: [
                      {
                        name: 'v0',
                        description: '',
                        type: 'p5.Vector'
                      },
                      {
                        name: 'arr',
                        description: '',
                        type: 'Number[]'
                      },
                      {
                        name: 'target',
                        description: '',
                        type: 'p5.Vector',
                        optional: true
                      }
                    ],
                    static: 1
                  }
                ]
              },
              mag: {
                name: 'mag',
                class: 'p5.Vector',
                module: 'Math',
                overloads: [
                  {
                    params: []
                  },
                  {
                    params: [
                      {
                        name: 'vecT',
                        description: '<p>the vector to return the magnitude of</p>\n',
                        type: 'p5.Vector'
                      }
                    ],
                    static: 1
                  }
                ]
              },
              magSq: {
                name: 'magSq',
                class: 'p5.Vector',
                module: 'Math'
              },
              dot: {
                name: 'dot',
                class: 'p5.Vector',
                module: 'Math',
                overloads: [
                  {
                    params: [
                      {
                        name: 'x',
                        description: '<p>x component of the vector</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y',
                        description: '<p>y component of the vector</p>\n',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'z',
                        description: '<p>z component of the vector</p>\n',
                        type: 'Number',
                        optional: true
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'value',
                        description:
                          '<p>value component of the vector or a <a href="#/p5.Vector">p5.Vector</a></p>\n',
                        type: 'p5.Vector'
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'v1',
                        description:
                          '<p>the first <a href="#/p5.Vector">p5.Vector</a></p>\n',
                        type: 'p5.Vector'
                      },
                      {
                        name: 'v2',
                        description:
                          '<p>the second <a href="#/p5.Vector">p5.Vector</a></p>\n',
                        type: 'p5.Vector'
                      }
                    ],
                    static: 1
                  }
                ]
              },
              cross: {
                name: 'cross',
                class: 'p5.Vector',
                module: 'Math',
                overloads: [
                  {
                    params: [
                      {
                        name: 'v',
                        description:
                          '<p><a href="#/p5.Vector">p5.Vector</a> to be crossed</p>\n',
                        type: 'p5.Vector'
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'v1',
                        description:
                          '<p>the first <a href="#/p5.Vector">p5.Vector</a></p>\n',
                        type: 'p5.Vector'
                      },
                      {
                        name: 'v2',
                        description:
                          '<p>the second <a href="#/p5.Vector">p5.Vector</a></p>\n',
                        type: 'p5.Vector'
                      }
                    ],
                    static: 1
                  }
                ]
              },
              dist: {
                name: 'dist',
                class: 'p5.Vector',
                module: 'Math',
                overloads: [
                  {
                    params: [
                      {
                        name: 'v',
                        description:
                          '<p>the x, y, and z coordinates of a <a href="#/p5.Vector">p5.Vector</a></p>\n',
                        type: 'p5.Vector'
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'v1',
                        description:
                          '<p>the first <a href="#/p5.Vector">p5.Vector</a></p>\n',
                        type: 'p5.Vector'
                      },
                      {
                        name: 'v2',
                        description:
                          '<p>the second <a href="#/p5.Vector">p5.Vector</a></p>\n',
                        type: 'p5.Vector'
                      }
                    ],
                    static: 1
                  }
                ]
              },
              normalize: {
                name: 'normalize',
                class: 'p5.Vector',
                module: 'Math',
                overloads: [
                  {
                    params: []
                  },
                  {
                    params: [
                      {
                        name: 'v',
                        description: '<p>the vector to normalize</p>\n',
                        type: 'p5.Vector'
                      },
                      {
                        name: 'target',
                        description: '<p>the vector to receive the result</p>\n',
                        type: 'p5.Vector',
                        optional: true
                      }
                    ],
                    static: 1
                  }
                ]
              },
              limit: {
                name: 'limit',
                params: [
                  {
                    name: 'max',
                    description: '<p>the maximum magnitude for the vector</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.Vector',
                module: 'Math'
              },
              setMag: {
                name: 'setMag',
                params: [
                  {
                    name: 'len',
                    description: '<p>the new length for this vector</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.Vector',
                module: 'Math'
              },
              heading: {
                name: 'heading',
                class: 'p5.Vector',
                module: 'Math'
              },
              setHeading: {
                name: 'setHeading',
                params: [
                  {
                    name: 'angle',
                    description: '<p>the angle of rotation</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.Vector',
                module: 'Math'
              },
              rotate: {
                name: 'rotate',
                class: 'p5.Vector',
                module: 'Math',
                overloads: [
                  {
                    params: [
                      {
                        name: 'angle',
                        description: '<p>the angle of rotation</p>\n',
                        type: 'Number'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'v',
                        description: '',
                        type: 'p5.Vector'
                      },
                      {
                        name: 'angle',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'target',
                        description: '<p>the vector to receive the result</p>\n',
                        type: 'p5.Vector',
                        optional: true
                      }
                    ],
                    static: 1
                  }
                ]
              },
              angleBetween: {
                name: 'angleBetween',
                params: [
                  {
                    name: 'value',
                    description:
                      '<p>the x, y, and z components of a <a href="#/p5.Vector">p5.Vector</a></p>\n',
                    type: 'p5.Vector'
                  }
                ],
                class: 'p5.Vector',
                module: 'Math'
              },
              lerp: {
                name: 'lerp',
                class: 'p5.Vector',
                module: 'Math',
                overloads: [
                  {
                    params: [
                      {
                        name: 'x',
                        description: '<p>the x component</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'y',
                        description: '<p>the y component</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'z',
                        description: '<p>the z component</p>\n',
                        type: 'Number'
                      },
                      {
                        name: 'amt',
                        description:
                          '<p>the amount of interpolation; some value between 0.0\n                        (old vector) and 1.0 (new vector). 0.9 is very near\n                        the new vector. 0.5 is halfway in between.</p>\n',
                        type: 'Number'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'v',
                        description:
                          '<p>the <a href="#/p5.Vector">p5.Vector</a> to lerp to</p>\n',
                        type: 'p5.Vector'
                      },
                      {
                        name: 'amt',
                        description: '',
                        type: 'Number'
                      }
                    ],
                    chainable: 1
                  },
                  {
                    params: [
                      {
                        name: 'v1',
                        description: '',
                        type: 'p5.Vector'
                      },
                      {
                        name: 'v2',
                        description: '',
                        type: 'p5.Vector'
                      },
                      {
                        name: 'amt',
                        description: '',
                        type: 'Number'
                      },
                      {
                        name: 'target',
                        description: '<p>the vector to receive the result</p>\n',
                        type: 'p5.Vector',
                        optional: true
                      }
                    ],
                    static: 1
                  }
                ]
              },
              reflect: {
                name: 'reflect',
                params: [
                  {
                    name: 'surfaceNormal',
                    description:
                      '<p>the <a href="#/p5.Vector">p5.Vector</a> to reflect about, will be normalized by this method</p>\n',
                    type: 'p5.Vector'
                  }
                ],
                class: 'p5.Vector',
                module: 'Math'
              },
              array: {
                name: 'array',
                class: 'p5.Vector',
                module: 'Math'
              },
              equals: {
                name: 'equals',
                class: 'p5.Vector',
                module: 'Math',
                overloads: [
                  {
                    params: [
                      {
                        name: 'x',
                        description: '<p>the x component of the vector</p>\n',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'y',
                        description: '<p>the y component of the vector</p>\n',
                        type: 'Number',
                        optional: true
                      },
                      {
                        name: 'z',
                        description: '<p>the z component of the vector</p>\n',
                        type: 'Number',
                        optional: true
                      }
                    ]
                  },
                  {
                    params: [
                      {
                        name: 'value',
                        description: '<p>the vector to compare</p>\n',
                        type: 'p5.Vector|Array'
                      }
                    ]
                  }
                ]
              },
              fromAngle: {
                name: 'fromAngle',
                params: [
                  {
                    name: 'angle',
                    description:
                      '<p>the desired angle, in radians (unaffected by <a href="#/p5/angleMode">angleMode</a>)</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'length',
                    description: '<p>the length of the new vector (defaults to 1)</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.Vector',
                module: 'Math'
              },
              fromAngles: {
                name: 'fromAngles',
                params: [
                  {
                    name: 'theta',
                    description: '<p>the polar angle, in radians (zero is up)</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'phi',
                    description:
                      '<p>the azimuthal angle, in radians\n                              (zero is out of the screen)</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'length',
                    description: '<p>the length of the new vector (defaults to 1)</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.Vector',
                module: 'Math'
              },
              random2D: {
                name: 'random2D',
                class: 'p5.Vector',
                module: 'Math'
              },
              random3D: {
                name: 'random3D',
                class: 'p5.Vector',
                module: 'Math'
              }
            },
            'p5.Font': {
              font: {
                name: 'font',
                class: 'p5.Font',
                module: 'Typography'
              },
              textBounds: {
                name: 'textBounds',
                params: [
                  {
                    name: 'line',
                    description: '<p>a line of text</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'x',
                    description: '<p>x-position</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'y',
                    description: '<p>y-position</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'fontSize',
                    description: '<p>font size to use (optional) Default is 12.</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'options',
                    description:
                      "<p>opentype options (optional)\n                           opentype fonts contains alignment and baseline options.\n                           Default is 'LEFT' and 'alphabetic'</p>\n",
                    type: 'Object',
                    optional: true
                  }
                ],
                class: 'p5.Font',
                module: 'Typography'
              },
              textToPoints: {
                name: 'textToPoints',
                params: [
                  {
                    name: 'txt',
                    description: '<p>a line of text</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'x',
                    description: '<p>x-position</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'y',
                    description: '<p>y-position</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'fontSize',
                    description: '<p>font size to use (optional)</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'options',
                    description:
                      '<p>an (optional) object that can contain:</p>\n<p><br>sampleFactor - the ratio of path-length to number of samples\n(default=.1); higher values yield more points and are therefore\nmore precise</p>\n<p><br>simplifyThreshold - if set to a non-zero value, collinear points will be\nbe removed from the polygon; the value represents the threshold angle to use\nwhen determining whether two edges are collinear</p>\n',
                    type: 'Object',
                    optional: true
                  }
                ],
                class: 'p5.Font',
                module: 'Typography'
              }
            },
            'p5.Camera': {
              eyeX: {
                name: 'eyeX',
                class: 'p5.Camera',
                module: 'Lights, Camera'
              },
              eyeY: {
                name: 'eyeY',
                class: 'p5.Camera',
                module: 'Lights, Camera'
              },
              eyeZ: {
                name: 'eyeZ',
                class: 'p5.Camera',
                module: 'Lights, Camera'
              },
              centerX: {
                name: 'centerX',
                class: 'p5.Camera',
                module: 'Lights, Camera'
              },
              centerY: {
                name: 'centerY',
                class: 'p5.Camera',
                module: 'Lights, Camera'
              },
              centerZ: {
                name: 'centerZ',
                class: 'p5.Camera',
                module: 'Lights, Camera'
              },
              upX: {
                name: 'upX',
                class: 'p5.Camera',
                module: 'Lights, Camera'
              },
              upY: {
                name: 'upY',
                class: 'p5.Camera',
                module: 'Lights, Camera'
              },
              upZ: {
                name: 'upZ',
                class: 'p5.Camera',
                module: 'Lights, Camera'
              },
              perspective: {
                name: 'perspective',
                class: 'p5.Camera',
                module: 'Lights, Camera'
              },
              ortho: {
                name: 'ortho',
                class: 'p5.Camera',
                module: 'Lights, Camera'
              },
              frustum: {
                name: 'frustum',
                class: 'p5.Camera',
                module: 'Lights, Camera'
              },
              pan: {
                name: 'pan',
                params: [
                  {
                    name: 'angle',
                    description:
                      '<p>amount to rotate camera in current\n<a href="#/p5/angleMode">angleMode</a> units.\nGreater than 0 values rotate counterclockwise (to the left).</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.Camera',
                module: 'Lights, Camera'
              },
              tilt: {
                name: 'tilt',
                params: [
                  {
                    name: 'angle',
                    description:
                      '<p>amount to rotate camera in current\n<a href="#/p5/angleMode">angleMode</a> units.\nGreater than 0 values rotate counterclockwise (to the left).</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.Camera',
                module: 'Lights, Camera'
              },
              lookAt: {
                name: 'lookAt',
                params: [
                  {
                    name: 'x',
                    description: '<p>x position of a point in world space</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'y',
                    description: '<p>y position of a point in world space</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'z',
                    description: '<p>z position of a point in world space</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.Camera',
                module: 'Lights, Camera'
              },
              camera: {
                name: 'camera',
                class: 'p5.Camera',
                module: 'Lights, Camera'
              },
              move: {
                name: 'move',
                params: [
                  {
                    name: 'x',
                    description: "<p>amount to move along camera's left-right axis</p>\n",
                    type: 'Number'
                  },
                  {
                    name: 'y',
                    description: "<p>amount to move along camera's up-down axis</p>\n",
                    type: 'Number'
                  },
                  {
                    name: 'z',
                    description:
                      "<p>amount to move along camera's forward-backward axis</p>\n",
                    type: 'Number'
                  }
                ],
                class: 'p5.Camera',
                module: 'Lights, Camera'
              },
              setPosition: {
                name: 'setPosition',
                params: [
                  {
                    name: 'x',
                    description: '<p>x position of a point in world space</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'y',
                    description: '<p>y position of a point in world space</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'z',
                    description: '<p>z position of a point in world space</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.Camera',
                module: 'Lights, Camera'
              }
            },
            'p5.Geometry': {
              computeFaces: {
                name: 'computeFaces',
                class: 'p5.Geometry',
                module: 'Shape'
              },
              computeNormals: {
                name: 'computeNormals',
                class: 'p5.Geometry',
                module: 'Shape'
              },
              averageNormals: {
                name: 'averageNormals',
                class: 'p5.Geometry',
                module: 'Shape'
              },
              averagePoleNormals: {
                name: 'averagePoleNormals',
                class: 'p5.Geometry',
                module: 'Shape'
              },
              normalize: {
                name: 'normalize',
                class: 'p5.Geometry',
                module: 'Shape'
              }
            },
            'p5.Shader': {
              setUniform: {
                name: 'setUniform',
                params: [
                  {
                    name: 'uniformName',
                    description: '<p>the name of the uniform in the\nshader program</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'data',
                    description:
                      '<p>the data to be associated\nwith that uniform; type varies (could be a single numerical value, array,\nmatrix, or texture / sampler reference)</p>\n',
                    type: 'Object|Number|Boolean|Number[]'
                  }
                ],
                class: 'p5.Shader',
                module: 'Lights, Camera'
              }
            },
            'p5.SoundFile': {
              isLoaded: {
                name: 'isLoaded',
                class: 'p5.SoundFile',
                module: 'p5.sound'
              },
              play: {
                name: 'play',
                params: [
                  {
                    name: 'startTime',
                    description:
                      '<p>(optional) schedule playback to start (in seconds from now).</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'rate',
                    description: '<p>(optional) playback rate</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'amp',
                    description:
                      '<p>(optional) amplitude (volume)\n                                    of playback</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'cueStart',
                    description: '<p>(optional) cue start time in seconds</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'duration',
                    description: '<p>(optional) duration of playback in seconds</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.SoundFile',
                module: 'p5.sound'
              },
              playMode: {
                name: 'playMode',
                params: [
                  {
                    name: 'str',
                    description: "<p>'restart' or 'sustain' or 'untilDone'</p>\n",
                    type: 'String'
                  }
                ],
                class: 'p5.SoundFile',
                module: 'p5.sound'
              },
              pause: {
                name: 'pause',
                params: [
                  {
                    name: 'startTime',
                    description:
                      '<p>(optional) schedule event to occur\n                             seconds from now</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.SoundFile',
                module: 'p5.sound'
              },
              loop: {
                name: 'loop',
                params: [
                  {
                    name: 'startTime',
                    description:
                      '<p>(optional) schedule event to occur\n                            seconds from now</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'rate',
                    description: '<p>(optional) playback rate</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'amp',
                    description: '<p>(optional) playback volume</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'cueLoopStart',
                    description: '<p>(optional) startTime in seconds</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'duration',
                    description: '<p>(optional) loop duration in seconds</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.SoundFile',
                module: 'p5.sound'
              },
              setLoop: {
                name: 'setLoop',
                params: [
                  {
                    name: 'Boolean',
                    description: '<p>set looping to true or false</p>\n',
                    type: 'Boolean'
                  }
                ],
                class: 'p5.SoundFile',
                module: 'p5.sound'
              },
              isLooping: {
                name: 'isLooping',
                class: 'p5.SoundFile',
                module: 'p5.sound'
              },
              isPlaying: {
                name: 'isPlaying',
                class: 'p5.SoundFile',
                module: 'p5.sound'
              },
              isPaused: {
                name: 'isPaused',
                class: 'p5.SoundFile',
                module: 'p5.sound'
              },
              stop: {
                name: 'stop',
                params: [
                  {
                    name: 'startTime',
                    description:
                      '<p>(optional) schedule event to occur\n                            in seconds from now</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.SoundFile',
                module: 'p5.sound'
              },
              pan: {
                name: 'pan',
                params: [
                  {
                    name: 'panValue',
                    description: '<p>Set the stereo panner</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'timeFromNow',
                    description:
                      '<p>schedule this event to happen\n                                seconds from now</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.SoundFile',
                module: 'p5.sound'
              },
              getPan: {
                name: 'getPan',
                class: 'p5.SoundFile',
                module: 'p5.sound'
              },
              rate: {
                name: 'rate',
                params: [
                  {
                    name: 'playbackRate',
                    description:
                      '<p>Set the playback rate. 1.0 is normal,\n                                   .5 is half-speed, 2.0 is twice as fast.\n                                   Values less than zero play backwards.</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.SoundFile',
                module: 'p5.sound'
              },
              setVolume: {
                name: 'setVolume',
                params: [
                  {
                    name: 'volume',
                    description:
                      '<p>Volume (amplitude) between 0.0\n                                   and 1.0 or modulating signal/oscillator</p>\n',
                    type: 'Number|Object'
                  },
                  {
                    name: 'rampTime',
                    description: '<p>Fade for t seconds</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'timeFromNow',
                    description:
                      '<p>Schedule this event to happen at\n                               t seconds in the future</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.SoundFile',
                module: 'p5.sound'
              },
              duration: {
                name: 'duration',
                class: 'p5.SoundFile',
                module: 'p5.sound'
              },
              currentTime: {
                name: 'currentTime',
                class: 'p5.SoundFile',
                module: 'p5.sound'
              },
              jump: {
                name: 'jump',
                params: [
                  {
                    name: 'cueTime',
                    description: '<p>cueTime of the soundFile in seconds.</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'duration',
                    description: '<p>duration in seconds.</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.SoundFile',
                module: 'p5.sound'
              },
              channels: {
                name: 'channels',
                class: 'p5.SoundFile',
                module: 'p5.sound'
              },
              sampleRate: {
                name: 'sampleRate',
                class: 'p5.SoundFile',
                module: 'p5.sound'
              },
              frames: {
                name: 'frames',
                class: 'p5.SoundFile',
                module: 'p5.sound'
              },
              getPeaks: {
                name: 'getPeaks',
                params: [
                  {
                    name: 'length',
                    description:
                      '<p>length is the size of the returned array.\n                         Larger length results in more precision.\n                         Defaults to 5*width of the browser window.</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.SoundFile',
                module: 'p5.sound'
              },
              reverseBuffer: {
                name: 'reverseBuffer',
                class: 'p5.SoundFile',
                module: 'p5.sound'
              },
              onended: {
                name: 'onended',
                params: [
                  {
                    name: 'callback',
                    description:
                      '<p>function to call when the\n                            soundfile has ended.</p>\n',
                    type: 'Function'
                  }
                ],
                class: 'p5.SoundFile',
                module: 'p5.sound'
              },
              connect: {
                name: 'connect',
                params: [
                  {
                    name: 'object',
                    description: '<p>Audio object that accepts an input</p>\n',
                    type: 'Object',
                    optional: true
                  }
                ],
                class: 'p5.SoundFile',
                module: 'p5.sound'
              },
              disconnect: {
                name: 'disconnect',
                class: 'p5.SoundFile',
                module: 'p5.sound'
              },
              setPath: {
                name: 'setPath',
                params: [
                  {
                    name: 'path',
                    description: '<p>path to audio file</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'callback',
                    description: '<p>Callback</p>\n',
                    type: 'Function'
                  }
                ],
                class: 'p5.SoundFile',
                module: 'p5.sound'
              },
              setBuffer: {
                name: 'setBuffer',
                params: [
                  {
                    name: 'buf',
                    description:
                      '<p>Array of Float32 Array(s). 2 Float32 Arrays\n                   will create a stereo source. 1 will create\n                   a mono source.</p>\n',
                    type: 'Array'
                  }
                ],
                class: 'p5.SoundFile',
                module: 'p5.sound'
              },
              addCue: {
                name: 'addCue',
                params: [
                  {
                    name: 'time',
                    description:
                      "<p>Time in seconds, relative to this media\n                           element's playback. For example, to trigger\n                           an event every time playback reaches two\n                           seconds, pass in the number 2. This will be\n                           passed as the first parameter to\n                           the callback function.</p>\n",
                    type: 'Number'
                  },
                  {
                    name: 'callback',
                    description:
                      '<p>Name of a function that will be\n                           called at the given time. The callback will\n                           receive time and (optionally) param as its\n                           two parameters.</p>\n',
                    type: 'Function'
                  },
                  {
                    name: 'value',
                    description:
                      '<p>An object to be passed as the\n                           second parameter to the\n                           callback function.</p>\n',
                    type: 'Object',
                    optional: true
                  }
                ],
                class: 'p5.SoundFile',
                module: 'p5.sound'
              },
              removeCue: {
                name: 'removeCue',
                params: [
                  {
                    name: 'id',
                    description: '<p>ID of the cue, as returned by addCue</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.SoundFile',
                module: 'p5.sound'
              },
              clearCues: {
                name: 'clearCues',
                class: 'p5.SoundFile',
                module: 'p5.sound'
              },
              save: {
                name: 'save',
                params: [
                  {
                    name: 'fileName',
                    description: '<p>name of the resulting .wav file.</p>\n',
                    type: 'String',
                    optional: true
                  }
                ],
                class: 'p5.SoundFile',
                module: 'p5.sound'
              },
              getBlob: {
                name: 'getBlob',
                class: 'p5.SoundFile',
                module: 'p5.sound'
              }
            },
            'p5.Amplitude': {
              setInput: {
                name: 'setInput',
                params: [
                  {
                    name: 'snd',
                    description:
                      '<p>set the sound source\n                                     (optional, defaults to\n                                     main output)</p>\n',
                    type: 'SoundObject|undefined',
                    optional: true
                  },
                  {
                    name: 'smoothing',
                    description:
                      '<p>a range between 0.0 and 1.0\n                                      to smooth amplitude readings</p>\n',
                    type: 'Number|undefined',
                    optional: true
                  }
                ],
                class: 'p5.Amplitude',
                module: 'p5.sound'
              },
              getLevel: {
                name: 'getLevel',
                params: [
                  {
                    name: 'channel',
                    description:
                      '<p>Optionally return only channel 0 (left) or 1 (right)</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.Amplitude',
                module: 'p5.sound'
              },
              toggleNormalize: {
                name: 'toggleNormalize',
                params: [
                  {
                    name: 'boolean',
                    description: '<p>set normalize to true (1) or false (0)</p>\n',
                    type: 'Boolean',
                    optional: true
                  }
                ],
                class: 'p5.Amplitude',
                module: 'p5.sound'
              },
              smooth: {
                name: 'smooth',
                params: [
                  {
                    name: 'set',
                    description: '<p>smoothing from 0.0 <= 1</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.Amplitude',
                module: 'p5.sound'
              }
            },
            'p5.FFT': {
              setInput: {
                name: 'setInput',
                params: [
                  {
                    name: 'source',
                    description: '<p>p5.sound object (or web audio API source node)</p>\n',
                    type: 'Object',
                    optional: true
                  }
                ],
                class: 'p5.FFT',
                module: 'p5.sound'
              },
              waveform: {
                name: 'waveform',
                params: [
                  {
                    name: 'bins',
                    description:
                      '<p>Must be a power of two between\n                          16 and 1024. Defaults to 1024.</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'precision',
                    description:
                      '<p>If any value is provided, will return results\n                            in a Float32 Array which is more precise\n                            than a regular array.</p>\n',
                    type: 'String',
                    optional: true
                  }
                ],
                class: 'p5.FFT',
                module: 'p5.sound'
              },
              analyze: {
                name: 'analyze',
                params: [
                  {
                    name: 'bins',
                    description:
                      '<p>Must be a power of two between\n                           16 and 1024. Defaults to 1024.</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'scale',
                    description:
                      '<p>If "dB," returns decibel\n                           float measurements between\n                           -140 and 0 (max).\n                           Otherwise returns integers from 0-255.</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.FFT',
                module: 'p5.sound'
              },
              getEnergy: {
                name: 'getEnergy',
                params: [
                  {
                    name: 'frequency1',
                    description:
                      '<p>Will return a value representing\n                              energy at this frequency. Alternately,\n                              the strings "bass", "lowMid" "mid",\n                              "highMid", and "treble" will return\n                              predefined frequency ranges.</p>\n',
                    type: 'Number|String'
                  },
                  {
                    name: 'frequency2',
                    description:
                      '<p>If a second frequency is given,\n                              will return average amount of\n                              energy that exists between the\n                              two frequencies.</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.FFT',
                module: 'p5.sound'
              },
              getCentroid: {
                name: 'getCentroid',
                class: 'p5.FFT',
                module: 'p5.sound'
              },
              smooth: {
                name: 'smooth',
                params: [
                  {
                    name: 'smoothing',
                    description:
                      '<p>0.0 < smoothing < 1.0.\n                             Defaults to 0.8.</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.FFT',
                module: 'p5.sound'
              },
              linAverages: {
                name: 'linAverages',
                params: [
                  {
                    name: 'N',
                    description: '<p>Number of returned frequency groups</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.FFT',
                module: 'p5.sound'
              },
              logAverages: {
                name: 'logAverages',
                params: [
                  {
                    name: 'octaveBands',
                    description: '<p>Array of Octave Bands objects for grouping</p>\n',
                    type: 'Array'
                  }
                ],
                class: 'p5.FFT',
                module: 'p5.sound'
              },
              getOctaveBands: {
                name: 'getOctaveBands',
                params: [
                  {
                    name: 'N',
                    description:
                      '<p>Specifies the 1/N type of generated octave bands</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'fCtr0',
                    description: '<p>Minimum central frequency for the lowest band</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.FFT',
                module: 'p5.sound'
              }
            },
            'p5.Oscillator': {
              start: {
                name: 'start',
                params: [
                  {
                    name: 'time',
                    description: '<p>startTime in seconds from now.</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'frequency',
                    description: '<p>frequency in Hz.</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.Oscillator',
                module: 'p5.sound'
              },
              stop: {
                name: 'stop',
                params: [
                  {
                    name: 'secondsFromNow',
                    description: '<p>Time, in seconds from now.</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.Oscillator',
                module: 'p5.sound'
              },
              amp: {
                name: 'amp',
                params: [
                  {
                    name: 'vol',
                    description:
                      '<p>between 0 and 1.0\n                            or a modulating signal/oscillator</p>\n',
                    type: 'Number|Object'
                  },
                  {
                    name: 'rampTime',
                    description: '<p>create a fade that lasts rampTime</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'timeFromNow',
                    description:
                      '<p>schedule this event to happen\n                              seconds from now</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.Oscillator',
                module: 'p5.sound'
              },
              getAmp: {
                name: 'getAmp',
                class: 'p5.Oscillator',
                module: 'p5.sound'
              },
              freq: {
                name: 'freq',
                params: [
                  {
                    name: 'Frequency',
                    description:
                      '<p>Frequency in Hz\n                                      or modulating signal/oscillator</p>\n',
                    type: 'Number|Object'
                  },
                  {
                    name: 'rampTime',
                    description: '<p>Ramp time (in seconds)</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'timeFromNow',
                    description:
                      '<p>Schedule this event to happen\n                                 at x seconds from now</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.Oscillator',
                module: 'p5.sound'
              },
              getFreq: {
                name: 'getFreq',
                class: 'p5.Oscillator',
                module: 'p5.sound'
              },
              setType: {
                name: 'setType',
                params: [
                  {
                    name: 'type',
                    description: "<p>'sine', 'triangle', 'sawtooth' or 'square'.</p>\n",
                    type: 'String'
                  }
                ],
                class: 'p5.Oscillator',
                module: 'p5.sound'
              },
              getType: {
                name: 'getType',
                class: 'p5.Oscillator',
                module: 'p5.sound'
              },
              connect: {
                name: 'connect',
                params: [
                  {
                    name: 'unit',
                    description: '<p>A p5.sound or Web Audio object</p>\n',
                    type: 'Object'
                  }
                ],
                class: 'p5.Oscillator',
                module: 'p5.sound'
              },
              disconnect: {
                name: 'disconnect',
                class: 'p5.Oscillator',
                module: 'p5.sound'
              },
              pan: {
                name: 'pan',
                params: [
                  {
                    name: 'panning',
                    description: '<p>Number between -1 and 1</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'timeFromNow',
                    description:
                      '<p>schedule this event to happen\n                              seconds from now</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.Oscillator',
                module: 'p5.sound'
              },
              getPan: {
                name: 'getPan',
                class: 'p5.Oscillator',
                module: 'p5.sound'
              },
              phase: {
                name: 'phase',
                params: [
                  {
                    name: 'phase',
                    description: '<p>float between 0.0 and 1.0</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.Oscillator',
                module: 'p5.sound'
              },
              add: {
                name: 'add',
                params: [
                  {
                    name: 'number',
                    description: '<p>Constant number to add</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.Oscillator',
                module: 'p5.sound'
              },
              mult: {
                name: 'mult',
                params: [
                  {
                    name: 'number',
                    description: '<p>Constant number to multiply</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.Oscillator',
                module: 'p5.sound'
              },
              scale: {
                name: 'scale',
                params: [
                  {
                    name: 'inMin',
                    description: '<p>input range minumum</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'inMax',
                    description: '<p>input range maximum</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'outMin',
                    description: '<p>input range minumum</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'outMax',
                    description: '<p>input range maximum</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.Oscillator',
                module: 'p5.sound'
              }
            },
            'p5.Envelope': {
              attackTime: {
                name: 'attackTime',
                class: 'p5.Envelope',
                module: 'p5.sound'
              },
              attackLevel: {
                name: 'attackLevel',
                class: 'p5.Envelope',
                module: 'p5.sound'
              },
              decayTime: {
                name: 'decayTime',
                class: 'p5.Envelope',
                module: 'p5.sound'
              },
              decayLevel: {
                name: 'decayLevel',
                class: 'p5.Envelope',
                module: 'p5.sound'
              },
              releaseTime: {
                name: 'releaseTime',
                class: 'p5.Envelope',
                module: 'p5.sound'
              },
              releaseLevel: {
                name: 'releaseLevel',
                class: 'p5.Envelope',
                module: 'p5.sound'
              },
              set: {
                name: 'set',
                params: [
                  {
                    name: 'attackTime',
                    description:
                      '<p>Time (in seconds) before level\n                               reaches attackLevel</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'attackLevel',
                    description:
                      '<p>Typically an amplitude between\n                               0.0 and 1.0</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'decayTime',
                    description: '<p>Time</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'decayLevel',
                    description:
                      '<p>Amplitude (In a standard ADSR envelope,\n                               decayLevel = sustainLevel)</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'releaseTime',
                    description: '<p>Release Time (in seconds)</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'releaseLevel',
                    description: '<p>Amplitude</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.Envelope',
                module: 'p5.sound'
              },
              setADSR: {
                name: 'setADSR',
                params: [
                  {
                    name: 'attackTime',
                    description:
                      '<p>Time (in seconds before envelope\n                              reaches Attack Level</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'decayTime',
                    description:
                      '<p>Time (in seconds) before envelope\n                              reaches Decay/Sustain Level</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'susRatio',
                    description:
                      '<p>Ratio between attackLevel and releaseLevel, on a scale from 0 to 1,\n                              where 1.0 = attackLevel, 0.0 = releaseLevel.\n                              The susRatio determines the decayLevel and the level at which the\n                              sustain portion of the envelope will sustain.\n                              For example, if attackLevel is 0.4, releaseLevel is 0,\n                              and susAmt is 0.5, the decayLevel would be 0.2. If attackLevel is\n                              increased to 1.0 (using <code>setRange</code>),\n                              then decayLevel would increase proportionally, to become 0.5.</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'releaseTime',
                    description: '<p>Time in seconds from now (defaults to 0)</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.Envelope',
                module: 'p5.sound'
              },
              setRange: {
                name: 'setRange',
                params: [
                  {
                    name: 'aLevel',
                    description: '<p>attack level (defaults to 1)</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'rLevel',
                    description: '<p>release level (defaults to 0)</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.Envelope',
                module: 'p5.sound'
              },
              setInput: {
                name: 'setInput',
                params: [
                  {
                    name: 'inputs',
                    description:
                      '<p>A p5.sound object or\n                              Web Audio Param.</p>\n',
                    type: 'Object',
                    optional: true,
                    multiple: true
                  }
                ],
                class: 'p5.Envelope',
                module: 'p5.sound'
              },
              setExp: {
                name: 'setExp',
                params: [
                  {
                    name: 'isExp',
                    description: '<p>true is exponential, false is linear</p>\n',
                    type: 'Boolean'
                  }
                ],
                class: 'p5.Envelope',
                module: 'p5.sound'
              },
              play: {
                name: 'play',
                params: [
                  {
                    name: 'unit',
                    description:
                      '<p>A p5.sound object or\n                              Web Audio Param.</p>\n',
                    type: 'Object'
                  },
                  {
                    name: 'startTime',
                    description: '<p>time from now (in seconds) at which to play</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'sustainTime',
                    description: '<p>time to sustain before releasing the envelope</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.Envelope',
                module: 'p5.sound'
              },
              triggerAttack: {
                name: 'triggerAttack',
                params: [
                  {
                    name: 'unit',
                    description: '<p>p5.sound Object or Web Audio Param</p>\n',
                    type: 'Object'
                  },
                  {
                    name: 'secondsFromNow',
                    description: '<p>time from now (in seconds)</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.Envelope',
                module: 'p5.sound'
              },
              triggerRelease: {
                name: 'triggerRelease',
                params: [
                  {
                    name: 'unit',
                    description: '<p>p5.sound Object or Web Audio Param</p>\n',
                    type: 'Object'
                  },
                  {
                    name: 'secondsFromNow',
                    description: '<p>time to trigger the release</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.Envelope',
                module: 'p5.sound'
              },
              ramp: {
                name: 'ramp',
                params: [
                  {
                    name: 'unit',
                    description: '<p>p5.sound Object or Web Audio Param</p>\n',
                    type: 'Object'
                  },
                  {
                    name: 'secondsFromNow',
                    description: '<p>When to trigger the ramp</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'v',
                    description: '<p>Target value</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'v2',
                    description: '<p>Second target value</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.Envelope',
                module: 'p5.sound'
              },
              add: {
                name: 'add',
                params: [
                  {
                    name: 'number',
                    description: '<p>Constant number to add</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.Envelope',
                module: 'p5.sound'
              },
              mult: {
                name: 'mult',
                params: [
                  {
                    name: 'number',
                    description: '<p>Constant number to multiply</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.Envelope',
                module: 'p5.sound'
              },
              scale: {
                name: 'scale',
                params: [
                  {
                    name: 'inMin',
                    description: '<p>input range minumum</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'inMax',
                    description: '<p>input range maximum</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'outMin',
                    description: '<p>input range minumum</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'outMax',
                    description: '<p>input range maximum</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.Envelope',
                module: 'p5.sound'
              }
            },
            'p5.Noise': {
              setType: {
                name: 'setType',
                params: [
                  {
                    name: 'type',
                    description: "<p>'white', 'pink' or 'brown'</p>\n",
                    type: 'String',
                    optional: true
                  }
                ],
                class: 'p5.Noise',
                module: 'p5.sound'
              }
            },
            'p5.Pulse': {
              width: {
                name: 'width',
                params: [
                  {
                    name: 'width',
                    description:
                      '<p>Width between the pulses (0 to 1.0,\n                       defaults to 0)</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.Pulse',
                module: 'p5.sound'
              }
            },
            'p5.AudioIn': {
              input: {
                name: 'input',
                class: 'p5.AudioIn',
                module: 'p5.sound'
              },
              output: {
                name: 'output',
                class: 'p5.AudioIn',
                module: 'p5.sound'
              },
              stream: {
                name: 'stream',
                class: 'p5.AudioIn',
                module: 'p5.sound'
              },
              mediaStream: {
                name: 'mediaStream',
                class: 'p5.AudioIn',
                module: 'p5.sound'
              },
              currentSource: {
                name: 'currentSource',
                class: 'p5.AudioIn',
                module: 'p5.sound'
              },
              enabled: {
                name: 'enabled',
                class: 'p5.AudioIn',
                module: 'p5.sound'
              },
              amplitude: {
                name: 'amplitude',
                class: 'p5.AudioIn',
                module: 'p5.sound'
              },
              start: {
                name: 'start',
                params: [
                  {
                    name: 'successCallback',
                    description:
                      '<p>Name of a function to call on\n                                  success.</p>\n',
                    type: 'Function',
                    optional: true
                  },
                  {
                    name: 'errorCallback',
                    description:
                      '<p>Name of a function to call if\n                                  there was an error. For example,\n                                  some browsers do not support\n                                  getUserMedia.</p>\n',
                    type: 'Function',
                    optional: true
                  }
                ],
                class: 'p5.AudioIn',
                module: 'p5.sound'
              },
              stop: {
                name: 'stop',
                class: 'p5.AudioIn',
                module: 'p5.sound'
              },
              connect: {
                name: 'connect',
                params: [
                  {
                    name: 'unit',
                    description:
                      '<p>An object that accepts audio input,\n                        such as an FFT</p>\n',
                    type: 'Object',
                    optional: true
                  }
                ],
                class: 'p5.AudioIn',
                module: 'p5.sound'
              },
              disconnect: {
                name: 'disconnect',
                class: 'p5.AudioIn',
                module: 'p5.sound'
              },
              getLevel: {
                name: 'getLevel',
                params: [
                  {
                    name: 'smoothing',
                    description:
                      '<p>Smoothing is 0.0 by default.\n                             Smooths values based on previous values.</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.AudioIn',
                module: 'p5.sound'
              },
              amp: {
                name: 'amp',
                params: [
                  {
                    name: 'vol',
                    description: '<p>between 0 and 1.0</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'time',
                    description: '<p>ramp time (optional)</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.AudioIn',
                module: 'p5.sound'
              },
              getSources: {
                name: 'getSources',
                params: [
                  {
                    name: 'successCallback',
                    description:
                      '<p>This callback function handles the sources when they\n                                     have been enumerated. The callback function\n                                     receives the deviceList array as its only argument</p>\n',
                    type: 'Function',
                    optional: true
                  },
                  {
                    name: 'errorCallback',
                    description:
                      '<p>This optional callback receives the error\n                                   message as its argument.</p>\n',
                    type: 'Function',
                    optional: true
                  }
                ],
                class: 'p5.AudioIn',
                module: 'p5.sound'
              },
              setSource: {
                name: 'setSource',
                params: [
                  {
                    name: 'num',
                    description: '<p>position of input source in the array</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.AudioIn',
                module: 'p5.sound'
              }
            },
            'p5.Effect': {
              amp: {
                name: 'amp',
                params: [
                  {
                    name: 'vol',
                    description: '<p>amplitude between 0 and 1.0</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'rampTime',
                    description: '<p>create a fade that lasts until rampTime</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'tFromNow',
                    description:
                      '<p>schedule this event to happen in tFromNow seconds</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.Effect',
                module: 'p5.sound'
              },
              chain: {
                name: 'chain',
                params: [
                  {
                    name: 'arguments',
                    description: '<p>Chain together multiple sound objects</p>\n',
                    type: 'Object',
                    optional: true
                  }
                ],
                class: 'p5.Effect',
                module: 'p5.sound'
              },
              drywet: {
                name: 'drywet',
                params: [
                  {
                    name: 'fade',
                    description: '<p>The desired drywet value (0 - 1.0)</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.Effect',
                module: 'p5.sound'
              },
              connect: {
                name: 'connect',
                params: [
                  {
                    name: 'unit',
                    description: '',
                    type: 'Object'
                  }
                ],
                class: 'p5.Effect',
                module: 'p5.sound'
              },
              disconnect: {
                name: 'disconnect',
                class: 'p5.Effect',
                module: 'p5.sound'
              }
            },
            'p5.Filter': {
              biquadFilter: {
                name: 'biquadFilter',
                class: 'p5.Filter',
                module: 'p5.sound'
              },
              process: {
                name: 'process',
                params: [
                  {
                    name: 'Signal',
                    description: '<p>An object that outputs audio</p>\n',
                    type: 'Object'
                  },
                  {
                    name: 'freq',
                    description: '<p>Frequency in Hz, from 10 to 22050</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'res',
                    description:
                      '<p>Resonance/Width of the filter frequency\n                      from 0.001 to 1000</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.Filter',
                module: 'p5.sound'
              },
              set: {
                name: 'set',
                params: [
                  {
                    name: 'freq',
                    description: '<p>Frequency in Hz, from 10 to 22050</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'res',
                    description: '<p>Resonance (Q) from 0.001 to 1000</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'timeFromNow',
                    description:
                      '<p>schedule this event to happen\n                              seconds from now</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.Filter',
                module: 'p5.sound'
              },
              freq: {
                name: 'freq',
                params: [
                  {
                    name: 'freq',
                    description: '<p>Filter Frequency</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'timeFromNow',
                    description:
                      '<p>schedule this event to happen\n                              seconds from now</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.Filter',
                module: 'p5.sound'
              },
              res: {
                name: 'res',
                params: [
                  {
                    name: 'res',
                    description:
                      '<p>Resonance/Width of filter freq\n                     from 0.001 to 1000</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'timeFromNow',
                    description:
                      '<p>schedule this event to happen\n                              seconds from now</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.Filter',
                module: 'p5.sound'
              },
              gain: {
                name: 'gain',
                params: [
                  {
                    name: 'gain',
                    description: '',
                    type: 'Number'
                  }
                ],
                class: 'p5.Filter',
                module: 'p5.sound'
              },
              toggle: {
                name: 'toggle',
                class: 'p5.Filter',
                module: 'p5.sound'
              },
              setType: {
                name: 'setType',
                params: [
                  {
                    name: 't',
                    description: '',
                    type: 'String'
                  }
                ],
                class: 'p5.Filter',
                module: 'p5.sound'
              }
            },
            'p5.EQ': {
              bands: {
                name: 'bands',
                class: 'p5.EQ',
                module: 'p5.sound'
              },
              process: {
                name: 'process',
                params: [
                  {
                    name: 'src',
                    description: '<p>Audio source</p>\n',
                    type: 'Object'
                  }
                ],
                class: 'p5.EQ',
                module: 'p5.sound'
              }
            },
            'p5.Panner3D': {
              panner: {
                name: 'panner',
                class: 'p5.Panner3D',
                module: 'p5.sound'
              },
              process: {
                name: 'process',
                params: [
                  {
                    name: 'src',
                    description: '<p>Input source</p>\n',
                    type: 'Object'
                  }
                ],
                class: 'p5.Panner3D',
                module: 'p5.sound'
              },
              set: {
                name: 'set',
                params: [
                  {
                    name: 'xVal',
                    description: '',
                    type: 'Number'
                  },
                  {
                    name: 'yVal',
                    description: '',
                    type: 'Number'
                  },
                  {
                    name: 'zVal',
                    description: '',
                    type: 'Number'
                  },
                  {
                    name: 'time',
                    description: '',
                    type: 'Number'
                  }
                ],
                class: 'p5.Panner3D',
                module: 'p5.sound'
              },
              positionX: {
                name: 'positionX',
                class: 'p5.Panner3D',
                module: 'p5.sound'
              },
              positionY: {
                name: 'positionY',
                class: 'p5.Panner3D',
                module: 'p5.sound'
              },
              positionZ: {
                name: 'positionZ',
                class: 'p5.Panner3D',
                module: 'p5.sound'
              },
              orient: {
                name: 'orient',
                params: [
                  {
                    name: 'xVal',
                    description: '',
                    type: 'Number'
                  },
                  {
                    name: 'yVal',
                    description: '',
                    type: 'Number'
                  },
                  {
                    name: 'zVal',
                    description: '',
                    type: 'Number'
                  },
                  {
                    name: 'time',
                    description: '',
                    type: 'Number'
                  }
                ],
                class: 'p5.Panner3D',
                module: 'p5.sound'
              },
              orientX: {
                name: 'orientX',
                class: 'p5.Panner3D',
                module: 'p5.sound'
              },
              orientY: {
                name: 'orientY',
                class: 'p5.Panner3D',
                module: 'p5.sound'
              },
              orientZ: {
                name: 'orientZ',
                class: 'p5.Panner3D',
                module: 'p5.sound'
              },
              setFalloff: {
                name: 'setFalloff',
                params: [
                  {
                    name: 'maxDistance',
                    description: '',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'rolloffFactor',
                    description: '',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.Panner3D',
                module: 'p5.sound'
              },
              maxDist: {
                name: 'maxDist',
                params: [
                  {
                    name: 'maxDistance',
                    description: '',
                    type: 'Number'
                  }
                ],
                class: 'p5.Panner3D',
                module: 'p5.sound'
              },
              rollof: {
                name: 'rollof',
                params: [
                  {
                    name: 'rolloffFactor',
                    description: '',
                    type: 'Number'
                  }
                ],
                class: 'p5.Panner3D',
                module: 'p5.sound'
              }
            },
            'p5.Delay': {
              leftDelay: {
                name: 'leftDelay',
                class: 'p5.Delay',
                module: 'p5.sound'
              },
              rightDelay: {
                name: 'rightDelay',
                class: 'p5.Delay',
                module: 'p5.sound'
              },
              process: {
                name: 'process',
                params: [
                  {
                    name: 'Signal',
                    description: '<p>An object that outputs audio</p>\n',
                    type: 'Object'
                  },
                  {
                    name: 'delayTime',
                    description:
                      '<p>Time (in seconds) of the delay/echo.\n                             Some browsers limit delayTime to\n                             1 second.</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'feedback',
                    description:
                      '<p>sends the delay back through itself\n                             in a loop that decreases in volume\n                             each time.</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'lowPass',
                    description:
                      '<p>Cutoff frequency. Only frequencies\n                             below the lowPass will be part of the\n                             delay.</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.Delay',
                module: 'p5.sound'
              },
              delayTime: {
                name: 'delayTime',
                params: [
                  {
                    name: 'delayTime',
                    description: '<p>Time (in seconds) of the delay</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.Delay',
                module: 'p5.sound'
              },
              feedback: {
                name: 'feedback',
                params: [
                  {
                    name: 'feedback',
                    description:
                      '<p>0.0 to 1.0, or an object such as an\n                                Oscillator that can be used to\n                                modulate this param</p>\n',
                    type: 'Number|Object'
                  }
                ],
                class: 'p5.Delay',
                module: 'p5.sound'
              },
              filter: {
                name: 'filter',
                params: [
                  {
                    name: 'cutoffFreq',
                    description:
                      '<p>A lowpass filter will cut off any\n                            frequencies higher than the filter frequency.</p>\n',
                    type: 'Number|Object'
                  },
                  {
                    name: 'res',
                    description:
                      '<p>Resonance of the filter frequency\n                            cutoff, or an object (i.e. a p5.Oscillator)\n                            that can be used to modulate this parameter.\n                            High numbers (i.e. 15) will produce a resonance,\n                            low numbers (i.e. .2) will produce a slope.</p>\n',
                    type: 'Number|Object'
                  }
                ],
                class: 'p5.Delay',
                module: 'p5.sound'
              },
              setType: {
                name: 'setType',
                params: [
                  {
                    name: 'type',
                    description: "<p>'pingPong' (1) or 'default' (0)</p>\n",
                    type: 'String|Number'
                  }
                ],
                class: 'p5.Delay',
                module: 'p5.sound'
              },
              amp: {
                name: 'amp',
                params: [
                  {
                    name: 'volume',
                    description: '<p>amplitude between 0 and 1.0</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'rampTime',
                    description: '<p>create a fade that lasts rampTime</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'timeFromNow',
                    description:
                      '<p>schedule this event to happen\n                              seconds from now</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.Delay',
                module: 'p5.sound'
              },
              connect: {
                name: 'connect',
                params: [
                  {
                    name: 'unit',
                    description: '',
                    type: 'Object'
                  }
                ],
                class: 'p5.Delay',
                module: 'p5.sound'
              },
              disconnect: {
                name: 'disconnect',
                class: 'p5.Delay',
                module: 'p5.sound'
              }
            },
            'p5.Reverb': {
              process: {
                name: 'process',
                params: [
                  {
                    name: 'src',
                    description:
                      '<p>p5.sound / Web Audio object with a sound\n                         output.</p>\n',
                    type: 'Object'
                  },
                  {
                    name: 'seconds',
                    description:
                      '<p>Duration of the reverb, in seconds.\n                         Min: 0, Max: 10. Defaults to 3.</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'decayRate',
                    description:
                      '<p>Percentage of decay with each echo.\n                          Min: 0, Max: 100. Defaults to 2.</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'reverse',
                    description: '<p>Play the reverb backwards or forwards.</p>\n',
                    type: 'Boolean',
                    optional: true
                  }
                ],
                class: 'p5.Reverb',
                module: 'p5.sound'
              },
              set: {
                name: 'set',
                params: [
                  {
                    name: 'seconds',
                    description:
                      '<p>Duration of the reverb, in seconds.\n                         Min: 0, Max: 10. Defaults to 3.</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'decayRate',
                    description:
                      '<p>Percentage of decay with each echo.\n                          Min: 0, Max: 100. Defaults to 2.</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'reverse',
                    description: '<p>Play the reverb backwards or forwards.</p>\n',
                    type: 'Boolean',
                    optional: true
                  }
                ],
                class: 'p5.Reverb',
                module: 'p5.sound'
              },
              amp: {
                name: 'amp',
                params: [
                  {
                    name: 'volume',
                    description: '<p>amplitude between 0 and 1.0</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'rampTime',
                    description: '<p>create a fade that lasts rampTime</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'timeFromNow',
                    description:
                      '<p>schedule this event to happen\n                              seconds from now</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.Reverb',
                module: 'p5.sound'
              },
              connect: {
                name: 'connect',
                params: [
                  {
                    name: 'unit',
                    description: '',
                    type: 'Object'
                  }
                ],
                class: 'p5.Reverb',
                module: 'p5.sound'
              },
              disconnect: {
                name: 'disconnect',
                class: 'p5.Reverb',
                module: 'p5.sound'
              }
            },
            'p5.Convolver': {
              convolverNode: {
                name: 'convolverNode',
                class: 'p5.Convolver',
                module: 'p5.sound'
              },
              impulses: {
                name: 'impulses',
                class: 'p5.Convolver',
                module: 'p5.sound'
              },
              process: {
                name: 'process',
                params: [
                  {
                    name: 'src',
                    description:
                      '<p>p5.sound / Web Audio object with a sound\n                         output.</p>\n',
                    type: 'Object'
                  }
                ],
                class: 'p5.Convolver',
                module: 'p5.sound'
              },
              addImpulse: {
                name: 'addImpulse',
                params: [
                  {
                    name: 'path',
                    description: '<p>path to a sound file</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'callback',
                    description: '<p>function (optional)</p>\n',
                    type: 'Function'
                  },
                  {
                    name: 'errorCallback',
                    description: '<p>function (optional)</p>\n',
                    type: 'Function'
                  }
                ],
                class: 'p5.Convolver',
                module: 'p5.sound'
              },
              resetImpulse: {
                name: 'resetImpulse',
                params: [
                  {
                    name: 'path',
                    description: '<p>path to a sound file</p>\n',
                    type: 'String'
                  },
                  {
                    name: 'callback',
                    description: '<p>function (optional)</p>\n',
                    type: 'Function'
                  },
                  {
                    name: 'errorCallback',
                    description: '<p>function (optional)</p>\n',
                    type: 'Function'
                  }
                ],
                class: 'p5.Convolver',
                module: 'p5.sound'
              },
              toggleImpulse: {
                name: 'toggleImpulse',
                params: [
                  {
                    name: 'id',
                    description:
                      '<p>Identify the impulse by its original filename\n                          (String), or by its position in the\n                          <code>.impulses</code> Array (Number).</p>\n',
                    type: 'String|Number'
                  }
                ],
                class: 'p5.Convolver',
                module: 'p5.sound'
              }
            },
            'p5.Phrase': {
              sequence: {
                name: 'sequence',
                class: 'p5.Phrase',
                module: 'p5.sound'
              }
            },
            'p5.Part': {
              setBPM: {
                name: 'setBPM',
                params: [
                  {
                    name: 'BPM',
                    description: '<p>Beats Per Minute</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'rampTime',
                    description: '<p>Seconds from now</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.Part',
                module: 'p5.sound'
              },
              getBPM: {
                name: 'getBPM',
                class: 'p5.Part',
                module: 'p5.sound'
              },
              start: {
                name: 'start',
                params: [
                  {
                    name: 'time',
                    description: '<p>seconds from now</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.Part',
                module: 'p5.sound'
              },
              loop: {
                name: 'loop',
                params: [
                  {
                    name: 'time',
                    description: '<p>seconds from now</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.Part',
                module: 'p5.sound'
              },
              noLoop: {
                name: 'noLoop',
                class: 'p5.Part',
                module: 'p5.sound'
              },
              stop: {
                name: 'stop',
                params: [
                  {
                    name: 'time',
                    description: '<p>seconds from now</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.Part',
                module: 'p5.sound'
              },
              pause: {
                name: 'pause',
                params: [
                  {
                    name: 'time',
                    description: '<p>seconds from now</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.Part',
                module: 'p5.sound'
              },
              addPhrase: {
                name: 'addPhrase',
                params: [
                  {
                    name: 'phrase',
                    description: '<p>reference to a p5.Phrase</p>\n',
                    type: 'p5.Phrase'
                  }
                ],
                class: 'p5.Part',
                module: 'p5.sound'
              },
              removePhrase: {
                name: 'removePhrase',
                params: [
                  {
                    name: 'phraseName',
                    description: '',
                    type: 'String'
                  }
                ],
                class: 'p5.Part',
                module: 'p5.sound'
              },
              getPhrase: {
                name: 'getPhrase',
                params: [
                  {
                    name: 'phraseName',
                    description: '',
                    type: 'String'
                  }
                ],
                class: 'p5.Part',
                module: 'p5.sound'
              },
              replaceSequence: {
                name: 'replaceSequence',
                params: [
                  {
                    name: 'phraseName',
                    description: '',
                    type: 'String'
                  },
                  {
                    name: 'sequence',
                    description:
                      '<p>Array of values to pass into the callback\n                          at each step of the phrase.</p>\n',
                    type: 'Array'
                  }
                ],
                class: 'p5.Part',
                module: 'p5.sound'
              },
              onStep: {
                name: 'onStep',
                params: [
                  {
                    name: 'callback',
                    description:
                      '<p>The name of the callback\n                            you want to fire\n                            on every beat/tatum.</p>\n',
                    type: 'Function'
                  }
                ],
                class: 'p5.Part',
                module: 'p5.sound'
              }
            },
            'p5.Score': {
              start: {
                name: 'start',
                class: 'p5.Score',
                module: 'p5.sound'
              },
              stop: {
                name: 'stop',
                class: 'p5.Score',
                module: 'p5.sound'
              },
              pause: {
                name: 'pause',
                class: 'p5.Score',
                module: 'p5.sound'
              },
              loop: {
                name: 'loop',
                class: 'p5.Score',
                module: 'p5.sound'
              },
              noLoop: {
                name: 'noLoop',
                class: 'p5.Score',
                module: 'p5.sound'
              },
              setBPM: {
                name: 'setBPM',
                params: [
                  {
                    name: 'BPM',
                    description: '<p>Beats Per Minute</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'rampTime',
                    description: '<p>Seconds from now</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.Score',
                module: 'p5.sound'
              }
            },
            'p5.SoundLoop': {
              bpm: {
                name: 'bpm',
                class: 'p5.SoundLoop',
                module: 'p5.sound'
              },
              timeSignature: {
                name: 'timeSignature',
                class: 'p5.SoundLoop',
                module: 'p5.sound'
              },
              interval: {
                name: 'interval',
                class: 'p5.SoundLoop',
                module: 'p5.sound'
              },
              iterations: {
                name: 'iterations',
                class: 'p5.SoundLoop',
                module: 'p5.sound'
              },
              musicalTimeMode: {
                name: 'musicalTimeMode',
                class: 'p5.SoundLoop',
                module: 'p5.sound'
              },
              maxIterations: {
                name: 'maxIterations',
                class: 'p5.SoundLoop',
                module: 'p5.sound'
              },
              start: {
                name: 'start',
                params: [
                  {
                    name: 'timeFromNow',
                    description: '<p>schedule a starting time</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.SoundLoop',
                module: 'p5.sound'
              },
              stop: {
                name: 'stop',
                params: [
                  {
                    name: 'timeFromNow',
                    description: '<p>schedule a stopping time</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.SoundLoop',
                module: 'p5.sound'
              },
              pause: {
                name: 'pause',
                params: [
                  {
                    name: 'timeFromNow',
                    description: '<p>schedule a pausing time</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.SoundLoop',
                module: 'p5.sound'
              },
              syncedStart: {
                name: 'syncedStart',
                params: [
                  {
                    name: 'otherLoop',
                    description: '<p>a p5.SoundLoop to sync with</p>\n',
                    type: 'Object'
                  },
                  {
                    name: 'timeFromNow',
                    description:
                      '<p>Start the loops in sync after timeFromNow seconds</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.SoundLoop',
                module: 'p5.sound'
              }
            },
            'p5.Compressor': {
              compressor: {
                name: 'compressor',
                class: 'p5.Compressor',
                module: 'p5.sound'
              },
              process: {
                name: 'process',
                params: [
                  {
                    name: 'src',
                    description: '<p>Sound source to be connected</p>\n',
                    type: 'Object'
                  },
                  {
                    name: 'attack',
                    description:
                      '<p>The amount of time (in seconds) to reduce the gain by 10dB,\n                           default = .003, range 0 - 1</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'knee',
                    description:
                      '<p>A decibel value representing the range above the\n                           threshold where the curve smoothly transitions to the "ratio" portion.\n                           default = 30, range 0 - 40</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'ratio',
                    description:
                      '<p>The amount of dB change in input for a 1 dB change in output\n                           default = 12, range 1 - 20</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'threshold',
                    description:
                      '<p>The decibel value above which the compression will start taking effect\n                           default = -24, range -100 - 0</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'release',
                    description:
                      '<p>The amount of time (in seconds) to increase the gain by 10dB\n                           default = .25, range 0 - 1</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.Compressor',
                module: 'p5.sound'
              },
              set: {
                name: 'set',
                params: [
                  {
                    name: 'attack',
                    description:
                      '<p>The amount of time (in seconds) to reduce the gain by 10dB,\n                           default = .003, range 0 - 1</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'knee',
                    description:
                      '<p>A decibel value representing the range above the\n                           threshold where the curve smoothly transitions to the "ratio" portion.\n                           default = 30, range 0 - 40</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'ratio',
                    description:
                      '<p>The amount of dB change in input for a 1 dB change in output\n                           default = 12, range 1 - 20</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'threshold',
                    description:
                      '<p>The decibel value above which the compression will start taking effect\n                           default = -24, range -100 - 0</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'release',
                    description:
                      '<p>The amount of time (in seconds) to increase the gain by 10dB\n                           default = .25, range 0 - 1</p>\n',
                    type: 'Number'
                  }
                ],
                class: 'p5.Compressor',
                module: 'p5.sound'
              },
              attack: {
                name: 'attack',
                params: [
                  {
                    name: 'attack',
                    description:
                      '<p>Attack is the amount of time (in seconds) to reduce the gain by 10dB,\n                         default = .003, range 0 - 1</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'time',
                    description:
                      '<p>Assign time value to schedule the change in value</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.Compressor',
                module: 'p5.sound'
              },
              knee: {
                name: 'knee',
                params: [
                  {
                    name: 'knee',
                    description:
                      '<p>A decibel value representing the range above the\n                       threshold where the curve smoothly transitions to the "ratio" portion.\n                       default = 30, range 0 - 40</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'time',
                    description:
                      '<p>Assign time value to schedule the change in value</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.Compressor',
                module: 'p5.sound'
              },
              ratio: {
                name: 'ratio',
                params: [
                  {
                    name: 'ratio',
                    description:
                      '<p>The amount of dB change in input for a 1 dB change in output\n                           default = 12, range 1 - 20</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'time',
                    description:
                      '<p>Assign time value to schedule the change in value</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.Compressor',
                module: 'p5.sound'
              },
              threshold: {
                name: 'threshold',
                params: [
                  {
                    name: 'threshold',
                    description:
                      '<p>The decibel value above which the compression will start taking effect\n                           default = -24, range -100 - 0</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'time',
                    description:
                      '<p>Assign time value to schedule the change in value</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.Compressor',
                module: 'p5.sound'
              },
              release: {
                name: 'release',
                params: [
                  {
                    name: 'release',
                    description:
                      '<p>The amount of time (in seconds) to increase the gain by 10dB\n                           default = .25, range 0 - 1</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'time',
                    description:
                      '<p>Assign time value to schedule the change in value</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.Compressor',
                module: 'p5.sound'
              },
              reduction: {
                name: 'reduction',
                class: 'p5.Compressor',
                module: 'p5.sound'
              }
            },
            'p5.PeakDetect': {
              isDetected: {
                name: 'isDetected',
                class: 'p5.PeakDetect',
                module: 'p5.sound'
              },
              update: {
                name: 'update',
                params: [
                  {
                    name: 'fftObject',
                    description: '<p>A p5.FFT object</p>\n',
                    type: 'p5.FFT'
                  }
                ],
                class: 'p5.PeakDetect',
                module: 'p5.sound'
              },
              onPeak: {
                name: 'onPeak',
                params: [
                  {
                    name: 'callback',
                    description:
                      '<p>Name of a function that will\n                            be called when a peak is\n                            detected.</p>\n',
                    type: 'Function'
                  },
                  {
                    name: 'val',
                    description:
                      '<p>Optional value to pass\n                            into the function when\n                            a peak is detected.</p>\n',
                    type: 'Object',
                    optional: true
                  }
                ],
                class: 'p5.PeakDetect',
                module: 'p5.sound'
              }
            },
            'p5.SoundRecorder': {
              setInput: {
                name: 'setInput',
                params: [
                  {
                    name: 'unit',
                    description:
                      '<p>p5.sound object or a web audio unit\n                       that outputs sound</p>\n',
                    type: 'Object',
                    optional: true
                  }
                ],
                class: 'p5.SoundRecorder',
                module: 'p5.sound'
              },
              record: {
                name: 'record',
                params: [
                  {
                    name: 'soundFile',
                    description: '<p>p5.SoundFile</p>\n',
                    type: 'p5.SoundFile'
                  },
                  {
                    name: 'duration',
                    description: '<p>Time (in seconds)</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'callback',
                    description:
                      '<p>The name of a function that will be\n                              called once the recording completes</p>\n',
                    type: 'Function',
                    optional: true
                  }
                ],
                class: 'p5.SoundRecorder',
                module: 'p5.sound'
              },
              stop: {
                name: 'stop',
                class: 'p5.SoundRecorder',
                module: 'p5.sound'
              }
            },
            'p5.Distortion': {
              WaveShaperNode: {
                name: 'WaveShaperNode',
                class: 'p5.Distortion',
                module: 'p5.sound'
              },
              process: {
                name: 'process',
                params: [
                  {
                    name: 'amount',
                    description:
                      '<p>Unbounded distortion amount.\n                               Normal values range from 0-1.</p>\n',
                    type: 'Number',
                    optional: true,
                    optdefault: '0.25'
                  },
                  {
                    name: 'oversample',
                    description: "<p>'none', '2x', or '4x'.</p>\n",
                    type: 'String',
                    optional: true,
                    optdefault: "'none'"
                  }
                ],
                class: 'p5.Distortion',
                module: 'p5.sound'
              },
              set: {
                name: 'set',
                params: [
                  {
                    name: 'amount',
                    description:
                      '<p>Unbounded distortion amount.\n                               Normal values range from 0-1.</p>\n',
                    type: 'Number',
                    optional: true,
                    optdefault: '0.25'
                  },
                  {
                    name: 'oversample',
                    description: "<p>'none', '2x', or '4x'.</p>\n",
                    type: 'String',
                    optional: true,
                    optdefault: "'none'"
                  }
                ],
                class: 'p5.Distortion',
                module: 'p5.sound'
              },
              getAmount: {
                name: 'getAmount',
                class: 'p5.Distortion',
                module: 'p5.sound'
              },
              getOversample: {
                name: 'getOversample',
                class: 'p5.Distortion',
                module: 'p5.sound'
              }
            },
            'p5.Gain': {
              setInput: {
                name: 'setInput',
                params: [
                  {
                    name: 'src',
                    description:
                      '<p>p5.sound / Web Audio object with a sound\n                         output.</p>\n',
                    type: 'Object'
                  }
                ],
                class: 'p5.Gain',
                module: 'p5.sound'
              },
              connect: {
                name: 'connect',
                params: [
                  {
                    name: 'unit',
                    description: '',
                    type: 'Object'
                  }
                ],
                class: 'p5.Gain',
                module: 'p5.sound'
              },
              disconnect: {
                name: 'disconnect',
                class: 'p5.Gain',
                module: 'p5.sound'
              },
              amp: {
                name: 'amp',
                params: [
                  {
                    name: 'volume',
                    description: '<p>amplitude between 0 and 1.0</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'rampTime',
                    description: '<p>create a fade that lasts rampTime</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'timeFromNow',
                    description:
                      '<p>schedule this event to happen\n                              seconds from now</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.Gain',
                module: 'p5.sound'
              }
            },
            'p5.AudioVoice': {
              connect: {
                name: 'connect',
                params: [
                  {
                    name: 'unit',
                    description: '',
                    type: 'Object'
                  }
                ],
                class: 'p5.AudioVoice',
                module: 'p5.sound'
              },
              disconnect: {
                name: 'disconnect',
                class: 'p5.AudioVoice',
                module: 'p5.sound'
              }
            },
            'p5.MonoSynth': {
              attack: {
                name: 'attack',
                class: 'p5.MonoSynth',
                module: 'p5.sound'
              },
              decay: {
                name: 'decay',
                class: 'p5.MonoSynth',
                module: 'p5.sound'
              },
              sustain: {
                name: 'sustain',
                class: 'p5.MonoSynth',
                module: 'p5.sound'
              },
              release: {
                name: 'release',
                class: 'p5.MonoSynth',
                module: 'p5.sound'
              },
              play: {
                name: 'play',
                params: [
                  {
                    name: 'note',
                    description:
                      '<p>the note you want to play, specified as a\n                               frequency in Hertz (Number) or as a midi\n                               value in Note/Octave format ("C4", "Eb3"...etc")\n                               See <a href = "https://github.com/Tonejs/Tone.js/wiki/Instruments">\n                               Tone</a>. Defaults to 440 hz.</p>\n',
                    type: 'String | Number'
                  },
                  {
                    name: 'velocity',
                    description:
                      '<p>velocity of the note to play (ranging from 0 to 1)</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'secondsFromNow',
                    description: '<p>time from now (in seconds) at which to play</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'sustainTime',
                    description:
                      '<p>time to sustain before releasing the envelope. Defaults to 0.15 seconds.</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.MonoSynth',
                module: 'p5.sound'
              },
              triggerAttack: {
                params: [
                  {
                    name: 'note',
                    description:
                      '<p>the note you want to play, specified as a\n                               frequency in Hertz (Number) or as a midi\n                               value in Note/Octave format ("C4", "Eb3"...etc")\n                               See <a href = "https://github.com/Tonejs/Tone.js/wiki/Instruments">\n                               Tone</a>. Defaults to 440 hz</p>\n',
                    type: 'String | Number'
                  },
                  {
                    name: 'velocity',
                    description:
                      '<p>velocity of the note to play (ranging from 0 to 1)</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'secondsFromNow',
                    description: '<p>time from now (in seconds) at which to play</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                name: 'triggerAttack',
                class: 'p5.MonoSynth',
                module: 'p5.sound'
              },
              triggerRelease: {
                params: [
                  {
                    name: 'secondsFromNow',
                    description: '<p>time to trigger the release</p>\n',
                    type: 'Number'
                  }
                ],
                name: 'triggerRelease',
                class: 'p5.MonoSynth',
                module: 'p5.sound'
              },
              setADSR: {
                name: 'setADSR',
                params: [
                  {
                    name: 'attackTime',
                    description:
                      '<p>Time (in seconds before envelope\n                              reaches Attack Level</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'decayTime',
                    description:
                      '<p>Time (in seconds) before envelope\n                              reaches Decay/Sustain Level</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'susRatio',
                    description:
                      '<p>Ratio between attackLevel and releaseLevel, on a scale from 0 to 1,\n                              where 1.0 = attackLevel, 0.0 = releaseLevel.\n                              The susRatio determines the decayLevel and the level at which the\n                              sustain portion of the envelope will sustain.\n                              For example, if attackLevel is 0.4, releaseLevel is 0,\n                              and susAmt is 0.5, the decayLevel would be 0.2. If attackLevel is\n                              increased to 1.0 (using <code>setRange</code>),\n                              then decayLevel would increase proportionally, to become 0.5.</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'releaseTime',
                    description: '<p>Time in seconds from now (defaults to 0)</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.MonoSynth',
                module: 'p5.sound'
              },
              amp: {
                name: 'amp',
                params: [
                  {
                    name: 'vol',
                    description: '<p>desired volume</p>\n',
                    type: 'Number'
                  },
                  {
                    name: 'rampTime',
                    description: '<p>Time to reach new volume</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.MonoSynth',
                module: 'p5.sound'
              },
              connect: {
                name: 'connect',
                params: [
                  {
                    name: 'unit',
                    description: '<p>A p5.sound or Web Audio object</p>\n',
                    type: 'Object'
                  }
                ],
                class: 'p5.MonoSynth',
                module: 'p5.sound'
              },
              disconnect: {
                name: 'disconnect',
                class: 'p5.MonoSynth',
                module: 'p5.sound'
              },
              dispose: {
                name: 'dispose',
                class: 'p5.MonoSynth',
                module: 'p5.sound'
              }
            },
            'p5.PolySynth': {
              notes: {
                name: 'notes',
                class: 'p5.PolySynth',
                module: 'p5.sound'
              },
              polyvalue: {
                name: 'polyvalue',
                class: 'p5.PolySynth',
                module: 'p5.sound'
              },
              AudioVoice: {
                name: 'AudioVoice',
                class: 'p5.PolySynth',
                module: 'p5.sound'
              },
              play: {
                name: 'play',
                params: [
                  {
                    name: 'note',
                    description:
                      '<p>midi note to play (ranging from 0 to 127 - 60 being a middle C)</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'velocity',
                    description:
                      '<p>velocity of the note to play (ranging from 0 to 1)</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'secondsFromNow',
                    description: '<p>time from now (in seconds) at which to play</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'sustainTime',
                    description: '<p>time to sustain before releasing the envelope</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.PolySynth',
                module: 'p5.sound'
              },
              noteADSR: {
                name: 'noteADSR',
                params: [
                  {
                    name: 'note',
                    description: '<p>Midi note on which ADSR should be set.</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'attackTime',
                    description:
                      '<p>Time (in seconds before envelope\n                              reaches Attack Level</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'decayTime',
                    description:
                      '<p>Time (in seconds) before envelope\n                              reaches Decay/Sustain Level</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'susRatio',
                    description:
                      '<p>Ratio between attackLevel and releaseLevel, on a scale from 0 to 1,\n                              where 1.0 = attackLevel, 0.0 = releaseLevel.\n                              The susRatio determines the decayLevel and the level at which the\n                              sustain portion of the envelope will sustain.\n                              For example, if attackLevel is 0.4, releaseLevel is 0,\n                              and susAmt is 0.5, the decayLevel would be 0.2. If attackLevel is\n                              increased to 1.0 (using <code>setRange</code>),\n                              then decayLevel would increase proportionally, to become 0.5.</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'releaseTime',
                    description: '<p>Time in seconds from now (defaults to 0)</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.PolySynth',
                module: 'p5.sound'
              },
              setADSR: {
                name: 'setADSR',
                params: [
                  {
                    name: 'attackTime',
                    description:
                      '<p>Time (in seconds before envelope\n                               reaches Attack Level</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'decayTime',
                    description:
                      '<p>Time (in seconds) before envelope\n                               reaches Decay/Sustain Level</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'susRatio',
                    description:
                      '<p>Ratio between attackLevel and releaseLevel, on a scale from 0 to 1,\n                               where 1.0 = attackLevel, 0.0 = releaseLevel.\n                               The susRatio determines the decayLevel and the level at which the\n                               sustain portion of the envelope will sustain.\n                               For example, if attackLevel is 0.4, releaseLevel is 0,\n                               and susAmt is 0.5, the decayLevel would be 0.2. If attackLevel is\n                               increased to 1.0 (using <code>setRange</code>),\n                               then decayLevel would increase proportionally, to become 0.5.</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'releaseTime',
                    description: '<p>Time in seconds from now (defaults to 0)</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.PolySynth',
                module: 'p5.sound'
              },
              noteAttack: {
                name: 'noteAttack',
                params: [
                  {
                    name: 'note',
                    description: '<p>midi note on which attack should be triggered.</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'velocity',
                    description:
                      '<p>velocity of the note to play (ranging from 0 to 1)/</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'secondsFromNow',
                    description: '<p>time from now (in seconds)</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.PolySynth',
                module: 'p5.sound'
              },
              noteRelease: {
                name: 'noteRelease',
                params: [
                  {
                    name: 'note',
                    description:
                      '<p>midi note on which attack should be triggered.\n                                  If no value is provided, all notes will be released.</p>\n',
                    type: 'Number',
                    optional: true
                  },
                  {
                    name: 'secondsFromNow',
                    description: '<p>time to trigger the release</p>\n',
                    type: 'Number',
                    optional: true
                  }
                ],
                class: 'p5.PolySynth',
                module: 'p5.sound'
              },
              connect: {
                name: 'connect',
                params: [
                  {
                    name: 'unit',
                    description: '<p>A p5.sound or Web Audio object</p>\n',
                    type: 'Object'
                  }
                ],
                class: 'p5.PolySynth',
                module: 'p5.sound'
              },
              disconnect: {
                name: 'disconnect',
                class: 'p5.PolySynth',
                module: 'p5.sound'
              },
              dispose: {
                name: 'dispose',
                class: 'p5.PolySynth',
                module: 'p5.sound'
              }
            }
          };
        },
        {}
      ],
      2: [
        function(_dereq_, module, exports) {
          function _arrayWithHoles(arr) {
            if (Array.isArray(arr)) return arr;
          }

          module.exports = _arrayWithHoles;
        },
        {}
      ],
      3: [
        function(_dereq_, module, exports) {
          function _arrayWithoutHoles(arr) {
            if (Array.isArray(arr)) {
              for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {
                arr2[i] = arr[i];
              }

              return arr2;
            }
          }

          module.exports = _arrayWithoutHoles;
        },
        {}
      ],
      4: [
        function(_dereq_, module, exports) {
          function _assertThisInitialized(self) {
            if (self === void 0) {
              throw new ReferenceError(
                "this hasn't been initialised - super() hasn't been called"
              );
            }

            return self;
          }

          module.exports = _assertThisInitialized;
        },
        {}
      ],
      5: [
        function(_dereq_, module, exports) {
          function _classCallCheck(instance, Constructor) {
            if (!(instance instanceof Constructor)) {
              throw new TypeError('Cannot call a class as a function');
            }
          }

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

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

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

            return obj;
          }

          module.exports = _defineProperty;
        },
        {}
      ],
      8: [
        function(_dereq_, module, exports) {
          function _getPrototypeOf(o) {
            module.exports = _getPrototypeOf = Object.setPrototypeOf
              ? Object.getPrototypeOf
              : function _getPrototypeOf(o) {
                  return o.__proto__ || Object.getPrototypeOf(o);
                };
            return _getPrototypeOf(o);
          }

          module.exports = _getPrototypeOf;
        },
        {}
      ],
      9: [
        function(_dereq_, module, exports) {
          var setPrototypeOf = _dereq_('./setPrototypeOf');

          function _inherits(subClass, superClass) {
            if (typeof superClass !== 'function' && superClass !== null) {
              throw new TypeError('Super expression must either be null or a function');
            }

            subClass.prototype = Object.create(superClass && superClass.prototype, {
              constructor: {
                value: subClass,
                writable: true,
                configurable: true
              }
            });
            if (superClass) setPrototypeOf(subClass, superClass);
          }

          module.exports = _inherits;
        },
        { './setPrototypeOf': 16 }
      ],
      10: [
        function(_dereq_, module, exports) {
          function _iterableToArray(iter) {
            if (
              Symbol.iterator in Object(iter) ||
              Object.prototype.toString.call(iter) === '[object Arguments]'
            )
              return Array.from(iter);
          }

          module.exports = _iterableToArray;
        },
        {}
      ],
      11: [
        function(_dereq_, module, exports) {
          function _iterableToArrayLimit(arr, i) {
            var _arr = [];
            var _n = true;
            var _d = false;
            var _e = undefined;

            try {
              for (
                var _i = arr[Symbol.iterator](), _s;
                !(_n = (_s = _i.next()).done);
                _n = true
              ) {
                _arr.push(_s.value);

                if (i && _arr.length === i) break;
              }
            } catch (err) {
              _d = true;
              _e = err;
            } finally {
              try {
                if (!_n && _i['return'] != null) _i['return']();
              } finally {
                if (_d) throw _e;
              }
            }

            return _arr;
          }

          module.exports = _iterableToArrayLimit;
        },
        {}
      ],
      12: [
        function(_dereq_, module, exports) {
          function _nonIterableRest() {
            throw new TypeError('Invalid attempt to destructure non-iterable instance');
          }

          module.exports = _nonIterableRest;
        },
        {}
      ],
      13: [
        function(_dereq_, module, exports) {
          function _nonIterableSpread() {
            throw new TypeError('Invalid attempt to spread non-iterable instance');
          }

          module.exports = _nonIterableSpread;
        },
        {}
      ],
      14: [
        function(_dereq_, module, exports) {
          var defineProperty = _dereq_('./defineProperty');

          function _objectSpread(target) {
            for (var i = 1; i < arguments.length; i++) {
              var source = arguments[i] != null ? arguments[i] : {};
              var ownKeys = Object.keys(source);

              if (typeof Object.getOwnPropertySymbols === 'function') {
                ownKeys = ownKeys.concat(
                  Object.getOwnPropertySymbols(source).filter(function(sym) {
                    return Object.getOwnPropertyDescriptor(source, sym).enumerable;
                  })
                );
              }

              ownKeys.forEach(function(key) {
                defineProperty(target, key, source[key]);
              });
            }

            return target;
          }

          module.exports = _objectSpread;
        },
        { './defineProperty': 7 }
      ],
      15: [
        function(_dereq_, module, exports) {
          var _typeof = _dereq_('../helpers/typeof');

          var assertThisInitialized = _dereq_('./assertThisInitialized');

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

            return assertThisInitialized(self);
          }

          module.exports = _possibleConstructorReturn;
        },
        { '../helpers/typeof': 19, './assertThisInitialized': 4 }
      ],
      16: [
        function(_dereq_, module, exports) {
          function _setPrototypeOf(o, p) {
            module.exports = _setPrototypeOf =
              Object.setPrototypeOf ||
              function _setPrototypeOf(o, p) {
                o.__proto__ = p;
                return o;
              };

            return _setPrototypeOf(o, p);
          }

          module.exports = _setPrototypeOf;
        },
        {}
      ],
      17: [
        function(_dereq_, module, exports) {
          var arrayWithHoles = _dereq_('./arrayWithHoles');

          var iterableToArrayLimit = _dereq_('./iterableToArrayLimit');

          var nonIterableRest = _dereq_('./nonIterableRest');

          function _slicedToArray(arr, i) {
            return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || nonIterableRest();
          }

          module.exports = _slicedToArray;
        },
        { './arrayWithHoles': 2, './iterableToArrayLimit': 11, './nonIterableRest': 12 }
      ],
      18: [
        function(_dereq_, module, exports) {
          var arrayWithoutHoles = _dereq_('./arrayWithoutHoles');

          var iterableToArray = _dereq_('./iterableToArray');

          var nonIterableSpread = _dereq_('./nonIterableSpread');

          function _toConsumableArray(arr) {
            return arrayWithoutHoles(arr) || iterableToArray(arr) || nonIterableSpread();
          }

          module.exports = _toConsumableArray;
        },
        { './arrayWithoutHoles': 3, './iterableToArray': 10, './nonIterableSpread': 13 }
      ],
      19: [
        function(_dereq_, module, exports) {
          function _typeof2(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof2 = function _typeof2(obj) {
                return typeof obj;
              };
            } else {
              _typeof2 = function _typeof2(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof2(obj);
          }

          function _typeof(obj) {
            if (typeof Symbol === 'function' && _typeof2(Symbol.iterator) === 'symbol') {
              module.exports = _typeof = function _typeof(obj) {
                return _typeof2(obj);
              };
            } else {
              module.exports = _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : _typeof2(obj);
              };
            }

            return _typeof(obj);
          }

          module.exports = _typeof;
        },
        {}
      ],
      20: [
        function(_dereq_, module, exports) {
          'use strict';

          exports.byteLength = byteLength;
          exports.toByteArray = toByteArray;
          exports.fromByteArray = fromByteArray;

          var lookup = [];
          var revLookup = [];
          var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;

          var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
          for (var i = 0, len = code.length; i < len; ++i) {
            lookup[i] = code[i];
            revLookup[code.charCodeAt(i)] = i;
          }

          // Support decoding URL-safe base64 strings, as Node.js does.
          // See: https://en.wikipedia.org/wiki/Base64#URL_applications
          revLookup['-'.charCodeAt(0)] = 62;
          revLookup['_'.charCodeAt(0)] = 63;

          function getLens(b64) {
            var len = b64.length;

            if (len % 4 > 0) {
              throw new Error('Invalid string. Length must be a multiple of 4');
            }

            // Trim off extra bytes after placeholder bytes are found
            // See: https://github.com/beatgammit/base64-js/issues/42
            var validLen = b64.indexOf('=');
            if (validLen === -1) validLen = len;

            var placeHoldersLen = validLen === len ? 0 : 4 - validLen % 4;

            return [validLen, placeHoldersLen];
          }

          // base64 is 4/3 + up to two characters of the original data
          function byteLength(b64) {
            var lens = getLens(b64);
            var validLen = lens[0];
            var placeHoldersLen = lens[1];
            return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;
          }

          function _byteLength(b64, validLen, placeHoldersLen) {
            return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;
          }

          function toByteArray(b64) {
            var tmp;
            var lens = getLens(b64);
            var validLen = lens[0];
            var placeHoldersLen = lens[1];

            var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen));

            var curByte = 0;

            // if there are placeholders, only get up to the last complete 4 chars
            var len = placeHoldersLen > 0 ? validLen - 4 : validLen;

            var i;
            for (i = 0; i < len; i += 4) {
              tmp =
                (revLookup[b64.charCodeAt(i)] << 18) |
                (revLookup[b64.charCodeAt(i + 1)] << 12) |
                (revLookup[b64.charCodeAt(i + 2)] << 6) |
                revLookup[b64.charCodeAt(i + 3)];
              arr[curByte++] = (tmp >> 16) & 0xff;
              arr[curByte++] = (tmp >> 8) & 0xff;
              arr[curByte++] = tmp & 0xff;
            }

            if (placeHoldersLen === 2) {
              tmp =
                (revLookup[b64.charCodeAt(i)] << 2) |
                (revLookup[b64.charCodeAt(i + 1)] >> 4);
              arr[curByte++] = tmp & 0xff;
            }

            if (placeHoldersLen === 1) {
              tmp =
                (revLookup[b64.charCodeAt(i)] << 10) |
                (revLookup[b64.charCodeAt(i + 1)] << 4) |
                (revLookup[b64.charCodeAt(i + 2)] >> 2);
              arr[curByte++] = (tmp >> 8) & 0xff;
              arr[curByte++] = tmp & 0xff;
            }

            return arr;
          }

          function tripletToBase64(num) {
            return (
              lookup[(num >> 18) & 0x3f] +
              lookup[(num >> 12) & 0x3f] +
              lookup[(num >> 6) & 0x3f] +
              lookup[num & 0x3f]
            );
          }

          function encodeChunk(uint8, start, end) {
            var tmp;
            var output = [];
            for (var i = start; i < end; i += 3) {
              tmp =
                ((uint8[i] << 16) & 0xff0000) +
                ((uint8[i + 1] << 8) & 0xff00) +
                (uint8[i + 2] & 0xff);
              output.push(tripletToBase64(tmp));
            }
            return output.join('');
          }

          function fromByteArray(uint8) {
            var tmp;
            var len = uint8.length;
            var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes
            var parts = [];
            var maxChunkLength = 16383; // must be multiple of 3

            // go through the array every three bytes, we'll deal with trailing stuff later
            for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
              parts.push(
                encodeChunk(uint8, i, i + maxChunkLength > len2 ? len2 : i + maxChunkLength)
              );
            }

            // pad the end with zeros, but make sure to not forget the extra bytes
            if (extraBytes === 1) {
              tmp = uint8[len - 1];
              parts.push(lookup[tmp >> 2] + lookup[(tmp << 4) & 0x3f] + '==');
            } else if (extraBytes === 2) {
              tmp = (uint8[len - 2] << 8) + uint8[len - 1];
              parts.push(
                lookup[tmp >> 10] +
                  lookup[(tmp >> 4) & 0x3f] +
                  lookup[(tmp << 2) & 0x3f] +
                  '='
              );
            }

            return parts.join('');
          }
        },
        {}
      ],
      21: [function(_dereq_, module, exports) {}, {}],
      22: [
        function(_dereq_, module, exports) {
          (function(Buffer) {
            /*!
 * The buffer module from node.js, for the browser.
 *
 * @author   Feross Aboukhadijeh <https://feross.org>
 * @license  MIT
 */
            /* eslint-disable no-proto */

            'use strict';

            var base64 = _dereq_('base64-js');
            var ieee754 = _dereq_('ieee754');
            var customInspectSymbol =
              typeof Symbol === 'function' && typeof Symbol.for === 'function'
                ? Symbol.for('nodejs.util.inspect.custom')
                : null;

            exports.Buffer = Buffer;
            exports.SlowBuffer = SlowBuffer;
            exports.INSPECT_MAX_BYTES = 50;

            var K_MAX_LENGTH = 0x7fffffff;
            exports.kMaxLength = K_MAX_LENGTH;

            /**
             * If `Buffer.TYPED_ARRAY_SUPPORT`:
             *   === true    Use Uint8Array implementation (fastest)
             *   === false   Print warning and recommend using `buffer` v4.x which has an Object
             *               implementation (most compatible, even IE6)
             *
             * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
             * Opera 11.6+, iOS 4.2+.
             *
             * We report that the browser does not support typed arrays if the are not subclassable
             * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
             * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
             * for __proto__ and has a buggy typed array implementation.
             */
            Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport();

            if (
              !Buffer.TYPED_ARRAY_SUPPORT &&
              typeof console !== 'undefined' &&
              typeof console.error === 'function'
            ) {
              console.error(
                'This browser lacks typed array (Uint8Array) support which is required by ' +
                  '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
              );
            }

            function typedArraySupport() {
              // Can typed array instances can be augmented?
              try {
                var arr = new Uint8Array(1);
                var proto = {
                  foo: function() {
                    return 42;
                  }
                };
                Object.setPrototypeOf(proto, Uint8Array.prototype);
                Object.setPrototypeOf(arr, proto);
                return arr.foo() === 42;
              } catch (e) {
                return false;
              }
            }

            Object.defineProperty(Buffer.prototype, 'parent', {
              enumerable: true,
              get: function() {
                if (!Buffer.isBuffer(this)) return undefined;
                return this.buffer;
              }
            });

            Object.defineProperty(Buffer.prototype, 'offset', {
              enumerable: true,
              get: function() {
                if (!Buffer.isBuffer(this)) return undefined;
                return this.byteOffset;
              }
            });

            function createBuffer(length) {
              if (length > K_MAX_LENGTH) {
                throw new RangeError(
                  'The value "' + length + '" is invalid for option "size"'
                );
              }
              // Return an augmented `Uint8Array` instance
              var buf = new Uint8Array(length);
              Object.setPrototypeOf(buf, Buffer.prototype);
              return buf;
            }

            /**
             * The Buffer constructor returns instances of `Uint8Array` that have their
             * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
             * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
             * and the `Uint8Array` methods. Square bracket notation works as expected -- it
             * returns a single octet.
             *
             * The `Uint8Array` prototype remains unmodified.
             */

            function Buffer(arg, encodingOrOffset, length) {
              // Common case.
              if (typeof arg === 'number') {
                if (typeof encodingOrOffset === 'string') {
                  throw new TypeError(
                    'The "string" argument must be of type string. Received type number'
                  );
                }
                return allocUnsafe(arg);
              }
              return from(arg, encodingOrOffset, length);
            }

            // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
            if (
              typeof Symbol !== 'undefined' &&
              Symbol.species != null &&
              Buffer[Symbol.species] === Buffer
            ) {
              Object.defineProperty(Buffer, Symbol.species, {
                value: null,
                configurable: true,
                enumerable: false,
                writable: false
              });
            }

            Buffer.poolSize = 8192; // not used by this implementation

            function from(value, encodingOrOffset, length) {
              if (typeof value === 'string') {
                return fromString(value, encodingOrOffset);
              }

              if (ArrayBuffer.isView(value)) {
                return fromArrayLike(value);
              }

              if (value == null) {
                throw new TypeError(
                  'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +
                    'or Array-like Object. Received type ' +
                    typeof value
                );
              }

              if (
                isInstance(value, ArrayBuffer) ||
                (value && isInstance(value.buffer, ArrayBuffer))
              ) {
                return fromArrayBuffer(value, encodingOrOffset, length);
              }

              if (typeof value === 'number') {
                throw new TypeError(
                  'The "value" argument must not be of type number. Received type number'
                );
              }

              var valueOf = value.valueOf && value.valueOf();
              if (valueOf != null && valueOf !== value) {
                return Buffer.from(valueOf, encodingOrOffset, length);
              }

              var b = fromObject(value);
              if (b) return b;

              if (
                typeof Symbol !== 'undefined' &&
                Symbol.toPrimitive != null &&
                typeof value[Symbol.toPrimitive] === 'function'
              ) {
                return Buffer.from(
                  value[Symbol.toPrimitive]('string'),
                  encodingOrOffset,
                  length
                );
              }

              throw new TypeError(
                'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +
                  'or Array-like Object. Received type ' +
                  typeof value
              );
            }

            /**
             * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
             * if value is a number.
             * Buffer.from(str[, encoding])
             * Buffer.from(array)
             * Buffer.from(buffer)
             * Buffer.from(arrayBuffer[, byteOffset[, length]])
             **/
            Buffer.from = function(value, encodingOrOffset, length) {
              return from(value, encodingOrOffset, length);
            };

            // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
            // https://github.com/feross/buffer/pull/148
            Object.setPrototypeOf(Buffer.prototype, Uint8Array.prototype);
            Object.setPrototypeOf(Buffer, Uint8Array);

            function assertSize(size) {
              if (typeof size !== 'number') {
                throw new TypeError('"size" argument must be of type number');
              } else if (size < 0) {
                throw new RangeError(
                  'The value "' + size + '" is invalid for option "size"'
                );
              }
            }

            function alloc(size, fill, encoding) {
              assertSize(size);
              if (size <= 0) {
                return createBuffer(size);
              }
              if (fill !== undefined) {
                // Only pay attention to encoding if it's a string. This
                // prevents accidentally sending in a number that would
                // be interpretted as a start offset.
                return typeof encoding === 'string'
                  ? createBuffer(size).fill(fill, encoding)
                  : createBuffer(size).fill(fill);
              }
              return createBuffer(size);
            }

            /**
             * Creates a new filled Buffer instance.
             * alloc(size[, fill[, encoding]])
             **/
            Buffer.alloc = function(size, fill, encoding) {
              return alloc(size, fill, encoding);
            };

            function allocUnsafe(size) {
              assertSize(size);
              return createBuffer(size < 0 ? 0 : checked(size) | 0);
            }

            /**
             * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
             * */
            Buffer.allocUnsafe = function(size) {
              return allocUnsafe(size);
            };
            /**
             * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
             */
            Buffer.allocUnsafeSlow = function(size) {
              return allocUnsafe(size);
            };

            function fromString(string, encoding) {
              if (typeof encoding !== 'string' || encoding === '') {
                encoding = 'utf8';
              }

              if (!Buffer.isEncoding(encoding)) {
                throw new TypeError('Unknown encoding: ' + encoding);
              }

              var length = byteLength(string, encoding) | 0;
              var buf = createBuffer(length);

              var actual = buf.write(string, encoding);

              if (actual !== length) {
                // Writing a hex string, for example, that contains invalid characters will
                // cause everything after the first invalid character to be ignored. (e.g.
                // 'abxxcd' will be treated as 'ab')
                buf = buf.slice(0, actual);
              }

              return buf;
            }

            function fromArrayLike(array) {
              var length = array.length < 0 ? 0 : checked(array.length) | 0;
              var buf = createBuffer(length);
              for (var i = 0; i < length; i += 1) {
                buf[i] = array[i] & 255;
              }
              return buf;
            }

            function fromArrayBuffer(array, byteOffset, length) {
              if (byteOffset < 0 || array.byteLength < byteOffset) {
                throw new RangeError('"offset" is outside of buffer bounds');
              }

              if (array.byteLength < byteOffset + (length || 0)) {
                throw new RangeError('"length" is outside of buffer bounds');
              }

              var buf;
              if (byteOffset === undefined && length === undefined) {
                buf = new Uint8Array(array);
              } else if (length === undefined) {
                buf = new Uint8Array(array, byteOffset);
              } else {
                buf = new Uint8Array(array, byteOffset, length);
              }

              // Return an augmented `Uint8Array` instance
              Object.setPrototypeOf(buf, Buffer.prototype);

              return buf;
            }

            function fromObject(obj) {
              if (Buffer.isBuffer(obj)) {
                var len = checked(obj.length) | 0;
                var buf = createBuffer(len);

                if (buf.length === 0) {
                  return buf;
                }

                obj.copy(buf, 0, 0, len);
                return buf;
              }

              if (obj.length !== undefined) {
                if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
                  return createBuffer(0);
                }
                return fromArrayLike(obj);
              }

              if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
                return fromArrayLike(obj.data);
              }
            }

            function checked(length) {
              // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
              // length is NaN (which is otherwise coerced to zero.)
              if (length >= K_MAX_LENGTH) {
                throw new RangeError(
                  'Attempt to allocate Buffer larger than maximum ' +
                    'size: 0x' +
                    K_MAX_LENGTH.toString(16) +
                    ' bytes'
                );
              }
              return length | 0;
            }

            function SlowBuffer(length) {
              if (+length != length) {
                // eslint-disable-line eqeqeq
                length = 0;
              }
              return Buffer.alloc(+length);
            }

            Buffer.isBuffer = function isBuffer(b) {
              return b != null && b._isBuffer === true && b !== Buffer.prototype; // so Buffer.isBuffer(Buffer.prototype) will be false
            };

            Buffer.compare = function compare(a, b) {
              if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength);
              if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength);
              if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
                throw new TypeError(
                  'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array'
                );
              }

              if (a === b) return 0;

              var x = a.length;
              var y = b.length;

              for (var i = 0, len = Math.min(x, y); i < len; ++i) {
                if (a[i] !== b[i]) {
                  x = a[i];
                  y = b[i];
                  break;
                }
              }

              if (x < y) return -1;
              if (y < x) return 1;
              return 0;
            };

            Buffer.isEncoding = function isEncoding(encoding) {
              switch (String(encoding).toLowerCase()) {
                case 'hex':
                case 'utf8':
                case 'utf-8':
                case 'ascii':
                case 'latin1':
                case 'binary':
                case 'base64':
                case 'ucs2':
                case 'ucs-2':
                case 'utf16le':
                case 'utf-16le':
                  return true;
                default:
                  return false;
              }
            };

            Buffer.concat = function concat(list, length) {
              if (!Array.isArray(list)) {
                throw new TypeError('"list" argument must be an Array of Buffers');
              }

              if (list.length === 0) {
                return Buffer.alloc(0);
              }

              var i;
              if (length === undefined) {
                length = 0;
                for (i = 0; i < list.length; ++i) {
                  length += list[i].length;
                }
              }

              var buffer = Buffer.allocUnsafe(length);
              var pos = 0;
              for (i = 0; i < list.length; ++i) {
                var buf = list[i];
                if (isInstance(buf, Uint8Array)) {
                  buf = Buffer.from(buf);
                }
                if (!Buffer.isBuffer(buf)) {
                  throw new TypeError('"list" argument must be an Array of Buffers');
                }
                buf.copy(buffer, pos);
                pos += buf.length;
              }
              return buffer;
            };

            function byteLength(string, encoding) {
              if (Buffer.isBuffer(string)) {
                return string.length;
              }
              if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {
                return string.byteLength;
              }
              if (typeof string !== 'string') {
                throw new TypeError(
                  'The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' +
                    'Received type ' +
                    typeof string
                );
              }

              var len = string.length;
              var mustMatch = arguments.length > 2 && arguments[2] === true;
              if (!mustMatch && len === 0) return 0;

              // Use a for loop to avoid recursion
              var loweredCase = false;
              for (;;) {
                switch (encoding) {
                  case 'ascii':
                  case 'latin1':
                  case 'binary':
                    return len;
                  case 'utf8':
                  case 'utf-8':
                    return utf8ToBytes(string).length;
                  case 'ucs2':
                  case 'ucs-2':
                  case 'utf16le':
                  case 'utf-16le':
                    return len * 2;
                  case 'hex':
                    return len >>> 1;
                  case 'base64':
                    return base64ToBytes(string).length;
                  default:
                    if (loweredCase) {
                      return mustMatch ? -1 : utf8ToBytes(string).length; // assume utf8
                    }
                    encoding = ('' + encoding).toLowerCase();
                    loweredCase = true;
                }
              }
            }
            Buffer.byteLength = byteLength;

            function slowToString(encoding, start, end) {
              var loweredCase = false;

              // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
              // property of a typed array.

              // This behaves neither like String nor Uint8Array in that we set start/end
              // to their upper/lower bounds if the value passed is out of range.
              // undefined is handled specially as per ECMA-262 6th Edition,
              // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
              if (start === undefined || start < 0) {
                start = 0;
              }
              // Return early if start > this.length. Done here to prevent potential uint32
              // coercion fail below.
              if (start > this.length) {
                return '';
              }

              if (end === undefined || end > this.length) {
                end = this.length;
              }

              if (end <= 0) {
                return '';
              }

              // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
              end >>>= 0;
              start >>>= 0;

              if (end <= start) {
                return '';
              }

              if (!encoding) encoding = 'utf8';

              while (true) {
                switch (encoding) {
                  case 'hex':
                    return hexSlice(this, start, end);

                  case 'utf8':
                  case 'utf-8':
                    return utf8Slice(this, start, end);

                  case 'ascii':
                    return asciiSlice(this, start, end);

                  case 'latin1':
                  case 'binary':
                    return latin1Slice(this, start, end);

                  case 'base64':
                    return base64Slice(this, start, end);

                  case 'ucs2':
                  case 'ucs-2':
                  case 'utf16le':
                  case 'utf-16le':
                    return utf16leSlice(this, start, end);

                  default:
                    if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding);
                    encoding = (encoding + '').toLowerCase();
                    loweredCase = true;
                }
              }
            }

            // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
            // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
            // reliably in a browserify context because there could be multiple different
            // copies of the 'buffer' package in use. This method works even for Buffer
            // instances that were created from another copy of the `buffer` package.
            // See: https://github.com/feross/buffer/issues/154
            Buffer.prototype._isBuffer = true;

            function swap(b, n, m) {
              var i = b[n];
              b[n] = b[m];
              b[m] = i;
            }

            Buffer.prototype.swap16 = function swap16() {
              var len = this.length;
              if (len % 2 !== 0) {
                throw new RangeError('Buffer size must be a multiple of 16-bits');
              }
              for (var i = 0; i < len; i += 2) {
                swap(this, i, i + 1);
              }
              return this;
            };

            Buffer.prototype.swap32 = function swap32() {
              var len = this.length;
              if (len % 4 !== 0) {
                throw new RangeError('Buffer size must be a multiple of 32-bits');
              }
              for (var i = 0; i < len; i += 4) {
                swap(this, i, i + 3);
                swap(this, i + 1, i + 2);
              }
              return this;
            };

            Buffer.prototype.swap64 = function swap64() {
              var len = this.length;
              if (len % 8 !== 0) {
                throw new RangeError('Buffer size must be a multiple of 64-bits');
              }
              for (var i = 0; i < len; i += 8) {
                swap(this, i, i + 7);
                swap(this, i + 1, i + 6);
                swap(this, i + 2, i + 5);
                swap(this, i + 3, i + 4);
              }
              return this;
            };

            Buffer.prototype.toString = function toString() {
              var length = this.length;
              if (length === 0) return '';
              if (arguments.length === 0) return utf8Slice(this, 0, length);
              return slowToString.apply(this, arguments);
            };

            Buffer.prototype.toLocaleString = Buffer.prototype.toString;

            Buffer.prototype.equals = function equals(b) {
              if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer');
              if (this === b) return true;
              return Buffer.compare(this, b) === 0;
            };

            Buffer.prototype.inspect = function inspect() {
              var str = '';
              var max = exports.INSPECT_MAX_BYTES;
              str = this.toString('hex', 0, max)
                .replace(/(.{2})/g, '$1 ')
                .trim();
              if (this.length > max) str += ' ... ';
              return '<Buffer ' + str + '>';
            };
            if (customInspectSymbol) {
              Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect;
            }

            Buffer.prototype.compare = function compare(
              target,
              start,
              end,
              thisStart,
              thisEnd
            ) {
              if (isInstance(target, Uint8Array)) {
                target = Buffer.from(target, target.offset, target.byteLength);
              }
              if (!Buffer.isBuffer(target)) {
                throw new TypeError(
                  'The "target" argument must be one of type Buffer or Uint8Array. ' +
                    'Received type ' +
                    typeof target
                );
              }

              if (start === undefined) {
                start = 0;
              }
              if (end === undefined) {
                end = target ? target.length : 0;
              }
              if (thisStart === undefined) {
                thisStart = 0;
              }
              if (thisEnd === undefined) {
                thisEnd = this.length;
              }

              if (
                start < 0 ||
                end > target.length ||
                thisStart < 0 ||
                thisEnd > this.length
              ) {
                throw new RangeError('out of range index');
              }

              if (thisStart >= thisEnd && start >= end) {
                return 0;
              }
              if (thisStart >= thisEnd) {
                return -1;
              }
              if (start >= end) {
                return 1;
              }

              start >>>= 0;
              end >>>= 0;
              thisStart >>>= 0;
              thisEnd >>>= 0;

              if (this === target) return 0;

              var x = thisEnd - thisStart;
              var y = end - start;
              var len = Math.min(x, y);

              var thisCopy = this.slice(thisStart, thisEnd);
              var targetCopy = target.slice(start, end);

              for (var i = 0; i < len; ++i) {
                if (thisCopy[i] !== targetCopy[i]) {
                  x = thisCopy[i];
                  y = targetCopy[i];
                  break;
                }
              }

              if (x < y) return -1;
              if (y < x) return 1;
              return 0;
            };

            // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
            // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
            //
            // Arguments:
            // - buffer - a Buffer to search
            // - val - a string, Buffer, or number
            // - byteOffset - an index into `buffer`; will be clamped to an int32
            // - encoding - an optional encoding, relevant is val is a string
            // - dir - true for indexOf, false for lastIndexOf
            function bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) {
              // Empty buffer means no match
              if (buffer.length === 0) return -1;

              // Normalize byteOffset
              if (typeof byteOffset === 'string') {
                encoding = byteOffset;
                byteOffset = 0;
              } else if (byteOffset > 0x7fffffff) {
                byteOffset = 0x7fffffff;
              } else if (byteOffset < -0x80000000) {
                byteOffset = -0x80000000;
              }
              byteOffset = +byteOffset; // Coerce to Number.
              if (numberIsNaN(byteOffset)) {
                // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
                byteOffset = dir ? 0 : buffer.length - 1;
              }

              // Normalize byteOffset: negative offsets start from the end of the buffer
              if (byteOffset < 0) byteOffset = buffer.length + byteOffset;
              if (byteOffset >= buffer.length) {
                if (dir) return -1;
                else byteOffset = buffer.length - 1;
              } else if (byteOffset < 0) {
                if (dir) byteOffset = 0;
                else return -1;
              }

              // Normalize val
              if (typeof val === 'string') {
                val = Buffer.from(val, encoding);
              }

              // Finally, search either indexOf (if dir is true) or lastIndexOf
              if (Buffer.isBuffer(val)) {
                // Special case: looking for empty string/buffer always fails
                if (val.length === 0) {
                  return -1;
                }
                return arrayIndexOf(buffer, val, byteOffset, encoding, dir);
              } else if (typeof val === 'number') {
                val = val & 0xff; // Search for a byte value [0-255]
                if (typeof Uint8Array.prototype.indexOf === 'function') {
                  if (dir) {
                    return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset);
                  } else {
                    return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset);
                  }
                }
                return arrayIndexOf(buffer, [val], byteOffset, encoding, dir);
              }

              throw new TypeError('val must be string, number or Buffer');
            }

            function arrayIndexOf(arr, val, byteOffset, encoding, dir) {
              var indexSize = 1;
              var arrLength = arr.length;
              var valLength = val.length;

              if (encoding !== undefined) {
                encoding = String(encoding).toLowerCase();
                if (
                  encoding === 'ucs2' ||
                  encoding === 'ucs-2' ||
                  encoding === 'utf16le' ||
                  encoding === 'utf-16le'
                ) {
                  if (arr.length < 2 || val.length < 2) {
                    return -1;
                  }
                  indexSize = 2;
                  arrLength /= 2;
                  valLength /= 2;
                  byteOffset /= 2;
                }
              }

              function read(buf, i) {
                if (indexSize === 1) {
                  return buf[i];
                } else {
                  return buf.readUInt16BE(i * indexSize);
                }
              }

              var i;
              if (dir) {
                var foundIndex = -1;
                for (i = byteOffset; i < arrLength; i++) {
                  if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
                    if (foundIndex === -1) foundIndex = i;
                    if (i - foundIndex + 1 === valLength) return foundIndex * indexSize;
                  } else {
                    if (foundIndex !== -1) i -= i - foundIndex;
                    foundIndex = -1;
                  }
                }
              } else {
                if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength;
                for (i = byteOffset; i >= 0; i--) {
                  var found = true;
                  for (var j = 0; j < valLength; j++) {
                    if (read(arr, i + j) !== read(val, j)) {
                      found = false;
                      break;
                    }
                  }
                  if (found) return i;
                }
              }

              return -1;
            }

            Buffer.prototype.includes = function includes(val, byteOffset, encoding) {
              return this.indexOf(val, byteOffset, encoding) !== -1;
            };

            Buffer.prototype.indexOf = function indexOf(val, byteOffset, encoding) {
              return bidirectionalIndexOf(this, val, byteOffset, encoding, true);
            };

            Buffer.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) {
              return bidirectionalIndexOf(this, val, byteOffset, encoding, false);
            };

            function hexWrite(buf, string, offset, length) {
              offset = Number(offset) || 0;
              var remaining = buf.length - offset;
              if (!length) {
                length = remaining;
              } else {
                length = Number(length);
                if (length > remaining) {
                  length = remaining;
                }
              }

              var strLen = string.length;

              if (length > strLen / 2) {
                length = strLen / 2;
              }
              for (var i = 0; i < length; ++i) {
                var parsed = parseInt(string.substr(i * 2, 2), 16);
                if (numberIsNaN(parsed)) return i;
                buf[offset + i] = parsed;
              }
              return i;
            }

            function utf8Write(buf, string, offset, length) {
              return blitBuffer(
                utf8ToBytes(string, buf.length - offset),
                buf,
                offset,
                length
              );
            }

            function asciiWrite(buf, string, offset, length) {
              return blitBuffer(asciiToBytes(string), buf, offset, length);
            }

            function latin1Write(buf, string, offset, length) {
              return asciiWrite(buf, string, offset, length);
            }

            function base64Write(buf, string, offset, length) {
              return blitBuffer(base64ToBytes(string), buf, offset, length);
            }

            function ucs2Write(buf, string, offset, length) {
              return blitBuffer(
                utf16leToBytes(string, buf.length - offset),
                buf,
                offset,
                length
              );
            }

            Buffer.prototype.write = function write(string, offset, length, encoding) {
              // Buffer#write(string)
              if (offset === undefined) {
                encoding = 'utf8';
                length = this.length;
                offset = 0;
                // Buffer#write(string, encoding)
              } else if (length === undefined && typeof offset === 'string') {
                encoding = offset;
                length = this.length;
                offset = 0;
                // Buffer#write(string, offset[, length][, encoding])
              } else if (isFinite(offset)) {
                offset = offset >>> 0;
                if (isFinite(length)) {
                  length = length >>> 0;
                  if (encoding === undefined) encoding = 'utf8';
                } else {
                  encoding = length;
                  length = undefined;
                }
              } else {
                throw new Error(
                  'Buffer.write(string, encoding, offset[, length]) is no longer supported'
                );
              }

              var remaining = this.length - offset;
              if (length === undefined || length > remaining) length = remaining;

              if (
                (string.length > 0 && (length < 0 || offset < 0)) ||
                offset > this.length
              ) {
                throw new RangeError('Attempt to write outside buffer bounds');
              }

              if (!encoding) encoding = 'utf8';

              var loweredCase = false;
              for (;;) {
                switch (encoding) {
                  case 'hex':
                    return hexWrite(this, string, offset, length);

                  case 'utf8':
                  case 'utf-8':
                    return utf8Write(this, string, offset, length);

                  case 'ascii':
                    return asciiWrite(this, string, offset, length);

                  case 'latin1':
                  case 'binary':
                    return latin1Write(this, string, offset, length);

                  case 'base64':
                    // Warning: maxLength not taken into account in base64Write
                    return base64Write(this, string, offset, length);

                  case 'ucs2':
                  case 'ucs-2':
                  case 'utf16le':
                  case 'utf-16le':
                    return ucs2Write(this, string, offset, length);

                  default:
                    if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding);
                    encoding = ('' + encoding).toLowerCase();
                    loweredCase = true;
                }
              }
            };

            Buffer.prototype.toJSON = function toJSON() {
              return {
                type: 'Buffer',
                data: Array.prototype.slice.call(this._arr || this, 0)
              };
            };

            function base64Slice(buf, start, end) {
              if (start === 0 && end === buf.length) {
                return base64.fromByteArray(buf);
              } else {
                return base64.fromByteArray(buf.slice(start, end));
              }
            }

            function utf8Slice(buf, start, end) {
              end = Math.min(buf.length, end);
              var res = [];

              var i = start;
              while (i < end) {
                var firstByte = buf[i];
                var codePoint = null;
                var bytesPerSequence =
                  firstByte > 0xef ? 4 : firstByte > 0xdf ? 3 : firstByte > 0xbf ? 2 : 1;

                if (i + bytesPerSequence <= end) {
                  var secondByte, thirdByte, fourthByte, tempCodePoint;

                  switch (bytesPerSequence) {
                    case 1:
                      if (firstByte < 0x80) {
                        codePoint = firstByte;
                      }
                      break;
                    case 2:
                      secondByte = buf[i + 1];
                      if ((secondByte & 0xc0) === 0x80) {
                        tempCodePoint = ((firstByte & 0x1f) << 0x6) | (secondByte & 0x3f);
                        if (tempCodePoint > 0x7f) {
                          codePoint = tempCodePoint;
                        }
                      }
                      break;
                    case 3:
                      secondByte = buf[i + 1];
                      thirdByte = buf[i + 2];
                      if ((secondByte & 0xc0) === 0x80 && (thirdByte & 0xc0) === 0x80) {
                        tempCodePoint =
                          ((firstByte & 0xf) << 0xc) |
                          ((secondByte & 0x3f) << 0x6) |
                          (thirdByte & 0x3f);
                        if (
                          tempCodePoint > 0x7ff &&
                          (tempCodePoint < 0xd800 || tempCodePoint > 0xdfff)
                        ) {
                          codePoint = tempCodePoint;
                        }
                      }
                      break;
                    case 4:
                      secondByte = buf[i + 1];
                      thirdByte = buf[i + 2];
                      fourthByte = buf[i + 3];
                      if (
                        (secondByte & 0xc0) === 0x80 &&
                        (thirdByte & 0xc0) === 0x80 &&
                        (fourthByte & 0xc0) === 0x80
                      ) {
                        tempCodePoint =
                          ((firstByte & 0xf) << 0x12) |
                          ((secondByte & 0x3f) << 0xc) |
                          ((thirdByte & 0x3f) << 0x6) |
                          (fourthByte & 0x3f);
                        if (tempCodePoint > 0xffff && tempCodePoint < 0x110000) {
                          codePoint = tempCodePoint;
                        }
                      }
                  }
                }

                if (codePoint === null) {
                  // we did not generate a valid codePoint so insert a
                  // replacement char (U+FFFD) and advance only 1 byte
                  codePoint = 0xfffd;
                  bytesPerSequence = 1;
                } else if (codePoint > 0xffff) {
                  // encode to utf16 (surrogate pair dance)
                  codePoint -= 0x10000;
                  res.push(((codePoint >>> 10) & 0x3ff) | 0xd800);
                  codePoint = 0xdc00 | (codePoint & 0x3ff);
                }

                res.push(codePoint);
                i += bytesPerSequence;
              }

              return decodeCodePointsArray(res);
            }

            // Based on http://stackoverflow.com/a/22747272/680742, the browser with
            // the lowest limit is Chrome, with 0x10000 args.
            // We go 1 magnitude less, for safety
            var MAX_ARGUMENTS_LENGTH = 0x1000;

            function decodeCodePointsArray(codePoints) {
              var len = codePoints.length;
              if (len <= MAX_ARGUMENTS_LENGTH) {
                return String.fromCharCode.apply(String, codePoints); // avoid extra slice()
              }

              // Decode in chunks to avoid "call stack size exceeded".
              var res = '';
              var i = 0;
              while (i < len) {
                res += String.fromCharCode.apply(
                  String,
                  codePoints.slice(i, (i += MAX_ARGUMENTS_LENGTH))
                );
              }
              return res;
            }

            function asciiSlice(buf, start, end) {
              var ret = '';
              end = Math.min(buf.length, end);

              for (var i = start; i < end; ++i) {
                ret += String.fromCharCode(buf[i] & 0x7f);
              }
              return ret;
            }

            function latin1Slice(buf, start, end) {
              var ret = '';
              end = Math.min(buf.length, end);

              for (var i = start; i < end; ++i) {
                ret += String.fromCharCode(buf[i]);
              }
              return ret;
            }

            function hexSlice(buf, start, end) {
              var len = buf.length;

              if (!start || start < 0) start = 0;
              if (!end || end < 0 || end > len) end = len;

              var out = '';
              for (var i = start; i < end; ++i) {
                out += hexSliceLookupTable[buf[i]];
              }
              return out;
            }

            function utf16leSlice(buf, start, end) {
              var bytes = buf.slice(start, end);
              var res = '';
              for (var i = 0; i < bytes.length; i += 2) {
                res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);
              }
              return res;
            }

            Buffer.prototype.slice = function slice(start, end) {
              var len = this.length;
              start = ~~start;
              end = end === undefined ? len : ~~end;

              if (start < 0) {
                start += len;
                if (start < 0) start = 0;
              } else if (start > len) {
                start = len;
              }

              if (end < 0) {
                end += len;
                if (end < 0) end = 0;
              } else if (end > len) {
                end = len;
              }

              if (end < start) end = start;

              var newBuf = this.subarray(start, end);
              // Return an augmented `Uint8Array` instance
              Object.setPrototypeOf(newBuf, Buffer.prototype);

              return newBuf;
            };

            /*
 * Need to make sure that buffer isn't trying to write out of bounds.
 */
            function checkOffset(offset, ext, length) {
              if (offset % 1 !== 0 || offset < 0)
                throw new RangeError('offset is not uint');
              if (offset + ext > length)
                throw new RangeError('Trying to access beyond buffer length');
            }

            Buffer.prototype.readUIntLE = function readUIntLE(
              offset,
              byteLength,
              noAssert
            ) {
              offset = offset >>> 0;
              byteLength = byteLength >>> 0;
              if (!noAssert) checkOffset(offset, byteLength, this.length);

              var val = this[offset];
              var mul = 1;
              var i = 0;
              while (++i < byteLength && (mul *= 0x100)) {
                val += this[offset + i] * mul;
              }

              return val;
            };

            Buffer.prototype.readUIntBE = function readUIntBE(
              offset,
              byteLength,
              noAssert
            ) {
              offset = offset >>> 0;
              byteLength = byteLength >>> 0;
              if (!noAssert) {
                checkOffset(offset, byteLength, this.length);
              }

              var val = this[offset + --byteLength];
              var mul = 1;
              while (byteLength > 0 && (mul *= 0x100)) {
                val += this[offset + --byteLength] * mul;
              }

              return val;
            };

            Buffer.prototype.readUInt8 = function readUInt8(offset, noAssert) {
              offset = offset >>> 0;
              if (!noAssert) checkOffset(offset, 1, this.length);
              return this[offset];
            };

            Buffer.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) {
              offset = offset >>> 0;
              if (!noAssert) checkOffset(offset, 2, this.length);
              return this[offset] | (this[offset + 1] << 8);
            };

            Buffer.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) {
              offset = offset >>> 0;
              if (!noAssert) checkOffset(offset, 2, this.length);
              return (this[offset] << 8) | this[offset + 1];
            };

            Buffer.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) {
              offset = offset >>> 0;
              if (!noAssert) checkOffset(offset, 4, this.length);

              return (
                (this[offset] | (this[offset + 1] << 8) | (this[offset + 2] << 16)) +
                this[offset + 3] * 0x1000000
              );
            };

            Buffer.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) {
              offset = offset >>> 0;
              if (!noAssert) checkOffset(offset, 4, this.length);

              return (
                this[offset] * 0x1000000 +
                ((this[offset + 1] << 16) | (this[offset + 2] << 8) | this[offset + 3])
              );
            };

            Buffer.prototype.readIntLE = function readIntLE(offset, byteLength, noAssert) {
              offset = offset >>> 0;
              byteLength = byteLength >>> 0;
              if (!noAssert) checkOffset(offset, byteLength, this.length);

              var val = this[offset];
              var mul = 1;
              var i = 0;
              while (++i < byteLength && (mul *= 0x100)) {
                val += this[offset + i] * mul;
              }
              mul *= 0x80;

              if (val >= mul) val -= Math.pow(2, 8 * byteLength);

              return val;
            };

            Buffer.prototype.readIntBE = function readIntBE(offset, byteLength, noAssert) {
              offset = offset >>> 0;
              byteLength = byteLength >>> 0;
              if (!noAssert) checkOffset(offset, byteLength, this.length);

              var i = byteLength;
              var mul = 1;
              var val = this[offset + --i];
              while (i > 0 && (mul *= 0x100)) {
                val += this[offset + --i] * mul;
              }
              mul *= 0x80;

              if (val >= mul) val -= Math.pow(2, 8 * byteLength);

              return val;
            };

            Buffer.prototype.readInt8 = function readInt8(offset, noAssert) {
              offset = offset >>> 0;
              if (!noAssert) checkOffset(offset, 1, this.length);
              if (!(this[offset] & 0x80)) return this[offset];
              return (0xff - this[offset] + 1) * -1;
            };

            Buffer.prototype.readInt16LE = function readInt16LE(offset, noAssert) {
              offset = offset >>> 0;
              if (!noAssert) checkOffset(offset, 2, this.length);
              var val = this[offset] | (this[offset + 1] << 8);
              return val & 0x8000 ? val | 0xffff0000 : val;
            };

            Buffer.prototype.readInt16BE = function readInt16BE(offset, noAssert) {
              offset = offset >>> 0;
              if (!noAssert) checkOffset(offset, 2, this.length);
              var val = this[offset + 1] | (this[offset] << 8);
              return val & 0x8000 ? val | 0xffff0000 : val;
            };

            Buffer.prototype.readInt32LE = function readInt32LE(offset, noAssert) {
              offset = offset >>> 0;
              if (!noAssert) checkOffset(offset, 4, this.length);

              return (
                this[offset] |
                (this[offset + 1] << 8) |
                (this[offset + 2] << 16) |
                (this[offset + 3] << 24)
              );
            };

            Buffer.prototype.readInt32BE = function readInt32BE(offset, noAssert) {
              offset = offset >>> 0;
              if (!noAssert) checkOffset(offset, 4, this.length);

              return (
                (this[offset] << 24) |
                (this[offset + 1] << 16) |
                (this[offset + 2] << 8) |
                this[offset + 3]
              );
            };

            Buffer.prototype.readFloatLE = function readFloatLE(offset, noAssert) {
              offset = offset >>> 0;
              if (!noAssert) checkOffset(offset, 4, this.length);
              return ieee754.read(this, offset, true, 23, 4);
            };

            Buffer.prototype.readFloatBE = function readFloatBE(offset, noAssert) {
              offset = offset >>> 0;
              if (!noAssert) checkOffset(offset, 4, this.length);
              return ieee754.read(this, offset, false, 23, 4);
            };

            Buffer.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) {
              offset = offset >>> 0;
              if (!noAssert) checkOffset(offset, 8, this.length);
              return ieee754.read(this, offset, true, 52, 8);
            };

            Buffer.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) {
              offset = offset >>> 0;
              if (!noAssert) checkOffset(offset, 8, this.length);
              return ieee754.read(this, offset, false, 52, 8);
            };

            function checkInt(buf, value, offset, ext, max, min) {
              if (!Buffer.isBuffer(buf))
                throw new TypeError('"buffer" argument must be a Buffer instance');
              if (value > max || value < min)
                throw new RangeError('"value" argument is out of bounds');
              if (offset + ext > buf.length) throw new RangeError('Index out of range');
            }

            Buffer.prototype.writeUIntLE = function writeUIntLE(
              value,
              offset,
              byteLength,
              noAssert
            ) {
              value = +value;
              offset = offset >>> 0;
              byteLength = byteLength >>> 0;
              if (!noAssert) {
                var maxBytes = Math.pow(2, 8 * byteLength) - 1;
                checkInt(this, value, offset, byteLength, maxBytes, 0);
              }

              var mul = 1;
              var i = 0;
              this[offset] = value & 0xff;
              while (++i < byteLength && (mul *= 0x100)) {
                this[offset + i] = (value / mul) & 0xff;
              }

              return offset + byteLength;
            };

            Buffer.prototype.writeUIntBE = function writeUIntBE(
              value,
              offset,
              byteLength,
              noAssert
            ) {
              value = +value;
              offset = offset >>> 0;
              byteLength = byteLength >>> 0;
              if (!noAssert) {
                var maxBytes = Math.pow(2, 8 * byteLength) - 1;
                checkInt(this, value, offset, byteLength, maxBytes, 0);
              }

              var i = byteLength - 1;
              var mul = 1;
              this[offset + i] = value & 0xff;
              while (--i >= 0 && (mul *= 0x100)) {
                this[offset + i] = (value / mul) & 0xff;
              }

              return offset + byteLength;
            };

            Buffer.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) {
              value = +value;
              offset = offset >>> 0;
              if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0);
              this[offset] = value & 0xff;
              return offset + 1;
            };

            Buffer.prototype.writeUInt16LE = function writeUInt16LE(
              value,
              offset,
              noAssert
            ) {
              value = +value;
              offset = offset >>> 0;
              if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);
              this[offset] = value & 0xff;
              this[offset + 1] = value >>> 8;
              return offset + 2;
            };

            Buffer.prototype.writeUInt16BE = function writeUInt16BE(
              value,
              offset,
              noAssert
            ) {
              value = +value;
              offset = offset >>> 0;
              if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);
              this[offset] = value >>> 8;
              this[offset + 1] = value & 0xff;
              return offset + 2;
            };

            Buffer.prototype.writeUInt32LE = function writeUInt32LE(
              value,
              offset,
              noAssert
            ) {
              value = +value;
              offset = offset >>> 0;
              if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);
              this[offset + 3] = value >>> 24;
              this[offset + 2] = value >>> 16;
              this[offset + 1] = value >>> 8;
              this[offset] = value & 0xff;
              return offset + 4;
            };

            Buffer.prototype.writeUInt32BE = function writeUInt32BE(
              value,
              offset,
              noAssert
            ) {
              value = +value;
              offset = offset >>> 0;
              if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);
              this[offset] = value >>> 24;
              this[offset + 1] = value >>> 16;
              this[offset + 2] = value >>> 8;
              this[offset + 3] = value & 0xff;
              return offset + 4;
            };

            Buffer.prototype.writeIntLE = function writeIntLE(
              value,
              offset,
              byteLength,
              noAssert
            ) {
              value = +value;
              offset = offset >>> 0;
              if (!noAssert) {
                var limit = Math.pow(2, 8 * byteLength - 1);

                checkInt(this, value, offset, byteLength, limit - 1, -limit);
              }

              var i = 0;
              var mul = 1;
              var sub = 0;
              this[offset] = value & 0xff;
              while (++i < byteLength && (mul *= 0x100)) {
                if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
                  sub = 1;
                }
                this[offset + i] = (((value / mul) >> 0) - sub) & 0xff;
              }

              return offset + byteLength;
            };

            Buffer.prototype.writeIntBE = function writeIntBE(
              value,
              offset,
              byteLength,
              noAssert
            ) {
              value = +value;
              offset = offset >>> 0;
              if (!noAssert) {
                var limit = Math.pow(2, 8 * byteLength - 1);

                checkInt(this, value, offset, byteLength, limit - 1, -limit);
              }

              var i = byteLength - 1;
              var mul = 1;
              var sub = 0;
              this[offset + i] = value & 0xff;
              while (--i >= 0 && (mul *= 0x100)) {
                if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
                  sub = 1;
                }
                this[offset + i] = (((value / mul) >> 0) - sub) & 0xff;
              }

              return offset + byteLength;
            };

            Buffer.prototype.writeInt8 = function writeInt8(value, offset, noAssert) {
              value = +value;
              offset = offset >>> 0;
              if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80);
              if (value < 0) value = 0xff + value + 1;
              this[offset] = value & 0xff;
              return offset + 1;
            };

            Buffer.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) {
              value = +value;
              offset = offset >>> 0;
              if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);
              this[offset] = value & 0xff;
              this[offset + 1] = value >>> 8;
              return offset + 2;
            };

            Buffer.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) {
              value = +value;
              offset = offset >>> 0;
              if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);
              this[offset] = value >>> 8;
              this[offset + 1] = value & 0xff;
              return offset + 2;
            };

            Buffer.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) {
              value = +value;
              offset = offset >>> 0;
              if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);
              this[offset] = value & 0xff;
              this[offset + 1] = value >>> 8;
              this[offset + 2] = value >>> 16;
              this[offset + 3] = value >>> 24;
              return offset + 4;
            };

            Buffer.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) {
              value = +value;
              offset = offset >>> 0;
              if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);
              if (value < 0) value = 0xffffffff + value + 1;
              this[offset] = value >>> 24;
              this[offset + 1] = value >>> 16;
              this[offset + 2] = value >>> 8;
              this[offset + 3] = value & 0xff;
              return offset + 4;
            };

            function checkIEEE754(buf, value, offset, ext, max, min) {
              if (offset + ext > buf.length) throw new RangeError('Index out of range');
              if (offset < 0) throw new RangeError('Index out of range');
            }

            function writeFloat(buf, value, offset, littleEndian, noAssert) {
              value = +value;
              offset = offset >>> 0;
              if (!noAssert) {
                checkIEEE754(
                  buf,
                  value,
                  offset,
                  4,
                  3.4028234663852886e38,
                  -3.4028234663852886e38
                );
              }
              ieee754.write(buf, value, offset, littleEndian, 23, 4);
              return offset + 4;
            }

            Buffer.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) {
              return writeFloat(this, value, offset, true, noAssert);
            };

            Buffer.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) {
              return writeFloat(this, value, offset, false, noAssert);
            };

            function writeDouble(buf, value, offset, littleEndian, noAssert) {
              value = +value;
              offset = offset >>> 0;
              if (!noAssert) {
                checkIEEE754(
                  buf,
                  value,
                  offset,
                  8,
                  1.7976931348623157e308,
                  -1.7976931348623157e308
                );
              }
              ieee754.write(buf, value, offset, littleEndian, 52, 8);
              return offset + 8;
            }

            Buffer.prototype.writeDoubleLE = function writeDoubleLE(
              value,
              offset,
              noAssert
            ) {
              return writeDouble(this, value, offset, true, noAssert);
            };

            Buffer.prototype.writeDoubleBE = function writeDoubleBE(
              value,
              offset,
              noAssert
            ) {
              return writeDouble(this, value, offset, false, noAssert);
            };

            // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
            Buffer.prototype.copy = function copy(target, targetStart, start, end) {
              if (!Buffer.isBuffer(target))
                throw new TypeError('argument should be a Buffer');
              if (!start) start = 0;
              if (!end && end !== 0) end = this.length;
              if (targetStart >= target.length) targetStart = target.length;
              if (!targetStart) targetStart = 0;
              if (end > 0 && end < start) end = start;

              // Copy 0 bytes; we're done
              if (end === start) return 0;
              if (target.length === 0 || this.length === 0) return 0;

              // Fatal error conditions
              if (targetStart < 0) {
                throw new RangeError('targetStart out of bounds');
              }
              if (start < 0 || start >= this.length)
                throw new RangeError('Index out of range');
              if (end < 0) throw new RangeError('sourceEnd out of bounds');

              // Are we oob?
              if (end > this.length) end = this.length;
              if (target.length - targetStart < end - start) {
                end = target.length - targetStart + start;
              }

              var len = end - start;

              if (
                this === target &&
                typeof Uint8Array.prototype.copyWithin === 'function'
              ) {
                // Use built-in when available, missing from IE11
                this.copyWithin(targetStart, start, end);
              } else if (this === target && start < targetStart && targetStart < end) {
                // descending copy from end
                for (var i = len - 1; i >= 0; --i) {
                  target[i + targetStart] = this[i + start];
                }
              } else {
                Uint8Array.prototype.set.call(
                  target,
                  this.subarray(start, end),
                  targetStart
                );
              }

              return len;
            };

            // Usage:
            //    buffer.fill(number[, offset[, end]])
            //    buffer.fill(buffer[, offset[, end]])
            //    buffer.fill(string[, offset[, end]][, encoding])
            Buffer.prototype.fill = function fill(val, start, end, encoding) {
              // Handle string cases:
              if (typeof val === 'string') {
                if (typeof start === 'string') {
                  encoding = start;
                  start = 0;
                  end = this.length;
                } else if (typeof end === 'string') {
                  encoding = end;
                  end = this.length;
                }
                if (encoding !== undefined && typeof encoding !== 'string') {
                  throw new TypeError('encoding must be a string');
                }
                if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
                  throw new TypeError('Unknown encoding: ' + encoding);
                }
                if (val.length === 1) {
                  var code = val.charCodeAt(0);
                  if ((encoding === 'utf8' && code < 128) || encoding === 'latin1') {
                    // Fast path: If `val` fits into a single byte, use that numeric value.
                    val = code;
                  }
                }
              } else if (typeof val === 'number') {
                val = val & 255;
              } else if (typeof val === 'boolean') {
                val = Number(val);
              }

              // Invalid ranges are not set to a default, so can range check early.
              if (start < 0 || this.length < start || this.length < end) {
                throw new RangeError('Out of range index');
              }

              if (end <= start) {
                return this;
              }

              start = start >>> 0;
              end = end === undefined ? this.length : end >>> 0;

              if (!val) val = 0;

              var i;
              if (typeof val === 'number') {
                for (i = start; i < end; ++i) {
                  this[i] = val;
                }
              } else {
                var bytes = Buffer.isBuffer(val) ? val : Buffer.from(val, encoding);
                var len = bytes.length;
                if (len === 0) {
                  throw new TypeError(
                    'The value "' + val + '" is invalid for argument "value"'
                  );
                }
                for (i = 0; i < end - start; ++i) {
                  this[i + start] = bytes[i % len];
                }
              }

              return this;
            };

            // HELPER FUNCTIONS
            // ================

            var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g;

            function base64clean(str) {
              // Node takes equal signs as end of the Base64 encoding
              str = str.split('=')[0];
              // Node strips out invalid characters like \n and \t from the string, base64-js does not
              str = str.trim().replace(INVALID_BASE64_RE, '');
              // Node converts strings with length < 2 to ''
              if (str.length < 2) return '';
              // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
              while (str.length % 4 !== 0) {
                str = str + '=';
              }
              return str;
            }

            function utf8ToBytes(string, units) {
              units = units || Infinity;
              var codePoint;
              var length = string.length;
              var leadSurrogate = null;
              var bytes = [];

              for (var i = 0; i < length; ++i) {
                codePoint = string.charCodeAt(i);

                // is surrogate component
                if (codePoint > 0xd7ff && codePoint < 0xe000) {
                  // last char was a lead
                  if (!leadSurrogate) {
                    // no lead yet
                    if (codePoint > 0xdbff) {
                      // unexpected trail
                      if ((units -= 3) > -1) bytes.push(0xef, 0xbf, 0xbd);
                      continue;
                    } else if (i + 1 === length) {
                      // unpaired lead
                      if ((units -= 3) > -1) bytes.push(0xef, 0xbf, 0xbd);
                      continue;
                    }

                    // valid lead
                    leadSurrogate = codePoint;

                    continue;
                  }

                  // 2 leads in a row
                  if (codePoint < 0xdc00) {
                    if ((units -= 3) > -1) bytes.push(0xef, 0xbf, 0xbd);
                    leadSurrogate = codePoint;
                    continue;
                  }

                  // valid surrogate pair
                  codePoint =
                    (((leadSurrogate - 0xd800) << 10) | (codePoint - 0xdc00)) + 0x10000;
                } else if (leadSurrogate) {
                  // valid bmp char, but last char was a lead
                  if ((units -= 3) > -1) bytes.push(0xef, 0xbf, 0xbd);
                }

                leadSurrogate = null;

                // encode utf8
                if (codePoint < 0x80) {
                  if ((units -= 1) < 0) break;
                  bytes.push(codePoint);
                } else if (codePoint < 0x800) {
                  if ((units -= 2) < 0) break;
                  bytes.push((codePoint >> 0x6) | 0xc0, (codePoint & 0x3f) | 0x80);
                } else if (codePoint < 0x10000) {
                  if ((units -= 3) < 0) break;
                  bytes.push(
                    (codePoint >> 0xc) | 0xe0,
                    ((codePoint >> 0x6) & 0x3f) | 0x80,
                    (codePoint & 0x3f) | 0x80
                  );
                } else if (codePoint < 0x110000) {
                  if ((units -= 4) < 0) break;
                  bytes.push(
                    (codePoint >> 0x12) | 0xf0,
                    ((codePoint >> 0xc) & 0x3f) | 0x80,
                    ((codePoint >> 0x6) & 0x3f) | 0x80,
                    (codePoint & 0x3f) | 0x80
                  );
                } else {
                  throw new Error('Invalid code point');
                }
              }

              return bytes;
            }

            function asciiToBytes(str) {
              var byteArray = [];
              for (var i = 0; i < str.length; ++i) {
                // Node's code seems to be doing this and not & 0x7F..
                byteArray.push(str.charCodeAt(i) & 0xff);
              }
              return byteArray;
            }

            function utf16leToBytes(str, units) {
              var c, hi, lo;
              var byteArray = [];
              for (var i = 0; i < str.length; ++i) {
                if ((units -= 2) < 0) break;

                c = str.charCodeAt(i);
                hi = c >> 8;
                lo = c % 256;
                byteArray.push(lo);
                byteArray.push(hi);
              }

              return byteArray;
            }

            function base64ToBytes(str) {
              return base64.toByteArray(base64clean(str));
            }

            function blitBuffer(src, dst, offset, length) {
              for (var i = 0; i < length; ++i) {
                if (i + offset >= dst.length || i >= src.length) break;
                dst[i + offset] = src[i];
              }
              return i;
            }

            // ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass
            // the `instanceof` check but they should be treated as of that type.
            // See: https://github.com/feross/buffer/issues/166
            function isInstance(obj, type) {
              return (
                obj instanceof type ||
                (obj != null &&
                  obj.constructor != null &&
                  obj.constructor.name != null &&
                  obj.constructor.name === type.name)
              );
            }
            function numberIsNaN(obj) {
              // For IE11 support
              return obj !== obj; // eslint-disable-line no-self-compare
            }

            // Create lookup table for `toString('hex')`
            // See: https://github.com/feross/buffer/issues/219
            var hexSliceLookupTable = (function() {
              var alphabet = '0123456789abcdef';
              var table = new Array(256);
              for (var i = 0; i < 16; ++i) {
                var i16 = i * 16;
                for (var j = 0; j < 16; ++j) {
                  table[i16 + j] = alphabet[i] + alphabet[j];
                }
              }
              return table;
            })();
          }.call(this, _dereq_('buffer').Buffer));
        },
        { 'base64-js': 20, buffer: 22, ieee754: 255 }
      ],
      23: [
        function(_dereq_, module, exports) {
          module.exports = function(it) {
            if (typeof it != 'function') {
              throw TypeError(String(it) + ' is not a function');
            }
            return it;
          };
        },
        {}
      ],
      24: [
        function(_dereq_, module, exports) {
          var isObject = _dereq_('../internals/is-object');

          module.exports = function(it) {
            if (!isObject(it) && it !== null) {
              throw TypeError("Can't set " + String(it) + ' as a prototype');
            }
            return it;
          };
        },
        { '../internals/is-object': 91 }
      ],
      25: [
        function(_dereq_, module, exports) {
          var wellKnownSymbol = _dereq_('../internals/well-known-symbol');
          var create = _dereq_('../internals/object-create');
          var definePropertyModule = _dereq_('../internals/object-define-property');

          var UNSCOPABLES = wellKnownSymbol('unscopables');
          var ArrayPrototype = Array.prototype;

          // Array.prototype[@@unscopables]
          // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables
          if (ArrayPrototype[UNSCOPABLES] == undefined) {
            definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {
              configurable: true,
              value: create(null)
            });
          }

          // add a key to Array.prototype[@@unscopables]
          module.exports = function(key) {
            ArrayPrototype[UNSCOPABLES][key] = true;
          };
        },
        {
          '../internals/object-create': 107,
          '../internals/object-define-property': 109,
          '../internals/well-known-symbol': 163
        }
      ],
      26: [
        function(_dereq_, module, exports) {
          'use strict';
          var charAt = _dereq_('../internals/string-multibyte').charAt;

          // `AdvanceStringIndex` abstract operation
          // https://tc39.github.io/ecma262/#sec-advancestringindex
          module.exports = function(S, index, unicode) {
            return index + (unicode ? charAt(S, index).length : 1);
          };
        },
        { '../internals/string-multibyte': 140 }
      ],
      27: [
        function(_dereq_, module, exports) {
          module.exports = function(it, Constructor, name) {
            if (!(it instanceof Constructor)) {
              throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');
            }
            return it;
          };
        },
        {}
      ],
      28: [
        function(_dereq_, module, exports) {
          var isObject = _dereq_('../internals/is-object');

          module.exports = function(it) {
            if (!isObject(it)) {
              throw TypeError(String(it) + ' is not an object');
            }
            return it;
          };
        },
        { '../internals/is-object': 91 }
      ],
      29: [
        function(_dereq_, module, exports) {
          module.exports =
            typeof ArrayBuffer !== 'undefined' && typeof DataView !== 'undefined';
        },
        {}
      ],
      30: [
        function(_dereq_, module, exports) {
          'use strict';
          var NATIVE_ARRAY_BUFFER = _dereq_('../internals/array-buffer-native');
          var DESCRIPTORS = _dereq_('../internals/descriptors');
          var global = _dereq_('../internals/global');
          var isObject = _dereq_('../internals/is-object');
          var has = _dereq_('../internals/has');
          var classof = _dereq_('../internals/classof');
          var createNonEnumerableProperty = _dereq_(
            '../internals/create-non-enumerable-property'
          );
          var redefine = _dereq_('../internals/redefine');
          var defineProperty = _dereq_('../internals/object-define-property').f;
          var getPrototypeOf = _dereq_('../internals/object-get-prototype-of');
          var setPrototypeOf = _dereq_('../internals/object-set-prototype-of');
          var wellKnownSymbol = _dereq_('../internals/well-known-symbol');
          var uid = _dereq_('../internals/uid');

          var Int8Array = global.Int8Array;
          var Int8ArrayPrototype = Int8Array && Int8Array.prototype;
          var Uint8ClampedArray = global.Uint8ClampedArray;
          var Uint8ClampedArrayPrototype = Uint8ClampedArray && Uint8ClampedArray.prototype;
          var TypedArray = Int8Array && getPrototypeOf(Int8Array);
          var TypedArrayPrototype =
            Int8ArrayPrototype && getPrototypeOf(Int8ArrayPrototype);
          var ObjectPrototype = Object.prototype;
          var isPrototypeOf = ObjectPrototype.isPrototypeOf;

          var TO_STRING_TAG = wellKnownSymbol('toStringTag');
          var TYPED_ARRAY_TAG = uid('TYPED_ARRAY_TAG');
          // Fixing native typed arrays in Opera Presto crashes the browser, see #595
          var NATIVE_ARRAY_BUFFER_VIEWS =
            NATIVE_ARRAY_BUFFER && !!setPrototypeOf && classof(global.opera) !== 'Opera';
          var TYPED_ARRAY_TAG_REQIRED = false;
          var NAME;

          var TypedArrayConstructorsList = {
            Int8Array: 1,
            Uint8Array: 1,
            Uint8ClampedArray: 1,
            Int16Array: 2,
            Uint16Array: 2,
            Int32Array: 4,
            Uint32Array: 4,
            Float32Array: 4,
            Float64Array: 8
          };

          var isView = function isView(it) {
            var klass = classof(it);
            return klass === 'DataView' || has(TypedArrayConstructorsList, klass);
          };

          var isTypedArray = function(it) {
            return isObject(it) && has(TypedArrayConstructorsList, classof(it));
          };

          var aTypedArray = function(it) {
            if (isTypedArray(it)) return it;
            throw TypeError('Target is not a typed array');
          };

          var aTypedArrayConstructor = function(C) {
            if (setPrototypeOf) {
              if (isPrototypeOf.call(TypedArray, C)) return C;
            } else
              for (var ARRAY in TypedArrayConstructorsList)
                if (has(TypedArrayConstructorsList, NAME)) {
                  var TypedArrayConstructor = global[ARRAY];
                  if (
                    TypedArrayConstructor &&
                    (C === TypedArrayConstructor ||
                      isPrototypeOf.call(TypedArrayConstructor, C))
                  ) {
                    return C;
                  }
                }
            throw TypeError('Target is not a typed array constructor');
          };

          var exportTypedArrayMethod = function(KEY, property, forced) {
            if (!DESCRIPTORS) return;
            if (forced)
              for (var ARRAY in TypedArrayConstructorsList) {
                var TypedArrayConstructor = global[ARRAY];
                if (TypedArrayConstructor && has(TypedArrayConstructor.prototype, KEY)) {
                  delete TypedArrayConstructor.prototype[KEY];
                }
              }
            if (!TypedArrayPrototype[KEY] || forced) {
              redefine(
                TypedArrayPrototype,
                KEY,
                forced
                  ? property
                  : (NATIVE_ARRAY_BUFFER_VIEWS && Int8ArrayPrototype[KEY]) || property
              );
            }
          };

          var exportTypedArrayStaticMethod = function(KEY, property, forced) {
            var ARRAY, TypedArrayConstructor;
            if (!DESCRIPTORS) return;
            if (setPrototypeOf) {
              if (forced)
                for (ARRAY in TypedArrayConstructorsList) {
                  TypedArrayConstructor = global[ARRAY];
                  if (TypedArrayConstructor && has(TypedArrayConstructor, KEY)) {
                    delete TypedArrayConstructor[KEY];
                  }
                }
              if (!TypedArray[KEY] || forced) {
                // V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable
                try {
                  return redefine(
                    TypedArray,
                    KEY,
                    forced
                      ? property
                      : (NATIVE_ARRAY_BUFFER_VIEWS && Int8Array[KEY]) || property
                  );
                } catch (error) {
                  /* empty */
                }
              } else return;
            }
            for (ARRAY in TypedArrayConstructorsList) {
              TypedArrayConstructor = global[ARRAY];
              if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) {
                redefine(TypedArrayConstructor, KEY, property);
              }
            }
          };

          for (NAME in TypedArrayConstructorsList) {
            if (!global[NAME]) NATIVE_ARRAY_BUFFER_VIEWS = false;
          }

          // WebKit bug - typed arrays constructors prototype is Object.prototype
          if (
            !NATIVE_ARRAY_BUFFER_VIEWS ||
            typeof TypedArray != 'function' ||
            TypedArray === Function.prototype
          ) {
            // eslint-disable-next-line no-shadow
            TypedArray = function TypedArray() {
              throw TypeError('Incorrect invocation');
            };
            if (NATIVE_ARRAY_BUFFER_VIEWS)
              for (NAME in TypedArrayConstructorsList) {
                if (global[NAME]) setPrototypeOf(global[NAME], TypedArray);
              }
          }

          if (
            !NATIVE_ARRAY_BUFFER_VIEWS ||
            !TypedArrayPrototype ||
            TypedArrayPrototype === ObjectPrototype
          ) {
            TypedArrayPrototype = TypedArray.prototype;
            if (NATIVE_ARRAY_BUFFER_VIEWS)
              for (NAME in TypedArrayConstructorsList) {
                if (global[NAME])
                  setPrototypeOf(global[NAME].prototype, TypedArrayPrototype);
              }
          }

          // WebKit bug - one more object in Uint8ClampedArray prototype chain
          if (
            NATIVE_ARRAY_BUFFER_VIEWS &&
            getPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype
          ) {
            setPrototypeOf(Uint8ClampedArrayPrototype, TypedArrayPrototype);
          }

          if (DESCRIPTORS && !has(TypedArrayPrototype, TO_STRING_TAG)) {
            TYPED_ARRAY_TAG_REQIRED = true;
            defineProperty(TypedArrayPrototype, TO_STRING_TAG, {
              get: function() {
                return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined;
              }
            });
            for (NAME in TypedArrayConstructorsList)
              if (global[NAME]) {
                createNonEnumerableProperty(global[NAME], TYPED_ARRAY_TAG, NAME);
              }
          }

          module.exports = {
            NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS,
            TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQIRED && TYPED_ARRAY_TAG,
            aTypedArray: aTypedArray,
            aTypedArrayConstructor: aTypedArrayConstructor,
            exportTypedArrayMethod: exportTypedArrayMethod,
            exportTypedArrayStaticMethod: exportTypedArrayStaticMethod,
            isView: isView,
            isTypedArray: isTypedArray,
            TypedArray: TypedArray,
            TypedArrayPrototype: TypedArrayPrototype
          };
        },
        {
          '../internals/array-buffer-native': 29,
          '../internals/classof': 47,
          '../internals/create-non-enumerable-property': 55,
          '../internals/descriptors': 60,
          '../internals/global': 76,
          '../internals/has': 77,
          '../internals/is-object': 91,
          '../internals/object-define-property': 109,
          '../internals/object-get-prototype-of': 114,
          '../internals/object-set-prototype-of': 118,
          '../internals/redefine': 125,
          '../internals/uid': 160,
          '../internals/well-known-symbol': 163
        }
      ],
      31: [
        function(_dereq_, module, exports) {
          'use strict';
          var global = _dereq_('../internals/global');
          var DESCRIPTORS = _dereq_('../internals/descriptors');
          var NATIVE_ARRAY_BUFFER = _dereq_('../internals/array-buffer-native');
          var createNonEnumerableProperty = _dereq_(
            '../internals/create-non-enumerable-property'
          );
          var redefineAll = _dereq_('../internals/redefine-all');
          var fails = _dereq_('../internals/fails');
          var anInstance = _dereq_('../internals/an-instance');
          var toInteger = _dereq_('../internals/to-integer');
          var toLength = _dereq_('../internals/to-length');
          var toIndex = _dereq_('../internals/to-index');
          var IEEE754 = _dereq_('../internals/ieee754');
          var getPrototypeOf = _dereq_('../internals/object-get-prototype-of');
          var setPrototypeOf = _dereq_('../internals/object-set-prototype-of');
          var getOwnPropertyNames = _dereq_('../internals/object-get-own-property-names').f;
          var defineProperty = _dereq_('../internals/object-define-property').f;
          var arrayFill = _dereq_('../internals/array-fill');
          var setToStringTag = _dereq_('../internals/set-to-string-tag');
          var InternalStateModule = _dereq_('../internals/internal-state');

          var getInternalState = InternalStateModule.get;
          var setInternalState = InternalStateModule.set;
          var ARRAY_BUFFER = 'ArrayBuffer';
          var DATA_VIEW = 'DataView';
          var PROTOTYPE = 'prototype';
          var WRONG_LENGTH = 'Wrong length';
          var WRONG_INDEX = 'Wrong index';
          var NativeArrayBuffer = global[ARRAY_BUFFER];
          var $ArrayBuffer = NativeArrayBuffer;
          var $DataView = global[DATA_VIEW];
          var $DataViewPrototype = $DataView && $DataView[PROTOTYPE];
          var ObjectPrototype = Object.prototype;
          var RangeError = global.RangeError;

          var packIEEE754 = IEEE754.pack;
          var unpackIEEE754 = IEEE754.unpack;

          var packInt8 = function(number) {
            return [number & 0xff];
          };

          var packInt16 = function(number) {
            return [number & 0xff, (number >> 8) & 0xff];
          };

          var packInt32 = function(number) {
            return [
              number & 0xff,
              (number >> 8) & 0xff,
              (number >> 16) & 0xff,
              (number >> 24) & 0xff
            ];
          };

          var unpackInt32 = function(buffer) {
            return (buffer[3] << 24) | (buffer[2] << 16) | (buffer[1] << 8) | buffer[0];
          };

          var packFloat32 = function(number) {
            return packIEEE754(number, 23, 4);
          };

          var packFloat64 = function(number) {
            return packIEEE754(number, 52, 8);
          };

          var addGetter = function(Constructor, key) {
            defineProperty(Constructor[PROTOTYPE], key, {
              get: function() {
                return getInternalState(this)[key];
              }
            });
          };

          var get = function(view, count, index, isLittleEndian) {
            var intIndex = toIndex(index);
            var store = getInternalState(view);
            if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX);
            var bytes = getInternalState(store.buffer).bytes;
            var start = intIndex + store.byteOffset;
            var pack = bytes.slice(start, start + count);
            return isLittleEndian ? pack : pack.reverse();
          };

          var set = function(view, count, index, conversion, value, isLittleEndian) {
            var intIndex = toIndex(index);
            var store = getInternalState(view);
            if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX);
            var bytes = getInternalState(store.buffer).bytes;
            var start = intIndex + store.byteOffset;
            var pack = conversion(+value);
            for (var i = 0; i < count; i++)
              bytes[start + i] = pack[isLittleEndian ? i : count - i - 1];
          };

          if (!NATIVE_ARRAY_BUFFER) {
            $ArrayBuffer = function ArrayBuffer(length) {
              anInstance(this, $ArrayBuffer, ARRAY_BUFFER);
              var byteLength = toIndex(length);
              setInternalState(this, {
                bytes: arrayFill.call(new Array(byteLength), 0),
                byteLength: byteLength
              });
              if (!DESCRIPTORS) this.byteLength = byteLength;
            };

            $DataView = function DataView(buffer, byteOffset, byteLength) {
              anInstance(this, $DataView, DATA_VIEW);
              anInstance(buffer, $ArrayBuffer, DATA_VIEW);
              var bufferLength = getInternalState(buffer).byteLength;
              var offset = toInteger(byteOffset);
              if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset');
              byteLength =
                byteLength === undefined ? bufferLength - offset : toLength(byteLength);
              if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);
              setInternalState(this, {
                buffer: buffer,
                byteLength: byteLength,
                byteOffset: offset
              });
              if (!DESCRIPTORS) {
                this.buffer = buffer;
                this.byteLength = byteLength;
                this.byteOffset = offset;
              }
            };

            if (DESCRIPTORS) {
              addGetter($ArrayBuffer, 'byteLength');
              addGetter($DataView, 'buffer');
              addGetter($DataView, 'byteLength');
              addGetter($DataView, 'byteOffset');
            }

            redefineAll($DataView[PROTOTYPE], {
              getInt8: function getInt8(byteOffset) {
                return (get(this, 1, byteOffset)[0] << 24) >> 24;
              },
              getUint8: function getUint8(byteOffset) {
                return get(this, 1, byteOffset)[0];
              },
              getInt16: function getInt16(byteOffset /* , littleEndian */) {
                var bytes = get(
                  this,
                  2,
                  byteOffset,
                  arguments.length > 1 ? arguments[1] : undefined
                );
                return (((bytes[1] << 8) | bytes[0]) << 16) >> 16;
              },
              getUint16: function getUint16(byteOffset /* , littleEndian */) {
                var bytes = get(
                  this,
                  2,
                  byteOffset,
                  arguments.length > 1 ? arguments[1] : undefined
                );
                return (bytes[1] << 8) | bytes[0];
              },
              getInt32: function getInt32(byteOffset /* , littleEndian */) {
                return unpackInt32(
                  get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined)
                );
              },
              getUint32: function getUint32(byteOffset /* , littleEndian */) {
                return (
                  unpackInt32(
                    get(
                      this,
                      4,
                      byteOffset,
                      arguments.length > 1 ? arguments[1] : undefined
                    )
                  ) >>> 0
                );
              },
              getFloat32: function getFloat32(byteOffset /* , littleEndian */) {
                return unpackIEEE754(
                  get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined),
                  23
                );
              },
              getFloat64: function getFloat64(byteOffset /* , littleEndian */) {
                return unpackIEEE754(
                  get(this, 8, byteOffset, arguments.length > 1 ? arguments[1] : undefined),
                  52
                );
              },
              setInt8: function setInt8(byteOffset, value) {
                set(this, 1, byteOffset, packInt8, value);
              },
              setUint8: function setUint8(byteOffset, value) {
                set(this, 1, byteOffset, packInt8, value);
              },
              setInt16: function setInt16(byteOffset, value /* , littleEndian */) {
                set(
                  this,
                  2,
                  byteOffset,
                  packInt16,
                  value,
                  arguments.length > 2 ? arguments[2] : undefined
                );
              },
              setUint16: function setUint16(byteOffset, value /* , littleEndian */) {
                set(
                  this,
                  2,
                  byteOffset,
                  packInt16,
                  value,
                  arguments.length > 2 ? arguments[2] : undefined
                );
              },
              setInt32: function setInt32(byteOffset, value /* , littleEndian */) {
                set(
                  this,
                  4,
                  byteOffset,
                  packInt32,
                  value,
                  arguments.length > 2 ? arguments[2] : undefined
                );
              },
              setUint32: function setUint32(byteOffset, value /* , littleEndian */) {
                set(
                  this,
                  4,
                  byteOffset,
                  packInt32,
                  value,
                  arguments.length > 2 ? arguments[2] : undefined
                );
              },
              setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {
                set(
                  this,
                  4,
                  byteOffset,
                  packFloat32,
                  value,
                  arguments.length > 2 ? arguments[2] : undefined
                );
              },
              setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {
                set(
                  this,
                  8,
                  byteOffset,
                  packFloat64,
                  value,
                  arguments.length > 2 ? arguments[2] : undefined
                );
              }
            });
          } else {
            if (
              !fails(function() {
                NativeArrayBuffer(1);
              }) ||
              !fails(function() {
                new NativeArrayBuffer(-1); // eslint-disable-line no-new
              }) ||
              fails(function() {
                new NativeArrayBuffer(); // eslint-disable-line no-new
                new NativeArrayBuffer(1.5); // eslint-disable-line no-new
                new NativeArrayBuffer(NaN); // eslint-disable-line no-new
                return NativeArrayBuffer.name != ARRAY_BUFFER;
              })
            ) {
              $ArrayBuffer = function ArrayBuffer(length) {
                anInstance(this, $ArrayBuffer);
                return new NativeArrayBuffer(toIndex(length));
              };
              var ArrayBufferPrototype = ($ArrayBuffer[PROTOTYPE] =
                NativeArrayBuffer[PROTOTYPE]);
              for (
                var keys = getOwnPropertyNames(NativeArrayBuffer), j = 0, key;
                keys.length > j;

              ) {
                if (!((key = keys[j++]) in $ArrayBuffer)) {
                  createNonEnumerableProperty($ArrayBuffer, key, NativeArrayBuffer[key]);
                }
              }
              ArrayBufferPrototype.constructor = $ArrayBuffer;
            }

            // WebKit bug - the same parent prototype for typed arrays and data view
            if (setPrototypeOf && getPrototypeOf($DataViewPrototype) !== ObjectPrototype) {
              setPrototypeOf($DataViewPrototype, ObjectPrototype);
            }

            // iOS Safari 7.x bug
            var testView = new $DataView(new $ArrayBuffer(2));
            var nativeSetInt8 = $DataViewPrototype.setInt8;
            testView.setInt8(0, 2147483648);
            testView.setInt8(1, 2147483649);
            if (testView.getInt8(0) || !testView.getInt8(1))
              redefineAll(
                $DataViewPrototype,
                {
                  setInt8: function setInt8(byteOffset, value) {
                    nativeSetInt8.call(this, byteOffset, (value << 24) >> 24);
                  },
                  setUint8: function setUint8(byteOffset, value) {
                    nativeSetInt8.call(this, byteOffset, (value << 24) >> 24);
                  }
                },
                { unsafe: true }
              );
          }

          setToStringTag($ArrayBuffer, ARRAY_BUFFER);
          setToStringTag($DataView, DATA_VIEW);

          module.exports = {
            ArrayBuffer: $ArrayBuffer,
            DataView: $DataView
          };
        },
        {
          '../internals/an-instance': 27,
          '../internals/array-buffer-native': 29,
          '../internals/array-fill': 33,
          '../internals/create-non-enumerable-property': 55,
          '../internals/descriptors': 60,
          '../internals/fails': 68,
          '../internals/global': 76,
          '../internals/ieee754': 82,
          '../internals/internal-state': 87,
          '../internals/object-define-property': 109,
          '../internals/object-get-own-property-names': 112,
          '../internals/object-get-prototype-of': 114,
          '../internals/object-set-prototype-of': 118,
          '../internals/redefine-all': 124,
          '../internals/set-to-string-tag': 134,
          '../internals/to-index': 148,
          '../internals/to-integer': 150,
          '../internals/to-length': 151
        }
      ],
      32: [
        function(_dereq_, module, exports) {
          'use strict';
          var toObject = _dereq_('../internals/to-object');
          var toAbsoluteIndex = _dereq_('../internals/to-absolute-index');
          var toLength = _dereq_('../internals/to-length');

          var min = Math.min;

          // `Array.prototype.copyWithin` method implementation
          // https://tc39.github.io/ecma262/#sec-array.prototype.copywithin
          module.exports =
            [].copyWithin ||
            function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {
              var O = toObject(this);
              var len = toLength(O.length);
              var to = toAbsoluteIndex(target, len);
              var from = toAbsoluteIndex(start, len);
              var end = arguments.length > 2 ? arguments[2] : undefined;
              var count = min(
                (end === undefined ? len : toAbsoluteIndex(end, len)) - from,
                len - to
              );
              var inc = 1;
              if (from < to && to < from + count) {
                inc = -1;
                from += count - 1;
                to += count - 1;
              }
              while (count-- > 0) {
                if (from in O) O[to] = O[from];
                else delete O[to];
                to += inc;
                from += inc;
              }
              return O;
            };
        },
        {
          '../internals/to-absolute-index': 147,
          '../internals/to-length': 151,
          '../internals/to-object': 152
        }
      ],
      33: [
        function(_dereq_, module, exports) {
          'use strict';
          var toObject = _dereq_('../internals/to-object');
          var toAbsoluteIndex = _dereq_('../internals/to-absolute-index');
          var toLength = _dereq_('../internals/to-length');

          // `Array.prototype.fill` method implementation
          // https://tc39.github.io/ecma262/#sec-array.prototype.fill
          module.exports = function fill(value /* , start = 0, end = @length */) {
            var O = toObject(this);
            var length = toLength(O.length);
            var argumentsLength = arguments.length;
            var index = toAbsoluteIndex(
              argumentsLength > 1 ? arguments[1] : undefined,
              length
            );
            var end = argumentsLength > 2 ? arguments[2] : undefined;
            var endPos = end === undefined ? length : toAbsoluteIndex(end, length);
            while (endPos > index) O[index++] = value;
            return O;
          };
        },
        {
          '../internals/to-absolute-index': 147,
          '../internals/to-length': 151,
          '../internals/to-object': 152
        }
      ],
      34: [
        function(_dereq_, module, exports) {
          'use strict';
          var $forEach = _dereq_('../internals/array-iteration').forEach;
          var arrayMethodIsStrict = _dereq_('../internals/array-method-is-strict');
          var arrayMethodUsesToLength = _dereq_('../internals/array-method-uses-to-length');

          var STRICT_METHOD = arrayMethodIsStrict('forEach');
          var USES_TO_LENGTH = arrayMethodUsesToLength('forEach');

          // `Array.prototype.forEach` method implementation
          // https://tc39.github.io/ecma262/#sec-array.prototype.foreach
          module.exports =
            !STRICT_METHOD || !USES_TO_LENGTH
              ? function forEach(callbackfn /* , thisArg */) {
                  return $forEach(
                    this,
                    callbackfn,
                    arguments.length > 1 ? arguments[1] : undefined
                  );
                }
              : [].forEach;
        },
        {
          '../internals/array-iteration': 37,
          '../internals/array-method-is-strict': 40,
          '../internals/array-method-uses-to-length': 41
        }
      ],
      35: [
        function(_dereq_, module, exports) {
          'use strict';
          var bind = _dereq_('../internals/function-bind-context');
          var toObject = _dereq_('../internals/to-object');
          var callWithSafeIterationClosing = _dereq_(
            '../internals/call-with-safe-iteration-closing'
          );
          var isArrayIteratorMethod = _dereq_('../internals/is-array-iterator-method');
          var toLength = _dereq_('../internals/to-length');
          var createProperty = _dereq_('../internals/create-property');
          var getIteratorMethod = _dereq_('../internals/get-iterator-method');

          // `Array.from` method implementation
          // https://tc39.github.io/ecma262/#sec-array.from
          module.exports = function from(
            arrayLike /* , mapfn = undefined, thisArg = undefined */
          ) {
            var O = toObject(arrayLike);
            var C = typeof this == 'function' ? this : Array;
            var argumentsLength = arguments.length;
            var mapfn = argumentsLength > 1 ? arguments[1] : undefined;
            var mapping = mapfn !== undefined;
            var iteratorMethod = getIteratorMethod(O);
            var index = 0;
            var length, result, step, iterator, next, value;
            if (mapping)
              mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2);
            // if the target is not iterable or it's an array with the default iterator - use a simple case
            if (
              iteratorMethod != undefined &&
              !(C == Array && isArrayIteratorMethod(iteratorMethod))
            ) {
              iterator = iteratorMethod.call(O);
              next = iterator.next;
              result = new C();
              for (; !(step = next.call(iterator)).done; index++) {
                value = mapping
                  ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true)
                  : step.value;
                createProperty(result, index, value);
              }
            } else {
              length = toLength(O.length);
              result = new C(length);
              for (; length > index; index++) {
                value = mapping ? mapfn(O[index], index) : O[index];
                createProperty(result, index, value);
              }
            }
            result.length = index;
            return result;
          };
        },
        {
          '../internals/call-with-safe-iteration-closing': 44,
          '../internals/create-property': 57,
          '../internals/function-bind-context': 71,
          '../internals/get-iterator-method': 74,
          '../internals/is-array-iterator-method': 88,
          '../internals/to-length': 151,
          '../internals/to-object': 152
        }
      ],
      36: [
        function(_dereq_, module, exports) {
          var toIndexedObject = _dereq_('../internals/to-indexed-object');
          var toLength = _dereq_('../internals/to-length');
          var toAbsoluteIndex = _dereq_('../internals/to-absolute-index');

          // `Array.prototype.{ indexOf, includes }` methods implementation
          var createMethod = function(IS_INCLUDES) {
            return function($this, el, fromIndex) {
              var O = toIndexedObject($this);
              var length = toLength(O.length);
              var index = toAbsoluteIndex(fromIndex, length);
              var value;
              // Array#includes uses SameValueZero equality algorithm
              // eslint-disable-next-line no-self-compare
              if (IS_INCLUDES && el != el)
                while (length > index) {
                  value = O[index++];
                  // eslint-disable-next-line no-self-compare
                  if (value != value) return true;
                  // Array#indexOf ignores holes, Array#includes - not
                }
              else
                for (; length > index; index++) {
                  if ((IS_INCLUDES || index in O) && O[index] === el)
                    return IS_INCLUDES || index || 0;
                }
              return !IS_INCLUDES && -1;
            };
          };

          module.exports = {
            // `Array.prototype.includes` method
            // https://tc39.github.io/ecma262/#sec-array.prototype.includes
            includes: createMethod(true),
            // `Array.prototype.indexOf` method
            // https://tc39.github.io/ecma262/#sec-array.prototype.indexof
            indexOf: createMethod(false)
          };
        },
        {
          '../internals/to-absolute-index': 147,
          '../internals/to-indexed-object': 149,
          '../internals/to-length': 151
        }
      ],
      37: [
        function(_dereq_, module, exports) {
          var bind = _dereq_('../internals/function-bind-context');
          var IndexedObject = _dereq_('../internals/indexed-object');
          var toObject = _dereq_('../internals/to-object');
          var toLength = _dereq_('../internals/to-length');
          var arraySpeciesCreate = _dereq_('../internals/array-species-create');

          var push = [].push;

          // `Array.prototype.{ forEach, map, filter, some, every, find, findIndex }` methods implementation
          var createMethod = function(TYPE) {
            var IS_MAP = TYPE == 1;
            var IS_FILTER = TYPE == 2;
            var IS_SOME = TYPE == 3;
            var IS_EVERY = TYPE == 4;
            var IS_FIND_INDEX = TYPE == 6;
            var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;
            return function($this, callbackfn, that, specificCreate) {
              var O = toObject($this);
              var self = IndexedObject(O);
              var boundFunction = bind(callbackfn, that, 3);
              var length = toLength(self.length);
              var index = 0;
              var create = specificCreate || arraySpeciesCreate;
              var target = IS_MAP
                ? create($this, length)
                : IS_FILTER ? create($this, 0) : undefined;
              var value, result;
              for (; length > index; index++)
                if (NO_HOLES || index in self) {
                  value = self[index];
                  result = boundFunction(value, index, O);
                  if (TYPE) {
                    if (IS_MAP) target[index] = result;
                    else if (result)
                      // map
                      switch (TYPE) {
                        case 3:
                          return true; // some
                        case 5:
                          return value; // find
                        case 6:
                          return index; // findIndex
                        case 2:
                          push.call(target, value); // filter
                      }
                    else if (IS_EVERY) return false; // every
                  }
                }
              return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;
            };
          };

          module.exports = {
            // `Array.prototype.forEach` method
            // https://tc39.github.io/ecma262/#sec-array.prototype.foreach
            forEach: createMethod(0),
            // `Array.prototype.map` method
            // https://tc39.github.io/ecma262/#sec-array.prototype.map
            map: createMethod(1),
            // `Array.prototype.filter` method
            // https://tc39.github.io/ecma262/#sec-array.prototype.filter
            filter: createMethod(2),
            // `Array.prototype.some` method
            // https://tc39.github.io/ecma262/#sec-array.prototype.some
            some: createMethod(3),
            // `Array.prototype.every` method
            // https://tc39.github.io/ecma262/#sec-array.prototype.every
            every: createMethod(4),
            // `Array.prototype.find` method
            // https://tc39.github.io/ecma262/#sec-array.prototype.find
            find: createMethod(5),
            // `Array.prototype.findIndex` method
            // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex
            findIndex: createMethod(6)
          };
        },
        {
          '../internals/array-species-create': 43,
          '../internals/function-bind-context': 71,
          '../internals/indexed-object': 83,
          '../internals/to-length': 151,
          '../internals/to-object': 152
        }
      ],
      38: [
        function(_dereq_, module, exports) {
          'use strict';
          var toIndexedObject = _dereq_('../internals/to-indexed-object');
          var toInteger = _dereq_('../internals/to-integer');
          var toLength = _dereq_('../internals/to-length');
          var arrayMethodIsStrict = _dereq_('../internals/array-method-is-strict');
          var arrayMethodUsesToLength = _dereq_('../internals/array-method-uses-to-length');

          var min = Math.min;
          var nativeLastIndexOf = [].lastIndexOf;
          var NEGATIVE_ZERO = !!nativeLastIndexOf && 1 / [1].lastIndexOf(1, -0) < 0;
          var STRICT_METHOD = arrayMethodIsStrict('lastIndexOf');
          // For preventing possible almost infinite loop in non-standard implementations, test the forward version of the method
          var USES_TO_LENGTH = arrayMethodUsesToLength('indexOf', {
            ACCESSORS: true,
            1: 0
          });
          var FORCED = NEGATIVE_ZERO || !STRICT_METHOD || !USES_TO_LENGTH;

          // `Array.prototype.lastIndexOf` method implementation
          // https://tc39.github.io/ecma262/#sec-array.prototype.lastindexof
          module.exports = FORCED
            ? function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {
                // convert -0 to +0
                if (NEGATIVE_ZERO) return nativeLastIndexOf.apply(this, arguments) || 0;
                var O = toIndexedObject(this);
                var length = toLength(O.length);
                var index = length - 1;
                if (arguments.length > 1) index = min(index, toInteger(arguments[1]));
                if (index < 0) index = length + index;
                for (; index >= 0; index--)
                  if (index in O && O[index] === searchElement) return index || 0;
                return -1;
              }
            : nativeLastIndexOf;
        },
        {
          '../internals/array-method-is-strict': 40,
          '../internals/array-method-uses-to-length': 41,
          '../internals/to-indexed-object': 149,
          '../internals/to-integer': 150,
          '../internals/to-length': 151
        }
      ],
      39: [
        function(_dereq_, module, exports) {
          var fails = _dereq_('../internals/fails');
          var wellKnownSymbol = _dereq_('../internals/well-known-symbol');
          var V8_VERSION = _dereq_('../internals/engine-v8-version');

          var SPECIES = wellKnownSymbol('species');

          module.exports = function(METHOD_NAME) {
            // We can't use this feature detection in V8 since it causes
            // deoptimization and serious performance degradation
            // https://github.com/zloirock/core-js/issues/677
            return (
              V8_VERSION >= 51 ||
              !fails(function() {
                var array = [];
                var constructor = (array.constructor = {});
                constructor[SPECIES] = function() {
                  return { foo: 1 };
                };
                return array[METHOD_NAME](Boolean).foo !== 1;
              })
            );
          };
        },
        {
          '../internals/engine-v8-version': 65,
          '../internals/fails': 68,
          '../internals/well-known-symbol': 163
        }
      ],
      40: [
        function(_dereq_, module, exports) {
          'use strict';
          var fails = _dereq_('../internals/fails');

          module.exports = function(METHOD_NAME, argument) {
            var method = [][METHOD_NAME];
            return (
              !!method &&
              fails(function() {
                // eslint-disable-next-line no-useless-call,no-throw-literal
                method.call(
                  null,
                  argument ||
                    function() {
                      throw 1;
                    },
                  1
                );
              })
            );
          };
        },
        { '../internals/fails': 68 }
      ],
      41: [
        function(_dereq_, module, exports) {
          var DESCRIPTORS = _dereq_('../internals/descriptors');
          var fails = _dereq_('../internals/fails');
          var has = _dereq_('../internals/has');

          var defineProperty = Object.defineProperty;
          var cache = {};

          var thrower = function(it) {
            throw it;
          };

          module.exports = function(METHOD_NAME, options) {
            if (has(cache, METHOD_NAME)) return cache[METHOD_NAME];
            if (!options) options = {};
            var method = [][METHOD_NAME];
            var ACCESSORS = has(options, 'ACCESSORS') ? options.ACCESSORS : false;
            var argument0 = has(options, 0) ? options[0] : thrower;
            var argument1 = has(options, 1) ? options[1] : undefined;

            return (cache[METHOD_NAME] =
              !!method &&
              !fails(function() {
                if (ACCESSORS && !DESCRIPTORS) return true;
                var O = { length: -1 };

                if (ACCESSORS) defineProperty(O, 1, { enumerable: true, get: thrower });
                else O[1] = 1;

                method.call(O, argument0, argument1);
              }));
          };
        },
        { '../internals/descriptors': 60, '../internals/fails': 68, '../internals/has': 77 }
      ],
      42: [
        function(_dereq_, module, exports) {
          var aFunction = _dereq_('../internals/a-function');
          var toObject = _dereq_('../internals/to-object');
          var IndexedObject = _dereq_('../internals/indexed-object');
          var toLength = _dereq_('../internals/to-length');

          // `Array.prototype.{ reduce, reduceRight }` methods implementation
          var createMethod = function(IS_RIGHT) {
            return function(that, callbackfn, argumentsLength, memo) {
              aFunction(callbackfn);
              var O = toObject(that);
              var self = IndexedObject(O);
              var length = toLength(O.length);
              var index = IS_RIGHT ? length - 1 : 0;
              var i = IS_RIGHT ? -1 : 1;
              if (argumentsLength < 2)
                while (true) {
                  if (index in self) {
                    memo = self[index];
                    index += i;
                    break;
                  }
                  index += i;
                  if (IS_RIGHT ? index < 0 : length <= index) {
                    throw TypeError('Reduce of empty array with no initial value');
                  }
                }
              for (; IS_RIGHT ? index >= 0 : length > index; index += i)
                if (index in self) {
                  memo = callbackfn(memo, self[index], index, O);
                }
              return memo;
            };
          };

          module.exports = {
            // `Array.prototype.reduce` method
            // https://tc39.github.io/ecma262/#sec-array.prototype.reduce
            left: createMethod(false),
            // `Array.prototype.reduceRight` method
            // https://tc39.github.io/ecma262/#sec-array.prototype.reduceright
            right: createMethod(true)
          };
        },
        {
          '../internals/a-function': 23,
          '../internals/indexed-object': 83,
          '../internals/to-length': 151,
          '../internals/to-object': 152
        }
      ],
      43: [
        function(_dereq_, module, exports) {
          var isObject = _dereq_('../internals/is-object');
          var isArray = _dereq_('../internals/is-array');
          var wellKnownSymbol = _dereq_('../internals/well-known-symbol');

          var SPECIES = wellKnownSymbol('species');

          // `ArraySpeciesCreate` abstract operation
          // https://tc39.github.io/ecma262/#sec-arrayspeciescreate
          module.exports = function(originalArray, length) {
            var C;
            if (isArray(originalArray)) {
              C = originalArray.constructor;
              // cross-realm fallback
              if (typeof C == 'function' && (C === Array || isArray(C.prototype)))
                C = undefined;
              else if (isObject(C)) {
                C = C[SPECIES];
                if (C === null) C = undefined;
              }
            }
            return new (C === undefined ? Array : C)(length === 0 ? 0 : length);
          };
        },
        {
          '../internals/is-array': 89,
          '../internals/is-object': 91,
          '../internals/well-known-symbol': 163
        }
      ],
      44: [
        function(_dereq_, module, exports) {
          var anObject = _dereq_('../internals/an-object');

          // call something on iterator step with safe closing on error
          module.exports = function(iterator, fn, value, ENTRIES) {
            try {
              return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);
              // 7.4.6 IteratorClose(iterator, completion)
            } catch (error) {
              var returnMethod = iterator['return'];
              if (returnMethod !== undefined) anObject(returnMethod.call(iterator));
              throw error;
            }
          };
        },
        { '../internals/an-object': 28 }
      ],
      45: [
        function(_dereq_, module, exports) {
          var wellKnownSymbol = _dereq_('../internals/well-known-symbol');

          var ITERATOR = wellKnownSymbol('iterator');
          var SAFE_CLOSING = false;

          try {
            var called = 0;
            var iteratorWithReturn = {
              next: function() {
                return { done: !!called++ };
              },
              return: function() {
                SAFE_CLOSING = true;
              }
            };
            iteratorWithReturn[ITERATOR] = function() {
              return this;
            };
            // eslint-disable-next-line no-throw-literal
            Array.from(iteratorWithReturn, function() {
              throw 2;
            });
          } catch (error) {
            /* empty */
          }

          module.exports = function(exec, SKIP_CLOSING) {
            if (!SKIP_CLOSING && !SAFE_CLOSING) return false;
            var ITERATION_SUPPORT = false;
            try {
              var object = {};
              object[ITERATOR] = function() {
                return {
                  next: function() {
                    return { done: (ITERATION_SUPPORT = true) };
                  }
                };
              };
              exec(object);
            } catch (error) {
              /* empty */
            }
            return ITERATION_SUPPORT;
          };
        },
        { '../internals/well-known-symbol': 163 }
      ],
      46: [
        function(_dereq_, module, exports) {
          var toString = {}.toString;

          module.exports = function(it) {
            return toString.call(it).slice(8, -1);
          };
        },
        {}
      ],
      47: [
        function(_dereq_, module, exports) {
          var TO_STRING_TAG_SUPPORT = _dereq_('../internals/to-string-tag-support');
          var classofRaw = _dereq_('../internals/classof-raw');
          var wellKnownSymbol = _dereq_('../internals/well-known-symbol');

          var TO_STRING_TAG = wellKnownSymbol('toStringTag');
          // ES3 wrong here
          var CORRECT_ARGUMENTS =
            classofRaw(
              (function() {
                return arguments;
              })()
            ) == 'Arguments';

          // fallback for IE11 Script Access Denied error
          var tryGet = function(it, key) {
            try {
              return it[key];
            } catch (error) {
              /* empty */
            }
          };

          // getting tag from ES6+ `Object.prototype.toString`
          module.exports = TO_STRING_TAG_SUPPORT
            ? classofRaw
            : function(it) {
                var O, tag, result;
                return it === undefined
                  ? 'Undefined'
                  : it === null
                    ? 'Null'
                    : // @@toStringTag case
                      typeof (tag = tryGet((O = Object(it)), TO_STRING_TAG)) == 'string'
                      ? tag
                      : // builtinTag case
                        CORRECT_ARGUMENTS
                        ? classofRaw(O)
                        : // ES3 arguments fallback
                          (result = classofRaw(O)) == 'Object' &&
                          typeof O.callee == 'function'
                          ? 'Arguments'
                          : result;
              };
        },
        {
          '../internals/classof-raw': 46,
          '../internals/to-string-tag-support': 156,
          '../internals/well-known-symbol': 163
        }
      ],
      48: [
        function(_dereq_, module, exports) {
          'use strict';
          var defineProperty = _dereq_('../internals/object-define-property').f;
          var create = _dereq_('../internals/object-create');
          var redefineAll = _dereq_('../internals/redefine-all');
          var bind = _dereq_('../internals/function-bind-context');
          var anInstance = _dereq_('../internals/an-instance');
          var iterate = _dereq_('../internals/iterate');
          var defineIterator = _dereq_('../internals/define-iterator');
          var setSpecies = _dereq_('../internals/set-species');
          var DESCRIPTORS = _dereq_('../internals/descriptors');
          var fastKey = _dereq_('../internals/internal-metadata').fastKey;
          var InternalStateModule = _dereq_('../internals/internal-state');

          var setInternalState = InternalStateModule.set;
          var internalStateGetterFor = InternalStateModule.getterFor;

          module.exports = {
            getConstructor: function(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {
              var C = wrapper(function(that, iterable) {
                anInstance(that, C, CONSTRUCTOR_NAME);
                setInternalState(that, {
                  type: CONSTRUCTOR_NAME,
                  index: create(null),
                  first: undefined,
                  last: undefined,
                  size: 0
                });
                if (!DESCRIPTORS) that.size = 0;
                if (iterable != undefined) iterate(iterable, that[ADDER], that, IS_MAP);
              });

              var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);

              var define = function(that, key, value) {
                var state = getInternalState(that);
                var entry = getEntry(that, key);
                var previous, index;
                // change existing entry
                if (entry) {
                  entry.value = value;
                  // create new entry
                } else {
                  state.last = entry = {
                    index: (index = fastKey(key, true)),
                    key: key,
                    value: value,
                    previous: (previous = state.last),
                    next: undefined,
                    removed: false
                  };
                  if (!state.first) state.first = entry;
                  if (previous) previous.next = entry;
                  if (DESCRIPTORS) state.size++;
                  else that.size++;
                  // add to index
                  if (index !== 'F') state.index[index] = entry;
                }
                return that;
              };

              var getEntry = function(that, key) {
                var state = getInternalState(that);
                // fast case
                var index = fastKey(key);
                var entry;
                if (index !== 'F') return state.index[index];
                // frozen object case
                for (entry = state.first; entry; entry = entry.next) {
                  if (entry.key == key) return entry;
                }
              };

              redefineAll(C.prototype, {
                // 23.1.3.1 Map.prototype.clear()
                // 23.2.3.2 Set.prototype.clear()
                clear: function clear() {
                  var that = this;
                  var state = getInternalState(that);
                  var data = state.index;
                  var entry = state.first;
                  while (entry) {
                    entry.removed = true;
                    if (entry.previous) entry.previous = entry.previous.next = undefined;
                    delete data[entry.index];
                    entry = entry.next;
                  }
                  state.first = state.last = undefined;
                  if (DESCRIPTORS) state.size = 0;
                  else that.size = 0;
                },
                // 23.1.3.3 Map.prototype.delete(key)
                // 23.2.3.4 Set.prototype.delete(value)
                delete: function(key) {
                  var that = this;
                  var state = getInternalState(that);
                  var entry = getEntry(that, key);
                  if (entry) {
                    var next = entry.next;
                    var prev = entry.previous;
                    delete state.index[entry.index];
                    entry.removed = true;
                    if (prev) prev.next = next;
                    if (next) next.previous = prev;
                    if (state.first == entry) state.first = next;
                    if (state.last == entry) state.last = prev;
                    if (DESCRIPTORS) state.size--;
                    else that.size--;
                  }
                  return !!entry;
                },
                // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)
                // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)
                forEach: function forEach(callbackfn /* , that = undefined */) {
                  var state = getInternalState(this);
                  var boundFunction = bind(
                    callbackfn,
                    arguments.length > 1 ? arguments[1] : undefined,
                    3
                  );
                  var entry;
                  while ((entry = entry ? entry.next : state.first)) {
                    boundFunction(entry.value, entry.key, this);
                    // revert to the last existing entry
                    while (entry && entry.removed) entry = entry.previous;
                  }
                },
                // 23.1.3.7 Map.prototype.has(key)
                // 23.2.3.7 Set.prototype.has(value)
                has: function has(key) {
                  return !!getEntry(this, key);
                }
              });

              redefineAll(
                C.prototype,
                IS_MAP
                  ? {
                      // 23.1.3.6 Map.prototype.get(key)
                      get: function get(key) {
                        var entry = getEntry(this, key);
                        return entry && entry.value;
                      },
                      // 23.1.3.9 Map.prototype.set(key, value)
                      set: function set(key, value) {
                        return define(this, key === 0 ? 0 : key, value);
                      }
                    }
                  : {
                      // 23.2.3.1 Set.prototype.add(value)
                      add: function add(value) {
                        return define(this, (value = value === 0 ? 0 : value), value);
                      }
                    }
              );
              if (DESCRIPTORS)
                defineProperty(C.prototype, 'size', {
                  get: function() {
                    return getInternalState(this).size;
                  }
                });
              return C;
            },
            setStrong: function(C, CONSTRUCTOR_NAME, IS_MAP) {
              var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';
              var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);
              var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);
              // add .keys, .values, .entries, [@@iterator]
              // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11
              defineIterator(
                C,
                CONSTRUCTOR_NAME,
                function(iterated, kind) {
                  setInternalState(this, {
                    type: ITERATOR_NAME,
                    target: iterated,
                    state: getInternalCollectionState(iterated),
                    kind: kind,
                    last: undefined
                  });
                },
                function() {
                  var state = getInternalIteratorState(this);
                  var kind = state.kind;
                  var entry = state.last;
                  // revert to the last existing entry
                  while (entry && entry.removed) entry = entry.previous;
                  // get next entry
                  if (
                    !state.target ||
                    !(state.last = entry = entry ? entry.next : state.state.first)
                  ) {
                    // or finish the iteration
                    state.target = undefined;
                    return { value: undefined, done: true };
                  }
                  // return step by kind
                  if (kind == 'keys') return { value: entry.key, done: false };
                  if (kind == 'values') return { value: entry.value, done: false };
                  return { value: [entry.key, entry.value], done: false };
                },
                IS_MAP ? 'entries' : 'values',
                !IS_MAP,
                true
              );

              // add [@@species], 23.1.2.2, 23.2.2.2
              setSpecies(CONSTRUCTOR_NAME);
            }
          };
        },
        {
          '../internals/an-instance': 27,
          '../internals/define-iterator': 58,
          '../internals/descriptors': 60,
          '../internals/function-bind-context': 71,
          '../internals/internal-metadata': 86,
          '../internals/internal-state': 87,
          '../internals/iterate': 94,
          '../internals/object-create': 107,
          '../internals/object-define-property': 109,
          '../internals/redefine-all': 124,
          '../internals/set-species': 133
        }
      ],
      49: [
        function(_dereq_, module, exports) {
          'use strict';
          var $ = _dereq_('../internals/export');
          var global = _dereq_('../internals/global');
          var isForced = _dereq_('../internals/is-forced');
          var redefine = _dereq_('../internals/redefine');
          var InternalMetadataModule = _dereq_('../internals/internal-metadata');
          var iterate = _dereq_('../internals/iterate');
          var anInstance = _dereq_('../internals/an-instance');
          var isObject = _dereq_('../internals/is-object');
          var fails = _dereq_('../internals/fails');
          var checkCorrectnessOfIteration = _dereq_(
            '../internals/check-correctness-of-iteration'
          );
          var setToStringTag = _dereq_('../internals/set-to-string-tag');
          var inheritIfRequired = _dereq_('../internals/inherit-if-required');

          module.exports = function(CONSTRUCTOR_NAME, wrapper, common) {
            var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;
            var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;
            var ADDER = IS_MAP ? 'set' : 'add';
            var NativeConstructor = global[CONSTRUCTOR_NAME];
            var NativePrototype = NativeConstructor && NativeConstructor.prototype;
            var Constructor = NativeConstructor;
            var exported = {};

            var fixMethod = function(KEY) {
              var nativeMethod = NativePrototype[KEY];
              redefine(
                NativePrototype,
                KEY,
                KEY == 'add'
                  ? function add(value) {
                      nativeMethod.call(this, value === 0 ? 0 : value);
                      return this;
                    }
                  : KEY == 'delete'
                    ? function(key) {
                        return IS_WEAK && !isObject(key)
                          ? false
                          : nativeMethod.call(this, key === 0 ? 0 : key);
                      }
                    : KEY == 'get'
                      ? function get(key) {
                          return IS_WEAK && !isObject(key)
                            ? undefined
                            : nativeMethod.call(this, key === 0 ? 0 : key);
                        }
                      : KEY == 'has'
                        ? function has(key) {
                            return IS_WEAK && !isObject(key)
                              ? false
                              : nativeMethod.call(this, key === 0 ? 0 : key);
                          }
                        : function set(key, value) {
                            nativeMethod.call(this, key === 0 ? 0 : key, value);
                            return this;
                          }
              );
            };

            // eslint-disable-next-line max-len
            if (
              isForced(
                CONSTRUCTOR_NAME,
                typeof NativeConstructor != 'function' ||
                  !(
                    IS_WEAK ||
                    (NativePrototype.forEach &&
                      !fails(function() {
                        new NativeConstructor().entries().next();
                      }))
                  )
              )
            ) {
              // create collection constructor
              Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);
              InternalMetadataModule.REQUIRED = true;
            } else if (isForced(CONSTRUCTOR_NAME, true)) {
              var instance = new Constructor();
              // early implementations not supports chaining
              var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;
              // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false
              var THROWS_ON_PRIMITIVES = fails(function() {
                instance.has(1);
              });
              // most early implementations doesn't supports iterables, most modern - not close it correctly
              // eslint-disable-next-line no-new
              var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function(iterable) {
                new NativeConstructor(iterable);
              });
              // for early implementations -0 and +0 not the same
              var BUGGY_ZERO =
                !IS_WEAK &&
                fails(function() {
                  // V8 ~ Chromium 42- fails only with 5+ elements
                  var $instance = new NativeConstructor();
                  var index = 5;
                  while (index--) $instance[ADDER](index, index);
                  return !$instance.has(-0);
                });

              if (!ACCEPT_ITERABLES) {
                Constructor = wrapper(function(dummy, iterable) {
                  anInstance(dummy, Constructor, CONSTRUCTOR_NAME);
                  var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);
                  if (iterable != undefined) iterate(iterable, that[ADDER], that, IS_MAP);
                  return that;
                });
                Constructor.prototype = NativePrototype;
                NativePrototype.constructor = Constructor;
              }

              if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {
                fixMethod('delete');
                fixMethod('has');
                IS_MAP && fixMethod('get');
              }

              if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);

              // weak collections should not contains .clear method
              if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;
            }

            exported[CONSTRUCTOR_NAME] = Constructor;
            $({ global: true, forced: Constructor != NativeConstructor }, exported);

            setToStringTag(Constructor, CONSTRUCTOR_NAME);

            if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);

            return Constructor;
          };
        },
        {
          '../internals/an-instance': 27,
          '../internals/check-correctness-of-iteration': 45,
          '../internals/export': 67,
          '../internals/fails': 68,
          '../internals/global': 76,
          '../internals/inherit-if-required': 84,
          '../internals/internal-metadata': 86,
          '../internals/is-forced': 90,
          '../internals/is-object': 91,
          '../internals/iterate': 94,
          '../internals/redefine': 125,
          '../internals/set-to-string-tag': 134
        }
      ],
      50: [
        function(_dereq_, module, exports) {
          var has = _dereq_('../internals/has');
          var ownKeys = _dereq_('../internals/own-keys');
          var getOwnPropertyDescriptorModule = _dereq_(
            '../internals/object-get-own-property-descriptor'
          );
          var definePropertyModule = _dereq_('../internals/object-define-property');

          module.exports = function(target, source) {
            var keys = ownKeys(source);
            var defineProperty = definePropertyModule.f;
            var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
            for (var i = 0; i < keys.length; i++) {
              var key = keys[i];
              if (!has(target, key))
                defineProperty(target, key, getOwnPropertyDescriptor(source, key));
            }
          };
        },
        {
          '../internals/has': 77,
          '../internals/object-define-property': 109,
          '../internals/object-get-own-property-descriptor': 110,
          '../internals/own-keys': 120
        }
      ],
      51: [
        function(_dereq_, module, exports) {
          var wellKnownSymbol = _dereq_('../internals/well-known-symbol');

          var MATCH = wellKnownSymbol('match');

          module.exports = function(METHOD_NAME) {
            var regexp = /./;
            try {
              '/./'[METHOD_NAME](regexp);
            } catch (e) {
              try {
                regexp[MATCH] = false;
                return '/./'[METHOD_NAME](regexp);
              } catch (f) {
                /* empty */
              }
            }
            return false;
          };
        },
        { '../internals/well-known-symbol': 163 }
      ],
      52: [
        function(_dereq_, module, exports) {
          var fails = _dereq_('../internals/fails');

          module.exports = !fails(function() {
            function F() {
              /* empty */
            }
            F.prototype.constructor = null;
            return Object.getPrototypeOf(new F()) !== F.prototype;
          });
        },
        { '../internals/fails': 68 }
      ],
      53: [
        function(_dereq_, module, exports) {
          var requireObjectCoercible = _dereq_('../internals/require-object-coercible');

          var quot = /"/g;

          // B.2.3.2.1 CreateHTML(string, tag, attribute, value)
          // https://tc39.github.io/ecma262/#sec-createhtml
          module.exports = function(string, tag, attribute, value) {
            var S = String(requireObjectCoercible(string));
            var p1 = '<' + tag;
            if (attribute !== '')
              p1 += ' ' + attribute + '="' + String(value).replace(quot, '&quot;') + '"';
            return p1 + '>' + S + '</' + tag + '>';
          };
        },
        { '../internals/require-object-coercible': 130 }
      ],
      54: [
        function(_dereq_, module, exports) {
          'use strict';
          var IteratorPrototype = _dereq_('../internals/iterators-core').IteratorPrototype;
          var create = _dereq_('../internals/object-create');
          var createPropertyDescriptor = _dereq_('../internals/create-property-descriptor');
          var setToStringTag = _dereq_('../internals/set-to-string-tag');
          var Iterators = _dereq_('../internals/iterators');

          var returnThis = function() {
            return this;
          };

          module.exports = function(IteratorConstructor, NAME, next) {
            var TO_STRING_TAG = NAME + ' Iterator';
            IteratorConstructor.prototype = create(IteratorPrototype, {
              next: createPropertyDescriptor(1, next)
            });
            setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);
            Iterators[TO_STRING_TAG] = returnThis;
            return IteratorConstructor;
          };
        },
        {
          '../internals/create-property-descriptor': 56,
          '../internals/iterators': 96,
          '../internals/iterators-core': 95,
          '../internals/object-create': 107,
          '../internals/set-to-string-tag': 134
        }
      ],
      55: [
        function(_dereq_, module, exports) {
          var DESCRIPTORS = _dereq_('../internals/descriptors');
          var definePropertyModule = _dereq_('../internals/object-define-property');
          var createPropertyDescriptor = _dereq_('../internals/create-property-descriptor');

          module.exports = DESCRIPTORS
            ? function(object, key, value) {
                return definePropertyModule.f(
                  object,
                  key,
                  createPropertyDescriptor(1, value)
                );
              }
            : function(object, key, value) {
                object[key] = value;
                return object;
              };
        },
        {
          '../internals/create-property-descriptor': 56,
          '../internals/descriptors': 60,
          '../internals/object-define-property': 109
        }
      ],
      56: [
        function(_dereq_, module, exports) {
          module.exports = function(bitmap, value) {
            return {
              enumerable: !(bitmap & 1),
              configurable: !(bitmap & 2),
              writable: !(bitmap & 4),
              value: value
            };
          };
        },
        {}
      ],
      57: [
        function(_dereq_, module, exports) {
          'use strict';
          var toPrimitive = _dereq_('../internals/to-primitive');
          var definePropertyModule = _dereq_('../internals/object-define-property');
          var createPropertyDescriptor = _dereq_('../internals/create-property-descriptor');

          module.exports = function(object, key, value) {
            var propertyKey = toPrimitive(key);
            if (propertyKey in object)
              definePropertyModule.f(
                object,
                propertyKey,
                createPropertyDescriptor(0, value)
              );
            else object[propertyKey] = value;
          };
        },
        {
          '../internals/create-property-descriptor': 56,
          '../internals/object-define-property': 109,
          '../internals/to-primitive': 155
        }
      ],
      58: [
        function(_dereq_, module, exports) {
          'use strict';
          var $ = _dereq_('../internals/export');
          var createIteratorConstructor = _dereq_(
            '../internals/create-iterator-constructor'
          );
          var getPrototypeOf = _dereq_('../internals/object-get-prototype-of');
          var setPrototypeOf = _dereq_('../internals/object-set-prototype-of');
          var setToStringTag = _dereq_('../internals/set-to-string-tag');
          var createNonEnumerableProperty = _dereq_(
            '../internals/create-non-enumerable-property'
          );
          var redefine = _dereq_('../internals/redefine');
          var wellKnownSymbol = _dereq_('../internals/well-known-symbol');
          var IS_PURE = _dereq_('../internals/is-pure');
          var Iterators = _dereq_('../internals/iterators');
          var IteratorsCore = _dereq_('../internals/iterators-core');

          var IteratorPrototype = IteratorsCore.IteratorPrototype;
          var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;
          var ITERATOR = wellKnownSymbol('iterator');
          var KEYS = 'keys';
          var VALUES = 'values';
          var ENTRIES = 'entries';

          var returnThis = function() {
            return this;
          };

          module.exports = function(
            Iterable,
            NAME,
            IteratorConstructor,
            next,
            DEFAULT,
            IS_SET,
            FORCED
          ) {
            createIteratorConstructor(IteratorConstructor, NAME, next);

            var getIterationMethod = function(KIND) {
              if (KIND === DEFAULT && defaultIterator) return defaultIterator;
              if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype)
                return IterablePrototype[KIND];
              switch (KIND) {
                case KEYS:
                  return function keys() {
                    return new IteratorConstructor(this, KIND);
                  };
                case VALUES:
                  return function values() {
                    return new IteratorConstructor(this, KIND);
                  };
                case ENTRIES:
                  return function entries() {
                    return new IteratorConstructor(this, KIND);
                  };
              }
              return function() {
                return new IteratorConstructor(this);
              };
            };

            var TO_STRING_TAG = NAME + ' Iterator';
            var INCORRECT_VALUES_NAME = false;
            var IterablePrototype = Iterable.prototype;
            var nativeIterator =
              IterablePrototype[ITERATOR] ||
              IterablePrototype['@@iterator'] ||
              (DEFAULT && IterablePrototype[DEFAULT]);
            var defaultIterator =
              (!BUGGY_SAFARI_ITERATORS && nativeIterator) || getIterationMethod(DEFAULT);
            var anyNativeIterator =
              NAME == 'Array'
                ? IterablePrototype.entries || nativeIterator
                : nativeIterator;
            var CurrentIteratorPrototype, methods, KEY;

            // fix native
            if (anyNativeIterator) {
              CurrentIteratorPrototype = getPrototypeOf(
                anyNativeIterator.call(new Iterable())
              );
              if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {
                if (
                  !IS_PURE &&
                  getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype
                ) {
                  if (setPrototypeOf) {
                    setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);
                  } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {
                    createNonEnumerableProperty(
                      CurrentIteratorPrototype,
                      ITERATOR,
                      returnThis
                    );
                  }
                }
                // Set @@toStringTag to native iterators
                setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);
                if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;
              }
            }

            // fix Array#{values, @@iterator}.name in V8 / FF
            if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {
              INCORRECT_VALUES_NAME = true;
              defaultIterator = function values() {
                return nativeIterator.call(this);
              };
            }

            // define iterator
            if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {
              createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator);
            }
            Iterators[NAME] = defaultIterator;

            // export additional methods
            if (DEFAULT) {
              methods = {
                values: getIterationMethod(VALUES),
                keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),
                entries: getIterationMethod(ENTRIES)
              };
              if (FORCED)
                for (KEY in methods) {
                  if (
                    BUGGY_SAFARI_ITERATORS ||
                    INCORRECT_VALUES_NAME ||
                    !(KEY in IterablePrototype)
                  ) {
                    redefine(IterablePrototype, KEY, methods[KEY]);
                  }
                }
              else
                $(
                  {
                    target: NAME,
                    proto: true,
                    forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME
                  },
                  methods
                );
            }

            return methods;
          };
        },
        {
          '../internals/create-iterator-constructor': 54,
          '../internals/create-non-enumerable-property': 55,
          '../internals/export': 67,
          '../internals/is-pure': 92,
          '../internals/iterators': 96,
          '../internals/iterators-core': 95,
          '../internals/object-get-prototype-of': 114,
          '../internals/object-set-prototype-of': 118,
          '../internals/redefine': 125,
          '../internals/set-to-string-tag': 134,
          '../internals/well-known-symbol': 163
        }
      ],
      59: [
        function(_dereq_, module, exports) {
          var path = _dereq_('../internals/path');
          var has = _dereq_('../internals/has');
          var wrappedWellKnownSymbolModule = _dereq_(
            '../internals/well-known-symbol-wrapped'
          );
          var defineProperty = _dereq_('../internals/object-define-property').f;

          module.exports = function(NAME) {
            var Symbol = path.Symbol || (path.Symbol = {});
            if (!has(Symbol, NAME))
              defineProperty(Symbol, NAME, {
                value: wrappedWellKnownSymbolModule.f(NAME)
              });
          };
        },
        {
          '../internals/has': 77,
          '../internals/object-define-property': 109,
          '../internals/path': 121,
          '../internals/well-known-symbol-wrapped': 162
        }
      ],
      60: [
        function(_dereq_, module, exports) {
          var fails = _dereq_('../internals/fails');

          // Thank's IE8 for his funny defineProperty
          module.exports = !fails(function() {
            return (
              Object.defineProperty({}, 1, {
                get: function() {
                  return 7;
                }
              })[1] != 7
            );
          });
        },
        { '../internals/fails': 68 }
      ],
      61: [
        function(_dereq_, module, exports) {
          var global = _dereq_('../internals/global');
          var isObject = _dereq_('../internals/is-object');

          var document = global.document;
          // typeof document.createElement is 'object' in old IE
          var EXISTS = isObject(document) && isObject(document.createElement);

          module.exports = function(it) {
            return EXISTS ? document.createElement(it) : {};
          };
        },
        { '../internals/global': 76, '../internals/is-object': 91 }
      ],
      62: [
        function(_dereq_, module, exports) {
          // iterable DOM collections
          // flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods
          module.exports = {
            CSSRuleList: 0,
            CSSStyleDeclaration: 0,
            CSSValueList: 0,
            ClientRectList: 0,
            DOMRectList: 0,
            DOMStringList: 0,
            DOMTokenList: 1,
            DataTransferItemList: 0,
            FileList: 0,
            HTMLAllCollection: 0,
            HTMLCollection: 0,
            HTMLFormElement: 0,
            HTMLSelectElement: 0,
            MediaList: 0,
            MimeTypeArray: 0,
            NamedNodeMap: 0,
            NodeList: 1,
            PaintRequestList: 0,
            Plugin: 0,
            PluginArray: 0,
            SVGLengthList: 0,
            SVGNumberList: 0,
            SVGPathSegList: 0,
            SVGPointList: 0,
            SVGStringList: 0,
            SVGTransformList: 0,
            SourceBufferList: 0,
            StyleSheetList: 0,
            TextTrackCueList: 0,
            TextTrackList: 0,
            TouchList: 0
          };
        },
        {}
      ],
      63: [
        function(_dereq_, module, exports) {
          var userAgent = _dereq_('../internals/engine-user-agent');

          module.exports = /(iphone|ipod|ipad).*applewebkit/i.test(userAgent);
        },
        { '../internals/engine-user-agent': 64 }
      ],
      64: [
        function(_dereq_, module, exports) {
          var getBuiltIn = _dereq_('../internals/get-built-in');

          module.exports = getBuiltIn('navigator', 'userAgent') || '';
        },
        { '../internals/get-built-in': 73 }
      ],
      65: [
        function(_dereq_, module, exports) {
          var global = _dereq_('../internals/global');
          var userAgent = _dereq_('../internals/engine-user-agent');

          var process = global.process;
          var versions = process && process.versions;
          var v8 = versions && versions.v8;
          var match, version;

          if (v8) {
            match = v8.split('.');
            version = match[0] + match[1];
          } else if (userAgent) {
            match = userAgent.match(/Edge\/(\d+)/);
            if (!match || match[1] >= 74) {
              match = userAgent.match(/Chrome\/(\d+)/);
              if (match) version = match[1];
            }
          }

          module.exports = version && +version;
        },
        { '../internals/engine-user-agent': 64, '../internals/global': 76 }
      ],
      66: [
        function(_dereq_, module, exports) {
          // IE8- don't enum bug keys
          module.exports = [
            'constructor',
            'hasOwnProperty',
            'isPrototypeOf',
            'propertyIsEnumerable',
            'toLocaleString',
            'toString',
            'valueOf'
          ];
        },
        {}
      ],
      67: [
        function(_dereq_, module, exports) {
          var global = _dereq_('../internals/global');
          var getOwnPropertyDescriptor = _dereq_(
            '../internals/object-get-own-property-descriptor'
          ).f;
          var createNonEnumerableProperty = _dereq_(
            '../internals/create-non-enumerable-property'
          );
          var redefine = _dereq_('../internals/redefine');
          var setGlobal = _dereq_('../internals/set-global');
          var copyConstructorProperties = _dereq_(
            '../internals/copy-constructor-properties'
          );
          var isForced = _dereq_('../internals/is-forced');

          /*
  options.target      - name of the target object
  options.global      - target is the global object
  options.stat        - export as static methods of target
  options.proto       - export as prototype methods of target
  options.real        - real prototype method for the `pure` version
  options.forced      - export even if the native feature is available
  options.bind        - bind methods to the target, required for the `pure` version
  options.wrap        - wrap constructors to preventing global pollution, required for the `pure` version
  options.unsafe      - use the simple assignment of property instead of delete + defineProperty
  options.sham        - add a flag to not completely full polyfills
  options.enumerable  - export as enumerable property
  options.noTargetGet - prevent calling a getter on target
*/
          module.exports = function(options, source) {
            var TARGET = options.target;
            var GLOBAL = options.global;
            var STATIC = options.stat;
            var FORCED, target, key, targetProperty, sourceProperty, descriptor;
            if (GLOBAL) {
              target = global;
            } else if (STATIC) {
              target = global[TARGET] || setGlobal(TARGET, {});
            } else {
              target = (global[TARGET] || {}).prototype;
            }
            if (target)
              for (key in source) {
                sourceProperty = source[key];
                if (options.noTargetGet) {
                  descriptor = getOwnPropertyDescriptor(target, key);
                  targetProperty = descriptor && descriptor.value;
                } else targetProperty = target[key];
                FORCED = isForced(
                  GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key,
                  options.forced
                );
                // contained in target
                if (!FORCED && targetProperty !== undefined) {
                  if (typeof sourceProperty === typeof targetProperty) continue;
                  copyConstructorProperties(sourceProperty, targetProperty);
                }
                // add a flag to not completely full polyfills
                if (options.sham || (targetProperty && targetProperty.sham)) {
                  createNonEnumerableProperty(sourceProperty, 'sham', true);
                }
                // extend global
                redefine(target, key, sourceProperty, options);
              }
          };
        },
        {
          '../internals/copy-constructor-properties': 50,
          '../internals/create-non-enumerable-property': 55,
          '../internals/global': 76,
          '../internals/is-forced': 90,
          '../internals/object-get-own-property-descriptor': 110,
          '../internals/redefine': 125,
          '../internals/set-global': 132
        }
      ],
      68: [
        function(_dereq_, module, exports) {
          module.exports = function(exec) {
            try {
              return !!exec();
            } catch (error) {
              return true;
            }
          };
        },
        {}
      ],
      69: [
        function(_dereq_, module, exports) {
          'use strict';
          // TODO: Remove from `core-js@4` since it's moved to entry points
          _dereq_('../modules/es.regexp.exec');
          var redefine = _dereq_('../internals/redefine');
          var fails = _dereq_('../internals/fails');
          var wellKnownSymbol = _dereq_('../internals/well-known-symbol');
          var regexpExec = _dereq_('../internals/regexp-exec');
          var createNonEnumerableProperty = _dereq_(
            '../internals/create-non-enumerable-property'
          );

          var SPECIES = wellKnownSymbol('species');

          var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function() {
            // #replace needs built-in support for named groups.
            // #match works fine because it just return the exec results, even if it has
            // a "grops" property.
            var re = /./;
            re.exec = function() {
              var result = [];
              result.groups = { a: '7' };
              return result;
            };
            return ''.replace(re, '$<a>') !== '7';
          });

          // IE <= 11 replaces $0 with the whole match, as if it was $&
          // https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0
          var REPLACE_KEEPS_$0 = (function() {
            return 'a'.replace(/./, '$0') === '$0';
          })();

          var REPLACE = wellKnownSymbol('replace');
          // Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string
          var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function() {
            if (/./[REPLACE]) {
              return /./[REPLACE]('a', '$0') === '';
            }
            return false;
          })();

          // Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec
          // Weex JS has frozen built-in prototypes, so use try / catch wrapper
          var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function() {
            var re = /(?:)/;
            var originalExec = re.exec;
            re.exec = function() {
              return originalExec.apply(this, arguments);
            };
            var result = 'ab'.split(re);
            return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';
          });

          module.exports = function(KEY, length, exec, sham) {
            var SYMBOL = wellKnownSymbol(KEY);

            var DELEGATES_TO_SYMBOL = !fails(function() {
              // String methods call symbol-named RegEp methods
              var O = {};
              O[SYMBOL] = function() {
                return 7;
              };
              return ''[KEY](O) != 7;
            });

            var DELEGATES_TO_EXEC =
              DELEGATES_TO_SYMBOL &&
              !fails(function() {
                // Symbol-named RegExp methods call .exec
                var execCalled = false;
                var re = /a/;

                if (KEY === 'split') {
                  // We can't use real regex here since it causes deoptimization
                  // and serious performance degradation in V8
                  // https://github.com/zloirock/core-js/issues/306
                  re = {};
                  // RegExp[@@split] doesn't call the regex's exec method, but first creates
                  // a new one. We need to return the patched regex when creating the new one.
                  re.constructor = {};
                  re.constructor[SPECIES] = function() {
                    return re;
                  };
                  re.flags = '';
                  re[SYMBOL] = /./[SYMBOL];
                }

                re.exec = function() {
                  execCalled = true;
                  return null;
                };

                re[SYMBOL]('');
                return !execCalled;
              });

            if (
              !DELEGATES_TO_SYMBOL ||
              !DELEGATES_TO_EXEC ||
              (KEY === 'replace' &&
                !(
                  REPLACE_SUPPORTS_NAMED_GROUPS &&
                  REPLACE_KEEPS_$0 &&
                  !REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE
                )) ||
              (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)
            ) {
              var nativeRegExpMethod = /./[SYMBOL];
              var methods = exec(
                SYMBOL,
                ''[KEY],
                function(nativeMethod, regexp, str, arg2, forceStringMethod) {
                  if (regexp.exec === regexpExec) {
                    if (DELEGATES_TO_SYMBOL && !forceStringMethod) {
                      // The native String method already delegates to @@method (this
                      // polyfilled function), leasing to infinite recursion.
                      // We avoid it by directly calling the native @@method method.
                      return {
                        done: true,
                        value: nativeRegExpMethod.call(regexp, str, arg2)
                      };
                    }
                    return { done: true, value: nativeMethod.call(str, regexp, arg2) };
                  }
                  return { done: false };
                },
                {
                  REPLACE_KEEPS_$0: REPLACE_KEEPS_$0,
                  REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE: REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE
                }
              );
              var stringMethod = methods[0];
              var regexMethod = methods[1];

              redefine(String.prototype, KEY, stringMethod);
              redefine(
                RegExp.prototype,
                SYMBOL,
                length == 2
                  ? // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)
                    // 21.2.5.11 RegExp.prototype[@@split](string, limit)
                    function(string, arg) {
                      return regexMethod.call(string, this, arg);
                    }
                  : // 21.2.5.6 RegExp.prototype[@@match](string)
                    // 21.2.5.9 RegExp.prototype[@@search](string)
                    function(string) {
                      return regexMethod.call(string, this);
                    }
              );
            }

            if (sham) createNonEnumerableProperty(RegExp.prototype[SYMBOL], 'sham', true);
          };
        },
        {
          '../internals/create-non-enumerable-property': 55,
          '../internals/fails': 68,
          '../internals/redefine': 125,
          '../internals/regexp-exec': 127,
          '../internals/well-known-symbol': 163,
          '../modules/es.regexp.exec': 196
        }
      ],
      70: [
        function(_dereq_, module, exports) {
          var fails = _dereq_('../internals/fails');

          module.exports = !fails(function() {
            return Object.isExtensible(Object.preventExtensions({}));
          });
        },
        { '../internals/fails': 68 }
      ],
      71: [
        function(_dereq_, module, exports) {
          var aFunction = _dereq_('../internals/a-function');

          // optional / simple context binding
          module.exports = function(fn, that, length) {
            aFunction(fn);
            if (that === undefined) return fn;
            switch (length) {
              case 0:
                return function() {
                  return fn.call(that);
                };
              case 1:
                return function(a) {
                  return fn.call(that, a);
                };
              case 2:
                return function(a, b) {
                  return fn.call(that, a, b);
                };
              case 3:
                return function(a, b, c) {
                  return fn.call(that, a, b, c);
                };
            }
            return function(/* ...args */) {
              return fn.apply(that, arguments);
            };
          };
        },
        { '../internals/a-function': 23 }
      ],
      72: [
        function(_dereq_, module, exports) {
          'use strict';
          var aFunction = _dereq_('../internals/a-function');
          var isObject = _dereq_('../internals/is-object');

          var slice = [].slice;
          var factories = {};

          var construct = function(C, argsLength, args) {
            if (!(argsLength in factories)) {
              for (var list = [], i = 0; i < argsLength; i++) list[i] = 'a[' + i + ']';
              // eslint-disable-next-line no-new-func
              factories[argsLength] = Function(
                'C,a',
                'return new C(' + list.join(',') + ')'
              );
            }
            return factories[argsLength](C, args);
          };

          // `Function.prototype.bind` method implementation
          // https://tc39.github.io/ecma262/#sec-function.prototype.bind
          module.exports =
            Function.bind ||
            function bind(that /* , ...args */) {
              var fn = aFunction(this);
              var partArgs = slice.call(arguments, 1);
              var boundFunction = function bound(/* args... */) {
                var args = partArgs.concat(slice.call(arguments));
                return this instanceof boundFunction
                  ? construct(fn, args.length, args)
                  : fn.apply(that, args);
              };
              if (isObject(fn.prototype)) boundFunction.prototype = fn.prototype;
              return boundFunction;
            };
        },
        { '../internals/a-function': 23, '../internals/is-object': 91 }
      ],
      73: [
        function(_dereq_, module, exports) {
          var path = _dereq_('../internals/path');
          var global = _dereq_('../internals/global');

          var aFunction = function(variable) {
            return typeof variable == 'function' ? variable : undefined;
          };

          module.exports = function(namespace, method) {
            return arguments.length < 2
              ? aFunction(path[namespace]) || aFunction(global[namespace])
              : (path[namespace] && path[namespace][method]) ||
                  (global[namespace] && global[namespace][method]);
          };
        },
        { '../internals/global': 76, '../internals/path': 121 }
      ],
      74: [
        function(_dereq_, module, exports) {
          var classof = _dereq_('../internals/classof');
          var Iterators = _dereq_('../internals/iterators');
          var wellKnownSymbol = _dereq_('../internals/well-known-symbol');

          var ITERATOR = wellKnownSymbol('iterator');

          module.exports = function(it) {
            if (it != undefined)
              return it[ITERATOR] || it['@@iterator'] || Iterators[classof(it)];
          };
        },
        {
          '../internals/classof': 47,
          '../internals/iterators': 96,
          '../internals/well-known-symbol': 163
        }
      ],
      75: [
        function(_dereq_, module, exports) {
          var anObject = _dereq_('../internals/an-object');
          var getIteratorMethod = _dereq_('../internals/get-iterator-method');

          module.exports = function(it) {
            var iteratorMethod = getIteratorMethod(it);
            if (typeof iteratorMethod != 'function') {
              throw TypeError(String(it) + ' is not iterable');
            }
            return anObject(iteratorMethod.call(it));
          };
        },
        { '../internals/an-object': 28, '../internals/get-iterator-method': 74 }
      ],
      76: [
        function(_dereq_, module, exports) {
          (function(global) {
            var check = function(it) {
              return it && it.Math == Math && it;
            };

            // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
            module.exports =
              // eslint-disable-next-line no-undef
              check(typeof globalThis == 'object' && globalThis) ||
              check(typeof window == 'object' && window) ||
              check(typeof self == 'object' && self) ||
              check(typeof global == 'object' && global) ||
              // eslint-disable-next-line no-new-func
              Function('return this')();
          }.call(
            this,
            typeof global !== 'undefined'
              ? global
              : typeof self !== 'undefined'
                ? self
                : typeof window !== 'undefined' ? window : {}
          ));
        },
        {}
      ],
      77: [
        function(_dereq_, module, exports) {
          var hasOwnProperty = {}.hasOwnProperty;

          module.exports = function(it, key) {
            return hasOwnProperty.call(it, key);
          };
        },
        {}
      ],
      78: [
        function(_dereq_, module, exports) {
          module.exports = {};
        },
        {}
      ],
      79: [
        function(_dereq_, module, exports) {
          var global = _dereq_('../internals/global');

          module.exports = function(a, b) {
            var console = global.console;
            if (console && console.error) {
              arguments.length === 1 ? console.error(a) : console.error(a, b);
            }
          };
        },
        { '../internals/global': 76 }
      ],
      80: [
        function(_dereq_, module, exports) {
          var getBuiltIn = _dereq_('../internals/get-built-in');

          module.exports = getBuiltIn('document', 'documentElement');
        },
        { '../internals/get-built-in': 73 }
      ],
      81: [
        function(_dereq_, module, exports) {
          var DESCRIPTORS = _dereq_('../internals/descriptors');
          var fails = _dereq_('../internals/fails');
          var createElement = _dereq_('../internals/document-create-element');

          // Thank's IE8 for his funny defineProperty
          module.exports =
            !DESCRIPTORS &&
            !fails(function() {
              return (
                Object.defineProperty(createElement('div'), 'a', {
                  get: function() {
                    return 7;
                  }
                }).a != 7
              );
            });
        },
        {
          '../internals/descriptors': 60,
          '../internals/document-create-element': 61,
          '../internals/fails': 68
        }
      ],
      82: [
        function(_dereq_, module, exports) {
          // IEEE754 conversions based on https://github.com/feross/ieee754
          // eslint-disable-next-line no-shadow-restricted-names
          var Infinity = 1 / 0;
          var abs = Math.abs;
          var pow = Math.pow;
          var floor = Math.floor;
          var log = Math.log;
          var LN2 = Math.LN2;

          var pack = function(number, mantissaLength, bytes) {
            var buffer = new Array(bytes);
            var exponentLength = bytes * 8 - mantissaLength - 1;
            var eMax = (1 << exponentLength) - 1;
            var eBias = eMax >> 1;
            var rt = mantissaLength === 23 ? pow(2, -24) - pow(2, -77) : 0;
            var sign = number < 0 || (number === 0 && 1 / number < 0) ? 1 : 0;
            var index = 0;
            var exponent, mantissa, c;
            number = abs(number);
            // eslint-disable-next-line no-self-compare
            if (number != number || number === Infinity) {
              // eslint-disable-next-line no-self-compare
              mantissa = number != number ? 1 : 0;
              exponent = eMax;
            } else {
              exponent = floor(log(number) / LN2);
              if (number * (c = pow(2, -exponent)) < 1) {
                exponent--;
                c *= 2;
              }
              if (exponent + eBias >= 1) {
                number += rt / c;
              } else {
                number += rt * pow(2, 1 - eBias);
              }
              if (number * c >= 2) {
                exponent++;
                c /= 2;
              }
              if (exponent + eBias >= eMax) {
                mantissa = 0;
                exponent = eMax;
              } else if (exponent + eBias >= 1) {
                mantissa = (number * c - 1) * pow(2, mantissaLength);
                exponent = exponent + eBias;
              } else {
                mantissa = number * pow(2, eBias - 1) * pow(2, mantissaLength);
                exponent = 0;
              }
            }
            for (
              ;
              mantissaLength >= 8;
              buffer[index++] = mantissa & 255, mantissa /= 256, mantissaLength -= 8
            );
            exponent = (exponent << mantissaLength) | mantissa;
            exponentLength += mantissaLength;
            for (
              ;
              exponentLength > 0;
              buffer[index++] = exponent & 255, exponent /= 256, exponentLength -= 8
            );
            buffer[--index] |= sign * 128;
            return buffer;
          };

          var unpack = function(buffer, mantissaLength) {
            var bytes = buffer.length;
            var exponentLength = bytes * 8 - mantissaLength - 1;
            var eMax = (1 << exponentLength) - 1;
            var eBias = eMax >> 1;
            var nBits = exponentLength - 7;
            var index = bytes - 1;
            var sign = buffer[index--];
            var exponent = sign & 127;
            var mantissa;
            sign >>= 7;
            for (
              ;
              nBits > 0;
              exponent = exponent * 256 + buffer[index], index--, nBits -= 8
            );
            mantissa = exponent & ((1 << -nBits) - 1);
            exponent >>= -nBits;
            nBits += mantissaLength;
            for (
              ;
              nBits > 0;
              mantissa = mantissa * 256 + buffer[index], index--, nBits -= 8
            );
            if (exponent === 0) {
              exponent = 1 - eBias;
            } else if (exponent === eMax) {
              return mantissa ? NaN : sign ? -Infinity : Infinity;
            } else {
              mantissa = mantissa + pow(2, mantissaLength);
              exponent = exponent - eBias;
            }
            return (sign ? -1 : 1) * mantissa * pow(2, exponent - mantissaLength);
          };

          module.exports = {
            pack: pack,
            unpack: unpack
          };
        },
        {}
      ],
      83: [
        function(_dereq_, module, exports) {
          var fails = _dereq_('../internals/fails');
          var classof = _dereq_('../internals/classof-raw');

          var split = ''.split;

          // fallback for non-array-like ES3 and non-enumerable old V8 strings
          module.exports = fails(function() {
            // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346
            // eslint-disable-next-line no-prototype-builtins
            return !Object('z').propertyIsEnumerable(0);
          })
            ? function(it) {
                return classof(it) == 'String' ? split.call(it, '') : Object(it);
              }
            : Object;
        },
        { '../internals/classof-raw': 46, '../internals/fails': 68 }
      ],
      84: [
        function(_dereq_, module, exports) {
          var isObject = _dereq_('../internals/is-object');
          var setPrototypeOf = _dereq_('../internals/object-set-prototype-of');

          // makes subclassing work correct for wrapped built-ins
          module.exports = function($this, dummy, Wrapper) {
            var NewTarget, NewTargetPrototype;
            if (
              // it can work only with native `setPrototypeOf`
              setPrototypeOf &&
              // we haven't completely correct pre-ES6 way for getting `new.target`, so use this
              typeof (NewTarget = dummy.constructor) == 'function' &&
              NewTarget !== Wrapper &&
              isObject((NewTargetPrototype = NewTarget.prototype)) &&
              NewTargetPrototype !== Wrapper.prototype
            )
              setPrototypeOf($this, NewTargetPrototype);
            return $this;
          };
        },
        { '../internals/is-object': 91, '../internals/object-set-prototype-of': 118 }
      ],
      85: [
        function(_dereq_, module, exports) {
          var store = _dereq_('../internals/shared-store');

          var functionToString = Function.toString;

          // this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper
          if (typeof store.inspectSource != 'function') {
            store.inspectSource = function(it) {
              return functionToString.call(it);
            };
          }

          module.exports = store.inspectSource;
        },
        { '../internals/shared-store': 136 }
      ],
      86: [
        function(_dereq_, module, exports) {
          var hiddenKeys = _dereq_('../internals/hidden-keys');
          var isObject = _dereq_('../internals/is-object');
          var has = _dereq_('../internals/has');
          var defineProperty = _dereq_('../internals/object-define-property').f;
          var uid = _dereq_('../internals/uid');
          var FREEZING = _dereq_('../internals/freezing');

          var METADATA = uid('meta');
          var id = 0;

          var isExtensible =
            Object.isExtensible ||
            function() {
              return true;
            };

          var setMetadata = function(it) {
            defineProperty(it, METADATA, {
              value: {
                objectID: 'O' + ++id, // object ID
                weakData: {} // weak collections IDs
              }
            });
          };

          var fastKey = function(it, create) {
            // return a primitive with prefix
            if (!isObject(it))
              return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
            if (!has(it, METADATA)) {
              // can't set metadata to uncaught frozen object
              if (!isExtensible(it)) return 'F';
              // not necessary to add metadata
              if (!create) return 'E';
              // add missing metadata
              setMetadata(it);
              // return object ID
            }
            return it[METADATA].objectID;
          };

          var getWeakData = function(it, create) {
            if (!has(it, METADATA)) {
              // can't set metadata to uncaught frozen object
              if (!isExtensible(it)) return true;
              // not necessary to add metadata
              if (!create) return false;
              // add missing metadata
              setMetadata(it);
              // return the store of weak collections IDs
            }
            return it[METADATA].weakData;
          };

          // add metadata on freeze-family methods calling
          var onFreeze = function(it) {
            if (FREEZING && meta.REQUIRED && isExtensible(it) && !has(it, METADATA))
              setMetadata(it);
            return it;
          };

          var meta = (module.exports = {
            REQUIRED: false,
            fastKey: fastKey,
            getWeakData: getWeakData,
            onFreeze: onFreeze
          });

          hiddenKeys[METADATA] = true;
        },
        {
          '../internals/freezing': 70,
          '../internals/has': 77,
          '../internals/hidden-keys': 78,
          '../internals/is-object': 91,
          '../internals/object-define-property': 109,
          '../internals/uid': 160
        }
      ],
      87: [
        function(_dereq_, module, exports) {
          var NATIVE_WEAK_MAP = _dereq_('../internals/native-weak-map');
          var global = _dereq_('../internals/global');
          var isObject = _dereq_('../internals/is-object');
          var createNonEnumerableProperty = _dereq_(
            '../internals/create-non-enumerable-property'
          );
          var objectHas = _dereq_('../internals/has');
          var sharedKey = _dereq_('../internals/shared-key');
          var hiddenKeys = _dereq_('../internals/hidden-keys');

          var WeakMap = global.WeakMap;
          var set, get, has;

          var enforce = function(it) {
            return has(it) ? get(it) : set(it, {});
          };

          var getterFor = function(TYPE) {
            return function(it) {
              var state;
              if (!isObject(it) || (state = get(it)).type !== TYPE) {
                throw TypeError('Incompatible receiver, ' + TYPE + ' required');
              }
              return state;
            };
          };

          if (NATIVE_WEAK_MAP) {
            var store = new WeakMap();
            var wmget = store.get;
            var wmhas = store.has;
            var wmset = store.set;
            set = function(it, metadata) {
              wmset.call(store, it, metadata);
              return metadata;
            };
            get = function(it) {
              return wmget.call(store, it) || {};
            };
            has = function(it) {
              return wmhas.call(store, it);
            };
          } else {
            var STATE = sharedKey('state');
            hiddenKeys[STATE] = true;
            set = function(it, metadata) {
              createNonEnumerableProperty(it, STATE, metadata);
              return metadata;
            };
            get = function(it) {
              return objectHas(it, STATE) ? it[STATE] : {};
            };
            has = function(it) {
              return objectHas(it, STATE);
            };
          }

          module.exports = {
            set: set,
            get: get,
            has: has,
            enforce: enforce,
            getterFor: getterFor
          };
        },
        {
          '../internals/create-non-enumerable-property': 55,
          '../internals/global': 76,
          '../internals/has': 77,
          '../internals/hidden-keys': 78,
          '../internals/is-object': 91,
          '../internals/native-weak-map': 102,
          '../internals/shared-key': 135
        }
      ],
      88: [
        function(_dereq_, module, exports) {
          var wellKnownSymbol = _dereq_('../internals/well-known-symbol');
          var Iterators = _dereq_('../internals/iterators');

          var ITERATOR = wellKnownSymbol('iterator');
          var ArrayPrototype = Array.prototype;

          // check on default Array iterator
          module.exports = function(it) {
            return (
              it !== undefined &&
              (Iterators.Array === it || ArrayPrototype[ITERATOR] === it)
            );
          };
        },
        { '../internals/iterators': 96, '../internals/well-known-symbol': 163 }
      ],
      89: [
        function(_dereq_, module, exports) {
          var classof = _dereq_('../internals/classof-raw');

          // `IsArray` abstract operation
          // https://tc39.github.io/ecma262/#sec-isarray
          module.exports =
            Array.isArray ||
            function isArray(arg) {
              return classof(arg) == 'Array';
            };
        },
        { '../internals/classof-raw': 46 }
      ],
      90: [
        function(_dereq_, module, exports) {
          var fails = _dereq_('../internals/fails');

          var replacement = /#|\.prototype\./;

          var isForced = function(feature, detection) {
            var value = data[normalize(feature)];
            return value == POLYFILL
              ? true
              : value == NATIVE
                ? false
                : typeof detection == 'function' ? fails(detection) : !!detection;
          };

          var normalize = (isForced.normalize = function(string) {
            return String(string)
              .replace(replacement, '.')
              .toLowerCase();
          });

          var data = (isForced.data = {});
          var NATIVE = (isForced.NATIVE = 'N');
          var POLYFILL = (isForced.POLYFILL = 'P');

          module.exports = isForced;
        },
        { '../internals/fails': 68 }
      ],
      91: [
        function(_dereq_, module, exports) {
          module.exports = function(it) {
            return typeof it === 'object' ? it !== null : typeof it === 'function';
          };
        },
        {}
      ],
      92: [
        function(_dereq_, module, exports) {
          module.exports = false;
        },
        {}
      ],
      93: [
        function(_dereq_, module, exports) {
          var isObject = _dereq_('../internals/is-object');
          var classof = _dereq_('../internals/classof-raw');
          var wellKnownSymbol = _dereq_('../internals/well-known-symbol');

          var MATCH = wellKnownSymbol('match');

          // `IsRegExp` abstract operation
          // https://tc39.github.io/ecma262/#sec-isregexp
          module.exports = function(it) {
            var isRegExp;
            return (
              isObject(it) &&
              ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp')
            );
          };
        },
        {
          '../internals/classof-raw': 46,
          '../internals/is-object': 91,
          '../internals/well-known-symbol': 163
        }
      ],
      94: [
        function(_dereq_, module, exports) {
          var anObject = _dereq_('../internals/an-object');
          var isArrayIteratorMethod = _dereq_('../internals/is-array-iterator-method');
          var toLength = _dereq_('../internals/to-length');
          var bind = _dereq_('../internals/function-bind-context');
          var getIteratorMethod = _dereq_('../internals/get-iterator-method');
          var callWithSafeIterationClosing = _dereq_(
            '../internals/call-with-safe-iteration-closing'
          );

          var Result = function(stopped, result) {
            this.stopped = stopped;
            this.result = result;
          };

          var iterate = (module.exports = function(
            iterable,
            fn,
            that,
            AS_ENTRIES,
            IS_ITERATOR
          ) {
            var boundFunction = bind(fn, that, AS_ENTRIES ? 2 : 1);
            var iterator, iterFn, index, length, result, next, step;

            if (IS_ITERATOR) {
              iterator = iterable;
            } else {
              iterFn = getIteratorMethod(iterable);
              if (typeof iterFn != 'function') throw TypeError('Target is not iterable');
              // optimisation for array iterators
              if (isArrayIteratorMethod(iterFn)) {
                for (
                  index = 0, length = toLength(iterable.length);
                  length > index;
                  index++
                ) {
                  result = AS_ENTRIES
                    ? boundFunction(anObject((step = iterable[index]))[0], step[1])
                    : boundFunction(iterable[index]);
                  if (result && result instanceof Result) return result;
                }
                return new Result(false);
              }
              iterator = iterFn.call(iterable);
            }

            next = iterator.next;
            while (!(step = next.call(iterator)).done) {
              result = callWithSafeIterationClosing(
                iterator,
                boundFunction,
                step.value,
                AS_ENTRIES
              );
              if (typeof result == 'object' && result && result instanceof Result)
                return result;
            }
            return new Result(false);
          });

          iterate.stop = function(result) {
            return new Result(true, result);
          };
        },
        {
          '../internals/an-object': 28,
          '../internals/call-with-safe-iteration-closing': 44,
          '../internals/function-bind-context': 71,
          '../internals/get-iterator-method': 74,
          '../internals/is-array-iterator-method': 88,
          '../internals/to-length': 151
        }
      ],
      95: [
        function(_dereq_, module, exports) {
          'use strict';
          var getPrototypeOf = _dereq_('../internals/object-get-prototype-of');
          var createNonEnumerableProperty = _dereq_(
            '../internals/create-non-enumerable-property'
          );
          var has = _dereq_('../internals/has');
          var wellKnownSymbol = _dereq_('../internals/well-known-symbol');
          var IS_PURE = _dereq_('../internals/is-pure');

          var ITERATOR = wellKnownSymbol('iterator');
          var BUGGY_SAFARI_ITERATORS = false;

          var returnThis = function() {
            return this;
          };

          // `%IteratorPrototype%` object
          // https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object
          var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;

          if ([].keys) {
            arrayIterator = [].keys();
            // Safari 8 has buggy iterators w/o `next`
            if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;
            else {
              PrototypeOfArrayIteratorPrototype = getPrototypeOf(
                getPrototypeOf(arrayIterator)
              );
              if (PrototypeOfArrayIteratorPrototype !== Object.prototype)
                IteratorPrototype = PrototypeOfArrayIteratorPrototype;
            }
          }

          if (IteratorPrototype == undefined) IteratorPrototype = {};

          // 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
          if (!IS_PURE && !has(IteratorPrototype, ITERATOR)) {
            createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);
          }

          module.exports = {
            IteratorPrototype: IteratorPrototype,
            BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS
          };
        },
        {
          '../internals/create-non-enumerable-property': 55,
          '../internals/has': 77,
          '../internals/is-pure': 92,
          '../internals/object-get-prototype-of': 114,
          '../internals/well-known-symbol': 163
        }
      ],
      96: [
        function(_dereq_, module, exports) {
          arguments[4][78][0].apply(exports, arguments);
        },
        { dup: 78 }
      ],
      97: [
        function(_dereq_, module, exports) {
          // `Math.sign` method implementation
          // https://tc39.github.io/ecma262/#sec-math.sign
          module.exports =
            Math.sign ||
            function sign(x) {
              // eslint-disable-next-line no-self-compare
              return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;
            };
        },
        {}
      ],
      98: [
        function(_dereq_, module, exports) {
          var global = _dereq_('../internals/global');
          var getOwnPropertyDescriptor = _dereq_(
            '../internals/object-get-own-property-descriptor'
          ).f;
          var classof = _dereq_('../internals/classof-raw');
          var macrotask = _dereq_('../internals/task').set;
          var IS_IOS = _dereq_('../internals/engine-is-ios');

          var MutationObserver = global.MutationObserver || global.WebKitMutationObserver;
          var process = global.process;
          var Promise = global.Promise;
          var IS_NODE = classof(process) == 'process';
          // Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`
          var queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');
          var queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;

          var flush, head, last, notify, toggle, node, promise, then;

          // modern engines have queueMicrotask method
          if (!queueMicrotask) {
            flush = function() {
              var parent, fn;
              if (IS_NODE && (parent = process.domain)) parent.exit();
              while (head) {
                fn = head.fn;
                head = head.next;
                try {
                  fn();
                } catch (error) {
                  if (head) notify();
                  else last = undefined;
                  throw error;
                }
              }
              last = undefined;
              if (parent) parent.enter();
            };

            // Node.js
            if (IS_NODE) {
              notify = function() {
                process.nextTick(flush);
              };
              // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339
            } else if (MutationObserver && !IS_IOS) {
              toggle = true;
              node = document.createTextNode('');
              new MutationObserver(flush).observe(node, { characterData: true });
              notify = function() {
                node.data = toggle = !toggle;
              };
              // environments with maybe non-completely correct, but existent Promise
            } else if (Promise && Promise.resolve) {
              // Promise.resolve without an argument throws an error in LG WebOS 2
              promise = Promise.resolve(undefined);
              then = promise.then;
              notify = function() {
                then.call(promise, flush);
              };
              // for other environments - macrotask based on:
              // - setImmediate
              // - MessageChannel
              // - window.postMessag
              // - onreadystatechange
              // - setTimeout
            } else {
              notify = function() {
                // strange IE + webpack dev server bug - use .call(global)
                macrotask.call(global, flush);
              };
            }
          }

          module.exports =
            queueMicrotask ||
            function(fn) {
              var task = { fn: fn, next: undefined };
              if (last) last.next = task;
              if (!head) {
                head = task;
                notify();
              }
              last = task;
            };
        },
        {
          '../internals/classof-raw': 46,
          '../internals/engine-is-ios': 63,
          '../internals/global': 76,
          '../internals/object-get-own-property-descriptor': 110,
          '../internals/task': 145
        }
      ],
      99: [
        function(_dereq_, module, exports) {
          var global = _dereq_('../internals/global');

          module.exports = global.Promise;
        },
        { '../internals/global': 76 }
      ],
      100: [
        function(_dereq_, module, exports) {
          var fails = _dereq_('../internals/fails');

          module.exports =
            !!Object.getOwnPropertySymbols &&
            !fails(function() {
              // Chrome 38 Symbol has incorrect toString conversion
              // eslint-disable-next-line no-undef
              return !String(Symbol());
            });
        },
        { '../internals/fails': 68 }
      ],
      101: [
        function(_dereq_, module, exports) {
          var fails = _dereq_('../internals/fails');
          var wellKnownSymbol = _dereq_('../internals/well-known-symbol');
          var IS_PURE = _dereq_('../internals/is-pure');

          var ITERATOR = wellKnownSymbol('iterator');

          module.exports = !fails(function() {
            var url = new URL('b?a=1&b=2&c=3', 'http://a');
            var searchParams = url.searchParams;
            var result = '';
            url.pathname = 'c%20d';
            searchParams.forEach(function(value, key) {
              searchParams['delete']('b');
              result += key + value;
            });
            return (
              (IS_PURE && !url.toJSON) ||
              !searchParams.sort ||
              url.href !== 'http://a/c%20d?a=1&c=3' ||
              searchParams.get('c') !== '3' ||
              String(new URLSearchParams('?a=1')) !== 'a=1' ||
              !searchParams[ITERATOR] ||
              // throws in Edge
              new URL('https://a@b').username !== 'a' ||
              new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b' ||
              // not punycoded in Edge
              new URL('http://тест').host !== 'xn--e1aybc' ||
              // not escaped in Chrome 62-
              new URL('http://a#б').hash !== '#%D0%B1' ||
              // fails in Chrome 66-
              result !== 'a1c3' ||
              // throws in Safari
              new URL('http://x', undefined).host !== 'x'
            );
          });
        },
        {
          '../internals/fails': 68,
          '../internals/is-pure': 92,
          '../internals/well-known-symbol': 163
        }
      ],
      102: [
        function(_dereq_, module, exports) {
          var global = _dereq_('../internals/global');
          var inspectSource = _dereq_('../internals/inspect-source');

          var WeakMap = global.WeakMap;

          module.exports =
            typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));
        },
        { '../internals/global': 76, '../internals/inspect-source': 85 }
      ],
      103: [
        function(_dereq_, module, exports) {
          'use strict';
          var aFunction = _dereq_('../internals/a-function');

          var PromiseCapability = function(C) {
            var resolve, reject;
            this.promise = new C(function($$resolve, $$reject) {
              if (resolve !== undefined || reject !== undefined)
                throw TypeError('Bad Promise constructor');
              resolve = $$resolve;
              reject = $$reject;
            });
            this.resolve = aFunction(resolve);
            this.reject = aFunction(reject);
          };

          // 25.4.1.5 NewPromiseCapability(C)
          module.exports.f = function(C) {
            return new PromiseCapability(C);
          };
        },
        { '../internals/a-function': 23 }
      ],
      104: [
        function(_dereq_, module, exports) {
          var isRegExp = _dereq_('../internals/is-regexp');

          module.exports = function(it) {
            if (isRegExp(it)) {
              throw TypeError("The method doesn't accept regular expressions");
            }
            return it;
          };
        },
        { '../internals/is-regexp': 93 }
      ],
      105: [
        function(_dereq_, module, exports) {
          var global = _dereq_('../internals/global');

          var globalIsFinite = global.isFinite;

          // `Number.isFinite` method
          // https://tc39.github.io/ecma262/#sec-number.isfinite
          module.exports =
            Number.isFinite ||
            function isFinite(it) {
              return typeof it == 'number' && globalIsFinite(it);
            };
        },
        { '../internals/global': 76 }
      ],
      106: [
        function(_dereq_, module, exports) {
          'use strict';
          var DESCRIPTORS = _dereq_('../internals/descriptors');
          var fails = _dereq_('../internals/fails');
          var objectKeys = _dereq_('../internals/object-keys');
          var getOwnPropertySymbolsModule = _dereq_(
            '../internals/object-get-own-property-symbols'
          );
          var propertyIsEnumerableModule = _dereq_(
            '../internals/object-property-is-enumerable'
          );
          var toObject = _dereq_('../internals/to-object');
          var IndexedObject = _dereq_('../internals/indexed-object');

          var nativeAssign = Object.assign;
          var defineProperty = Object.defineProperty;

          // `Object.assign` method
          // https://tc39.github.io/ecma262/#sec-object.assign
          module.exports =
            !nativeAssign ||
            fails(function() {
              // should have correct order of operations (Edge bug)
              if (
                DESCRIPTORS &&
                nativeAssign(
                  { b: 1 },
                  nativeAssign(
                    defineProperty({}, 'a', {
                      enumerable: true,
                      get: function() {
                        defineProperty(this, 'b', {
                          value: 3,
                          enumerable: false
                        });
                      }
                    }),
                    { b: 2 }
                  )
                ).b !== 1
              )
                return true;
              // should work with symbols and should have deterministic property order (V8 bug)
              var A = {};
              var B = {};
              // eslint-disable-next-line no-undef
              var symbol = Symbol();
              var alphabet = 'abcdefghijklmnopqrst';
              A[symbol] = 7;
              alphabet.split('').forEach(function(chr) {
                B[chr] = chr;
              });
              return (
                nativeAssign({}, A)[symbol] != 7 ||
                objectKeys(nativeAssign({}, B)).join('') != alphabet
              );
            })
              ? function assign(target, source) {
                  // eslint-disable-line no-unused-vars
                  var T = toObject(target);
                  var argumentsLength = arguments.length;
                  var index = 1;
                  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
                  var propertyIsEnumerable = propertyIsEnumerableModule.f;
                  while (argumentsLength > index) {
                    var S = IndexedObject(arguments[index++]);
                    var keys = getOwnPropertySymbols
                      ? objectKeys(S).concat(getOwnPropertySymbols(S))
                      : objectKeys(S);
                    var length = keys.length;
                    var j = 0;
                    var key;
                    while (length > j) {
                      key = keys[j++];
                      if (!DESCRIPTORS || propertyIsEnumerable.call(S, key))
                        T[key] = S[key];
                    }
                  }
                  return T;
                }
              : nativeAssign;
        },
        {
          '../internals/descriptors': 60,
          '../internals/fails': 68,
          '../internals/indexed-object': 83,
          '../internals/object-get-own-property-symbols': 113,
          '../internals/object-keys': 116,
          '../internals/object-property-is-enumerable': 117,
          '../internals/to-object': 152
        }
      ],
      107: [
        function(_dereq_, module, exports) {
          var anObject = _dereq_('../internals/an-object');
          var defineProperties = _dereq_('../internals/object-define-properties');
          var enumBugKeys = _dereq_('../internals/enum-bug-keys');
          var hiddenKeys = _dereq_('../internals/hidden-keys');
          var html = _dereq_('../internals/html');
          var documentCreateElement = _dereq_('../internals/document-create-element');
          var sharedKey = _dereq_('../internals/shared-key');

          var GT = '>';
          var LT = '<';
          var PROTOTYPE = 'prototype';
          var SCRIPT = 'script';
          var IE_PROTO = sharedKey('IE_PROTO');

          var EmptyConstructor = function() {
            /* empty */
          };

          var scriptTag = function(content) {
            return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;
          };

          // Create object with fake `null` prototype: use ActiveX Object with cleared prototype
          var NullProtoObjectViaActiveX = function(activeXDocument) {
            activeXDocument.write(scriptTag(''));
            activeXDocument.close();
            var temp = activeXDocument.parentWindow.Object;
            activeXDocument = null; // avoid memory leak
            return temp;
          };

          // Create object with fake `null` prototype: use iframe Object with cleared prototype
          var NullProtoObjectViaIFrame = function() {
            // Thrash, waste and sodomy: IE GC bug
            var iframe = documentCreateElement('iframe');
            var JS = 'java' + SCRIPT + ':';
            var iframeDocument;
            iframe.style.display = 'none';
            html.appendChild(iframe);
            // https://github.com/zloirock/core-js/issues/475
            iframe.src = String(JS);
            iframeDocument = iframe.contentWindow.document;
            iframeDocument.open();
            iframeDocument.write(scriptTag('document.F=Object'));
            iframeDocument.close();
            return iframeDocument.F;
          };

          // Check for document.domain and active x support
          // No need to use active x approach when document.domain is not set
          // see https://github.com/es-shims/es5-shim/issues/150
          // variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346
          // avoid IE GC bug
          var activeXDocument;
          var NullProtoObject = function() {
            try {
              /* global ActiveXObject */
              activeXDocument = document.domain && new ActiveXObject('htmlfile');
            } catch (error) {
              /* ignore */
            }
            NullProtoObject = activeXDocument
              ? NullProtoObjectViaActiveX(activeXDocument)
              : NullProtoObjectViaIFrame();
            var length = enumBugKeys.length;
            while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];
            return NullProtoObject();
          };

          hiddenKeys[IE_PROTO] = true;

          // `Object.create` method
          // https://tc39.github.io/ecma262/#sec-object.create
          module.exports =
            Object.create ||
            function create(O, Properties) {
              var result;
              if (O !== null) {
                EmptyConstructor[PROTOTYPE] = anObject(O);
                result = new EmptyConstructor();
                EmptyConstructor[PROTOTYPE] = null;
                // add "__proto__" for Object.getPrototypeOf polyfill
                result[IE_PROTO] = O;
              } else result = NullProtoObject();
              return Properties === undefined
                ? result
                : defineProperties(result, Properties);
            };
        },
        {
          '../internals/an-object': 28,
          '../internals/document-create-element': 61,
          '../internals/enum-bug-keys': 66,
          '../internals/hidden-keys': 78,
          '../internals/html': 80,
          '../internals/object-define-properties': 108,
          '../internals/shared-key': 135
        }
      ],
      108: [
        function(_dereq_, module, exports) {
          var DESCRIPTORS = _dereq_('../internals/descriptors');
          var definePropertyModule = _dereq_('../internals/object-define-property');
          var anObject = _dereq_('../internals/an-object');
          var objectKeys = _dereq_('../internals/object-keys');

          // `Object.defineProperties` method
          // https://tc39.github.io/ecma262/#sec-object.defineproperties
          module.exports = DESCRIPTORS
            ? Object.defineProperties
            : function defineProperties(O, Properties) {
                anObject(O);
                var keys = objectKeys(Properties);
                var length = keys.length;
                var index = 0;
                var key;
                while (length > index)
                  definePropertyModule.f(O, (key = keys[index++]), Properties[key]);
                return O;
              };
        },
        {
          '../internals/an-object': 28,
          '../internals/descriptors': 60,
          '../internals/object-define-property': 109,
          '../internals/object-keys': 116
        }
      ],
      109: [
        function(_dereq_, module, exports) {
          var DESCRIPTORS = _dereq_('../internals/descriptors');
          var IE8_DOM_DEFINE = _dereq_('../internals/ie8-dom-define');
          var anObject = _dereq_('../internals/an-object');
          var toPrimitive = _dereq_('../internals/to-primitive');

          var nativeDefineProperty = Object.defineProperty;

          // `Object.defineProperty` method
          // https://tc39.github.io/ecma262/#sec-object.defineproperty
          exports.f = DESCRIPTORS
            ? nativeDefineProperty
            : function defineProperty(O, P, Attributes) {
                anObject(O);
                P = toPrimitive(P, true);
                anObject(Attributes);
                if (IE8_DOM_DEFINE)
                  try {
                    return nativeDefineProperty(O, P, Attributes);
                  } catch (error) {
                    /* empty */
                  }
                if ('get' in Attributes || 'set' in Attributes)
                  throw TypeError('Accessors not supported');
                if ('value' in Attributes) O[P] = Attributes.value;
                return O;
              };
        },
        {
          '../internals/an-object': 28,
          '../internals/descriptors': 60,
          '../internals/ie8-dom-define': 81,
          '../internals/to-primitive': 155
        }
      ],
      110: [
        function(_dereq_, module, exports) {
          var DESCRIPTORS = _dereq_('../internals/descriptors');
          var propertyIsEnumerableModule = _dereq_(
            '../internals/object-property-is-enumerable'
          );
          var createPropertyDescriptor = _dereq_('../internals/create-property-descriptor');
          var toIndexedObject = _dereq_('../internals/to-indexed-object');
          var toPrimitive = _dereq_('../internals/to-primitive');
          var has = _dereq_('../internals/has');
          var IE8_DOM_DEFINE = _dereq_('../internals/ie8-dom-define');

          var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;

          // `Object.getOwnPropertyDescriptor` method
          // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor
          exports.f = DESCRIPTORS
            ? nativeGetOwnPropertyDescriptor
            : function getOwnPropertyDescriptor(O, P) {
                O = toIndexedObject(O);
                P = toPrimitive(P, true);
                if (IE8_DOM_DEFINE)
                  try {
                    return nativeGetOwnPropertyDescriptor(O, P);
                  } catch (error) {
                    /* empty */
                  }
                if (has(O, P))
                  return createPropertyDescriptor(
                    !propertyIsEnumerableModule.f.call(O, P),
                    O[P]
                  );
              };
        },
        {
          '../internals/create-property-descriptor': 56,
          '../internals/descriptors': 60,
          '../internals/has': 77,
          '../internals/ie8-dom-define': 81,
          '../internals/object-property-is-enumerable': 117,
          '../internals/to-indexed-object': 149,
          '../internals/to-primitive': 155
        }
      ],
      111: [
        function(_dereq_, module, exports) {
          var toIndexedObject = _dereq_('../internals/to-indexed-object');
          var nativeGetOwnPropertyNames = _dereq_(
            '../internals/object-get-own-property-names'
          ).f;

          var toString = {}.toString;

          var windowNames =
            typeof window == 'object' && window && Object.getOwnPropertyNames
              ? Object.getOwnPropertyNames(window)
              : [];

          var getWindowNames = function(it) {
            try {
              return nativeGetOwnPropertyNames(it);
            } catch (error) {
              return windowNames.slice();
            }
          };

          // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
          module.exports.f = function getOwnPropertyNames(it) {
            return windowNames && toString.call(it) == '[object Window]'
              ? getWindowNames(it)
              : nativeGetOwnPropertyNames(toIndexedObject(it));
          };
        },
        {
          '../internals/object-get-own-property-names': 112,
          '../internals/to-indexed-object': 149
        }
      ],
      112: [
        function(_dereq_, module, exports) {
          var internalObjectKeys = _dereq_('../internals/object-keys-internal');
          var enumBugKeys = _dereq_('../internals/enum-bug-keys');

          var hiddenKeys = enumBugKeys.concat('length', 'prototype');

          // `Object.getOwnPropertyNames` method
          // https://tc39.github.io/ecma262/#sec-object.getownpropertynames
          exports.f =
            Object.getOwnPropertyNames ||
            function getOwnPropertyNames(O) {
              return internalObjectKeys(O, hiddenKeys);
            };
        },
        { '../internals/enum-bug-keys': 66, '../internals/object-keys-internal': 115 }
      ],
      113: [
        function(_dereq_, module, exports) {
          exports.f = Object.getOwnPropertySymbols;
        },
        {}
      ],
      114: [
        function(_dereq_, module, exports) {
          var has = _dereq_('../internals/has');
          var toObject = _dereq_('../internals/to-object');
          var sharedKey = _dereq_('../internals/shared-key');
          var CORRECT_PROTOTYPE_GETTER = _dereq_('../internals/correct-prototype-getter');

          var IE_PROTO = sharedKey('IE_PROTO');
          var ObjectPrototype = Object.prototype;

          // `Object.getPrototypeOf` method
          // https://tc39.github.io/ecma262/#sec-object.getprototypeof
          module.exports = CORRECT_PROTOTYPE_GETTER
            ? Object.getPrototypeOf
            : function(O) {
                O = toObject(O);
                if (has(O, IE_PROTO)) return O[IE_PROTO];
                if (typeof O.constructor == 'function' && O instanceof O.constructor) {
                  return O.constructor.prototype;
                }
                return O instanceof Object ? ObjectPrototype : null;
              };
        },
        {
          '../internals/correct-prototype-getter': 52,
          '../internals/has': 77,
          '../internals/shared-key': 135,
          '../internals/to-object': 152
        }
      ],
      115: [
        function(_dereq_, module, exports) {
          var has = _dereq_('../internals/has');
          var toIndexedObject = _dereq_('../internals/to-indexed-object');
          var indexOf = _dereq_('../internals/array-includes').indexOf;
          var hiddenKeys = _dereq_('../internals/hidden-keys');

          module.exports = function(object, names) {
            var O = toIndexedObject(object);
            var i = 0;
            var result = [];
            var key;
            for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);
            // Don't enum bug & hidden keys
            while (names.length > i)
              if (has(O, (key = names[i++]))) {
                ~indexOf(result, key) || result.push(key);
              }
            return result;
          };
        },
        {
          '../internals/array-includes': 36,
          '../internals/has': 77,
          '../internals/hidden-keys': 78,
          '../internals/to-indexed-object': 149
        }
      ],
      116: [
        function(_dereq_, module, exports) {
          var internalObjectKeys = _dereq_('../internals/object-keys-internal');
          var enumBugKeys = _dereq_('../internals/enum-bug-keys');

          // `Object.keys` method
          // https://tc39.github.io/ecma262/#sec-object.keys
          module.exports =
            Object.keys ||
            function keys(O) {
              return internalObjectKeys(O, enumBugKeys);
            };
        },
        { '../internals/enum-bug-keys': 66, '../internals/object-keys-internal': 115 }
      ],
      117: [
        function(_dereq_, module, exports) {
          'use strict';
          var nativePropertyIsEnumerable = {}.propertyIsEnumerable;
          var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;

          // Nashorn ~ JDK8 bug
          var NASHORN_BUG =
            getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1);

          // `Object.prototype.propertyIsEnumerable` method implementation
          // https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable
          exports.f = NASHORN_BUG
            ? function propertyIsEnumerable(V) {
                var descriptor = getOwnPropertyDescriptor(this, V);
                return !!descriptor && descriptor.enumerable;
              }
            : nativePropertyIsEnumerable;
        },
        {}
      ],
      118: [
        function(_dereq_, module, exports) {
          var anObject = _dereq_('../internals/an-object');
          var aPossiblePrototype = _dereq_('../internals/a-possible-prototype');

          // `Object.setPrototypeOf` method
          // https://tc39.github.io/ecma262/#sec-object.setprototypeof
          // Works with __proto__ only. Old v8 can't work with null proto objects.
          /* eslint-disable no-proto */
          module.exports =
            Object.setPrototypeOf ||
            ('__proto__' in {}
              ? (function() {
                  var CORRECT_SETTER = false;
                  var test = {};
                  var setter;
                  try {
                    setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__')
                      .set;
                    setter.call(test, []);
                    CORRECT_SETTER = test instanceof Array;
                  } catch (error) {
                    /* empty */
                  }
                  return function setPrototypeOf(O, proto) {
                    anObject(O);
                    aPossiblePrototype(proto);
                    if (CORRECT_SETTER) setter.call(O, proto);
                    else O.__proto__ = proto;
                    return O;
                  };
                })()
              : undefined);
        },
        { '../internals/a-possible-prototype': 24, '../internals/an-object': 28 }
      ],
      119: [
        function(_dereq_, module, exports) {
          'use strict';
          var TO_STRING_TAG_SUPPORT = _dereq_('../internals/to-string-tag-support');
          var classof = _dereq_('../internals/classof');

          // `Object.prototype.toString` method implementation
          // https://tc39.github.io/ecma262/#sec-object.prototype.tostring
          module.exports = TO_STRING_TAG_SUPPORT
            ? {}.toString
            : function toString() {
                return '[object ' + classof(this) + ']';
              };
        },
        { '../internals/classof': 47, '../internals/to-string-tag-support': 156 }
      ],
      120: [
        function(_dereq_, module, exports) {
          var getBuiltIn = _dereq_('../internals/get-built-in');
          var getOwnPropertyNamesModule = _dereq_(
            '../internals/object-get-own-property-names'
          );
          var getOwnPropertySymbolsModule = _dereq_(
            '../internals/object-get-own-property-symbols'
          );
          var anObject = _dereq_('../internals/an-object');

          // all object keys, includes non-enumerable and symbols
          module.exports =
            getBuiltIn('Reflect', 'ownKeys') ||
            function ownKeys(it) {
              var keys = getOwnPropertyNamesModule.f(anObject(it));
              var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
              return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;
            };
        },
        {
          '../internals/an-object': 28,
          '../internals/get-built-in': 73,
          '../internals/object-get-own-property-names': 112,
          '../internals/object-get-own-property-symbols': 113
        }
      ],
      121: [
        function(_dereq_, module, exports) {
          var global = _dereq_('../internals/global');

          module.exports = global;
        },
        { '../internals/global': 76 }
      ],
      122: [
        function(_dereq_, module, exports) {
          module.exports = function(exec) {
            try {
              return { error: false, value: exec() };
            } catch (error) {
              return { error: true, value: error };
            }
          };
        },
        {}
      ],
      123: [
        function(_dereq_, module, exports) {
          var anObject = _dereq_('../internals/an-object');
          var isObject = _dereq_('../internals/is-object');
          var newPromiseCapability = _dereq_('../internals/new-promise-capability');

          module.exports = function(C, x) {
            anObject(C);
            if (isObject(x) && x.constructor === C) return x;
            var promiseCapability = newPromiseCapability.f(C);
            var resolve = promiseCapability.resolve;
            resolve(x);
            return promiseCapability.promise;
          };
        },
        {
          '../internals/an-object': 28,
          '../internals/is-object': 91,
          '../internals/new-promise-capability': 103
        }
      ],
      124: [
        function(_dereq_, module, exports) {
          var redefine = _dereq_('../internals/redefine');

          module.exports = function(target, src, options) {
            for (var key in src) redefine(target, key, src[key], options);
            return target;
          };
        },
        { '../internals/redefine': 125 }
      ],
      125: [
        function(_dereq_, module, exports) {
          var global = _dereq_('../internals/global');
          var createNonEnumerableProperty = _dereq_(
            '../internals/create-non-enumerable-property'
          );
          var has = _dereq_('../internals/has');
          var setGlobal = _dereq_('../internals/set-global');
          var inspectSource = _dereq_('../internals/inspect-source');
          var InternalStateModule = _dereq_('../internals/internal-state');

          var getInternalState = InternalStateModule.get;
          var enforceInternalState = InternalStateModule.enforce;
          var TEMPLATE = String(String).split('String');

          (module.exports = function(O, key, value, options) {
            var unsafe = options ? !!options.unsafe : false;
            var simple = options ? !!options.enumerable : false;
            var noTargetGet = options ? !!options.noTargetGet : false;
            if (typeof value == 'function') {
              if (typeof key == 'string' && !has(value, 'name'))
                createNonEnumerableProperty(value, 'name', key);
              enforceInternalState(value).source = TEMPLATE.join(
                typeof key == 'string' ? key : ''
              );
            }
            if (O === global) {
              if (simple) O[key] = value;
              else setGlobal(key, value);
              return;
            } else if (!unsafe) {
              delete O[key];
            } else if (!noTargetGet && O[key]) {
              simple = true;
            }
            if (simple) O[key] = value;
            else createNonEnumerableProperty(O, key, value);
            // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
          })(Function.prototype, 'toString', function toString() {
            return (
              (typeof this == 'function' && getInternalState(this).source) ||
              inspectSource(this)
            );
          });
        },
        {
          '../internals/create-non-enumerable-property': 55,
          '../internals/global': 76,
          '../internals/has': 77,
          '../internals/inspect-source': 85,
          '../internals/internal-state': 87,
          '../internals/set-global': 132
        }
      ],
      126: [
        function(_dereq_, module, exports) {
          var classof = _dereq_('./classof-raw');
          var regexpExec = _dereq_('./regexp-exec');

          // `RegExpExec` abstract operation
          // https://tc39.github.io/ecma262/#sec-regexpexec
          module.exports = function(R, S) {
            var exec = R.exec;
            if (typeof exec === 'function') {
              var result = exec.call(R, S);
              if (typeof result !== 'object') {
                throw TypeError(
                  'RegExp exec method returned something other than an Object or null'
                );
              }
              return result;
            }

            if (classof(R) !== 'RegExp') {
              throw TypeError('RegExp#exec called on incompatible receiver');
            }

            return regexpExec.call(R, S);
          };
        },
        { './classof-raw': 46, './regexp-exec': 127 }
      ],
      127: [
        function(_dereq_, module, exports) {
          'use strict';
          var regexpFlags = _dereq_('./regexp-flags');
          var stickyHelpers = _dereq_('./regexp-sticky-helpers');

          var nativeExec = RegExp.prototype.exec;
          // This always refers to the native implementation, because the
          // String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,
          // which loads this file before patching the method.
          var nativeReplace = String.prototype.replace;

          var patchedExec = nativeExec;

          var UPDATES_LAST_INDEX_WRONG = (function() {
            var re1 = /a/;
            var re2 = /b*/g;
            nativeExec.call(re1, 'a');
            nativeExec.call(re2, 'a');
            return re1.lastIndex !== 0 || re2.lastIndex !== 0;
          })();

          var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y || stickyHelpers.BROKEN_CARET;

          // nonparticipating capturing group, copied from es5-shim's String#split patch.
          var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;

          var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y;

          if (PATCH) {
            patchedExec = function exec(str) {
              var re = this;
              var lastIndex, reCopy, match, i;
              var sticky = UNSUPPORTED_Y && re.sticky;
              var flags = regexpFlags.call(re);
              var source = re.source;
              var charsAdded = 0;
              var strCopy = str;

              if (sticky) {
                flags = flags.replace('y', '');
                if (flags.indexOf('g') === -1) {
                  flags += 'g';
                }

                strCopy = String(str).slice(re.lastIndex);
                // Support anchored sticky behavior.
                if (
                  re.lastIndex > 0 &&
                  (!re.multiline || (re.multiline && str[re.lastIndex - 1] !== '\n'))
                ) {
                  source = '(?: ' + source + ')';
                  strCopy = ' ' + strCopy;
                  charsAdded++;
                }
                // ^(? + rx + ) is needed, in combination with some str slicing, to
                // simulate the 'y' flag.
                reCopy = new RegExp('^(?:' + source + ')', flags);
              }

              if (NPCG_INCLUDED) {
                reCopy = new RegExp('^' + source + '$(?!\\s)', flags);
              }
              if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;

              match = nativeExec.call(sticky ? reCopy : re, strCopy);

              if (sticky) {
                if (match) {
                  match.input = match.input.slice(charsAdded);
                  match[0] = match[0].slice(charsAdded);
                  match.index = re.lastIndex;
                  re.lastIndex += match[0].length;
                } else re.lastIndex = 0;
              } else if (UPDATES_LAST_INDEX_WRONG && match) {
                re.lastIndex = re.global ? match.index + match[0].length : lastIndex;
              }
              if (NPCG_INCLUDED && match && match.length > 1) {
                // Fix browsers whose `exec` methods don't consistently return `undefined`
                // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/
                nativeReplace.call(match[0], reCopy, function() {
                  for (i = 1; i < arguments.length - 2; i++) {
                    if (arguments[i] === undefined) match[i] = undefined;
                  }
                });
              }

              return match;
            };
          }

          module.exports = patchedExec;
        },
        { './regexp-flags': 128, './regexp-sticky-helpers': 129 }
      ],
      128: [
        function(_dereq_, module, exports) {
          'use strict';
          var anObject = _dereq_('../internals/an-object');

          // `RegExp.prototype.flags` getter implementation
          // https://tc39.github.io/ecma262/#sec-get-regexp.prototype.flags
          module.exports = function() {
            var that = anObject(this);
            var result = '';
            if (that.global) result += 'g';
            if (that.ignoreCase) result += 'i';
            if (that.multiline) result += 'm';
            if (that.dotAll) result += 's';
            if (that.unicode) result += 'u';
            if (that.sticky) result += 'y';
            return result;
          };
        },
        { '../internals/an-object': 28 }
      ],
      129: [
        function(_dereq_, module, exports) {
          'use strict';

          var fails = _dereq_('./fails');

          // babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError,
          // so we use an intermediate function.
          function RE(s, f) {
            return RegExp(s, f);
          }

          exports.UNSUPPORTED_Y = fails(function() {
            // babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError
            var re = RE('a', 'y');
            re.lastIndex = 2;
            return re.exec('abcd') != null;
          });

          exports.BROKEN_CARET = fails(function() {
            // https://bugzilla.mozilla.org/show_bug.cgi?id=773687
            var re = RE('^r', 'gy');
            re.lastIndex = 2;
            return re.exec('str') != null;
          });
        },
        { './fails': 68 }
      ],
      130: [
        function(_dereq_, module, exports) {
          // `RequireObjectCoercible` abstract operation
          // https://tc39.github.io/ecma262/#sec-requireobjectcoercible
          module.exports = function(it) {
            if (it == undefined) throw TypeError("Can't call method on " + it);
            return it;
          };
        },
        {}
      ],
      131: [
        function(_dereq_, module, exports) {
          // `SameValue` abstract operation
          // https://tc39.github.io/ecma262/#sec-samevalue
          module.exports =
            Object.is ||
            function is(x, y) {
              // eslint-disable-next-line no-self-compare
              return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;
            };
        },
        {}
      ],
      132: [
        function(_dereq_, module, exports) {
          var global = _dereq_('../internals/global');
          var createNonEnumerableProperty = _dereq_(
            '../internals/create-non-enumerable-property'
          );

          module.exports = function(key, value) {
            try {
              createNonEnumerableProperty(global, key, value);
            } catch (error) {
              global[key] = value;
            }
            return value;
          };
        },
        { '../internals/create-non-enumerable-property': 55, '../internals/global': 76 }
      ],
      133: [
        function(_dereq_, module, exports) {
          'use strict';
          var getBuiltIn = _dereq_('../internals/get-built-in');
          var definePropertyModule = _dereq_('../internals/object-define-property');
          var wellKnownSymbol = _dereq_('../internals/well-known-symbol');
          var DESCRIPTORS = _dereq_('../internals/descriptors');

          var SPECIES = wellKnownSymbol('species');

          module.exports = function(CONSTRUCTOR_NAME) {
            var Constructor = getBuiltIn(CONSTRUCTOR_NAME);
            var defineProperty = definePropertyModule.f;

            if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {
              defineProperty(Constructor, SPECIES, {
                configurable: true,
                get: function() {
                  return this;
                }
              });
            }
          };
        },
        {
          '../internals/descriptors': 60,
          '../internals/get-built-in': 73,
          '../internals/object-define-property': 109,
          '../internals/well-known-symbol': 163
        }
      ],
      134: [
        function(_dereq_, module, exports) {
          var defineProperty = _dereq_('../internals/object-define-property').f;
          var has = _dereq_('../internals/has');
          var wellKnownSymbol = _dereq_('../internals/well-known-symbol');

          var TO_STRING_TAG = wellKnownSymbol('toStringTag');

          module.exports = function(it, TAG, STATIC) {
            if (it && !has((it = STATIC ? it : it.prototype), TO_STRING_TAG)) {
              defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });
            }
          };
        },
        {
          '../internals/has': 77,
          '../internals/object-define-property': 109,
          '../internals/well-known-symbol': 163
        }
      ],
      135: [
        function(_dereq_, module, exports) {
          var shared = _dereq_('../internals/shared');
          var uid = _dereq_('../internals/uid');

          var keys = shared('keys');

          module.exports = function(key) {
            return keys[key] || (keys[key] = uid(key));
          };
        },
        { '../internals/shared': 137, '../internals/uid': 160 }
      ],
      136: [
        function(_dereq_, module, exports) {
          var global = _dereq_('../internals/global');
          var setGlobal = _dereq_('../internals/set-global');

          var SHARED = '__core-js_shared__';
          var store = global[SHARED] || setGlobal(SHARED, {});

          module.exports = store;
        },
        { '../internals/global': 76, '../internals/set-global': 132 }
      ],
      137: [
        function(_dereq_, module, exports) {
          var IS_PURE = _dereq_('../internals/is-pure');
          var store = _dereq_('../internals/shared-store');

          (module.exports = function(key, value) {
            return store[key] || (store[key] = value !== undefined ? value : {});
          })('versions', []).push({
            version: '3.6.5',
            mode: IS_PURE ? 'pure' : 'global',
            copyright: '© 2020 Denis Pushkarev (zloirock.ru)'
          });
        },
        { '../internals/is-pure': 92, '../internals/shared-store': 136 }
      ],
      138: [
        function(_dereq_, module, exports) {
          var anObject = _dereq_('../internals/an-object');
          var aFunction = _dereq_('../internals/a-function');
          var wellKnownSymbol = _dereq_('../internals/well-known-symbol');

          var SPECIES = wellKnownSymbol('species');

          // `SpeciesConstructor` abstract operation
          // https://tc39.github.io/ecma262/#sec-speciesconstructor
          module.exports = function(O, defaultConstructor) {
            var C = anObject(O).constructor;
            var S;
            return C === undefined || (S = anObject(C)[SPECIES]) == undefined
              ? defaultConstructor
              : aFunction(S);
          };
        },
        {
          '../internals/a-function': 23,
          '../internals/an-object': 28,
          '../internals/well-known-symbol': 163
        }
      ],
      139: [
        function(_dereq_, module, exports) {
          var fails = _dereq_('../internals/fails');

          // check the existence of a method, lowercase
          // of a tag and escaping quotes in arguments
          module.exports = function(METHOD_NAME) {
            return fails(function() {
              var test = ''[METHOD_NAME]('"');
              return test !== test.toLowerCase() || test.split('"').length > 3;
            });
          };
        },
        { '../internals/fails': 68 }
      ],
      140: [
        function(_dereq_, module, exports) {
          var toInteger = _dereq_('../internals/to-integer');
          var requireObjectCoercible = _dereq_('../internals/require-object-coercible');

          // `String.prototype.{ codePointAt, at }` methods implementation
          var createMethod = function(CONVERT_TO_STRING) {
            return function($this, pos) {
              var S = String(requireObjectCoercible($this));
              var position = toInteger(pos);
              var size = S.length;
              var first, second;
              if (position < 0 || position >= size)
                return CONVERT_TO_STRING ? '' : undefined;
              first = S.charCodeAt(position);
              return first < 0xd800 ||
                first > 0xdbff ||
                position + 1 === size ||
                (second = S.charCodeAt(position + 1)) < 0xdc00 ||
                second > 0xdfff
                ? CONVERT_TO_STRING ? S.charAt(position) : first
                : CONVERT_TO_STRING
                  ? S.slice(position, position + 2)
                  : ((first - 0xd800) << 10) + (second - 0xdc00) + 0x10000;
            };
          };

          module.exports = {
            // `String.prototype.codePointAt` method
            // https://tc39.github.io/ecma262/#sec-string.prototype.codepointat
            codeAt: createMethod(false),
            // `String.prototype.at` method
            // https://github.com/mathiasbynens/String.prototype.at
            charAt: createMethod(true)
          };
        },
        { '../internals/require-object-coercible': 130, '../internals/to-integer': 150 }
      ],
      141: [
        function(_dereq_, module, exports) {
          'use strict';
          // based on https://github.com/bestiejs/punycode.js/blob/master/punycode.js
          var maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1
          var base = 36;
          var tMin = 1;
          var tMax = 26;
          var skew = 38;
          var damp = 700;
          var initialBias = 72;
          var initialN = 128; // 0x80
          var delimiter = '-'; // '\x2D'
          var regexNonASCII = /[^\0-\u007E]/; // non-ASCII chars
          var regexSeparators = /[.\u3002\uFF0E\uFF61]/g; // RFC 3490 separators
          var OVERFLOW_ERROR = 'Overflow: input needs wider integers to process';
          var baseMinusTMin = base - tMin;
          var floor = Math.floor;
          var stringFromCharCode = String.fromCharCode;

          /**
           * Creates an array containing the numeric code points of each Unicode
           * character in the string. While JavaScript uses UCS-2 internally,
           * this function will convert a pair of surrogate halves (each of which
           * UCS-2 exposes as separate characters) into a single code point,
           * matching UTF-16.
           */
          var ucs2decode = function(string) {
            var output = [];
            var counter = 0;
            var length = string.length;
            while (counter < length) {
              var value = string.charCodeAt(counter++);
              if (value >= 0xd800 && value <= 0xdbff && counter < length) {
                // It's a high surrogate, and there is a next character.
                var extra = string.charCodeAt(counter++);
                if ((extra & 0xfc00) == 0xdc00) {
                  // Low surrogate.
                  output.push(((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000);
                } else {
                  // It's an unmatched surrogate; only append this code unit, in case the
                  // next code unit is the high surrogate of a surrogate pair.
                  output.push(value);
                  counter--;
                }
              } else {
                output.push(value);
              }
            }
            return output;
          };

          /**
           * Converts a digit/integer into a basic code point.
           */
          var digitToBasic = function(digit) {
            //  0..25 map to ASCII a..z or A..Z
            // 26..35 map to ASCII 0..9
            return digit + 22 + 75 * (digit < 26);
          };

          /**
           * Bias adaptation function as per section 3.4 of RFC 3492.
           * https://tools.ietf.org/html/rfc3492#section-3.4
           */
          var adapt = function(delta, numPoints, firstTime) {
            var k = 0;
            delta = firstTime ? floor(delta / damp) : delta >> 1;
            delta += floor(delta / numPoints);
            for (; delta > (baseMinusTMin * tMax) >> 1; k += base) {
              delta = floor(delta / baseMinusTMin);
            }
            return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
          };

          /**
           * Converts a string of Unicode symbols (e.g. a domain name label) to a
           * Punycode string of ASCII-only symbols.
           */
          // eslint-disable-next-line  max-statements
          var encode = function(input) {
            var output = [];

            // Convert the input in UCS-2 to an array of Unicode code points.
            input = ucs2decode(input);

            // Cache the length.
            var inputLength = input.length;

            // Initialize the state.
            var n = initialN;
            var delta = 0;
            var bias = initialBias;
            var i, currentValue;

            // Handle the basic code points.
            for (i = 0; i < input.length; i++) {
              currentValue = input[i];
              if (currentValue < 0x80) {
                output.push(stringFromCharCode(currentValue));
              }
            }

            var basicLength = output.length; // number of basic code points.
            var handledCPCount = basicLength; // number of code points that have been handled;

            // Finish the basic string with a delimiter unless it's empty.
            if (basicLength) {
              output.push(delimiter);
            }

            // Main encoding loop:
            while (handledCPCount < inputLength) {
              // All non-basic code points < n have been handled already. Find the next larger one:
              var m = maxInt;
              for (i = 0; i < input.length; i++) {
                currentValue = input[i];
                if (currentValue >= n && currentValue < m) {
                  m = currentValue;
                }
              }

              // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>, but guard against overflow.
              var handledCPCountPlusOne = handledCPCount + 1;
              if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
                throw RangeError(OVERFLOW_ERROR);
              }

              delta += (m - n) * handledCPCountPlusOne;
              n = m;

              for (i = 0; i < input.length; i++) {
                currentValue = input[i];
                if (currentValue < n && ++delta > maxInt) {
                  throw RangeError(OVERFLOW_ERROR);
                }
                if (currentValue == n) {
                  // Represent delta as a generalized variable-length integer.
                  var q = delta;
                  for (var k = base /* no condition */; ; k += base) {
                    var t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;
                    if (q < t) break;
                    var qMinusT = q - t;
                    var baseMinusT = base - t;
                    output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT)));
                    q = floor(qMinusT / baseMinusT);
                  }

                  output.push(stringFromCharCode(digitToBasic(q)));
                  bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
                  delta = 0;
                  ++handledCPCount;
                }
              }

              ++delta;
              ++n;
            }
            return output.join('');
          };

          module.exports = function(input) {
            var encoded = [];
            var labels = input
              .toLowerCase()
              .replace(regexSeparators, '\u002E')
              .split('.');
            var i, label;
            for (i = 0; i < labels.length; i++) {
              label = labels[i];
              encoded.push(regexNonASCII.test(label) ? 'xn--' + encode(label) : label);
            }
            return encoded.join('.');
          };
        },
        {}
      ],
      142: [
        function(_dereq_, module, exports) {
          'use strict';
          var toInteger = _dereq_('../internals/to-integer');
          var requireObjectCoercible = _dereq_('../internals/require-object-coercible');

          // `String.prototype.repeat` method implementation
          // https://tc39.github.io/ecma262/#sec-string.prototype.repeat
          module.exports =
            ''.repeat ||
            function repeat(count) {
              var str = String(requireObjectCoercible(this));
              var result = '';
              var n = toInteger(count);
              if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions');
              for (; n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;
              return result;
            };
        },
        { '../internals/require-object-coercible': 130, '../internals/to-integer': 150 }
      ],
      143: [
        function(_dereq_, module, exports) {
          var fails = _dereq_('../internals/fails');
          var whitespaces = _dereq_('../internals/whitespaces');

          var non = '\u200B\u0085\u180E';

          // check that a method works with the correct list
          // of whitespaces and has a correct name
          module.exports = function(METHOD_NAME) {
            return fails(function() {
              return (
                !!whitespaces[METHOD_NAME]() ||
                non[METHOD_NAME]() != non ||
                whitespaces[METHOD_NAME].name !== METHOD_NAME
              );
            });
          };
        },
        { '../internals/fails': 68, '../internals/whitespaces': 164 }
      ],
      144: [
        function(_dereq_, module, exports) {
          var requireObjectCoercible = _dereq_('../internals/require-object-coercible');
          var whitespaces = _dereq_('../internals/whitespaces');

          var whitespace = '[' + whitespaces + ']';
          var ltrim = RegExp('^' + whitespace + whitespace + '*');
          var rtrim = RegExp(whitespace + whitespace + '*$');

          // `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation
          var createMethod = function(TYPE) {
            return function($this) {
              var string = String(requireObjectCoercible($this));
              if (TYPE & 1) string = string.replace(ltrim, '');
              if (TYPE & 2) string = string.replace(rtrim, '');
              return string;
            };
          };

          module.exports = {
            // `String.prototype.{ trimLeft, trimStart }` methods
            // https://tc39.github.io/ecma262/#sec-string.prototype.trimstart
            start: createMethod(1),
            // `String.prototype.{ trimRight, trimEnd }` methods
            // https://tc39.github.io/ecma262/#sec-string.prototype.trimend
            end: createMethod(2),
            // `String.prototype.trim` method
            // https://tc39.github.io/ecma262/#sec-string.prototype.trim
            trim: createMethod(3)
          };
        },
        { '../internals/require-object-coercible': 130, '../internals/whitespaces': 164 }
      ],
      145: [
        function(_dereq_, module, exports) {
          var global = _dereq_('../internals/global');
          var fails = _dereq_('../internals/fails');
          var classof = _dereq_('../internals/classof-raw');
          var bind = _dereq_('../internals/function-bind-context');
          var html = _dereq_('../internals/html');
          var createElement = _dereq_('../internals/document-create-element');
          var IS_IOS = _dereq_('../internals/engine-is-ios');

          var location = global.location;
          var set = global.setImmediate;
          var clear = global.clearImmediate;
          var process = global.process;
          var MessageChannel = global.MessageChannel;
          var Dispatch = global.Dispatch;
          var counter = 0;
          var queue = {};
          var ONREADYSTATECHANGE = 'onreadystatechange';
          var defer, channel, port;

          var run = function(id) {
            // eslint-disable-next-line no-prototype-builtins
            if (queue.hasOwnProperty(id)) {
              var fn = queue[id];
              delete queue[id];
              fn();
            }
          };

          var runner = function(id) {
            return function() {
              run(id);
            };
          };

          var listener = function(event) {
            run(event.data);
          };

          var post = function(id) {
            // old engines have not location.origin
            global.postMessage(id + '', location.protocol + '//' + location.host);
          };

          // Node.js 0.9+ & IE10+ has setImmediate, otherwise:
          if (!set || !clear) {
            set = function setImmediate(fn) {
              var args = [];
              var i = 1;
              while (arguments.length > i) args.push(arguments[i++]);
              queue[++counter] = function() {
                // eslint-disable-next-line no-new-func
                (typeof fn == 'function' ? fn : Function(fn)).apply(undefined, args);
              };
              defer(counter);
              return counter;
            };
            clear = function clearImmediate(id) {
              delete queue[id];
            };
            // Node.js 0.8-
            if (classof(process) == 'process') {
              defer = function(id) {
                process.nextTick(runner(id));
              };
              // Sphere (JS game engine) Dispatch API
            } else if (Dispatch && Dispatch.now) {
              defer = function(id) {
                Dispatch.now(runner(id));
              };
              // Browsers with MessageChannel, includes WebWorkers
              // except iOS - https://github.com/zloirock/core-js/issues/624
            } else if (MessageChannel && !IS_IOS) {
              channel = new MessageChannel();
              port = channel.port2;
              channel.port1.onmessage = listener;
              defer = bind(port.postMessage, port, 1);
              // Browsers with postMessage, skip WebWorkers
              // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'
            } else if (
              global.addEventListener &&
              typeof postMessage == 'function' &&
              !global.importScripts &&
              !fails(post) &&
              location.protocol !== 'file:'
            ) {
              defer = post;
              global.addEventListener('message', listener, false);
              // IE8-
            } else if (ONREADYSTATECHANGE in createElement('script')) {
              defer = function(id) {
                html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function() {
                  html.removeChild(this);
                  run(id);
                };
              };
              // Rest old browsers
            } else {
              defer = function(id) {
                setTimeout(runner(id), 0);
              };
            }
          }

          module.exports = {
            set: set,
            clear: clear
          };
        },
        {
          '../internals/classof-raw': 46,
          '../internals/document-create-element': 61,
          '../internals/engine-is-ios': 63,
          '../internals/fails': 68,
          '../internals/function-bind-context': 71,
          '../internals/global': 76,
          '../internals/html': 80
        }
      ],
      146: [
        function(_dereq_, module, exports) {
          var classof = _dereq_('../internals/classof-raw');

          // `thisNumberValue` abstract operation
          // https://tc39.github.io/ecma262/#sec-thisnumbervalue
          module.exports = function(value) {
            if (typeof value != 'number' && classof(value) != 'Number') {
              throw TypeError('Incorrect invocation');
            }
            return +value;
          };
        },
        { '../internals/classof-raw': 46 }
      ],
      147: [
        function(_dereq_, module, exports) {
          var toInteger = _dereq_('../internals/to-integer');

          var max = Math.max;
          var min = Math.min;

          // Helper for a popular repeating case of the spec:
          // Let integer be ? ToInteger(index).
          // If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).
          module.exports = function(index, length) {
            var integer = toInteger(index);
            return integer < 0 ? max(integer + length, 0) : min(integer, length);
          };
        },
        { '../internals/to-integer': 150 }
      ],
      148: [
        function(_dereq_, module, exports) {
          var toInteger = _dereq_('../internals/to-integer');
          var toLength = _dereq_('../internals/to-length');

          // `ToIndex` abstract operation
          // https://tc39.github.io/ecma262/#sec-toindex
          module.exports = function(it) {
            if (it === undefined) return 0;
            var number = toInteger(it);
            var length = toLength(number);
            if (number !== length) throw RangeError('Wrong length or index');
            return length;
          };
        },
        { '../internals/to-integer': 150, '../internals/to-length': 151 }
      ],
      149: [
        function(_dereq_, module, exports) {
          // toObject with fallback for non-array-like ES3 strings
          var IndexedObject = _dereq_('../internals/indexed-object');
          var requireObjectCoercible = _dereq_('../internals/require-object-coercible');

          module.exports = function(it) {
            return IndexedObject(requireObjectCoercible(it));
          };
        },
        { '../internals/indexed-object': 83, '../internals/require-object-coercible': 130 }
      ],
      150: [
        function(_dereq_, module, exports) {
          var ceil = Math.ceil;
          var floor = Math.floor;

          // `ToInteger` abstract operation
          // https://tc39.github.io/ecma262/#sec-tointeger
          module.exports = function(argument) {
            return isNaN((argument = +argument))
              ? 0
              : (argument > 0 ? floor : ceil)(argument);
          };
        },
        {}
      ],
      151: [
        function(_dereq_, module, exports) {
          var toInteger = _dereq_('../internals/to-integer');

          var min = Math.min;

          // `ToLength` abstract operation
          // https://tc39.github.io/ecma262/#sec-tolength
          module.exports = function(argument) {
            return argument > 0 ? min(toInteger(argument), 0x1fffffffffffff) : 0; // 2 ** 53 - 1 == 9007199254740991
          };
        },
        { '../internals/to-integer': 150 }
      ],
      152: [
        function(_dereq_, module, exports) {
          var requireObjectCoercible = _dereq_('../internals/require-object-coercible');

          // `ToObject` abstract operation
          // https://tc39.github.io/ecma262/#sec-toobject
          module.exports = function(argument) {
            return Object(requireObjectCoercible(argument));
          };
        },
        { '../internals/require-object-coercible': 130 }
      ],
      153: [
        function(_dereq_, module, exports) {
          var toPositiveInteger = _dereq_('../internals/to-positive-integer');

          module.exports = function(it, BYTES) {
            var offset = toPositiveInteger(it);
            if (offset % BYTES) throw RangeError('Wrong offset');
            return offset;
          };
        },
        { '../internals/to-positive-integer': 154 }
      ],
      154: [
        function(_dereq_, module, exports) {
          var toInteger = _dereq_('../internals/to-integer');

          module.exports = function(it) {
            var result = toInteger(it);
            if (result < 0) throw RangeError("The argument can't be less than 0");
            return result;
          };
        },
        { '../internals/to-integer': 150 }
      ],
      155: [
        function(_dereq_, module, exports) {
          var isObject = _dereq_('../internals/is-object');

          // `ToPrimitive` abstract operation
          // https://tc39.github.io/ecma262/#sec-toprimitive
          // instead of the ES6 spec version, we didn't implement @@toPrimitive case
          // and the second argument - flag - preferred type is a string
          module.exports = function(input, PREFERRED_STRING) {
            if (!isObject(input)) return input;
            var fn, val;
            if (
              PREFERRED_STRING &&
              typeof (fn = input.toString) == 'function' &&
              !isObject((val = fn.call(input)))
            )
              return val;
            if (
              typeof (fn = input.valueOf) == 'function' &&
              !isObject((val = fn.call(input)))
            )
              return val;
            if (
              !PREFERRED_STRING &&
              typeof (fn = input.toString) == 'function' &&
              !isObject((val = fn.call(input)))
            )
              return val;
            throw TypeError("Can't convert object to primitive value");
          };
        },
        { '../internals/is-object': 91 }
      ],
      156: [
        function(_dereq_, module, exports) {
          var wellKnownSymbol = _dereq_('../internals/well-known-symbol');

          var TO_STRING_TAG = wellKnownSymbol('toStringTag');
          var test = {};

          test[TO_STRING_TAG] = 'z';

          module.exports = String(test) === '[object z]';
        },
        { '../internals/well-known-symbol': 163 }
      ],
      157: [
        function(_dereq_, module, exports) {
          'use strict';
          var $ = _dereq_('../internals/export');
          var global = _dereq_('../internals/global');
          var DESCRIPTORS = _dereq_('../internals/descriptors');
          var TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS = _dereq_(
            '../internals/typed-array-constructors-require-wrappers'
          );
          var ArrayBufferViewCore = _dereq_('../internals/array-buffer-view-core');
          var ArrayBufferModule = _dereq_('../internals/array-buffer');
          var anInstance = _dereq_('../internals/an-instance');
          var createPropertyDescriptor = _dereq_('../internals/create-property-descriptor');
          var createNonEnumerableProperty = _dereq_(
            '../internals/create-non-enumerable-property'
          );
          var toLength = _dereq_('../internals/to-length');
          var toIndex = _dereq_('../internals/to-index');
          var toOffset = _dereq_('../internals/to-offset');
          var toPrimitive = _dereq_('../internals/to-primitive');
          var has = _dereq_('../internals/has');
          var classof = _dereq_('../internals/classof');
          var isObject = _dereq_('../internals/is-object');
          var create = _dereq_('../internals/object-create');
          var setPrototypeOf = _dereq_('../internals/object-set-prototype-of');
          var getOwnPropertyNames = _dereq_('../internals/object-get-own-property-names').f;
          var typedArrayFrom = _dereq_('../internals/typed-array-from');
          var forEach = _dereq_('../internals/array-iteration').forEach;
          var setSpecies = _dereq_('../internals/set-species');
          var definePropertyModule = _dereq_('../internals/object-define-property');
          var getOwnPropertyDescriptorModule = _dereq_(
            '../internals/object-get-own-property-descriptor'
          );
          var InternalStateModule = _dereq_('../internals/internal-state');
          var inheritIfRequired = _dereq_('../internals/inherit-if-required');

          var getInternalState = InternalStateModule.get;
          var setInternalState = InternalStateModule.set;
          var nativeDefineProperty = definePropertyModule.f;
          var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
          var round = Math.round;
          var RangeError = global.RangeError;
          var ArrayBuffer = ArrayBufferModule.ArrayBuffer;
          var DataView = ArrayBufferModule.DataView;
          var NATIVE_ARRAY_BUFFER_VIEWS = ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS;
          var TYPED_ARRAY_TAG = ArrayBufferViewCore.TYPED_ARRAY_TAG;
          var TypedArray = ArrayBufferViewCore.TypedArray;
          var TypedArrayPrototype = ArrayBufferViewCore.TypedArrayPrototype;
          var aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;
          var isTypedArray = ArrayBufferViewCore.isTypedArray;
          var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';
          var WRONG_LENGTH = 'Wrong length';

          var fromList = function(C, list) {
            var index = 0;
            var length = list.length;
            var result = new (aTypedArrayConstructor(C))(length);
            while (length > index) result[index] = list[index++];
            return result;
          };

          var addGetter = function(it, key) {
            nativeDefineProperty(it, key, {
              get: function() {
                return getInternalState(this)[key];
              }
            });
          };

          var isArrayBuffer = function(it) {
            var klass;
            return (
              it instanceof ArrayBuffer ||
              (klass = classof(it)) == 'ArrayBuffer' ||
              klass == 'SharedArrayBuffer'
            );
          };

          var isTypedArrayIndex = function(target, key) {
            return (
              isTypedArray(target) &&
              typeof key != 'symbol' &&
              key in target &&
              String(+key) == String(key)
            );
          };

          var wrappedGetOwnPropertyDescriptor = function getOwnPropertyDescriptor(
            target,
            key
          ) {
            return isTypedArrayIndex(target, (key = toPrimitive(key, true)))
              ? createPropertyDescriptor(2, target[key])
              : nativeGetOwnPropertyDescriptor(target, key);
          };

          var wrappedDefineProperty = function defineProperty(target, key, descriptor) {
            if (
              isTypedArrayIndex(target, (key = toPrimitive(key, true))) &&
              isObject(descriptor) &&
              has(descriptor, 'value') &&
              !has(descriptor, 'get') &&
              !has(descriptor, 'set') &&
              // TODO: add validation descriptor w/o calling accessors
              !descriptor.configurable &&
              (!has(descriptor, 'writable') || descriptor.writable) &&
              (!has(descriptor, 'enumerable') || descriptor.enumerable)
            ) {
              target[key] = descriptor.value;
              return target;
            }
            return nativeDefineProperty(target, key, descriptor);
          };

          if (DESCRIPTORS) {
            if (!NATIVE_ARRAY_BUFFER_VIEWS) {
              getOwnPropertyDescriptorModule.f = wrappedGetOwnPropertyDescriptor;
              definePropertyModule.f = wrappedDefineProperty;
              addGetter(TypedArrayPrototype, 'buffer');
              addGetter(TypedArrayPrototype, 'byteOffset');
              addGetter(TypedArrayPrototype, 'byteLength');
              addGetter(TypedArrayPrototype, 'length');
            }

            $(
              { target: 'Object', stat: true, forced: !NATIVE_ARRAY_BUFFER_VIEWS },
              {
                getOwnPropertyDescriptor: wrappedGetOwnPropertyDescriptor,
                defineProperty: wrappedDefineProperty
              }
            );

            module.exports = function(TYPE, wrapper, CLAMPED) {
              var BYTES = TYPE.match(/\d+$/)[0] / 8;
              var CONSTRUCTOR_NAME = TYPE + (CLAMPED ? 'Clamped' : '') + 'Array';
              var GETTER = 'get' + TYPE;
              var SETTER = 'set' + TYPE;
              var NativeTypedArrayConstructor = global[CONSTRUCTOR_NAME];
              var TypedArrayConstructor = NativeTypedArrayConstructor;
              var TypedArrayConstructorPrototype =
                TypedArrayConstructor && TypedArrayConstructor.prototype;
              var exported = {};

              var getter = function(that, index) {
                var data = getInternalState(that);
                return data.view[GETTER](index * BYTES + data.byteOffset, true);
              };

              var setter = function(that, index, value) {
                var data = getInternalState(that);
                if (CLAMPED)
                  value =
                    (value = round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;
                data.view[SETTER](index * BYTES + data.byteOffset, value, true);
              };

              var addElement = function(that, index) {
                nativeDefineProperty(that, index, {
                  get: function() {
                    return getter(this, index);
                  },
                  set: function(value) {
                    return setter(this, index, value);
                  },
                  enumerable: true
                });
              };

              if (!NATIVE_ARRAY_BUFFER_VIEWS) {
                TypedArrayConstructor = wrapper(function(that, data, offset, $length) {
                  anInstance(that, TypedArrayConstructor, CONSTRUCTOR_NAME);
                  var index = 0;
                  var byteOffset = 0;
                  var buffer, byteLength, length;
                  if (!isObject(data)) {
                    length = toIndex(data);
                    byteLength = length * BYTES;
                    buffer = new ArrayBuffer(byteLength);
                  } else if (isArrayBuffer(data)) {
                    buffer = data;
                    byteOffset = toOffset(offset, BYTES);
                    var $len = data.byteLength;
                    if ($length === undefined) {
                      if ($len % BYTES) throw RangeError(WRONG_LENGTH);
                      byteLength = $len - byteOffset;
                      if (byteLength < 0) throw RangeError(WRONG_LENGTH);
                    } else {
                      byteLength = toLength($length) * BYTES;
                      if (byteLength + byteOffset > $len) throw RangeError(WRONG_LENGTH);
                    }
                    length = byteLength / BYTES;
                  } else if (isTypedArray(data)) {
                    return fromList(TypedArrayConstructor, data);
                  } else {
                    return typedArrayFrom.call(TypedArrayConstructor, data);
                  }
                  setInternalState(that, {
                    buffer: buffer,
                    byteOffset: byteOffset,
                    byteLength: byteLength,
                    length: length,
                    view: new DataView(buffer)
                  });
                  while (index < length) addElement(that, index++);
                });

                if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);
                TypedArrayConstructorPrototype = TypedArrayConstructor.prototype = create(
                  TypedArrayPrototype
                );
              } else if (TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS) {
                TypedArrayConstructor = wrapper(function(
                  dummy,
                  data,
                  typedArrayOffset,
                  $length
                ) {
                  anInstance(dummy, TypedArrayConstructor, CONSTRUCTOR_NAME);
                  return inheritIfRequired(
                    (function() {
                      if (!isObject(data))
                        return new NativeTypedArrayConstructor(toIndex(data));
                      if (isArrayBuffer(data))
                        return $length !== undefined
                          ? new NativeTypedArrayConstructor(
                              data,
                              toOffset(typedArrayOffset, BYTES),
                              $length
                            )
                          : typedArrayOffset !== undefined
                            ? new NativeTypedArrayConstructor(
                                data,
                                toOffset(typedArrayOffset, BYTES)
                              )
                            : new NativeTypedArrayConstructor(data);
                      if (isTypedArray(data)) return fromList(TypedArrayConstructor, data);
                      return typedArrayFrom.call(TypedArrayConstructor, data);
                    })(),
                    dummy,
                    TypedArrayConstructor
                  );
                });

                if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);
                forEach(getOwnPropertyNames(NativeTypedArrayConstructor), function(key) {
                  if (!(key in TypedArrayConstructor)) {
                    createNonEnumerableProperty(
                      TypedArrayConstructor,
                      key,
                      NativeTypedArrayConstructor[key]
                    );
                  }
                });
                TypedArrayConstructor.prototype = TypedArrayConstructorPrototype;
              }

              if (TypedArrayConstructorPrototype.constructor !== TypedArrayConstructor) {
                createNonEnumerableProperty(
                  TypedArrayConstructorPrototype,
                  'constructor',
                  TypedArrayConstructor
                );
              }

              if (TYPED_ARRAY_TAG) {
                createNonEnumerableProperty(
                  TypedArrayConstructorPrototype,
                  TYPED_ARRAY_TAG,
                  CONSTRUCTOR_NAME
                );
              }

              exported[CONSTRUCTOR_NAME] = TypedArrayConstructor;

              $(
                {
                  global: true,
                  forced: TypedArrayConstructor != NativeTypedArrayConstructor,
                  sham: !NATIVE_ARRAY_BUFFER_VIEWS
                },
                exported
              );

              if (!(BYTES_PER_ELEMENT in TypedArrayConstructor)) {
                createNonEnumerableProperty(
                  TypedArrayConstructor,
                  BYTES_PER_ELEMENT,
                  BYTES
                );
              }

              if (!(BYTES_PER_ELEMENT in TypedArrayConstructorPrototype)) {
                createNonEnumerableProperty(
                  TypedArrayConstructorPrototype,
                  BYTES_PER_ELEMENT,
                  BYTES
                );
              }

              setSpecies(CONSTRUCTOR_NAME);
            };
          } else
            module.exports = function() {
              /* empty */
            };
        },
        {
          '../internals/an-instance': 27,
          '../internals/array-buffer': 31,
          '../internals/array-buffer-view-core': 30,
          '../internals/array-iteration': 37,
          '../internals/classof': 47,
          '../internals/create-non-enumerable-property': 55,
          '../internals/create-property-descriptor': 56,
          '../internals/descriptors': 60,
          '../internals/export': 67,
          '../internals/global': 76,
          '../internals/has': 77,
          '../internals/inherit-if-required': 84,
          '../internals/internal-state': 87,
          '../internals/is-object': 91,
          '../internals/object-create': 107,
          '../internals/object-define-property': 109,
          '../internals/object-get-own-property-descriptor': 110,
          '../internals/object-get-own-property-names': 112,
          '../internals/object-set-prototype-of': 118,
          '../internals/set-species': 133,
          '../internals/to-index': 148,
          '../internals/to-length': 151,
          '../internals/to-offset': 153,
          '../internals/to-primitive': 155,
          '../internals/typed-array-constructors-require-wrappers': 158,
          '../internals/typed-array-from': 159
        }
      ],
      158: [
        function(_dereq_, module, exports) {
          /* eslint-disable no-new */
          var global = _dereq_('../internals/global');
          var fails = _dereq_('../internals/fails');
          var checkCorrectnessOfIteration = _dereq_(
            '../internals/check-correctness-of-iteration'
          );
          var NATIVE_ARRAY_BUFFER_VIEWS = _dereq_('../internals/array-buffer-view-core')
            .NATIVE_ARRAY_BUFFER_VIEWS;

          var ArrayBuffer = global.ArrayBuffer;
          var Int8Array = global.Int8Array;

          module.exports =
            !NATIVE_ARRAY_BUFFER_VIEWS ||
            !fails(function() {
              Int8Array(1);
            }) ||
            !fails(function() {
              new Int8Array(-1);
            }) ||
            !checkCorrectnessOfIteration(function(iterable) {
              new Int8Array();
              new Int8Array(null);
              new Int8Array(1.5);
              new Int8Array(iterable);
            }, true) ||
            fails(function() {
              // Safari (11+) bug - a reason why even Safari 13 should load a typed array polyfill
              return new Int8Array(new ArrayBuffer(2), 1, undefined).length !== 1;
            });
        },
        {
          '../internals/array-buffer-view-core': 30,
          '../internals/check-correctness-of-iteration': 45,
          '../internals/fails': 68,
          '../internals/global': 76
        }
      ],
      159: [
        function(_dereq_, module, exports) {
          var toObject = _dereq_('../internals/to-object');
          var toLength = _dereq_('../internals/to-length');
          var getIteratorMethod = _dereq_('../internals/get-iterator-method');
          var isArrayIteratorMethod = _dereq_('../internals/is-array-iterator-method');
          var bind = _dereq_('../internals/function-bind-context');
          var aTypedArrayConstructor = _dereq_('../internals/array-buffer-view-core')
            .aTypedArrayConstructor;

          module.exports = function from(source /* , mapfn, thisArg */) {
            var O = toObject(source);
            var argumentsLength = arguments.length;
            var mapfn = argumentsLength > 1 ? arguments[1] : undefined;
            var mapping = mapfn !== undefined;
            var iteratorMethod = getIteratorMethod(O);
            var i, length, result, step, iterator, next;
            if (iteratorMethod != undefined && !isArrayIteratorMethod(iteratorMethod)) {
              iterator = iteratorMethod.call(O);
              next = iterator.next;
              O = [];
              while (!(step = next.call(iterator)).done) {
                O.push(step.value);
              }
            }
            if (mapping && argumentsLength > 2) {
              mapfn = bind(mapfn, arguments[2], 2);
            }
            length = toLength(O.length);
            result = new (aTypedArrayConstructor(this))(length);
            for (i = 0; length > i; i++) {
              result[i] = mapping ? mapfn(O[i], i) : O[i];
            }
            return result;
          };
        },
        {
          '../internals/array-buffer-view-core': 30,
          '../internals/function-bind-context': 71,
          '../internals/get-iterator-method': 74,
          '../internals/is-array-iterator-method': 88,
          '../internals/to-length': 151,
          '../internals/to-object': 152
        }
      ],
      160: [
        function(_dereq_, module, exports) {
          var id = 0;
          var postfix = Math.random();

          module.exports = function(key) {
            return (
              'Symbol(' +
              String(key === undefined ? '' : key) +
              ')_' +
              (++id + postfix).toString(36)
            );
          };
        },
        {}
      ],
      161: [
        function(_dereq_, module, exports) {
          var NATIVE_SYMBOL = _dereq_('../internals/native-symbol');

          module.exports =
            NATIVE_SYMBOL &&
            // eslint-disable-next-line no-undef
            !Symbol.sham &&
            // eslint-disable-next-line no-undef
            typeof Symbol.iterator == 'symbol';
        },
        { '../internals/native-symbol': 100 }
      ],
      162: [
        function(_dereq_, module, exports) {
          var wellKnownSymbol = _dereq_('../internals/well-known-symbol');

          exports.f = wellKnownSymbol;
        },
        { '../internals/well-known-symbol': 163 }
      ],
      163: [
        function(_dereq_, module, exports) {
          var global = _dereq_('../internals/global');
          var shared = _dereq_('../internals/shared');
          var has = _dereq_('../internals/has');
          var uid = _dereq_('../internals/uid');
          var NATIVE_SYMBOL = _dereq_('../internals/native-symbol');
          var USE_SYMBOL_AS_UID = _dereq_('../internals/use-symbol-as-uid');

          var WellKnownSymbolsStore = shared('wks');
          var Symbol = global.Symbol;
          var createWellKnownSymbol = USE_SYMBOL_AS_UID
            ? Symbol
            : (Symbol && Symbol.withoutSetter) || uid;

          module.exports = function(name) {
            if (!has(WellKnownSymbolsStore, name)) {
              if (NATIVE_SYMBOL && has(Symbol, name))
                WellKnownSymbolsStore[name] = Symbol[name];
              else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);
            }
            return WellKnownSymbolsStore[name];
          };
        },
        {
          '../internals/global': 76,
          '../internals/has': 77,
          '../internals/native-symbol': 100,
          '../internals/shared': 137,
          '../internals/uid': 160,
          '../internals/use-symbol-as-uid': 161
        }
      ],
      164: [
        function(_dereq_, module, exports) {
          // a string of all valid unicode whitespaces
          // eslint-disable-next-line max-len
          module.exports =
            '\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF';
        },
        {}
      ],
      165: [
        function(_dereq_, module, exports) {
          'use strict';
          var $ = _dereq_('../internals/export');
          var global = _dereq_('../internals/global');
          var arrayBufferModule = _dereq_('../internals/array-buffer');
          var setSpecies = _dereq_('../internals/set-species');

          var ARRAY_BUFFER = 'ArrayBuffer';
          var ArrayBuffer = arrayBufferModule[ARRAY_BUFFER];
          var NativeArrayBuffer = global[ARRAY_BUFFER];

          // `ArrayBuffer` constructor
          // https://tc39.github.io/ecma262/#sec-arraybuffer-constructor
          $(
            { global: true, forced: NativeArrayBuffer !== ArrayBuffer },
            {
              ArrayBuffer: ArrayBuffer
            }
          );

          setSpecies(ARRAY_BUFFER);
        },
        {
          '../internals/array-buffer': 31,
          '../internals/export': 67,
          '../internals/global': 76,
          '../internals/set-species': 133
        }
      ],
      166: [
        function(_dereq_, module, exports) {
          'use strict';
          var $ = _dereq_('../internals/export');
          var fails = _dereq_('../internals/fails');
          var isArray = _dereq_('../internals/is-array');
          var isObject = _dereq_('../internals/is-object');
          var toObject = _dereq_('../internals/to-object');
          var toLength = _dereq_('../internals/to-length');
          var createProperty = _dereq_('../internals/create-property');
          var arraySpeciesCreate = _dereq_('../internals/array-species-create');
          var arrayMethodHasSpeciesSupport = _dereq_(
            '../internals/array-method-has-species-support'
          );
          var wellKnownSymbol = _dereq_('../internals/well-known-symbol');
          var V8_VERSION = _dereq_('../internals/engine-v8-version');

          var IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');
          var MAX_SAFE_INTEGER = 0x1fffffffffffff;
          var MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';

          // We can't use this feature detection in V8 since it causes
          // deoptimization and serious performance degradation
          // https://github.com/zloirock/core-js/issues/679
          var IS_CONCAT_SPREADABLE_SUPPORT =
            V8_VERSION >= 51 ||
            !fails(function() {
              var array = [];
              array[IS_CONCAT_SPREADABLE] = false;
              return array.concat()[0] !== array;
            });

          var SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');

          var isConcatSpreadable = function(O) {
            if (!isObject(O)) return false;
            var spreadable = O[IS_CONCAT_SPREADABLE];
            return spreadable !== undefined ? !!spreadable : isArray(O);
          };

          var FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;

          // `Array.prototype.concat` method
          // https://tc39.github.io/ecma262/#sec-array.prototype.concat
          // with adding support of @@isConcatSpreadable and @@species
          $(
            { target: 'Array', proto: true, forced: FORCED },
            {
              concat: function concat(arg) {
                // eslint-disable-line no-unused-vars
                var O = toObject(this);
                var A = arraySpeciesCreate(O, 0);
                var n = 0;
                var i, k, length, len, E;
                for (i = -1, length = arguments.length; i < length; i++) {
                  E = i === -1 ? O : arguments[i];
                  if (isConcatSpreadable(E)) {
                    len = toLength(E.length);
                    if (n + len > MAX_SAFE_INTEGER)
                      throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);
                    for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);
                  } else {
                    if (n >= MAX_SAFE_INTEGER)
                      throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);
                    createProperty(A, n++, E);
                  }
                }
                A.length = n;
                return A;
              }
            }
          );
        },
        {
          '../internals/array-method-has-species-support': 39,
          '../internals/array-species-create': 43,
          '../internals/create-property': 57,
          '../internals/engine-v8-version': 65,
          '../internals/export': 67,
          '../internals/fails': 68,
          '../internals/is-array': 89,
          '../internals/is-object': 91,
          '../internals/to-length': 151,
          '../internals/to-object': 152,
          '../internals/well-known-symbol': 163
        }
      ],
      167: [
        function(_dereq_, module, exports) {
          'use strict';
          var $ = _dereq_('../internals/export');
          var $every = _dereq_('../internals/array-iteration').every;
          var arrayMethodIsStrict = _dereq_('../internals/array-method-is-strict');
          var arrayMethodUsesToLength = _dereq_('../internals/array-method-uses-to-length');

          var STRICT_METHOD = arrayMethodIsStrict('every');
          var USES_TO_LENGTH = arrayMethodUsesToLength('every');

          // `Array.prototype.every` method
          // https://tc39.github.io/ecma262/#sec-array.prototype.every
          $(
            { target: 'Array', proto: true, forced: !STRICT_METHOD || !USES_TO_LENGTH },
            {
              every: function every(callbackfn /* , thisArg */) {
                return $every(
                  this,
                  callbackfn,
                  arguments.length > 1 ? arguments[1] : undefined
                );
              }
            }
          );
        },
        {
          '../internals/array-iteration': 37,
          '../internals/array-method-is-strict': 40,
          '../internals/array-method-uses-to-length': 41,
          '../internals/export': 67
        }
      ],
      168: [
        function(_dereq_, module, exports) {
          var $ = _dereq_('../internals/export');
          var fill = _dereq_('../internals/array-fill');
          var addToUnscopables = _dereq_('../internals/add-to-unscopables');

          // `Array.prototype.fill` method
          // https://tc39.github.io/ecma262/#sec-array.prototype.fill
          $(
            { target: 'Array', proto: true },
            {
              fill: fill
            }
          );

          // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables
          addToUnscopables('fill');
        },
        {
          '../internals/add-to-unscopables': 25,
          '../internals/array-fill': 33,
          '../internals/export': 67
        }
      ],
      169: [
        function(_dereq_, module, exports) {
          'use strict';
          var $ = _dereq_('../internals/export');
          var $filter = _dereq_('../internals/array-iteration').filter;
          var arrayMethodHasSpeciesSupport = _dereq_(
            '../internals/array-method-has-species-support'
          );
          var arrayMethodUsesToLength = _dereq_('../internals/array-method-uses-to-length');

          var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');
          // Edge 14- issue
          var USES_TO_LENGTH = arrayMethodUsesToLength('filter');

          // `Array.prototype.filter` method
          // https://tc39.github.io/ecma262/#sec-array.prototype.filter
          // with adding support of @@species
          $(
            {
              target: 'Array',
              proto: true,
              forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH
            },
            {
              filter: function filter(callbackfn /* , thisArg */) {
                return $filter(
                  this,
                  callbackfn,
                  arguments.length > 1 ? arguments[1] : undefined
                );
              }
            }
          );
        },
        {
          '../internals/array-iteration': 37,
          '../internals/array-method-has-species-support': 39,
          '../internals/array-method-uses-to-length': 41,
          '../internals/export': 67
        }
      ],
      170: [
        function(_dereq_, module, exports) {
          'use strict';
          var $ = _dereq_('../internals/export');
          var forEach = _dereq_('../internals/array-for-each');

          // `Array.prototype.forEach` method
          // https://tc39.github.io/ecma262/#sec-array.prototype.foreach
          $(
            { target: 'Array', proto: true, forced: [].forEach != forEach },
            {
              forEach: forEach
            }
          );
        },
        { '../internals/array-for-each': 34, '../internals/export': 67 }
      ],
      171: [
        function(_dereq_, module, exports) {
          var $ = _dereq_('../internals/export');
          var from = _dereq_('../internals/array-from');
          var checkCorrectnessOfIteration = _dereq_(
            '../internals/check-correctness-of-iteration'
          );

          var INCORRECT_ITERATION = !checkCorrectnessOfIteration(function(iterable) {
            Array.from(iterable);
          });

          // `Array.from` method
          // https://tc39.github.io/ecma262/#sec-array.from
          $(
            { target: 'Array', stat: true, forced: INCORRECT_ITERATION },
            {
              from: from
            }
          );
        },
        {
          '../internals/array-from': 35,
          '../internals/check-correctness-of-iteration': 45,
          '../internals/export': 67
        }
      ],
      172: [
        function(_dereq_, module, exports) {
          'use strict';
          var $ = _dereq_('../internals/export');
          var $includes = _dereq_('../internals/array-includes').includes;
          var addToUnscopables = _dereq_('../internals/add-to-unscopables');
          var arrayMethodUsesToLength = _dereq_('../internals/array-method-uses-to-length');

          var USES_TO_LENGTH = arrayMethodUsesToLength('indexOf', {
            ACCESSORS: true,
            1: 0
          });

          // `Array.prototype.includes` method
          // https://tc39.github.io/ecma262/#sec-array.prototype.includes
          $(
            { target: 'Array', proto: true, forced: !USES_TO_LENGTH },
            {
              includes: function includes(el /* , fromIndex = 0 */) {
                return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);
              }
            }
          );

          // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables
          addToUnscopables('includes');
        },
        {
          '../internals/add-to-unscopables': 25,
          '../internals/array-includes': 36,
          '../internals/array-method-uses-to-length': 41,
          '../internals/export': 67
        }
      ],
      173: [
        function(_dereq_, module, exports) {
          'use strict';
          var $ = _dereq_('../internals/export');
          var $indexOf = _dereq_('../internals/array-includes').indexOf;
          var arrayMethodIsStrict = _dereq_('../internals/array-method-is-strict');
          var arrayMethodUsesToLength = _dereq_('../internals/array-method-uses-to-length');

          var nativeIndexOf = [].indexOf;

          var NEGATIVE_ZERO = !!nativeIndexOf && 1 / [1].indexOf(1, -0) < 0;
          var STRICT_METHOD = arrayMethodIsStrict('indexOf');
          var USES_TO_LENGTH = arrayMethodUsesToLength('indexOf', {
            ACCESSORS: true,
            1: 0
          });

          // `Array.prototype.indexOf` method
          // https://tc39.github.io/ecma262/#sec-array.prototype.indexof
          $(
            {
              target: 'Array',
              proto: true,
              forced: NEGATIVE_ZERO || !STRICT_METHOD || !USES_TO_LENGTH
            },
            {
              indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {
                return NEGATIVE_ZERO
                  ? // convert -0 to +0
                    nativeIndexOf.apply(this, arguments) || 0
                  : $indexOf(
                      this,
                      searchElement,
                      arguments.length > 1 ? arguments[1] : undefined
                    );
              }
            }
          );
        },
        {
          '../internals/array-includes': 36,
          '../internals/array-method-is-strict': 40,
          '../internals/array-method-uses-to-length': 41,
          '../internals/export': 67
        }
      ],
      174: [
        function(_dereq_, module, exports) {
          'use strict';
          var toIndexedObject = _dereq_('../internals/to-indexed-object');
          var addToUnscopables = _dereq_('../internals/add-to-unscopables');
          var Iterators = _dereq_('../internals/iterators');
          var InternalStateModule = _dereq_('../internals/internal-state');
          var defineIterator = _dereq_('../internals/define-iterator');

          var ARRAY_ITERATOR = 'Array Iterator';
          var setInternalState = InternalStateModule.set;
          var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);

          // `Array.prototype.entries` method
          // https://tc39.github.io/ecma262/#sec-array.prototype.entries
          // `Array.prototype.keys` method
          // https://tc39.github.io/ecma262/#sec-array.prototype.keys
          // `Array.prototype.values` method
          // https://tc39.github.io/ecma262/#sec-array.prototype.values
          // `Array.prototype[@@iterator]` method
          // https://tc39.github.io/ecma262/#sec-array.prototype-@@iterator
          // `CreateArrayIterator` internal method
          // https://tc39.github.io/ecma262/#sec-createarrayiterator
          module.exports = defineIterator(
            Array,
            'Array',
            function(iterated, kind) {
              setInternalState(this, {
                type: ARRAY_ITERATOR,
                target: toIndexedObject(iterated), // target
                index: 0, // next index
                kind: kind // kind
              });
              // `%ArrayIteratorPrototype%.next` method
              // https://tc39.github.io/ecma262/#sec-%arrayiteratorprototype%.next
            },
            function() {
              var state = getInternalState(this);
              var target = state.target;
              var kind = state.kind;
              var index = state.index++;
              if (!target || index >= target.length) {
                state.target = undefined;
                return { value: undefined, done: true };
              }
              if (kind == 'keys') return { value: index, done: false };
              if (kind == 'values') return { value: target[index], done: false };
              return { value: [index, target[index]], done: false };
            },
            'values'
          );

          // argumentsList[@@iterator] is %ArrayProto_values%
          // https://tc39.github.io/ecma262/#sec-createunmappedargumentsobject
          // https://tc39.github.io/ecma262/#sec-createmappedargumentsobject
          Iterators.Arguments = Iterators.Array;

          // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables
          addToUnscopables('keys');
          addToUnscopables('values');
          addToUnscopables('entries');
        },
        {
          '../internals/add-to-unscopables': 25,
          '../internals/define-iterator': 58,
          '../internals/internal-state': 87,
          '../internals/iterators': 96,
          '../internals/to-indexed-object': 149
        }
      ],
      175: [
        function(_dereq_, module, exports) {
          'use strict';
          var $ = _dereq_('../internals/export');
          var IndexedObject = _dereq_('../internals/indexed-object');
          var toIndexedObject = _dereq_('../internals/to-indexed-object');
          var arrayMethodIsStrict = _dereq_('../internals/array-method-is-strict');

          var nativeJoin = [].join;

          var ES3_STRINGS = IndexedObject != Object;
          var STRICT_METHOD = arrayMethodIsStrict('join', ',');

          // `Array.prototype.join` method
          // https://tc39.github.io/ecma262/#sec-array.prototype.join
          $(
            { target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD },
            {
              join: function join(separator) {
                return nativeJoin.call(
                  toIndexedObject(this),
                  separator === undefined ? ',' : separator
                );
              }
            }
          );
        },
        {
          '../internals/array-method-is-strict': 40,
          '../internals/export': 67,
          '../internals/indexed-object': 83,
          '../internals/to-indexed-object': 149
        }
      ],
      176: [
        function(_dereq_, module, exports) {
          var $ = _dereq_('../internals/export');
          var lastIndexOf = _dereq_('../internals/array-last-index-of');

          // `Array.prototype.lastIndexOf` method
          // https://tc39.github.io/ecma262/#sec-array.prototype.lastindexof
          $(
            { target: 'Array', proto: true, forced: lastIndexOf !== [].lastIndexOf },
            {
              lastIndexOf: lastIndexOf
            }
          );
        },
        { '../internals/array-last-index-of': 38, '../internals/export': 67 }
      ],
      177: [
        function(_dereq_, module, exports) {
          'use strict';
          var $ = _dereq_('../internals/export');
          var $map = _dereq_('../internals/array-iteration').map;
          var arrayMethodHasSpeciesSupport = _dereq_(
            '../internals/array-method-has-species-support'
          );
          var arrayMethodUsesToLength = _dereq_('../internals/array-method-uses-to-length');

          var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');
          // FF49- issue
          var USES_TO_LENGTH = arrayMethodUsesToLength('map');

          // `Array.prototype.map` method
          // https://tc39.github.io/ecma262/#sec-array.prototype.map
          // with adding support of @@species
          $(
            {
              target: 'Array',
              proto: true,
              forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH
            },
            {
              map: function map(callbackfn /* , thisArg */) {
                return $map(
                  this,
                  callbackfn,
                  arguments.length > 1 ? arguments[1] : undefined
                );
              }
            }
          );
        },
        {
          '../internals/array-iteration': 37,
          '../internals/array-method-has-species-support': 39,
          '../internals/array-method-uses-to-length': 41,
          '../internals/export': 67
        }
      ],
      178: [
        function(_dereq_, module, exports) {
          'use strict';
          var $ = _dereq_('../internals/export');
          var isObject = _dereq_('../internals/is-object');
          var isArray = _dereq_('../internals/is-array');
          var toAbsoluteIndex = _dereq_('../internals/to-absolute-index');
          var toLength = _dereq_('../internals/to-length');
          var toIndexedObject = _dereq_('../internals/to-indexed-object');
          var createProperty = _dereq_('../internals/create-property');
          var wellKnownSymbol = _dereq_('../internals/well-known-symbol');
          var arrayMethodHasSpeciesSupport = _dereq_(
            '../internals/array-method-has-species-support'
          );
          var arrayMethodUsesToLength = _dereq_('../internals/array-method-uses-to-length');

          var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');
          var USES_TO_LENGTH = arrayMethodUsesToLength('slice', {
            ACCESSORS: true,
            0: 0,
            1: 2
          });

          var SPECIES = wellKnownSymbol('species');
          var nativeSlice = [].slice;
          var max = Math.max;

          // `Array.prototype.slice` method
          // https://tc39.github.io/ecma262/#sec-array.prototype.slice
          // fallback for not array-like ES3 strings and DOM objects
          $(
            {
              target: 'Array',
              proto: true,
              forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH
            },
            {
              slice: function slice(start, end) {
                var O = toIndexedObject(this);
                var length = toLength(O.length);
                var k = toAbsoluteIndex(start, length);
                var fin = toAbsoluteIndex(end === undefined ? length : end, length);
                // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible
                var Constructor, result, n;
                if (isArray(O)) {
                  Constructor = O.constructor;
                  // cross-realm fallback
                  if (
                    typeof Constructor == 'function' &&
                    (Constructor === Array || isArray(Constructor.prototype))
                  ) {
                    Constructor = undefined;
                  } else if (isObject(Constructor)) {
                    Constructor = Constructor[SPECIES];
                    if (Constructor === null) Constructor = undefined;
                  }
                  if (Constructor === Array || Constructor === undefined) {
                    return nativeSlice.call(O, k, fin);
                  }
                }
                result = new (Constructor === undefined ? Array : Constructor)(
                  max(fin - k, 0)
                );
                for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);
                result.length = n;
                return result;
              }
            }
          );
        },
        {
          '../internals/array-method-has-species-support': 39,
          '../internals/array-method-uses-to-length': 41,
          '../internals/create-property': 57,
          '../internals/export': 67,
          '../internals/is-array': 89,
          '../internals/is-object': 91,
          '../internals/to-absolute-index': 147,
          '../internals/to-indexed-object': 149,
          '../internals/to-length': 151,
          '../internals/well-known-symbol': 163
        }
      ],
      179: [
        function(_dereq_, module, exports) {
          'use strict';
          var $ = _dereq_('../internals/export');
          var $some = _dereq_('../internals/array-iteration').some;
          var arrayMethodIsStrict = _dereq_('../internals/array-method-is-strict');
          var arrayMethodUsesToLength = _dereq_('../internals/array-method-uses-to-length');

          var STRICT_METHOD = arrayMethodIsStrict('some');
          var USES_TO_LENGTH = arrayMethodUsesToLength('some');

          // `Array.prototype.some` method
          // https://tc39.github.io/ecma262/#sec-array.prototype.some
          $(
            { target: 'Array', proto: true, forced: !STRICT_METHOD || !USES_TO_LENGTH },
            {
              some: function some(callbackfn /* , thisArg */) {
                return $some(
                  this,
                  callbackfn,
                  arguments.length > 1 ? arguments[1] : undefined
                );
              }
            }
          );
        },
        {
          '../internals/array-iteration': 37,
          '../internals/array-method-is-strict': 40,
          '../internals/array-method-uses-to-length': 41,
          '../internals/export': 67
        }
      ],
      180: [
        function(_dereq_, module, exports) {
          'use strict';
          var $ = _dereq_('../internals/export');
          var toAbsoluteIndex = _dereq_('../internals/to-absolute-index');
          var toInteger = _dereq_('../internals/to-integer');
          var toLength = _dereq_('../internals/to-length');
          var toObject = _dereq_('../internals/to-object');
          var arraySpeciesCreate = _dereq_('../internals/array-species-create');
          var createProperty = _dereq_('../internals/create-property');
          var arrayMethodHasSpeciesSupport = _dereq_(
            '../internals/array-method-has-species-support'
          );
          var arrayMethodUsesToLength = _dereq_('../internals/array-method-uses-to-length');

          var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice');
          var USES_TO_LENGTH = arrayMethodUsesToLength('splice', {
            ACCESSORS: true,
            0: 0,
            1: 2
          });

          var max = Math.max;
          var min = Math.min;
          var MAX_SAFE_INTEGER = 0x1fffffffffffff;
          var MAXIMUM_ALLOWED_LENGTH_EXCEEDED = 'Maximum allowed length exceeded';

          // `Array.prototype.splice` method
          // https://tc39.github.io/ecma262/#sec-array.prototype.splice
          // with adding support of @@species
          $(
            {
              target: 'Array',
              proto: true,
              forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH
            },
            {
              splice: function splice(start, deleteCount /* , ...items */) {
                var O = toObject(this);
                var len = toLength(O.length);
                var actualStart = toAbsoluteIndex(start, len);
                var argumentsLength = arguments.length;
                var insertCount, actualDeleteCount, A, k, from, to;
                if (argumentsLength === 0) {
                  insertCount = actualDeleteCount = 0;
                } else if (argumentsLength === 1) {
                  insertCount = 0;
                  actualDeleteCount = len - actualStart;
                } else {
                  insertCount = argumentsLength - 2;
                  actualDeleteCount = min(
                    max(toInteger(deleteCount), 0),
                    len - actualStart
                  );
                }
                if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER) {
                  throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED);
                }
                A = arraySpeciesCreate(O, actualDeleteCount);
                for (k = 0; k < actualDeleteCount; k++) {
                  from = actualStart + k;
                  if (from in O) createProperty(A, k, O[from]);
                }
                A.length = actualDeleteCount;
                if (insertCount < actualDeleteCount) {
                  for (k = actualStart; k < len - actualDeleteCount; k++) {
                    from = k + actualDeleteCount;
                    to = k + insertCount;
                    if (from in O) O[to] = O[from];
                    else delete O[to];
                  }
                  for (k = len; k > len - actualDeleteCount + insertCount; k--)
                    delete O[k - 1];
                } else if (insertCount > actualDeleteCount) {
                  for (k = len - actualDeleteCount; k > actualStart; k--) {
                    from = k + actualDeleteCount - 1;
                    to = k + insertCount - 1;
                    if (from in O) O[to] = O[from];
                    else delete O[to];
                  }
                }
                for (k = 0; k < insertCount; k++) {
                  O[k + actualStart] = arguments[k + 2];
                }
                O.length = len - actualDeleteCount + insertCount;
                return A;
              }
            }
          );
        },
        {
          '../internals/array-method-has-species-support': 39,
          '../internals/array-method-uses-to-length': 41,
          '../internals/array-species-create': 43,
          '../internals/create-property': 57,
          '../internals/export': 67,
          '../internals/to-absolute-index': 147,
          '../internals/to-integer': 150,
          '../internals/to-length': 151,
          '../internals/to-object': 152
        }
      ],
      181: [
        function(_dereq_, module, exports) {
          var DESCRIPTORS = _dereq_('../internals/descriptors');
          var defineProperty = _dereq_('../internals/object-define-property').f;

          var FunctionPrototype = Function.prototype;
          var FunctionPrototypeToString = FunctionPrototype.toString;
          var nameRE = /^\s*function ([^ (]*)/;
          var NAME = 'name';

          // Function instances `.name` property
          // https://tc39.github.io/ecma262/#sec-function-instances-name
          if (DESCRIPTORS && !(NAME in FunctionPrototype)) {
            defineProperty(FunctionPrototype, NAME, {
              configurable: true,
              get: function() {
                try {
                  return FunctionPrototypeToString.call(this).match(nameRE)[1];
                } catch (error) {
                  return '';
                }
              }
            });
          }
        },
        { '../internals/descriptors': 60, '../internals/object-define-property': 109 }
      ],
      182: [
        function(_dereq_, module, exports) {
          'use strict';
          var collection = _dereq_('../internals/collection');
          var collectionStrong = _dereq_('../internals/collection-strong');

          // `Map` constructor
          // https://tc39.github.io/ecma262/#sec-map-objects
          module.exports = collection(
            'Map',
            function(init) {
              return function Map() {
                return init(this, arguments.length ? arguments[0] : undefined);
              };
            },
            collectionStrong
          );
        },
        { '../internals/collection': 49, '../internals/collection-strong': 48 }
      ],
      183: [
        function(_dereq_, module, exports) {
          var $ = _dereq_('../internals/export');

          var $hypot = Math.hypot;
          var abs = Math.abs;
          var sqrt = Math.sqrt;

          // Chrome 77 bug
          // https://bugs.chromium.org/p/v8/issues/detail?id=9546
          var BUGGY = !!$hypot && $hypot(Infinity, NaN) !== Infinity;

          // `Math.hypot` method
          // https://tc39.github.io/ecma262/#sec-math.hypot
          $(
            { target: 'Math', stat: true, forced: BUGGY },
            {
              hypot: function hypot(value1, value2) {
                // eslint-disable-line no-unused-vars
                var sum = 0;
                var i = 0;
                var aLen = arguments.length;
                var larg = 0;
                var arg, div;
                while (i < aLen) {
                  arg = abs(arguments[i++]);
                  if (larg < arg) {
                    div = larg / arg;
                    sum = sum * div * div + 1;
                    larg = arg;
                  } else if (arg > 0) {
                    div = arg / larg;
                    sum += div * div;
                  } else sum += arg;
                }
                return larg === Infinity ? Infinity : larg * sqrt(sum);
              }
            }
          );
        },
        { '../internals/export': 67 }
      ],
      184: [
        function(_dereq_, module, exports) {
          var $ = _dereq_('../internals/export');
          var sign = _dereq_('../internals/math-sign');

          // `Math.sign` method
          // https://tc39.github.io/ecma262/#sec-math.sign
          $(
            { target: 'Math', stat: true },
            {
              sign: sign
            }
          );
        },
        { '../internals/export': 67, '../internals/math-sign': 97 }
      ],
      185: [
        function(_dereq_, module, exports) {
          'use strict';
          var DESCRIPTORS = _dereq_('../internals/descriptors');
          var global = _dereq_('../internals/global');
          var isForced = _dereq_('../internals/is-forced');
          var redefine = _dereq_('../internals/redefine');
          var has = _dereq_('../internals/has');
          var classof = _dereq_('../internals/classof-raw');
          var inheritIfRequired = _dereq_('../internals/inherit-if-required');
          var toPrimitive = _dereq_('../internals/to-primitive');
          var fails = _dereq_('../internals/fails');
          var create = _dereq_('../internals/object-create');
          var getOwnPropertyNames = _dereq_('../internals/object-get-own-property-names').f;
          var getOwnPropertyDescriptor = _dereq_(
            '../internals/object-get-own-property-descriptor'
          ).f;
          var defineProperty = _dereq_('../internals/object-define-property').f;
          var trim = _dereq_('../internals/string-trim').trim;

          var NUMBER = 'Number';
          var NativeNumber = global[NUMBER];
          var NumberPrototype = NativeNumber.prototype;

          // Opera ~12 has broken Object#toString
          var BROKEN_CLASSOF = classof(create(NumberPrototype)) == NUMBER;

          // `ToNumber` abstract operation
          // https://tc39.github.io/ecma262/#sec-tonumber
          var toNumber = function(argument) {
            var it = toPrimitive(argument, false);
            var first, third, radix, maxCode, digits, length, index, code;
            if (typeof it == 'string' && it.length > 2) {
              it = trim(it);
              first = it.charCodeAt(0);
              if (first === 43 || first === 45) {
                third = it.charCodeAt(2);
                if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix
              } else if (first === 48) {
                switch (it.charCodeAt(1)) {
                  case 66:
                  case 98:
                    radix = 2;
                    maxCode = 49;
                    break; // fast equal of /^0b[01]+$/i
                  case 79:
                  case 111:
                    radix = 8;
                    maxCode = 55;
                    break; // fast equal of /^0o[0-7]+$/i
                  default:
                    return +it;
                }
                digits = it.slice(2);
                length = digits.length;
                for (index = 0; index < length; index++) {
                  code = digits.charCodeAt(index);
                  // parseInt parses a string to a first unavailable symbol
                  // but ToNumber should return NaN if a string contains unavailable symbols
                  if (code < 48 || code > maxCode) return NaN;
                }
                return parseInt(digits, radix);
              }
            }
            return +it;
          };

          // `Number` constructor
          // https://tc39.github.io/ecma262/#sec-number-constructor
          if (
            isForced(
              NUMBER,
              !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1')
            )
          ) {
            var NumberWrapper = function Number(value) {
              var it = arguments.length < 1 ? 0 : value;
              var dummy = this;
              return dummy instanceof NumberWrapper &&
                // check on 1..constructor(foo) case
                (BROKEN_CLASSOF
                  ? fails(function() {
                      NumberPrototype.valueOf.call(dummy);
                    })
                  : classof(dummy) != NUMBER)
                ? inheritIfRequired(new NativeNumber(toNumber(it)), dummy, NumberWrapper)
                : toNumber(it);
            };
            for (
              var keys = DESCRIPTORS
                  ? getOwnPropertyNames(NativeNumber)
                  : // ES3:
                    (
                      'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +
                      // ES2015 (in case, if modules with ES2015 Number statics required before):
                      'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +
                      'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'
                    ).split(','),
                j = 0,
                key;
              keys.length > j;
              j++
            ) {
              if (has(NativeNumber, (key = keys[j])) && !has(NumberWrapper, key)) {
                defineProperty(
                  NumberWrapper,
                  key,
                  getOwnPropertyDescriptor(NativeNumber, key)
                );
              }
            }
            NumberWrapper.prototype = NumberPrototype;
            NumberPrototype.constructor = NumberWrapper;
            redefine(global, NUMBER, NumberWrapper);
          }
        },
        {
          '../internals/classof-raw': 46,
          '../internals/descriptors': 60,
          '../internals/fails': 68,
          '../internals/global': 76,
          '../internals/has': 77,
          '../internals/inherit-if-required': 84,
          '../internals/is-forced': 90,
          '../internals/object-create': 107,
          '../internals/object-define-property': 109,
          '../internals/object-get-own-property-descriptor': 110,
          '../internals/object-get-own-property-names': 112,
          '../internals/redefine': 125,
          '../internals/string-trim': 144,
          '../internals/to-primitive': 155
        }
      ],
      186: [
        function(_dereq_, module, exports) {
          var $ = _dereq_('../internals/export');
          var numberIsFinite = _dereq_('../internals/number-is-finite');

          // `Number.isFinite` method
          // https://tc39.github.io/ecma262/#sec-number.isfinite
          $({ target: 'Number', stat: true }, { isFinite: numberIsFinite });
        },
        { '../internals/export': 67, '../internals/number-is-finite': 105 }
      ],
      187: [
        function(_dereq_, module, exports) {
          'use strict';
          var $ = _dereq_('../internals/export');
          var toInteger = _dereq_('../internals/to-integer');
          var thisNumberValue = _dereq_('../internals/this-number-value');
          var repeat = _dereq_('../internals/string-repeat');
          var fails = _dereq_('../internals/fails');

          var nativeToFixed = (1.0).toFixed;
          var floor = Math.floor;

          var pow = function(x, n, acc) {
            return n === 0
              ? acc
              : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);
          };

          var log = function(x) {
            var n = 0;
            var x2 = x;
            while (x2 >= 4096) {
              n += 12;
              x2 /= 4096;
            }
            while (x2 >= 2) {
              n += 1;
              x2 /= 2;
            }
            return n;
          };

          var FORCED =
            (nativeToFixed &&
              ((0.00008).toFixed(3) !== '0.000' ||
                (0.9).toFixed(0) !== '1' ||
                (1.255).toFixed(2) !== '1.25' ||
                (1000000000000000128.0).toFixed(0) !== '1000000000000000128')) ||
            !fails(function() {
              // V8 ~ Android 4.3-
              nativeToFixed.call({});
            });

          // `Number.prototype.toFixed` method
          // https://tc39.github.io/ecma262/#sec-number.prototype.tofixed
          $(
            { target: 'Number', proto: true, forced: FORCED },
            {
              // eslint-disable-next-line max-statements
              toFixed: function toFixed(fractionDigits) {
                var number = thisNumberValue(this);
                var fractDigits = toInteger(fractionDigits);
                var data = [0, 0, 0, 0, 0, 0];
                var sign = '';
                var result = '0';
                var e, z, j, k;

                var multiply = function(n, c) {
                  var index = -1;
                  var c2 = c;
                  while (++index < 6) {
                    c2 += n * data[index];
                    data[index] = c2 % 1e7;
                    c2 = floor(c2 / 1e7);
                  }
                };

                var divide = function(n) {
                  var index = 6;
                  var c = 0;
                  while (--index >= 0) {
                    c += data[index];
                    data[index] = floor(c / n);
                    c = (c % n) * 1e7;
                  }
                };

                var dataToString = function() {
                  var index = 6;
                  var s = '';
                  while (--index >= 0) {
                    if (s !== '' || index === 0 || data[index] !== 0) {
                      var t = String(data[index]);
                      s = s === '' ? t : s + repeat.call('0', 7 - t.length) + t;
                    }
                  }
                  return s;
                };

                if (fractDigits < 0 || fractDigits > 20)
                  throw RangeError('Incorrect fraction digits');
                // eslint-disable-next-line no-self-compare
                if (number != number) return 'NaN';
                if (number <= -1e21 || number >= 1e21) return String(number);
                if (number < 0) {
                  sign = '-';
                  number = -number;
                }
                if (number > 1e-21) {
                  e = log(number * pow(2, 69, 1)) - 69;
                  z = e < 0 ? number * pow(2, -e, 1) : number / pow(2, e, 1);
                  z *= 0x10000000000000;
                  e = 52 - e;
                  if (e > 0) {
                    multiply(0, z);
                    j = fractDigits;
                    while (j >= 7) {
                      multiply(1e7, 0);
                      j -= 7;
                    }
                    multiply(pow(10, j, 1), 0);
                    j = e - 1;
                    while (j >= 23) {
                      divide(1 << 23);
                      j -= 23;
                    }
                    divide(1 << j);
                    multiply(1, 1);
                    divide(2);
                    result = dataToString();
                  } else {
                    multiply(0, z);
                    multiply(1 << -e, 0);
                    result = dataToString() + repeat.call('0', fractDigits);
                  }
                }
                if (fractDigits > 0) {
                  k = result.length;
                  result =
                    sign +
                    (k <= fractDigits
                      ? '0.' + repeat.call('0', fractDigits - k) + result
                      : result.slice(0, k - fractDigits) +
                        '.' +
                        result.slice(k - fractDigits));
                } else {
                  result = sign + result;
                }
                return result;
              }
            }
          );
        },
        {
          '../internals/export': 67,
          '../internals/fails': 68,
          '../internals/string-repeat': 142,
          '../internals/this-number-value': 146,
          '../internals/to-integer': 150
        }
      ],
      188: [
        function(_dereq_, module, exports) {
          var $ = _dereq_('../internals/export');
          var assign = _dereq_('../internals/object-assign');

          // `Object.assign` method
          // https://tc39.github.io/ecma262/#sec-object.assign
          $(
            { target: 'Object', stat: true, forced: Object.assign !== assign },
            {
              assign: assign
            }
          );
        },
        { '../internals/export': 67, '../internals/object-assign': 106 }
      ],
      189: [
        function(_dereq_, module, exports) {
          var $ = _dereq_('../internals/export');
          var fails = _dereq_('../internals/fails');
          var nativeGetOwnPropertyNames = _dereq_(
            '../internals/object-get-own-property-names-external'
          ).f;

          var FAILS_ON_PRIMITIVES = fails(function() {
            return !Object.getOwnPropertyNames(1);
          });

          // `Object.getOwnPropertyNames` method
          // https://tc39.github.io/ecma262/#sec-object.getownpropertynames
          $(
            { target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES },
            {
              getOwnPropertyNames: nativeGetOwnPropertyNames
            }
          );
        },
        {
          '../internals/export': 67,
          '../internals/fails': 68,
          '../internals/object-get-own-property-names-external': 111
        }
      ],
      190: [
        function(_dereq_, module, exports) {
          var $ = _dereq_('../internals/export');
          var fails = _dereq_('../internals/fails');
          var toObject = _dereq_('../internals/to-object');
          var nativeGetPrototypeOf = _dereq_('../internals/object-get-prototype-of');
          var CORRECT_PROTOTYPE_GETTER = _dereq_('../internals/correct-prototype-getter');

          var FAILS_ON_PRIMITIVES = fails(function() {
            nativeGetPrototypeOf(1);
          });

          // `Object.getPrototypeOf` method
          // https://tc39.github.io/ecma262/#sec-object.getprototypeof
          $(
            {
              target: 'Object',
              stat: true,
              forced: FAILS_ON_PRIMITIVES,
              sham: !CORRECT_PROTOTYPE_GETTER
            },
            {
              getPrototypeOf: function getPrototypeOf(it) {
                return nativeGetPrototypeOf(toObject(it));
              }
            }
          );
        },
        {
          '../internals/correct-prototype-getter': 52,
          '../internals/export': 67,
          '../internals/fails': 68,
          '../internals/object-get-prototype-of': 114,
          '../internals/to-object': 152
        }
      ],
      191: [
        function(_dereq_, module, exports) {
          var $ = _dereq_('../internals/export');
          var toObject = _dereq_('../internals/to-object');
          var nativeKeys = _dereq_('../internals/object-keys');
          var fails = _dereq_('../internals/fails');

          var FAILS_ON_PRIMITIVES = fails(function() {
            nativeKeys(1);
          });

          // `Object.keys` method
          // https://tc39.github.io/ecma262/#sec-object.keys
          $(
            { target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES },
            {
              keys: function keys(it) {
                return nativeKeys(toObject(it));
              }
            }
          );
        },
        {
          '../internals/export': 67,
          '../internals/fails': 68,
          '../internals/object-keys': 116,
          '../internals/to-object': 152
        }
      ],
      192: [
        function(_dereq_, module, exports) {
          var TO_STRING_TAG_SUPPORT = _dereq_('../internals/to-string-tag-support');
          var redefine = _dereq_('../internals/redefine');
          var toString = _dereq_('../internals/object-to-string');

          // `Object.prototype.toString` method
          // https://tc39.github.io/ecma262/#sec-object.prototype.tostring
          if (!TO_STRING_TAG_SUPPORT) {
            redefine(Object.prototype, 'toString', toString, { unsafe: true });
          }
        },
        {
          '../internals/object-to-string': 119,
          '../internals/redefine': 125,
          '../internals/to-string-tag-support': 156
        }
      ],
      193: [
        function(_dereq_, module, exports) {
          'use strict';
          var $ = _dereq_('../internals/export');
          var IS_PURE = _dereq_('../internals/is-pure');
          var global = _dereq_('../internals/global');
          var getBuiltIn = _dereq_('../internals/get-built-in');
          var NativePromise = _dereq_('../internals/native-promise-constructor');
          var redefine = _dereq_('../internals/redefine');
          var redefineAll = _dereq_('../internals/redefine-all');
          var setToStringTag = _dereq_('../internals/set-to-string-tag');
          var setSpecies = _dereq_('../internals/set-species');
          var isObject = _dereq_('../internals/is-object');
          var aFunction = _dereq_('../internals/a-function');
          var anInstance = _dereq_('../internals/an-instance');
          var classof = _dereq_('../internals/classof-raw');
          var inspectSource = _dereq_('../internals/inspect-source');
          var iterate = _dereq_('../internals/iterate');
          var checkCorrectnessOfIteration = _dereq_(
            '../internals/check-correctness-of-iteration'
          );
          var speciesConstructor = _dereq_('../internals/species-constructor');
          var task = _dereq_('../internals/task').set;
          var microtask = _dereq_('../internals/microtask');
          var promiseResolve = _dereq_('../internals/promise-resolve');
          var hostReportErrors = _dereq_('../internals/host-report-errors');
          var newPromiseCapabilityModule = _dereq_('../internals/new-promise-capability');
          var perform = _dereq_('../internals/perform');
          var InternalStateModule = _dereq_('../internals/internal-state');
          var isForced = _dereq_('../internals/is-forced');
          var wellKnownSymbol = _dereq_('../internals/well-known-symbol');
          var V8_VERSION = _dereq_('../internals/engine-v8-version');

          var SPECIES = wellKnownSymbol('species');
          var PROMISE = 'Promise';
          var getInternalState = InternalStateModule.get;
          var setInternalState = InternalStateModule.set;
          var getInternalPromiseState = InternalStateModule.getterFor(PROMISE);
          var PromiseConstructor = NativePromise;
          var TypeError = global.TypeError;
          var document = global.document;
          var process = global.process;
          var $fetch = getBuiltIn('fetch');
          var newPromiseCapability = newPromiseCapabilityModule.f;
          var newGenericPromiseCapability = newPromiseCapability;
          var IS_NODE = classof(process) == 'process';
          var DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);
          var UNHANDLED_REJECTION = 'unhandledrejection';
          var REJECTION_HANDLED = 'rejectionhandled';
          var PENDING = 0;
          var FULFILLED = 1;
          var REJECTED = 2;
          var HANDLED = 1;
          var UNHANDLED = 2;
          var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;

          var FORCED = isForced(PROMISE, function() {
            var GLOBAL_CORE_JS_PROMISE =
              inspectSource(PromiseConstructor) !== String(PromiseConstructor);
            if (!GLOBAL_CORE_JS_PROMISE) {
              // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables
              // https://bugs.chromium.org/p/chromium/issues/detail?id=830565
              // We can't detect it synchronously, so just check versions
              if (V8_VERSION === 66) return true;
              // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test
              if (!IS_NODE && typeof PromiseRejectionEvent != 'function') return true;
            }
            // We need Promise#finally in the pure version for preventing prototype pollution
            if (IS_PURE && !PromiseConstructor.prototype['finally']) return true;
            // We can't use @@species feature detection in V8 since it causes
            // deoptimization and performance degradation
            // https://github.com/zloirock/core-js/issues/679
            if (V8_VERSION >= 51 && /native code/.test(PromiseConstructor)) return false;
            // Detect correctness of subclassing with @@species support
            var promise = PromiseConstructor.resolve(1);
            var FakePromise = function(exec) {
              exec(
                function() {
                  /* empty */
                },
                function() {
                  /* empty */
                }
              );
            };
            var constructor = (promise.constructor = {});
            constructor[SPECIES] = FakePromise;
            return !(
              promise.then(function() {
                /* empty */
              }) instanceof FakePromise
            );
          });

          var INCORRECT_ITERATION =
            FORCED ||
            !checkCorrectnessOfIteration(function(iterable) {
              PromiseConstructor.all(iterable)['catch'](function() {
                /* empty */
              });
            });

          // helpers
          var isThenable = function(it) {
            var then;
            return isObject(it) && typeof (then = it.then) == 'function' ? then : false;
          };

          var notify = function(promise, state, isReject) {
            if (state.notified) return;
            state.notified = true;
            var chain = state.reactions;
            microtask(function() {
              var value = state.value;
              var ok = state.state == FULFILLED;
              var index = 0;
              // variable length - can't use forEach
              while (chain.length > index) {
                var reaction = chain[index++];
                var handler = ok ? reaction.ok : reaction.fail;
                var resolve = reaction.resolve;
                var reject = reaction.reject;
                var domain = reaction.domain;
                var result, then, exited;
                try {
                  if (handler) {
                    if (!ok) {
                      if (state.rejection === UNHANDLED) onHandleUnhandled(promise, state);
                      state.rejection = HANDLED;
                    }
                    if (handler === true) result = value;
                    else {
                      if (domain) domain.enter();
                      result = handler(value); // can throw
                      if (domain) {
                        domain.exit();
                        exited = true;
                      }
                    }
                    if (result === reaction.promise) {
                      reject(TypeError('Promise-chain cycle'));
                    } else if ((then = isThenable(result))) {
                      then.call(result, resolve, reject);
                    } else resolve(result);
                  } else reject(value);
                } catch (error) {
                  if (domain && !exited) domain.exit();
                  reject(error);
                }
              }
              state.reactions = [];
              state.notified = false;
              if (isReject && !state.rejection) onUnhandled(promise, state);
            });
          };

          var dispatchEvent = function(name, promise, reason) {
            var event, handler;
            if (DISPATCH_EVENT) {
              event = document.createEvent('Event');
              event.promise = promise;
              event.reason = reason;
              event.initEvent(name, false, true);
              global.dispatchEvent(event);
            } else event = { promise: promise, reason: reason };
            if ((handler = global['on' + name])) handler(event);
            else if (name === UNHANDLED_REJECTION)
              hostReportErrors('Unhandled promise rejection', reason);
          };

          var onUnhandled = function(promise, state) {
            task.call(global, function() {
              var value = state.value;
              var IS_UNHANDLED = isUnhandled(state);
              var result;
              if (IS_UNHANDLED) {
                result = perform(function() {
                  if (IS_NODE) {
                    process.emit('unhandledRejection', value, promise);
                  } else dispatchEvent(UNHANDLED_REJECTION, promise, value);
                });
                // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should
                state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;
                if (result.error) throw result.value;
              }
            });
          };

          var isUnhandled = function(state) {
            return state.rejection !== HANDLED && !state.parent;
          };

          var onHandleUnhandled = function(promise, state) {
            task.call(global, function() {
              if (IS_NODE) {
                process.emit('rejectionHandled', promise);
              } else dispatchEvent(REJECTION_HANDLED, promise, state.value);
            });
          };

          var bind = function(fn, promise, state, unwrap) {
            return function(value) {
              fn(promise, state, value, unwrap);
            };
          };

          var internalReject = function(promise, state, value, unwrap) {
            if (state.done) return;
            state.done = true;
            if (unwrap) state = unwrap;
            state.value = value;
            state.state = REJECTED;
            notify(promise, state, true);
          };

          var internalResolve = function(promise, state, value, unwrap) {
            if (state.done) return;
            state.done = true;
            if (unwrap) state = unwrap;
            try {
              if (promise === value) throw TypeError("Promise can't be resolved itself");
              var then = isThenable(value);
              if (then) {
                microtask(function() {
                  var wrapper = { done: false };
                  try {
                    then.call(
                      value,
                      bind(internalResolve, promise, wrapper, state),
                      bind(internalReject, promise, wrapper, state)
                    );
                  } catch (error) {
                    internalReject(promise, wrapper, error, state);
                  }
                });
              } else {
                state.value = value;
                state.state = FULFILLED;
                notify(promise, state, false);
              }
            } catch (error) {
              internalReject(promise, { done: false }, error, state);
            }
          };

          // constructor polyfill
          if (FORCED) {
            // 25.4.3.1 Promise(executor)
            PromiseConstructor = function Promise(executor) {
              anInstance(this, PromiseConstructor, PROMISE);
              aFunction(executor);
              Internal.call(this);
              var state = getInternalState(this);
              try {
                executor(
                  bind(internalResolve, this, state),
                  bind(internalReject, this, state)
                );
              } catch (error) {
                internalReject(this, state, error);
              }
            };
            // eslint-disable-next-line no-unused-vars
            Internal = function Promise(executor) {
              setInternalState(this, {
                type: PROMISE,
                done: false,
                notified: false,
                parent: false,
                reactions: [],
                rejection: false,
                state: PENDING,
                value: undefined
              });
            };
            Internal.prototype = redefineAll(PromiseConstructor.prototype, {
              // `Promise.prototype.then` method
              // https://tc39.github.io/ecma262/#sec-promise.prototype.then
              then: function then(onFulfilled, onRejected) {
                var state = getInternalPromiseState(this);
                var reaction = newPromiseCapability(
                  speciesConstructor(this, PromiseConstructor)
                );
                reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;
                reaction.fail = typeof onRejected == 'function' && onRejected;
                reaction.domain = IS_NODE ? process.domain : undefined;
                state.parent = true;
                state.reactions.push(reaction);
                if (state.state != PENDING) notify(this, state, false);
                return reaction.promise;
              },
              // `Promise.prototype.catch` method
              // https://tc39.github.io/ecma262/#sec-promise.prototype.catch
              catch: function(onRejected) {
                return this.then(undefined, onRejected);
              }
            });
            OwnPromiseCapability = function() {
              var promise = new Internal();
              var state = getInternalState(promise);
              this.promise = promise;
              this.resolve = bind(internalResolve, promise, state);
              this.reject = bind(internalReject, promise, state);
            };
            newPromiseCapabilityModule.f = newPromiseCapability = function(C) {
              return C === PromiseConstructor || C === PromiseWrapper
                ? new OwnPromiseCapability(C)
                : newGenericPromiseCapability(C);
            };

            if (!IS_PURE && typeof NativePromise == 'function') {
              nativeThen = NativePromise.prototype.then;

              // wrap native Promise#then for native async functions
              redefine(
                NativePromise.prototype,
                'then',
                function then(onFulfilled, onRejected) {
                  var that = this;
                  return new PromiseConstructor(function(resolve, reject) {
                    nativeThen.call(that, resolve, reject);
                  }).then(onFulfilled, onRejected);
                  // https://github.com/zloirock/core-js/issues/640
                },
                { unsafe: true }
              );

              // wrap fetch result
              if (typeof $fetch == 'function')
                $(
                  { global: true, enumerable: true, forced: true },
                  {
                    // eslint-disable-next-line no-unused-vars
                    fetch: function fetch(input /* , init */) {
                      return promiseResolve(
                        PromiseConstructor,
                        $fetch.apply(global, arguments)
                      );
                    }
                  }
                );
            }
          }

          $(
            { global: true, wrap: true, forced: FORCED },
            {
              Promise: PromiseConstructor
            }
          );

          setToStringTag(PromiseConstructor, PROMISE, false, true);
          setSpecies(PROMISE);

          PromiseWrapper = getBuiltIn(PROMISE);

          // statics
          $(
            { target: PROMISE, stat: true, forced: FORCED },
            {
              // `Promise.reject` method
              // https://tc39.github.io/ecma262/#sec-promise.reject
              reject: function reject(r) {
                var capability = newPromiseCapability(this);
                capability.reject.call(undefined, r);
                return capability.promise;
              }
            }
          );

          $(
            { target: PROMISE, stat: true, forced: IS_PURE || FORCED },
            {
              // `Promise.resolve` method
              // https://tc39.github.io/ecma262/#sec-promise.resolve
              resolve: function resolve(x) {
                return promiseResolve(
                  IS_PURE && this === PromiseWrapper ? PromiseConstructor : this,
                  x
                );
              }
            }
          );

          $(
            { target: PROMISE, stat: true, forced: INCORRECT_ITERATION },
            {
              // `Promise.all` method
              // https://tc39.github.io/ecma262/#sec-promise.all
              all: function all(iterable) {
                var C = this;
                var capability = newPromiseCapability(C);
                var resolve = capability.resolve;
                var reject = capability.reject;
                var result = perform(function() {
                  var $promiseResolve = aFunction(C.resolve);
                  var values = [];
                  var counter = 0;
                  var remaining = 1;
                  iterate(iterable, function(promise) {
                    var index = counter++;
                    var alreadyCalled = false;
                    values.push(undefined);
                    remaining++;
                    $promiseResolve.call(C, promise).then(function(value) {
                      if (alreadyCalled) return;
                      alreadyCalled = true;
                      values[index] = value;
                      --remaining || resolve(values);
                    }, reject);
                  });
                  --remaining || resolve(values);
                });
                if (result.error) reject(result.value);
                return capability.promise;
              },
              // `Promise.race` method
              // https://tc39.github.io/ecma262/#sec-promise.race
              race: function race(iterable) {
                var C = this;
                var capability = newPromiseCapability(C);
                var reject = capability.reject;
                var result = perform(function() {
                  var $promiseResolve = aFunction(C.resolve);
                  iterate(iterable, function(promise) {
                    $promiseResolve.call(C, promise).then(capability.resolve, reject);
                  });
                });
                if (result.error) reject(result.value);
                return capability.promise;
              }
            }
          );
        },
        {
          '../internals/a-function': 23,
          '../internals/an-instance': 27,
          '../internals/check-correctness-of-iteration': 45,
          '../internals/classof-raw': 46,
          '../internals/engine-v8-version': 65,
          '../internals/export': 67,
          '../internals/get-built-in': 73,
          '../internals/global': 76,
          '../internals/host-report-errors': 79,
          '../internals/inspect-source': 85,
          '../internals/internal-state': 87,
          '../internals/is-forced': 90,
          '../internals/is-object': 91,
          '../internals/is-pure': 92,
          '../internals/iterate': 94,
          '../internals/microtask': 98,
          '../internals/native-promise-constructor': 99,
          '../internals/new-promise-capability': 103,
          '../internals/perform': 122,
          '../internals/promise-resolve': 123,
          '../internals/redefine': 125,
          '../internals/redefine-all': 124,
          '../internals/set-species': 133,
          '../internals/set-to-string-tag': 134,
          '../internals/species-constructor': 138,
          '../internals/task': 145,
          '../internals/well-known-symbol': 163
        }
      ],
      194: [
        function(_dereq_, module, exports) {
          var $ = _dereq_('../internals/export');
          var getBuiltIn = _dereq_('../internals/get-built-in');
          var aFunction = _dereq_('../internals/a-function');
          var anObject = _dereq_('../internals/an-object');
          var isObject = _dereq_('../internals/is-object');
          var create = _dereq_('../internals/object-create');
          var bind = _dereq_('../internals/function-bind');
          var fails = _dereq_('../internals/fails');

          var nativeConstruct = getBuiltIn('Reflect', 'construct');

          // `Reflect.construct` method
          // https://tc39.github.io/ecma262/#sec-reflect.construct
          // MS Edge supports only 2 arguments and argumentsList argument is optional
          // FF Nightly sets third argument as `new.target`, but does not create `this` from it
          var NEW_TARGET_BUG = fails(function() {
            function F() {
              /* empty */
            }
            return !(
              nativeConstruct(
                function() {
                  /* empty */
                },
                [],
                F
              ) instanceof F
            );
          });
          var ARGS_BUG = !fails(function() {
            nativeConstruct(function() {
              /* empty */
            });
          });
          var FORCED = NEW_TARGET_BUG || ARGS_BUG;

          $(
            { target: 'Reflect', stat: true, forced: FORCED, sham: FORCED },
            {
              construct: function construct(Target, args /* , newTarget */) {
                aFunction(Target);
                anObject(args);
                var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);
                if (ARGS_BUG && !NEW_TARGET_BUG)
                  return nativeConstruct(Target, args, newTarget);
                if (Target == newTarget) {
                  // w/o altered newTarget, optimization for 0-4 arguments
                  switch (args.length) {
                    case 0:
                      return new Target();
                    case 1:
                      return new Target(args[0]);
                    case 2:
                      return new Target(args[0], args[1]);
                    case 3:
                      return new Target(args[0], args[1], args[2]);
                    case 4:
                      return new Target(args[0], args[1], args[2], args[3]);
                  }
                  // w/o altered newTarget, lot of arguments case
                  var $args = [null];
                  $args.push.apply($args, args);
                  return new (bind.apply(Target, $args))();
                }
                // with altered newTarget, not support built-in constructors
                var proto = newTarget.prototype;
                var instance = create(isObject(proto) ? proto : Object.prototype);
                var result = Function.apply.call(Target, instance, args);
                return isObject(result) ? result : instance;
              }
            }
          );
        },
        {
          '../internals/a-function': 23,
          '../internals/an-object': 28,
          '../internals/export': 67,
          '../internals/fails': 68,
          '../internals/function-bind': 72,
          '../internals/get-built-in': 73,
          '../internals/is-object': 91,
          '../internals/object-create': 107
        }
      ],
      195: [
        function(_dereq_, module, exports) {
          var DESCRIPTORS = _dereq_('../internals/descriptors');
          var global = _dereq_('../internals/global');
          var isForced = _dereq_('../internals/is-forced');
          var inheritIfRequired = _dereq_('../internals/inherit-if-required');
          var defineProperty = _dereq_('../internals/object-define-property').f;
          var getOwnPropertyNames = _dereq_('../internals/object-get-own-property-names').f;
          var isRegExp = _dereq_('../internals/is-regexp');
          var getFlags = _dereq_('../internals/regexp-flags');
          var stickyHelpers = _dereq_('../internals/regexp-sticky-helpers');
          var redefine = _dereq_('../internals/redefine');
          var fails = _dereq_('../internals/fails');
          var setInternalState = _dereq_('../internals/internal-state').set;
          var setSpecies = _dereq_('../internals/set-species');
          var wellKnownSymbol = _dereq_('../internals/well-known-symbol');

          var MATCH = wellKnownSymbol('match');
          var NativeRegExp = global.RegExp;
          var RegExpPrototype = NativeRegExp.prototype;
          var re1 = /a/g;
          var re2 = /a/g;

          // "new" should create a new object, old webkit bug
          var CORRECT_NEW = new NativeRegExp(re1) !== re1;

          var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;

          var FORCED =
            DESCRIPTORS &&
            isForced(
              'RegExp',
              !CORRECT_NEW ||
                UNSUPPORTED_Y ||
                fails(function() {
                  re2[MATCH] = false;
                  // RegExp constructor can alter flags and IsRegExp works correct with @@match
                  return (
                    NativeRegExp(re1) != re1 ||
                    NativeRegExp(re2) == re2 ||
                    NativeRegExp(re1, 'i') != '/a/i'
                  );
                })
            );

          // `RegExp` constructor
          // https://tc39.github.io/ecma262/#sec-regexp-constructor
          if (FORCED) {
            var RegExpWrapper = function RegExp(pattern, flags) {
              var thisIsRegExp = this instanceof RegExpWrapper;
              var patternIsRegExp = isRegExp(pattern);
              var flagsAreUndefined = flags === undefined;
              var sticky;

              if (
                !thisIsRegExp &&
                patternIsRegExp &&
                pattern.constructor === RegExpWrapper &&
                flagsAreUndefined
              ) {
                return pattern;
              }

              if (CORRECT_NEW) {
                if (patternIsRegExp && !flagsAreUndefined) pattern = pattern.source;
              } else if (pattern instanceof RegExpWrapper) {
                if (flagsAreUndefined) flags = getFlags.call(pattern);
                pattern = pattern.source;
              }

              if (UNSUPPORTED_Y) {
                sticky = !!flags && flags.indexOf('y') > -1;
                if (sticky) flags = flags.replace(/y/g, '');
              }

              var result = inheritIfRequired(
                CORRECT_NEW
                  ? new NativeRegExp(pattern, flags)
                  : NativeRegExp(pattern, flags),
                thisIsRegExp ? this : RegExpPrototype,
                RegExpWrapper
              );

              if (UNSUPPORTED_Y && sticky) setInternalState(result, { sticky: sticky });

              return result;
            };
            var proxy = function(key) {
              key in RegExpWrapper ||
                defineProperty(RegExpWrapper, key, {
                  configurable: true,
                  get: function() {
                    return NativeRegExp[key];
                  },
                  set: function(it) {
                    NativeRegExp[key] = it;
                  }
                });
            };
            var keys = getOwnPropertyNames(NativeRegExp);
            var index = 0;
            while (keys.length > index) proxy(keys[index++]);
            RegExpPrototype.constructor = RegExpWrapper;
            RegExpWrapper.prototype = RegExpPrototype;
            redefine(global, 'RegExp', RegExpWrapper);
          }

          // https://tc39.github.io/ecma262/#sec-get-regexp-@@species
          setSpecies('RegExp');
        },
        {
          '../internals/descriptors': 60,
          '../internals/fails': 68,
          '../internals/global': 76,
          '../internals/inherit-if-required': 84,
          '../internals/internal-state': 87,
          '../internals/is-forced': 90,
          '../internals/is-regexp': 93,
          '../internals/object-define-property': 109,
          '../internals/object-get-own-property-names': 112,
          '../internals/redefine': 125,
          '../internals/regexp-flags': 128,
          '../internals/regexp-sticky-helpers': 129,
          '../internals/set-species': 133,
          '../internals/well-known-symbol': 163
        }
      ],
      196: [
        function(_dereq_, module, exports) {
          'use strict';
          var $ = _dereq_('../internals/export');
          var exec = _dereq_('../internals/regexp-exec');

          $(
            { target: 'RegExp', proto: true, forced: /./.exec !== exec },
            {
              exec: exec
            }
          );
        },
        { '../internals/export': 67, '../internals/regexp-exec': 127 }
      ],
      197: [
        function(_dereq_, module, exports) {
          'use strict';
          var redefine = _dereq_('../internals/redefine');
          var anObject = _dereq_('../internals/an-object');
          var fails = _dereq_('../internals/fails');
          var flags = _dereq_('../internals/regexp-flags');

          var TO_STRING = 'toString';
          var RegExpPrototype = RegExp.prototype;
          var nativeToString = RegExpPrototype[TO_STRING];

          var NOT_GENERIC = fails(function() {
            return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b';
          });
          // FF44- RegExp#toString has a wrong name
          var INCORRECT_NAME = nativeToString.name != TO_STRING;

          // `RegExp.prototype.toString` method
          // https://tc39.github.io/ecma262/#sec-regexp.prototype.tostring
          if (NOT_GENERIC || INCORRECT_NAME) {
            redefine(
              RegExp.prototype,
              TO_STRING,
              function toString() {
                var R = anObject(this);
                var p = String(R.source);
                var rf = R.flags;
                var f = String(
                  rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype)
                    ? flags.call(R)
                    : rf
                );
                return '/' + p + '/' + f;
              },
              { unsafe: true }
            );
          }
        },
        {
          '../internals/an-object': 28,
          '../internals/fails': 68,
          '../internals/redefine': 125,
          '../internals/regexp-flags': 128
        }
      ],
      198: [
        function(_dereq_, module, exports) {
          'use strict';
          var collection = _dereq_('../internals/collection');
          var collectionStrong = _dereq_('../internals/collection-strong');

          // `Set` constructor
          // https://tc39.github.io/ecma262/#sec-set-objects
          module.exports = collection(
            'Set',
            function(init) {
              return function Set() {
                return init(this, arguments.length ? arguments[0] : undefined);
              };
            },
            collectionStrong
          );
        },
        { '../internals/collection': 49, '../internals/collection-strong': 48 }
      ],
      199: [
        function(_dereq_, module, exports) {
          'use strict';
          var $ = _dereq_('../internals/export');
          var getOwnPropertyDescriptor = _dereq_(
            '../internals/object-get-own-property-descriptor'
          ).f;
          var toLength = _dereq_('../internals/to-length');
          var notARegExp = _dereq_('../internals/not-a-regexp');
          var requireObjectCoercible = _dereq_('../internals/require-object-coercible');
          var correctIsRegExpLogic = _dereq_('../internals/correct-is-regexp-logic');
          var IS_PURE = _dereq_('../internals/is-pure');

          var nativeEndsWith = ''.endsWith;
          var min = Math.min;

          var CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('endsWith');
          // https://github.com/zloirock/core-js/pull/702
          var MDN_POLYFILL_BUG =
            !IS_PURE &&
            !CORRECT_IS_REGEXP_LOGIC &&
            !!(function() {
              var descriptor = getOwnPropertyDescriptor(String.prototype, 'endsWith');
              return descriptor && !descriptor.writable;
            })();

          // `String.prototype.endsWith` method
          // https://tc39.github.io/ecma262/#sec-string.prototype.endswith
          $(
            {
              target: 'String',
              proto: true,
              forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC
            },
            {
              endsWith: function endsWith(searchString /* , endPosition = @length */) {
                var that = String(requireObjectCoercible(this));
                notARegExp(searchString);
                var endPosition = arguments.length > 1 ? arguments[1] : undefined;
                var len = toLength(that.length);
                var end = endPosition === undefined ? len : min(toLength(endPosition), len);
                var search = String(searchString);
                return nativeEndsWith
                  ? nativeEndsWith.call(that, search, end)
                  : that.slice(end - search.length, end) === search;
              }
            }
          );
        },
        {
          '../internals/correct-is-regexp-logic': 51,
          '../internals/export': 67,
          '../internals/is-pure': 92,
          '../internals/not-a-regexp': 104,
          '../internals/object-get-own-property-descriptor': 110,
          '../internals/require-object-coercible': 130,
          '../internals/to-length': 151
        }
      ],
      200: [
        function(_dereq_, module, exports) {
          'use strict';
          var $ = _dereq_('../internals/export');
          var notARegExp = _dereq_('../internals/not-a-regexp');
          var requireObjectCoercible = _dereq_('../internals/require-object-coercible');
          var correctIsRegExpLogic = _dereq_('../internals/correct-is-regexp-logic');

          // `String.prototype.includes` method
          // https://tc39.github.io/ecma262/#sec-string.prototype.includes
          $(
            { target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') },
            {
              includes: function includes(searchString /* , position = 0 */) {
                return !!~String(requireObjectCoercible(this)).indexOf(
                  notARegExp(searchString),
                  arguments.length > 1 ? arguments[1] : undefined
                );
              }
            }
          );
        },
        {
          '../internals/correct-is-regexp-logic': 51,
          '../internals/export': 67,
          '../internals/not-a-regexp': 104,
          '../internals/require-object-coercible': 130
        }
      ],
      201: [
        function(_dereq_, module, exports) {
          'use strict';
          var charAt = _dereq_('../internals/string-multibyte').charAt;
          var InternalStateModule = _dereq_('../internals/internal-state');
          var defineIterator = _dereq_('../internals/define-iterator');

          var STRING_ITERATOR = 'String Iterator';
          var setInternalState = InternalStateModule.set;
          var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);

          // `String.prototype[@@iterator]` method
          // https://tc39.github.io/ecma262/#sec-string.prototype-@@iterator
          defineIterator(
            String,
            'String',
            function(iterated) {
              setInternalState(this, {
                type: STRING_ITERATOR,
                string: String(iterated),
                index: 0
              });
              // `%StringIteratorPrototype%.next` method
              // https://tc39.github.io/ecma262/#sec-%stringiteratorprototype%.next
            },
            function next() {
              var state = getInternalState(this);
              var string = state.string;
              var index = state.index;
              var point;
              if (index >= string.length) return { value: undefined, done: true };
              point = charAt(string, index);
              state.index += point.length;
              return { value: point, done: false };
            }
          );
        },
        {
          '../internals/define-iterator': 58,
          '../internals/internal-state': 87,
          '../internals/string-multibyte': 140
        }
      ],
      202: [
        function(_dereq_, module, exports) {
          'use strict';
          var fixRegExpWellKnownSymbolLogic = _dereq_(
            '../internals/fix-regexp-well-known-symbol-logic'
          );
          var anObject = _dereq_('../internals/an-object');
          var toLength = _dereq_('../internals/to-length');
          var requireObjectCoercible = _dereq_('../internals/require-object-coercible');
          var advanceStringIndex = _dereq_('../internals/advance-string-index');
          var regExpExec = _dereq_('../internals/regexp-exec-abstract');

          // @@match logic
          fixRegExpWellKnownSymbolLogic('match', 1, function(
            MATCH,
            nativeMatch,
            maybeCallNative
          ) {
            return [
              // `String.prototype.match` method
              // https://tc39.github.io/ecma262/#sec-string.prototype.match
              function match(regexp) {
                var O = requireObjectCoercible(this);
                var matcher = regexp == undefined ? undefined : regexp[MATCH];
                return matcher !== undefined
                  ? matcher.call(regexp, O)
                  : new RegExp(regexp)[MATCH](String(O));
              },
              // `RegExp.prototype[@@match]` method
              // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match
              function(regexp) {
                var res = maybeCallNative(nativeMatch, regexp, this);
                if (res.done) return res.value;

                var rx = anObject(regexp);
                var S = String(this);

                if (!rx.global) return regExpExec(rx, S);

                var fullUnicode = rx.unicode;
                rx.lastIndex = 0;
                var A = [];
                var n = 0;
                var result;
                while ((result = regExpExec(rx, S)) !== null) {
                  var matchStr = String(result[0]);
                  A[n] = matchStr;
                  if (matchStr === '')
                    rx.lastIndex = advanceStringIndex(
                      S,
                      toLength(rx.lastIndex),
                      fullUnicode
                    );
                  n++;
                }
                return n === 0 ? null : A;
              }
            ];
          });
        },
        {
          '../internals/advance-string-index': 26,
          '../internals/an-object': 28,
          '../internals/fix-regexp-well-known-symbol-logic': 69,
          '../internals/regexp-exec-abstract': 126,
          '../internals/require-object-coercible': 130,
          '../internals/to-length': 151
        }
      ],
      203: [
        function(_dereq_, module, exports) {
          var $ = _dereq_('../internals/export');
          var repeat = _dereq_('../internals/string-repeat');

          // `String.prototype.repeat` method
          // https://tc39.github.io/ecma262/#sec-string.prototype.repeat
          $(
            { target: 'String', proto: true },
            {
              repeat: repeat
            }
          );
        },
        { '../internals/export': 67, '../internals/string-repeat': 142 }
      ],
      204: [
        function(_dereq_, module, exports) {
          'use strict';
          var fixRegExpWellKnownSymbolLogic = _dereq_(
            '../internals/fix-regexp-well-known-symbol-logic'
          );
          var anObject = _dereq_('../internals/an-object');
          var toObject = _dereq_('../internals/to-object');
          var toLength = _dereq_('../internals/to-length');
          var toInteger = _dereq_('../internals/to-integer');
          var requireObjectCoercible = _dereq_('../internals/require-object-coercible');
          var advanceStringIndex = _dereq_('../internals/advance-string-index');
          var regExpExec = _dereq_('../internals/regexp-exec-abstract');

          var max = Math.max;
          var min = Math.min;
          var floor = Math.floor;
          var SUBSTITUTION_SYMBOLS = /\$([$&'`]|\d\d?|<[^>]*>)/g;
          var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&'`]|\d\d?)/g;

          var maybeToString = function(it) {
            return it === undefined ? it : String(it);
          };

          // @@replace logic
          fixRegExpWellKnownSymbolLogic('replace', 2, function(
            REPLACE,
            nativeReplace,
            maybeCallNative,
            reason
          ) {
            var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE =
              reason.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE;
            var REPLACE_KEEPS_$0 = reason.REPLACE_KEEPS_$0;
            var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE
              ? '$'
              : '$0';

            return [
              // `String.prototype.replace` method
              // https://tc39.github.io/ecma262/#sec-string.prototype.replace
              function replace(searchValue, replaceValue) {
                var O = requireObjectCoercible(this);
                var replacer = searchValue == undefined ? undefined : searchValue[REPLACE];
                return replacer !== undefined
                  ? replacer.call(searchValue, O, replaceValue)
                  : nativeReplace.call(String(O), searchValue, replaceValue);
              },
              // `RegExp.prototype[@@replace]` method
              // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace
              function(regexp, replaceValue) {
                if (
                  (!REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE && REPLACE_KEEPS_$0) ||
                  (typeof replaceValue === 'string' &&
                    replaceValue.indexOf(UNSAFE_SUBSTITUTE) === -1)
                ) {
                  var res = maybeCallNative(nativeReplace, regexp, this, replaceValue);
                  if (res.done) return res.value;
                }

                var rx = anObject(regexp);
                var S = String(this);

                var functionalReplace = typeof replaceValue === 'function';
                if (!functionalReplace) replaceValue = String(replaceValue);

                var global = rx.global;
                if (global) {
                  var fullUnicode = rx.unicode;
                  rx.lastIndex = 0;
                }
                var results = [];
                while (true) {
                  var result = regExpExec(rx, S);
                  if (result === null) break;

                  results.push(result);
                  if (!global) break;

                  var matchStr = String(result[0]);
                  if (matchStr === '')
                    rx.lastIndex = advanceStringIndex(
                      S,
                      toLength(rx.lastIndex),
                      fullUnicode
                    );
                }

                var accumulatedResult = '';
                var nextSourcePosition = 0;
                for (var i = 0; i < results.length; i++) {
                  result = results[i];

                  var matched = String(result[0]);
                  var position = max(min(toInteger(result.index), S.length), 0);
                  var captures = [];
                  // NOTE: This is equivalent to
                  //   captures = result.slice(1).map(maybeToString)
                  // but for some reason `nativeSlice.call(result, 1, result.length)` (called in
                  // the slice polyfill when slicing native arrays) "doesn't work" in safari 9 and
                  // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.
                  for (var j = 1; j < result.length; j++)
                    captures.push(maybeToString(result[j]));
                  var namedCaptures = result.groups;
                  if (functionalReplace) {
                    var replacerArgs = [matched].concat(captures, position, S);
                    if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);
                    var replacement = String(replaceValue.apply(undefined, replacerArgs));
                  } else {
                    replacement = getSubstitution(
                      matched,
                      S,
                      position,
                      captures,
                      namedCaptures,
                      replaceValue
                    );
                  }
                  if (position >= nextSourcePosition) {
                    accumulatedResult +=
                      S.slice(nextSourcePosition, position) + replacement;
                    nextSourcePosition = position + matched.length;
                  }
                }
                return accumulatedResult + S.slice(nextSourcePosition);
              }
            ];

            // https://tc39.github.io/ecma262/#sec-getsubstitution
            function getSubstitution(
              matched,
              str,
              position,
              captures,
              namedCaptures,
              replacement
            ) {
              var tailPos = position + matched.length;
              var m = captures.length;
              var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;
              if (namedCaptures !== undefined) {
                namedCaptures = toObject(namedCaptures);
                symbols = SUBSTITUTION_SYMBOLS;
              }
              return nativeReplace.call(replacement, symbols, function(match, ch) {
                var capture;
                switch (ch.charAt(0)) {
                  case '$':
                    return '$';
                  case '&':
                    return matched;
                  case '`':
                    return str.slice(0, position);
                  case "'":
                    return str.slice(tailPos);
                  case '<':
                    capture = namedCaptures[ch.slice(1, -1)];
                    break;
                  default:
                    // \d\d?
                    var n = +ch;
                    if (n === 0) return match;
                    if (n > m) {
                      var f = floor(n / 10);
                      if (f === 0) return match;
                      if (f <= m)
                        return captures[f - 1] === undefined
                          ? ch.charAt(1)
                          : captures[f - 1] + ch.charAt(1);
                      return match;
                    }
                    capture = captures[n - 1];
                }
                return capture === undefined ? '' : capture;
              });
            }
          });
        },
        {
          '../internals/advance-string-index': 26,
          '../internals/an-object': 28,
          '../internals/fix-regexp-well-known-symbol-logic': 69,
          '../internals/regexp-exec-abstract': 126,
          '../internals/require-object-coercible': 130,
          '../internals/to-integer': 150,
          '../internals/to-length': 151,
          '../internals/to-object': 152
        }
      ],
      205: [
        function(_dereq_, module, exports) {
          'use strict';
          var fixRegExpWellKnownSymbolLogic = _dereq_(
            '../internals/fix-regexp-well-known-symbol-logic'
          );
          var anObject = _dereq_('../internals/an-object');
          var requireObjectCoercible = _dereq_('../internals/require-object-coercible');
          var sameValue = _dereq_('../internals/same-value');
          var regExpExec = _dereq_('../internals/regexp-exec-abstract');

          // @@search logic
          fixRegExpWellKnownSymbolLogic('search', 1, function(
            SEARCH,
            nativeSearch,
            maybeCallNative
          ) {
            return [
              // `String.prototype.search` method
              // https://tc39.github.io/ecma262/#sec-string.prototype.search
              function search(regexp) {
                var O = requireObjectCoercible(this);
                var searcher = regexp == undefined ? undefined : regexp[SEARCH];
                return searcher !== undefined
                  ? searcher.call(regexp, O)
                  : new RegExp(regexp)[SEARCH](String(O));
              },
              // `RegExp.prototype[@@search]` method
              // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search
              function(regexp) {
                var res = maybeCallNative(nativeSearch, regexp, this);
                if (res.done) return res.value;

                var rx = anObject(regexp);
                var S = String(this);

                var previousLastIndex = rx.lastIndex;
                if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;
                var result = regExpExec(rx, S);
                if (!sameValue(rx.lastIndex, previousLastIndex))
                  rx.lastIndex = previousLastIndex;
                return result === null ? -1 : result.index;
              }
            ];
          });
        },
        {
          '../internals/an-object': 28,
          '../internals/fix-regexp-well-known-symbol-logic': 69,
          '../internals/regexp-exec-abstract': 126,
          '../internals/require-object-coercible': 130,
          '../internals/same-value': 131
        }
      ],
      206: [
        function(_dereq_, module, exports) {
          'use strict';
          var fixRegExpWellKnownSymbolLogic = _dereq_(
            '../internals/fix-regexp-well-known-symbol-logic'
          );
          var isRegExp = _dereq_('../internals/is-regexp');
          var anObject = _dereq_('../internals/an-object');
          var requireObjectCoercible = _dereq_('../internals/require-object-coercible');
          var speciesConstructor = _dereq_('../internals/species-constructor');
          var advanceStringIndex = _dereq_('../internals/advance-string-index');
          var toLength = _dereq_('../internals/to-length');
          var callRegExpExec = _dereq_('../internals/regexp-exec-abstract');
          var regexpExec = _dereq_('../internals/regexp-exec');
          var fails = _dereq_('../internals/fails');

          var arrayPush = [].push;
          var min = Math.min;
          var MAX_UINT32 = 0xffffffff;

          // babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError
          var SUPPORTS_Y = !fails(function() {
            return !RegExp(MAX_UINT32, 'y');
          });

          // @@split logic
          fixRegExpWellKnownSymbolLogic(
            'split',
            2,
            function(SPLIT, nativeSplit, maybeCallNative) {
              var internalSplit;
              if (
                'abbc'.split(/(b)*/)[1] == 'c' ||
                'test'.split(/(?:)/, -1).length != 4 ||
                'ab'.split(/(?:ab)*/).length != 2 ||
                '.'.split(/(.?)(.?)/).length != 4 ||
                '.'.split(/()()/).length > 1 ||
                ''.split(/.?/).length
              ) {
                // based on es5-shim implementation, need to rework it
                internalSplit = function(separator, limit) {
                  var string = String(requireObjectCoercible(this));
                  var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;
                  if (lim === 0) return [];
                  if (separator === undefined) return [string];
                  // If `separator` is not a regex, use native split
                  if (!isRegExp(separator)) {
                    return nativeSplit.call(string, separator, lim);
                  }
                  var output = [];
                  var flags =
                    (separator.ignoreCase ? 'i' : '') +
                    (separator.multiline ? 'm' : '') +
                    (separator.unicode ? 'u' : '') +
                    (separator.sticky ? 'y' : '');
                  var lastLastIndex = 0;
                  // Make `global` and avoid `lastIndex` issues by working with a copy
                  var separatorCopy = new RegExp(separator.source, flags + 'g');
                  var match, lastIndex, lastLength;
                  while ((match = regexpExec.call(separatorCopy, string))) {
                    lastIndex = separatorCopy.lastIndex;
                    if (lastIndex > lastLastIndex) {
                      output.push(string.slice(lastLastIndex, match.index));
                      if (match.length > 1 && match.index < string.length)
                        arrayPush.apply(output, match.slice(1));
                      lastLength = match[0].length;
                      lastLastIndex = lastIndex;
                      if (output.length >= lim) break;
                    }
                    if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop
                  }
                  if (lastLastIndex === string.length) {
                    if (lastLength || !separatorCopy.test('')) output.push('');
                  } else output.push(string.slice(lastLastIndex));
                  return output.length > lim ? output.slice(0, lim) : output;
                };
                // Chakra, V8
              } else if ('0'.split(undefined, 0).length) {
                internalSplit = function(separator, limit) {
                  return separator === undefined && limit === 0
                    ? []
                    : nativeSplit.call(this, separator, limit);
                };
              } else internalSplit = nativeSplit;

              return [
                // `String.prototype.split` method
                // https://tc39.github.io/ecma262/#sec-string.prototype.split
                function split(separator, limit) {
                  var O = requireObjectCoercible(this);
                  var splitter = separator == undefined ? undefined : separator[SPLIT];
                  return splitter !== undefined
                    ? splitter.call(separator, O, limit)
                    : internalSplit.call(String(O), separator, limit);
                },
                // `RegExp.prototype[@@split]` method
                // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split
                //
                // NOTE: This cannot be properly polyfilled in engines that don't support
                // the 'y' flag.
                function(regexp, limit) {
                  var res = maybeCallNative(
                    internalSplit,
                    regexp,
                    this,
                    limit,
                    internalSplit !== nativeSplit
                  );
                  if (res.done) return res.value;

                  var rx = anObject(regexp);
                  var S = String(this);
                  var C = speciesConstructor(rx, RegExp);

                  var unicodeMatching = rx.unicode;
                  var flags =
                    (rx.ignoreCase ? 'i' : '') +
                    (rx.multiline ? 'm' : '') +
                    (rx.unicode ? 'u' : '') +
                    (SUPPORTS_Y ? 'y' : 'g');

                  // ^(? + rx + ) is needed, in combination with some S slicing, to
                  // simulate the 'y' flag.
                  var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);
                  var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;
                  if (lim === 0) return [];
                  if (S.length === 0)
                    return callRegExpExec(splitter, S) === null ? [S] : [];
                  var p = 0;
                  var q = 0;
                  var A = [];
                  while (q < S.length) {
                    splitter.lastIndex = SUPPORTS_Y ? q : 0;
                    var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));
                    var e;
                    if (
                      z === null ||
                      (e = min(
                        toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)),
                        S.length
                      )) === p
                    ) {
                      q = advanceStringIndex(S, q, unicodeMatching);
                    } else {
                      A.push(S.slice(p, q));
                      if (A.length === lim) return A;
                      for (var i = 1; i <= z.length - 1; i++) {
                        A.push(z[i]);
                        if (A.length === lim) return A;
                      }
                      q = p = e;
                    }
                  }
                  A.push(S.slice(p));
                  return A;
                }
              ];
            },
            !SUPPORTS_Y
          );
        },
        {
          '../internals/advance-string-index': 26,
          '../internals/an-object': 28,
          '../internals/fails': 68,
          '../internals/fix-regexp-well-known-symbol-logic': 69,
          '../internals/is-regexp': 93,
          '../internals/regexp-exec': 127,
          '../internals/regexp-exec-abstract': 126,
          '../internals/require-object-coercible': 130,
          '../internals/species-constructor': 138,
          '../internals/to-length': 151
        }
      ],
      207: [
        function(_dereq_, module, exports) {
          'use strict';
          var $ = _dereq_('../internals/export');
          var createHTML = _dereq_('../internals/create-html');
          var forcedStringHTMLMethod = _dereq_('../internals/string-html-forced');

          // `String.prototype.sub` method
          // https://tc39.github.io/ecma262/#sec-string.prototype.sub
          $(
            { target: 'String', proto: true, forced: forcedStringHTMLMethod('sub') },
            {
              sub: function sub() {
                return createHTML(this, 'sub', '', '');
              }
            }
          );
        },
        {
          '../internals/create-html': 53,
          '../internals/export': 67,
          '../internals/string-html-forced': 139
        }
      ],
      208: [
        function(_dereq_, module, exports) {
          'use strict';
          var $ = _dereq_('../internals/export');
          var $trim = _dereq_('../internals/string-trim').trim;
          var forcedStringTrimMethod = _dereq_('../internals/string-trim-forced');

          // `String.prototype.trim` method
          // https://tc39.github.io/ecma262/#sec-string.prototype.trim
          $(
            { target: 'String', proto: true, forced: forcedStringTrimMethod('trim') },
            {
              trim: function trim() {
                return $trim(this);
              }
            }
          );
        },
        {
          '../internals/export': 67,
          '../internals/string-trim': 144,
          '../internals/string-trim-forced': 143
        }
      ],
      209: [
        function(_dereq_, module, exports) {
          // `Symbol.prototype.description` getter
          // https://tc39.github.io/ecma262/#sec-symbol.prototype.description
          'use strict';
          var $ = _dereq_('../internals/export');
          var DESCRIPTORS = _dereq_('../internals/descriptors');
          var global = _dereq_('../internals/global');
          var has = _dereq_('../internals/has');
          var isObject = _dereq_('../internals/is-object');
          var defineProperty = _dereq_('../internals/object-define-property').f;
          var copyConstructorProperties = _dereq_(
            '../internals/copy-constructor-properties'
          );

          var NativeSymbol = global.Symbol;

          if (
            DESCRIPTORS &&
            typeof NativeSymbol == 'function' &&
            (!('description' in NativeSymbol.prototype) ||
              // Safari 12 bug
              NativeSymbol().description !== undefined)
          ) {
            var EmptyStringDescriptionStore = {};
            // wrap Symbol constructor for correct work with undefined description
            var SymbolWrapper = function Symbol() {
              var description =
                arguments.length < 1 || arguments[0] === undefined
                  ? undefined
                  : String(arguments[0]);
              var result =
                this instanceof SymbolWrapper
                  ? new NativeSymbol(description)
                  : // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)'
                    description === undefined ? NativeSymbol() : NativeSymbol(description);
              if (description === '') EmptyStringDescriptionStore[result] = true;
              return result;
            };
            copyConstructorProperties(SymbolWrapper, NativeSymbol);
            var symbolPrototype = (SymbolWrapper.prototype = NativeSymbol.prototype);
            symbolPrototype.constructor = SymbolWrapper;

            var symbolToString = symbolPrototype.toString;
            var native = String(NativeSymbol('test')) == 'Symbol(test)';
            var regexp = /^Symbol\((.*)\)[^)]+$/;
            defineProperty(symbolPrototype, 'description', {
              configurable: true,
              get: function description() {
                var symbol = isObject(this) ? this.valueOf() : this;
                var string = symbolToString.call(symbol);
                if (has(EmptyStringDescriptionStore, symbol)) return '';
                var desc = native ? string.slice(7, -1) : string.replace(regexp, '$1');
                return desc === '' ? undefined : desc;
              }
            });

            $(
              { global: true, forced: true },
              {
                Symbol: SymbolWrapper
              }
            );
          }
        },
        {
          '../internals/copy-constructor-properties': 50,
          '../internals/descriptors': 60,
          '../internals/export': 67,
          '../internals/global': 76,
          '../internals/has': 77,
          '../internals/is-object': 91,
          '../internals/object-define-property': 109
        }
      ],
      210: [
        function(_dereq_, module, exports) {
          var defineWellKnownSymbol = _dereq_('../internals/define-well-known-symbol');

          // `Symbol.iterator` well-known symbol
          // https://tc39.github.io/ecma262/#sec-symbol.iterator
          defineWellKnownSymbol('iterator');
        },
        { '../internals/define-well-known-symbol': 59 }
      ],
      211: [
        function(_dereq_, module, exports) {
          'use strict';
          var $ = _dereq_('../internals/export');
          var global = _dereq_('../internals/global');
          var getBuiltIn = _dereq_('../internals/get-built-in');
          var IS_PURE = _dereq_('../internals/is-pure');
          var DESCRIPTORS = _dereq_('../internals/descriptors');
          var NATIVE_SYMBOL = _dereq_('../internals/native-symbol');
          var USE_SYMBOL_AS_UID = _dereq_('../internals/use-symbol-as-uid');
          var fails = _dereq_('../internals/fails');
          var has = _dereq_('../internals/has');
          var isArray = _dereq_('../internals/is-array');
          var isObject = _dereq_('../internals/is-object');
          var anObject = _dereq_('../internals/an-object');
          var toObject = _dereq_('../internals/to-object');
          var toIndexedObject = _dereq_('../internals/to-indexed-object');
          var toPrimitive = _dereq_('../internals/to-primitive');
          var createPropertyDescriptor = _dereq_('../internals/create-property-descriptor');
          var nativeObjectCreate = _dereq_('../internals/object-create');
          var objectKeys = _dereq_('../internals/object-keys');
          var getOwnPropertyNamesModule = _dereq_(
            '../internals/object-get-own-property-names'
          );
          var getOwnPropertyNamesExternal = _dereq_(
            '../internals/object-get-own-property-names-external'
          );
          var getOwnPropertySymbolsModule = _dereq_(
            '../internals/object-get-own-property-symbols'
          );
          var getOwnPropertyDescriptorModule = _dereq_(
            '../internals/object-get-own-property-descriptor'
          );
          var definePropertyModule = _dereq_('../internals/object-define-property');
          var propertyIsEnumerableModule = _dereq_(
            '../internals/object-property-is-enumerable'
          );
          var createNonEnumerableProperty = _dereq_(
            '../internals/create-non-enumerable-property'
          );
          var redefine = _dereq_('../internals/redefine');
          var shared = _dereq_('../internals/shared');
          var sharedKey = _dereq_('../internals/shared-key');
          var hiddenKeys = _dereq_('../internals/hidden-keys');
          var uid = _dereq_('../internals/uid');
          var wellKnownSymbol = _dereq_('../internals/well-known-symbol');
          var wrappedWellKnownSymbolModule = _dereq_(
            '../internals/well-known-symbol-wrapped'
          );
          var defineWellKnownSymbol = _dereq_('../internals/define-well-known-symbol');
          var setToStringTag = _dereq_('../internals/set-to-string-tag');
          var InternalStateModule = _dereq_('../internals/internal-state');
          var $forEach = _dereq_('../internals/array-iteration').forEach;

          var HIDDEN = sharedKey('hidden');
          var SYMBOL = 'Symbol';
          var PROTOTYPE = 'prototype';
          var TO_PRIMITIVE = wellKnownSymbol('toPrimitive');
          var setInternalState = InternalStateModule.set;
          var getInternalState = InternalStateModule.getterFor(SYMBOL);
          var ObjectPrototype = Object[PROTOTYPE];
          var $Symbol = global.Symbol;
          var $stringify = getBuiltIn('JSON', 'stringify');
          var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
          var nativeDefineProperty = definePropertyModule.f;
          var nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;
          var nativePropertyIsEnumerable = propertyIsEnumerableModule.f;
          var AllSymbols = shared('symbols');
          var ObjectPrototypeSymbols = shared('op-symbols');
          var StringToSymbolRegistry = shared('string-to-symbol-registry');
          var SymbolToStringRegistry = shared('symbol-to-string-registry');
          var WellKnownSymbolsStore = shared('wks');
          var QObject = global.QObject;
          // Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
          var USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;

          // fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
          var setSymbolDescriptor =
            DESCRIPTORS &&
            fails(function() {
              return (
                nativeObjectCreate(
                  nativeDefineProperty({}, 'a', {
                    get: function() {
                      return nativeDefineProperty(this, 'a', { value: 7 }).a;
                    }
                  })
                ).a != 7
              );
            })
              ? function(O, P, Attributes) {
                  var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(
                    ObjectPrototype,
                    P
                  );
                  if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];
                  nativeDefineProperty(O, P, Attributes);
                  if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {
                    nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);
                  }
                }
              : nativeDefineProperty;

          var wrap = function(tag, description) {
            var symbol = (AllSymbols[tag] = nativeObjectCreate($Symbol[PROTOTYPE]));
            setInternalState(symbol, {
              type: SYMBOL,
              tag: tag,
              description: description
            });
            if (!DESCRIPTORS) symbol.description = description;
            return symbol;
          };

          var isSymbol = USE_SYMBOL_AS_UID
            ? function(it) {
                return typeof it == 'symbol';
              }
            : function(it) {
                return Object(it) instanceof $Symbol;
              };

          var $defineProperty = function defineProperty(O, P, Attributes) {
            if (O === ObjectPrototype)
              $defineProperty(ObjectPrototypeSymbols, P, Attributes);
            anObject(O);
            var key = toPrimitive(P, true);
            anObject(Attributes);
            if (has(AllSymbols, key)) {
              if (!Attributes.enumerable) {
                if (!has(O, HIDDEN))
                  nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));
                O[HIDDEN][key] = true;
              } else {
                if (has(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;
                Attributes = nativeObjectCreate(Attributes, {
                  enumerable: createPropertyDescriptor(0, false)
                });
              }
              return setSymbolDescriptor(O, key, Attributes);
            }
            return nativeDefineProperty(O, key, Attributes);
          };

          var $defineProperties = function defineProperties(O, Properties) {
            anObject(O);
            var properties = toIndexedObject(Properties);
            var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));
            $forEach(keys, function(key) {
              if (!DESCRIPTORS || $propertyIsEnumerable.call(properties, key))
                $defineProperty(O, key, properties[key]);
            });
            return O;
          };

          var $create = function create(O, Properties) {
            return Properties === undefined
              ? nativeObjectCreate(O)
              : $defineProperties(nativeObjectCreate(O), Properties);
          };

          var $propertyIsEnumerable = function propertyIsEnumerable(V) {
            var P = toPrimitive(V, true);
            var enumerable = nativePropertyIsEnumerable.call(this, P);
            if (
              this === ObjectPrototype &&
              has(AllSymbols, P) &&
              !has(ObjectPrototypeSymbols, P)
            )
              return false;
            return enumerable ||
              !has(this, P) ||
              !has(AllSymbols, P) ||
              (has(this, HIDDEN) && this[HIDDEN][P])
              ? enumerable
              : true;
          };

          var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {
            var it = toIndexedObject(O);
            var key = toPrimitive(P, true);
            if (
              it === ObjectPrototype &&
              has(AllSymbols, key) &&
              !has(ObjectPrototypeSymbols, key)
            )
              return;
            var descriptor = nativeGetOwnPropertyDescriptor(it, key);
            if (
              descriptor &&
              has(AllSymbols, key) &&
              !(has(it, HIDDEN) && it[HIDDEN][key])
            ) {
              descriptor.enumerable = true;
            }
            return descriptor;
          };

          var $getOwnPropertyNames = function getOwnPropertyNames(O) {
            var names = nativeGetOwnPropertyNames(toIndexedObject(O));
            var result = [];
            $forEach(names, function(key) {
              if (!has(AllSymbols, key) && !has(hiddenKeys, key)) result.push(key);
            });
            return result;
          };

          var $getOwnPropertySymbols = function getOwnPropertySymbols(O) {
            var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;
            var names = nativeGetOwnPropertyNames(
              IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O)
            );
            var result = [];
            $forEach(names, function(key) {
              if (
                has(AllSymbols, key) &&
                (!IS_OBJECT_PROTOTYPE || has(ObjectPrototype, key))
              ) {
                result.push(AllSymbols[key]);
              }
            });
            return result;
          };

          // `Symbol` constructor
          // https://tc39.github.io/ecma262/#sec-symbol-constructor
          if (!NATIVE_SYMBOL) {
            $Symbol = function Symbol() {
              if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor');
              var description =
                !arguments.length || arguments[0] === undefined
                  ? undefined
                  : String(arguments[0]);
              var tag = uid(description);
              var setter = function(value) {
                if (this === ObjectPrototype) setter.call(ObjectPrototypeSymbols, value);
                if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
                setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));
              };
              if (DESCRIPTORS && USE_SETTER)
                setSymbolDescriptor(ObjectPrototype, tag, {
                  configurable: true,
                  set: setter
                });
              return wrap(tag, description);
            };

            redefine($Symbol[PROTOTYPE], 'toString', function toString() {
              return getInternalState(this).tag;
            });

            redefine($Symbol, 'withoutSetter', function(description) {
              return wrap(uid(description), description);
            });

            propertyIsEnumerableModule.f = $propertyIsEnumerable;
            definePropertyModule.f = $defineProperty;
            getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;
            getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;
            getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;

            wrappedWellKnownSymbolModule.f = function(name) {
              return wrap(wellKnownSymbol(name), name);
            };

            if (DESCRIPTORS) {
              // https://github.com/tc39/proposal-Symbol-description
              nativeDefineProperty($Symbol[PROTOTYPE], 'description', {
                configurable: true,
                get: function description() {
                  return getInternalState(this).description;
                }
              });
              if (!IS_PURE) {
                redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, {
                  unsafe: true
                });
              }
            }
          }

          $(
            { global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL },
            {
              Symbol: $Symbol
            }
          );

          $forEach(objectKeys(WellKnownSymbolsStore), function(name) {
            defineWellKnownSymbol(name);
          });

          $(
            { target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL },
            {
              // `Symbol.for` method
              // https://tc39.github.io/ecma262/#sec-symbol.for
              for: function(key) {
                var string = String(key);
                if (has(StringToSymbolRegistry, string))
                  return StringToSymbolRegistry[string];
                var symbol = $Symbol(string);
                StringToSymbolRegistry[string] = symbol;
                SymbolToStringRegistry[symbol] = string;
                return symbol;
              },
              // `Symbol.keyFor` method
              // https://tc39.github.io/ecma262/#sec-symbol.keyfor
              keyFor: function keyFor(sym) {
                if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');
                if (has(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];
              },
              useSetter: function() {
                USE_SETTER = true;
              },
              useSimple: function() {
                USE_SETTER = false;
              }
            }
          );

          $(
            { target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS },
            {
              // `Object.create` method
              // https://tc39.github.io/ecma262/#sec-object.create
              create: $create,
              // `Object.defineProperty` method
              // https://tc39.github.io/ecma262/#sec-object.defineproperty
              defineProperty: $defineProperty,
              // `Object.defineProperties` method
              // https://tc39.github.io/ecma262/#sec-object.defineproperties
              defineProperties: $defineProperties,
              // `Object.getOwnPropertyDescriptor` method
              // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptors
              getOwnPropertyDescriptor: $getOwnPropertyDescriptor
            }
          );

          $(
            { target: 'Object', stat: true, forced: !NATIVE_SYMBOL },
            {
              // `Object.getOwnPropertyNames` method
              // https://tc39.github.io/ecma262/#sec-object.getownpropertynames
              getOwnPropertyNames: $getOwnPropertyNames,
              // `Object.getOwnPropertySymbols` method
              // https://tc39.github.io/ecma262/#sec-object.getownpropertysymbols
              getOwnPropertySymbols: $getOwnPropertySymbols
            }
          );

          // Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives
          // https://bugs.chromium.org/p/v8/issues/detail?id=3443
          $(
            {
              target: 'Object',
              stat: true,
              forced: fails(function() {
                getOwnPropertySymbolsModule.f(1);
              })
            },
            {
              getOwnPropertySymbols: function getOwnPropertySymbols(it) {
                return getOwnPropertySymbolsModule.f(toObject(it));
              }
            }
          );

          // `JSON.stringify` method behavior with symbols
          // https://tc39.github.io/ecma262/#sec-json.stringify
          if ($stringify) {
            var FORCED_JSON_STRINGIFY =
              !NATIVE_SYMBOL ||
              fails(function() {
                var symbol = $Symbol();
                // MS Edge converts symbol values to JSON as {}
                return (
                  $stringify([symbol]) != '[null]' ||
                  // WebKit converts symbol values to JSON as null
                  $stringify({ a: symbol }) != '{}' ||
                  // V8 throws on boxed symbols
                  $stringify(Object(symbol)) != '{}'
                );
              });

            $(
              { target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY },
              {
                // eslint-disable-next-line no-unused-vars
                stringify: function stringify(it, replacer, space) {
                  var args = [it];
                  var index = 1;
                  var $replacer;
                  while (arguments.length > index) args.push(arguments[index++]);
                  $replacer = replacer;
                  if ((!isObject(replacer) && it === undefined) || isSymbol(it)) return; // IE8 returns string on undefined
                  if (!isArray(replacer))
                    replacer = function(key, value) {
                      if (typeof $replacer == 'function')
                        value = $replacer.call(this, key, value);
                      if (!isSymbol(value)) return value;
                    };
                  args[1] = replacer;
                  return $stringify.apply(null, args);
                }
              }
            );
          }

          // `Symbol.prototype[@@toPrimitive]` method
          // https://tc39.github.io/ecma262/#sec-symbol.prototype-@@toprimitive
          if (!$Symbol[PROTOTYPE][TO_PRIMITIVE]) {
            createNonEnumerableProperty(
              $Symbol[PROTOTYPE],
              TO_PRIMITIVE,
              $Symbol[PROTOTYPE].valueOf
            );
          }
          // `Symbol.prototype[@@toStringTag]` property
          // https://tc39.github.io/ecma262/#sec-symbol.prototype-@@tostringtag
          setToStringTag($Symbol, SYMBOL);

          hiddenKeys[HIDDEN] = true;
        },
        {
          '../internals/an-object': 28,
          '../internals/array-iteration': 37,
          '../internals/create-non-enumerable-property': 55,
          '../internals/create-property-descriptor': 56,
          '../internals/define-well-known-symbol': 59,
          '../internals/descriptors': 60,
          '../internals/export': 67,
          '../internals/fails': 68,
          '../internals/get-built-in': 73,
          '../internals/global': 76,
          '../internals/has': 77,
          '../internals/hidden-keys': 78,
          '../internals/internal-state': 87,
          '../internals/is-array': 89,
          '../internals/is-object': 91,
          '../internals/is-pure': 92,
          '../internals/native-symbol': 100,
          '../internals/object-create': 107,
          '../internals/object-define-property': 109,
          '../internals/object-get-own-property-descriptor': 110,
          '../internals/object-get-own-property-names': 112,
          '../internals/object-get-own-property-names-external': 111,
          '../internals/object-get-own-property-symbols': 113,
          '../internals/object-keys': 116,
          '../internals/object-property-is-enumerable': 117,
          '../internals/redefine': 125,
          '../internals/set-to-string-tag': 134,
          '../internals/shared': 137,
          '../internals/shared-key': 135,
          '../internals/to-indexed-object': 149,
          '../internals/to-object': 152,
          '../internals/to-primitive': 155,
          '../internals/uid': 160,
          '../internals/use-symbol-as-uid': 161,
          '../internals/well-known-symbol': 163,
          '../internals/well-known-symbol-wrapped': 162
        }
      ],
      212: [
        function(_dereq_, module, exports) {
          'use strict';
          var ArrayBufferViewCore = _dereq_('../internals/array-buffer-view-core');
          var $copyWithin = _dereq_('../internals/array-copy-within');

          var aTypedArray = ArrayBufferViewCore.aTypedArray;
          var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;

          // `%TypedArray%.prototype.copyWithin` method
          // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.copywithin
          exportTypedArrayMethod('copyWithin', function copyWithin(
            target,
            start /* , end */
          ) {
            return $copyWithin.call(
              aTypedArray(this),
              target,
              start,
              arguments.length > 2 ? arguments[2] : undefined
            );
          });
        },
        { '../internals/array-buffer-view-core': 30, '../internals/array-copy-within': 32 }
      ],
      213: [
        function(_dereq_, module, exports) {
          'use strict';
          var ArrayBufferViewCore = _dereq_('../internals/array-buffer-view-core');
          var $every = _dereq_('../internals/array-iteration').every;

          var aTypedArray = ArrayBufferViewCore.aTypedArray;
          var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;

          // `%TypedArray%.prototype.every` method
          // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.every
          exportTypedArrayMethod('every', function every(callbackfn /* , thisArg */) {
            return $every(
              aTypedArray(this),
              callbackfn,
              arguments.length > 1 ? arguments[1] : undefined
            );
          });
        },
        { '../internals/array-buffer-view-core': 30, '../internals/array-iteration': 37 }
      ],
      214: [
        function(_dereq_, module, exports) {
          'use strict';
          var ArrayBufferViewCore = _dereq_('../internals/array-buffer-view-core');
          var $fill = _dereq_('../internals/array-fill');

          var aTypedArray = ArrayBufferViewCore.aTypedArray;
          var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;

          // `%TypedArray%.prototype.fill` method
          // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.fill
          // eslint-disable-next-line no-unused-vars
          exportTypedArrayMethod('fill', function fill(value /* , start, end */) {
            return $fill.apply(aTypedArray(this), arguments);
          });
        },
        { '../internals/array-buffer-view-core': 30, '../internals/array-fill': 33 }
      ],
      215: [
        function(_dereq_, module, exports) {
          'use strict';
          var ArrayBufferViewCore = _dereq_('../internals/array-buffer-view-core');
          var $filter = _dereq_('../internals/array-iteration').filter;
          var speciesConstructor = _dereq_('../internals/species-constructor');

          var aTypedArray = ArrayBufferViewCore.aTypedArray;
          var aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;
          var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;

          // `%TypedArray%.prototype.filter` method
          // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.filter
          exportTypedArrayMethod('filter', function filter(callbackfn /* , thisArg */) {
            var list = $filter(
              aTypedArray(this),
              callbackfn,
              arguments.length > 1 ? arguments[1] : undefined
            );
            var C = speciesConstructor(this, this.constructor);
            var index = 0;
            var length = list.length;
            var result = new (aTypedArrayConstructor(C))(length);
            while (length > index) result[index] = list[index++];
            return result;
          });
        },
        {
          '../internals/array-buffer-view-core': 30,
          '../internals/array-iteration': 37,
          '../internals/species-constructor': 138
        }
      ],
      216: [
        function(_dereq_, module, exports) {
          'use strict';
          var ArrayBufferViewCore = _dereq_('../internals/array-buffer-view-core');
          var $findIndex = _dereq_('../internals/array-iteration').findIndex;

          var aTypedArray = ArrayBufferViewCore.aTypedArray;
          var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;

          // `%TypedArray%.prototype.findIndex` method
          // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.findindex
          exportTypedArrayMethod('findIndex', function findIndex(
            predicate /* , thisArg */
          ) {
            return $findIndex(
              aTypedArray(this),
              predicate,
              arguments.length > 1 ? arguments[1] : undefined
            );
          });
        },
        { '../internals/array-buffer-view-core': 30, '../internals/array-iteration': 37 }
      ],
      217: [
        function(_dereq_, module, exports) {
          'use strict';
          var ArrayBufferViewCore = _dereq_('../internals/array-buffer-view-core');
          var $find = _dereq_('../internals/array-iteration').find;

          var aTypedArray = ArrayBufferViewCore.aTypedArray;
          var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;

          // `%TypedArray%.prototype.find` method
          // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.find
          exportTypedArrayMethod('find', function find(predicate /* , thisArg */) {
            return $find(
              aTypedArray(this),
              predicate,
              arguments.length > 1 ? arguments[1] : undefined
            );
          });
        },
        { '../internals/array-buffer-view-core': 30, '../internals/array-iteration': 37 }
      ],
      218: [
        function(_dereq_, module, exports) {
          var createTypedArrayConstructor = _dereq_('../internals/typed-array-constructor');

          // `Float32Array` constructor
          // https://tc39.github.io/ecma262/#sec-typedarray-objects
          createTypedArrayConstructor('Float32', function(init) {
            return function Float32Array(data, byteOffset, length) {
              return init(this, data, byteOffset, length);
            };
          });
        },
        { '../internals/typed-array-constructor': 157 }
      ],
      219: [
        function(_dereq_, module, exports) {
          var createTypedArrayConstructor = _dereq_('../internals/typed-array-constructor');

          // `Float64Array` constructor
          // https://tc39.github.io/ecma262/#sec-typedarray-objects
          createTypedArrayConstructor('Float64', function(init) {
            return function Float64Array(data, byteOffset, length) {
              return init(this, data, byteOffset, length);
            };
          });
        },
        { '../internals/typed-array-constructor': 157 }
      ],
      220: [
        function(_dereq_, module, exports) {
          'use strict';
          var ArrayBufferViewCore = _dereq_('../internals/array-buffer-view-core');
          var $forEach = _dereq_('../internals/array-iteration').forEach;

          var aTypedArray = ArrayBufferViewCore.aTypedArray;
          var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;

          // `%TypedArray%.prototype.forEach` method
          // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.foreach
          exportTypedArrayMethod('forEach', function forEach(callbackfn /* , thisArg */) {
            $forEach(
              aTypedArray(this),
              callbackfn,
              arguments.length > 1 ? arguments[1] : undefined
            );
          });
        },
        { '../internals/array-buffer-view-core': 30, '../internals/array-iteration': 37 }
      ],
      221: [
        function(_dereq_, module, exports) {
          'use strict';
          var ArrayBufferViewCore = _dereq_('../internals/array-buffer-view-core');
          var $includes = _dereq_('../internals/array-includes').includes;

          var aTypedArray = ArrayBufferViewCore.aTypedArray;
          var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;

          // `%TypedArray%.prototype.includes` method
          // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.includes
          exportTypedArrayMethod('includes', function includes(
            searchElement /* , fromIndex */
          ) {
            return $includes(
              aTypedArray(this),
              searchElement,
              arguments.length > 1 ? arguments[1] : undefined
            );
          });
        },
        { '../internals/array-buffer-view-core': 30, '../internals/array-includes': 36 }
      ],
      222: [
        function(_dereq_, module, exports) {
          'use strict';
          var ArrayBufferViewCore = _dereq_('../internals/array-buffer-view-core');
          var $indexOf = _dereq_('../internals/array-includes').indexOf;

          var aTypedArray = ArrayBufferViewCore.aTypedArray;
          var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;

          // `%TypedArray%.prototype.indexOf` method
          // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.indexof
          exportTypedArrayMethod('indexOf', function indexOf(
            searchElement /* , fromIndex */
          ) {
            return $indexOf(
              aTypedArray(this),
              searchElement,
              arguments.length > 1 ? arguments[1] : undefined
            );
          });
        },
        { '../internals/array-buffer-view-core': 30, '../internals/array-includes': 36 }
      ],
      223: [
        function(_dereq_, module, exports) {
          var createTypedArrayConstructor = _dereq_('../internals/typed-array-constructor');

          // `Int16Array` constructor
          // https://tc39.github.io/ecma262/#sec-typedarray-objects
          createTypedArrayConstructor('Int16', function(init) {
            return function Int16Array(data, byteOffset, length) {
              return init(this, data, byteOffset, length);
            };
          });
        },
        { '../internals/typed-array-constructor': 157 }
      ],
      224: [
        function(_dereq_, module, exports) {
          var createTypedArrayConstructor = _dereq_('../internals/typed-array-constructor');

          // `Int32Array` constructor
          // https://tc39.github.io/ecma262/#sec-typedarray-objects
          createTypedArrayConstructor('Int32', function(init) {
            return function Int32Array(data, byteOffset, length) {
              return init(this, data, byteOffset, length);
            };
          });
        },
        { '../internals/typed-array-constructor': 157 }
      ],
      225: [
        function(_dereq_, module, exports) {
          'use strict';
          var global = _dereq_('../internals/global');
          var ArrayBufferViewCore = _dereq_('../internals/array-buffer-view-core');
          var ArrayIterators = _dereq_('../modules/es.array.iterator');
          var wellKnownSymbol = _dereq_('../internals/well-known-symbol');

          var ITERATOR = wellKnownSymbol('iterator');
          var Uint8Array = global.Uint8Array;
          var arrayValues = ArrayIterators.values;
          var arrayKeys = ArrayIterators.keys;
          var arrayEntries = ArrayIterators.entries;
          var aTypedArray = ArrayBufferViewCore.aTypedArray;
          var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
          var nativeTypedArrayIterator = Uint8Array && Uint8Array.prototype[ITERATOR];

          var CORRECT_ITER_NAME =
            !!nativeTypedArrayIterator &&
            (nativeTypedArrayIterator.name == 'values' ||
              nativeTypedArrayIterator.name == undefined);

          var typedArrayValues = function values() {
            return arrayValues.call(aTypedArray(this));
          };

          // `%TypedArray%.prototype.entries` method
          // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.entries
          exportTypedArrayMethod('entries', function entries() {
            return arrayEntries.call(aTypedArray(this));
          });
          // `%TypedArray%.prototype.keys` method
          // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.keys
          exportTypedArrayMethod('keys', function keys() {
            return arrayKeys.call(aTypedArray(this));
          });
          // `%TypedArray%.prototype.values` method
          // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.values
          exportTypedArrayMethod('values', typedArrayValues, !CORRECT_ITER_NAME);
          // `%TypedArray%.prototype[@@iterator]` method
          // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype-@@iterator
          exportTypedArrayMethod(ITERATOR, typedArrayValues, !CORRECT_ITER_NAME);
        },
        {
          '../internals/array-buffer-view-core': 30,
          '../internals/global': 76,
          '../internals/well-known-symbol': 163,
          '../modules/es.array.iterator': 174
        }
      ],
      226: [
        function(_dereq_, module, exports) {
          'use strict';
          var ArrayBufferViewCore = _dereq_('../internals/array-buffer-view-core');

          var aTypedArray = ArrayBufferViewCore.aTypedArray;
          var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
          var $join = [].join;

          // `%TypedArray%.prototype.join` method
          // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.join
          // eslint-disable-next-line no-unused-vars
          exportTypedArrayMethod('join', function join(separator) {
            return $join.apply(aTypedArray(this), arguments);
          });
        },
        { '../internals/array-buffer-view-core': 30 }
      ],
      227: [
        function(_dereq_, module, exports) {
          'use strict';
          var ArrayBufferViewCore = _dereq_('../internals/array-buffer-view-core');
          var $lastIndexOf = _dereq_('../internals/array-last-index-of');

          var aTypedArray = ArrayBufferViewCore.aTypedArray;
          var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;

          // `%TypedArray%.prototype.lastIndexOf` method
          // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.lastindexof
          // eslint-disable-next-line no-unused-vars
          exportTypedArrayMethod('lastIndexOf', function lastIndexOf(
            searchElement /* , fromIndex */
          ) {
            return $lastIndexOf.apply(aTypedArray(this), arguments);
          });
        },
        {
          '../internals/array-buffer-view-core': 30,
          '../internals/array-last-index-of': 38
        }
      ],
      228: [
        function(_dereq_, module, exports) {
          'use strict';
          var ArrayBufferViewCore = _dereq_('../internals/array-buffer-view-core');
          var $map = _dereq_('../internals/array-iteration').map;
          var speciesConstructor = _dereq_('../internals/species-constructor');

          var aTypedArray = ArrayBufferViewCore.aTypedArray;
          var aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;
          var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;

          // `%TypedArray%.prototype.map` method
          // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.map
          exportTypedArrayMethod('map', function map(mapfn /* , thisArg */) {
            return $map(
              aTypedArray(this),
              mapfn,
              arguments.length > 1 ? arguments[1] : undefined,
              function(O, length) {
                return new (aTypedArrayConstructor(speciesConstructor(O, O.constructor)))(
                  length
                );
              }
            );
          });
        },
        {
          '../internals/array-buffer-view-core': 30,
          '../internals/array-iteration': 37,
          '../internals/species-constructor': 138
        }
      ],
      229: [
        function(_dereq_, module, exports) {
          'use strict';
          var ArrayBufferViewCore = _dereq_('../internals/array-buffer-view-core');
          var $reduceRight = _dereq_('../internals/array-reduce').right;

          var aTypedArray = ArrayBufferViewCore.aTypedArray;
          var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;

          // `%TypedArray%.prototype.reduceRicht` method
          // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.reduceright
          exportTypedArrayMethod('reduceRight', function reduceRight(
            callbackfn /* , initialValue */
          ) {
            return $reduceRight(
              aTypedArray(this),
              callbackfn,
              arguments.length,
              arguments.length > 1 ? arguments[1] : undefined
            );
          });
        },
        { '../internals/array-buffer-view-core': 30, '../internals/array-reduce': 42 }
      ],
      230: [
        function(_dereq_, module, exports) {
          'use strict';
          var ArrayBufferViewCore = _dereq_('../internals/array-buffer-view-core');
          var $reduce = _dereq_('../internals/array-reduce').left;

          var aTypedArray = ArrayBufferViewCore.aTypedArray;
          var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;

          // `%TypedArray%.prototype.reduce` method
          // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.reduce
          exportTypedArrayMethod('reduce', function reduce(
            callbackfn /* , initialValue */
          ) {
            return $reduce(
              aTypedArray(this),
              callbackfn,
              arguments.length,
              arguments.length > 1 ? arguments[1] : undefined
            );
          });
        },
        { '../internals/array-buffer-view-core': 30, '../internals/array-reduce': 42 }
      ],
      231: [
        function(_dereq_, module, exports) {
          'use strict';
          var ArrayBufferViewCore = _dereq_('../internals/array-buffer-view-core');

          var aTypedArray = ArrayBufferViewCore.aTypedArray;
          var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
          var floor = Math.floor;

          // `%TypedArray%.prototype.reverse` method
          // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.reverse
          exportTypedArrayMethod('reverse', function reverse() {
            var that = this;
            var length = aTypedArray(that).length;
            var middle = floor(length / 2);
            var index = 0;
            var value;
            while (index < middle) {
              value = that[index];
              that[index++] = that[--length];
              that[length] = value;
            }
            return that;
          });
        },
        { '../internals/array-buffer-view-core': 30 }
      ],
      232: [
        function(_dereq_, module, exports) {
          'use strict';
          var ArrayBufferViewCore = _dereq_('../internals/array-buffer-view-core');
          var toLength = _dereq_('../internals/to-length');
          var toOffset = _dereq_('../internals/to-offset');
          var toObject = _dereq_('../internals/to-object');
          var fails = _dereq_('../internals/fails');

          var aTypedArray = ArrayBufferViewCore.aTypedArray;
          var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;

          var FORCED = fails(function() {
            // eslint-disable-next-line no-undef
            new Int8Array(1).set({});
          });

          // `%TypedArray%.prototype.set` method
          // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.set
          exportTypedArrayMethod(
            'set',
            function set(arrayLike /* , offset */) {
              aTypedArray(this);
              var offset = toOffset(arguments.length > 1 ? arguments[1] : undefined, 1);
              var length = this.length;
              var src = toObject(arrayLike);
              var len = toLength(src.length);
              var index = 0;
              if (len + offset > length) throw RangeError('Wrong length');
              while (index < len) this[offset + index] = src[index++];
            },
            FORCED
          );
        },
        {
          '../internals/array-buffer-view-core': 30,
          '../internals/fails': 68,
          '../internals/to-length': 151,
          '../internals/to-object': 152,
          '../internals/to-offset': 153
        }
      ],
      233: [
        function(_dereq_, module, exports) {
          'use strict';
          var ArrayBufferViewCore = _dereq_('../internals/array-buffer-view-core');
          var speciesConstructor = _dereq_('../internals/species-constructor');
          var fails = _dereq_('../internals/fails');

          var aTypedArray = ArrayBufferViewCore.aTypedArray;
          var aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;
          var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
          var $slice = [].slice;

          var FORCED = fails(function() {
            // eslint-disable-next-line no-undef
            new Int8Array(1).slice();
          });

          // `%TypedArray%.prototype.slice` method
          // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.slice
          exportTypedArrayMethod(
            'slice',
            function slice(start, end) {
              var list = $slice.call(aTypedArray(this), start, end);
              var C = speciesConstructor(this, this.constructor);
              var index = 0;
              var length = list.length;
              var result = new (aTypedArrayConstructor(C))(length);
              while (length > index) result[index] = list[index++];
              return result;
            },
            FORCED
          );
        },
        {
          '../internals/array-buffer-view-core': 30,
          '../internals/fails': 68,
          '../internals/species-constructor': 138
        }
      ],
      234: [
        function(_dereq_, module, exports) {
          'use strict';
          var ArrayBufferViewCore = _dereq_('../internals/array-buffer-view-core');
          var $some = _dereq_('../internals/array-iteration').some;

          var aTypedArray = ArrayBufferViewCore.aTypedArray;
          var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;

          // `%TypedArray%.prototype.some` method
          // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.some
          exportTypedArrayMethod('some', function some(callbackfn /* , thisArg */) {
            return $some(
              aTypedArray(this),
              callbackfn,
              arguments.length > 1 ? arguments[1] : undefined
            );
          });
        },
        { '../internals/array-buffer-view-core': 30, '../internals/array-iteration': 37 }
      ],
      235: [
        function(_dereq_, module, exports) {
          'use strict';
          var ArrayBufferViewCore = _dereq_('../internals/array-buffer-view-core');

          var aTypedArray = ArrayBufferViewCore.aTypedArray;
          var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
          var $sort = [].sort;

          // `%TypedArray%.prototype.sort` method
          // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.sort
          exportTypedArrayMethod('sort', function sort(comparefn) {
            return $sort.call(aTypedArray(this), comparefn);
          });
        },
        { '../internals/array-buffer-view-core': 30 }
      ],
      236: [
        function(_dereq_, module, exports) {
          'use strict';
          var ArrayBufferViewCore = _dereq_('../internals/array-buffer-view-core');
          var toLength = _dereq_('../internals/to-length');
          var toAbsoluteIndex = _dereq_('../internals/to-absolute-index');
          var speciesConstructor = _dereq_('../internals/species-constructor');

          var aTypedArray = ArrayBufferViewCore.aTypedArray;
          var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;

          // `%TypedArray%.prototype.subarray` method
          // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.subarray
          exportTypedArrayMethod('subarray', function subarray(begin, end) {
            var O = aTypedArray(this);
            var length = O.length;
            var beginIndex = toAbsoluteIndex(begin, length);
            return new (speciesConstructor(
              O,
              O.constructor
            ))(O.buffer, O.byteOffset + beginIndex * O.BYTES_PER_ELEMENT, toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - beginIndex));
          });
        },
        {
          '../internals/array-buffer-view-core': 30,
          '../internals/species-constructor': 138,
          '../internals/to-absolute-index': 147,
          '../internals/to-length': 151
        }
      ],
      237: [
        function(_dereq_, module, exports) {
          'use strict';
          var global = _dereq_('../internals/global');
          var ArrayBufferViewCore = _dereq_('../internals/array-buffer-view-core');
          var fails = _dereq_('../internals/fails');

          var Int8Array = global.Int8Array;
          var aTypedArray = ArrayBufferViewCore.aTypedArray;
          var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
          var $toLocaleString = [].toLocaleString;
          var $slice = [].slice;

          // iOS Safari 6.x fails here
          var TO_LOCALE_STRING_BUG =
            !!Int8Array &&
            fails(function() {
              $toLocaleString.call(new Int8Array(1));
            });

          var FORCED =
            fails(function() {
              return [1, 2].toLocaleString() != new Int8Array([1, 2]).toLocaleString();
            }) ||
            !fails(function() {
              Int8Array.prototype.toLocaleString.call([1, 2]);
            });

          // `%TypedArray%.prototype.toLocaleString` method
          // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.tolocalestring
          exportTypedArrayMethod(
            'toLocaleString',
            function toLocaleString() {
              return $toLocaleString.apply(
                TO_LOCALE_STRING_BUG ? $slice.call(aTypedArray(this)) : aTypedArray(this),
                arguments
              );
            },
            FORCED
          );
        },
        {
          '../internals/array-buffer-view-core': 30,
          '../internals/fails': 68,
          '../internals/global': 76
        }
      ],
      238: [
        function(_dereq_, module, exports) {
          'use strict';
          var exportTypedArrayMethod = _dereq_('../internals/array-buffer-view-core')
            .exportTypedArrayMethod;
          var fails = _dereq_('../internals/fails');
          var global = _dereq_('../internals/global');

          var Uint8Array = global.Uint8Array;
          var Uint8ArrayPrototype = (Uint8Array && Uint8Array.prototype) || {};
          var arrayToString = [].toString;
          var arrayJoin = [].join;

          if (
            fails(function() {
              arrayToString.call({});
            })
          ) {
            arrayToString = function toString() {
              return arrayJoin.call(this);
            };
          }

          var IS_NOT_ARRAY_METHOD = Uint8ArrayPrototype.toString != arrayToString;

          // `%TypedArray%.prototype.toString` method
          // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.tostring
          exportTypedArrayMethod('toString', arrayToString, IS_NOT_ARRAY_METHOD);
        },
        {
          '../internals/array-buffer-view-core': 30,
          '../internals/fails': 68,
          '../internals/global': 76
        }
      ],
      239: [
        function(_dereq_, module, exports) {
          var createTypedArrayConstructor = _dereq_('../internals/typed-array-constructor');

          // `Uint16Array` constructor
          // https://tc39.github.io/ecma262/#sec-typedarray-objects
          createTypedArrayConstructor('Uint16', function(init) {
            return function Uint16Array(data, byteOffset, length) {
              return init(this, data, byteOffset, length);
            };
          });
        },
        { '../internals/typed-array-constructor': 157 }
      ],
      240: [
        function(_dereq_, module, exports) {
          var createTypedArrayConstructor = _dereq_('../internals/typed-array-constructor');

          // `Uint32Array` constructor
          // https://tc39.github.io/ecma262/#sec-typedarray-objects
          createTypedArrayConstructor('Uint32', function(init) {
            return function Uint32Array(data, byteOffset, length) {
              return init(this, data, byteOffset, length);
            };
          });
        },
        { '../internals/typed-array-constructor': 157 }
      ],
      241: [
        function(_dereq_, module, exports) {
          var createTypedArrayConstructor = _dereq_('../internals/typed-array-constructor');

          // `Uint8Array` constructor
          // https://tc39.github.io/ecma262/#sec-typedarray-objects
          createTypedArrayConstructor('Uint8', function(init) {
            return function Uint8Array(data, byteOffset, length) {
              return init(this, data, byteOffset, length);
            };
          });
        },
        { '../internals/typed-array-constructor': 157 }
      ],
      242: [
        function(_dereq_, module, exports) {
          var createTypedArrayConstructor = _dereq_('../internals/typed-array-constructor');

          // `Uint8ClampedArray` constructor
          // https://tc39.github.io/ecma262/#sec-typedarray-objects
          createTypedArrayConstructor(
            'Uint8',
            function(init) {
              return function Uint8ClampedArray(data, byteOffset, length) {
                return init(this, data, byteOffset, length);
              };
            },
            true
          );
        },
        { '../internals/typed-array-constructor': 157 }
      ],
      243: [
        function(_dereq_, module, exports) {
          var global = _dereq_('../internals/global');
          var DOMIterables = _dereq_('../internals/dom-iterables');
          var forEach = _dereq_('../internals/array-for-each');
          var createNonEnumerableProperty = _dereq_(
            '../internals/create-non-enumerable-property'
          );

          for (var COLLECTION_NAME in DOMIterables) {
            var Collection = global[COLLECTION_NAME];
            var CollectionPrototype = Collection && Collection.prototype;
            // some Chrome versions have non-configurable methods on DOMTokenList
            if (CollectionPrototype && CollectionPrototype.forEach !== forEach)
              try {
                createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach);
              } catch (error) {
                CollectionPrototype.forEach = forEach;
              }
          }
        },
        {
          '../internals/array-for-each': 34,
          '../internals/create-non-enumerable-property': 55,
          '../internals/dom-iterables': 62,
          '../internals/global': 76
        }
      ],
      244: [
        function(_dereq_, module, exports) {
          var global = _dereq_('../internals/global');
          var DOMIterables = _dereq_('../internals/dom-iterables');
          var ArrayIteratorMethods = _dereq_('../modules/es.array.iterator');
          var createNonEnumerableProperty = _dereq_(
            '../internals/create-non-enumerable-property'
          );
          var wellKnownSymbol = _dereq_('../internals/well-known-symbol');

          var ITERATOR = wellKnownSymbol('iterator');
          var TO_STRING_TAG = wellKnownSymbol('toStringTag');
          var ArrayValues = ArrayIteratorMethods.values;

          for (var COLLECTION_NAME in DOMIterables) {
            var Collection = global[COLLECTION_NAME];
            var CollectionPrototype = Collection && Collection.prototype;
            if (CollectionPrototype) {
              // some Chrome versions have non-configurable methods on DOMTokenList
              if (CollectionPrototype[ITERATOR] !== ArrayValues)
                try {
                  createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);
                } catch (error) {
                  CollectionPrototype[ITERATOR] = ArrayValues;
                }
              if (!CollectionPrototype[TO_STRING_TAG]) {
                createNonEnumerableProperty(
                  CollectionPrototype,
                  TO_STRING_TAG,
                  COLLECTION_NAME
                );
              }
              if (DOMIterables[COLLECTION_NAME])
                for (var METHOD_NAME in ArrayIteratorMethods) {
                  // some Chrome versions have non-configurable methods on DOMTokenList
                  if (
                    CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]
                  )
                    try {
                      createNonEnumerableProperty(
                        CollectionPrototype,
                        METHOD_NAME,
                        ArrayIteratorMethods[METHOD_NAME]
                      );
                    } catch (error) {
                      CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];
                    }
                }
            }
          }
        },
        {
          '../internals/create-non-enumerable-property': 55,
          '../internals/dom-iterables': 62,
          '../internals/global': 76,
          '../internals/well-known-symbol': 163,
          '../modules/es.array.iterator': 174
        }
      ],
      245: [
        function(_dereq_, module, exports) {
          'use strict';
          // TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`
          _dereq_('../modules/es.array.iterator');
          var $ = _dereq_('../internals/export');
          var getBuiltIn = _dereq_('../internals/get-built-in');
          var USE_NATIVE_URL = _dereq_('../internals/native-url');
          var redefine = _dereq_('../internals/redefine');
          var redefineAll = _dereq_('../internals/redefine-all');
          var setToStringTag = _dereq_('../internals/set-to-string-tag');
          var createIteratorConstructor = _dereq_(
            '../internals/create-iterator-constructor'
          );
          var InternalStateModule = _dereq_('../internals/internal-state');
          var anInstance = _dereq_('../internals/an-instance');
          var hasOwn = _dereq_('../internals/has');
          var bind = _dereq_('../internals/function-bind-context');
          var classof = _dereq_('../internals/classof');
          var anObject = _dereq_('../internals/an-object');
          var isObject = _dereq_('../internals/is-object');
          var create = _dereq_('../internals/object-create');
          var createPropertyDescriptor = _dereq_('../internals/create-property-descriptor');
          var getIterator = _dereq_('../internals/get-iterator');
          var getIteratorMethod = _dereq_('../internals/get-iterator-method');
          var wellKnownSymbol = _dereq_('../internals/well-known-symbol');

          var $fetch = getBuiltIn('fetch');
          var Headers = getBuiltIn('Headers');
          var ITERATOR = wellKnownSymbol('iterator');
          var URL_SEARCH_PARAMS = 'URLSearchParams';
          var URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator';
          var setInternalState = InternalStateModule.set;
          var getInternalParamsState = InternalStateModule.getterFor(URL_SEARCH_PARAMS);
          var getInternalIteratorState = InternalStateModule.getterFor(
            URL_SEARCH_PARAMS_ITERATOR
          );

          var plus = /\+/g;
          var sequences = Array(4);

          var percentSequence = function(bytes) {
            return (
              sequences[bytes - 1] ||
              (sequences[bytes - 1] = RegExp('((?:%[\\da-f]{2}){' + bytes + '})', 'gi'))
            );
          };

          var percentDecode = function(sequence) {
            try {
              return decodeURIComponent(sequence);
            } catch (error) {
              return sequence;
            }
          };

          var deserialize = function(it) {
            var result = it.replace(plus, ' ');
            var bytes = 4;
            try {
              return decodeURIComponent(result);
            } catch (error) {
              while (bytes) {
                result = result.replace(percentSequence(bytes--), percentDecode);
              }
              return result;
            }
          };

          var find = /[!'()~]|%20/g;

          var replace = {
            '!': '%21',
            "'": '%27',
            '(': '%28',
            ')': '%29',
            '~': '%7E',
            '%20': '+'
          };

          var replacer = function(match) {
            return replace[match];
          };

          var serialize = function(it) {
            return encodeURIComponent(it).replace(find, replacer);
          };

          var parseSearchParams = function(result, query) {
            if (query) {
              var attributes = query.split('&');
              var index = 0;
              var attribute, entry;
              while (index < attributes.length) {
                attribute = attributes[index++];
                if (attribute.length) {
                  entry = attribute.split('=');
                  result.push({
                    key: deserialize(entry.shift()),
                    value: deserialize(entry.join('='))
                  });
                }
              }
            }
          };

          var updateSearchParams = function(query) {
            this.entries.length = 0;
            parseSearchParams(this.entries, query);
          };

          var validateArgumentsLength = function(passed, required) {
            if (passed < required) throw TypeError('Not enough arguments');
          };

          var URLSearchParamsIterator = createIteratorConstructor(
            function Iterator(params, kind) {
              setInternalState(this, {
                type: URL_SEARCH_PARAMS_ITERATOR,
                iterator: getIterator(getInternalParamsState(params).entries),
                kind: kind
              });
            },
            'Iterator',
            function next() {
              var state = getInternalIteratorState(this);
              var kind = state.kind;
              var step = state.iterator.next();
              var entry = step.value;
              if (!step.done) {
                step.value =
                  kind === 'keys'
                    ? entry.key
                    : kind === 'values' ? entry.value : [entry.key, entry.value];
              }
              return step;
            }
          );

          // `URLSearchParams` constructor
          // https://url.spec.whatwg.org/#interface-urlsearchparams
          var URLSearchParamsConstructor = function URLSearchParams(/* init */) {
            anInstance(this, URLSearchParamsConstructor, URL_SEARCH_PARAMS);
            var init = arguments.length > 0 ? arguments[0] : undefined;
            var that = this;
            var entries = [];
            var iteratorMethod,
              iterator,
              next,
              step,
              entryIterator,
              entryNext,
              first,
              second,
              key;

            setInternalState(that, {
              type: URL_SEARCH_PARAMS,
              entries: entries,
              updateURL: function() {
                /* empty */
              },
              updateSearchParams: updateSearchParams
            });

            if (init !== undefined) {
              if (isObject(init)) {
                iteratorMethod = getIteratorMethod(init);
                if (typeof iteratorMethod === 'function') {
                  iterator = iteratorMethod.call(init);
                  next = iterator.next;
                  while (!(step = next.call(iterator)).done) {
                    entryIterator = getIterator(anObject(step.value));
                    entryNext = entryIterator.next;
                    if (
                      (first = entryNext.call(entryIterator)).done ||
                      (second = entryNext.call(entryIterator)).done ||
                      !entryNext.call(entryIterator).done
                    )
                      throw TypeError('Expected sequence with length 2');
                    entries.push({ key: first.value + '', value: second.value + '' });
                  }
                } else
                  for (key in init)
                    if (hasOwn(init, key))
                      entries.push({ key: key, value: init[key] + '' });
              } else {
                parseSearchParams(
                  entries,
                  typeof init === 'string'
                    ? init.charAt(0) === '?' ? init.slice(1) : init
                    : init + ''
                );
              }
            }
          };

          var URLSearchParamsPrototype = URLSearchParamsConstructor.prototype;

          redefineAll(
            URLSearchParamsPrototype,
            {
              // `URLSearchParams.prototype.appent` method
              // https://url.spec.whatwg.org/#dom-urlsearchparams-append
              append: function append(name, value) {
                validateArgumentsLength(arguments.length, 2);
                var state = getInternalParamsState(this);
                state.entries.push({ key: name + '', value: value + '' });
                state.updateURL();
              },
              // `URLSearchParams.prototype.delete` method
              // https://url.spec.whatwg.org/#dom-urlsearchparams-delete
              delete: function(name) {
                validateArgumentsLength(arguments.length, 1);
                var state = getInternalParamsState(this);
                var entries = state.entries;
                var key = name + '';
                var index = 0;
                while (index < entries.length) {
                  if (entries[index].key === key) entries.splice(index, 1);
                  else index++;
                }
                state.updateURL();
              },
              // `URLSearchParams.prototype.get` method
              // https://url.spec.whatwg.org/#dom-urlsearchparams-get
              get: function get(name) {
                validateArgumentsLength(arguments.length, 1);
                var entries = getInternalParamsState(this).entries;
                var key = name + '';
                var index = 0;
                for (; index < entries.length; index++) {
                  if (entries[index].key === key) return entries[index].value;
                }
                return null;
              },
              // `URLSearchParams.prototype.getAll` method
              // https://url.spec.whatwg.org/#dom-urlsearchparams-getall
              getAll: function getAll(name) {
                validateArgumentsLength(arguments.length, 1);
                var entries = getInternalParamsState(this).entries;
                var key = name + '';
                var result = [];
                var index = 0;
                for (; index < entries.length; index++) {
                  if (entries[index].key === key) result.push(entries[index].value);
                }
                return result;
              },
              // `URLSearchParams.prototype.has` method
              // https://url.spec.whatwg.org/#dom-urlsearchparams-has
              has: function has(name) {
                validateArgumentsLength(arguments.length, 1);
                var entries = getInternalParamsState(this).entries;
                var key = name + '';
                var index = 0;
                while (index < entries.length) {
                  if (entries[index++].key === key) return true;
                }
                return false;
              },
              // `URLSearchParams.prototype.set` method
              // https://url.spec.whatwg.org/#dom-urlsearchparams-set
              set: function set(name, value) {
                validateArgumentsLength(arguments.length, 1);
                var state = getInternalParamsState(this);
                var entries = state.entries;
                var found = false;
                var key = name + '';
                var val = value + '';
                var index = 0;
                var entry;
                for (; index < entries.length; index++) {
                  entry = entries[index];
                  if (entry.key === key) {
                    if (found) entries.splice(index--, 1);
                    else {
                      found = true;
                      entry.value = val;
                    }
                  }
                }
                if (!found) entries.push({ key: key, value: val });
                state.updateURL();
              },
              // `URLSearchParams.prototype.sort` method
              // https://url.spec.whatwg.org/#dom-urlsearchparams-sort
              sort: function sort() {
                var state = getInternalParamsState(this);
                var entries = state.entries;
                // Array#sort is not stable in some engines
                var slice = entries.slice();
                var entry, entriesIndex, sliceIndex;
                entries.length = 0;
                for (sliceIndex = 0; sliceIndex < slice.length; sliceIndex++) {
                  entry = slice[sliceIndex];
                  for (entriesIndex = 0; entriesIndex < sliceIndex; entriesIndex++) {
                    if (entries[entriesIndex].key > entry.key) {
                      entries.splice(entriesIndex, 0, entry);
                      break;
                    }
                  }
                  if (entriesIndex === sliceIndex) entries.push(entry);
                }
                state.updateURL();
              },
              // `URLSearchParams.prototype.forEach` method
              forEach: function forEach(callback /* , thisArg */) {
                var entries = getInternalParamsState(this).entries;
                var boundFunction = bind(
                  callback,
                  arguments.length > 1 ? arguments[1] : undefined,
                  3
                );
                var index = 0;
                var entry;
                while (index < entries.length) {
                  entry = entries[index++];
                  boundFunction(entry.value, entry.key, this);
                }
              },
              // `URLSearchParams.prototype.keys` method
              keys: function keys() {
                return new URLSearchParamsIterator(this, 'keys');
              },
              // `URLSearchParams.prototype.values` method
              values: function values() {
                return new URLSearchParamsIterator(this, 'values');
              },
              // `URLSearchParams.prototype.entries` method
              entries: function entries() {
                return new URLSearchParamsIterator(this, 'entries');
              }
            },
            { enumerable: true }
          );

          // `URLSearchParams.prototype[@@iterator]` method
          redefine(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries);

          // `URLSearchParams.prototype.toString` method
          // https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior
          redefine(
            URLSearchParamsPrototype,
            'toString',
            function toString() {
              var entries = getInternalParamsState(this).entries;
              var result = [];
              var index = 0;
              var entry;
              while (index < entries.length) {
                entry = entries[index++];
                result.push(serialize(entry.key) + '=' + serialize(entry.value));
              }
              return result.join('&');
            },
            { enumerable: true }
          );

          setToStringTag(URLSearchParamsConstructor, URL_SEARCH_PARAMS);

          $(
            { global: true, forced: !USE_NATIVE_URL },
            {
              URLSearchParams: URLSearchParamsConstructor
            }
          );

          // Wrap `fetch` for correct work with polyfilled `URLSearchParams`
          // https://github.com/zloirock/core-js/issues/674
          if (
            !USE_NATIVE_URL &&
            typeof $fetch == 'function' &&
            typeof Headers == 'function'
          ) {
            $(
              { global: true, enumerable: true, forced: true },
              {
                fetch: function fetch(input /* , init */) {
                  var args = [input];
                  var init, body, headers;
                  if (arguments.length > 1) {
                    init = arguments[1];
                    if (isObject(init)) {
                      body = init.body;
                      if (classof(body) === URL_SEARCH_PARAMS) {
                        headers = init.headers ? new Headers(init.headers) : new Headers();
                        if (!headers.has('content-type')) {
                          headers.set(
                            'content-type',
                            'application/x-www-form-urlencoded;charset=UTF-8'
                          );
                        }
                        init = create(init, {
                          body: createPropertyDescriptor(0, String(body)),
                          headers: createPropertyDescriptor(0, headers)
                        });
                      }
                    }
                    args.push(init);
                  }
                  return $fetch.apply(this, args);
                }
              }
            );
          }

          module.exports = {
            URLSearchParams: URLSearchParamsConstructor,
            getState: getInternalParamsState
          };
        },
        {
          '../internals/an-instance': 27,
          '../internals/an-object': 28,
          '../internals/classof': 47,
          '../internals/create-iterator-constructor': 54,
          '../internals/create-property-descriptor': 56,
          '../internals/export': 67,
          '../internals/function-bind-context': 71,
          '../internals/get-built-in': 73,
          '../internals/get-iterator': 75,
          '../internals/get-iterator-method': 74,
          '../internals/has': 77,
          '../internals/internal-state': 87,
          '../internals/is-object': 91,
          '../internals/native-url': 101,
          '../internals/object-create': 107,
          '../internals/redefine': 125,
          '../internals/redefine-all': 124,
          '../internals/set-to-string-tag': 134,
          '../internals/well-known-symbol': 163,
          '../modules/es.array.iterator': 174
        }
      ],
      246: [
        function(_dereq_, module, exports) {
          'use strict';
          // TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`
          _dereq_('../modules/es.string.iterator');
          var $ = _dereq_('../internals/export');
          var DESCRIPTORS = _dereq_('../internals/descriptors');
          var USE_NATIVE_URL = _dereq_('../internals/native-url');
          var global = _dereq_('../internals/global');
          var defineProperties = _dereq_('../internals/object-define-properties');
          var redefine = _dereq_('../internals/redefine');
          var anInstance = _dereq_('../internals/an-instance');
          var has = _dereq_('../internals/has');
          var assign = _dereq_('../internals/object-assign');
          var arrayFrom = _dereq_('../internals/array-from');
          var codeAt = _dereq_('../internals/string-multibyte').codeAt;
          var toASCII = _dereq_('../internals/string-punycode-to-ascii');
          var setToStringTag = _dereq_('../internals/set-to-string-tag');
          var URLSearchParamsModule = _dereq_('../modules/web.url-search-params');
          var InternalStateModule = _dereq_('../internals/internal-state');

          var NativeURL = global.URL;
          var URLSearchParams = URLSearchParamsModule.URLSearchParams;
          var getInternalSearchParamsState = URLSearchParamsModule.getState;
          var setInternalState = InternalStateModule.set;
          var getInternalURLState = InternalStateModule.getterFor('URL');
          var floor = Math.floor;
          var pow = Math.pow;

          var INVALID_AUTHORITY = 'Invalid authority';
          var INVALID_SCHEME = 'Invalid scheme';
          var INVALID_HOST = 'Invalid host';
          var INVALID_PORT = 'Invalid port';

          var ALPHA = /[A-Za-z]/;
          var ALPHANUMERIC = /[\d+-.A-Za-z]/;
          var DIGIT = /\d/;
          var HEX_START = /^(0x|0X)/;
          var OCT = /^[0-7]+$/;
          var DEC = /^\d+$/;
          var HEX = /^[\dA-Fa-f]+$/;
          // eslint-disable-next-line no-control-regex
          var FORBIDDEN_HOST_CODE_POINT = /[\u0000\u0009\u000A\u000D #%/:?@[\\]]/;
          // eslint-disable-next-line no-control-regex
          var FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\u0000\u0009\u000A\u000D #/:?@[\\]]/;
          // eslint-disable-next-line no-control-regex
          var LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\u0000-\u001F ]+|[\u0000-\u001F ]+$/g;
          // eslint-disable-next-line no-control-regex
          var TAB_AND_NEW_LINE = /[\u0009\u000A\u000D]/g;
          var EOF;

          var parseHost = function(url, input) {
            var result, codePoints, index;
            if (input.charAt(0) == '[') {
              if (input.charAt(input.length - 1) != ']') return INVALID_HOST;
              result = parseIPv6(input.slice(1, -1));
              if (!result) return INVALID_HOST;
              url.host = result;
              // opaque host
            } else if (!isSpecial(url)) {
              if (FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT.test(input))
                return INVALID_HOST;
              result = '';
              codePoints = arrayFrom(input);
              for (index = 0; index < codePoints.length; index++) {
                result += percentEncode(codePoints[index], C0ControlPercentEncodeSet);
              }
              url.host = result;
            } else {
              input = toASCII(input);
              if (FORBIDDEN_HOST_CODE_POINT.test(input)) return INVALID_HOST;
              result = parseIPv4(input);
              if (result === null) return INVALID_HOST;
              url.host = result;
            }
          };

          var parseIPv4 = function(input) {
            var parts = input.split('.');
            var partsLength, numbers, index, part, radix, number, ipv4;
            if (parts.length && parts[parts.length - 1] == '') {
              parts.pop();
            }
            partsLength = parts.length;
            if (partsLength > 4) return input;
            numbers = [];
            for (index = 0; index < partsLength; index++) {
              part = parts[index];
              if (part == '') return input;
              radix = 10;
              if (part.length > 1 && part.charAt(0) == '0') {
                radix = HEX_START.test(part) ? 16 : 8;
                part = part.slice(radix == 8 ? 1 : 2);
              }
              if (part === '') {
                number = 0;
              } else {
                if (!(radix == 10 ? DEC : radix == 8 ? OCT : HEX).test(part)) return input;
                number = parseInt(part, radix);
              }
              numbers.push(number);
            }
            for (index = 0; index < partsLength; index++) {
              number = numbers[index];
              if (index == partsLength - 1) {
                if (number >= pow(256, 5 - partsLength)) return null;
              } else if (number > 255) return null;
            }
            ipv4 = numbers.pop();
            for (index = 0; index < numbers.length; index++) {
              ipv4 += numbers[index] * pow(256, 3 - index);
            }
            return ipv4;
          };

          // eslint-disable-next-line max-statements
          var parseIPv6 = function(input) {
            var address = [0, 0, 0, 0, 0, 0, 0, 0];
            var pieceIndex = 0;
            var compress = null;
            var pointer = 0;
            var value, length, numbersSeen, ipv4Piece, number, swaps, swap;

            var char = function() {
              return input.charAt(pointer);
            };

            if (char() == ':') {
              if (input.charAt(1) != ':') return;
              pointer += 2;
              pieceIndex++;
              compress = pieceIndex;
            }
            while (char()) {
              if (pieceIndex == 8) return;
              if (char() == ':') {
                if (compress !== null) return;
                pointer++;
                pieceIndex++;
                compress = pieceIndex;
                continue;
              }
              value = length = 0;
              while (length < 4 && HEX.test(char())) {
                value = value * 16 + parseInt(char(), 16);
                pointer++;
                length++;
              }
              if (char() == '.') {
                if (length == 0) return;
                pointer -= length;
                if (pieceIndex > 6) return;
                numbersSeen = 0;
                while (char()) {
                  ipv4Piece = null;
                  if (numbersSeen > 0) {
                    if (char() == '.' && numbersSeen < 4) pointer++;
                    else return;
                  }
                  if (!DIGIT.test(char())) return;
                  while (DIGIT.test(char())) {
                    number = parseInt(char(), 10);
                    if (ipv4Piece === null) ipv4Piece = number;
                    else if (ipv4Piece == 0) return;
                    else ipv4Piece = ipv4Piece * 10 + number;
                    if (ipv4Piece > 255) return;
                    pointer++;
                  }
                  address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece;
                  numbersSeen++;
                  if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++;
                }
                if (numbersSeen != 4) return;
                break;
              } else if (char() == ':') {
                pointer++;
                if (!char()) return;
              } else if (char()) return;
              address[pieceIndex++] = value;
            }
            if (compress !== null) {
              swaps = pieceIndex - compress;
              pieceIndex = 7;
              while (pieceIndex != 0 && swaps > 0) {
                swap = address[pieceIndex];
                address[pieceIndex--] = address[compress + swaps - 1];
                address[compress + --swaps] = swap;
              }
            } else if (pieceIndex != 8) return;
            return address;
          };

          var findLongestZeroSequence = function(ipv6) {
            var maxIndex = null;
            var maxLength = 1;
            var currStart = null;
            var currLength = 0;
            var index = 0;
            for (; index < 8; index++) {
              if (ipv6[index] !== 0) {
                if (currLength > maxLength) {
                  maxIndex = currStart;
                  maxLength = currLength;
                }
                currStart = null;
                currLength = 0;
              } else {
                if (currStart === null) currStart = index;
                ++currLength;
              }
            }
            if (currLength > maxLength) {
              maxIndex = currStart;
              maxLength = currLength;
            }
            return maxIndex;
          };

          var serializeHost = function(host) {
            var result, index, compress, ignore0;
            // ipv4
            if (typeof host == 'number') {
              result = [];
              for (index = 0; index < 4; index++) {
                result.unshift(host % 256);
                host = floor(host / 256);
              }
              return result.join('.');
              // ipv6
            } else if (typeof host == 'object') {
              result = '';
              compress = findLongestZeroSequence(host);
              for (index = 0; index < 8; index++) {
                if (ignore0 && host[index] === 0) continue;
                if (ignore0) ignore0 = false;
                if (compress === index) {
                  result += index ? ':' : '::';
                  ignore0 = true;
                } else {
                  result += host[index].toString(16);
                  if (index < 7) result += ':';
                }
              }
              return '[' + result + ']';
            }
            return host;
          };

          var C0ControlPercentEncodeSet = {};
          var fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, {
            ' ': 1,
            '"': 1,
            '<': 1,
            '>': 1,
            '`': 1
          });
          var pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, {
            '#': 1,
            '?': 1,
            '{': 1,
            '}': 1
          });
          var userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, {
            '/': 1,
            ':': 1,
            ';': 1,
            '=': 1,
            '@': 1,
            '[': 1,
            '\\': 1,
            ']': 1,
            '^': 1,
            '|': 1
          });

          var percentEncode = function(char, set) {
            var code = codeAt(char, 0);
            return code > 0x20 && code < 0x7f && !has(set, char)
              ? char
              : encodeURIComponent(char);
          };

          var specialSchemes = {
            ftp: 21,
            file: null,
            http: 80,
            https: 443,
            ws: 80,
            wss: 443
          };

          var isSpecial = function(url) {
            return has(specialSchemes, url.scheme);
          };

          var includesCredentials = function(url) {
            return url.username != '' || url.password != '';
          };

          var cannotHaveUsernamePasswordPort = function(url) {
            return !url.host || url.cannotBeABaseURL || url.scheme == 'file';
          };

          var isWindowsDriveLetter = function(string, normalized) {
            var second;
            return (
              string.length == 2 &&
              ALPHA.test(string.charAt(0)) &&
              ((second = string.charAt(1)) == ':' || (!normalized && second == '|'))
            );
          };

          var startsWithWindowsDriveLetter = function(string) {
            var third;
            return (
              string.length > 1 &&
              isWindowsDriveLetter(string.slice(0, 2)) &&
              (string.length == 2 ||
                ((third = string.charAt(2)) === '/' ||
                  third === '\\' ||
                  third === '?' ||
                  third === '#'))
            );
          };

          var shortenURLsPath = function(url) {
            var path = url.path;
            var pathSize = path.length;
            if (
              pathSize &&
              (url.scheme != 'file' ||
                pathSize != 1 ||
                !isWindowsDriveLetter(path[0], true))
            ) {
              path.pop();
            }
          };

          var isSingleDot = function(segment) {
            return segment === '.' || segment.toLowerCase() === '%2e';
          };

          var isDoubleDot = function(segment) {
            segment = segment.toLowerCase();
            return (
              segment === '..' ||
              segment === '%2e.' ||
              segment === '.%2e' ||
              segment === '%2e%2e'
            );
          };

          // States:
          var SCHEME_START = {};
          var SCHEME = {};
          var NO_SCHEME = {};
          var SPECIAL_RELATIVE_OR_AUTHORITY = {};
          var PATH_OR_AUTHORITY = {};
          var RELATIVE = {};
          var RELATIVE_SLASH = {};
          var SPECIAL_AUTHORITY_SLASHES = {};
          var SPECIAL_AUTHORITY_IGNORE_SLASHES = {};
          var AUTHORITY = {};
          var HOST = {};
          var HOSTNAME = {};
          var PORT = {};
          var FILE = {};
          var FILE_SLASH = {};
          var FILE_HOST = {};
          var PATH_START = {};
          var PATH = {};
          var CANNOT_BE_A_BASE_URL_PATH = {};
          var QUERY = {};
          var FRAGMENT = {};

          // eslint-disable-next-line max-statements
          var parseURL = function(url, input, stateOverride, base) {
            var state = stateOverride || SCHEME_START;
            var pointer = 0;
            var buffer = '';
            var seenAt = false;
            var seenBracket = false;
            var seenPasswordToken = false;
            var codePoints, char, bufferCodePoints, failure;

            if (!stateOverride) {
              url.scheme = '';
              url.username = '';
              url.password = '';
              url.host = null;
              url.port = null;
              url.path = [];
              url.query = null;
              url.fragment = null;
              url.cannotBeABaseURL = false;
              input = input.replace(LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, '');
            }

            input = input.replace(TAB_AND_NEW_LINE, '');

            codePoints = arrayFrom(input);

            while (pointer <= codePoints.length) {
              char = codePoints[pointer];
              switch (state) {
                case SCHEME_START:
                  if (char && ALPHA.test(char)) {
                    buffer += char.toLowerCase();
                    state = SCHEME;
                  } else if (!stateOverride) {
                    state = NO_SCHEME;
                    continue;
                  } else return INVALID_SCHEME;
                  break;

                case SCHEME:
                  if (
                    char &&
                    (ALPHANUMERIC.test(char) || char == '+' || char == '-' || char == '.')
                  ) {
                    buffer += char.toLowerCase();
                  } else if (char == ':') {
                    if (
                      stateOverride &&
                      (isSpecial(url) != has(specialSchemes, buffer) ||
                        (buffer == 'file' &&
                          (includesCredentials(url) || url.port !== null)) ||
                        (url.scheme == 'file' && !url.host))
                    )
                      return;
                    url.scheme = buffer;
                    if (stateOverride) {
                      if (isSpecial(url) && specialSchemes[url.scheme] == url.port)
                        url.port = null;
                      return;
                    }
                    buffer = '';
                    if (url.scheme == 'file') {
                      state = FILE;
                    } else if (isSpecial(url) && base && base.scheme == url.scheme) {
                      state = SPECIAL_RELATIVE_OR_AUTHORITY;
                    } else if (isSpecial(url)) {
                      state = SPECIAL_AUTHORITY_SLASHES;
                    } else if (codePoints[pointer + 1] == '/') {
                      state = PATH_OR_AUTHORITY;
                      pointer++;
                    } else {
                      url.cannotBeABaseURL = true;
                      url.path.push('');
                      state = CANNOT_BE_A_BASE_URL_PATH;
                    }
                  } else if (!stateOverride) {
                    buffer = '';
                    state = NO_SCHEME;
                    pointer = 0;
                    continue;
                  } else return INVALID_SCHEME;
                  break;

                case NO_SCHEME:
                  if (!base || (base.cannotBeABaseURL && char != '#'))
                    return INVALID_SCHEME;
                  if (base.cannotBeABaseURL && char == '#') {
                    url.scheme = base.scheme;
                    url.path = base.path.slice();
                    url.query = base.query;
                    url.fragment = '';
                    url.cannotBeABaseURL = true;
                    state = FRAGMENT;
                    break;
                  }
                  state = base.scheme == 'file' ? FILE : RELATIVE;
                  continue;

                case SPECIAL_RELATIVE_OR_AUTHORITY:
                  if (char == '/' && codePoints[pointer + 1] == '/') {
                    state = SPECIAL_AUTHORITY_IGNORE_SLASHES;
                    pointer++;
                  } else {
                    state = RELATIVE;
                    continue;
                  }
                  break;

                case PATH_OR_AUTHORITY:
                  if (char == '/') {
                    state = AUTHORITY;
                    break;
                  } else {
                    state = PATH;
                    continue;
                  }

                case RELATIVE:
                  url.scheme = base.scheme;
                  if (char == EOF) {
                    url.username = base.username;
                    url.password = base.password;
                    url.host = base.host;
                    url.port = base.port;
                    url.path = base.path.slice();
                    url.query = base.query;
                  } else if (char == '/' || (char == '\\' && isSpecial(url))) {
                    state = RELATIVE_SLASH;
                  } else if (char == '?') {
                    url.username = base.username;
                    url.password = base.password;
                    url.host = base.host;
                    url.port = base.port;
                    url.path = base.path.slice();
                    url.query = '';
                    state = QUERY;
                  } else if (char == '#') {
                    url.username = base.username;
                    url.password = base.password;
                    url.host = base.host;
                    url.port = base.port;
                    url.path = base.path.slice();
                    url.query = base.query;
                    url.fragment = '';
                    state = FRAGMENT;
                  } else {
                    url.username = base.username;
                    url.password = base.password;
                    url.host = base.host;
                    url.port = base.port;
                    url.path = base.path.slice();
                    url.path.pop();
                    state = PATH;
                    continue;
                  }
                  break;

                case RELATIVE_SLASH:
                  if (isSpecial(url) && (char == '/' || char == '\\')) {
                    state = SPECIAL_AUTHORITY_IGNORE_SLASHES;
                  } else if (char == '/') {
                    state = AUTHORITY;
                  } else {
                    url.username = base.username;
                    url.password = base.password;
                    url.host = base.host;
                    url.port = base.port;
                    state = PATH;
                    continue;
                  }
                  break;

                case SPECIAL_AUTHORITY_SLASHES:
                  state = SPECIAL_AUTHORITY_IGNORE_SLASHES;
                  if (char != '/' || buffer.charAt(pointer + 1) != '/') continue;
                  pointer++;
                  break;

                case SPECIAL_AUTHORITY_IGNORE_SLASHES:
                  if (char != '/' && char != '\\') {
                    state = AUTHORITY;
                    continue;
                  }
                  break;

                case AUTHORITY:
                  if (char == '@') {
                    if (seenAt) buffer = '%40' + buffer;
                    seenAt = true;
                    bufferCodePoints = arrayFrom(buffer);
                    for (var i = 0; i < bufferCodePoints.length; i++) {
                      var codePoint = bufferCodePoints[i];
                      if (codePoint == ':' && !seenPasswordToken) {
                        seenPasswordToken = true;
                        continue;
                      }
                      var encodedCodePoints = percentEncode(
                        codePoint,
                        userinfoPercentEncodeSet
                      );
                      if (seenPasswordToken) url.password += encodedCodePoints;
                      else url.username += encodedCodePoints;
                    }
                    buffer = '';
                  } else if (
                    char == EOF ||
                    char == '/' ||
                    char == '?' ||
                    char == '#' ||
                    (char == '\\' && isSpecial(url))
                  ) {
                    if (seenAt && buffer == '') return INVALID_AUTHORITY;
                    pointer -= arrayFrom(buffer).length + 1;
                    buffer = '';
                    state = HOST;
                  } else buffer += char;
                  break;

                case HOST:
                case HOSTNAME:
                  if (stateOverride && url.scheme == 'file') {
                    state = FILE_HOST;
                    continue;
                  } else if (char == ':' && !seenBracket) {
                    if (buffer == '') return INVALID_HOST;
                    failure = parseHost(url, buffer);
                    if (failure) return failure;
                    buffer = '';
                    state = PORT;
                    if (stateOverride == HOSTNAME) return;
                  } else if (
                    char == EOF ||
                    char == '/' ||
                    char == '?' ||
                    char == '#' ||
                    (char == '\\' && isSpecial(url))
                  ) {
                    if (isSpecial(url) && buffer == '') return INVALID_HOST;
                    if (
                      stateOverride &&
                      buffer == '' &&
                      (includesCredentials(url) || url.port !== null)
                    )
                      return;
                    failure = parseHost(url, buffer);
                    if (failure) return failure;
                    buffer = '';
                    state = PATH_START;
                    if (stateOverride) return;
                    continue;
                  } else {
                    if (char == '[') seenBracket = true;
                    else if (char == ']') seenBracket = false;
                    buffer += char;
                  }
                  break;

                case PORT:
                  if (DIGIT.test(char)) {
                    buffer += char;
                  } else if (
                    char == EOF ||
                    char == '/' ||
                    char == '?' ||
                    char == '#' ||
                    (char == '\\' && isSpecial(url)) ||
                    stateOverride
                  ) {
                    if (buffer != '') {
                      var port = parseInt(buffer, 10);
                      if (port > 0xffff) return INVALID_PORT;
                      url.port =
                        isSpecial(url) && port === specialSchemes[url.scheme] ? null : port;
                      buffer = '';
                    }
                    if (stateOverride) return;
                    state = PATH_START;
                    continue;
                  } else return INVALID_PORT;
                  break;

                case FILE:
                  url.scheme = 'file';
                  if (char == '/' || char == '\\') state = FILE_SLASH;
                  else if (base && base.scheme == 'file') {
                    if (char == EOF) {
                      url.host = base.host;
                      url.path = base.path.slice();
                      url.query = base.query;
                    } else if (char == '?') {
                      url.host = base.host;
                      url.path = base.path.slice();
                      url.query = '';
                      state = QUERY;
                    } else if (char == '#') {
                      url.host = base.host;
                      url.path = base.path.slice();
                      url.query = base.query;
                      url.fragment = '';
                      state = FRAGMENT;
                    } else {
                      if (
                        !startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))
                      ) {
                        url.host = base.host;
                        url.path = base.path.slice();
                        shortenURLsPath(url);
                      }
                      state = PATH;
                      continue;
                    }
                  } else {
                    state = PATH;
                    continue;
                  }
                  break;

                case FILE_SLASH:
                  if (char == '/' || char == '\\') {
                    state = FILE_HOST;
                    break;
                  }
                  if (
                    base &&
                    base.scheme == 'file' &&
                    !startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))
                  ) {
                    if (isWindowsDriveLetter(base.path[0], true))
                      url.path.push(base.path[0]);
                    else url.host = base.host;
                  }
                  state = PATH;
                  continue;

                case FILE_HOST:
                  if (
                    char == EOF ||
                    char == '/' ||
                    char == '\\' ||
                    char == '?' ||
                    char == '#'
                  ) {
                    if (!stateOverride && isWindowsDriveLetter(buffer)) {
                      state = PATH;
                    } else if (buffer == '') {
                      url.host = '';
                      if (stateOverride) return;
                      state = PATH_START;
                    } else {
                      failure = parseHost(url, buffer);
                      if (failure) return failure;
                      if (url.host == 'localhost') url.host = '';
                      if (stateOverride) return;
                      buffer = '';
                      state = PATH_START;
                    }
                    continue;
                  } else buffer += char;
                  break;

                case PATH_START:
                  if (isSpecial(url)) {
                    state = PATH;
                    if (char != '/' && char != '\\') continue;
                  } else if (!stateOverride && char == '?') {
                    url.query = '';
                    state = QUERY;
                  } else if (!stateOverride && char == '#') {
                    url.fragment = '';
                    state = FRAGMENT;
                  } else if (char != EOF) {
                    state = PATH;
                    if (char != '/') continue;
                  }
                  break;

                case PATH:
                  if (
                    char == EOF ||
                    char == '/' ||
                    (char == '\\' && isSpecial(url)) ||
                    (!stateOverride && (char == '?' || char == '#'))
                  ) {
                    if (isDoubleDot(buffer)) {
                      shortenURLsPath(url);
                      if (char != '/' && !(char == '\\' && isSpecial(url))) {
                        url.path.push('');
                      }
                    } else if (isSingleDot(buffer)) {
                      if (char != '/' && !(char == '\\' && isSpecial(url))) {
                        url.path.push('');
                      }
                    } else {
                      if (
                        url.scheme == 'file' &&
                        !url.path.length &&
                        isWindowsDriveLetter(buffer)
                      ) {
                        if (url.host) url.host = '';
                        buffer = buffer.charAt(0) + ':'; // normalize windows drive letter
                      }
                      url.path.push(buffer);
                    }
                    buffer = '';
                    if (
                      url.scheme == 'file' &&
                      (char == EOF || char == '?' || char == '#')
                    ) {
                      while (url.path.length > 1 && url.path[0] === '') {
                        url.path.shift();
                      }
                    }
                    if (char == '?') {
                      url.query = '';
                      state = QUERY;
                    } else if (char == '#') {
                      url.fragment = '';
                      state = FRAGMENT;
                    }
                  } else {
                    buffer += percentEncode(char, pathPercentEncodeSet);
                  }
                  break;

                case CANNOT_BE_A_BASE_URL_PATH:
                  if (char == '?') {
                    url.query = '';
                    state = QUERY;
                  } else if (char == '#') {
                    url.fragment = '';
                    state = FRAGMENT;
                  } else if (char != EOF) {
                    url.path[0] += percentEncode(char, C0ControlPercentEncodeSet);
                  }
                  break;

                case QUERY:
                  if (!stateOverride && char == '#') {
                    url.fragment = '';
                    state = FRAGMENT;
                  } else if (char != EOF) {
                    if (char == "'" && isSpecial(url)) url.query += '%27';
                    else if (char == '#') url.query += '%23';
                    else url.query += percentEncode(char, C0ControlPercentEncodeSet);
                  }
                  break;

                case FRAGMENT:
                  if (char != EOF)
                    url.fragment += percentEncode(char, fragmentPercentEncodeSet);
                  break;
              }

              pointer++;
            }
          };

          // `URL` constructor
          // https://url.spec.whatwg.org/#url-class
          var URLConstructor = function URL(url /* , base */) {
            var that = anInstance(this, URLConstructor, 'URL');
            var base = arguments.length > 1 ? arguments[1] : undefined;
            var urlString = String(url);
            var state = setInternalState(that, { type: 'URL' });
            var baseState, failure;
            if (base !== undefined) {
              if (base instanceof URLConstructor) baseState = getInternalURLState(base);
              else {
                failure = parseURL((baseState = {}), String(base));
                if (failure) throw TypeError(failure);
              }
            }
            failure = parseURL(state, urlString, null, baseState);
            if (failure) throw TypeError(failure);
            var searchParams = (state.searchParams = new URLSearchParams());
            var searchParamsState = getInternalSearchParamsState(searchParams);
            searchParamsState.updateSearchParams(state.query);
            searchParamsState.updateURL = function() {
              state.query = String(searchParams) || null;
            };
            if (!DESCRIPTORS) {
              that.href = serializeURL.call(that);
              that.origin = getOrigin.call(that);
              that.protocol = getProtocol.call(that);
              that.username = getUsername.call(that);
              that.password = getPassword.call(that);
              that.host = getHost.call(that);
              that.hostname = getHostname.call(that);
              that.port = getPort.call(that);
              that.pathname = getPathname.call(that);
              that.search = getSearch.call(that);
              that.searchParams = getSearchParams.call(that);
              that.hash = getHash.call(that);
            }
          };

          var URLPrototype = URLConstructor.prototype;

          var serializeURL = function() {
            var url = getInternalURLState(this);
            var scheme = url.scheme;
            var username = url.username;
            var password = url.password;
            var host = url.host;
            var port = url.port;
            var path = url.path;
            var query = url.query;
            var fragment = url.fragment;
            var output = scheme + ':';
            if (host !== null) {
              output += '//';
              if (includesCredentials(url)) {
                output += username + (password ? ':' + password : '') + '@';
              }
              output += serializeHost(host);
              if (port !== null) output += ':' + port;
            } else if (scheme == 'file') output += '//';
            output += url.cannotBeABaseURL
              ? path[0]
              : path.length ? '/' + path.join('/') : '';
            if (query !== null) output += '?' + query;
            if (fragment !== null) output += '#' + fragment;
            return output;
          };

          var getOrigin = function() {
            var url = getInternalURLState(this);
            var scheme = url.scheme;
            var port = url.port;
            if (scheme == 'blob')
              try {
                return new URL(scheme.path[0]).origin;
              } catch (error) {
                return 'null';
              }
            if (scheme == 'file' || !isSpecial(url)) return 'null';
            return (
              scheme + '://' + serializeHost(url.host) + (port !== null ? ':' + port : '')
            );
          };

          var getProtocol = function() {
            return getInternalURLState(this).scheme + ':';
          };

          var getUsername = function() {
            return getInternalURLState(this).username;
          };

          var getPassword = function() {
            return getInternalURLState(this).password;
          };

          var getHost = function() {
            var url = getInternalURLState(this);
            var host = url.host;
            var port = url.port;
            return host === null
              ? ''
              : port === null ? serializeHost(host) : serializeHost(host) + ':' + port;
          };

          var getHostname = function() {
            var host = getInternalURLState(this).host;
            return host === null ? '' : serializeHost(host);
          };

          var getPort = function() {
            var port = getInternalURLState(this).port;
            return port === null ? '' : String(port);
          };

          var getPathname = function() {
            var url = getInternalURLState(this);
            var path = url.path;
            return url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : '';
          };

          var getSearch = function() {
            var query = getInternalURLState(this).query;
            return query ? '?' + query : '';
          };

          var getSearchParams = function() {
            return getInternalURLState(this).searchParams;
          };

          var getHash = function() {
            var fragment = getInternalURLState(this).fragment;
            return fragment ? '#' + fragment : '';
          };

          var accessorDescriptor = function(getter, setter) {
            return { get: getter, set: setter, configurable: true, enumerable: true };
          };

          if (DESCRIPTORS) {
            defineProperties(URLPrototype, {
              // `URL.prototype.href` accessors pair
              // https://url.spec.whatwg.org/#dom-url-href
              href: accessorDescriptor(serializeURL, function(href) {
                var url = getInternalURLState(this);
                var urlString = String(href);
                var failure = parseURL(url, urlString);
                if (failure) throw TypeError(failure);
                getInternalSearchParamsState(url.searchParams).updateSearchParams(
                  url.query
                );
              }),
              // `URL.prototype.origin` getter
              // https://url.spec.whatwg.org/#dom-url-origin
              origin: accessorDescriptor(getOrigin),
              // `URL.prototype.protocol` accessors pair
              // https://url.spec.whatwg.org/#dom-url-protocol
              protocol: accessorDescriptor(getProtocol, function(protocol) {
                var url = getInternalURLState(this);
                parseURL(url, String(protocol) + ':', SCHEME_START);
              }),
              // `URL.prototype.username` accessors pair
              // https://url.spec.whatwg.org/#dom-url-username
              username: accessorDescriptor(getUsername, function(username) {
                var url = getInternalURLState(this);
                var codePoints = arrayFrom(String(username));
                if (cannotHaveUsernamePasswordPort(url)) return;
                url.username = '';
                for (var i = 0; i < codePoints.length; i++) {
                  url.username += percentEncode(codePoints[i], userinfoPercentEncodeSet);
                }
              }),
              // `URL.prototype.password` accessors pair
              // https://url.spec.whatwg.org/#dom-url-password
              password: accessorDescriptor(getPassword, function(password) {
                var url = getInternalURLState(this);
                var codePoints = arrayFrom(String(password));
                if (cannotHaveUsernamePasswordPort(url)) return;
                url.password = '';
                for (var i = 0; i < codePoints.length; i++) {
                  url.password += percentEncode(codePoints[i], userinfoPercentEncodeSet);
                }
              }),
              // `URL.prototype.host` accessors pair
              // https://url.spec.whatwg.org/#dom-url-host
              host: accessorDescriptor(getHost, function(host) {
                var url = getInternalURLState(this);
                if (url.cannotBeABaseURL) return;
                parseURL(url, String(host), HOST);
              }),
              // `URL.prototype.hostname` accessors pair
              // https://url.spec.whatwg.org/#dom-url-hostname
              hostname: accessorDescriptor(getHostname, function(hostname) {
                var url = getInternalURLState(this);
                if (url.cannotBeABaseURL) return;
                parseURL(url, String(hostname), HOSTNAME);
              }),
              // `URL.prototype.port` accessors pair
              // https://url.spec.whatwg.org/#dom-url-port
              port: accessorDescriptor(getPort, function(port) {
                var url = getInternalURLState(this);
                if (cannotHaveUsernamePasswordPort(url)) return;
                port = String(port);
                if (port == '') url.port = null;
                else parseURL(url, port, PORT);
              }),
              // `URL.prototype.pathname` accessors pair
              // https://url.spec.whatwg.org/#dom-url-pathname
              pathname: accessorDescriptor(getPathname, function(pathname) {
                var url = getInternalURLState(this);
                if (url.cannotBeABaseURL) return;
                url.path = [];
                parseURL(url, pathname + '', PATH_START);
              }),
              // `URL.prototype.search` accessors pair
              // https://url.spec.whatwg.org/#dom-url-search
              search: accessorDescriptor(getSearch, function(search) {
                var url = getInternalURLState(this);
                search = String(search);
                if (search == '') {
                  url.query = null;
                } else {
                  if ('?' == search.charAt(0)) search = search.slice(1);
                  url.query = '';
                  parseURL(url, search, QUERY);
                }
                getInternalSearchParamsState(url.searchParams).updateSearchParams(
                  url.query
                );
              }),
              // `URL.prototype.searchParams` getter
              // https://url.spec.whatwg.org/#dom-url-searchparams
              searchParams: accessorDescriptor(getSearchParams),
              // `URL.prototype.hash` accessors pair
              // https://url.spec.whatwg.org/#dom-url-hash
              hash: accessorDescriptor(getHash, function(hash) {
                var url = getInternalURLState(this);
                hash = String(hash);
                if (hash == '') {
                  url.fragment = null;
                  return;
                }
                if ('#' == hash.charAt(0)) hash = hash.slice(1);
                url.fragment = '';
                parseURL(url, hash, FRAGMENT);
              })
            });
          }

          // `URL.prototype.toJSON` method
          // https://url.spec.whatwg.org/#dom-url-tojson
          redefine(
            URLPrototype,
            'toJSON',
            function toJSON() {
              return serializeURL.call(this);
            },
            { enumerable: true }
          );

          // `URL.prototype.toString` method
          // https://url.spec.whatwg.org/#URL-stringification-behavior
          redefine(
            URLPrototype,
            'toString',
            function toString() {
              return serializeURL.call(this);
            },
            { enumerable: true }
          );

          if (NativeURL) {
            var nativeCreateObjectURL = NativeURL.createObjectURL;
            var nativeRevokeObjectURL = NativeURL.revokeObjectURL;
            // `URL.createObjectURL` method
            // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL
            // eslint-disable-next-line no-unused-vars
            if (nativeCreateObjectURL)
              redefine(URLConstructor, 'createObjectURL', function createObjectURL(blob) {
                return nativeCreateObjectURL.apply(NativeURL, arguments);
              });
            // `URL.revokeObjectURL` method
            // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL
            // eslint-disable-next-line no-unused-vars
            if (nativeRevokeObjectURL)
              redefine(URLConstructor, 'revokeObjectURL', function revokeObjectURL(url) {
                return nativeRevokeObjectURL.apply(NativeURL, arguments);
              });
          }

          setToStringTag(URLConstructor, 'URL');

          $(
            { global: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS },
            {
              URL: URLConstructor
            }
          );
        },
        {
          '../internals/an-instance': 27,
          '../internals/array-from': 35,
          '../internals/descriptors': 60,
          '../internals/export': 67,
          '../internals/global': 76,
          '../internals/has': 77,
          '../internals/internal-state': 87,
          '../internals/native-url': 101,
          '../internals/object-assign': 106,
          '../internals/object-define-properties': 108,
          '../internals/redefine': 125,
          '../internals/set-to-string-tag': 134,
          '../internals/string-multibyte': 140,
          '../internals/string-punycode-to-ascii': 141,
          '../modules/es.string.iterator': 201,
          '../modules/web.url-search-params': 245
        }
      ],
      247: [
        function(_dereq_, module, exports) {
          // This file can be required in Browserify and Node.js for automatic polyfill
          // To use it:  require('es6-promise/auto');
          'use strict';
          module.exports = _dereq_('./').polyfill();
        },
        { './': 248 }
      ],
      248: [
        function(_dereq_, module, exports) {
          (function(process, global) {
            /*!
 * @overview es6-promise - a tiny implementation of Promises/A+.
 * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)
 * @license   Licensed under MIT license
 *            See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE
 * @version   v4.2.8+1e68dce6
 */

            (function(global, factory) {
              typeof exports === 'object' && typeof module !== 'undefined'
                ? (module.exports = factory())
                : typeof define === 'function' && define.amd
                  ? define(factory)
                  : (global.ES6Promise = factory());
            })(this, function() {
              'use strict';

              function objectOrFunction(x) {
                var type = typeof x;
                return x !== null && (type === 'object' || type === 'function');
              }

              function isFunction(x) {
                return typeof x === 'function';
              }

              var _isArray = void 0;
              if (Array.isArray) {
                _isArray = Array.isArray;
              } else {
                _isArray = function(x) {
                  return Object.prototype.toString.call(x) === '[object Array]';
                };
              }

              var isArray = _isArray;

              var len = 0;
              var vertxNext = void 0;
              var customSchedulerFn = void 0;

              var asap = function asap(callback, arg) {
                queue[len] = callback;
                queue[len + 1] = arg;
                len += 2;
                if (len === 2) {
                  // If len is 2, that means that we need to schedule an async flush.
                  // If additional callbacks are queued before the queue is flushed, they
                  // will be processed by this flush that we are scheduling.
                  if (customSchedulerFn) {
                    customSchedulerFn(flush);
                  } else {
                    scheduleFlush();
                  }
                }
              };

              function setScheduler(scheduleFn) {
                customSchedulerFn = scheduleFn;
              }

              function setAsap(asapFn) {
                asap = asapFn;
              }

              var browserWindow = typeof window !== 'undefined' ? window : undefined;
              var browserGlobal = browserWindow || {};
              var BrowserMutationObserver =
                browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;
              var isNode =
                typeof self === 'undefined' &&
                typeof process !== 'undefined' &&
                {}.toString.call(process) === '[object process]';

              // test for web worker but not in IE10
              var isWorker =
                typeof Uint8ClampedArray !== 'undefined' &&
                typeof importScripts !== 'undefined' &&
                typeof MessageChannel !== 'undefined';

              // node
              function useNextTick() {
                // node version 0.10.x displays a deprecation warning when nextTick is used recursively
                // see https://github.com/cujojs/when/issues/410 for details
                return function() {
                  return process.nextTick(flush);
                };
              }

              // vertx
              function useVertxTimer() {
                if (typeof vertxNext !== 'undefined') {
                  return function() {
                    vertxNext(flush);
                  };
                }

                return useSetTimeout();
              }

              function useMutationObserver() {
                var iterations = 0;
                var observer = new BrowserMutationObserver(flush);
                var node = document.createTextNode('');
                observer.observe(node, { characterData: true });

                return function() {
                  node.data = iterations = ++iterations % 2;
                };
              }

              // web worker
              function useMessageChannel() {
                var channel = new MessageChannel();
                channel.port1.onmessage = flush;
                return function() {
                  return channel.port2.postMessage(0);
                };
              }

              function useSetTimeout() {
                // Store setTimeout reference so es6-promise will be unaffected by
                // other code modifying setTimeout (like sinon.useFakeTimers())
                var globalSetTimeout = setTimeout;
                return function() {
                  return globalSetTimeout(flush, 1);
                };
              }

              var queue = new Array(1000);
              function flush() {
                for (var i = 0; i < len; i += 2) {
                  var callback = queue[i];
                  var arg = queue[i + 1];

                  callback(arg);

                  queue[i] = undefined;
                  queue[i + 1] = undefined;
                }

                len = 0;
              }

              function attemptVertx() {
                try {
                  var vertx = Function('return this')().require('vertx');
                  vertxNext = vertx.runOnLoop || vertx.runOnContext;
                  return useVertxTimer();
                } catch (e) {
                  return useSetTimeout();
                }
              }

              var scheduleFlush = void 0;
              // Decide what async method to use to triggering processing of queued callbacks:
              if (isNode) {
                scheduleFlush = useNextTick();
              } else if (BrowserMutationObserver) {
                scheduleFlush = useMutationObserver();
              } else if (isWorker) {
                scheduleFlush = useMessageChannel();
              } else if (browserWindow === undefined && typeof _dereq_ === 'function') {
                scheduleFlush = attemptVertx();
              } else {
                scheduleFlush = useSetTimeout();
              }

              function then(onFulfillment, onRejection) {
                var parent = this;

                var child = new this.constructor(noop);

                if (child[PROMISE_ID] === undefined) {
                  makePromise(child);
                }

                var _state = parent._state;

                if (_state) {
                  var callback = arguments[_state - 1];
                  asap(function() {
                    return invokeCallback(_state, child, callback, parent._result);
                  });
                } else {
                  subscribe(parent, child, onFulfillment, onRejection);
                }

                return child;
              }

              /**
  `Promise.resolve` returns a promise that will become resolved with the
  passed `value`. It is shorthand for the following:

  ```javascript
  let promise = new Promise(function(resolve, reject){
    resolve(1);
  });

  promise.then(function(value){
    // value === 1
  });
  ```

  Instead of writing the above, your code now simply becomes the following:

  ```javascript
  let promise = Promise.resolve(1);

  promise.then(function(value){
    // value === 1
  });
  ```

  @method resolve
  @static
  @param {Any} value value that the returned promise will be resolved with
  Useful for tooling.
  @return {Promise} a promise that will become fulfilled with the given
  `value`
*/
              function resolve$1(object) {
                /*jshint validthis:true */
                var Constructor = this;

                if (
                  object &&
                  typeof object === 'object' &&
                  object.constructor === Constructor
                ) {
                  return object;
                }

                var promise = new Constructor(noop);
                resolve(promise, object);
                return promise;
              }

              var PROMISE_ID = Math.random()
                .toString(36)
                .substring(2);

              function noop() {}

              var PENDING = void 0;
              var FULFILLED = 1;
              var REJECTED = 2;

              function selfFulfillment() {
                return new TypeError('You cannot resolve a promise with itself');
              }

              function cannotReturnOwn() {
                return new TypeError(
                  'A promises callback cannot return that same promise.'
                );
              }

              function tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) {
                try {
                  then$$1.call(value, fulfillmentHandler, rejectionHandler);
                } catch (e) {
                  return e;
                }
              }

              function handleForeignThenable(promise, thenable, then$$1) {
                asap(function(promise) {
                  var sealed = false;
                  var error = tryThen(
                    then$$1,
                    thenable,
                    function(value) {
                      if (sealed) {
                        return;
                      }
                      sealed = true;
                      if (thenable !== value) {
                        resolve(promise, value);
                      } else {
                        fulfill(promise, value);
                      }
                    },
                    function(reason) {
                      if (sealed) {
                        return;
                      }
                      sealed = true;

                      reject(promise, reason);
                    },
                    'Settle: ' + (promise._label || ' unknown promise')
                  );

                  if (!sealed && error) {
                    sealed = true;
                    reject(promise, error);
                  }
                }, promise);
              }

              function handleOwnThenable(promise, thenable) {
                if (thenable._state === FULFILLED) {
                  fulfill(promise, thenable._result);
                } else if (thenable._state === REJECTED) {
                  reject(promise, thenable._result);
                } else {
                  subscribe(
                    thenable,
                    undefined,
                    function(value) {
                      return resolve(promise, value);
                    },
                    function(reason) {
                      return reject(promise, reason);
                    }
                  );
                }
              }

              function handleMaybeThenable(promise, maybeThenable, then$$1) {
                if (
                  maybeThenable.constructor === promise.constructor &&
                  then$$1 === then &&
                  maybeThenable.constructor.resolve === resolve$1
                ) {
                  handleOwnThenable(promise, maybeThenable);
                } else {
                  if (then$$1 === undefined) {
                    fulfill(promise, maybeThenable);
                  } else if (isFunction(then$$1)) {
                    handleForeignThenable(promise, maybeThenable, then$$1);
                  } else {
                    fulfill(promise, maybeThenable);
                  }
                }
              }

              function resolve(promise, value) {
                if (promise === value) {
                  reject(promise, selfFulfillment());
                } else if (objectOrFunction(value)) {
                  var then$$1 = void 0;
                  try {
                    then$$1 = value.then;
                  } catch (error) {
                    reject(promise, error);
                    return;
                  }
                  handleMaybeThenable(promise, value, then$$1);
                } else {
                  fulfill(promise, value);
                }
              }

              function publishRejection(promise) {
                if (promise._onerror) {
                  promise._onerror(promise._result);
                }

                publish(promise);
              }

              function fulfill(promise, value) {
                if (promise._state !== PENDING) {
                  return;
                }

                promise._result = value;
                promise._state = FULFILLED;

                if (promise._subscribers.length !== 0) {
                  asap(publish, promise);
                }
              }

              function reject(promise, reason) {
                if (promise._state !== PENDING) {
                  return;
                }
                promise._state = REJECTED;
                promise._result = reason;

                asap(publishRejection, promise);
              }

              function subscribe(parent, child, onFulfillment, onRejection) {
                var _subscribers = parent._subscribers;
                var length = _subscribers.length;

                parent._onerror = null;

                _subscribers[length] = child;
                _subscribers[length + FULFILLED] = onFulfillment;
                _subscribers[length + REJECTED] = onRejection;

                if (length === 0 && parent._state) {
                  asap(publish, parent);
                }
              }

              function publish(promise) {
                var subscribers = promise._subscribers;
                var settled = promise._state;

                if (subscribers.length === 0) {
                  return;
                }

                var child = void 0,
                  callback = void 0,
                  detail = promise._result;

                for (var i = 0; i < subscribers.length; i += 3) {
                  child = subscribers[i];
                  callback = subscribers[i + settled];

                  if (child) {
                    invokeCallback(settled, child, callback, detail);
                  } else {
                    callback(detail);
                  }
                }

                promise._subscribers.length = 0;
              }

              function invokeCallback(settled, promise, callback, detail) {
                var hasCallback = isFunction(callback),
                  value = void 0,
                  error = void 0,
                  succeeded = true;

                if (hasCallback) {
                  try {
                    value = callback(detail);
                  } catch (e) {
                    succeeded = false;
                    error = e;
                  }

                  if (promise === value) {
                    reject(promise, cannotReturnOwn());
                    return;
                  }
                } else {
                  value = detail;
                }

                if (promise._state !== PENDING) {
                  // noop
                } else if (hasCallback && succeeded) {
                  resolve(promise, value);
                } else if (succeeded === false) {
                  reject(promise, error);
                } else if (settled === FULFILLED) {
                  fulfill(promise, value);
                } else if (settled === REJECTED) {
                  reject(promise, value);
                }
              }

              function initializePromise(promise, resolver) {
                try {
                  resolver(
                    function resolvePromise(value) {
                      resolve(promise, value);
                    },
                    function rejectPromise(reason) {
                      reject(promise, reason);
                    }
                  );
                } catch (e) {
                  reject(promise, e);
                }
              }

              var id = 0;
              function nextId() {
                return id++;
              }

              function makePromise(promise) {
                promise[PROMISE_ID] = id++;
                promise._state = undefined;
                promise._result = undefined;
                promise._subscribers = [];
              }

              function validationError() {
                return new Error('Array Methods must be provided an Array');
              }

              var Enumerator = (function() {
                function Enumerator(Constructor, input) {
                  this._instanceConstructor = Constructor;
                  this.promise = new Constructor(noop);

                  if (!this.promise[PROMISE_ID]) {
                    makePromise(this.promise);
                  }

                  if (isArray(input)) {
                    this.length = input.length;
                    this._remaining = input.length;

                    this._result = new Array(this.length);

                    if (this.length === 0) {
                      fulfill(this.promise, this._result);
                    } else {
                      this.length = this.length || 0;
                      this._enumerate(input);
                      if (this._remaining === 0) {
                        fulfill(this.promise, this._result);
                      }
                    }
                  } else {
                    reject(this.promise, validationError());
                  }
                }

                Enumerator.prototype._enumerate = function _enumerate(input) {
                  for (var i = 0; this._state === PENDING && i < input.length; i++) {
                    this._eachEntry(input[i], i);
                  }
                };

                Enumerator.prototype._eachEntry = function _eachEntry(entry, i) {
                  var c = this._instanceConstructor;
                  var resolve$$1 = c.resolve;

                  if (resolve$$1 === resolve$1) {
                    var _then = void 0;
                    var error = void 0;
                    var didError = false;
                    try {
                      _then = entry.then;
                    } catch (e) {
                      didError = true;
                      error = e;
                    }

                    if (_then === then && entry._state !== PENDING) {
                      this._settledAt(entry._state, i, entry._result);
                    } else if (typeof _then !== 'function') {
                      this._remaining--;
                      this._result[i] = entry;
                    } else if (c === Promise$1) {
                      var promise = new c(noop);
                      if (didError) {
                        reject(promise, error);
                      } else {
                        handleMaybeThenable(promise, entry, _then);
                      }
                      this._willSettleAt(promise, i);
                    } else {
                      this._willSettleAt(
                        new c(function(resolve$$1) {
                          return resolve$$1(entry);
                        }),
                        i
                      );
                    }
                  } else {
                    this._willSettleAt(resolve$$1(entry), i);
                  }
                };

                Enumerator.prototype._settledAt = function _settledAt(state, i, value) {
                  var promise = this.promise;

                  if (promise._state === PENDING) {
                    this._remaining--;

                    if (state === REJECTED) {
                      reject(promise, value);
                    } else {
                      this._result[i] = value;
                    }
                  }

                  if (this._remaining === 0) {
                    fulfill(promise, this._result);
                  }
                };

                Enumerator.prototype._willSettleAt = function _willSettleAt(promise, i) {
                  var enumerator = this;

                  subscribe(
                    promise,
                    undefined,
                    function(value) {
                      return enumerator._settledAt(FULFILLED, i, value);
                    },
                    function(reason) {
                      return enumerator._settledAt(REJECTED, i, reason);
                    }
                  );
                };

                return Enumerator;
              })();

              /**
  `Promise.all` accepts an array of promises, and returns a new promise which
  is fulfilled with an array of fulfillment values for the passed promises, or
  rejected with the reason of the first passed promise to be rejected. It casts all
  elements of the passed iterable to promises as it runs this algorithm.

  Example:

  ```javascript
  let promise1 = resolve(1);
  let promise2 = resolve(2);
  let promise3 = resolve(3);
  let promises = [ promise1, promise2, promise3 ];

  Promise.all(promises).then(function(array){
    // The array here would be [ 1, 2, 3 ];
  });
  ```

  If any of the `promises` given to `all` are rejected, the first promise
  that is rejected will be given as an argument to the returned promises's
  rejection handler. For example:

  Example:

  ```javascript
  let promise1 = resolve(1);
  let promise2 = reject(new Error("2"));
  let promise3 = reject(new Error("3"));
  let promises = [ promise1, promise2, promise3 ];

  Promise.all(promises).then(function(array){
    // Code here never runs because there are rejected promises!
  }, function(error) {
    // error.message === "2"
  });
  ```

  @method all
  @static
  @param {Array} entries array of promises
  @param {String} label optional string for labeling the promise.
  Useful for tooling.
  @return {Promise} promise that is fulfilled when all `promises` have been
  fulfilled, or rejected if any of them become rejected.
  @static
*/
              function all(entries) {
                return new Enumerator(this, entries).promise;
              }

              /**
  `Promise.race` returns a new promise which is settled in the same way as the
  first passed promise to settle.

  Example:

  ```javascript
  let promise1 = new Promise(function(resolve, reject){
    setTimeout(function(){
      resolve('promise 1');
    }, 200);
  });

  let promise2 = new Promise(function(resolve, reject){
    setTimeout(function(){
      resolve('promise 2');
    }, 100);
  });

  Promise.race([promise1, promise2]).then(function(result){
    // result === 'promise 2' because it was resolved before promise1
    // was resolved.
  });
  ```

  `Promise.race` is deterministic in that only the state of the first
  settled promise matters. For example, even if other promises given to the
  `promises` array argument are resolved, but the first settled promise has
  become rejected before the other promises became fulfilled, the returned
  promise will become rejected:

  ```javascript
  let promise1 = new Promise(function(resolve, reject){
    setTimeout(function(){
      resolve('promise 1');
    }, 200);
  });

  let promise2 = new Promise(function(resolve, reject){
    setTimeout(function(){
      reject(new Error('promise 2'));
    }, 100);
  });

  Promise.race([promise1, promise2]).then(function(result){
    // Code here never runs
  }, function(reason){
    // reason.message === 'promise 2' because promise 2 became rejected before
    // promise 1 became fulfilled
  });
  ```

  An example real-world use case is implementing timeouts:

  ```javascript
  Promise.race([ajax('foo.json'), timeout(5000)])
  ```

  @method race
  @static
  @param {Array} promises array of promises to observe
  Useful for tooling.
  @return {Promise} a promise which settles in the same way as the first passed
  promise to settle.
*/
              function race(entries) {
                /*jshint validthis:true */
                var Constructor = this;

                if (!isArray(entries)) {
                  return new Constructor(function(_, reject) {
                    return reject(new TypeError('You must pass an array to race.'));
                  });
                } else {
                  return new Constructor(function(resolve, reject) {
                    var length = entries.length;
                    for (var i = 0; i < length; i++) {
                      Constructor.resolve(entries[i]).then(resolve, reject);
                    }
                  });
                }
              }

              /**
  `Promise.reject` returns a promise rejected with the passed `reason`.
  It is shorthand for the following:

  ```javascript
  let promise = new Promise(function(resolve, reject){
    reject(new Error('WHOOPS'));
  });

  promise.then(function(value){
    // Code here doesn't run because the promise is rejected!
  }, function(reason){
    // reason.message === 'WHOOPS'
  });
  ```

  Instead of writing the above, your code now simply becomes the following:

  ```javascript
  let promise = Promise.reject(new Error('WHOOPS'));

  promise.then(function(value){
    // Code here doesn't run because the promise is rejected!
  }, function(reason){
    // reason.message === 'WHOOPS'
  });
  ```

  @method reject
  @static
  @param {Any} reason value that the returned promise will be rejected with.
  Useful for tooling.
  @return {Promise} a promise rejected with the given `reason`.
*/
              function reject$1(reason) {
                /*jshint validthis:true */
                var Constructor = this;
                var promise = new Constructor(noop);
                reject(promise, reason);
                return promise;
              }

              function needsResolver() {
                throw new TypeError(
                  'You must pass a resolver function as the first argument to the promise constructor'
                );
              }

              function needsNew() {
                throw new TypeError(
                  "Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function."
                );
              }

              /**
  Promise objects represent the eventual result of an asynchronous operation. The
  primary way of interacting with a promise is through its `then` method, which
  registers callbacks to receive either a promise's eventual value or the reason
  why the promise cannot be fulfilled.

  Terminology
  -----------

  - `promise` is an object or function with a `then` method whose behavior conforms to this specification.
  - `thenable` is an object or function that defines a `then` method.
  - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).
  - `exception` is a value that is thrown using the throw statement.
  - `reason` is a value that indicates why a promise was rejected.
  - `settled` the final resting state of a promise, fulfilled or rejected.

  A promise can be in one of three states: pending, fulfilled, or rejected.

  Promises that are fulfilled have a fulfillment value and are in the fulfilled
  state.  Promises that are rejected have a rejection reason and are in the
  rejected state.  A fulfillment value is never a thenable.

  Promises can also be said to *resolve* a value.  If this value is also a
  promise, then the original promise's settled state will match the value's
  settled state.  So a promise that *resolves* a promise that rejects will
  itself reject, and a promise that *resolves* a promise that fulfills will
  itself fulfill.


  Basic Usage:
  ------------

  ```js
  let promise = new Promise(function(resolve, reject) {
    // on success
    resolve(value);

    // on failure
    reject(reason);
  });

  promise.then(function(value) {
    // on fulfillment
  }, function(reason) {
    // on rejection
  });
  ```

  Advanced Usage:
  ---------------

  Promises shine when abstracting away asynchronous interactions such as
  `XMLHttpRequest`s.

  ```js
  function getJSON(url) {
    return new Promise(function(resolve, reject){
      let xhr = new XMLHttpRequest();

      xhr.open('GET', url);
      xhr.onreadystatechange = handler;
      xhr.responseType = 'json';
      xhr.setRequestHeader('Accept', 'application/json');
      xhr.send();

      function handler() {
        if (this.readyState === this.DONE) {
          if (this.status === 200) {
            resolve(this.response);
          } else {
            reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));
          }
        }
      };
    });
  }

  getJSON('/posts.json').then(function(json) {
    // on fulfillment
  }, function(reason) {
    // on rejection
  });
  ```

  Unlike callbacks, promises are great composable primitives.

  ```js
  Promise.all([
    getJSON('/posts'),
    getJSON('/comments')
  ]).then(function(values){
    values[0] // => postsJSON
    values[1] // => commentsJSON

    return values;
  });
  ```

  @class Promise
  @param {Function} resolver
  Useful for tooling.
  @constructor
*/

              var Promise$1 = (function() {
                function Promise(resolver) {
                  this[PROMISE_ID] = nextId();
                  this._result = this._state = undefined;
                  this._subscribers = [];

                  if (noop !== resolver) {
                    typeof resolver !== 'function' && needsResolver();
                    this instanceof Promise
                      ? initializePromise(this, resolver)
                      : needsNew();
                  }
                }

                /**
  The primary way of interacting with a promise is through its `then` method,
  which registers callbacks to receive either a promise's eventual value or the
  reason why the promise cannot be fulfilled.
   ```js
  findUser().then(function(user){
    // user is available
  }, function(reason){
    // user is unavailable, and you are given the reason why
  });
  ```
   Chaining
  --------
   The return value of `then` is itself a promise.  This second, 'downstream'
  promise is resolved with the return value of the first promise's fulfillment
  or rejection handler, or rejected if the handler throws an exception.
   ```js
  findUser().then(function (user) {
    return user.name;
  }, function (reason) {
    return 'default name';
  }).then(function (userName) {
    // If `findUser` fulfilled, `userName` will be the user's name, otherwise it
    // will be `'default name'`
  });
   findUser().then(function (user) {
    throw new Error('Found user, but still unhappy');
  }, function (reason) {
    throw new Error('`findUser` rejected and we're unhappy');
  }).then(function (value) {
    // never reached
  }, function (reason) {
    // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.
    // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.
  });
  ```
  If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.
   ```js
  findUser().then(function (user) {
    throw new PedagogicalException('Upstream error');
  }).then(function (value) {
    // never reached
  }).then(function (value) {
    // never reached
  }, function (reason) {
    // The `PedgagocialException` is propagated all the way down to here
  });
  ```
   Assimilation
  ------------
   Sometimes the value you want to propagate to a downstream promise can only be
  retrieved asynchronously. This can be achieved by returning a promise in the
  fulfillment or rejection handler. The downstream promise will then be pending
  until the returned promise is settled. This is called *assimilation*.
   ```js
  findUser().then(function (user) {
    return findCommentsByAuthor(user);
  }).then(function (comments) {
    // The user's comments are now available
  });
  ```
   If the assimliated promise rejects, then the downstream promise will also reject.
   ```js
  findUser().then(function (user) {
    return findCommentsByAuthor(user);
  }).then(function (comments) {
    // If `findCommentsByAuthor` fulfills, we'll have the value here
  }, function (reason) {
    // If `findCommentsByAuthor` rejects, we'll have the reason here
  });
  ```
   Simple Example
  --------------
   Synchronous Example
   ```javascript
  let result;
   try {
    result = findResult();
    // success
  } catch(reason) {
    // failure
  }
  ```
   Errback Example
   ```js
  findResult(function(result, err){
    if (err) {
      // failure
    } else {
      // success
    }
  });
  ```
   Promise Example;
   ```javascript
  findResult().then(function(result){
    // success
  }, function(reason){
    // failure
  });
  ```
   Advanced Example
  --------------
   Synchronous Example
   ```javascript
  let author, books;
   try {
    author = findAuthor();
    books  = findBooksByAuthor(author);
    // success
  } catch(reason) {
    // failure
  }
  ```
   Errback Example
   ```js
   function foundBooks(books) {
   }
   function failure(reason) {
   }
   findAuthor(function(author, err){
    if (err) {
      failure(err);
      // failure
    } else {
      try {
        findBoooksByAuthor(author, function(books, err) {
          if (err) {
            failure(err);
          } else {
            try {
              foundBooks(books);
            } catch(reason) {
              failure(reason);
            }
          }
        });
      } catch(error) {
        failure(err);
      }
      // success
    }
  });
  ```
   Promise Example;
   ```javascript
  findAuthor().
    then(findBooksByAuthor).
    then(function(books){
      // found books
  }).catch(function(reason){
    // something went wrong
  });
  ```
   @method then
  @param {Function} onFulfilled
  @param {Function} onRejected
  Useful for tooling.
  @return {Promise}
  */

                /**
  `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same
  as the catch block of a try/catch statement.
  ```js
  function findAuthor(){
  throw new Error('couldn't find that author');
  }
  // synchronous
  try {
  findAuthor();
  } catch(reason) {
  // something went wrong
  }
  // async with promises
  findAuthor().catch(function(reason){
  // something went wrong
  });
  ```
  @method catch
  @param {Function} onRejection
  Useful for tooling.
  @return {Promise}
  */

                Promise.prototype.catch = function _catch(onRejection) {
                  return this.then(null, onRejection);
                };

                /**
    `finally` will be invoked regardless of the promise's fate just as native
    try/catch/finally behaves
  
    Synchronous example:
  
    ```js
    findAuthor() {
      if (Math.random() > 0.5) {
        throw new Error();
      }
      return new Author();
    }
  
    try {
      return findAuthor(); // succeed or fail
    } catch(error) {
      return findOtherAuther();
    } finally {
      // always runs
      // doesn't affect the return value
    }
    ```
  
    Asynchronous example:
  
    ```js
    findAuthor().catch(function(reason){
      return findOtherAuther();
    }).finally(function(){
      // author was either found, or not
    });
    ```
  
    @method finally
    @param {Function} callback
    @return {Promise}
  */

                Promise.prototype.finally = function _finally(callback) {
                  var promise = this;
                  var constructor = promise.constructor;

                  if (isFunction(callback)) {
                    return promise.then(
                      function(value) {
                        return constructor.resolve(callback()).then(function() {
                          return value;
                        });
                      },
                      function(reason) {
                        return constructor.resolve(callback()).then(function() {
                          throw reason;
                        });
                      }
                    );
                  }

                  return promise.then(callback, callback);
                };

                return Promise;
              })();

              Promise$1.prototype.then = then;
              Promise$1.all = all;
              Promise$1.race = race;
              Promise$1.resolve = resolve$1;
              Promise$1.reject = reject$1;
              Promise$1._setScheduler = setScheduler;
              Promise$1._setAsap = setAsap;
              Promise$1._asap = asap;

              /*global self*/
              function polyfill() {
                var local = void 0;

                if (typeof global !== 'undefined') {
                  local = global;
                } else if (typeof self !== 'undefined') {
                  local = self;
                } else {
                  try {
                    local = Function('return this')();
                  } catch (e) {
                    throw new Error(
                      'polyfill failed because global object is unavailable in this environment'
                    );
                  }
                }

                var P = local.Promise;

                if (P) {
                  var promiseToString = null;
                  try {
                    promiseToString = Object.prototype.toString.call(P.resolve());
                  } catch (e) {
                    // silently ignored
                  }

                  if (promiseToString === '[object Promise]' && !P.cast) {
                    return;
                  }
                }

                local.Promise = Promise$1;
              }

              // Strange compat..
              Promise$1.polyfill = polyfill;
              Promise$1.Promise = Promise$1;

              return Promise$1;
            });
          }.call(
            this,
            _dereq_('_process'),
            typeof global !== 'undefined'
              ? global
              : typeof self !== 'undefined'
                ? self
                : typeof window !== 'undefined' ? window : {}
          ));
        },
        { _process: 260 }
      ],
      249: [
        function(_dereq_, module, exports) {
          (function(global, factory) {
            if (typeof define === 'function' && define.amd) {
              define(['exports', 'module'], factory);
            } else if (typeof exports !== 'undefined' && typeof module !== 'undefined') {
              factory(exports, module);
            } else {
              var mod = {
                exports: {}
              };
              factory(mod.exports, mod);
              global.fetchJsonp = mod.exports;
            }
          })(this, function(exports, module) {
            'use strict';

            var defaultOptions = {
              timeout: 5000,
              jsonpCallback: 'callback',
              jsonpCallbackFunction: null
            };

            function generateCallbackFunction() {
              return 'jsonp_' + Date.now() + '_' + Math.ceil(Math.random() * 100000);
            }

            function clearFunction(functionName) {
              // IE8 throws an exception when you try to delete a property on window
              // http://stackoverflow.com/a/1824228/751089
              try {
                delete window[functionName];
              } catch (e) {
                window[functionName] = undefined;
              }
            }

            function removeScript(scriptId) {
              var script = document.getElementById(scriptId);
              if (script) {
                document.getElementsByTagName('head')[0].removeChild(script);
              }
            }

            function fetchJsonp(_url) {
              var options =
                arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];

              // to avoid param reassign
              var url = _url;
              var timeout = options.timeout || defaultOptions.timeout;
              var jsonpCallback = options.jsonpCallback || defaultOptions.jsonpCallback;

              var timeoutId = undefined;

              return new Promise(function(resolve, reject) {
                var callbackFunction =
                  options.jsonpCallbackFunction || generateCallbackFunction();
                var scriptId = jsonpCallback + '_' + callbackFunction;

                window[callbackFunction] = function(response) {
                  resolve({
                    ok: true,
                    // keep consistent with fetch API
                    json: function json() {
                      return Promise.resolve(response);
                    }
                  });

                  if (timeoutId) clearTimeout(timeoutId);

                  removeScript(scriptId);

                  clearFunction(callbackFunction);
                };

                // Check if the user set their own params, and if not add a ? to start a list of params
                url += url.indexOf('?') === -1 ? '?' : '&';

                var jsonpScript = document.createElement('script');
                jsonpScript.setAttribute(
                  'src',
                  '' + url + jsonpCallback + '=' + callbackFunction
                );
                if (options.charset) {
                  jsonpScript.setAttribute('charset', options.charset);
                }
                jsonpScript.id = scriptId;
                document.getElementsByTagName('head')[0].appendChild(jsonpScript);

                timeoutId = setTimeout(function() {
                  reject(new Error('JSONP request to ' + _url + ' timed out'));

                  clearFunction(callbackFunction);
                  removeScript(scriptId);
                  window[callbackFunction] = function() {
                    clearFunction(callbackFunction);
                  };
                }, timeout);

                // Caught if got 404/500
                jsonpScript.onerror = function() {
                  reject(new Error('JSONP request to ' + _url + ' failed'));

                  clearFunction(callbackFunction);
                  removeScript(scriptId);
                  if (timeoutId) clearTimeout(timeoutId);
                };
              });
            }

            // export as global function
            /*
  let local;
  if (typeof global !== 'undefined') {
    local = global;
  } else if (typeof self !== 'undefined') {
    local = self;
  } else {
    try {
      local = Function('return this')();
    } catch (e) {
      throw new Error('polyfill failed because global object is unavailable in this environment');
    }
  }
  local.fetchJsonp = fetchJsonp;
  */

            module.exports = fetchJsonp;
          });
        },
        {}
      ],
      250: [
        function(_dereq_, module, exports) {
          /* FileSaver.js
 * A saveAs() FileSaver implementation.
 * 1.3.2
 * 2016-06-16 18:25:19
 *
 * By Eli Grey, http://eligrey.com
 * License: MIT
 *   See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md
 */

          /*global self */
          /*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */

          /*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */

          var saveAs =
            saveAs ||
            (function(view) {
              'use strict';
              // IE <10 is explicitly unsupported
              if (
                typeof view === 'undefined' ||
                (typeof navigator !== 'undefined' &&
                  /MSIE [1-9]\./.test(navigator.userAgent))
              ) {
                return;
              }
              var doc = view.document,
                // only get URL when necessary in case Blob.js hasn't overridden it yet
                get_URL = function() {
                  return view.URL || view.webkitURL || view;
                },
                save_link = doc.createElementNS('http://www.w3.org/1999/xhtml', 'a'),
                can_use_save_link = 'download' in save_link,
                click = function(node) {
                  var event = new MouseEvent('click');
                  node.dispatchEvent(event);
                },
                is_safari = /constructor/i.test(view.HTMLElement) || view.safari,
                is_chrome_ios = /CriOS\/[\d]+/.test(navigator.userAgent),
                throw_outside = function(ex) {
                  (view.setImmediate || view.setTimeout)(function() {
                    throw ex;
                  }, 0);
                },
                force_saveable_type = 'application/octet-stream',
                // the Blob API is fundamentally broken as there is no "downloadfinished" event to subscribe to
                arbitrary_revoke_timeout = 1000 * 40, // in ms
                revoke = function(file) {
                  var revoker = function() {
                    if (typeof file === 'string') {
                      // file is an object URL
                      get_URL().revokeObjectURL(file);
                    } else {
                      // file is a File
                      file.remove();
                    }
                  };
                  setTimeout(revoker, arbitrary_revoke_timeout);
                },
                dispatch = function(filesaver, event_types, event) {
                  event_types = [].concat(event_types);
                  var i = event_types.length;
                  while (i--) {
                    var listener = filesaver['on' + event_types[i]];
                    if (typeof listener === 'function') {
                      try {
                        listener.call(filesaver, event || filesaver);
                      } catch (ex) {
                        throw_outside(ex);
                      }
                    }
                  }
                },
                auto_bom = function(blob) {
                  // prepend BOM for UTF-8 XML and text/* types (including HTML)
                  // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF
                  if (
                    /^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(
                      blob.type
                    )
                  ) {
                    return new Blob([String.fromCharCode(0xfeff), blob], {
                      type: blob.type
                    });
                  }
                  return blob;
                },
                FileSaver = function(blob, name, no_auto_bom) {
                  if (!no_auto_bom) {
                    blob = auto_bom(blob);
                  }
                  // First try a.download, then web filesystem, then object URLs
                  var filesaver = this,
                    type = blob.type,
                    force = type === force_saveable_type,
                    object_url,
                    dispatch_all = function() {
                      dispatch(filesaver, 'writestart progress write writeend'.split(' '));
                    },
                    // on any filesys errors revert to saving with object URLs
                    fs_error = function() {
                      if ((is_chrome_ios || (force && is_safari)) && view.FileReader) {
                        // Safari doesn't allow downloading of blob urls
                        var reader = new FileReader();
                        reader.onloadend = function() {
                          var url = is_chrome_ios
                            ? reader.result
                            : reader.result.replace(
                                /^data:[^;]*;/,
                                'data:attachment/file;'
                              );
                          var popup = view.open(url, '_blank');
                          if (!popup) view.location.href = url;
                          url = undefined; // release reference before dispatching
                          filesaver.readyState = filesaver.DONE;
                          dispatch_all();
                        };
                        reader.readAsDataURL(blob);
                        filesaver.readyState = filesaver.INIT;
                        return;
                      }
                      // don't create more object URLs than needed
                      if (!object_url) {
                        object_url = get_URL().createObjectURL(blob);
                      }
                      if (force) {
                        view.location.href = object_url;
                      } else {
                        var opened = view.open(object_url, '_blank');
                        if (!opened) {
                          // Apple does not allow window.open, see https://developer.apple.com/library/safari/documentation/Tools/Conceptual/SafariExtensionGuide/WorkingwithWindowsandTabs/WorkingwithWindowsandTabs.html
                          view.location.href = object_url;
                        }
                      }
                      filesaver.readyState = filesaver.DONE;
                      dispatch_all();
                      revoke(object_url);
                    };
                  filesaver.readyState = filesaver.INIT;

                  if (can_use_save_link) {
                    object_url = get_URL().createObjectURL(blob);
                    setTimeout(function() {
                      save_link.href = object_url;
                      save_link.download = name;
                      click(save_link);
                      dispatch_all();
                      revoke(object_url);
                      filesaver.readyState = filesaver.DONE;
                    });
                    return;
                  }

                  fs_error();
                },
                FS_proto = FileSaver.prototype,
                saveAs = function(blob, name, no_auto_bom) {
                  return new FileSaver(blob, name || blob.name || 'download', no_auto_bom);
                };
              // IE 10+ (native saveAs)
              if (typeof navigator !== 'undefined' && navigator.msSaveOrOpenBlob) {
                return function(blob, name, no_auto_bom) {
                  name = name || blob.name || 'download';

                  if (!no_auto_bom) {
                    blob = auto_bom(blob);
                  }
                  return navigator.msSaveOrOpenBlob(blob, name);
                };
              }

              FS_proto.abort = function() {};
              FS_proto.readyState = FS_proto.INIT = 0;
              FS_proto.WRITING = 1;
              FS_proto.DONE = 2;

              FS_proto.error = FS_proto.onwritestart = FS_proto.onprogress = FS_proto.onwrite = FS_proto.onabort = FS_proto.onerror = FS_proto.onwriteend = null;

              return saveAs;
            })(
              (typeof self !== 'undefined' && self) ||
                (typeof window !== 'undefined' && window) ||
                this.content
            );
          // `self` is undefined in Firefox for Android content script context
          // while `this` is nsIContentFrameMessageManager
          // with an attribute `content` that corresponds to the window

          if (typeof module !== 'undefined' && module.exports) {
            module.exports.saveAs = saveAs;
          } else if (
            typeof define !== 'undefined' &&
            define !== null &&
            define.amd !== null
          ) {
            define('FileSaver.js', function() {
              return saveAs;
            });
          }
        },
        {}
      ],
      251: [
        function(_dereq_, module, exports) {
          'use strict';

          function _interopDefault(ex) {
            return ex && typeof ex === 'object' && 'default' in ex ? ex['default'] : ex;
          }

          var _classCallCheck = _interopDefault(
            _dereq_('@babel/runtime/helpers/classCallCheck')
          );
          var _createClass = _interopDefault(_dereq_('@babel/runtime/helpers/createClass'));

          var arr = [];
          var each = arr.forEach;
          var slice = arr.slice;
          function defaults(obj) {
            each.call(slice.call(arguments, 1), function(source) {
              if (source) {
                for (var prop in source) {
                  if (obj[prop] === undefined) obj[prop] = source[prop];
                }
              }
            });
            return obj;
          }

          var cookie = {
            create: function create(name, value, minutes, domain) {
              var expires;

              if (minutes) {
                var date = new Date();
                date.setTime(date.getTime() + minutes * 60 * 1000);
                expires = '; expires=' + date.toGMTString();
              } else expires = '';

              domain = domain ? 'domain=' + domain + ';' : '';
              document.cookie = name + '=' + value + expires + ';' + domain + 'path=/';
            },
            read: function read(name) {
              var nameEQ = name + '=';
              var ca = document.cookie.split(';');

              for (var i = 0; i < ca.length; i++) {
                var c = ca[i];

                while (c.charAt(0) === ' ') {
                  c = c.substring(1, c.length);
                }

                if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);
              }

              return null;
            },
            remove: function remove(name) {
              this.create(name, '', -1);
            }
          };
          var cookie$1 = {
            name: 'cookie',
            lookup: function lookup(options) {
              var found;

              if (options.lookupCookie && typeof document !== 'undefined') {
                var c = cookie.read(options.lookupCookie);
                if (c) found = c;
              }

              return found;
            },
            cacheUserLanguage: function cacheUserLanguage(lng, options) {
              if (options.lookupCookie && typeof document !== 'undefined') {
                cookie.create(
                  options.lookupCookie,
                  lng,
                  options.cookieMinutes,
                  options.cookieDomain
                );
              }
            }
          };

          var querystring = {
            name: 'querystring',
            lookup: function lookup(options) {
              var found;

              if (typeof window !== 'undefined') {
                var query = window.location.search.substring(1);
                var params = query.split('&');

                for (var i = 0; i < params.length; i++) {
                  var pos = params[i].indexOf('=');

                  if (pos > 0) {
                    var key = params[i].substring(0, pos);

                    if (key === options.lookupQuerystring) {
                      found = params[i].substring(pos + 1);
                    }
                  }
                }
              }

              return found;
            }
          };

          var hasLocalStorageSupport;

          try {
            hasLocalStorageSupport = window !== 'undefined' && window.localStorage !== null;
            var testKey = 'i18next.translate.boo';
            window.localStorage.setItem(testKey, 'foo');
            window.localStorage.removeItem(testKey);
          } catch (e) {
            hasLocalStorageSupport = false;
          }

          var localStorage = {
            name: 'localStorage',
            lookup: function lookup(options) {
              var found;

              if (options.lookupLocalStorage && hasLocalStorageSupport) {
                var lng = window.localStorage.getItem(options.lookupLocalStorage);
                if (lng) found = lng;
              }

              return found;
            },
            cacheUserLanguage: function cacheUserLanguage(lng, options) {
              if (options.lookupLocalStorage && hasLocalStorageSupport) {
                window.localStorage.setItem(options.lookupLocalStorage, lng);
              }
            }
          };

          var navigator$1 = {
            name: 'navigator',
            lookup: function lookup(options) {
              var found = [];

              if (typeof navigator !== 'undefined') {
                if (navigator.languages) {
                  // chrome only; not an array, so can't use .push.apply instead of iterating
                  for (var i = 0; i < navigator.languages.length; i++) {
                    found.push(navigator.languages[i]);
                  }
                }

                if (navigator.userLanguage) {
                  found.push(navigator.userLanguage);
                }

                if (navigator.language) {
                  found.push(navigator.language);
                }
              }

              return found.length > 0 ? found : undefined;
            }
          };

          var htmlTag = {
            name: 'htmlTag',
            lookup: function lookup(options) {
              var found;
              var htmlTag =
                options.htmlTag ||
                (typeof document !== 'undefined' ? document.documentElement : null);

              if (htmlTag && typeof htmlTag.getAttribute === 'function') {
                found = htmlTag.getAttribute('lang');
              }

              return found;
            }
          };

          var path = {
            name: 'path',
            lookup: function lookup(options) {
              var found;

              if (typeof window !== 'undefined') {
                var language = window.location.pathname.match(/\/([a-zA-Z-]*)/g);

                if (language instanceof Array) {
                  if (typeof options.lookupFromPathIndex === 'number') {
                    if (typeof language[options.lookupFromPathIndex] !== 'string') {
                      return undefined;
                    }

                    found = language[options.lookupFromPathIndex].replace('/', '');
                  } else {
                    found = language[0].replace('/', '');
                  }
                }
              }

              return found;
            }
          };

          var subdomain = {
            name: 'subdomain',
            lookup: function lookup(options) {
              var found;

              if (typeof window !== 'undefined') {
                var language = window.location.href.match(
                  /(?:http[s]*\:\/\/)*(.*?)\.(?=[^\/]*\..{2,5})/gi
                );

                if (language instanceof Array) {
                  if (typeof options.lookupFromSubdomainIndex === 'number') {
                    found = language[options.lookupFromSubdomainIndex]
                      .replace('http://', '')
                      .replace('https://', '')
                      .replace('.', '');
                  } else {
                    found = language[0]
                      .replace('http://', '')
                      .replace('https://', '')
                      .replace('.', '');
                  }
                }
              }

              return found;
            }
          };

          function getDefaults() {
            return {
              order: ['querystring', 'cookie', 'localStorage', 'navigator', 'htmlTag'],
              lookupQuerystring: 'lng',
              lookupCookie: 'i18next',
              lookupLocalStorage: 'i18nextLng',
              // cache user language
              caches: ['localStorage'],
              excludeCacheFor: ['cimode'],
              //cookieMinutes: 10,
              //cookieDomain: 'myDomain'
              checkWhitelist: true
            };
          }

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

                _classCallCheck(this, Browser);

                this.type = 'languageDetector';
                this.detectors = {};
                this.init(services, options);
              }

              _createClass(Browser, [
                {
                  key: 'init',
                  value: function init(services) {
                    var options =
                      arguments.length > 1 && arguments[1] !== undefined
                        ? arguments[1]
                        : {};
                    var i18nOptions =
                      arguments.length > 2 && arguments[2] !== undefined
                        ? arguments[2]
                        : {};
                    this.services = services;
                    this.options = defaults(options, this.options || {}, getDefaults()); // backwards compatibility

                    if (this.options.lookupFromUrlIndex)
                      this.options.lookupFromPathIndex = this.options.lookupFromUrlIndex;
                    this.i18nOptions = i18nOptions;
                    this.addDetector(cookie$1);
                    this.addDetector(querystring);
                    this.addDetector(localStorage);
                    this.addDetector(navigator$1);
                    this.addDetector(htmlTag);
                    this.addDetector(path);
                    this.addDetector(subdomain);
                  }
                },
                {
                  key: 'addDetector',
                  value: function addDetector(detector) {
                    this.detectors[detector.name] = detector;
                  }
                },
                {
                  key: 'detect',
                  value: function detect(detectionOrder) {
                    var _this = this;

                    if (!detectionOrder) detectionOrder = this.options.order;
                    var detected = [];
                    detectionOrder.forEach(function(detectorName) {
                      if (_this.detectors[detectorName]) {
                        var lookup = _this.detectors[detectorName].lookup(_this.options);

                        if (lookup && typeof lookup === 'string') lookup = [lookup];
                        if (lookup) detected = detected.concat(lookup);
                      }
                    });
                    var found;
                    detected.forEach(function(lng) {
                      if (found) return;

                      var cleanedLng = _this.services.languageUtils.formatLanguageCode(lng);

                      if (
                        !_this.options.checkWhitelist ||
                        _this.services.languageUtils.isWhitelisted(cleanedLng)
                      )
                        found = cleanedLng;
                    });

                    if (!found) {
                      var fallbacks = this.i18nOptions.fallbackLng;
                      if (typeof fallbacks === 'string') fallbacks = [fallbacks];
                      if (!fallbacks) fallbacks = [];

                      if (Object.prototype.toString.apply(fallbacks) === '[object Array]') {
                        found = fallbacks[0];
                      } else {
                        found =
                          fallbacks[0] || (fallbacks['default'] && fallbacks['default'][0]);
                      }
                    }

                    return found;
                  }
                },
                {
                  key: 'cacheUserLanguage',
                  value: function cacheUserLanguage(lng, caches) {
                    var _this2 = this;

                    if (!caches) caches = this.options.caches;
                    if (!caches) return;
                    if (
                      this.options.excludeCacheFor &&
                      this.options.excludeCacheFor.indexOf(lng) > -1
                    )
                      return;
                    caches.forEach(function(cacheName) {
                      if (_this2.detectors[cacheName])
                        _this2.detectors[cacheName].cacheUserLanguage(lng, _this2.options);
                    });
                  }
                }
              ]);

              return Browser;
            })();

          Browser.type = 'languageDetector';

          module.exports = Browser;
        },
        {
          '@babel/runtime/helpers/classCallCheck': 252,
          '@babel/runtime/helpers/createClass': 253
        }
      ],
      252: [
        function(_dereq_, module, exports) {
          arguments[4][5][0].apply(exports, arguments);
        },
        { dup: 5 }
      ],
      253: [
        function(_dereq_, module, exports) {
          arguments[4][6][0].apply(exports, arguments);
        },
        { dup: 6 }
      ],
      254: [
        function(_dereq_, module, exports) {
          'use strict';

          function _interopDefault(ex) {
            return ex && typeof ex === 'object' && 'default' in ex ? ex['default'] : ex;
          }

          var _typeof = _interopDefault(_dereq_('@babel/runtime/helpers/typeof'));
          var _objectSpread = _interopDefault(
            _dereq_('@babel/runtime/helpers/objectSpread')
          );
          var _classCallCheck = _interopDefault(
            _dereq_('@babel/runtime/helpers/classCallCheck')
          );
          var _createClass = _interopDefault(_dereq_('@babel/runtime/helpers/createClass'));
          var _possibleConstructorReturn = _interopDefault(
            _dereq_('@babel/runtime/helpers/possibleConstructorReturn')
          );
          var _getPrototypeOf = _interopDefault(
            _dereq_('@babel/runtime/helpers/getPrototypeOf')
          );
          var _assertThisInitialized = _interopDefault(
            _dereq_('@babel/runtime/helpers/assertThisInitialized')
          );
          var _inherits = _interopDefault(_dereq_('@babel/runtime/helpers/inherits'));
          var _toConsumableArray = _interopDefault(
            _dereq_('@babel/runtime/helpers/toConsumableArray')
          );
          var _slicedToArray = _interopDefault(
            _dereq_('@babel/runtime/helpers/slicedToArray')
          );

          var consoleLogger = {
            type: 'logger',
            log: function log(args) {
              this.output('log', args);
            },
            warn: function warn(args) {
              this.output('warn', args);
            },
            error: function error(args) {
              this.output('error', args);
            },
            output: function output(type, args) {
              var _console;

              /* eslint no-console: 0 */
              if (console && console[type])
                (_console = console)[type].apply(_console, _toConsumableArray(args));
            }
          };

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

                _classCallCheck(this, Logger);

                this.init(concreteLogger, options);
              }

              _createClass(Logger, [
                {
                  key: 'init',
                  value: function init(concreteLogger) {
                    var options =
                      arguments.length > 1 && arguments[1] !== undefined
                        ? arguments[1]
                        : {};
                    this.prefix = options.prefix || 'i18next:';
                    this.logger = concreteLogger || consoleLogger;
                    this.options = options;
                    this.debug = options.debug;
                  }
                },
                {
                  key: 'setDebug',
                  value: function setDebug(bool) {
                    this.debug = bool;
                  }
                },
                {
                  key: 'log',
                  value: function log() {
                    for (
                      var _len = arguments.length, args = new Array(_len), _key = 0;
                      _key < _len;
                      _key++
                    ) {
                      args[_key] = arguments[_key];
                    }

                    return this.forward(args, 'log', '', true);
                  }
                },
                {
                  key: 'warn',
                  value: function warn() {
                    for (
                      var _len2 = arguments.length, args = new Array(_len2), _key2 = 0;
                      _key2 < _len2;
                      _key2++
                    ) {
                      args[_key2] = arguments[_key2];
                    }

                    return this.forward(args, 'warn', '', true);
                  }
                },
                {
                  key: 'error',
                  value: function error() {
                    for (
                      var _len3 = arguments.length, args = new Array(_len3), _key3 = 0;
                      _key3 < _len3;
                      _key3++
                    ) {
                      args[_key3] = arguments[_key3];
                    }

                    return this.forward(args, 'error', '');
                  }
                },
                {
                  key: 'deprecate',
                  value: function deprecate() {
                    for (
                      var _len4 = arguments.length, args = new Array(_len4), _key4 = 0;
                      _key4 < _len4;
                      _key4++
                    ) {
                      args[_key4] = arguments[_key4];
                    }

                    return this.forward(args, 'warn', 'WARNING DEPRECATED: ', true);
                  }
                },
                {
                  key: 'forward',
                  value: function forward(args, lvl, prefix, debugOnly) {
                    if (debugOnly && !this.debug) return null;
                    if (typeof args[0] === 'string')
                      args[0] = ''
                        .concat(prefix)
                        .concat(this.prefix, ' ')
                        .concat(args[0]);
                    return this.logger[lvl](args);
                  }
                },
                {
                  key: 'create',
                  value: function create(moduleName) {
                    return new Logger(
                      this.logger,
                      _objectSpread(
                        {},
                        {
                          prefix: ''.concat(this.prefix, ':').concat(moduleName, ':')
                        },
                        this.options
                      )
                    );
                  }
                }
              ]);

              return Logger;
            })();

          var baseLogger = new Logger();

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

                this.observers = {};
              }

              _createClass(EventEmitter, [
                {
                  key: 'on',
                  value: function on(events, listener) {
                    var _this = this;

                    events.split(' ').forEach(function(event) {
                      _this.observers[event] = _this.observers[event] || [];

                      _this.observers[event].push(listener);
                    });
                    return this;
                  }
                },
                {
                  key: 'off',
                  value: function off(event, listener) {
                    if (!this.observers[event]) return;

                    if (!listener) {
                      delete this.observers[event];
                      return;
                    }

                    this.observers[event] = this.observers[event].filter(function(l) {
                      return l !== listener;
                    });
                  }
                },
                {
                  key: 'emit',
                  value: function emit(event) {
                    for (
                      var _len = arguments.length,
                        args = new Array(_len > 1 ? _len - 1 : 0),
                        _key = 1;
                      _key < _len;
                      _key++
                    ) {
                      args[_key - 1] = arguments[_key];
                    }

                    if (this.observers[event]) {
                      var cloned = [].concat(this.observers[event]);
                      cloned.forEach(function(observer) {
                        observer.apply(void 0, args);
                      });
                    }

                    if (this.observers['*']) {
                      var _cloned = [].concat(this.observers['*']);

                      _cloned.forEach(function(observer) {
                        observer.apply(observer, [event].concat(args));
                      });
                    }
                  }
                }
              ]);

              return EventEmitter;
            })();

          // http://lea.verou.me/2016/12/resolve-promises-externally-with-this-one-weird-trick/
          function defer() {
            var res;
            var rej;
            var promise = new Promise(function(resolve, reject) {
              res = resolve;
              rej = reject;
            });
            promise.resolve = res;
            promise.reject = rej;
            return promise;
          }
          function makeString(object) {
            if (object == null) return '';
            /* eslint prefer-template: 0 */

            return '' + object;
          }
          function copy(a, s, t) {
            a.forEach(function(m) {
              if (s[m]) t[m] = s[m];
            });
          }

          function getLastOfPath(object, path, Empty) {
            function cleanKey(key) {
              return key && key.indexOf('###') > -1 ? key.replace(/###/g, '.') : key;
            }

            function canNotTraverseDeeper() {
              return !object || typeof object === 'string';
            }

            var stack = typeof path !== 'string' ? [].concat(path) : path.split('.');

            while (stack.length > 1) {
              if (canNotTraverseDeeper()) return {};
              var key = cleanKey(stack.shift());
              if (!object[key] && Empty) object[key] = new Empty();
              object = object[key];
            }

            if (canNotTraverseDeeper()) return {};
            return {
              obj: object,
              k: cleanKey(stack.shift())
            };
          }

          function setPath(object, path, newValue) {
            var _getLastOfPath = getLastOfPath(object, path, Object),
              obj = _getLastOfPath.obj,
              k = _getLastOfPath.k;

            obj[k] = newValue;
          }
          function pushPath(object, path, newValue, concat) {
            var _getLastOfPath2 = getLastOfPath(object, path, Object),
              obj = _getLastOfPath2.obj,
              k = _getLastOfPath2.k;

            obj[k] = obj[k] || [];
            if (concat) obj[k] = obj[k].concat(newValue);
            if (!concat) obj[k].push(newValue);
          }
          function getPath(object, path) {
            var _getLastOfPath3 = getLastOfPath(object, path),
              obj = _getLastOfPath3.obj,
              k = _getLastOfPath3.k;

            if (!obj) return undefined;
            return obj[k];
          }
          function getPathWithDefaults(data, defaultData, key) {
            var value = getPath(data, key);

            if (value !== undefined) {
              return value;
            } // Fallback to default values

            return getPath(defaultData, key);
          }
          function deepExtend(target, source, overwrite) {
            /* eslint no-restricted-syntax: 0 */
            for (var prop in source) {
              if (prop in target) {
                // If we reached a leaf string in target or source then replace with source or skip depending on the 'overwrite' switch
                if (
                  typeof target[prop] === 'string' ||
                  target[prop] instanceof String ||
                  typeof source[prop] === 'string' ||
                  source[prop] instanceof String
                ) {
                  if (overwrite) target[prop] = source[prop];
                } else {
                  deepExtend(target[prop], source[prop], overwrite);
                }
              } else {
                target[prop] = source[prop];
              }
            }

            return target;
          }
          function regexEscape(str) {
            /* eslint no-useless-escape: 0 */
            return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&');
          }
          /* eslint-disable */

          var _entityMap = {
            '&': '&amp;',
            '<': '&lt;',
            '>': '&gt;',
            '"': '&quot;',
            "'": '&#39;',
            '/': '&#x2F;'
          };
          /* eslint-enable */

          function escape(data) {
            if (typeof data === 'string') {
              return data.replace(/[&<>"'\/]/g, function(s) {
                return _entityMap[s];
              });
            }

            return data;
          }

          var ResourceStore =
            /*#__PURE__*/
            (function(_EventEmitter) {
              _inherits(ResourceStore, _EventEmitter);

              function ResourceStore(data) {
                var _this;

                var options =
                  arguments.length > 1 && arguments[1] !== undefined
                    ? arguments[1]
                    : {
                        ns: ['translation'],
                        defaultNS: 'translation'
                      };

                _classCallCheck(this, ResourceStore);

                _this = _possibleConstructorReturn(
                  this,
                  _getPrototypeOf(ResourceStore).call(this)
                );
                EventEmitter.call(_assertThisInitialized(_this)); // <=IE10 fix (unable to call parent constructor)

                _this.data = data || {};
                _this.options = options;

                if (_this.options.keySeparator === undefined) {
                  _this.options.keySeparator = '.';
                }

                return _this;
              }

              _createClass(ResourceStore, [
                {
                  key: 'addNamespaces',
                  value: function addNamespaces(ns) {
                    if (this.options.ns.indexOf(ns) < 0) {
                      this.options.ns.push(ns);
                    }
                  }
                },
                {
                  key: 'removeNamespaces',
                  value: function removeNamespaces(ns) {
                    var index = this.options.ns.indexOf(ns);

                    if (index > -1) {
                      this.options.ns.splice(index, 1);
                    }
                  }
                },
                {
                  key: 'getResource',
                  value: function getResource(lng, ns, key) {
                    var options =
                      arguments.length > 3 && arguments[3] !== undefined
                        ? arguments[3]
                        : {};
                    var keySeparator =
                      options.keySeparator !== undefined
                        ? options.keySeparator
                        : this.options.keySeparator;
                    var path = [lng, ns];
                    if (key && typeof key !== 'string') path = path.concat(key);
                    if (key && typeof key === 'string')
                      path = path.concat(keySeparator ? key.split(keySeparator) : key);

                    if (lng.indexOf('.') > -1) {
                      path = lng.split('.');
                    }

                    return getPath(this.data, path);
                  }
                },
                {
                  key: 'addResource',
                  value: function addResource(lng, ns, key, value) {
                    var options =
                      arguments.length > 4 && arguments[4] !== undefined
                        ? arguments[4]
                        : {
                            silent: false
                          };
                    var keySeparator = this.options.keySeparator;
                    if (keySeparator === undefined) keySeparator = '.';
                    var path = [lng, ns];
                    if (key)
                      path = path.concat(keySeparator ? key.split(keySeparator) : key);

                    if (lng.indexOf('.') > -1) {
                      path = lng.split('.');
                      value = ns;
                      ns = path[1];
                    }

                    this.addNamespaces(ns);
                    setPath(this.data, path, value);
                    if (!options.silent) this.emit('added', lng, ns, key, value);
                  }
                },
                {
                  key: 'addResources',
                  value: function addResources(lng, ns, resources) {
                    var options =
                      arguments.length > 3 && arguments[3] !== undefined
                        ? arguments[3]
                        : {
                            silent: false
                          };

                    /* eslint no-restricted-syntax: 0 */
                    for (var m in resources) {
                      if (
                        typeof resources[m] === 'string' ||
                        Object.prototype.toString.apply(resources[m]) === '[object Array]'
                      )
                        this.addResource(lng, ns, m, resources[m], {
                          silent: true
                        });
                    }

                    if (!options.silent) this.emit('added', lng, ns, resources);
                  }
                },
                {
                  key: 'addResourceBundle',
                  value: function addResourceBundle(lng, ns, resources, deep, overwrite) {
                    var options =
                      arguments.length > 5 && arguments[5] !== undefined
                        ? arguments[5]
                        : {
                            silent: false
                          };
                    var path = [lng, ns];

                    if (lng.indexOf('.') > -1) {
                      path = lng.split('.');
                      deep = resources;
                      resources = ns;
                      ns = path[1];
                    }

                    this.addNamespaces(ns);
                    var pack = getPath(this.data, path) || {};

                    if (deep) {
                      deepExtend(pack, resources, overwrite);
                    } else {
                      pack = _objectSpread({}, pack, resources);
                    }

                    setPath(this.data, path, pack);
                    if (!options.silent) this.emit('added', lng, ns, resources);
                  }
                },
                {
                  key: 'removeResourceBundle',
                  value: function removeResourceBundle(lng, ns) {
                    if (this.hasResourceBundle(lng, ns)) {
                      delete this.data[lng][ns];
                    }

                    this.removeNamespaces(ns);
                    this.emit('removed', lng, ns);
                  }
                },
                {
                  key: 'hasResourceBundle',
                  value: function hasResourceBundle(lng, ns) {
                    return this.getResource(lng, ns) !== undefined;
                  }
                },
                {
                  key: 'getResourceBundle',
                  value: function getResourceBundle(lng, ns) {
                    if (!ns) ns = this.options.defaultNS; // COMPATIBILITY: remove extend in v2.1.0

                    if (this.options.compatibilityAPI === 'v1')
                      return _objectSpread({}, {}, this.getResource(lng, ns));
                    return this.getResource(lng, ns);
                  }
                },
                {
                  key: 'getDataByLanguage',
                  value: function getDataByLanguage(lng) {
                    return this.data[lng];
                  }
                },
                {
                  key: 'toJSON',
                  value: function toJSON() {
                    return this.data;
                  }
                }
              ]);

              return ResourceStore;
            })(EventEmitter);

          var postProcessor = {
            processors: {},
            addPostProcessor: function addPostProcessor(module) {
              this.processors[module.name] = module;
            },
            handle: function handle(processors, value, key, options, translator) {
              var _this = this;

              processors.forEach(function(processor) {
                if (_this.processors[processor])
                  value = _this.processors[processor].process(
                    value,
                    key,
                    options,
                    translator
                  );
              });
              return value;
            }
          };

          var checkedLoadedFor = {};

          var Translator =
            /*#__PURE__*/
            (function(_EventEmitter) {
              _inherits(Translator, _EventEmitter);

              function Translator(services) {
                var _this;

                var options =
                  arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};

                _classCallCheck(this, Translator);

                _this = _possibleConstructorReturn(
                  this,
                  _getPrototypeOf(Translator).call(this)
                );
                EventEmitter.call(_assertThisInitialized(_this)); // <=IE10 fix (unable to call parent constructor)

                copy(
                  [
                    'resourceStore',
                    'languageUtils',
                    'pluralResolver',
                    'interpolator',
                    'backendConnector',
                    'i18nFormat',
                    'utils'
                  ],
                  services,
                  _assertThisInitialized(_this)
                );
                _this.options = options;

                if (_this.options.keySeparator === undefined) {
                  _this.options.keySeparator = '.';
                }

                _this.logger = baseLogger.create('translator');
                return _this;
              }

              _createClass(Translator, [
                {
                  key: 'changeLanguage',
                  value: function changeLanguage(lng) {
                    if (lng) this.language = lng;
                  }
                },
                {
                  key: 'exists',
                  value: function exists(key) {
                    var options =
                      arguments.length > 1 && arguments[1] !== undefined
                        ? arguments[1]
                        : {
                            interpolation: {}
                          };
                    var resolved = this.resolve(key, options);
                    return resolved && resolved.res !== undefined;
                  }
                },
                {
                  key: 'extractFromKey',
                  value: function extractFromKey(key, options) {
                    var nsSeparator = options.nsSeparator || this.options.nsSeparator;
                    if (nsSeparator === undefined) nsSeparator = ':';
                    var keySeparator =
                      options.keySeparator !== undefined
                        ? options.keySeparator
                        : this.options.keySeparator;
                    var namespaces = options.ns || this.options.defaultNS;

                    if (nsSeparator && key.indexOf(nsSeparator) > -1) {
                      var parts = key.split(nsSeparator);
                      if (
                        nsSeparator !== keySeparator ||
                        (nsSeparator === keySeparator &&
                          this.options.ns.indexOf(parts[0]) > -1)
                      )
                        namespaces = parts.shift();
                      key = parts.join(keySeparator);
                    }

                    if (typeof namespaces === 'string') namespaces = [namespaces];
                    return {
                      key: key,
                      namespaces: namespaces
                    };
                  }
                },
                {
                  key: 'translate',
                  value: function translate(keys, options) {
                    var _this2 = this;

                    if (
                      _typeof(options) !== 'object' &&
                      this.options.overloadTranslationOptionHandler
                    ) {
                      /* eslint prefer-rest-params: 0 */
                      options = this.options.overloadTranslationOptionHandler(arguments);
                    }

                    if (!options) options = {}; // non valid keys handling

                    if (
                      keys === undefined ||
                      keys === null
                      /* || keys === ''*/
                    )
                      return '';
                    if (!Array.isArray(keys)) keys = [String(keys)]; // separators

                    var keySeparator =
                      options.keySeparator !== undefined
                        ? options.keySeparator
                        : this.options.keySeparator; // get namespace(s)

                    var _this$extractFromKey = this.extractFromKey(
                        keys[keys.length - 1],
                        options
                      ),
                      key = _this$extractFromKey.key,
                      namespaces = _this$extractFromKey.namespaces;

                    var namespace = namespaces[namespaces.length - 1]; // return key on CIMode

                    var lng = options.lng || this.language;
                    var appendNamespaceToCIMode =
                      options.appendNamespaceToCIMode ||
                      this.options.appendNamespaceToCIMode;

                    if (lng && lng.toLowerCase() === 'cimode') {
                      if (appendNamespaceToCIMode) {
                        var nsSeparator = options.nsSeparator || this.options.nsSeparator;
                        return namespace + nsSeparator + key;
                      }

                      return key;
                    } // resolve from store

                    var resolved = this.resolve(keys, options);
                    var res = resolved && resolved.res;
                    var resUsedKey = (resolved && resolved.usedKey) || key;
                    var resExactUsedKey = (resolved && resolved.exactUsedKey) || key;
                    var resType = Object.prototype.toString.apply(res);
                    var noObject = [
                      '[object Number]',
                      '[object Function]',
                      '[object RegExp]'
                    ];
                    var joinArrays =
                      options.joinArrays !== undefined
                        ? options.joinArrays
                        : this.options.joinArrays; // object

                    var handleAsObjectInI18nFormat =
                      !this.i18nFormat || this.i18nFormat.handleAsObject;
                    var handleAsObject =
                      typeof res !== 'string' &&
                      typeof res !== 'boolean' &&
                      typeof res !== 'number';

                    if (
                      handleAsObjectInI18nFormat &&
                      res &&
                      handleAsObject &&
                      noObject.indexOf(resType) < 0 &&
                      !(typeof joinArrays === 'string' && resType === '[object Array]')
                    ) {
                      if (!options.returnObjects && !this.options.returnObjects) {
                        this.logger.warn(
                          'accessing an object - but returnObjects options is not enabled!'
                        );
                        return this.options.returnedObjectHandler
                          ? this.options.returnedObjectHandler(resUsedKey, res, options)
                          : "key '"
                              .concat(key, ' (')
                              .concat(
                                this.language,
                                ")' returned an object instead of string."
                              );
                      } // if we got a separator we loop over children - else we just return object as is
                      // as having it set to false means no hierarchy so no lookup for nested values

                      if (keySeparator) {
                        var resTypeIsArray = resType === '[object Array]';
                        var copy$$1 = resTypeIsArray ? [] : {}; // apply child translation on a copy

                        /* eslint no-restricted-syntax: 0 */

                        var newKeyToUse = resTypeIsArray ? resExactUsedKey : resUsedKey;

                        for (var m in res) {
                          if (Object.prototype.hasOwnProperty.call(res, m)) {
                            var deepKey = ''
                              .concat(newKeyToUse)
                              .concat(keySeparator)
                              .concat(m);
                            copy$$1[m] = this.translate(
                              deepKey,
                              _objectSpread({}, options, {
                                joinArrays: false,
                                ns: namespaces
                              })
                            );
                            if (copy$$1[m] === deepKey) copy$$1[m] = res[m]; // if nothing found use orginal value as fallback
                          }
                        }

                        res = copy$$1;
                      }
                    } else if (
                      handleAsObjectInI18nFormat &&
                      typeof joinArrays === 'string' &&
                      resType === '[object Array]'
                    ) {
                      // array special treatment
                      res = res.join(joinArrays);
                      if (res) res = this.extendTranslation(res, keys, options);
                    } else {
                      // string, empty or null
                      var usedDefault = false;
                      var usedKey = false; // fallback value

                      if (!this.isValidLookup(res) && options.defaultValue !== undefined) {
                        usedDefault = true;

                        if (options.count !== undefined) {
                          var suffix = this.pluralResolver.getSuffix(lng, options.count);
                          res = options['defaultValue'.concat(suffix)];
                        }

                        if (!res) res = options.defaultValue;
                      }

                      if (!this.isValidLookup(res)) {
                        usedKey = true;
                        res = key;
                      } // save missing

                      var updateMissing =
                        options.defaultValue &&
                        options.defaultValue !== res &&
                        this.options.updateMissing;

                      if (usedKey || usedDefault || updateMissing) {
                        this.logger.log(
                          updateMissing ? 'updateKey' : 'missingKey',
                          lng,
                          namespace,
                          key,
                          updateMissing ? options.defaultValue : res
                        );
                        var lngs = [];
                        var fallbackLngs = this.languageUtils.getFallbackCodes(
                          this.options.fallbackLng,
                          options.lng || this.language
                        );

                        if (
                          this.options.saveMissingTo === 'fallback' &&
                          fallbackLngs &&
                          fallbackLngs[0]
                        ) {
                          for (var i = 0; i < fallbackLngs.length; i++) {
                            lngs.push(fallbackLngs[i]);
                          }
                        } else if (this.options.saveMissingTo === 'all') {
                          lngs = this.languageUtils.toResolveHierarchy(
                            options.lng || this.language
                          );
                        } else {
                          lngs.push(options.lng || this.language);
                        }

                        var send = function send(l, k) {
                          if (_this2.options.missingKeyHandler) {
                            _this2.options.missingKeyHandler(
                              l,
                              namespace,
                              k,
                              updateMissing ? options.defaultValue : res,
                              updateMissing,
                              options
                            );
                          } else if (
                            _this2.backendConnector &&
                            _this2.backendConnector.saveMissing
                          ) {
                            _this2.backendConnector.saveMissing(
                              l,
                              namespace,
                              k,
                              updateMissing ? options.defaultValue : res,
                              updateMissing,
                              options
                            );
                          }

                          _this2.emit('missingKey', l, namespace, k, res);
                        };

                        if (this.options.saveMissing) {
                          var needsPluralHandling =
                            options.count !== undefined &&
                            typeof options.count !== 'string';

                          if (this.options.saveMissingPlurals && needsPluralHandling) {
                            lngs.forEach(function(l) {
                              var plurals = _this2.pluralResolver.getPluralFormsOfKey(
                                l,
                                key
                              );

                              plurals.forEach(function(p) {
                                return send([l], p);
                              });
                            });
                          } else {
                            send(lngs, key);
                          }
                        }
                      } // extend

                      res = this.extendTranslation(res, keys, options, resolved); // append namespace if still key

                      if (
                        usedKey &&
                        res === key &&
                        this.options.appendNamespaceToMissingKey
                      )
                        res = ''.concat(namespace, ':').concat(key); // parseMissingKeyHandler

                      if (usedKey && this.options.parseMissingKeyHandler)
                        res = this.options.parseMissingKeyHandler(res);
                    } // return

                    return res;
                  }
                },
                {
                  key: 'extendTranslation',
                  value: function extendTranslation(res, key, options, resolved) {
                    var _this3 = this;

                    if (this.i18nFormat && this.i18nFormat.parse) {
                      res = this.i18nFormat.parse(
                        res,
                        options,
                        resolved.usedLng,
                        resolved.usedNS,
                        resolved.usedKey,
                        {
                          resolved: resolved
                        }
                      );
                    } else if (!options.skipInterpolation) {
                      // i18next.parsing
                      if (options.interpolation)
                        this.interpolator.init(
                          _objectSpread({}, options, {
                            interpolation: _objectSpread(
                              {},
                              this.options.interpolation,
                              options.interpolation
                            )
                          })
                        ); // interpolate

                      var data =
                        options.replace && typeof options.replace !== 'string'
                          ? options.replace
                          : options;
                      if (this.options.interpolation.defaultVariables)
                        data = _objectSpread(
                          {},
                          this.options.interpolation.defaultVariables,
                          data
                        );
                      res = this.interpolator.interpolate(
                        res,
                        data,
                        options.lng || this.language,
                        options
                      ); // nesting

                      if (options.nest !== false)
                        res = this.interpolator.nest(
                          res,
                          function() {
                            return _this3.translate.apply(_this3, arguments);
                          },
                          options
                        );
                      if (options.interpolation) this.interpolator.reset();
                    } // post process

                    var postProcess = options.postProcess || this.options.postProcess;
                    var postProcessorNames =
                      typeof postProcess === 'string' ? [postProcess] : postProcess;

                    if (
                      res !== undefined &&
                      res !== null &&
                      postProcessorNames &&
                      postProcessorNames.length &&
                      options.applyPostProcessor !== false
                    ) {
                      res = postProcessor.handle(
                        postProcessorNames,
                        res,
                        key,
                        this.options && this.options.postProcessPassResolved
                          ? _objectSpread(
                              {
                                i18nResolved: resolved
                              },
                              options
                            )
                          : options,
                        this
                      );
                    }

                    return res;
                  }
                },
                {
                  key: 'resolve',
                  value: function resolve(keys) {
                    var _this4 = this;

                    var options =
                      arguments.length > 1 && arguments[1] !== undefined
                        ? arguments[1]
                        : {};
                    var found;
                    var usedKey; // plain key

                    var exactUsedKey; // key with context / plural

                    var usedLng;
                    var usedNS;
                    if (typeof keys === 'string') keys = [keys]; // forEach possible key

                    keys.forEach(function(k) {
                      if (_this4.isValidLookup(found)) return;

                      var extracted = _this4.extractFromKey(k, options);

                      var key = extracted.key;
                      usedKey = key;
                      var namespaces = extracted.namespaces;
                      if (_this4.options.fallbackNS)
                        namespaces = namespaces.concat(_this4.options.fallbackNS);
                      var needsPluralHandling =
                        options.count !== undefined && typeof options.count !== 'string';
                      var needsContextHandling =
                        options.context !== undefined &&
                        typeof options.context === 'string' &&
                        options.context !== '';
                      var codes = options.lngs
                        ? options.lngs
                        : _this4.languageUtils.toResolveHierarchy(
                            options.lng || _this4.language,
                            options.fallbackLng
                          );
                      namespaces.forEach(function(ns) {
                        if (_this4.isValidLookup(found)) return;
                        usedNS = ns;

                        if (
                          !checkedLoadedFor[''.concat(codes[0], '-').concat(ns)] &&
                          _this4.utils &&
                          _this4.utils.hasLoadedNamespace &&
                          !_this4.utils.hasLoadedNamespace(usedNS)
                        ) {
                          checkedLoadedFor[''.concat(codes[0], '-').concat(ns)] = true;

                          _this4.logger.warn(
                            'key "'
                              .concat(usedKey, '" for namespace "')
                              .concat(usedNS, '" for languages "')
                              .concat(
                                codes.join(', '),
                                '" won\'t get resolved as namespace was not yet loaded'
                              ),
                            'This means something IS WRONG in your application setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!'
                          );
                        }

                        codes.forEach(function(code) {
                          if (_this4.isValidLookup(found)) return;
                          usedLng = code;
                          var finalKey = key;
                          var finalKeys = [finalKey];

                          if (_this4.i18nFormat && _this4.i18nFormat.addLookupKeys) {
                            _this4.i18nFormat.addLookupKeys(
                              finalKeys,
                              key,
                              code,
                              ns,
                              options
                            );
                          } else {
                            var pluralSuffix;
                            if (needsPluralHandling)
                              pluralSuffix = _this4.pluralResolver.getSuffix(
                                code,
                                options.count
                              ); // fallback for plural if context not found

                            if (needsPluralHandling && needsContextHandling)
                              finalKeys.push(finalKey + pluralSuffix); // get key for context if needed

                            if (needsContextHandling)
                              finalKeys.push(
                                (finalKey += ''
                                  .concat(_this4.options.contextSeparator)
                                  .concat(options.context))
                              ); // get key for plural if needed

                            if (needsPluralHandling)
                              finalKeys.push((finalKey += pluralSuffix));
                          } // iterate over finalKeys starting with most specific pluralkey (-> contextkey only) -> singularkey only

                          var possibleKey;
                          /* eslint no-cond-assign: 0 */

                          while ((possibleKey = finalKeys.pop())) {
                            if (!_this4.isValidLookup(found)) {
                              exactUsedKey = possibleKey;
                              found = _this4.getResource(code, ns, possibleKey, options);
                            }
                          }
                        });
                      });
                    });
                    return {
                      res: found,
                      usedKey: usedKey,
                      exactUsedKey: exactUsedKey,
                      usedLng: usedLng,
                      usedNS: usedNS
                    };
                  }
                },
                {
                  key: 'isValidLookup',
                  value: function isValidLookup(res) {
                    return (
                      res !== undefined &&
                      !(!this.options.returnNull && res === null) &&
                      !(!this.options.returnEmptyString && res === '')
                    );
                  }
                },
                {
                  key: 'getResource',
                  value: function getResource(code, ns, key) {
                    var options =
                      arguments.length > 3 && arguments[3] !== undefined
                        ? arguments[3]
                        : {};
                    if (this.i18nFormat && this.i18nFormat.getResource)
                      return this.i18nFormat.getResource(code, ns, key, options);
                    return this.resourceStore.getResource(code, ns, key, options);
                  }
                }
              ]);

              return Translator;
            })(EventEmitter);

          function capitalize(string) {
            return string.charAt(0).toUpperCase() + string.slice(1);
          }

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

                this.options = options;
                this.whitelist = this.options.whitelist || false;
                this.logger = baseLogger.create('languageUtils');
              }

              _createClass(LanguageUtil, [
                {
                  key: 'getScriptPartFromCode',
                  value: function getScriptPartFromCode(code) {
                    if (!code || code.indexOf('-') < 0) return null;
                    var p = code.split('-');
                    if (p.length === 2) return null;
                    p.pop();
                    return this.formatLanguageCode(p.join('-'));
                  }
                },
                {
                  key: 'getLanguagePartFromCode',
                  value: function getLanguagePartFromCode(code) {
                    if (!code || code.indexOf('-') < 0) return code;
                    var p = code.split('-');
                    return this.formatLanguageCode(p[0]);
                  }
                },
                {
                  key: 'formatLanguageCode',
                  value: function formatLanguageCode(code) {
                    // http://www.iana.org/assignments/language-tags/language-tags.xhtml
                    if (typeof code === 'string' && code.indexOf('-') > -1) {
                      var specialCases = [
                        'hans',
                        'hant',
                        'latn',
                        'cyrl',
                        'cans',
                        'mong',
                        'arab'
                      ];
                      var p = code.split('-');

                      if (this.options.lowerCaseLng) {
                        p = p.map(function(part) {
                          return part.toLowerCase();
                        });
                      } else if (p.length === 2) {
                        p[0] = p[0].toLowerCase();
                        p[1] = p[1].toUpperCase();
                        if (specialCases.indexOf(p[1].toLowerCase()) > -1)
                          p[1] = capitalize(p[1].toLowerCase());
                      } else if (p.length === 3) {
                        p[0] = p[0].toLowerCase(); // if lenght 2 guess it's a country

                        if (p[1].length === 2) p[1] = p[1].toUpperCase();
                        if (p[0] !== 'sgn' && p[2].length === 2) p[2] = p[2].toUpperCase();
                        if (specialCases.indexOf(p[1].toLowerCase()) > -1)
                          p[1] = capitalize(p[1].toLowerCase());
                        if (specialCases.indexOf(p[2].toLowerCase()) > -1)
                          p[2] = capitalize(p[2].toLowerCase());
                      }

                      return p.join('-');
                    }

                    return this.options.cleanCode || this.options.lowerCaseLng
                      ? code.toLowerCase()
                      : code;
                  }
                },
                {
                  key: 'isWhitelisted',
                  value: function isWhitelisted(code) {
                    if (
                      this.options.load === 'languageOnly' ||
                      this.options.nonExplicitWhitelist
                    ) {
                      code = this.getLanguagePartFromCode(code);
                    }

                    return (
                      !this.whitelist ||
                      !this.whitelist.length ||
                      this.whitelist.indexOf(code) > -1
                    );
                  }
                },
                {
                  key: 'getFallbackCodes',
                  value: function getFallbackCodes(fallbacks, code) {
                    if (!fallbacks) return [];
                    if (typeof fallbacks === 'string') fallbacks = [fallbacks];
                    if (Object.prototype.toString.apply(fallbacks) === '[object Array]')
                      return fallbacks;
                    if (!code) return fallbacks['default'] || []; // asume we have an object defining fallbacks

                    var found = fallbacks[code];
                    if (!found) found = fallbacks[this.getScriptPartFromCode(code)];
                    if (!found) found = fallbacks[this.formatLanguageCode(code)];
                    if (!found) found = fallbacks['default'];
                    return found || [];
                  }
                },
                {
                  key: 'toResolveHierarchy',
                  value: function toResolveHierarchy(code, fallbackCode) {
                    var _this = this;

                    var fallbackCodes = this.getFallbackCodes(
                      fallbackCode || this.options.fallbackLng || [],
                      code
                    );
                    var codes = [];

                    var addCode = function addCode(c) {
                      if (!c) return;

                      if (_this.isWhitelisted(c)) {
                        codes.push(c);
                      } else {
                        _this.logger.warn(
                          'rejecting non-whitelisted language code: '.concat(c)
                        );
                      }
                    };

                    if (typeof code === 'string' && code.indexOf('-') > -1) {
                      if (this.options.load !== 'languageOnly')
                        addCode(this.formatLanguageCode(code));
                      if (
                        this.options.load !== 'languageOnly' &&
                        this.options.load !== 'currentOnly'
                      )
                        addCode(this.getScriptPartFromCode(code));
                      if (this.options.load !== 'currentOnly')
                        addCode(this.getLanguagePartFromCode(code));
                    } else if (typeof code === 'string') {
                      addCode(this.formatLanguageCode(code));
                    }

                    fallbackCodes.forEach(function(fc) {
                      if (codes.indexOf(fc) < 0) addCode(_this.formatLanguageCode(fc));
                    });
                    return codes;
                  }
                }
              ]);

              return LanguageUtil;
            })();

          /* eslint-disable */

          var sets = [
            {
              lngs: [
                'ach',
                'ak',
                'am',
                'arn',
                'br',
                'fil',
                'gun',
                'ln',
                'mfe',
                'mg',
                'mi',
                'oc',
                'pt',
                'pt-BR',
                'tg',
                'ti',
                'tr',
                'uz',
                'wa'
              ],
              nr: [1, 2],
              fc: 1
            },
            {
              lngs: [
                'af',
                'an',
                'ast',
                'az',
                'bg',
                'bn',
                'ca',
                'da',
                'de',
                'dev',
                'el',
                'en',
                'eo',
                'es',
                'et',
                'eu',
                'fi',
                'fo',
                'fur',
                'fy',
                'gl',
                'gu',
                'ha',
                'hi',
                'hu',
                'hy',
                'ia',
                'it',
                'kn',
                'ku',
                'lb',
                'mai',
                'ml',
                'mn',
                'mr',
                'nah',
                'nap',
                'nb',
                'ne',
                'nl',
                'nn',
                'no',
                'nso',
                'pa',
                'pap',
                'pms',
                'ps',
                'pt-PT',
                'rm',
                'sco',
                'se',
                'si',
                'so',
                'son',
                'sq',
                'sv',
                'sw',
                'ta',
                'te',
                'tk',
                'ur',
                'yo'
              ],
              nr: [1, 2],
              fc: 2
            },
            {
              lngs: [
                'ay',
                'bo',
                'cgg',
                'fa',
                'id',
                'ja',
                'jbo',
                'ka',
                'kk',
                'km',
                'ko',
                'ky',
                'lo',
                'ms',
                'sah',
                'su',
                'th',
                'tt',
                'ug',
                'vi',
                'wo',
                'zh'
              ],
              nr: [1],
              fc: 3
            },
            {
              lngs: ['be', 'bs', 'cnr', 'dz', 'hr', 'ru', 'sr', 'uk'],
              nr: [1, 2, 5],
              fc: 4
            },
            {
              lngs: ['ar'],
              nr: [0, 1, 2, 3, 11, 100],
              fc: 5
            },
            {
              lngs: ['cs', 'sk'],
              nr: [1, 2, 5],
              fc: 6
            },
            {
              lngs: ['csb', 'pl'],
              nr: [1, 2, 5],
              fc: 7
            },
            {
              lngs: ['cy'],
              nr: [1, 2, 3, 8],
              fc: 8
            },
            {
              lngs: ['fr'],
              nr: [1, 2],
              fc: 9
            },
            {
              lngs: ['ga'],
              nr: [1, 2, 3, 7, 11],
              fc: 10
            },
            {
              lngs: ['gd'],
              nr: [1, 2, 3, 20],
              fc: 11
            },
            {
              lngs: ['is'],
              nr: [1, 2],
              fc: 12
            },
            {
              lngs: ['jv'],
              nr: [0, 1],
              fc: 13
            },
            {
              lngs: ['kw'],
              nr: [1, 2, 3, 4],
              fc: 14
            },
            {
              lngs: ['lt'],
              nr: [1, 2, 10],
              fc: 15
            },
            {
              lngs: ['lv'],
              nr: [1, 2, 0],
              fc: 16
            },
            {
              lngs: ['mk'],
              nr: [1, 2],
              fc: 17
            },
            {
              lngs: ['mnk'],
              nr: [0, 1, 2],
              fc: 18
            },
            {
              lngs: ['mt'],
              nr: [1, 2, 11, 20],
              fc: 19
            },
            {
              lngs: ['or'],
              nr: [2, 1],
              fc: 2
            },
            {
              lngs: ['ro'],
              nr: [1, 2, 20],
              fc: 20
            },
            {
              lngs: ['sl'],
              nr: [5, 1, 2, 3],
              fc: 21
            },
            {
              lngs: ['he'],
              nr: [1, 2, 20, 21],
              fc: 22
            }
          ];
          var _rulesPluralsTypes = {
            1: function _(n) {
              return Number(n > 1);
            },
            2: function _(n) {
              return Number(n != 1);
            },
            3: function _(n) {
              return 0;
            },
            4: function _(n) {
              return Number(
                n % 10 == 1 && n % 100 != 11
                  ? 0
                  : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2
              );
            },
            5: function _(n) {
              return Number(
                n === 0
                  ? 0
                  : n == 1
                    ? 1
                    : n == 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5
              );
            },
            6: function _(n) {
              return Number(n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2);
            },
            7: function _(n) {
              return Number(
                n == 1
                  ? 0
                  : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2
              );
            },
            8: function _(n) {
              return Number(n == 1 ? 0 : n == 2 ? 1 : n != 8 && n != 11 ? 2 : 3);
            },
            9: function _(n) {
              return Number(n >= 2);
            },
            10: function _(n) {
              return Number(n == 1 ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4);
            },
            11: function _(n) {
              return Number(
                n == 1 || n == 11 ? 0 : n == 2 || n == 12 ? 1 : n > 2 && n < 20 ? 2 : 3
              );
            },
            12: function _(n) {
              return Number(n % 10 != 1 || n % 100 == 11);
            },
            13: function _(n) {
              return Number(n !== 0);
            },
            14: function _(n) {
              return Number(n == 1 ? 0 : n == 2 ? 1 : n == 3 ? 2 : 3);
            },
            15: function _(n) {
              return Number(
                n % 10 == 1 && n % 100 != 11
                  ? 0
                  : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2
              );
            },
            16: function _(n) {
              return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n !== 0 ? 1 : 2);
            },
            17: function _(n) {
              return Number(n == 1 || n % 10 == 1 ? 0 : 1);
            },
            18: function _(n) {
              return Number(n == 0 ? 0 : n == 1 ? 1 : 2);
            },
            19: function _(n) {
              return Number(
                n == 1
                  ? 0
                  : n === 0 || (n % 100 > 1 && n % 100 < 11)
                    ? 1
                    : n % 100 > 10 && n % 100 < 20 ? 2 : 3
              );
            },
            20: function _(n) {
              return Number(n == 1 ? 0 : n === 0 || (n % 100 > 0 && n % 100 < 20) ? 1 : 2);
            },
            21: function _(n) {
              return Number(
                n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0
              );
            },
            22: function _(n) {
              return Number(
                n === 1 ? 0 : n === 2 ? 1 : (n < 0 || n > 10) && n % 10 == 0 ? 2 : 3
              );
            }
          };
          /* eslint-enable */

          function createRules() {
            var rules = {};
            sets.forEach(function(set) {
              set.lngs.forEach(function(l) {
                rules[l] = {
                  numbers: set.nr,
                  plurals: _rulesPluralsTypes[set.fc]
                };
              });
            });
            return rules;
          }

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

                _classCallCheck(this, PluralResolver);

                this.languageUtils = languageUtils;
                this.options = options;
                this.logger = baseLogger.create('pluralResolver');
                this.rules = createRules();
              }

              _createClass(PluralResolver, [
                {
                  key: 'addRule',
                  value: function addRule(lng, obj) {
                    this.rules[lng] = obj;
                  }
                },
                {
                  key: 'getRule',
                  value: function getRule(code) {
                    return (
                      this.rules[code] ||
                      this.rules[this.languageUtils.getLanguagePartFromCode(code)]
                    );
                  }
                },
                {
                  key: 'needsPlural',
                  value: function needsPlural(code) {
                    var rule = this.getRule(code);
                    return rule && rule.numbers.length > 1;
                  }
                },
                {
                  key: 'getPluralFormsOfKey',
                  value: function getPluralFormsOfKey(code, key) {
                    var _this = this;

                    var ret = [];
                    var rule = this.getRule(code);
                    if (!rule) return ret;
                    rule.numbers.forEach(function(n) {
                      var suffix = _this.getSuffix(code, n);

                      ret.push(''.concat(key).concat(suffix));
                    });
                    return ret;
                  }
                },
                {
                  key: 'getSuffix',
                  value: function getSuffix(code, count) {
                    var _this2 = this;

                    var rule = this.getRule(code);

                    if (rule) {
                      // if (rule.numbers.length === 1) return ''; // only singular
                      var idx = rule.noAbs
                        ? rule.plurals(count)
                        : rule.plurals(Math.abs(count));
                      var suffix = rule.numbers[idx]; // special treatment for lngs only having singular and plural

                      if (
                        this.options.simplifyPluralSuffix &&
                        rule.numbers.length === 2 &&
                        rule.numbers[0] === 1
                      ) {
                        if (suffix === 2) {
                          suffix = 'plural';
                        } else if (suffix === 1) {
                          suffix = '';
                        }
                      }

                      var returnSuffix = function returnSuffix() {
                        return _this2.options.prepend && suffix.toString()
                          ? _this2.options.prepend + suffix.toString()
                          : suffix.toString();
                      }; // COMPATIBILITY JSON
                      // v1

                      if (this.options.compatibilityJSON === 'v1') {
                        if (suffix === 1) return '';
                        if (typeof suffix === 'number')
                          return '_plural_'.concat(suffix.toString());
                        return returnSuffix();
                      } else if (
                        /* v2 */
                        this.options.compatibilityJSON === 'v2'
                      ) {
                        return returnSuffix();
                      } else if (
                        /* v3 - gettext index */
                        this.options.simplifyPluralSuffix &&
                        rule.numbers.length === 2 &&
                        rule.numbers[0] === 1
                      ) {
                        return returnSuffix();
                      }

                      return this.options.prepend && idx.toString()
                        ? this.options.prepend + idx.toString()
                        : idx.toString();
                    }

                    this.logger.warn('no plural rule found for: '.concat(code));
                    return '';
                  }
                }
              ]);

              return PluralResolver;
            })();

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

                _classCallCheck(this, Interpolator);

                this.logger = baseLogger.create('interpolator');
                this.options = options;

                this.format =
                  (options.interpolation && options.interpolation.format) ||
                  function(value) {
                    return value;
                  };

                this.init(options);
              }
              /* eslint no-param-reassign: 0 */

              _createClass(Interpolator, [
                {
                  key: 'init',
                  value: function init() {
                    var options =
                      arguments.length > 0 && arguments[0] !== undefined
                        ? arguments[0]
                        : {};
                    if (!options.interpolation)
                      options.interpolation = {
                        escapeValue: true
                      };
                    var iOpts = options.interpolation;
                    this.escape = iOpts.escape !== undefined ? iOpts.escape : escape;
                    this.escapeValue =
                      iOpts.escapeValue !== undefined ? iOpts.escapeValue : true;
                    this.useRawValueToEscape =
                      iOpts.useRawValueToEscape !== undefined
                        ? iOpts.useRawValueToEscape
                        : false;
                    this.prefix = iOpts.prefix
                      ? regexEscape(iOpts.prefix)
                      : iOpts.prefixEscaped || '{{';
                    this.suffix = iOpts.suffix
                      ? regexEscape(iOpts.suffix)
                      : iOpts.suffixEscaped || '}}';
                    this.formatSeparator = iOpts.formatSeparator
                      ? iOpts.formatSeparator
                      : iOpts.formatSeparator || ',';
                    this.unescapePrefix = iOpts.unescapeSuffix
                      ? ''
                      : iOpts.unescapePrefix || '-';
                    this.unescapeSuffix = this.unescapePrefix
                      ? ''
                      : iOpts.unescapeSuffix || '';
                    this.nestingPrefix = iOpts.nestingPrefix
                      ? regexEscape(iOpts.nestingPrefix)
                      : iOpts.nestingPrefixEscaped || regexEscape('$t(');
                    this.nestingSuffix = iOpts.nestingSuffix
                      ? regexEscape(iOpts.nestingSuffix)
                      : iOpts.nestingSuffixEscaped || regexEscape(')');
                    this.maxReplaces = iOpts.maxReplaces ? iOpts.maxReplaces : 1000; // the regexp

                    this.resetRegExp();
                  }
                },
                {
                  key: 'reset',
                  value: function reset() {
                    if (this.options) this.init(this.options);
                  }
                },
                {
                  key: 'resetRegExp',
                  value: function resetRegExp() {
                    // the regexp
                    var regexpStr = ''.concat(this.prefix, '(.+?)').concat(this.suffix);
                    this.regexp = new RegExp(regexpStr, 'g');
                    var regexpUnescapeStr = ''
                      .concat(this.prefix)
                      .concat(this.unescapePrefix, '(.+?)')
                      .concat(this.unescapeSuffix)
                      .concat(this.suffix);
                    this.regexpUnescape = new RegExp(regexpUnescapeStr, 'g');
                    var nestingRegexpStr = ''
                      .concat(this.nestingPrefix, '(.+?)')
                      .concat(this.nestingSuffix);
                    this.nestingRegexp = new RegExp(nestingRegexpStr, 'g');
                  }
                },
                {
                  key: 'interpolate',
                  value: function interpolate(str, data, lng, options) {
                    var _this = this;

                    var match;
                    var value;
                    var replaces;
                    var defaultData =
                      (this.options &&
                        this.options.interpolation &&
                        this.options.interpolation.defaultVariables) ||
                      {};

                    function regexSafe(val) {
                      return val.replace(/\$/g, '$$$$');
                    }

                    var handleFormat = function handleFormat(key) {
                      if (key.indexOf(_this.formatSeparator) < 0) {
                        return getPathWithDefaults(data, defaultData, key);
                      }

                      var p = key.split(_this.formatSeparator);
                      var k = p.shift().trim();
                      var f = p.join(_this.formatSeparator).trim();
                      return _this.format(
                        getPathWithDefaults(data, defaultData, k),
                        f,
                        lng
                      );
                    };

                    this.resetRegExp();
                    var missingInterpolationHandler =
                      (options && options.missingInterpolationHandler) ||
                      this.options.missingInterpolationHandler;
                    replaces = 0; // unescape if has unescapePrefix/Suffix

                    /* eslint no-cond-assign: 0 */

                    while ((match = this.regexpUnescape.exec(str))) {
                      value = handleFormat(match[1].trim());

                      if (value === undefined) {
                        if (typeof missingInterpolationHandler === 'function') {
                          var temp = missingInterpolationHandler(str, match, options);
                          value = typeof temp === 'string' ? temp : '';
                        } else {
                          this.logger.warn(
                            'missed to pass in variable '
                              .concat(match[1], ' for interpolating ')
                              .concat(str)
                          );
                          value = '';
                        }
                      } else if (typeof value !== 'string' && !this.useRawValueToEscape) {
                        value = makeString(value);
                      }

                      str = str.replace(match[0], regexSafe(value));
                      this.regexpUnescape.lastIndex = 0;
                      replaces++;

                      if (replaces >= this.maxReplaces) {
                        break;
                      }
                    }

                    replaces = 0; // regular escape on demand

                    while ((match = this.regexp.exec(str))) {
                      value = handleFormat(match[1].trim());

                      if (value === undefined) {
                        if (typeof missingInterpolationHandler === 'function') {
                          var _temp = missingInterpolationHandler(str, match, options);

                          value = typeof _temp === 'string' ? _temp : '';
                        } else {
                          this.logger.warn(
                            'missed to pass in variable '
                              .concat(match[1], ' for interpolating ')
                              .concat(str)
                          );
                          value = '';
                        }
                      } else if (typeof value !== 'string' && !this.useRawValueToEscape) {
                        value = makeString(value);
                      }

                      value = this.escapeValue
                        ? regexSafe(this.escape(value))
                        : regexSafe(value);
                      str = str.replace(match[0], value);
                      this.regexp.lastIndex = 0;
                      replaces++;

                      if (replaces >= this.maxReplaces) {
                        break;
                      }
                    }

                    return str;
                  }
                },
                {
                  key: 'nest',
                  value: function nest(str, fc) {
                    var options =
                      arguments.length > 2 && arguments[2] !== undefined
                        ? arguments[2]
                        : {};
                    var match;
                    var value;

                    var clonedOptions = _objectSpread({}, options);

                    clonedOptions.applyPostProcessor = false; // avoid post processing on nested lookup

                    delete clonedOptions.defaultValue; // assert we do not get a endless loop on interpolating defaultValue again and again
                    // if value is something like "myKey": "lorem $(anotherKey, { "count": {{aValueInOptions}} })"

                    function handleHasOptions(key, inheritedOptions) {
                      if (key.indexOf(',') < 0) return key;
                      var p = key.split(',');
                      key = p.shift();
                      var optionsString = p.join(',');
                      optionsString = this.interpolate(optionsString, clonedOptions);
                      optionsString = optionsString.replace(/'/g, '"');

                      try {
                        clonedOptions = JSON.parse(optionsString);
                        if (inheritedOptions)
                          clonedOptions = _objectSpread(
                            {},
                            inheritedOptions,
                            clonedOptions
                          );
                      } catch (e) {
                        this.logger.error(
                          'failed parsing options string in nesting for key '.concat(key),
                          e
                        );
                      } // assert we do not get a endless loop on interpolating defaultValue again and again

                      delete clonedOptions.defaultValue;
                      return key;
                    } // regular escape on demand

                    while ((match = this.nestingRegexp.exec(str))) {
                      value = fc(
                        handleHasOptions.call(this, match[1].trim(), clonedOptions),
                        clonedOptions
                      ); // is only the nesting key (key1 = '$(key2)') return the value without stringify

                      if (value && match[0] === str && typeof value !== 'string')
                        return value; // no string to include or empty

                      if (typeof value !== 'string') value = makeString(value);

                      if (!value) {
                        this.logger.warn(
                          'missed to resolve '.concat(match[1], ' for nesting ').concat(str)
                        );
                        value = '';
                      } // Nested keys should not be escaped by default #854
                      // value = this.escapeValue ? regexSafe(utils.escape(value)) : regexSafe(value);

                      str = str.replace(match[0], value);
                      this.regexp.lastIndex = 0;
                    }

                    return str;
                  }
                }
              ]);

              return Interpolator;
            })();

          function remove(arr, what) {
            var found = arr.indexOf(what);

            while (found !== -1) {
              arr.splice(found, 1);
              found = arr.indexOf(what);
            }
          }

          var Connector =
            /*#__PURE__*/
            (function(_EventEmitter) {
              _inherits(Connector, _EventEmitter);

              function Connector(backend, store, services) {
                var _this;

                var options =
                  arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};

                _classCallCheck(this, Connector);

                _this = _possibleConstructorReturn(
                  this,
                  _getPrototypeOf(Connector).call(this)
                );
                EventEmitter.call(_assertThisInitialized(_this)); // <=IE10 fix (unable to call parent constructor)

                _this.backend = backend;
                _this.store = store;
                _this.services = services;
                _this.languageUtils = services.languageUtils;
                _this.options = options;
                _this.logger = baseLogger.create('backendConnector');
                _this.state = {};
                _this.queue = [];

                if (_this.backend && _this.backend.init) {
                  _this.backend.init(services, options.backend, options);
                }

                return _this;
              }

              _createClass(Connector, [
                {
                  key: 'queueLoad',
                  value: function queueLoad(languages, namespaces, options, callback) {
                    var _this2 = this;

                    // find what needs to be loaded
                    var toLoad = [];
                    var pending = [];
                    var toLoadLanguages = [];
                    var toLoadNamespaces = [];
                    languages.forEach(function(lng) {
                      var hasAllNamespaces = true;
                      namespaces.forEach(function(ns) {
                        var name = ''.concat(lng, '|').concat(ns);

                        if (!options.reload && _this2.store.hasResourceBundle(lng, ns)) {
                          _this2.state[name] = 2; // loaded
                        } else if (_this2.state[name] < 0);
                        else if (_this2.state[name] === 1) {
                          if (pending.indexOf(name) < 0) pending.push(name);
                        } else {
                          _this2.state[name] = 1; // pending

                          hasAllNamespaces = false;
                          if (pending.indexOf(name) < 0) pending.push(name);
                          if (toLoad.indexOf(name) < 0) toLoad.push(name);
                          if (toLoadNamespaces.indexOf(ns) < 0) toLoadNamespaces.push(ns);
                        }
                      });
                      if (!hasAllNamespaces) toLoadLanguages.push(lng);
                    });

                    if (toLoad.length || pending.length) {
                      this.queue.push({
                        pending: pending,
                        loaded: {},
                        errors: [],
                        callback: callback
                      });
                    }

                    return {
                      toLoad: toLoad,
                      pending: pending,
                      toLoadLanguages: toLoadLanguages,
                      toLoadNamespaces: toLoadNamespaces
                    };
                  }
                },
                {
                  key: 'loaded',
                  value: function loaded(name, err, data) {
                    var _name$split = name.split('|'),
                      _name$split2 = _slicedToArray(_name$split, 2),
                      lng = _name$split2[0],
                      ns = _name$split2[1];

                    if (err) this.emit('failedLoading', lng, ns, err);

                    if (data) {
                      this.store.addResourceBundle(lng, ns, data);
                    } // set loaded

                    this.state[name] = err ? -1 : 2; // consolidated loading done in this run - only emit once for a loaded namespace

                    var loaded = {}; // callback if ready

                    this.queue.forEach(function(q) {
                      pushPath(q.loaded, [lng], ns);
                      remove(q.pending, name);
                      if (err) q.errors.push(err);

                      if (q.pending.length === 0 && !q.done) {
                        // only do once per loaded -> this.emit('loaded', q.loaded);
                        Object.keys(q.loaded).forEach(function(l) {
                          if (!loaded[l]) loaded[l] = [];

                          if (q.loaded[l].length) {
                            q.loaded[l].forEach(function(ns) {
                              if (loaded[l].indexOf(ns) < 0) loaded[l].push(ns);
                            });
                          }
                        });
                        /* eslint no-param-reassign: 0 */

                        q.done = true;

                        if (q.errors.length) {
                          q.callback(q.errors);
                        } else {
                          q.callback();
                        }
                      }
                    }); // emit consolidated loaded event

                    this.emit('loaded', loaded); // remove done load requests

                    this.queue = this.queue.filter(function(q) {
                      return !q.done;
                    });
                  }
                },
                {
                  key: 'read',
                  value: function read(lng, ns, fcName) {
                    var _this3 = this;

                    var tried =
                      arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
                    var wait =
                      arguments.length > 4 && arguments[4] !== undefined
                        ? arguments[4]
                        : 250;
                    var callback = arguments.length > 5 ? arguments[5] : undefined;
                    if (!lng.length) return callback(null, {}); // noting to load

                    return this.backend[fcName](lng, ns, function(err, data) {
                      if (
                        err &&
                        data &&
                        /* = retryFlag */
                        tried < 5
                      ) {
                        setTimeout(function() {
                          _this3.read.call(
                            _this3,
                            lng,
                            ns,
                            fcName,
                            tried + 1,
                            wait * 2,
                            callback
                          );
                        }, wait);
                        return;
                      }

                      callback(err, data);
                    });
                  }
                  /* eslint consistent-return: 0 */
                },
                {
                  key: 'prepareLoading',
                  value: function prepareLoading(languages, namespaces) {
                    var _this4 = this;

                    var options =
                      arguments.length > 2 && arguments[2] !== undefined
                        ? arguments[2]
                        : {};
                    var callback = arguments.length > 3 ? arguments[3] : undefined;

                    if (!this.backend) {
                      this.logger.warn(
                        'No backend was added via i18next.use. Will not load resources.'
                      );
                      return callback && callback();
                    }

                    if (typeof languages === 'string')
                      languages = this.languageUtils.toResolveHierarchy(languages);
                    if (typeof namespaces === 'string') namespaces = [namespaces];
                    var toLoad = this.queueLoad(languages, namespaces, options, callback);

                    if (!toLoad.toLoad.length) {
                      if (!toLoad.pending.length) callback(); // nothing to load and no pendings...callback now

                      return null; // pendings will trigger callback
                    }

                    toLoad.toLoad.forEach(function(name) {
                      _this4.loadOne(name);
                    });
                  }
                },
                {
                  key: 'load',
                  value: function load(languages, namespaces, callback) {
                    this.prepareLoading(languages, namespaces, {}, callback);
                  }
                },
                {
                  key: 'reload',
                  value: function reload(languages, namespaces, callback) {
                    this.prepareLoading(
                      languages,
                      namespaces,
                      {
                        reload: true
                      },
                      callback
                    );
                  }
                },
                {
                  key: 'loadOne',
                  value: function loadOne(name) {
                    var _this5 = this;

                    var prefix =
                      arguments.length > 1 && arguments[1] !== undefined
                        ? arguments[1]
                        : '';

                    var _name$split3 = name.split('|'),
                      _name$split4 = _slicedToArray(_name$split3, 2),
                      lng = _name$split4[0],
                      ns = _name$split4[1];

                    this.read(lng, ns, 'read', null, null, function(err, data) {
                      if (err)
                        _this5.logger.warn(
                          ''
                            .concat(prefix, 'loading namespace ')
                            .concat(ns, ' for language ')
                            .concat(lng, ' failed'),
                          err
                        );
                      if (!err && data)
                        _this5.logger.log(
                          ''
                            .concat(prefix, 'loaded namespace ')
                            .concat(ns, ' for language ')
                            .concat(lng),
                          data
                        );

                      _this5.loaded(name, err, data);
                    });
                  }
                },
                {
                  key: 'saveMissing',
                  value: function saveMissing(
                    languages,
                    namespace,
                    key,
                    fallbackValue,
                    isUpdate
                  ) {
                    var options =
                      arguments.length > 5 && arguments[5] !== undefined
                        ? arguments[5]
                        : {};

                    if (
                      this.services.utils &&
                      this.services.utils.hasLoadedNamespace &&
                      !this.services.utils.hasLoadedNamespace(namespace)
                    ) {
                      this.logger.warn(
                        'did not save key "'
                          .concat(key, '" for namespace "')
                          .concat(namespace, '" as the namespace was not yet loaded'),
                        'This means something IS WRONG in your application setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!'
                      );
                      return;
                    } // ignore non valid keys

                    if (key === undefined || key === null || key === '') return;

                    if (this.backend && this.backend.create) {
                      this.backend.create(
                        languages,
                        namespace,
                        key,
                        fallbackValue,
                        null,
                        /* unused callback */
                        _objectSpread({}, options, {
                          isUpdate: isUpdate
                        })
                      );
                    } // write to store to avoid resending

                    if (!languages || !languages[0]) return;
                    this.store.addResource(languages[0], namespace, key, fallbackValue);
                  }
                }
              ]);

              return Connector;
            })(EventEmitter);

          function get() {
            return {
              debug: false,
              initImmediate: true,
              ns: ['translation'],
              defaultNS: ['translation'],
              fallbackLng: ['dev'],
              fallbackNS: false,
              // string or array of namespaces
              whitelist: false,
              // array with whitelisted languages
              nonExplicitWhitelist: false,
              load: 'all',
              // | currentOnly | languageOnly
              preload: false,
              // array with preload languages
              simplifyPluralSuffix: true,
              keySeparator: '.',
              nsSeparator: ':',
              pluralSeparator: '_',
              contextSeparator: '_',
              partialBundledLanguages: false,
              // allow bundling certain languages that are not remotely fetched
              saveMissing: false,
              // enable to send missing values
              updateMissing: false,
              // enable to update default values if different from translated value (only useful on initial development, or when keeping code as source of truth)
              saveMissingTo: 'fallback',
              // 'current' || 'all'
              saveMissingPlurals: true,
              // will save all forms not only singular key
              missingKeyHandler: false,
              // function(lng, ns, key, fallbackValue) -> override if prefer on handling
              missingInterpolationHandler: false,
              // function(str, match)
              postProcess: false,
              // string or array of postProcessor names
              postProcessPassResolved: false,
              // pass resolved object into 'options.i18nResolved' for postprocessor
              returnNull: true,
              // allows null value as valid translation
              returnEmptyString: true,
              // allows empty string value as valid translation
              returnObjects: false,
              joinArrays: false,
              // or string to join array
              returnedObjectHandler: false,
              // function(key, value, options) triggered if key returns object but returnObjects is set to false
              parseMissingKeyHandler: false,
              // function(key) parsed a key that was not found in t() before returning
              appendNamespaceToMissingKey: false,
              appendNamespaceToCIMode: false,
              overloadTranslationOptionHandler: function handle(args) {
                var ret = {};
                if (_typeof(args[1]) === 'object') ret = args[1];
                if (typeof args[1] === 'string') ret.defaultValue = args[1];
                if (typeof args[2] === 'string') ret.tDescription = args[2];

                if (_typeof(args[2]) === 'object' || _typeof(args[3]) === 'object') {
                  var options = args[3] || args[2];
                  Object.keys(options).forEach(function(key) {
                    ret[key] = options[key];
                  });
                }

                return ret;
              },
              interpolation: {
                escapeValue: true,
                format: function format(value, _format, lng) {
                  return value;
                },
                prefix: '{{',
                suffix: '}}',
                formatSeparator: ',',
                // prefixEscaped: '{{',
                // suffixEscaped: '}}',
                // unescapeSuffix: '',
                unescapePrefix: '-',
                nestingPrefix: '$t(',
                nestingSuffix: ')',
                // nestingPrefixEscaped: '$t(',
                // nestingSuffixEscaped: ')',
                // defaultVariables: undefined // object that can have values to interpolate on - extends passed in interpolation data
                maxReplaces: 1000 // max replaces to prevent endless loop
              }
            };
          }
          /* eslint no-param-reassign: 0 */

          function transformOptions(options) {
            // create namespace object if namespace is passed in as string
            if (typeof options.ns === 'string') options.ns = [options.ns];
            if (typeof options.fallbackLng === 'string')
              options.fallbackLng = [options.fallbackLng];
            if (typeof options.fallbackNS === 'string')
              options.fallbackNS = [options.fallbackNS]; // extend whitelist with cimode

            if (options.whitelist && options.whitelist.indexOf('cimode') < 0) {
              options.whitelist = options.whitelist.concat(['cimode']);
            }

            return options;
          }

          function noop() {}

          var I18n =
            /*#__PURE__*/
            (function(_EventEmitter) {
              _inherits(I18n, _EventEmitter);

              function I18n() {
                var _this;

                var options =
                  arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
                var callback = arguments.length > 1 ? arguments[1] : undefined;

                _classCallCheck(this, I18n);

                _this = _possibleConstructorReturn(this, _getPrototypeOf(I18n).call(this));
                EventEmitter.call(_assertThisInitialized(_this)); // <=IE10 fix (unable to call parent constructor)

                _this.options = transformOptions(options);
                _this.services = {};
                _this.logger = baseLogger;
                _this.modules = {
                  external: []
                };

                if (callback && !_this.isInitialized && !options.isClone) {
                  // https://github.com/i18next/i18next/issues/879
                  if (!_this.options.initImmediate) {
                    _this.init(options, callback);

                    return _possibleConstructorReturn(_this, _assertThisInitialized(_this));
                  }

                  setTimeout(function() {
                    _this.init(options, callback);
                  }, 0);
                }

                return _this;
              }

              _createClass(I18n, [
                {
                  key: 'init',
                  value: function init() {
                    var _this2 = this;

                    var options =
                      arguments.length > 0 && arguments[0] !== undefined
                        ? arguments[0]
                        : {};
                    var callback = arguments.length > 1 ? arguments[1] : undefined;

                    if (typeof options === 'function') {
                      callback = options;
                      options = {};
                    }

                    this.options = _objectSpread(
                      {},
                      get(),
                      this.options,
                      transformOptions(options)
                    );
                    this.format = this.options.interpolation.format;
                    if (!callback) callback = noop;

                    function createClassOnDemand(ClassOrObject) {
                      if (!ClassOrObject) return null;
                      if (typeof ClassOrObject === 'function') return new ClassOrObject();
                      return ClassOrObject;
                    } // init services

                    if (!this.options.isClone) {
                      if (this.modules.logger) {
                        baseLogger.init(
                          createClassOnDemand(this.modules.logger),
                          this.options
                        );
                      } else {
                        baseLogger.init(null, this.options);
                      }

                      var lu = new LanguageUtil(this.options);
                      this.store = new ResourceStore(this.options.resources, this.options);
                      var s = this.services;
                      s.logger = baseLogger;
                      s.resourceStore = this.store;
                      s.languageUtils = lu;
                      s.pluralResolver = new PluralResolver(lu, {
                        prepend: this.options.pluralSeparator,
                        compatibilityJSON: this.options.compatibilityJSON,
                        simplifyPluralSuffix: this.options.simplifyPluralSuffix
                      });
                      s.interpolator = new Interpolator(this.options);
                      s.utils = {
                        hasLoadedNamespace: this.hasLoadedNamespace.bind(this)
                      };
                      s.backendConnector = new Connector(
                        createClassOnDemand(this.modules.backend),
                        s.resourceStore,
                        s,
                        this.options
                      ); // pipe events from backendConnector

                      s.backendConnector.on('*', function(event) {
                        for (
                          var _len = arguments.length,
                            args = new Array(_len > 1 ? _len - 1 : 0),
                            _key = 1;
                          _key < _len;
                          _key++
                        ) {
                          args[_key - 1] = arguments[_key];
                        }

                        _this2.emit.apply(_this2, [event].concat(args));
                      });

                      if (this.modules.languageDetector) {
                        s.languageDetector = createClassOnDemand(
                          this.modules.languageDetector
                        );
                        s.languageDetector.init(s, this.options.detection, this.options);
                      }

                      if (this.modules.i18nFormat) {
                        s.i18nFormat = createClassOnDemand(this.modules.i18nFormat);
                        if (s.i18nFormat.init) s.i18nFormat.init(this);
                      }

                      this.translator = new Translator(this.services, this.options); // pipe events from translator

                      this.translator.on('*', function(event) {
                        for (
                          var _len2 = arguments.length,
                            args = new Array(_len2 > 1 ? _len2 - 1 : 0),
                            _key2 = 1;
                          _key2 < _len2;
                          _key2++
                        ) {
                          args[_key2 - 1] = arguments[_key2];
                        }

                        _this2.emit.apply(_this2, [event].concat(args));
                      });
                      this.modules.external.forEach(function(m) {
                        if (m.init) m.init(_this2);
                      });
                    } // append api

                    var storeApi = [
                      'getResource',
                      'addResource',
                      'addResources',
                      'addResourceBundle',
                      'removeResourceBundle',
                      'hasResourceBundle',
                      'getResourceBundle',
                      'getDataByLanguage'
                    ];
                    storeApi.forEach(function(fcName) {
                      _this2[fcName] = function() {
                        var _this2$store;

                        return (_this2$store = _this2.store)[fcName].apply(
                          _this2$store,
                          arguments
                        );
                      };
                    });
                    var deferred = defer();

                    var load = function load() {
                      _this2.changeLanguage(_this2.options.lng, function(err, t) {
                        _this2.isInitialized = true;

                        _this2.logger.log('initialized', _this2.options);

                        _this2.emit('initialized', _this2.options);

                        deferred.resolve(t); // not rejecting on err (as err is only a loading translation failed warning)

                        callback(err, t);
                      });
                    };

                    if (this.options.resources || !this.options.initImmediate) {
                      load();
                    } else {
                      setTimeout(load, 0);
                    }

                    return deferred;
                  }
                  /* eslint consistent-return: 0 */
                },
                {
                  key: 'loadResources',
                  value: function loadResources(language) {
                    var _this3 = this;

                    var callback =
                      arguments.length > 1 && arguments[1] !== undefined
                        ? arguments[1]
                        : noop;
                    var usedCallback = callback;
                    var usedLng = typeof language === 'string' ? language : this.language;
                    if (typeof language === 'function') usedCallback = language;

                    if (!this.options.resources || this.options.partialBundledLanguages) {
                      if (usedLng && usedLng.toLowerCase() === 'cimode')
                        return usedCallback(); // avoid loading resources for cimode

                      var toLoad = [];

                      var append = function append(lng) {
                        if (!lng) return;

                        var lngs = _this3.services.languageUtils.toResolveHierarchy(lng);

                        lngs.forEach(function(l) {
                          if (toLoad.indexOf(l) < 0) toLoad.push(l);
                        });
                      };

                      if (!usedLng) {
                        // at least load fallbacks in this case
                        var fallbacks = this.services.languageUtils.getFallbackCodes(
                          this.options.fallbackLng
                        );
                        fallbacks.forEach(function(l) {
                          return append(l);
                        });
                      } else {
                        append(usedLng);
                      }

                      if (this.options.preload) {
                        this.options.preload.forEach(function(l) {
                          return append(l);
                        });
                      }

                      this.services.backendConnector.load(
                        toLoad,
                        this.options.ns,
                        usedCallback
                      );
                    } else {
                      usedCallback(null);
                    }
                  }
                },
                {
                  key: 'reloadResources',
                  value: function reloadResources(lngs, ns, callback) {
                    var deferred = defer();
                    if (!lngs) lngs = this.languages;
                    if (!ns) ns = this.options.ns;
                    if (!callback) callback = noop;
                    this.services.backendConnector.reload(lngs, ns, function(err) {
                      deferred.resolve(); // not rejecting on err (as err is only a loading translation failed warning)

                      callback(err);
                    });
                    return deferred;
                  }
                },
                {
                  key: 'use',
                  value: function use(module) {
                    if (module.type === 'backend') {
                      this.modules.backend = module;
                    }

                    if (
                      module.type === 'logger' ||
                      (module.log && module.warn && module.error)
                    ) {
                      this.modules.logger = module;
                    }

                    if (module.type === 'languageDetector') {
                      this.modules.languageDetector = module;
                    }

                    if (module.type === 'i18nFormat') {
                      this.modules.i18nFormat = module;
                    }

                    if (module.type === 'postProcessor') {
                      postProcessor.addPostProcessor(module);
                    }

                    if (module.type === '3rdParty') {
                      this.modules.external.push(module);
                    }

                    return this;
                  }
                },
                {
                  key: 'changeLanguage',
                  value: function changeLanguage(lng, callback) {
                    var _this4 = this;

                    this.isLanguageChangingTo = lng;
                    var deferred = defer();
                    this.emit('languageChanging', lng);

                    var done = function done(err, l) {
                      if (l) {
                        _this4.language = l;
                        _this4.languages = _this4.services.languageUtils.toResolveHierarchy(
                          l
                        );

                        _this4.translator.changeLanguage(l);

                        _this4.isLanguageChangingTo = undefined;

                        _this4.emit('languageChanged', l);

                        _this4.logger.log('languageChanged', l);
                      } else {
                        _this4.isLanguageChangingTo = undefined;
                      }

                      deferred.resolve(function() {
                        return _this4.t.apply(_this4, arguments);
                      });
                      if (callback)
                        callback(err, function() {
                          return _this4.t.apply(_this4, arguments);
                        });
                    };

                    var setLng = function setLng(l) {
                      if (l) {
                        if (!_this4.language) {
                          _this4.language = l;
                          _this4.languages = _this4.services.languageUtils.toResolveHierarchy(
                            l
                          );
                        }

                        if (!_this4.translator.language)
                          _this4.translator.changeLanguage(l);
                        if (_this4.services.languageDetector)
                          _this4.services.languageDetector.cacheUserLanguage(l);
                      }

                      _this4.loadResources(l, function(err) {
                        done(err, l);
                      });
                    };

                    if (
                      !lng &&
                      this.services.languageDetector &&
                      !this.services.languageDetector.async
                    ) {
                      setLng(this.services.languageDetector.detect());
                    } else if (
                      !lng &&
                      this.services.languageDetector &&
                      this.services.languageDetector.async
                    ) {
                      this.services.languageDetector.detect(setLng);
                    } else {
                      setLng(lng);
                    }

                    return deferred;
                  }
                },
                {
                  key: 'getFixedT',
                  value: function getFixedT(lng, ns) {
                    var _this5 = this;

                    var fixedT = function fixedT(key, opts) {
                      var options;

                      if (_typeof(opts) !== 'object') {
                        for (
                          var _len3 = arguments.length,
                            rest = new Array(_len3 > 2 ? _len3 - 2 : 0),
                            _key3 = 2;
                          _key3 < _len3;
                          _key3++
                        ) {
                          rest[_key3 - 2] = arguments[_key3];
                        }

                        options = _this5.options.overloadTranslationOptionHandler(
                          [key, opts].concat(rest)
                        );
                      } else {
                        options = _objectSpread({}, opts);
                      }

                      options.lng = options.lng || fixedT.lng;
                      options.lngs = options.lngs || fixedT.lngs;
                      options.ns = options.ns || fixedT.ns;
                      return _this5.t(key, options);
                    };

                    if (typeof lng === 'string') {
                      fixedT.lng = lng;
                    } else {
                      fixedT.lngs = lng;
                    }

                    fixedT.ns = ns;
                    return fixedT;
                  }
                },
                {
                  key: 't',
                  value: function t() {
                    var _this$translator;

                    return (
                      this.translator &&
                      (_this$translator = this.translator).translate.apply(
                        _this$translator,
                        arguments
                      )
                    );
                  }
                },
                {
                  key: 'exists',
                  value: function exists() {
                    var _this$translator2;

                    return (
                      this.translator &&
                      (_this$translator2 = this.translator).exists.apply(
                        _this$translator2,
                        arguments
                      )
                    );
                  }
                },
                {
                  key: 'setDefaultNamespace',
                  value: function setDefaultNamespace(ns) {
                    this.options.defaultNS = ns;
                  }
                },
                {
                  key: 'hasLoadedNamespace',
                  value: function hasLoadedNamespace(ns) {
                    var _this6 = this;

                    if (!this.isInitialized) {
                      this.logger.warn(
                        'hasLoadedNamespace: i18next was not initialized',
                        this.languages
                      );
                      return false;
                    }

                    if (!this.languages || !this.languages.length) {
                      this.logger.warn(
                        'hasLoadedNamespace: i18n.languages were undefined or empty',
                        this.languages
                      );
                      return false;
                    }

                    var lng = this.languages[0];
                    var fallbackLng = this.options ? this.options.fallbackLng : false;
                    var lastLng = this.languages[this.languages.length - 1]; // we're in cimode so this shall pass

                    if (lng.toLowerCase() === 'cimode') return true;

                    var loadNotPending = function loadNotPending(l, n) {
                      var loadState =
                        _this6.services.backendConnector.state[''.concat(l, '|').concat(n)];

                      return loadState === -1 || loadState === 2;
                    }; // loaded -> SUCCESS

                    if (this.hasResourceBundle(lng, ns)) return true; // were not loading at all -> SEMI SUCCESS

                    if (!this.services.backendConnector.backend) return true; // failed loading ns - but at least fallback is not pending -> SEMI SUCCESS

                    if (
                      loadNotPending(lng, ns) &&
                      (!fallbackLng || loadNotPending(lastLng, ns))
                    )
                      return true;
                    return false;
                  }
                },
                {
                  key: 'loadNamespaces',
                  value: function loadNamespaces(ns, callback) {
                    var _this7 = this;

                    var deferred = defer();

                    if (!this.options.ns) {
                      callback && callback();
                      return Promise.resolve();
                    }

                    if (typeof ns === 'string') ns = [ns];
                    ns.forEach(function(n) {
                      if (_this7.options.ns.indexOf(n) < 0) _this7.options.ns.push(n);
                    });
                    this.loadResources(function(err) {
                      deferred.resolve();
                      if (callback) callback(err);
                    });
                    return deferred;
                  }
                },
                {
                  key: 'loadLanguages',
                  value: function loadLanguages(lngs, callback) {
                    var deferred = defer();
                    if (typeof lngs === 'string') lngs = [lngs];
                    var preloaded = this.options.preload || [];
                    var newLngs = lngs.filter(function(lng) {
                      return preloaded.indexOf(lng) < 0;
                    }); // Exit early if all given languages are already preloaded

                    if (!newLngs.length) {
                      if (callback) callback();
                      return Promise.resolve();
                    }

                    this.options.preload = preloaded.concat(newLngs);
                    this.loadResources(function(err) {
                      deferred.resolve();
                      if (callback) callback(err);
                    });
                    return deferred;
                  }
                },
                {
                  key: 'dir',
                  value: function dir(lng) {
                    if (!lng)
                      lng =
                        this.languages && this.languages.length > 0
                          ? this.languages[0]
                          : this.language;
                    if (!lng) return 'rtl';
                    var rtlLngs = [
                      'ar',
                      'shu',
                      'sqr',
                      'ssh',
                      'xaa',
                      'yhd',
                      'yud',
                      'aao',
                      'abh',
                      'abv',
                      'acm',
                      'acq',
                      'acw',
                      'acx',
                      'acy',
                      'adf',
                      'ads',
                      'aeb',
                      'aec',
                      'afb',
                      'ajp',
                      'apc',
                      'apd',
                      'arb',
                      'arq',
                      'ars',
                      'ary',
                      'arz',
                      'auz',
                      'avl',
                      'ayh',
                      'ayl',
                      'ayn',
                      'ayp',
                      'bbz',
                      'pga',
                      'he',
                      'iw',
                      'ps',
                      'pbt',
                      'pbu',
                      'pst',
                      'prp',
                      'prd',
                      'ur',
                      'ydd',
                      'yds',
                      'yih',
                      'ji',
                      'yi',
                      'hbo',
                      'men',
                      'xmn',
                      'fa',
                      'jpr',
                      'peo',
                      'pes',
                      'prs',
                      'dv',
                      'sam'
                    ];
                    return rtlLngs.indexOf(
                      this.services.languageUtils.getLanguagePartFromCode(lng)
                    ) >= 0
                      ? 'rtl'
                      : 'ltr';
                  }
                  /* eslint class-methods-use-this: 0 */
                },
                {
                  key: 'createInstance',
                  value: function createInstance() {
                    var options =
                      arguments.length > 0 && arguments[0] !== undefined
                        ? arguments[0]
                        : {};
                    var callback = arguments.length > 1 ? arguments[1] : undefined;
                    return new I18n(options, callback);
                  }
                },
                {
                  key: 'cloneInstance',
                  value: function cloneInstance() {
                    var _this8 = this;

                    var options =
                      arguments.length > 0 && arguments[0] !== undefined
                        ? arguments[0]
                        : {};
                    var callback =
                      arguments.length > 1 && arguments[1] !== undefined
                        ? arguments[1]
                        : noop;

                    var mergedOptions = _objectSpread({}, this.options, options, {
                      isClone: true
                    });

                    var clone = new I18n(mergedOptions);
                    var membersToCopy = ['store', 'services', 'language'];
                    membersToCopy.forEach(function(m) {
                      clone[m] = _this8[m];
                    });
                    clone.translator = new Translator(clone.services, clone.options);
                    clone.translator.on('*', function(event) {
                      for (
                        var _len4 = arguments.length,
                          args = new Array(_len4 > 1 ? _len4 - 1 : 0),
                          _key4 = 1;
                        _key4 < _len4;
                        _key4++
                      ) {
                        args[_key4 - 1] = arguments[_key4];
                      }

                      clone.emit.apply(clone, [event].concat(args));
                    });
                    clone.init(mergedOptions, callback);
                    clone.translator.options = clone.options; // sync options

                    return clone;
                  }
                }
              ]);

              return I18n;
            })(EventEmitter);

          var i18next = new I18n();

          module.exports = i18next;
        },
        {
          '@babel/runtime/helpers/assertThisInitialized': 4,
          '@babel/runtime/helpers/classCallCheck': 5,
          '@babel/runtime/helpers/createClass': 6,
          '@babel/runtime/helpers/getPrototypeOf': 8,
          '@babel/runtime/helpers/inherits': 9,
          '@babel/runtime/helpers/objectSpread': 14,
          '@babel/runtime/helpers/possibleConstructorReturn': 15,
          '@babel/runtime/helpers/slicedToArray': 17,
          '@babel/runtime/helpers/toConsumableArray': 18,
          '@babel/runtime/helpers/typeof': 19
        }
      ],
      255: [
        function(_dereq_, module, exports) {
          exports.read = function(buffer, offset, isLE, mLen, nBytes) {
            var e, m;
            var eLen = nBytes * 8 - mLen - 1;
            var eMax = (1 << eLen) - 1;
            var eBias = eMax >> 1;
            var nBits = -7;
            var i = isLE ? nBytes - 1 : 0;
            var d = isLE ? -1 : 1;
            var s = buffer[offset + i];

            i += d;

            e = s & ((1 << -nBits) - 1);
            s >>= -nBits;
            nBits += eLen;
            for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}

            m = e & ((1 << -nBits) - 1);
            e >>= -nBits;
            nBits += mLen;
            for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}

            if (e === 0) {
              e = 1 - eBias;
            } else if (e === eMax) {
              return m ? NaN : (s ? -1 : 1) * Infinity;
            } else {
              m = m + Math.pow(2, mLen);
              e = e - eBias;
            }
            return (s ? -1 : 1) * m * Math.pow(2, e - mLen);
          };

          exports.write = function(buffer, value, offset, isLE, mLen, nBytes) {
            var e, m, c;
            var eLen = nBytes * 8 - mLen - 1;
            var eMax = (1 << eLen) - 1;
            var eBias = eMax >> 1;
            var rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0;
            var i = isLE ? 0 : nBytes - 1;
            var d = isLE ? 1 : -1;
            var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;

            value = Math.abs(value);

            if (isNaN(value) || value === Infinity) {
              m = isNaN(value) ? 1 : 0;
              e = eMax;
            } else {
              e = Math.floor(Math.log(value) / Math.LN2);
              if (value * (c = Math.pow(2, -e)) < 1) {
                e--;
                c *= 2;
              }
              if (e + eBias >= 1) {
                value += rt / c;
              } else {
                value += rt * Math.pow(2, 1 - eBias);
              }
              if (value * c >= 2) {
                e++;
                c /= 2;
              }

              if (e + eBias >= eMax) {
                m = 0;
                e = eMax;
              } else if (e + eBias >= 1) {
                m = (value * c - 1) * Math.pow(2, mLen);
                e = e + eBias;
              } else {
                m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);
                e = 0;
              }
            }

            for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}

            e = (e << mLen) | m;
            eLen += mLen;
            for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}

            buffer[offset + i - d] |= s * 128;
          };
        },
        {}
      ],
      256: [
        function(_dereq_, module, exports) {
          /*

 Copyright 2000, Silicon Graphics, Inc. All Rights Reserved.
 Copyright 2015, Google Inc. All Rights Reserved.

 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to
 deal in the Software without restriction, including without limitation the
 rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 sell copies of the Software, and to permit persons to whom the Software is
 furnished to do so, subject to the following conditions:

 The above copyright notice including the dates of first publication and
 either this permission notice or a reference to http://oss.sgi.com/projects/FreeB/
 shall be included in all copies or substantial portions of the Software.

 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
 SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
 IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

 Original Code. The Original Code is: OpenGL Sample Implementation,
 Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
 Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
 Copyright in any portions created by third parties is as indicated
 elsewhere herein. All Rights Reserved.
*/
          'use strict';
          var n;
          function t(a, b) {
            return a.b === b.b && a.a === b.a;
          }
          function u(a, b) {
            return a.b < b.b || (a.b === b.b && a.a <= b.a);
          }
          function v(a, b, c) {
            var d = b.b - a.b,
              e = c.b - b.b;
            return 0 < d + e
              ? d < e
                ? b.a - a.a + d / (d + e) * (a.a - c.a)
                : b.a - c.a + e / (d + e) * (c.a - a.a)
              : 0;
          }
          function x(a, b, c) {
            var d = b.b - a.b,
              e = c.b - b.b;
            return 0 < d + e ? (b.a - c.a) * d + (b.a - a.a) * e : 0;
          }
          function z(a, b) {
            return a.a < b.a || (a.a === b.a && a.b <= b.b);
          }
          function aa(a, b, c) {
            var d = b.a - a.a,
              e = c.a - b.a;
            return 0 < d + e
              ? d < e
                ? b.b - a.b + d / (d + e) * (a.b - c.b)
                : b.b - c.b + e / (d + e) * (c.b - a.b)
              : 0;
          }
          function ba(a, b, c) {
            var d = b.a - a.a,
              e = c.a - b.a;
            return 0 < d + e ? (b.b - c.b) * d + (b.b - a.b) * e : 0;
          }
          function ca(a) {
            return u(a.b.a, a.a);
          }
          function da(a) {
            return u(a.a, a.b.a);
          }
          function A(a, b, c, d) {
            a = 0 > a ? 0 : a;
            c = 0 > c ? 0 : c;
            return a <= c
              ? 0 === c ? (b + d) / 2 : b + a / (a + c) * (d - b)
              : d + c / (a + c) * (b - d);
          }
          function ea(a) {
            var b = B(a.b);
            C(b, a.c);
            C(b.b, a.c);
            D(b, a.a);
            return b;
          }
          function E(a, b) {
            var c = !1,
              d = !1;
            a !== b &&
              (b.a !== a.a && ((d = !0), F(b.a, a.a)),
              b.d !== a.d && ((c = !0), G(b.d, a.d)),
              H(b, a),
              d || (C(b, a.a), (a.a.c = a)),
              c || (D(b, a.d), (a.d.a = a)));
          }
          function I(a) {
            var b = a.b,
              c = !1;
            a.d !== a.b.d && ((c = !0), G(a.d, a.b.d));
            a.c === a
              ? F(a.a, null)
              : ((a.b.d.a = J(a)), (a.a.c = a.c), H(a, J(a)), c || D(a, a.d));
            b.c === b
              ? (F(b.a, null), G(b.d, null))
              : ((a.d.a = J(b)), (b.a.c = b.c), H(b, J(b)));
            fa(a);
          }
          function K(a) {
            var b = B(a),
              c = b.b;
            H(b, a.e);
            b.a = a.b.a;
            C(c, b.a);
            b.d = c.d = a.d;
            b = b.b;
            H(a.b, J(a.b));
            H(a.b, b);
            a.b.a = b.a;
            b.b.a.c = b.b;
            b.b.d = a.b.d;
            b.f = a.f;
            b.b.f = a.b.f;
            return b;
          }
          function L(a, b) {
            var c = !1,
              d = B(a),
              e = d.b;
            b.d !== a.d && ((c = !0), G(b.d, a.d));
            H(d, a.e);
            H(e, b);
            d.a = a.b.a;
            e.a = b.a;
            d.d = e.d = a.d;
            a.d.a = e;
            c || D(d, a.d);
            return d;
          }
          function B(a) {
            var b = new M(),
              c = new M(),
              d = a.b.h;
            c.h = d;
            d.b.h = b;
            b.h = a;
            a.b.h = c;
            b.b = c;
            b.c = b;
            b.e = c;
            c.b = b;
            c.c = c;
            return (c.e = b);
          }
          function H(a, b) {
            var c = a.c,
              d = b.c;
            c.b.e = b;
            d.b.e = a;
            a.c = d;
            b.c = c;
          }
          function C(a, b) {
            var c = b.f,
              d = new N(b, c);
            c.e = d;
            b.f = d;
            c = d.c = a;
            do (c.a = d), (c = c.c);
            while (c !== a);
          }
          function D(a, b) {
            var c = b.d,
              d = new ga(b, c);
            c.b = d;
            b.d = d;
            d.a = a;
            d.c = b.c;
            c = a;
            do (c.d = d), (c = c.e);
            while (c !== a);
          }
          function fa(a) {
            var b = a.h;
            a = a.b.h;
            b.b.h = a;
            a.b.h = b;
          }
          function F(a, b) {
            var c = a.c,
              d = c;
            do (d.a = b), (d = d.c);
            while (d !== c);
            c = a.f;
            d = a.e;
            d.f = c;
            c.e = d;
          }
          function G(a, b) {
            var c = a.a,
              d = c;
            do (d.d = b), (d = d.e);
            while (d !== c);
            c = a.d;
            d = a.b;
            d.d = c;
            c.b = d;
          }
          function ha(a) {
            var b = 0;
            Math.abs(a[1]) > Math.abs(a[0]) && (b = 1);
            Math.abs(a[2]) > Math.abs(a[b]) && (b = 2);
            return b;
          }
          var O = 4 * 1e150;
          function P(a, b) {
            a.f += b.f;
            a.b.f += b.b.f;
          }
          function ia(a, b, c) {
            a = a.a;
            b = b.a;
            c = c.a;
            if (b.b.a === a)
              return c.b.a === a
                ? u(b.a, c.a) ? 0 >= x(c.b.a, b.a, c.a) : 0 <= x(b.b.a, c.a, b.a)
                : 0 >= x(c.b.a, a, c.a);
            if (c.b.a === a) return 0 <= x(b.b.a, a, b.a);
            b = v(b.b.a, a, b.a);
            a = v(c.b.a, a, c.a);
            return b >= a;
          }
          function Q(a) {
            a.a.i = null;
            var b = a.e;
            b.a.c = b.c;
            b.c.a = b.a;
            a.e = null;
          }
          function ja(a, b) {
            I(a.a);
            a.c = !1;
            a.a = b;
            b.i = a;
          }
          function ka(a) {
            var b = a.a.a;
            do a = R(a);
            while (a.a.a === b);
            a.c && ((b = L(S(a).a.b, a.a.e)), ja(a, b), (a = R(a)));
            return a;
          }
          function la(a, b, c) {
            var d = new ma();
            d.a = c;
            d.e = na(a.f, b.e, d);
            return (c.i = d);
          }
          function oa(a, b) {
            switch (a.s) {
              case 100130:
                return 0 !== (b & 1);
              case 100131:
                return 0 !== b;
              case 100132:
                return 0 < b;
              case 100133:
                return 0 > b;
              case 100134:
                return 2 <= b || -2 >= b;
            }
            return !1;
          }
          function pa(a) {
            var b = a.a,
              c = b.d;
            c.c = a.d;
            c.a = b;
            Q(a);
          }
          function T(a, b, c) {
            a = b;
            for (b = b.a; a !== c; ) {
              a.c = !1;
              var d = S(a),
                e = d.a;
              if (e.a !== b.a) {
                if (!d.c) {
                  pa(a);
                  break;
                }
                e = L(b.c.b, e.b);
                ja(d, e);
              }
              b.c !== e && (E(J(e), e), E(b, e));
              pa(a);
              b = d.a;
              a = d;
            }
            return b;
          }
          function U(a, b, c, d, e, f) {
            var g = !0;
            do la(a, b, c.b), (c = c.c);
            while (c !== d);
            for (null === e && (e = S(b).a.b.c); ; ) {
              d = S(b);
              c = d.a.b;
              if (c.a !== e.a) break;
              c.c !== e && (E(J(c), c), E(J(e), c));
              d.f = b.f - c.f;
              d.d = oa(a, d.f);
              b.b = !0;
              !g && qa(a, b) && (P(c, e), Q(b), I(e));
              g = !1;
              b = d;
              e = c;
            }
            b.b = !0;
            f && ra(a, b);
          }
          function sa(a, b, c, d, e) {
            var f = [b.g[0], b.g[1], b.g[2]];
            b.d = null;
            b.d = a.o ? a.o(f, c, d, a.c) || null : null;
            null === b.d && (e ? a.n || (V(a, 100156), (a.n = !0)) : (b.d = c[0]));
          }
          function ta(a, b, c) {
            var d = [null, null, null, null];
            d[0] = b.a.d;
            d[1] = c.a.d;
            sa(a, b.a, d, [0.5, 0.5, 0, 0], !1);
            E(b, c);
          }
          function ua(a, b, c, d, e) {
            var f = Math.abs(b.b - a.b) + Math.abs(b.a - a.a),
              g = Math.abs(c.b - a.b) + Math.abs(c.a - a.a),
              h = e + 1;
            d[e] = 0.5 * g / (f + g);
            d[h] = 0.5 * f / (f + g);
            a.g[0] += d[e] * b.g[0] + d[h] * c.g[0];
            a.g[1] += d[e] * b.g[1] + d[h] * c.g[1];
            a.g[2] += d[e] * b.g[2] + d[h] * c.g[2];
          }
          function qa(a, b) {
            var c = S(b),
              d = b.a,
              e = c.a;
            if (u(d.a, e.a)) {
              if (0 < x(e.b.a, d.a, e.a)) return !1;
              if (!t(d.a, e.a)) K(e.b), E(d, J(e)), (b.b = c.b = !0);
              else if (d.a !== e.a) {
                var c = a.e,
                  f = d.a.h;
                if (0 <= f) {
                  var c = c.b,
                    g = c.d,
                    h = c.e,
                    k = c.c,
                    l = k[f];
                  g[l] = g[c.a];
                  k[g[l]] = l;
                  l <= --c.a &&
                    (1 >= l ? W(c, l) : u(h[g[l >> 1]], h[g[l]]) ? W(c, l) : va(c, l));
                  h[f] = null;
                  k[f] = c.b;
                  c.b = f;
                } else
                  for (c.c[-(f + 1)] = null; 0 < c.a && null === c.c[c.d[c.a - 1]]; ) --c.a;
                ta(a, J(e), d);
              }
            } else {
              if (0 > x(d.b.a, e.a, d.a)) return !1;
              R(b).b = b.b = !0;
              K(d.b);
              E(J(e), d);
            }
            return !0;
          }
          function wa(a, b) {
            var c = S(b),
              d = b.a,
              e = c.a,
              f = d.a,
              g = e.a,
              h = d.b.a,
              k = e.b.a,
              l = new N();
            x(h, a.a, f);
            x(k, a.a, g);
            if (f === g || Math.min(f.a, h.a) > Math.max(g.a, k.a)) return !1;
            if (u(f, g)) {
              if (0 < x(k, f, g)) return !1;
            } else if (0 > x(h, g, f)) return !1;
            var r = h,
              p = f,
              q = k,
              y = g,
              m,
              w;
            u(r, p) || ((m = r), (r = p), (p = m));
            u(q, y) || ((m = q), (q = y), (y = m));
            u(r, q) || ((m = r), (r = q), (q = m), (m = p), (p = y), (y = m));
            u(q, p)
              ? u(p, y)
                ? ((m = v(r, q, p)),
                  (w = v(q, p, y)),
                  0 > m + w && ((m = -m), (w = -w)),
                  (l.b = A(m, q.b, w, p.b)))
                : ((m = x(r, q, p)),
                  (w = -x(r, y, p)),
                  0 > m + w && ((m = -m), (w = -w)),
                  (l.b = A(m, q.b, w, y.b)))
              : (l.b = (q.b + p.b) / 2);
            z(r, p) || ((m = r), (r = p), (p = m));
            z(q, y) || ((m = q), (q = y), (y = m));
            z(r, q) || ((m = r), (r = q), (q = m), (m = p), (p = y), (y = m));
            z(q, p)
              ? z(p, y)
                ? ((m = aa(r, q, p)),
                  (w = aa(q, p, y)),
                  0 > m + w && ((m = -m), (w = -w)),
                  (l.a = A(m, q.a, w, p.a)))
                : ((m = ba(r, q, p)),
                  (w = -ba(r, y, p)),
                  0 > m + w && ((m = -m), (w = -w)),
                  (l.a = A(m, q.a, w, y.a)))
              : (l.a = (q.a + p.a) / 2);
            u(l, a.a) && ((l.b = a.a.b), (l.a = a.a.a));
            r = u(f, g) ? f : g;
            u(r, l) && ((l.b = r.b), (l.a = r.a));
            if (t(l, f) || t(l, g)) return qa(a, b), !1;
            if ((!t(h, a.a) && 0 <= x(h, a.a, l)) || (!t(k, a.a) && 0 >= x(k, a.a, l))) {
              if (k === a.a)
                return (
                  K(d.b),
                  E(e.b, d),
                  (b = ka(b)),
                  (d = S(b).a),
                  T(a, S(b), c),
                  U(a, b, J(d), d, d, !0),
                  !0
                );
              if (h === a.a) {
                K(e.b);
                E(d.e, J(e));
                f = c = b;
                g = f.a.b.a;
                do f = R(f);
                while (f.a.b.a === g);
                b = f;
                f = S(b).a.b.c;
                c.a = J(e);
                e = T(a, c, null);
                U(a, b, e.c, d.b.c, f, !0);
                return !0;
              }
              0 <= x(h, a.a, l) &&
                ((R(b).b = b.b = !0), K(d.b), (d.a.b = a.a.b), (d.a.a = a.a.a));
              0 >= x(k, a.a, l) &&
                ((b.b = c.b = !0), K(e.b), (e.a.b = a.a.b), (e.a.a = a.a.a));
              return !1;
            }
            K(d.b);
            K(e.b);
            E(J(e), d);
            d.a.b = l.b;
            d.a.a = l.a;
            d.a.h = xa(a.e, d.a);
            d = d.a;
            e = [0, 0, 0, 0];
            l = [f.d, h.d, g.d, k.d];
            d.g[0] = d.g[1] = d.g[2] = 0;
            ua(d, f, h, e, 0);
            ua(d, g, k, e, 2);
            sa(a, d, l, e, !0);
            R(b).b = b.b = c.b = !0;
            return !1;
          }
          function ra(a, b) {
            for (var c = S(b); ; ) {
              for (; c.b; ) (b = c), (c = S(c));
              if (!b.b && ((c = b), (b = R(b)), null === b || !b.b)) break;
              b.b = !1;
              var d = b.a,
                e = c.a,
                f;
              if ((f = d.b.a !== e.b.a))
                a: {
                  f = b;
                  var g = S(f),
                    h = f.a,
                    k = g.a,
                    l = void 0;
                  if (u(h.b.a, k.b.a)) {
                    if (0 > x(h.b.a, k.b.a, h.a)) {
                      f = !1;
                      break a;
                    }
                    R(f).b = f.b = !0;
                    l = K(h);
                    E(k.b, l);
                    l.d.c = f.d;
                  } else {
                    if (0 < x(k.b.a, h.b.a, k.a)) {
                      f = !1;
                      break a;
                    }
                    f.b = g.b = !0;
                    l = K(k);
                    E(h.e, k.b);
                    l.b.d.c = f.d;
                  }
                  f = !0;
                }
              f &&
                (c.c
                  ? (Q(c), I(e), (c = S(b)), (e = c.a))
                  : b.c && (Q(b), I(d), (b = R(c)), (d = b.a)));
              if (d.a !== e.a)
                if (d.b.a === e.b.a || b.c || c.c || (d.b.a !== a.a && e.b.a !== a.a))
                  qa(a, b);
                else if (wa(a, b)) break;
              d.a === e.a && d.b.a === e.b.a && (P(e, d), Q(b), I(d), (b = R(c)));
            }
          }
          function ya(a, b) {
            a.a = b;
            for (var c = b.c; null === c.i; )
              if (((c = c.c), c === b.c)) {
                var c = a,
                  d = b,
                  e = new ma();
                e.a = d.c.b;
                var f = c.f,
                  g = f.a;
                do g = g.a;
                while (null !== g.b && !f.c(f.b, e, g.b));
                var f = g.b,
                  h = S(f),
                  e = f.a,
                  g = h.a;
                if (0 === x(e.b.a, d, e.a))
                  (e = f.a),
                    t(e.a, d) ||
                      t(e.b.a, d) ||
                      (K(e.b), f.c && (I(e.c), (f.c = !1)), E(d.c, e), ya(c, d));
                else {
                  var k = u(g.b.a, e.b.a) ? f : h,
                    h = void 0;
                  f.d || k.c
                    ? (k === f ? (h = L(d.c.b, e.e)) : (h = L(g.b.c.b, d.c).b),
                      k.c
                        ? ja(k, h)
                        : ((e = c),
                          (f = la(c, f, h)),
                          (f.f = R(f).f + f.a.f),
                          (f.d = oa(e, f.f))),
                      ya(c, d))
                    : U(c, f, d.c, d.c, null, !0);
                }
                return;
              }
            c = ka(c.i);
            e = S(c);
            f = e.a;
            e = T(a, e, null);
            if (e.c === f) {
              var f = e,
                e = f.c,
                g = S(c),
                h = c.a,
                k = g.a,
                l = !1;
              h.b.a !== k.b.a && wa(a, c);
              t(h.a, a.a) &&
                (E(J(e), h), (c = ka(c)), (e = S(c).a), T(a, S(c), g), (l = !0));
              t(k.a, a.a) && (E(f, J(k)), (f = T(a, g, null)), (l = !0));
              l
                ? U(a, c, f.c, e, e, !0)
                : (u(k.a, h.a) ? (d = J(k)) : (d = h),
                  (d = L(f.c.b, d)),
                  U(a, c, d, d.c, d.c, !1),
                  (d.b.i.c = !0),
                  ra(a, c));
            } else U(a, c, e.c, f, f, !0);
          }
          function za(a, b) {
            var c = new ma(),
              d = ea(a.b);
            d.a.b = O;
            d.a.a = b;
            d.b.a.b = -O;
            d.b.a.a = b;
            a.a = d.b.a;
            c.a = d;
            c.f = 0;
            c.d = !1;
            c.c = !1;
            c.h = !0;
            c.b = !1;
            d = a.f;
            d = na(d, d.a, c);
            c.e = d;
          }
          function Aa(a) {
            this.a = new Ba();
            this.b = a;
            this.c = ia;
          }
          function na(a, b, c) {
            do b = b.c;
            while (null !== b.b && !a.c(a.b, b.b, c));
            a = new Ba(c, b.a, b);
            b.a.c = a;
            return (b.a = a);
          }
          function Ba(a, b, c) {
            this.b = a || null;
            this.a = b || this;
            this.c = c || this;
          }
          function X() {
            this.d = Y;
            this.p = this.b = this.q = null;
            this.j = [0, 0, 0];
            this.s = 100130;
            this.n = !1;
            this.o = this.a = this.e = this.f = null;
            this.m = !1;
            this.c = this.r = this.i = this.k = this.l = this.h = null;
          }
          var Y = 0;
          n = X.prototype;
          n.x = function() {
            Z(this, Y);
          };
          n.B = function(a, b) {
            switch (a) {
              case 100142:
                return;
              case 100140:
                switch (b) {
                  case 100130:
                  case 100131:
                  case 100132:
                  case 100133:
                  case 100134:
                    this.s = b;
                    return;
                }
                break;
              case 100141:
                this.m = !!b;
                return;
              default:
                V(this, 100900);
                return;
            }
            V(this, 100901);
          };
          n.y = function(a) {
            switch (a) {
              case 100142:
                return 0;
              case 100140:
                return this.s;
              case 100141:
                return this.m;
              default:
                V(this, 100900);
            }
            return !1;
          };
          n.A = function(a, b, c) {
            this.j[0] = a;
            this.j[1] = b;
            this.j[2] = c;
          };
          n.z = function(a, b) {
            var c = b ? b : null;
            switch (a) {
              case 100100:
              case 100106:
                this.h = c;
                break;
              case 100104:
              case 100110:
                this.l = c;
                break;
              case 100101:
              case 100107:
                this.k = c;
                break;
              case 100102:
              case 100108:
                this.i = c;
                break;
              case 100103:
              case 100109:
                this.p = c;
                break;
              case 100105:
              case 100111:
                this.o = c;
                break;
              case 100112:
                this.r = c;
                break;
              default:
                V(this, 100900);
            }
          };
          n.C = function(a, b) {
            var c = !1,
              d = [0, 0, 0];
            Z(this, 2);
            for (var e = 0; 3 > e; ++e) {
              var f = a[e];
              -1e150 > f && ((f = -1e150), (c = !0));
              1e150 < f && ((f = 1e150), (c = !0));
              d[e] = f;
            }
            c && V(this, 100155);
            c = this.q;
            null === c ? ((c = ea(this.b)), E(c, c.b)) : (K(c), (c = c.e));
            c.a.d = b;
            c.a.g[0] = d[0];
            c.a.g[1] = d[1];
            c.a.g[2] = d[2];
            c.f = 1;
            c.b.f = -1;
            this.q = c;
          };
          n.u = function(a) {
            Z(this, Y);
            this.d = 1;
            this.b = new Ca();
            this.c = a;
          };
          n.t = function() {
            Z(this, 1);
            this.d = 2;
            this.q = null;
          };
          n.v = function() {
            Z(this, 2);
            this.d = 1;
          };
          n.w = function() {
            Z(this, 1);
            this.d = Y;
            var a = this.j[0],
              b = this.j[1],
              c = this.j[2],
              d = !1,
              e = [a, b, c];
            if (0 === a && 0 === b && 0 === c) {
              for (
                var b = [-2 * 1e150, -2 * 1e150, -2 * 1e150],
                  f = [2 * 1e150, 2 * 1e150, 2 * 1e150],
                  c = [],
                  g = [],
                  d = this.b.c,
                  a = d.e;
                a !== d;
                a = a.e
              )
                for (var h = 0; 3 > h; ++h) {
                  var k = a.g[h];
                  k < f[h] && ((f[h] = k), (g[h] = a));
                  k > b[h] && ((b[h] = k), (c[h] = a));
                }
              a = 0;
              b[1] - f[1] > b[0] - f[0] && (a = 1);
              b[2] - f[2] > b[a] - f[a] && (a = 2);
              if (f[a] >= b[a]) (e[0] = 0), (e[1] = 0), (e[2] = 1);
              else {
                b = 0;
                f = g[a];
                c = c[a];
                g = [0, 0, 0];
                f = [f.g[0] - c.g[0], f.g[1] - c.g[1], f.g[2] - c.g[2]];
                h = [0, 0, 0];
                for (a = d.e; a !== d; a = a.e)
                  (h[0] = a.g[0] - c.g[0]),
                    (h[1] = a.g[1] - c.g[1]),
                    (h[2] = a.g[2] - c.g[2]),
                    (g[0] = f[1] * h[2] - f[2] * h[1]),
                    (g[1] = f[2] * h[0] - f[0] * h[2]),
                    (g[2] = f[0] * h[1] - f[1] * h[0]),
                    (k = g[0] * g[0] + g[1] * g[1] + g[2] * g[2]),
                    k > b && ((b = k), (e[0] = g[0]), (e[1] = g[1]), (e[2] = g[2]));
                0 >= b && ((e[0] = e[1] = e[2] = 0), (e[ha(f)] = 1));
              }
              d = !0;
            }
            g = ha(e);
            a = this.b.c;
            b = (g + 1) % 3;
            c = (g + 2) % 3;
            g = 0 < e[g] ? 1 : -1;
            for (e = a.e; e !== a; e = e.e) (e.b = e.g[b]), (e.a = g * e.g[c]);
            if (d) {
              e = 0;
              d = this.b.a;
              for (a = d.b; a !== d; a = a.b)
                if (((b = a.a), !(0 >= b.f))) {
                  do (e += (b.a.b - b.b.a.b) * (b.a.a + b.b.a.a)), (b = b.e);
                  while (b !== a.a);
                }
              if (0 > e) for (e = this.b.c, d = e.e; d !== e; d = d.e) d.a = -d.a;
            }
            this.n = !1;
            e = this.b.b;
            for (a = e.h; a !== e; a = d)
              if (
                ((d = a.h),
                (b = a.e),
                t(a.a, a.b.a) && a.e.e !== a && (ta(this, b, a), I(a), (a = b), (b = a.e)),
                b.e === a)
              ) {
                if (b !== a) {
                  if (b === d || b === d.b) d = d.h;
                  I(b);
                }
                if (a === d || a === d.b) d = d.h;
                I(a);
              }
            this.e = e = new Da();
            d = this.b.c;
            for (a = d.e; a !== d; a = a.e) a.h = xa(e, a);
            Ea(e);
            this.f = new Aa(this);
            za(this, -O);
            for (za(this, O); null !== (e = Fa(this.e)); ) {
              for (;;) {
                a: if (((a = this.e), 0 === a.a)) d = Ga(a.b);
                else if (
                  ((d = a.c[a.d[a.a - 1]]), 0 !== a.b.a && ((a = Ga(a.b)), u(a, d)))
                ) {
                  d = a;
                  break a;
                }
                if (null === d || !t(d, e)) break;
                d = Fa(this.e);
                ta(this, e.c, d.c);
              }
              ya(this, e);
            }
            this.a = this.f.a.a.b.a.a;
            for (e = 0; null !== (d = this.f.a.a.b); ) d.h || ++e, Q(d);
            this.f = null;
            e = this.e;
            e.b = null;
            e.d = null;
            this.e = e.c = null;
            e = this.b;
            for (a = e.a.b; a !== e.a; a = d)
              (d = a.b), (a = a.a), a.e.e === a && (P(a.c, a), I(a));
            if (!this.n) {
              e = this.b;
              if (this.m)
                for (a = e.b.h; a !== e.b; a = d)
                  (d = a.h), a.b.d.c !== a.d.c ? (a.f = a.d.c ? 1 : -1) : I(a);
              else
                for (a = e.a.b; a !== e.a; a = d)
                  if (((d = a.b), a.c)) {
                    for (a = a.a; u(a.b.a, a.a); a = a.c.b);
                    for (; u(a.a, a.b.a); a = a.e);
                    b = a.c.b;
                    for (c = void 0; a.e !== b; )
                      if (u(a.b.a, b.a)) {
                        for (; b.e !== a && (ca(b.e) || 0 >= x(b.a, b.b.a, b.e.b.a)); )
                          (c = L(b.e, b)), (b = c.b);
                        b = b.c.b;
                      } else {
                        for (; b.e !== a && (da(a.c.b) || 0 <= x(a.b.a, a.a, a.c.b.a)); )
                          (c = L(a, a.c.b)), (a = c.b);
                        a = a.e;
                      }
                    for (; b.e.e !== a; ) (c = L(b.e, b)), (b = c.b);
                  }
              if (this.h || this.i || this.k || this.l)
                if (this.m)
                  for (e = this.b, d = e.a.b; d !== e.a; d = d.b) {
                    if (d.c) {
                      this.h && this.h(2, this.c);
                      a = d.a;
                      do this.k && this.k(a.a.d, this.c), (a = a.e);
                      while (a !== d.a);
                      this.i && this.i(this.c);
                    }
                  }
                else {
                  e = this.b;
                  d = !!this.l;
                  a = !1;
                  b = -1;
                  for (c = e.a.d; c !== e.a; c = c.d)
                    if (c.c) {
                      a || (this.h && this.h(4, this.c), (a = !0));
                      g = c.a;
                      do
                        d &&
                          ((f = g.b.d.c ? 0 : 1),
                          b !== f && ((b = f), this.l && this.l(!!b, this.c))),
                          this.k && this.k(g.a.d, this.c),
                          (g = g.e);
                      while (g !== c.a);
                    }
                  a && this.i && this.i(this.c);
                }
              if (this.r) {
                e = this.b;
                for (a = e.a.b; a !== e.a; a = d)
                  if (((d = a.b), !a.c)) {
                    b = a.a;
                    c = b.e;
                    g = void 0;
                    do
                      (g = c),
                        (c = g.e),
                        (g.d = null),
                        null === g.b.d &&
                          (g.c === g ? F(g.a, null) : ((g.a.c = g.c), H(g, J(g))),
                          (f = g.b),
                          f.c === f ? F(f.a, null) : ((f.a.c = f.c), H(f, J(f))),
                          fa(g));
                    while (g !== b);
                    b = a.d;
                    a = a.b;
                    a.d = b;
                    b.b = a;
                  }
                this.r(this.b);
                this.c = this.b = null;
                return;
              }
            }
            this.b = this.c = null;
          };
          function Z(a, b) {
            if (a.d !== b)
              for (; a.d !== b; )
                if (a.d < b)
                  switch (a.d) {
                    case Y:
                      V(a, 100151);
                      a.u(null);
                      break;
                    case 1:
                      V(a, 100152), a.t();
                  }
                else
                  switch (a.d) {
                    case 2:
                      V(a, 100154);
                      a.v();
                      break;
                    case 1:
                      V(a, 100153), a.w();
                  }
          }
          function V(a, b) {
            a.p && a.p(b, a.c);
          }
          function ga(a, b) {
            this.b = a || this;
            this.d = b || this;
            this.a = null;
            this.c = !1;
          }
          function M() {
            this.h = this;
            this.i = this.d = this.a = this.e = this.c = this.b = null;
            this.f = 0;
          }
          function J(a) {
            return a.b.e;
          }
          function Ca() {
            this.c = new N();
            this.a = new ga();
            this.b = new M();
            this.d = new M();
            this.b.b = this.d;
            this.d.b = this.b;
          }
          function N(a, b) {
            this.e = a || this;
            this.f = b || this;
            this.d = this.c = null;
            this.g = [0, 0, 0];
            this.h = this.a = this.b = 0;
          }
          function Da() {
            this.c = [];
            this.d = null;
            this.a = 0;
            this.e = !1;
            this.b = new Ha();
          }
          function Ea(a) {
            a.d = [];
            for (var b = 0; b < a.a; b++) a.d[b] = b;
            a.d.sort(
              (function(a) {
                return function(b, e) {
                  return u(a[b], a[e]) ? 1 : -1;
                };
              })(a.c)
            );
            a.e = !0;
            Ia(a.b);
          }
          function xa(a, b) {
            if (a.e) {
              var c = a.b,
                d = ++c.a;
              2 * d > c.f && ((c.f *= 2), (c.c = Ja(c.c, c.f + 1)));
              var e;
              0 === c.b ? (e = d) : ((e = c.b), (c.b = c.c[c.b]));
              c.e[e] = b;
              c.c[e] = d;
              c.d[d] = e;
              c.h && va(c, d);
              return e;
            }
            c = a.a++;
            a.c[c] = b;
            return -(c + 1);
          }
          function Fa(a) {
            if (0 === a.a) return Ka(a.b);
            var b = a.c[a.d[a.a - 1]];
            if (0 !== a.b.a && u(Ga(a.b), b)) return Ka(a.b);
            do --a.a;
            while (0 < a.a && null === a.c[a.d[a.a - 1]]);
            return b;
          }
          function Ha() {
            this.d = Ja([0], 33);
            this.e = [null, null];
            this.c = [0, 0];
            this.a = 0;
            this.f = 32;
            this.b = 0;
            this.h = !1;
            this.d[1] = 1;
          }
          function Ja(a, b) {
            for (var c = Array(b), d = 0; d < a.length; d++) c[d] = a[d];
            for (; d < b; d++) c[d] = 0;
            return c;
          }
          function Ia(a) {
            for (var b = a.a; 1 <= b; --b) W(a, b);
            a.h = !0;
          }
          function Ga(a) {
            return a.e[a.d[1]];
          }
          function Ka(a) {
            var b = a.d,
              c = a.e,
              d = a.c,
              e = b[1],
              f = c[e];
            0 < a.a &&
              ((b[1] = b[a.a]),
              (d[b[1]] = 1),
              (c[e] = null),
              (d[e] = a.b),
              (a.b = e),
              0 < --a.a && W(a, 1));
            return f;
          }
          function W(a, b) {
            for (var c = a.d, d = a.e, e = a.c, f = b, g = c[f]; ; ) {
              var h = f << 1;
              h < a.a && u(d[c[h + 1]], d[c[h]]) && (h += 1);
              var k = c[h];
              if (h > a.a || u(d[g], d[k])) {
                c[f] = g;
                e[g] = f;
                break;
              }
              c[f] = k;
              e[k] = f;
              f = h;
            }
          }
          function va(a, b) {
            for (var c = a.d, d = a.e, e = a.c, f = b, g = c[f]; ; ) {
              var h = f >> 1,
                k = c[h];
              if (0 === h || u(d[k], d[g])) {
                c[f] = g;
                e[g] = f;
                break;
              }
              c[f] = k;
              e[k] = f;
              f = h;
            }
          }
          function ma() {
            this.e = this.a = null;
            this.f = 0;
            this.c = this.b = this.h = this.d = !1;
          }
          function S(a) {
            return a.e.c.b;
          }
          function R(a) {
            return a.e.a.b;
          }
          this.libtess = {
            GluTesselator: X,
            windingRule: {
              GLU_TESS_WINDING_ODD: 100130,
              GLU_TESS_WINDING_NONZERO: 100131,
              GLU_TESS_WINDING_POSITIVE: 100132,
              GLU_TESS_WINDING_NEGATIVE: 100133,
              GLU_TESS_WINDING_ABS_GEQ_TWO: 100134
            },
            primitiveType: {
              GL_LINE_LOOP: 2,
              GL_TRIANGLES: 4,
              GL_TRIANGLE_STRIP: 5,
              GL_TRIANGLE_FAN: 6
            },
            errorType: {
              GLU_TESS_MISSING_BEGIN_POLYGON: 100151,
              GLU_TESS_MISSING_END_POLYGON: 100153,
              GLU_TESS_MISSING_BEGIN_CONTOUR: 100152,
              GLU_TESS_MISSING_END_CONTOUR: 100154,
              GLU_TESS_COORD_TOO_LARGE: 100155,
              GLU_TESS_NEED_COMBINE_CALLBACK: 100156
            },
            gluEnum: {
              GLU_TESS_MESH: 100112,
              GLU_TESS_TOLERANCE: 100142,
              GLU_TESS_WINDING_RULE: 100140,
              GLU_TESS_BOUNDARY_ONLY: 100141,
              GLU_INVALID_ENUM: 100900,
              GLU_INVALID_VALUE: 100901,
              GLU_TESS_BEGIN: 100100,
              GLU_TESS_VERTEX: 100101,
              GLU_TESS_END: 100102,
              GLU_TESS_ERROR: 100103,
              GLU_TESS_EDGE_FLAG: 100104,
              GLU_TESS_COMBINE: 100105,
              GLU_TESS_BEGIN_DATA: 100106,
              GLU_TESS_VERTEX_DATA: 100107,
              GLU_TESS_END_DATA: 100108,
              GLU_TESS_ERROR_DATA: 100109,
              GLU_TESS_EDGE_FLAG_DATA: 100110,
              GLU_TESS_COMBINE_DATA: 100111
            }
          };
          X.prototype.gluDeleteTess = X.prototype.x;
          X.prototype.gluTessProperty = X.prototype.B;
          X.prototype.gluGetTessProperty = X.prototype.y;
          X.prototype.gluTessNormal = X.prototype.A;
          X.prototype.gluTessCallback = X.prototype.z;
          X.prototype.gluTessVertex = X.prototype.C;
          X.prototype.gluTessBeginPolygon = X.prototype.u;
          X.prototype.gluTessBeginContour = X.prototype.t;
          X.prototype.gluTessEndContour = X.prototype.v;
          X.prototype.gluTessEndPolygon = X.prototype.w;
          if (typeof module !== 'undefined') {
            module.exports = this.libtess;
          }
        },
        {}
      ],
      257: [
        function(_dereq_, module, exports) {
          // (c) Dean McNamee <dean@gmail.com>, 2013.
          //
          // https://github.com/deanm/omggif
          //
          // Permission is hereby granted, free of charge, to any person obtaining a copy
          // of this software and associated documentation files (the "Software"), to
          // deal in the Software without restriction, including without limitation the
          // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
          // sell copies of the Software, and to permit persons to whom the Software is
          // furnished to do so, subject to the following conditions:
          //
          // The above copyright notice and this permission notice shall be included in
          // all copies or substantial portions of the Software.
          //
          // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
          // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
          // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
          // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
          // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
          // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
          // IN THE SOFTWARE.
          //
          // omggif is a JavaScript implementation of a GIF 89a encoder and decoder,
          // including animation and compression.  It does not rely on any specific
          // underlying system, so should run in the browser, Node, or Plask.

          'use strict';

          function GifWriter(buf, width, height, gopts) {
            var p = 0;

            var gopts = gopts === undefined ? {} : gopts;
            var loop_count = gopts.loop === undefined ? null : gopts.loop;
            var global_palette = gopts.palette === undefined ? null : gopts.palette;

            if (width <= 0 || height <= 0 || width > 65535 || height > 65535)
              throw new Error('Width/Height invalid.');

            function check_palette_and_num_colors(palette) {
              var num_colors = palette.length;
              if (num_colors < 2 || num_colors > 256 || num_colors & (num_colors - 1)) {
                throw new Error(
                  'Invalid code/color length, must be power of 2 and 2 .. 256.'
                );
              }
              return num_colors;
            }

            // - Header.
            buf[p++] = 0x47;
            buf[p++] = 0x49;
            buf[p++] = 0x46; // GIF
            buf[p++] = 0x38;
            buf[p++] = 0x39;
            buf[p++] = 0x61; // 89a

            // Handling of Global Color Table (palette) and background index.
            var gp_num_colors_pow2 = 0;
            var background = 0;
            if (global_palette !== null) {
              var gp_num_colors = check_palette_and_num_colors(global_palette);
              while ((gp_num_colors >>= 1)) ++gp_num_colors_pow2;
              gp_num_colors = 1 << gp_num_colors_pow2;
              --gp_num_colors_pow2;
              if (gopts.background !== undefined) {
                background = gopts.background;
                if (background >= gp_num_colors)
                  throw new Error('Background index out of range.');
                // The GIF spec states that a background index of 0 should be ignored, so
                // this is probably a mistake and you really want to set it to another
                // slot in the palette.  But actually in the end most browsers, etc end
                // up ignoring this almost completely (including for dispose background).
                if (background === 0)
                  throw new Error('Background index explicitly passed as 0.');
              }
            }

            // - Logical Screen Descriptor.
            // NOTE(deanm): w/h apparently ignored by implementations, but set anyway.
            buf[p++] = width & 0xff;
            buf[p++] = (width >> 8) & 0xff;
            buf[p++] = height & 0xff;
            buf[p++] = (height >> 8) & 0xff;
            // NOTE: Indicates 0-bpp original color resolution (unused?).
            buf[p++] =
              (global_palette !== null ? 0x80 : 0) | gp_num_colors_pow2; // Global Color Table Flag. // NOTE: No sort flag (unused?).
            buf[p++] = background; // Background Color Index.
            buf[p++] = 0; // Pixel aspect ratio (unused?).

            // - Global Color Table
            if (global_palette !== null) {
              for (var i = 0, il = global_palette.length; i < il; ++i) {
                var rgb = global_palette[i];
                buf[p++] = (rgb >> 16) & 0xff;
                buf[p++] = (rgb >> 8) & 0xff;
                buf[p++] = rgb & 0xff;
              }
            }

            if (loop_count !== null) {
              // Netscape block for looping.
              if (loop_count < 0 || loop_count > 65535)
                throw new Error('Loop count invalid.');
              // Extension code, label, and length.
              buf[p++] = 0x21;
              buf[p++] = 0xff;
              buf[p++] = 0x0b;
              // NETSCAPE2.0
              buf[p++] = 0x4e;
              buf[p++] = 0x45;
              buf[p++] = 0x54;
              buf[p++] = 0x53;
              buf[p++] = 0x43;
              buf[p++] = 0x41;
              buf[p++] = 0x50;
              buf[p++] = 0x45;
              buf[p++] = 0x32;
              buf[p++] = 0x2e;
              buf[p++] = 0x30;
              // Sub-block
              buf[p++] = 0x03;
              buf[p++] = 0x01;
              buf[p++] = loop_count & 0xff;
              buf[p++] = (loop_count >> 8) & 0xff;
              buf[p++] = 0x00; // Terminator.
            }

            var ended = false;

            this.addFrame = function(x, y, w, h, indexed_pixels, opts) {
              if (ended === true) {
                --p;
                ended = false;
              } // Un-end.

              opts = opts === undefined ? {} : opts;

              // TODO(deanm): Bounds check x, y.  Do they need to be within the virtual
              // canvas width/height, I imagine?
              if (x < 0 || y < 0 || x > 65535 || y > 65535) throw new Error('x/y invalid.');

              if (w <= 0 || h <= 0 || w > 65535 || h > 65535)
                throw new Error('Width/Height invalid.');

              if (indexed_pixels.length < w * h)
                throw new Error('Not enough pixels for the frame size.');

              var using_local_palette = true;
              var palette = opts.palette;
              if (palette === undefined || palette === null) {
                using_local_palette = false;
                palette = global_palette;
              }

              if (palette === undefined || palette === null)
                throw new Error('Must supply either a local or global palette.');

              var num_colors = check_palette_and_num_colors(palette);

              // Compute the min_code_size (power of 2), destroying num_colors.
              var min_code_size = 0;
              while ((num_colors >>= 1)) ++min_code_size;
              num_colors = 1 << min_code_size; // Now we can easily get it back.

              var delay = opts.delay === undefined ? 0 : opts.delay;

              // From the spec:
              //     0 -   No disposal specified. The decoder is
              //           not required to take any action.
              //     1 -   Do not dispose. The graphic is to be left
              //           in place.
              //     2 -   Restore to background color. The area used by the
              //           graphic must be restored to the background color.
              //     3 -   Restore to previous. The decoder is required to
              //           restore the area overwritten by the graphic with
              //           what was there prior to rendering the graphic.
              //  4-7 -    To be defined.
              // NOTE(deanm): Dispose background doesn't really work, apparently most
              // browsers ignore the background palette index and clear to transparency.
              var disposal = opts.disposal === undefined ? 0 : opts.disposal;
              if (disposal < 0 || disposal > 3)
                // 4-7 is reserved.
                throw new Error('Disposal out of range.');

              var use_transparency = false;
              var transparent_index = 0;
              if (opts.transparent !== undefined && opts.transparent !== null) {
                use_transparency = true;
                transparent_index = opts.transparent;
                if (transparent_index < 0 || transparent_index >= num_colors)
                  throw new Error('Transparent color index.');
              }

              if (disposal !== 0 || use_transparency || delay !== 0) {
                // - Graphics Control Extension
                buf[p++] = 0x21;
                buf[p++] = 0xf9; // Extension / Label.
                buf[p++] = 4; // Byte size.

                buf[p++] = (disposal << 2) | (use_transparency === true ? 1 : 0);
                buf[p++] = delay & 0xff;
                buf[p++] = (delay >> 8) & 0xff;
                buf[p++] = transparent_index; // Transparent color index.
                buf[p++] = 0; // Block Terminator.
              }

              // - Image Descriptor
              buf[p++] = 0x2c; // Image Seperator.
              buf[p++] = x & 0xff;
              buf[p++] = (x >> 8) & 0xff; // Left.
              buf[p++] = y & 0xff;
              buf[p++] = (y >> 8) & 0xff; // Top.
              buf[p++] = w & 0xff;
              buf[p++] = (w >> 8) & 0xff;
              buf[p++] = h & 0xff;
              buf[p++] = (h >> 8) & 0xff;
              // NOTE: No sort flag (unused?).
              // TODO(deanm): Support interlace.
              buf[p++] = using_local_palette === true ? 0x80 | (min_code_size - 1) : 0;

              // - Local Color Table
              if (using_local_palette === true) {
                for (var i = 0, il = palette.length; i < il; ++i) {
                  var rgb = palette[i];
                  buf[p++] = (rgb >> 16) & 0xff;
                  buf[p++] = (rgb >> 8) & 0xff;
                  buf[p++] = rgb & 0xff;
                }
              }

              p = GifWriterOutputLZWCodeStream(
                buf,
                p,
                min_code_size < 2 ? 2 : min_code_size,
                indexed_pixels
              );

              return p;
            };

            this.end = function() {
              if (ended === false) {
                buf[p++] = 0x3b; // Trailer.
                ended = true;
              }
              return p;
            };

            this.getOutputBuffer = function() {
              return buf;
            };
            this.setOutputBuffer = function(v) {
              buf = v;
            };
            this.getOutputBufferPosition = function() {
              return p;
            };
            this.setOutputBufferPosition = function(v) {
              p = v;
            };
          }

          // Main compression routine, palette indexes -> LZW code stream.
          // |index_stream| must have at least one entry.
          function GifWriterOutputLZWCodeStream(buf, p, min_code_size, index_stream) {
            buf[p++] = min_code_size;
            var cur_subblock = p++; // Pointing at the length field.

            var clear_code = 1 << min_code_size;
            var code_mask = clear_code - 1;
            var eoi_code = clear_code + 1;
            var next_code = eoi_code + 1;

            var cur_code_size = min_code_size + 1; // Number of bits per code.
            var cur_shift = 0;
            // We have at most 12-bit codes, so we should have to hold a max of 19
            // bits here (and then we would write out).
            var cur = 0;

            function emit_bytes_to_buffer(bit_block_size) {
              while (cur_shift >= bit_block_size) {
                buf[p++] = cur & 0xff;
                cur >>= 8;
                cur_shift -= 8;
                if (p === cur_subblock + 256) {
                  // Finished a subblock.
                  buf[cur_subblock] = 255;
                  cur_subblock = p++;
                }
              }
            }

            function emit_code(c) {
              cur |= c << cur_shift;
              cur_shift += cur_code_size;
              emit_bytes_to_buffer(8);
            }

            // I am not an expert on the topic, and I don't want to write a thesis.
            // However, it is good to outline here the basic algorithm and the few data
            // structures and optimizations here that make this implementation fast.
            // The basic idea behind LZW is to build a table of previously seen runs
            // addressed by a short id (herein called output code).  All data is
            // referenced by a code, which represents one or more values from the
            // original input stream.  All input bytes can be referenced as the same
            // value as an output code.  So if you didn't want any compression, you
            // could more or less just output the original bytes as codes (there are
            // some details to this, but it is the idea).  In order to achieve
            // compression, values greater then the input range (codes can be up to
            // 12-bit while input only 8-bit) represent a sequence of previously seen
            // inputs.  The decompressor is able to build the same mapping while
            // decoding, so there is always a shared common knowledge between the
            // encoding and decoder, which is also important for "timing" aspects like
            // how to handle variable bit width code encoding.
            //
            // One obvious but very important consequence of the table system is there
            // is always a unique id (at most 12-bits) to map the runs.  'A' might be
            // 4, then 'AA' might be 10, 'AAA' 11, 'AAAA' 12, etc.  This relationship
            // can be used for an effecient lookup strategy for the code mapping.  We
            // need to know if a run has been seen before, and be able to map that run
            // to the output code.  Since we start with known unique ids (input bytes),
            // and then from those build more unique ids (table entries), we can
            // continue this chain (almost like a linked list) to always have small
            // integer values that represent the current byte chains in the encoder.
            // This means instead of tracking the input bytes (AAAABCD) to know our
            // current state, we can track the table entry for AAAABC (it is guaranteed
            // to exist by the nature of the algorithm) and the next character D.
            // Therefor the tuple of (table_entry, byte) is guaranteed to also be
            // unique.  This allows us to create a simple lookup key for mapping input
            // sequences to codes (table indices) without having to store or search
            // any of the code sequences.  So if 'AAAA' has a table entry of 12, the
            // tuple of ('AAAA', K) for any input byte K will be unique, and can be our
            // key.  This leads to a integer value at most 20-bits, which can always
            // fit in an SMI value and be used as a fast sparse array / object key.

            // Output code for the current contents of the index buffer.
            var ib_code = index_stream[0] & code_mask; // Load first input index.
            var code_table = {}; // Key'd on our 20-bit "tuple".

            emit_code(clear_code); // Spec says first code should be a clear code.

            // First index already loaded, process the rest of the stream.
            for (var i = 1, il = index_stream.length; i < il; ++i) {
              var k = index_stream[i] & code_mask;
              var cur_key = (ib_code << 8) | k; // (prev, k) unique tuple.
              var cur_code = code_table[cur_key]; // buffer + k.

              // Check if we have to create a new code table entry.
              if (cur_code === undefined) {
                // We don't have buffer + k.
                // Emit index buffer (without k).
                // This is an inline version of emit_code, because this is the core
                // writing routine of the compressor (and V8 cannot inline emit_code
                // because it is a closure here in a different context).  Additionally
                // we can call emit_byte_to_buffer less often, because we can have
                // 30-bits (from our 31-bit signed SMI), and we know our codes will only
                // be 12-bits, so can safely have 18-bits there without overflow.
                // emit_code(ib_code);
                cur |= ib_code << cur_shift;
                cur_shift += cur_code_size;
                while (cur_shift >= 8) {
                  buf[p++] = cur & 0xff;
                  cur >>= 8;
                  cur_shift -= 8;
                  if (p === cur_subblock + 256) {
                    // Finished a subblock.
                    buf[cur_subblock] = 255;
                    cur_subblock = p++;
                  }
                }

                if (next_code === 4096) {
                  // Table full, need a clear.
                  emit_code(clear_code);
                  next_code = eoi_code + 1;
                  cur_code_size = min_code_size + 1;
                  code_table = {};
                } else {
                  // Table not full, insert a new entry.
                  // Increase our variable bit code sizes if necessary.  This is a bit
                  // tricky as it is based on "timing" between the encoding and
                  // decoder.  From the encoders perspective this should happen after
                  // we've already emitted the index buffer and are about to create the
                  // first table entry that would overflow our current code bit size.
                  if (next_code >= 1 << cur_code_size) ++cur_code_size;
                  code_table[cur_key] = next_code++; // Insert into code table.
                }

                ib_code = k; // Index buffer to single input k.
              } else {
                ib_code = cur_code; // Index buffer to sequence in code table.
              }
            }

            emit_code(ib_code); // There will still be something in the index buffer.
            emit_code(eoi_code); // End Of Information.

            // Flush / finalize the sub-blocks stream to the buffer.
            emit_bytes_to_buffer(1);

            // Finish the sub-blocks, writing out any unfinished lengths and
            // terminating with a sub-block of length 0.  If we have already started
            // but not yet used a sub-block it can just become the terminator.
            if (cur_subblock + 1 === p) {
              // Started but unused.
              buf[cur_subblock] = 0;
            } else {
              // Started and used, write length and additional terminator block.
              buf[cur_subblock] = p - cur_subblock - 1;
              buf[p++] = 0;
            }
            return p;
          }

          function GifReader(buf) {
            var p = 0;

            // - Header (GIF87a or GIF89a).
            if (
              buf[p++] !== 0x47 ||
              buf[p++] !== 0x49 ||
              buf[p++] !== 0x46 ||
              buf[p++] !== 0x38 ||
              ((buf[p++] + 1) & 0xfd) !== 0x38 ||
              buf[p++] !== 0x61
            ) {
              throw new Error('Invalid GIF 87a/89a header.');
            }

            // - Logical Screen Descriptor.
            var width = buf[p++] | (buf[p++] << 8);
            var height = buf[p++] | (buf[p++] << 8);
            var pf0 = buf[p++]; // <Packed Fields>.
            var global_palette_flag = pf0 >> 7;
            var num_global_colors_pow2 = pf0 & 0x7;
            var num_global_colors = 1 << (num_global_colors_pow2 + 1);
            var background = buf[p++];
            buf[p++]; // Pixel aspect ratio (unused?).

            var global_palette_offset = null;
            var global_palette_size = null;

            if (global_palette_flag) {
              global_palette_offset = p;
              global_palette_size = num_global_colors;
              p += num_global_colors * 3; // Seek past palette.
            }

            var no_eof = true;

            var frames = [];

            var delay = 0;
            var transparent_index = null;
            var disposal = 0; // 0 - No disposal specified.
            var loop_count = null;

            this.width = width;
            this.height = height;

            while (no_eof && p < buf.length) {
              switch (buf[p++]) {
                case 0x21: // Graphics Control Extension Block
                  switch (buf[p++]) {
                    case 0xff: // Application specific block
                      // Try if it's a Netscape block (with animation loop counter).
                      if (
                        buf[p] !== 0x0b || // 21 FF already read, check block size.
                        // NETSCAPE2.0
                        (buf[p + 1] == 0x4e &&
                          buf[p + 2] == 0x45 &&
                          buf[p + 3] == 0x54 &&
                          buf[p + 4] == 0x53 &&
                          buf[p + 5] == 0x43 &&
                          buf[p + 6] == 0x41 &&
                          buf[p + 7] == 0x50 &&
                          buf[p + 8] == 0x45 &&
                          buf[p + 9] == 0x32 &&
                          buf[p + 10] == 0x2e &&
                          buf[p + 11] == 0x30 &&
                          // Sub-block
                          buf[p + 12] == 0x03 &&
                          buf[p + 13] == 0x01 &&
                          buf[p + 16] == 0)
                      ) {
                        p += 14;
                        loop_count = buf[p++] | (buf[p++] << 8);
                        p++; // Skip terminator.
                      } else {
                        // We don't know what it is, just try to get past it.
                        p += 12;
                        while (true) {
                          // Seek through subblocks.
                          var block_size = buf[p++];
                          // Bad block size (ex: undefined from an out of bounds read).
                          if (!(block_size >= 0)) throw Error('Invalid block size');
                          if (block_size === 0) break; // 0 size is terminator
                          p += block_size;
                        }
                      }
                      break;

                    case 0xf9: // Graphics Control Extension
                      if (buf[p++] !== 0x4 || buf[p + 4] !== 0)
                        throw new Error('Invalid graphics extension block.');
                      var pf1 = buf[p++];
                      delay = buf[p++] | (buf[p++] << 8);
                      transparent_index = buf[p++];
                      if ((pf1 & 1) === 0) transparent_index = null;
                      disposal = (pf1 >> 2) & 0x7;
                      p++; // Skip terminator.
                      break;

                    case 0xfe: // Comment Extension.
                      while (true) {
                        // Seek through subblocks.
                        var block_size = buf[p++];
                        // Bad block size (ex: undefined from an out of bounds read).
                        if (!(block_size >= 0)) throw Error('Invalid block size');
                        if (block_size === 0) break; // 0 size is terminator
                        // console.log(buf.slice(p, p+block_size).toString('ascii'));
                        p += block_size;
                      }
                      break;

                    default:
                      throw new Error(
                        'Unknown graphic control label: 0x' + buf[p - 1].toString(16)
                      );
                  }
                  break;

                case 0x2c: // Image Descriptor.
                  var x = buf[p++] | (buf[p++] << 8);
                  var y = buf[p++] | (buf[p++] << 8);
                  var w = buf[p++] | (buf[p++] << 8);
                  var h = buf[p++] | (buf[p++] << 8);
                  var pf2 = buf[p++];
                  var local_palette_flag = pf2 >> 7;
                  var interlace_flag = (pf2 >> 6) & 1;
                  var num_local_colors_pow2 = pf2 & 0x7;
                  var num_local_colors = 1 << (num_local_colors_pow2 + 1);
                  var palette_offset = global_palette_offset;
                  var palette_size = global_palette_size;
                  var has_local_palette = false;
                  if (local_palette_flag) {
                    var has_local_palette = true;
                    palette_offset = p; // Override with local palette.
                    palette_size = num_local_colors;
                    p += num_local_colors * 3; // Seek past palette.
                  }

                  var data_offset = p;

                  p++; // codesize
                  while (true) {
                    var block_size = buf[p++];
                    // Bad block size (ex: undefined from an out of bounds read).
                    if (!(block_size >= 0)) throw Error('Invalid block size');
                    if (block_size === 0) break; // 0 size is terminator
                    p += block_size;
                  }

                  frames.push({
                    x: x,
                    y: y,
                    width: w,
                    height: h,
                    has_local_palette: has_local_palette,
                    palette_offset: palette_offset,
                    palette_size: palette_size,
                    data_offset: data_offset,
                    data_length: p - data_offset,
                    transparent_index: transparent_index,
                    interlaced: !!interlace_flag,
                    delay: delay,
                    disposal: disposal
                  });
                  break;

                case 0x3b: // Trailer Marker (end of file).
                  no_eof = false;
                  break;

                default:
                  throw new Error('Unknown gif block: 0x' + buf[p - 1].toString(16));
                  break;
              }
            }

            this.numFrames = function() {
              return frames.length;
            };

            this.loopCount = function() {
              return loop_count;
            };

            this.frameInfo = function(frame_num) {
              if (frame_num < 0 || frame_num >= frames.length)
                throw new Error('Frame index out of range.');
              return frames[frame_num];
            };

            this.decodeAndBlitFrameBGRA = function(frame_num, pixels) {
              var frame = this.frameInfo(frame_num);
              var num_pixels = frame.width * frame.height;
              var index_stream = new Uint8Array(num_pixels); // At most 8-bit indices.
              GifReaderLZWOutputIndexStream(
                buf,
                frame.data_offset,
                index_stream,
                num_pixels
              );
              var palette_offset = frame.palette_offset;

              // NOTE(deanm): It seems to be much faster to compare index to 256 than
              // to === null.  Not sure why, but CompareStub_EQ_STRICT shows up high in
              // the profile, not sure if it's related to using a Uint8Array.
              var trans = frame.transparent_index;
              if (trans === null) trans = 256;

              // We are possibly just blitting to a portion of the entire frame.
              // That is a subrect within the framerect, so the additional pixels
              // must be skipped over after we finished a scanline.
              var framewidth = frame.width;
              var framestride = width - framewidth;
              var xleft = framewidth; // Number of subrect pixels left in scanline.

              // Output indicies of the top left and bottom right corners of the subrect.
              var opbeg = (frame.y * width + frame.x) * 4;
              var opend = ((frame.y + frame.height) * width + frame.x) * 4;
              var op = opbeg;

              var scanstride = framestride * 4;

              // Use scanstride to skip past the rows when interlacing.  This is skipping
              // 7 rows for the first two passes, then 3 then 1.
              if (frame.interlaced === true) {
                scanstride += width * 4 * 7; // Pass 1.
              }

              var interlaceskip = 8; // Tracking the row interval in the current pass.

              for (var i = 0, il = index_stream.length; i < il; ++i) {
                var index = index_stream[i];

                if (xleft === 0) {
                  // Beginning of new scan line
                  op += scanstride;
                  xleft = framewidth;
                  if (op >= opend) {
                    // Catch the wrap to switch passes when interlacing.
                    scanstride = framestride * 4 + width * 4 * (interlaceskip - 1);
                    // interlaceskip / 2 * 4 is interlaceskip << 1.
                    op = opbeg + (framewidth + framestride) * (interlaceskip << 1);
                    interlaceskip >>= 1;
                  }
                }

                if (index === trans) {
                  op += 4;
                } else {
                  var r = buf[palette_offset + index * 3];
                  var g = buf[palette_offset + index * 3 + 1];
                  var b = buf[palette_offset + index * 3 + 2];
                  pixels[op++] = b;
                  pixels[op++] = g;
                  pixels[op++] = r;
                  pixels[op++] = 255;
                }
                --xleft;
              }
            };

            // I will go to copy and paste hell one day...
            this.decodeAndBlitFrameRGBA = function(frame_num, pixels) {
              var frame = this.frameInfo(frame_num);
              var num_pixels = frame.width * frame.height;
              var index_stream = new Uint8Array(num_pixels); // At most 8-bit indices.
              GifReaderLZWOutputIndexStream(
                buf,
                frame.data_offset,
                index_stream,
                num_pixels
              );
              var palette_offset = frame.palette_offset;

              // NOTE(deanm): It seems to be much faster to compare index to 256 than
              // to === null.  Not sure why, but CompareStub_EQ_STRICT shows up high in
              // the profile, not sure if it's related to using a Uint8Array.
              var trans = frame.transparent_index;
              if (trans === null) trans = 256;

              // We are possibly just blitting to a portion of the entire frame.
              // That is a subrect within the framerect, so the additional pixels
              // must be skipped over after we finished a scanline.
              var framewidth = frame.width;
              var framestride = width - framewidth;
              var xleft = framewidth; // Number of subrect pixels left in scanline.

              // Output indicies of the top left and bottom right corners of the subrect.
              var opbeg = (frame.y * width + frame.x) * 4;
              var opend = ((frame.y + frame.height) * width + frame.x) * 4;
              var op = opbeg;

              var scanstride = framestride * 4;

              // Use scanstride to skip past the rows when interlacing.  This is skipping
              // 7 rows for the first two passes, then 3 then 1.
              if (frame.interlaced === true) {
                scanstride += width * 4 * 7; // Pass 1.
              }

              var interlaceskip = 8; // Tracking the row interval in the current pass.

              for (var i = 0, il = index_stream.length; i < il; ++i) {
                var index = index_stream[i];

                if (xleft === 0) {
                  // Beginning of new scan line
                  op += scanstride;
                  xleft = framewidth;
                  if (op >= opend) {
                    // Catch the wrap to switch passes when interlacing.
                    scanstride = framestride * 4 + width * 4 * (interlaceskip - 1);
                    // interlaceskip / 2 * 4 is interlaceskip << 1.
                    op = opbeg + (framewidth + framestride) * (interlaceskip << 1);
                    interlaceskip >>= 1;
                  }
                }

                if (index === trans) {
                  op += 4;
                } else {
                  var r = buf[palette_offset + index * 3];
                  var g = buf[palette_offset + index * 3 + 1];
                  var b = buf[palette_offset + index * 3 + 2];
                  pixels[op++] = r;
                  pixels[op++] = g;
                  pixels[op++] = b;
                  pixels[op++] = 255;
                }
                --xleft;
              }
            };
          }

          function GifReaderLZWOutputIndexStream(code_stream, p, output, output_length) {
            var min_code_size = code_stream[p++];

            var clear_code = 1 << min_code_size;
            var eoi_code = clear_code + 1;
            var next_code = eoi_code + 1;

            var cur_code_size = min_code_size + 1; // Number of bits per code.
            // NOTE: This shares the same name as the encoder, but has a different
            // meaning here.  Here this masks each code coming from the code stream.
            var code_mask = (1 << cur_code_size) - 1;
            var cur_shift = 0;
            var cur = 0;

            var op = 0; // Output pointer.

            var subblock_size = code_stream[p++];

            // TODO(deanm): Would using a TypedArray be any faster?  At least it would
            // solve the fast mode / backing store uncertainty.
            // var code_table = Array(4096);
            var code_table = new Int32Array(4096); // Can be signed, we only use 20 bits.

            var prev_code = null; // Track code-1.

            while (true) {
              // Read up to two bytes, making sure we always 12-bits for max sized code.
              while (cur_shift < 16) {
                if (subblock_size === 0) break; // No more data to be read.

                cur |= code_stream[p++] << cur_shift;
                cur_shift += 8;

                if (subblock_size === 1) {
                  // Never let it get to 0 to hold logic above.
                  subblock_size = code_stream[p++]; // Next subblock.
                } else {
                  --subblock_size;
                }
              }

              // TODO(deanm): We should never really get here, we should have received
              // and EOI.
              if (cur_shift < cur_code_size) break;

              var code = cur & code_mask;
              cur >>= cur_code_size;
              cur_shift -= cur_code_size;

              // TODO(deanm): Maybe should check that the first code was a clear code,
              // at least this is what you're supposed to do.  But actually our encoder
              // now doesn't emit a clear code first anyway.
              if (code === clear_code) {
                // We don't actually have to clear the table.  This could be a good idea
                // for greater error checking, but we don't really do any anyway.  We
                // will just track it with next_code and overwrite old entries.

                next_code = eoi_code + 1;
                cur_code_size = min_code_size + 1;
                code_mask = (1 << cur_code_size) - 1;

                // Don't update prev_code ?
                prev_code = null;
                continue;
              } else if (code === eoi_code) {
                break;
              }

              // We have a similar situation as the decoder, where we want to store
              // variable length entries (code table entries), but we want to do in a
              // faster manner than an array of arrays.  The code below stores sort of a
              // linked list within the code table, and then "chases" through it to
              // construct the dictionary entries.  When a new entry is created, just the
              // last byte is stored, and the rest (prefix) of the entry is only
              // referenced by its table entry.  Then the code chases through the
              // prefixes until it reaches a single byte code.  We have to chase twice,
              // first to compute the length, and then to actually copy the data to the
              // output (backwards, since we know the length).  The alternative would be
              // storing something in an intermediate stack, but that doesn't make any
              // more sense.  I implemented an approach where it also stored the length
              // in the code table, although it's a bit tricky because you run out of
              // bits (12 + 12 + 8), but I didn't measure much improvements (the table
              // entries are generally not the long).  Even when I created benchmarks for
              // very long table entries the complexity did not seem worth it.
              // The code table stores the prefix entry in 12 bits and then the suffix
              // byte in 8 bits, so each entry is 20 bits.

              var chase_code = code < next_code ? code : prev_code;

              // Chase what we will output, either {CODE} or {CODE-1}.
              var chase_length = 0;
              var chase = chase_code;
              while (chase > clear_code) {
                chase = code_table[chase] >> 8;
                ++chase_length;
              }

              var k = chase;

              var op_end = op + chase_length + (chase_code !== code ? 1 : 0);
              if (op_end > output_length) {
                console.log('Warning, gif stream longer than expected.');
                return;
              }

              // Already have the first byte from the chase, might as well write it fast.
              output[op++] = k;

              op += chase_length;
              var b = op; // Track pointer, writing backwards.

              if (chase_code !== code)
                // The case of emitting {CODE-1} + k.
                output[op++] = k;

              chase = chase_code;
              while (chase_length--) {
                chase = code_table[chase];
                output[--b] = chase & 0xff; // Write backwards.
                chase >>= 8; // Pull down to the prefix code.
              }

              if (prev_code !== null && next_code < 4096) {
                code_table[next_code++] = (prev_code << 8) | k;
                // TODO(deanm): Figure out this clearing vs code growth logic better.  I
                // have an feeling that it should just happen somewhere else, for now it
                // is awkward between when we grow past the max and then hit a clear code.
                // For now just check if we hit the max 12-bits (then a clear code should
                // follow, also of course encoded in 12-bits).
                if (next_code >= code_mask + 1 && cur_code_size < 12) {
                  ++cur_code_size;
                  code_mask = (code_mask << 1) | 1;
                }
              }

              prev_code = code;
            }

            if (op !== output_length) {
              console.log('Warning, gif stream shorter than expected.');
            }

            return output;
          }

          // CommonJS.
          try {
            exports.GifWriter = GifWriter;
            exports.GifReader = GifReader;
          } catch (e) {}
        },
        {}
      ],
      258: [
        function(_dereq_, module, exports) {
          (function(Buffer) {
            /**
             * https://opentype.js.org v0.9.0 | (c) Frederik De Bleser and other contributors | MIT License | Uses tiny-inflate by Devon Govett and string.prototype.codepointat polyfill by Mathias Bynens
             */

            (function(global, factory) {
              typeof exports === 'object' && typeof module !== 'undefined'
                ? factory(exports)
                : typeof define === 'function' && define.amd
                  ? define(['exports'], factory)
                  : factory((global.opentype = {}));
            })(this, function(exports) {
              'use strict';

              /*! https://mths.be/codepointat v0.2.0 by @mathias */
              if (!String.prototype.codePointAt) {
                (function() {
                  var defineProperty = (function() {
                    // IE 8 only supports `Object.defineProperty` on DOM elements
                    try {
                      var object = {};
                      var $defineProperty = Object.defineProperty;
                      var result =
                        $defineProperty(object, object, object) && $defineProperty;
                    } catch (error) {}
                    return result;
                  })();
                  var codePointAt = function(position) {
                    if (this == null) {
                      throw TypeError();
                    }
                    var string = String(this);
                    var size = string.length;
                    // `ToInteger`
                    var index = position ? Number(position) : 0;
                    if (index != index) {
                      // better `isNaN`
                      index = 0;
                    }
                    // Account for out-of-bounds indices:
                    if (index < 0 || index >= size) {
                      return undefined;
                    }
                    // Get the first code unit
                    var first = string.charCodeAt(index);
                    var second;
                    if (
                      // check if it’s the start of a surrogate pair
                      first >= 0xd800 &&
                      first <= 0xdbff && // high surrogate
                      size > index + 1 // there is a next code unit
                    ) {
                      second = string.charCodeAt(index + 1);
                      if (second >= 0xdc00 && second <= 0xdfff) {
                        // low surrogate
                        // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
                        return (first - 0xd800) * 0x400 + second - 0xdc00 + 0x10000;
                      }
                    }
                    return first;
                  };
                  if (defineProperty) {
                    defineProperty(String.prototype, 'codePointAt', {
                      value: codePointAt,
                      configurable: true,
                      writable: true
                    });
                  } else {
                    String.prototype.codePointAt = codePointAt;
                  }
                })();
              }

              var TINF_OK = 0;
              var TINF_DATA_ERROR = -3;

              function Tree() {
                this.table = new Uint16Array(16); /* table of code length counts */
                this.trans = new Uint16Array(288); /* code -> symbol translation table */
              }

              function Data(source, dest) {
                this.source = source;
                this.sourceIndex = 0;
                this.tag = 0;
                this.bitcount = 0;

                this.dest = dest;
                this.destLen = 0;

                this.ltree = new Tree(); /* dynamic length/symbol tree */
                this.dtree = new Tree(); /* dynamic distance tree */
              }

              /* --------------------------------------------------- *
	 * -- uninitialized global data (static structures) -- *
	 * --------------------------------------------------- */

              var sltree = new Tree();
              var sdtree = new Tree();

              /* extra bits and base tables for length codes */
              var length_bits = new Uint8Array(30);
              var length_base = new Uint16Array(30);

              /* extra bits and base tables for distance codes */
              var dist_bits = new Uint8Array(30);
              var dist_base = new Uint16Array(30);

              /* special ordering of code length codes */
              var clcidx = new Uint8Array([
                16,
                17,
                18,
                0,
                8,
                7,
                9,
                6,
                10,
                5,
                11,
                4,
                12,
                3,
                13,
                2,
                14,
                1,
                15
              ]);

              /* used by tinf_decode_trees, avoids allocations every call */
              var code_tree = new Tree();
              var lengths = new Uint8Array(288 + 32);

              /* ----------------------- *
	 * -- utility functions -- *
	 * ----------------------- */

              /* build extra bits and base tables */
              function tinf_build_bits_base(bits, base, delta, first) {
                var i, sum;

                /* build bits table */
                for (i = 0; i < delta; ++i) {
                  bits[i] = 0;
                }
                for (i = 0; i < 30 - delta; ++i) {
                  bits[i + delta] = (i / delta) | 0;
                }

                /* build base table */
                for (sum = first, i = 0; i < 30; ++i) {
                  base[i] = sum;
                  sum += 1 << bits[i];
                }
              }

              /* build the fixed huffman trees */
              function tinf_build_fixed_trees(lt, dt) {
                var i;

                /* build fixed length tree */
                for (i = 0; i < 7; ++i) {
                  lt.table[i] = 0;
                }

                lt.table[7] = 24;
                lt.table[8] = 152;
                lt.table[9] = 112;

                for (i = 0; i < 24; ++i) {
                  lt.trans[i] = 256 + i;
                }
                for (i = 0; i < 144; ++i) {
                  lt.trans[24 + i] = i;
                }
                for (i = 0; i < 8; ++i) {
                  lt.trans[24 + 144 + i] = 280 + i;
                }
                for (i = 0; i < 112; ++i) {
                  lt.trans[24 + 144 + 8 + i] = 144 + i;
                }

                /* build fixed distance tree */
                for (i = 0; i < 5; ++i) {
                  dt.table[i] = 0;
                }

                dt.table[5] = 32;

                for (i = 0; i < 32; ++i) {
                  dt.trans[i] = i;
                }
              }

              /* given an array of code lengths, build a tree */
              var offs = new Uint16Array(16);

              function tinf_build_tree(t, lengths, off, num) {
                var i, sum;

                /* clear code length count table */
                for (i = 0; i < 16; ++i) {
                  t.table[i] = 0;
                }

                /* scan symbol lengths, and sum code length counts */
                for (i = 0; i < num; ++i) {
                  t.table[lengths[off + i]]++;
                }

                t.table[0] = 0;

                /* compute offset table for distribution sort */
                for (sum = 0, i = 0; i < 16; ++i) {
                  offs[i] = sum;
                  sum += t.table[i];
                }

                /* create code->symbol translation table (symbols sorted by code) */
                for (i = 0; i < num; ++i) {
                  if (lengths[off + i]) {
                    t.trans[offs[lengths[off + i]]++] = i;
                  }
                }
              }

              /* ---------------------- *
	 * -- decode functions -- *
	 * ---------------------- */

              /* get one bit from source stream */
              function tinf_getbit(d) {
                /* check if tag is empty */
                if (!d.bitcount--) {
                  /* load next tag */
                  d.tag = d.source[d.sourceIndex++];
                  d.bitcount = 7;
                }

                /* shift bit out of tag */
                var bit = d.tag & 1;
                d.tag >>>= 1;

                return bit;
              }

              /* read a num bit value from a stream and add base */
              function tinf_read_bits(d, num, base) {
                if (!num) {
                  return base;
                }

                while (d.bitcount < 24) {
                  d.tag |= d.source[d.sourceIndex++] << d.bitcount;
                  d.bitcount += 8;
                }

                var val = d.tag & (0xffff >>> (16 - num));
                d.tag >>>= num;
                d.bitcount -= num;
                return val + base;
              }

              /* given a data stream and a tree, decode a symbol */
              function tinf_decode_symbol(d, t) {
                while (d.bitcount < 24) {
                  d.tag |= d.source[d.sourceIndex++] << d.bitcount;
                  d.bitcount += 8;
                }

                var sum = 0,
                  cur = 0,
                  len = 0;
                var tag = d.tag;

                /* get more bits while code value is above sum */
                do {
                  cur = 2 * cur + (tag & 1);
                  tag >>>= 1;
                  ++len;

                  sum += t.table[len];
                  cur -= t.table[len];
                } while (cur >= 0);

                d.tag = tag;
                d.bitcount -= len;

                return t.trans[sum + cur];
              }

              /* given a data stream, decode dynamic trees from it */
              function tinf_decode_trees(d, lt, dt) {
                var hlit, hdist, hclen;
                var i, num, length;

                /* get 5 bits HLIT (257-286) */
                hlit = tinf_read_bits(d, 5, 257);

                /* get 5 bits HDIST (1-32) */
                hdist = tinf_read_bits(d, 5, 1);

                /* get 4 bits HCLEN (4-19) */
                hclen = tinf_read_bits(d, 4, 4);

                for (i = 0; i < 19; ++i) {
                  lengths[i] = 0;
                }

                /* read code lengths for code length alphabet */
                for (i = 0; i < hclen; ++i) {
                  /* get 3 bits code length (0-7) */
                  var clen = tinf_read_bits(d, 3, 0);
                  lengths[clcidx[i]] = clen;
                }

                /* build code length tree */
                tinf_build_tree(code_tree, lengths, 0, 19);

                /* decode code lengths for the dynamic trees */
                for (num = 0; num < hlit + hdist; ) {
                  var sym = tinf_decode_symbol(d, code_tree);

                  switch (sym) {
                    case 16:
                      /* copy previous code length 3-6 times (read 2 bits) */
                      var prev = lengths[num - 1];
                      for (length = tinf_read_bits(d, 2, 3); length; --length) {
                        lengths[num++] = prev;
                      }
                      break;
                    case 17:
                      /* repeat code length 0 for 3-10 times (read 3 bits) */
                      for (length = tinf_read_bits(d, 3, 3); length; --length) {
                        lengths[num++] = 0;
                      }
                      break;
                    case 18:
                      /* repeat code length 0 for 11-138 times (read 7 bits) */
                      for (length = tinf_read_bits(d, 7, 11); length; --length) {
                        lengths[num++] = 0;
                      }
                      break;
                    default:
                      /* values 0-15 represent the actual code lengths */
                      lengths[num++] = sym;
                      break;
                  }
                }

                /* build dynamic trees */
                tinf_build_tree(lt, lengths, 0, hlit);
                tinf_build_tree(dt, lengths, hlit, hdist);
              }

              /* ----------------------------- *
	 * -- block inflate functions -- *
	 * ----------------------------- */

              /* given a stream and two trees, inflate a block of data */
              function tinf_inflate_block_data(d, lt, dt) {
                while (1) {
                  var sym = tinf_decode_symbol(d, lt);

                  /* check for end of block */
                  if (sym === 256) {
                    return TINF_OK;
                  }

                  if (sym < 256) {
                    d.dest[d.destLen++] = sym;
                  } else {
                    var length, dist, offs;
                    var i;

                    sym -= 257;

                    /* possibly get more bits from length code */
                    length = tinf_read_bits(d, length_bits[sym], length_base[sym]);

                    dist = tinf_decode_symbol(d, dt);

                    /* possibly get more bits from distance code */
                    offs = d.destLen - tinf_read_bits(d, dist_bits[dist], dist_base[dist]);

                    /* copy match */
                    for (i = offs; i < offs + length; ++i) {
                      d.dest[d.destLen++] = d.dest[i];
                    }
                  }
                }
              }

              /* inflate an uncompressed block of data */
              function tinf_inflate_uncompressed_block(d) {
                var length, invlength;
                var i;

                /* unread from bitbuffer */
                while (d.bitcount > 8) {
                  d.sourceIndex--;
                  d.bitcount -= 8;
                }

                /* get length */
                length = d.source[d.sourceIndex + 1];
                length = 256 * length + d.source[d.sourceIndex];

                /* get one's complement of length */
                invlength = d.source[d.sourceIndex + 3];
                invlength = 256 * invlength + d.source[d.sourceIndex + 2];

                /* check length */
                if (length !== (~invlength & 0x0000ffff)) {
                  return TINF_DATA_ERROR;
                }

                d.sourceIndex += 4;

                /* copy block */
                for (i = length; i; --i) {
                  d.dest[d.destLen++] = d.source[d.sourceIndex++];
                }

                /* make sure we start next block on a byte boundary */
                d.bitcount = 0;

                return TINF_OK;
              }

              /* inflate stream from source to dest */
              function tinf_uncompress(source, dest) {
                var d = new Data(source, dest);
                var bfinal, btype, res;

                do {
                  /* read final block flag */
                  bfinal = tinf_getbit(d);

                  /* read block type (2 bits) */
                  btype = tinf_read_bits(d, 2, 0);

                  /* decompress block */
                  switch (btype) {
                    case 0:
                      /* decompress uncompressed block */
                      res = tinf_inflate_uncompressed_block(d);
                      break;
                    case 1:
                      /* decompress block with fixed huffman trees */
                      res = tinf_inflate_block_data(d, sltree, sdtree);
                      break;
                    case 2:
                      /* decompress block with dynamic huffman trees */
                      tinf_decode_trees(d, d.ltree, d.dtree);
                      res = tinf_inflate_block_data(d, d.ltree, d.dtree);
                      break;
                    default:
                      res = TINF_DATA_ERROR;
                  }

                  if (res !== TINF_OK) {
                    throw new Error('Data error');
                  }
                } while (!bfinal);

                if (d.destLen < d.dest.length) {
                  if (typeof d.dest.slice === 'function') {
                    return d.dest.slice(0, d.destLen);
                  } else {
                    return d.dest.subarray(0, d.destLen);
                  }
                }

                return d.dest;
              }

              /* -------------------- *
	 * -- initialization -- *
	 * -------------------- */

              /* build fixed huffman trees */
              tinf_build_fixed_trees(sltree, sdtree);

              /* build extra bits and base tables */
              tinf_build_bits_base(length_bits, length_base, 4, 3);
              tinf_build_bits_base(dist_bits, dist_base, 2, 1);

              /* fix a special case */
              length_bits[28] = 0;
              length_base[28] = 258;

              var tinyInflate = tinf_uncompress;

              // The Bounding Box object

              function derive(v0, v1, v2, v3, t) {
                return (
                  Math.pow(1 - t, 3) * v0 +
                  3 * Math.pow(1 - t, 2) * t * v1 +
                  3 * (1 - t) * Math.pow(t, 2) * v2 +
                  Math.pow(t, 3) * v3
                );
              }
              /**
               * A bounding box is an enclosing box that describes the smallest measure within which all the points lie.
               * It is used to calculate the bounding box of a glyph or text path.
               *
               * On initialization, x1/y1/x2/y2 will be NaN. Check if the bounding box is empty using `isEmpty()`.
               *
               * @exports opentype.BoundingBox
               * @class
               * @constructor
               */
              function BoundingBox() {
                this.x1 = Number.NaN;
                this.y1 = Number.NaN;
                this.x2 = Number.NaN;
                this.y2 = Number.NaN;
              }

              /**
               * Returns true if the bounding box is empty, that is, no points have been added to the box yet.
               */
              BoundingBox.prototype.isEmpty = function() {
                return isNaN(this.x1) || isNaN(this.y1) || isNaN(this.x2) || isNaN(this.y2);
              };

              /**
               * Add the point to the bounding box.
               * The x1/y1/x2/y2 coordinates of the bounding box will now encompass the given point.
               * @param {number} x - The X coordinate of the point.
               * @param {number} y - The Y coordinate of the point.
               */
              BoundingBox.prototype.addPoint = function(x, y) {
                if (typeof x === 'number') {
                  if (isNaN(this.x1) || isNaN(this.x2)) {
                    this.x1 = x;
                    this.x2 = x;
                  }
                  if (x < this.x1) {
                    this.x1 = x;
                  }
                  if (x > this.x2) {
                    this.x2 = x;
                  }
                }
                if (typeof y === 'number') {
                  if (isNaN(this.y1) || isNaN(this.y2)) {
                    this.y1 = y;
                    this.y2 = y;
                  }
                  if (y < this.y1) {
                    this.y1 = y;
                  }
                  if (y > this.y2) {
                    this.y2 = y;
                  }
                }
              };

              /**
               * Add a X coordinate to the bounding box.
               * This extends the bounding box to include the X coordinate.
               * This function is used internally inside of addBezier.
               * @param {number} x - The X coordinate of the point.
               */
              BoundingBox.prototype.addX = function(x) {
                this.addPoint(x, null);
              };

              /**
               * Add a Y coordinate to the bounding box.
               * This extends the bounding box to include the Y coordinate.
               * This function is used internally inside of addBezier.
               * @param {number} y - The Y coordinate of the point.
               */
              BoundingBox.prototype.addY = function(y) {
                this.addPoint(null, y);
              };

              /**
               * Add a Bézier curve to the bounding box.
               * This extends the bounding box to include the entire Bézier.
               * @param {number} x0 - The starting X coordinate.
               * @param {number} y0 - The starting Y coordinate.
               * @param {number} x1 - The X coordinate of the first control point.
               * @param {number} y1 - The Y coordinate of the first control point.
               * @param {number} x2 - The X coordinate of the second control point.
               * @param {number} y2 - The Y coordinate of the second control point.
               * @param {number} x - The ending X coordinate.
               * @param {number} y - The ending Y coordinate.
               */
              BoundingBox.prototype.addBezier = function(x0, y0, x1, y1, x2, y2, x, y) {
                var this$1 = this;

                // This code is based on http://nishiohirokazu.blogspot.com/2009/06/how-to-calculate-bezier-curves-bounding.html
                // and https://github.com/icons8/svg-path-bounding-box

                var p0 = [x0, y0];
                var p1 = [x1, y1];
                var p2 = [x2, y2];
                var p3 = [x, y];

                this.addPoint(x0, y0);
                this.addPoint(x, y);

                for (var i = 0; i <= 1; i++) {
                  var b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];
                  var a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];
                  var c = 3 * p1[i] - 3 * p0[i];

                  if (a === 0) {
                    if (b === 0) {
                      continue;
                    }
                    var t = -c / b;
                    if (0 < t && t < 1) {
                      if (i === 0) {
                        this$1.addX(derive(p0[i], p1[i], p2[i], p3[i], t));
                      }
                      if (i === 1) {
                        this$1.addY(derive(p0[i], p1[i], p2[i], p3[i], t));
                      }
                    }
                    continue;
                  }

                  var b2ac = Math.pow(b, 2) - 4 * c * a;
                  if (b2ac < 0) {
                    continue;
                  }
                  var t1 = (-b + Math.sqrt(b2ac)) / (2 * a);
                  if (0 < t1 && t1 < 1) {
                    if (i === 0) {
                      this$1.addX(derive(p0[i], p1[i], p2[i], p3[i], t1));
                    }
                    if (i === 1) {
                      this$1.addY(derive(p0[i], p1[i], p2[i], p3[i], t1));
                    }
                  }
                  var t2 = (-b - Math.sqrt(b2ac)) / (2 * a);
                  if (0 < t2 && t2 < 1) {
                    if (i === 0) {
                      this$1.addX(derive(p0[i], p1[i], p2[i], p3[i], t2));
                    }
                    if (i === 1) {
                      this$1.addY(derive(p0[i], p1[i], p2[i], p3[i], t2));
                    }
                  }
                }
              };

              /**
               * Add a quadratic curve to the bounding box.
               * This extends the bounding box to include the entire quadratic curve.
               * @param {number} x0 - The starting X coordinate.
               * @param {number} y0 - The starting Y coordinate.
               * @param {number} x1 - The X coordinate of the control point.
               * @param {number} y1 - The Y coordinate of the control point.
               * @param {number} x - The ending X coordinate.
               * @param {number} y - The ending Y coordinate.
               */
              BoundingBox.prototype.addQuad = function(x0, y0, x1, y1, x, y) {
                var cp1x = x0 + 2 / 3 * (x1 - x0);
                var cp1y = y0 + 2 / 3 * (y1 - y0);
                var cp2x = cp1x + 1 / 3 * (x - x0);
                var cp2y = cp1y + 1 / 3 * (y - y0);
                this.addBezier(x0, y0, cp1x, cp1y, cp2x, cp2y, x, y);
              };

              // Geometric objects

              /**
               * A bézier path containing a set of path commands similar to a SVG path.
               * Paths can be drawn on a context using `draw`.
               * @exports opentype.Path
               * @class
               * @constructor
               */
              function Path() {
                this.commands = [];
                this.fill = 'black';
                this.stroke = null;
                this.strokeWidth = 1;
              }

              /**
               * @param  {number} x
               * @param  {number} y
               */
              Path.prototype.moveTo = function(x, y) {
                this.commands.push({
                  type: 'M',
                  x: x,
                  y: y
                });
              };

              /**
               * @param  {number} x
               * @param  {number} y
               */
              Path.prototype.lineTo = function(x, y) {
                this.commands.push({
                  type: 'L',
                  x: x,
                  y: y
                });
              };

              /**
               * Draws cubic curve
               * @function
               * curveTo
               * @memberof opentype.Path.prototype
               * @param  {number} x1 - x of control 1
               * @param  {number} y1 - y of control 1
               * @param  {number} x2 - x of control 2
               * @param  {number} y2 - y of control 2
               * @param  {number} x - x of path point
               * @param  {number} y - y of path point
               */

              /**
               * Draws cubic curve
               * @function
               * bezierCurveTo
               * @memberof opentype.Path.prototype
               * @param  {number} x1 - x of control 1
               * @param  {number} y1 - y of control 1
               * @param  {number} x2 - x of control 2
               * @param  {number} y2 - y of control 2
               * @param  {number} x - x of path point
               * @param  {number} y - y of path point
               * @see curveTo
               */
              Path.prototype.curveTo = Path.prototype.bezierCurveTo = function(
                x1,
                y1,
                x2,
                y2,
                x,
                y
              ) {
                this.commands.push({
                  type: 'C',
                  x1: x1,
                  y1: y1,
                  x2: x2,
                  y2: y2,
                  x: x,
                  y: y
                });
              };

              /**
               * Draws quadratic curve
               * @function
               * quadraticCurveTo
               * @memberof opentype.Path.prototype
               * @param  {number} x1 - x of control
               * @param  {number} y1 - y of control
               * @param  {number} x - x of path point
               * @param  {number} y - y of path point
               */

              /**
               * Draws quadratic curve
               * @function
               * quadTo
               * @memberof opentype.Path.prototype
               * @param  {number} x1 - x of control
               * @param  {number} y1 - y of control
               * @param  {number} x - x of path point
               * @param  {number} y - y of path point
               */
              Path.prototype.quadTo = Path.prototype.quadraticCurveTo = function(
                x1,
                y1,
                x,
                y
              ) {
                this.commands.push({
                  type: 'Q',
                  x1: x1,
                  y1: y1,
                  x: x,
                  y: y
                });
              };

              /**
               * Closes the path
               * @function closePath
               * @memberof opentype.Path.prototype
               */

              /**
               * Close the path
               * @function close
               * @memberof opentype.Path.prototype
               */
              Path.prototype.close = Path.prototype.closePath = function() {
                this.commands.push({
                  type: 'Z'
                });
              };

              /**
               * Add the given path or list of commands to the commands of this path.
               * @param  {Array} pathOrCommands - another opentype.Path, an opentype.BoundingBox, or an array of commands.
               */
              Path.prototype.extend = function(pathOrCommands) {
                if (pathOrCommands.commands) {
                  pathOrCommands = pathOrCommands.commands;
                } else if (pathOrCommands instanceof BoundingBox) {
                  var box = pathOrCommands;
                  this.moveTo(box.x1, box.y1);
                  this.lineTo(box.x2, box.y1);
                  this.lineTo(box.x2, box.y2);
                  this.lineTo(box.x1, box.y2);
                  this.close();
                  return;
                }

                Array.prototype.push.apply(this.commands, pathOrCommands);
              };

              /**
               * Calculate the bounding box of the path.
               * @returns {opentype.BoundingBox}
               */
              Path.prototype.getBoundingBox = function() {
                var this$1 = this;

                var box = new BoundingBox();

                var startX = 0;
                var startY = 0;
                var prevX = 0;
                var prevY = 0;
                for (var i = 0; i < this.commands.length; i++) {
                  var cmd = this$1.commands[i];
                  switch (cmd.type) {
                    case 'M':
                      box.addPoint(cmd.x, cmd.y);
                      startX = prevX = cmd.x;
                      startY = prevY = cmd.y;
                      break;
                    case 'L':
                      box.addPoint(cmd.x, cmd.y);
                      prevX = cmd.x;
                      prevY = cmd.y;
                      break;
                    case 'Q':
                      box.addQuad(prevX, prevY, cmd.x1, cmd.y1, cmd.x, cmd.y);
                      prevX = cmd.x;
                      prevY = cmd.y;
                      break;
                    case 'C':
                      box.addBezier(
                        prevX,
                        prevY,
                        cmd.x1,
                        cmd.y1,
                        cmd.x2,
                        cmd.y2,
                        cmd.x,
                        cmd.y
                      );
                      prevX = cmd.x;
                      prevY = cmd.y;
                      break;
                    case 'Z':
                      prevX = startX;
                      prevY = startY;
                      break;
                    default:
                      throw new Error('Unexpected path command ' + cmd.type);
                  }
                }
                if (box.isEmpty()) {
                  box.addPoint(0, 0);
                }
                return box;
              };

              /**
               * Draw the path to a 2D context.
               * @param {CanvasRenderingContext2D} ctx - A 2D drawing context.
               */
              Path.prototype.draw = function(ctx) {
                var this$1 = this;

                ctx.beginPath();
                for (var i = 0; i < this.commands.length; i += 1) {
                  var cmd = this$1.commands[i];
                  if (cmd.type === 'M') {
                    ctx.moveTo(cmd.x, cmd.y);
                  } else if (cmd.type === 'L') {
                    ctx.lineTo(cmd.x, cmd.y);
                  } else if (cmd.type === 'C') {
                    ctx.bezierCurveTo(cmd.x1, cmd.y1, cmd.x2, cmd.y2, cmd.x, cmd.y);
                  } else if (cmd.type === 'Q') {
                    ctx.quadraticCurveTo(cmd.x1, cmd.y1, cmd.x, cmd.y);
                  } else if (cmd.type === 'Z') {
                    ctx.closePath();
                  }
                }

                if (this.fill) {
                  ctx.fillStyle = this.fill;
                  ctx.fill();
                }

                if (this.stroke) {
                  ctx.strokeStyle = this.stroke;
                  ctx.lineWidth = this.strokeWidth;
                  ctx.stroke();
                }
              };

              /**
               * Convert the Path to a string of path data instructions
               * See http://www.w3.org/TR/SVG/paths.html#PathData
               * @param  {number} [decimalPlaces=2] - The amount of decimal places for floating-point values
               * @return {string}
               */
              Path.prototype.toPathData = function(decimalPlaces) {
                var this$1 = this;

                decimalPlaces = decimalPlaces !== undefined ? decimalPlaces : 2;

                function floatToString(v) {
                  if (Math.round(v) === v) {
                    return '' + Math.round(v);
                  } else {
                    return v.toFixed(decimalPlaces);
                  }
                }

                function packValues() {
                  var arguments$1 = arguments;

                  var s = '';
                  for (var i = 0; i < arguments.length; i += 1) {
                    var v = arguments$1[i];
                    if (v >= 0 && i > 0) {
                      s += ' ';
                    }

                    s += floatToString(v);
                  }

                  return s;
                }

                var d = '';
                for (var i = 0; i < this.commands.length; i += 1) {
                  var cmd = this$1.commands[i];
                  if (cmd.type === 'M') {
                    d += 'M' + packValues(cmd.x, cmd.y);
                  } else if (cmd.type === 'L') {
                    d += 'L' + packValues(cmd.x, cmd.y);
                  } else if (cmd.type === 'C') {
                    d += 'C' + packValues(cmd.x1, cmd.y1, cmd.x2, cmd.y2, cmd.x, cmd.y);
                  } else if (cmd.type === 'Q') {
                    d += 'Q' + packValues(cmd.x1, cmd.y1, cmd.x, cmd.y);
                  } else if (cmd.type === 'Z') {
                    d += 'Z';
                  }
                }

                return d;
              };

              /**
               * Convert the path to an SVG <path> element, as a string.
               * @param  {number} [decimalPlaces=2] - The amount of decimal places for floating-point values
               * @return {string}
               */
              Path.prototype.toSVG = function(decimalPlaces) {
                var svg = '<path d="';
                svg += this.toPathData(decimalPlaces);
                svg += '"';
                if (this.fill && this.fill !== 'black') {
                  if (this.fill === null) {
                    svg += ' fill="none"';
                  } else {
                    svg += ' fill="' + this.fill + '"';
                  }
                }

                if (this.stroke) {
                  svg +=
                    ' stroke="' + this.stroke + '" stroke-width="' + this.strokeWidth + '"';
                }

                svg += '/>';
                return svg;
              };

              /**
               * Convert the path to a DOM element.
               * @param  {number} [decimalPlaces=2] - The amount of decimal places for floating-point values
               * @return {SVGPathElement}
               */
              Path.prototype.toDOMElement = function(decimalPlaces) {
                var temporaryPath = this.toPathData(decimalPlaces);
                var newPath = document.createElementNS(
                  'http://www.w3.org/2000/svg',
                  'path'
                );

                newPath.setAttribute('d', temporaryPath);

                return newPath;
              };

              // Run-time checking of preconditions.

              function fail(message) {
                throw new Error(message);
              }

              // Precondition function that checks if the given predicate is true.
              // If not, it will throw an error.
              function argument(predicate, message) {
                if (!predicate) {
                  fail(message);
                }
              }
              var check = { fail: fail, argument: argument, assert: argument };

              // Data types used in the OpenType font file.

              var LIMIT16 = 32768; // The limit at which a 16-bit number switches signs == 2^15
              var LIMIT32 = 2147483648; // The limit at which a 32-bit number switches signs == 2 ^ 31

              /**
               * @exports opentype.decode
               * @class
               */
              var decode = {};
              /**
               * @exports opentype.encode
               * @class
               */
              var encode = {};
              /**
               * @exports opentype.sizeOf
               * @class
               */
              var sizeOf = {};

              // Return a function that always returns the same value.
              function constant(v) {
                return function() {
                  return v;
                };
              }

              // OpenType data types //////////////////////////////////////////////////////

              /**
               * Convert an 8-bit unsigned integer to a list of 1 byte.
               * @param {number}
               * @returns {Array}
               */
              encode.BYTE = function(v) {
                check.argument(
                  v >= 0 && v <= 255,
                  'Byte value should be between 0 and 255.'
                );
                return [v];
              };
              /**
               * @constant
               * @type {number}
               */
              sizeOf.BYTE = constant(1);

              /**
               * Convert a 8-bit signed integer to a list of 1 byte.
               * @param {string}
               * @returns {Array}
               */
              encode.CHAR = function(v) {
                return [v.charCodeAt(0)];
              };

              /**
               * @constant
               * @type {number}
               */
              sizeOf.CHAR = constant(1);

              /**
               * Convert an ASCII string to a list of bytes.
               * @param {string}
               * @returns {Array}
               */
              encode.CHARARRAY = function(v) {
                var b = [];
                for (var i = 0; i < v.length; i += 1) {
                  b[i] = v.charCodeAt(i);
                }

                return b;
              };

              /**
               * @param {Array}
               * @returns {number}
               */
              sizeOf.CHARARRAY = function(v) {
                return v.length;
              };

              /**
               * Convert a 16-bit unsigned integer to a list of 2 bytes.
               * @param {number}
               * @returns {Array}
               */
              encode.USHORT = function(v) {
                return [(v >> 8) & 0xff, v & 0xff];
              };

              /**
               * @constant
               * @type {number}
               */
              sizeOf.USHORT = constant(2);

              /**
               * Convert a 16-bit signed integer to a list of 2 bytes.
               * @param {number}
               * @returns {Array}
               */
              encode.SHORT = function(v) {
                // Two's complement
                if (v >= LIMIT16) {
                  v = -(2 * LIMIT16 - v);
                }

                return [(v >> 8) & 0xff, v & 0xff];
              };

              /**
               * @constant
               * @type {number}
               */
              sizeOf.SHORT = constant(2);

              /**
               * Convert a 24-bit unsigned integer to a list of 3 bytes.
               * @param {number}
               * @returns {Array}
               */
              encode.UINT24 = function(v) {
                return [(v >> 16) & 0xff, (v >> 8) & 0xff, v & 0xff];
              };

              /**
               * @constant
               * @type {number}
               */
              sizeOf.UINT24 = constant(3);

              /**
               * Convert a 32-bit unsigned integer to a list of 4 bytes.
               * @param {number}
               * @returns {Array}
               */
              encode.ULONG = function(v) {
                return [(v >> 24) & 0xff, (v >> 16) & 0xff, (v >> 8) & 0xff, v & 0xff];
              };

              /**
               * @constant
               * @type {number}
               */
              sizeOf.ULONG = constant(4);

              /**
               * Convert a 32-bit unsigned integer to a list of 4 bytes.
               * @param {number}
               * @returns {Array}
               */
              encode.LONG = function(v) {
                // Two's complement
                if (v >= LIMIT32) {
                  v = -(2 * LIMIT32 - v);
                }

                return [(v >> 24) & 0xff, (v >> 16) & 0xff, (v >> 8) & 0xff, v & 0xff];
              };

              /**
               * @constant
               * @type {number}
               */
              sizeOf.LONG = constant(4);

              encode.FIXED = encode.ULONG;
              sizeOf.FIXED = sizeOf.ULONG;

              encode.FWORD = encode.SHORT;
              sizeOf.FWORD = sizeOf.SHORT;

              encode.UFWORD = encode.USHORT;
              sizeOf.UFWORD = sizeOf.USHORT;

              /**
               * Convert a 32-bit Apple Mac timestamp integer to a list of 8 bytes, 64-bit timestamp.
               * @param {number}
               * @returns {Array}
               */
              encode.LONGDATETIME = function(v) {
                return [
                  0,
                  0,
                  0,
                  0,
                  (v >> 24) & 0xff,
                  (v >> 16) & 0xff,
                  (v >> 8) & 0xff,
                  v & 0xff
                ];
              };

              /**
               * @constant
               * @type {number}
               */
              sizeOf.LONGDATETIME = constant(8);

              /**
               * Convert a 4-char tag to a list of 4 bytes.
               * @param {string}
               * @returns {Array}
               */
              encode.TAG = function(v) {
                check.argument(v.length === 4, 'Tag should be exactly 4 ASCII characters.');
                return [v.charCodeAt(0), v.charCodeAt(1), v.charCodeAt(2), v.charCodeAt(3)];
              };

              /**
               * @constant
               * @type {number}
               */
              sizeOf.TAG = constant(4);

              // CFF data types ///////////////////////////////////////////////////////////

              encode.Card8 = encode.BYTE;
              sizeOf.Card8 = sizeOf.BYTE;

              encode.Card16 = encode.USHORT;
              sizeOf.Card16 = sizeOf.USHORT;

              encode.OffSize = encode.BYTE;
              sizeOf.OffSize = sizeOf.BYTE;

              encode.SID = encode.USHORT;
              sizeOf.SID = sizeOf.USHORT;

              // Convert a numeric operand or charstring number to a variable-size list of bytes.
              /**
               * Convert a numeric operand or charstring number to a variable-size list of bytes.
               * @param {number}
               * @returns {Array}
               */
              encode.NUMBER = function(v) {
                if (v >= -107 && v <= 107) {
                  return [v + 139];
                } else if (v >= 108 && v <= 1131) {
                  v = v - 108;
                  return [(v >> 8) + 247, v & 0xff];
                } else if (v >= -1131 && v <= -108) {
                  v = -v - 108;
                  return [(v >> 8) + 251, v & 0xff];
                } else if (v >= -32768 && v <= 32767) {
                  return encode.NUMBER16(v);
                } else {
                  return encode.NUMBER32(v);
                }
              };

              /**
               * @param {number}
               * @returns {number}
               */
              sizeOf.NUMBER = function(v) {
                return encode.NUMBER(v).length;
              };

              /**
               * Convert a signed number between -32768 and +32767 to a three-byte value.
               * This ensures we always use three bytes, but is not the most compact format.
               * @param {number}
               * @returns {Array}
               */
              encode.NUMBER16 = function(v) {
                return [28, (v >> 8) & 0xff, v & 0xff];
              };

              /**
               * @constant
               * @type {number}
               */
              sizeOf.NUMBER16 = constant(3);

              /**
               * Convert a signed number between -(2^31) and +(2^31-1) to a five-byte value.
               * This is useful if you want to be sure you always use four bytes,
               * at the expense of wasting a few bytes for smaller numbers.
               * @param {number}
               * @returns {Array}
               */
              encode.NUMBER32 = function(v) {
                return [29, (v >> 24) & 0xff, (v >> 16) & 0xff, (v >> 8) & 0xff, v & 0xff];
              };

              /**
               * @constant
               * @type {number}
               */
              sizeOf.NUMBER32 = constant(5);

              /**
               * @param {number}
               * @returns {Array}
               */
              encode.REAL = function(v) {
                var value = v.toString();

                // Some numbers use an epsilon to encode the value. (e.g. JavaScript will store 0.0000001 as 1e-7)
                // This code converts it back to a number without the epsilon.
                var m = /\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(value);
                if (m) {
                  var epsilon = parseFloat('1e' + ((m[2] ? +m[2] : 0) + m[1].length));
                  value = (Math.round(v * epsilon) / epsilon).toString();
                }

                var nibbles = '';
                for (var i = 0, ii = value.length; i < ii; i += 1) {
                  var c = value[i];
                  if (c === 'e') {
                    nibbles += value[++i] === '-' ? 'c' : 'b';
                  } else if (c === '.') {
                    nibbles += 'a';
                  } else if (c === '-') {
                    nibbles += 'e';
                  } else {
                    nibbles += c;
                  }
                }

                nibbles += nibbles.length & 1 ? 'f' : 'ff';
                var out = [30];
                for (var i$1 = 0, ii$1 = nibbles.length; i$1 < ii$1; i$1 += 2) {
                  out.push(parseInt(nibbles.substr(i$1, 2), 16));
                }

                return out;
              };

              /**
               * @param {number}
               * @returns {number}
               */
              sizeOf.REAL = function(v) {
                return encode.REAL(v).length;
              };

              encode.NAME = encode.CHARARRAY;
              sizeOf.NAME = sizeOf.CHARARRAY;

              encode.STRING = encode.CHARARRAY;
              sizeOf.STRING = sizeOf.CHARARRAY;

              /**
               * @param {DataView} data
               * @param {number} offset
               * @param {number} numBytes
               * @returns {string}
               */
              decode.UTF8 = function(data, offset, numBytes) {
                var codePoints = [];
                var numChars = numBytes;
                for (var j = 0; j < numChars; j++, offset += 1) {
                  codePoints[j] = data.getUint8(offset);
                }

                return String.fromCharCode.apply(null, codePoints);
              };

              /**
               * @param {DataView} data
               * @param {number} offset
               * @param {number} numBytes
               * @returns {string}
               */
              decode.UTF16 = function(data, offset, numBytes) {
                var codePoints = [];
                var numChars = numBytes / 2;
                for (var j = 0; j < numChars; j++, offset += 2) {
                  codePoints[j] = data.getUint16(offset);
                }

                return String.fromCharCode.apply(null, codePoints);
              };

              /**
               * Convert a JavaScript string to UTF16-BE.
               * @param {string}
               * @returns {Array}
               */
              encode.UTF16 = function(v) {
                var b = [];
                for (var i = 0; i < v.length; i += 1) {
                  var codepoint = v.charCodeAt(i);
                  b[b.length] = (codepoint >> 8) & 0xff;
                  b[b.length] = codepoint & 0xff;
                }

                return b;
              };

              /**
               * @param {string}
               * @returns {number}
               */
              sizeOf.UTF16 = function(v) {
                return v.length * 2;
              };

              // Data for converting old eight-bit Macintosh encodings to Unicode.
              // This representation is optimized for decoding; encoding is slower
              // and needs more memory. The assumption is that all opentype.js users
              // want to open fonts, but saving a font will be comparatively rare
              // so it can be more expensive. Keyed by IANA character set name.
              //
              // Python script for generating these strings:
              //
              //     s = u''.join([chr(c).decode('mac_greek') for c in range(128, 256)])
              //     print(s.encode('utf-8'))
              /**
               * @private
               */
              var eightBitMacEncodings = {
                // Python: 'mac_croatian'
                'x-mac-croatian':
                  'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø' +
                  '¿¡¬√ƒ≈Ć«Č… ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ',
                // Python: 'mac_cyrillic'
                'x-mac-cyrillic':
                  'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњ' +
                  'јЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю',
                // http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/GAELIC.TXT
                'x-mac-gaelic':
                  'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæø' +
                  'ṁṖṗɼƒſṠ«»… ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ',
                // Python: 'mac_greek'
                'x-mac-greek':
                  'Ä¹²É³ÖÜ΅àâä΄¨çéèêë£™îï•½‰ôö¦€ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩ' +
                  'άΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ\u00AD',
                // Python: 'mac_iceland'
                'x-mac-icelandic':
                  'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüÝ°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø' +
                  '¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ',
                // http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/INUIT.TXT
                'x-mac-inuit':
                  'ᐃᐄᐅᐆᐊᐋᐱᐲᐳᐴᐸᐹᑉᑎᑏᑐᑑᑕᑖᑦᑭᑮᑯᑰᑲᑳᒃᒋᒌᒍᒎᒐᒑ°ᒡᒥᒦ•¶ᒧ®©™ᒨᒪᒫᒻᓂᓃᓄᓅᓇᓈᓐᓯᓰᓱᓲᓴᓵᔅᓕᓖᓗ' +
                  'ᓘᓚᓛᓪᔨᔩᔪᔫᔭ… ᔮᔾᕕᕖᕗ–—“”‘’ᕘᕙᕚᕝᕆᕇᕈᕉᕋᕌᕐᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᙱᙲᙳᙴᙵᙶᖖᖠᖡᖢᖣᖤᖥᖦᕼŁł',
                // Python: 'mac_latin2'
                'x-mac-ce':
                  'ÄĀāÉĄÖÜáąČäčĆćéŹźĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅ' +
                  'ņŃ¬√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ',
                // Python: 'mac_roman'
                macintosh:
                  'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø' +
                  '¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›ﬁﬂ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ',
                // Python: 'mac_romanian'
                'x-mac-romanian':
                  'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂȘ∞±≤≥¥µ∂∑∏π∫ªºΩăș' +
                  '¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›Țț‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ',
                // Python: 'mac_turkish'
                'x-mac-turkish':
                  'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø' +
                  '¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ'
              };

              /**
               * Decodes an old-style Macintosh string. Returns either a Unicode JavaScript
               * string, or 'undefined' if the encoding is unsupported. For example, we do
               * not support Chinese, Japanese or Korean because these would need large
               * mapping tables.
               * @param {DataView} dataView
               * @param {number} offset
               * @param {number} dataLength
               * @param {string} encoding
               * @returns {string}
               */
              decode.MACSTRING = function(dataView, offset, dataLength, encoding) {
                var table = eightBitMacEncodings[encoding];
                if (table === undefined) {
                  return undefined;
                }

                var result = '';
                for (var i = 0; i < dataLength; i++) {
                  var c = dataView.getUint8(offset + i);
                  // In all eight-bit Mac encodings, the characters 0x00..0x7F are
                  // mapped to U+0000..U+007F; we only need to look up the others.
                  if (c <= 0x7f) {
                    result += String.fromCharCode(c);
                  } else {
                    result += table[c & 0x7f];
                  }
                }

                return result;
              };

              // Helper function for encode.MACSTRING. Returns a dictionary for mapping
              // Unicode character codes to their 8-bit MacOS equivalent. This table
              // is not exactly a super cheap data structure, but we do not care because
              // encoding Macintosh strings is only rarely needed in typical applications.
              var macEncodingTableCache = typeof WeakMap === 'function' && new WeakMap();
              var macEncodingCacheKeys;
              var getMacEncodingTable = function(encoding) {
                // Since we use encoding as a cache key for WeakMap, it has to be
                // a String object and not a literal. And at least on NodeJS 2.10.1,
                // WeakMap requires that the same String instance is passed for cache hits.
                if (!macEncodingCacheKeys) {
                  macEncodingCacheKeys = {};
                  for (var e in eightBitMacEncodings) {
                    /*jshint -W053 */ // Suppress "Do not use String as a constructor."
                    macEncodingCacheKeys[e] = new String(e);
                  }
                }

                var cacheKey = macEncodingCacheKeys[encoding];
                if (cacheKey === undefined) {
                  return undefined;
                }

                // We can't do "if (cache.has(key)) {return cache.get(key)}" here:
                // since garbage collection may run at any time, it could also kick in
                // between the calls to cache.has() and cache.get(). In that case,
                // we would return 'undefined' even though we do support the encoding.
                if (macEncodingTableCache) {
                  var cachedTable = macEncodingTableCache.get(cacheKey);
                  if (cachedTable !== undefined) {
                    return cachedTable;
                  }
                }

                var decodingTable = eightBitMacEncodings[encoding];
                if (decodingTable === undefined) {
                  return undefined;
                }

                var encodingTable = {};
                for (var i = 0; i < decodingTable.length; i++) {
                  encodingTable[decodingTable.charCodeAt(i)] = i + 0x80;
                }

                if (macEncodingTableCache) {
                  macEncodingTableCache.set(cacheKey, encodingTable);
                }

                return encodingTable;
              };

              /**
               * Encodes an old-style Macintosh string. Returns a byte array upon success.
               * If the requested encoding is unsupported, or if the input string contains
               * a character that cannot be expressed in the encoding, the function returns
               * 'undefined'.
               * @param {string} str
               * @param {string} encoding
               * @returns {Array}
               */
              encode.MACSTRING = function(str, encoding) {
                var table = getMacEncodingTable(encoding);
                if (table === undefined) {
                  return undefined;
                }

                var result = [];
                for (var i = 0; i < str.length; i++) {
                  var c = str.charCodeAt(i);

                  // In all eight-bit Mac encodings, the characters 0x00..0x7F are
                  // mapped to U+0000..U+007F; we only need to look up the others.
                  if (c >= 0x80) {
                    c = table[c];
                    if (c === undefined) {
                      // str contains a Unicode character that cannot be encoded
                      // in the requested encoding.
                      return undefined;
                    }
                  }
                  result[i] = c;
                  // result.push(c);
                }

                return result;
              };

              /**
               * @param {string} str
               * @param {string} encoding
               * @returns {number}
               */
              sizeOf.MACSTRING = function(str, encoding) {
                var b = encode.MACSTRING(str, encoding);
                if (b !== undefined) {
                  return b.length;
                } else {
                  return 0;
                }
              };

              // Helper for encode.VARDELTAS
              function isByteEncodable(value) {
                return value >= -128 && value <= 127;
              }

              // Helper for encode.VARDELTAS
              function encodeVarDeltaRunAsZeroes(deltas, pos, result) {
                var runLength = 0;
                var numDeltas = deltas.length;
                while (pos < numDeltas && runLength < 64 && deltas[pos] === 0) {
                  ++pos;
                  ++runLength;
                }
                result.push(0x80 | (runLength - 1));
                return pos;
              }

              // Helper for encode.VARDELTAS
              function encodeVarDeltaRunAsBytes(deltas, offset, result) {
                var runLength = 0;
                var numDeltas = deltas.length;
                var pos = offset;
                while (pos < numDeltas && runLength < 64) {
                  var value = deltas[pos];
                  if (!isByteEncodable(value)) {
                    break;
                  }

                  // Within a byte-encoded run of deltas, a single zero is best
                  // stored literally as 0x00 value. However, if we have two or
                  // more zeroes in a sequence, it is better to start a new run.
                  // Fore example, the sequence of deltas [15, 15, 0, 15, 15]
                  // becomes 6 bytes (04 0F 0F 00 0F 0F) when storing the zero
                  // within the current run, but 7 bytes (01 0F 0F 80 01 0F 0F)
                  // when starting a new run.
                  if (value === 0 && pos + 1 < numDeltas && deltas[pos + 1] === 0) {
                    break;
                  }

                  ++pos;
                  ++runLength;
                }
                result.push(runLength - 1);
                for (var i = offset; i < pos; ++i) {
                  result.push((deltas[i] + 256) & 0xff);
                }
                return pos;
              }

              // Helper for encode.VARDELTAS
              function encodeVarDeltaRunAsWords(deltas, offset, result) {
                var runLength = 0;
                var numDeltas = deltas.length;
                var pos = offset;
                while (pos < numDeltas && runLength < 64) {
                  var value = deltas[pos];

                  // Within a word-encoded run of deltas, it is easiest to start
                  // a new run (with a different encoding) whenever we encounter
                  // a zero value. For example, the sequence [0x6666, 0, 0x7777]
                  // needs 7 bytes when storing the zero inside the current run
                  // (42 66 66 00 00 77 77), and equally 7 bytes when starting a
                  // new run (40 66 66 80 40 77 77).
                  if (value === 0) {
                    break;
                  }

                  // Within a word-encoded run of deltas, a single value in the
                  // range (-128..127) should be encoded within the current run
                  // because it is more compact. For example, the sequence
                  // [0x6666, 2, 0x7777] becomes 7 bytes when storing the value
                  // literally (42 66 66 00 02 77 77), but 8 bytes when starting
                  // a new run (40 66 66 00 02 40 77 77).
                  if (
                    isByteEncodable(value) &&
                    pos + 1 < numDeltas &&
                    isByteEncodable(deltas[pos + 1])
                  ) {
                    break;
                  }

                  ++pos;
                  ++runLength;
                }
                result.push(0x40 | (runLength - 1));
                for (var i = offset; i < pos; ++i) {
                  var val = deltas[i];
                  result.push(((val + 0x10000) >> 8) & 0xff, (val + 0x100) & 0xff);
                }
                return pos;
              }

              /**
               * Encode a list of variation adjustment deltas.
               *
               * Variation adjustment deltas are used in ‘gvar’ and ‘cvar’ tables.
               * They indicate how points (in ‘gvar’) or values (in ‘cvar’) get adjusted
               * when generating instances of variation fonts.
               *
               * @see https://www.microsoft.com/typography/otspec/gvar.htm
               * @see https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6gvar.html
               * @param {Array}
               * @return {Array}
               */
              encode.VARDELTAS = function(deltas) {
                var pos = 0;
                var result = [];
                while (pos < deltas.length) {
                  var value = deltas[pos];
                  if (value === 0) {
                    pos = encodeVarDeltaRunAsZeroes(deltas, pos, result);
                  } else if (value >= -128 && value <= 127) {
                    pos = encodeVarDeltaRunAsBytes(deltas, pos, result);
                  } else {
                    pos = encodeVarDeltaRunAsWords(deltas, pos, result);
                  }
                }
                return result;
              };

              // Convert a list of values to a CFF INDEX structure.
              // The values should be objects containing name / type / value.
              /**
               * @param {Array} l
               * @returns {Array}
               */
              encode.INDEX = function(l) {
                //var offset, offsets, offsetEncoder, encodedOffsets, encodedOffset, data,
                //    i, v;
                // Because we have to know which data type to use to encode the offsets,
                // we have to go through the values twice: once to encode the data and
                // calculate the offsets, then again to encode the offsets using the fitting data type.
                var offset = 1; // First offset is always 1.
                var offsets = [offset];
                var data = [];
                for (var i = 0; i < l.length; i += 1) {
                  var v = encode.OBJECT(l[i]);
                  Array.prototype.push.apply(data, v);
                  offset += v.length;
                  offsets.push(offset);
                }

                if (data.length === 0) {
                  return [0, 0];
                }

                var encodedOffsets = [];
                var offSize = (1 + Math.floor(Math.log(offset) / Math.log(2)) / 8) | 0;
                var offsetEncoder = [
                  undefined,
                  encode.BYTE,
                  encode.USHORT,
                  encode.UINT24,
                  encode.ULONG
                ][offSize];
                for (var i$1 = 0; i$1 < offsets.length; i$1 += 1) {
                  var encodedOffset = offsetEncoder(offsets[i$1]);
                  Array.prototype.push.apply(encodedOffsets, encodedOffset);
                }

                return Array.prototype.concat(
                  encode.Card16(l.length),
                  encode.OffSize(offSize),
                  encodedOffsets,
                  data
                );
              };

              /**
               * @param {Array}
               * @returns {number}
               */
              sizeOf.INDEX = function(v) {
                return encode.INDEX(v).length;
              };

              /**
               * Convert an object to a CFF DICT structure.
               * The keys should be numeric.
               * The values should be objects containing name / type / value.
               * @param {Object} m
               * @returns {Array}
               */
              encode.DICT = function(m) {
                var d = [];
                var keys = Object.keys(m);
                var length = keys.length;

                for (var i = 0; i < length; i += 1) {
                  // Object.keys() return string keys, but our keys are always numeric.
                  var k = parseInt(keys[i], 0);
                  var v = m[k];
                  // Value comes before the key.
                  d = d.concat(encode.OPERAND(v.value, v.type));
                  d = d.concat(encode.OPERATOR(k));
                }

                return d;
              };

              /**
               * @param {Object}
               * @returns {number}
               */
              sizeOf.DICT = function(m) {
                return encode.DICT(m).length;
              };

              /**
               * @param {number}
               * @returns {Array}
               */
              encode.OPERATOR = function(v) {
                if (v < 1200) {
                  return [v];
                } else {
                  return [12, v - 1200];
                }
              };

              /**
               * @param {Array} v
               * @param {string}
               * @returns {Array}
               */
              encode.OPERAND = function(v, type) {
                var d = [];
                if (Array.isArray(type)) {
                  for (var i = 0; i < type.length; i += 1) {
                    check.argument(
                      v.length === type.length,
                      'Not enough arguments given for type' + type
                    );
                    d = d.concat(encode.OPERAND(v[i], type[i]));
                  }
                } else {
                  if (type === 'SID') {
                    d = d.concat(encode.NUMBER(v));
                  } else if (type === 'offset') {
                    // We make it easy for ourselves and always encode offsets as
                    // 4 bytes. This makes offset calculation for the top dict easier.
                    d = d.concat(encode.NUMBER32(v));
                  } else if (type === 'number') {
                    d = d.concat(encode.NUMBER(v));
                  } else if (type === 'real') {
                    d = d.concat(encode.REAL(v));
                  } else {
                    throw new Error('Unknown operand type ' + type);
                    // FIXME Add support for booleans
                  }
                }

                return d;
              };

              encode.OP = encode.BYTE;
              sizeOf.OP = sizeOf.BYTE;

              // memoize charstring encoding using WeakMap if available
              var wmm = typeof WeakMap === 'function' && new WeakMap();

              /**
               * Convert a list of CharString operations to bytes.
               * @param {Array}
               * @returns {Array}
               */
              encode.CHARSTRING = function(ops) {
                // See encode.MACSTRING for why we don't do "if (wmm && wmm.has(ops))".
                if (wmm) {
                  var cachedValue = wmm.get(ops);
                  if (cachedValue !== undefined) {
                    return cachedValue;
                  }
                }

                var d = [];
                var length = ops.length;

                for (var i = 0; i < length; i += 1) {
                  var op = ops[i];
                  d = d.concat(encode[op.type](op.value));
                }

                if (wmm) {
                  wmm.set(ops, d);
                }

                return d;
              };

              /**
               * @param {Array}
               * @returns {number}
               */
              sizeOf.CHARSTRING = function(ops) {
                return encode.CHARSTRING(ops).length;
              };

              // Utility functions ////////////////////////////////////////////////////////

              /**
               * Convert an object containing name / type / value to bytes.
               * @param {Object}
               * @returns {Array}
               */
              encode.OBJECT = function(v) {
                var encodingFunction = encode[v.type];
                check.argument(
                  encodingFunction !== undefined,
                  'No encoding function for type ' + v.type
                );
                return encodingFunction(v.value);
              };

              /**
               * @param {Object}
               * @returns {number}
               */
              sizeOf.OBJECT = function(v) {
                var sizeOfFunction = sizeOf[v.type];
                check.argument(
                  sizeOfFunction !== undefined,
                  'No sizeOf function for type ' + v.type
                );
                return sizeOfFunction(v.value);
              };

              /**
               * Convert a table object to bytes.
               * A table contains a list of fields containing the metadata (name, type and default value).
               * The table itself has the field values set as attributes.
               * @param {opentype.Table}
               * @returns {Array}
               */
              encode.TABLE = function(table) {
                var d = [];
                var length = table.fields.length;
                var subtables = [];
                var subtableOffsets = [];

                for (var i = 0; i < length; i += 1) {
                  var field = table.fields[i];
                  var encodingFunction = encode[field.type];
                  check.argument(
                    encodingFunction !== undefined,
                    'No encoding function for field type ' +
                      field.type +
                      ' (' +
                      field.name +
                      ')'
                  );
                  var value = table[field.name];
                  if (value === undefined) {
                    value = field.value;
                  }

                  var bytes = encodingFunction(value);

                  if (field.type === 'TABLE') {
                    subtableOffsets.push(d.length);
                    d = d.concat([0, 0]);
                    subtables.push(bytes);
                  } else {
                    d = d.concat(bytes);
                  }
                }

                for (var i$1 = 0; i$1 < subtables.length; i$1 += 1) {
                  var o = subtableOffsets[i$1];
                  var offset = d.length;
                  check.argument(offset < 65536, 'Table ' + table.tableName + ' too big.');
                  d[o] = offset >> 8;
                  d[o + 1] = offset & 0xff;
                  d = d.concat(subtables[i$1]);
                }

                return d;
              };

              /**
               * @param {opentype.Table}
               * @returns {number}
               */
              sizeOf.TABLE = function(table) {
                var numBytes = 0;
                var length = table.fields.length;

                for (var i = 0; i < length; i += 1) {
                  var field = table.fields[i];
                  var sizeOfFunction = sizeOf[field.type];
                  check.argument(
                    sizeOfFunction !== undefined,
                    'No sizeOf function for field type ' +
                      field.type +
                      ' (' +
                      field.name +
                      ')'
                  );
                  var value = table[field.name];
                  if (value === undefined) {
                    value = field.value;
                  }

                  numBytes += sizeOfFunction(value);

                  // Subtables take 2 more bytes for offsets.
                  if (field.type === 'TABLE') {
                    numBytes += 2;
                  }
                }

                return numBytes;
              };

              encode.RECORD = encode.TABLE;
              sizeOf.RECORD = sizeOf.TABLE;

              // Merge in a list of bytes.
              encode.LITERAL = function(v) {
                return v;
              };

              sizeOf.LITERAL = function(v) {
                return v.length;
              };

              // Table metadata

              /**
               * @exports opentype.Table
               * @class
               * @param {string} tableName
               * @param {Array} fields
               * @param {Object} options
               * @constructor
               */
              function Table(tableName, fields, options) {
                var this$1 = this;

                for (var i = 0; i < fields.length; i += 1) {
                  var field = fields[i];
                  this$1[field.name] = field.value;
                }

                this.tableName = tableName;
                this.fields = fields;
                if (options) {
                  var optionKeys = Object.keys(options);
                  for (var i$1 = 0; i$1 < optionKeys.length; i$1 += 1) {
                    var k = optionKeys[i$1];
                    var v = options[k];
                    if (this$1[k] !== undefined) {
                      this$1[k] = v;
                    }
                  }
                }
              }

              /**
               * Encodes the table and returns an array of bytes
               * @return {Array}
               */
              Table.prototype.encode = function() {
                return encode.TABLE(this);
              };

              /**
               * Get the size of the table.
               * @return {number}
               */
              Table.prototype.sizeOf = function() {
                return sizeOf.TABLE(this);
              };

              /**
               * @private
               */
              function ushortList(itemName, list, count) {
                if (count === undefined) {
                  count = list.length;
                }
                var fields = new Array(list.length + 1);
                fields[0] = { name: itemName + 'Count', type: 'USHORT', value: count };
                for (var i = 0; i < list.length; i++) {
                  fields[i + 1] = { name: itemName + i, type: 'USHORT', value: list[i] };
                }
                return fields;
              }

              /**
               * @private
               */
              function tableList(itemName, records, itemCallback) {
                var count = records.length;
                var fields = new Array(count + 1);
                fields[0] = { name: itemName + 'Count', type: 'USHORT', value: count };
                for (var i = 0; i < count; i++) {
                  fields[i + 1] = {
                    name: itemName + i,
                    type: 'TABLE',
                    value: itemCallback(records[i], i)
                  };
                }
                return fields;
              }

              /**
               * @private
               */
              function recordList(itemName, records, itemCallback) {
                var count = records.length;
                var fields = [];
                fields[0] = { name: itemName + 'Count', type: 'USHORT', value: count };
                for (var i = 0; i < count; i++) {
                  fields = fields.concat(itemCallback(records[i], i));
                }
                return fields;
              }

              // Common Layout Tables

              /**
               * @exports opentype.Coverage
               * @class
               * @param {opentype.Table}
               * @constructor
               * @extends opentype.Table
               */
              function Coverage(coverageTable) {
                if (coverageTable.format === 1) {
                  Table.call(
                    this,
                    'coverageTable',
                    [{ name: 'coverageFormat', type: 'USHORT', value: 1 }].concat(
                      ushortList('glyph', coverageTable.glyphs)
                    )
                  );
                } else {
                  check.assert(false, "Can't create coverage table format 2 yet.");
                }
              }
              Coverage.prototype = Object.create(Table.prototype);
              Coverage.prototype.constructor = Coverage;

              function ScriptList(scriptListTable) {
                Table.call(
                  this,
                  'scriptListTable',
                  recordList('scriptRecord', scriptListTable, function(scriptRecord, i) {
                    var script = scriptRecord.script;
                    var defaultLangSys = script.defaultLangSys;
                    check.assert(
                      !!defaultLangSys,
                      'Unable to write GSUB: script ' +
                        scriptRecord.tag +
                        ' has no default language system.'
                    );
                    return [
                      { name: 'scriptTag' + i, type: 'TAG', value: scriptRecord.tag },
                      {
                        name: 'script' + i,
                        type: 'TABLE',
                        value: new Table(
                          'scriptTable',
                          [
                            {
                              name: 'defaultLangSys',
                              type: 'TABLE',
                              value: new Table(
                                'defaultLangSys',
                                [
                                  { name: 'lookupOrder', type: 'USHORT', value: 0 },
                                  {
                                    name: 'reqFeatureIndex',
                                    type: 'USHORT',
                                    value: defaultLangSys.reqFeatureIndex
                                  }
                                ].concat(
                                  ushortList('featureIndex', defaultLangSys.featureIndexes)
                                )
                              )
                            }
                          ].concat(
                            recordList('langSys', script.langSysRecords, function(
                              langSysRecord,
                              i
                            ) {
                              var langSys = langSysRecord.langSys;
                              return [
                                {
                                  name: 'langSysTag' + i,
                                  type: 'TAG',
                                  value: langSysRecord.tag
                                },
                                {
                                  name: 'langSys' + i,
                                  type: 'TABLE',
                                  value: new Table(
                                    'langSys',
                                    [
                                      { name: 'lookupOrder', type: 'USHORT', value: 0 },
                                      {
                                        name: 'reqFeatureIndex',
                                        type: 'USHORT',
                                        value: langSys.reqFeatureIndex
                                      }
                                    ].concat(
                                      ushortList('featureIndex', langSys.featureIndexes)
                                    )
                                  )
                                }
                              ];
                            })
                          )
                        )
                      }
                    ];
                  })
                );
              }
              ScriptList.prototype = Object.create(Table.prototype);
              ScriptList.prototype.constructor = ScriptList;

              /**
               * @exports opentype.FeatureList
               * @class
               * @param {opentype.Table}
               * @constructor
               * @extends opentype.Table
               */
              function FeatureList(featureListTable) {
                Table.call(
                  this,
                  'featureListTable',
                  recordList('featureRecord', featureListTable, function(featureRecord, i) {
                    var feature = featureRecord.feature;
                    return [
                      { name: 'featureTag' + i, type: 'TAG', value: featureRecord.tag },
                      {
                        name: 'feature' + i,
                        type: 'TABLE',
                        value: new Table(
                          'featureTable',
                          [
                            {
                              name: 'featureParams',
                              type: 'USHORT',
                              value: feature.featureParams
                            }
                          ].concat(ushortList('lookupListIndex', feature.lookupListIndexes))
                        )
                      }
                    ];
                  })
                );
              }
              FeatureList.prototype = Object.create(Table.prototype);
              FeatureList.prototype.constructor = FeatureList;

              /**
               * @exports opentype.LookupList
               * @class
               * @param {opentype.Table}
               * @param {Object}
               * @constructor
               * @extends opentype.Table
               */
              function LookupList(lookupListTable, subtableMakers) {
                Table.call(
                  this,
                  'lookupListTable',
                  tableList('lookup', lookupListTable, function(lookupTable) {
                    var subtableCallback = subtableMakers[lookupTable.lookupType];
                    check.assert(
                      !!subtableCallback,
                      'Unable to write GSUB lookup type ' +
                        lookupTable.lookupType +
                        ' tables.'
                    );
                    return new Table(
                      'lookupTable',
                      [
                        {
                          name: 'lookupType',
                          type: 'USHORT',
                          value: lookupTable.lookupType
                        },
                        {
                          name: 'lookupFlag',
                          type: 'USHORT',
                          value: lookupTable.lookupFlag
                        }
                      ].concat(
                        tableList('subtable', lookupTable.subtables, subtableCallback)
                      )
                    );
                  })
                );
              }
              LookupList.prototype = Object.create(Table.prototype);
              LookupList.prototype.constructor = LookupList;

              // Record = same as Table, but inlined (a Table has an offset and its data is further in the stream)
              // Don't use offsets inside Records (probable bug), only in Tables.
              var table = {
                Table: Table,
                Record: Table,
                Coverage: Coverage,
                ScriptList: ScriptList,
                FeatureList: FeatureList,
                LookupList: LookupList,
                ushortList: ushortList,
                tableList: tableList,
                recordList: recordList
              };

              // Parsing utility functions

              // Retrieve an unsigned byte from the DataView.
              function getByte(dataView, offset) {
                return dataView.getUint8(offset);
              }

              // Retrieve an unsigned 16-bit short from the DataView.
              // The value is stored in big endian.
              function getUShort(dataView, offset) {
                return dataView.getUint16(offset, false);
              }

              // Retrieve a signed 16-bit short from the DataView.
              // The value is stored in big endian.
              function getShort(dataView, offset) {
                return dataView.getInt16(offset, false);
              }

              // Retrieve an unsigned 32-bit long from the DataView.
              // The value is stored in big endian.
              function getULong(dataView, offset) {
                return dataView.getUint32(offset, false);
              }

              // Retrieve a 32-bit signed fixed-point number (16.16) from the DataView.
              // The value is stored in big endian.
              function getFixed(dataView, offset) {
                var decimal = dataView.getInt16(offset, false);
                var fraction = dataView.getUint16(offset + 2, false);
                return decimal + fraction / 65535;
              }

              // Retrieve a 4-character tag from the DataView.
              // Tags are used to identify tables.
              function getTag(dataView, offset) {
                var tag = '';
                for (var i = offset; i < offset + 4; i += 1) {
                  tag += String.fromCharCode(dataView.getInt8(i));
                }

                return tag;
              }

              // Retrieve an offset from the DataView.
              // Offsets are 1 to 4 bytes in length, depending on the offSize argument.
              function getOffset(dataView, offset, offSize) {
                var v = 0;
                for (var i = 0; i < offSize; i += 1) {
                  v <<= 8;
                  v += dataView.getUint8(offset + i);
                }

                return v;
              }

              // Retrieve a number of bytes from start offset to the end offset from the DataView.
              function getBytes(dataView, startOffset, endOffset) {
                var bytes = [];
                for (var i = startOffset; i < endOffset; i += 1) {
                  bytes.push(dataView.getUint8(i));
                }

                return bytes;
              }

              // Convert the list of bytes to a string.
              function bytesToString(bytes) {
                var s = '';
                for (var i = 0; i < bytes.length; i += 1) {
                  s += String.fromCharCode(bytes[i]);
                }

                return s;
              }

              var typeOffsets = {
                byte: 1,
                uShort: 2,
                short: 2,
                uLong: 4,
                fixed: 4,
                longDateTime: 8,
                tag: 4
              };

              // A stateful parser that changes the offset whenever a value is retrieved.
              // The data is a DataView.
              function Parser(data, offset) {
                this.data = data;
                this.offset = offset;
                this.relativeOffset = 0;
              }

              Parser.prototype.parseByte = function() {
                var v = this.data.getUint8(this.offset + this.relativeOffset);
                this.relativeOffset += 1;
                return v;
              };

              Parser.prototype.parseChar = function() {
                var v = this.data.getInt8(this.offset + this.relativeOffset);
                this.relativeOffset += 1;
                return v;
              };

              Parser.prototype.parseCard8 = Parser.prototype.parseByte;

              Parser.prototype.parseUShort = function() {
                var v = this.data.getUint16(this.offset + this.relativeOffset);
                this.relativeOffset += 2;
                return v;
              };

              Parser.prototype.parseCard16 = Parser.prototype.parseUShort;
              Parser.prototype.parseSID = Parser.prototype.parseUShort;
              Parser.prototype.parseOffset16 = Parser.prototype.parseUShort;

              Parser.prototype.parseShort = function() {
                var v = this.data.getInt16(this.offset + this.relativeOffset);
                this.relativeOffset += 2;
                return v;
              };

              Parser.prototype.parseF2Dot14 = function() {
                var v = this.data.getInt16(this.offset + this.relativeOffset) / 16384;
                this.relativeOffset += 2;
                return v;
              };

              Parser.prototype.parseULong = function() {
                var v = getULong(this.data, this.offset + this.relativeOffset);
                this.relativeOffset += 4;
                return v;
              };

              Parser.prototype.parseOffset32 = Parser.prototype.parseULong;

              Parser.prototype.parseFixed = function() {
                var v = getFixed(this.data, this.offset + this.relativeOffset);
                this.relativeOffset += 4;
                return v;
              };

              Parser.prototype.parseString = function(length) {
                var dataView = this.data;
                var offset = this.offset + this.relativeOffset;
                var string = '';
                this.relativeOffset += length;
                for (var i = 0; i < length; i++) {
                  string += String.fromCharCode(dataView.getUint8(offset + i));
                }

                return string;
              };

              Parser.prototype.parseTag = function() {
                return this.parseString(4);
              };

              // LONGDATETIME is a 64-bit integer.
              // JavaScript and unix timestamps traditionally use 32 bits, so we
              // only take the last 32 bits.
              // + Since until 2038 those bits will be filled by zeros we can ignore them.
              Parser.prototype.parseLongDateTime = function() {
                var v = getULong(this.data, this.offset + this.relativeOffset + 4);
                // Subtract seconds between 01/01/1904 and 01/01/1970
                // to convert Apple Mac timestamp to Standard Unix timestamp
                v -= 2082844800;
                this.relativeOffset += 8;
                return v;
              };

              Parser.prototype.parseVersion = function(minorBase) {
                var major = getUShort(this.data, this.offset + this.relativeOffset);

                // How to interpret the minor version is very vague in the spec. 0x5000 is 5, 0x1000 is 1
                // Default returns the correct number if minor = 0xN000 where N is 0-9
                // Set minorBase to 1 for tables that use minor = N where N is 0-9
                var minor = getUShort(this.data, this.offset + this.relativeOffset + 2);
                this.relativeOffset += 4;
                if (minorBase === undefined) {
                  minorBase = 0x1000;
                }
                return major + minor / minorBase / 10;
              };

              Parser.prototype.skip = function(type, amount) {
                if (amount === undefined) {
                  amount = 1;
                }

                this.relativeOffset += typeOffsets[type] * amount;
              };

              ///// Parsing lists and records ///////////////////////////////

              // Parse a list of 32 bit unsigned integers.
              Parser.prototype.parseULongList = function(count) {
                if (count === undefined) {
                  count = this.parseULong();
                }
                var offsets = new Array(count);
                var dataView = this.data;
                var offset = this.offset + this.relativeOffset;
                for (var i = 0; i < count; i++) {
                  offsets[i] = dataView.getUint32(offset);
                  offset += 4;
                }

                this.relativeOffset += count * 4;
                return offsets;
              };

              // Parse a list of 16 bit unsigned integers. The length of the list can be read on the stream
              // or provided as an argument.
              Parser.prototype.parseOffset16List = Parser.prototype.parseUShortList = function(
                count
              ) {
                if (count === undefined) {
                  count = this.parseUShort();
                }
                var offsets = new Array(count);
                var dataView = this.data;
                var offset = this.offset + this.relativeOffset;
                for (var i = 0; i < count; i++) {
                  offsets[i] = dataView.getUint16(offset);
                  offset += 2;
                }

                this.relativeOffset += count * 2;
                return offsets;
              };

              // Parses a list of 16 bit signed integers.
              Parser.prototype.parseShortList = function(count) {
                var list = new Array(count);
                var dataView = this.data;
                var offset = this.offset + this.relativeOffset;
                for (var i = 0; i < count; i++) {
                  list[i] = dataView.getInt16(offset);
                  offset += 2;
                }

                this.relativeOffset += count * 2;
                return list;
              };

              // Parses a list of bytes.
              Parser.prototype.parseByteList = function(count) {
                var list = new Array(count);
                var dataView = this.data;
                var offset = this.offset + this.relativeOffset;
                for (var i = 0; i < count; i++) {
                  list[i] = dataView.getUint8(offset++);
                }

                this.relativeOffset += count;
                return list;
              };

              /**
               * Parse a list of items.
               * Record count is optional, if omitted it is read from the stream.
               * itemCallback is one of the Parser methods.
               */
              Parser.prototype.parseList = function(count, itemCallback) {
                var this$1 = this;

                if (!itemCallback) {
                  itemCallback = count;
                  count = this.parseUShort();
                }
                var list = new Array(count);
                for (var i = 0; i < count; i++) {
                  list[i] = itemCallback.call(this$1);
                }
                return list;
              };

              Parser.prototype.parseList32 = function(count, itemCallback) {
                var this$1 = this;

                if (!itemCallback) {
                  itemCallback = count;
                  count = this.parseULong();
                }
                var list = new Array(count);
                for (var i = 0; i < count; i++) {
                  list[i] = itemCallback.call(this$1);
                }
                return list;
              };

              /**
               * Parse a list of records.
               * Record count is optional, if omitted it is read from the stream.
               * Example of recordDescription: { sequenceIndex: Parser.uShort, lookupListIndex: Parser.uShort }
               */
              Parser.prototype.parseRecordList = function(count, recordDescription) {
                var this$1 = this;

                // If the count argument is absent, read it in the stream.
                if (!recordDescription) {
                  recordDescription = count;
                  count = this.parseUShort();
                }
                var records = new Array(count);
                var fields = Object.keys(recordDescription);
                for (var i = 0; i < count; i++) {
                  var rec = {};
                  for (var j = 0; j < fields.length; j++) {
                    var fieldName = fields[j];
                    var fieldType = recordDescription[fieldName];
                    rec[fieldName] = fieldType.call(this$1);
                  }
                  records[i] = rec;
                }
                return records;
              };

              Parser.prototype.parseRecordList32 = function(count, recordDescription) {
                var this$1 = this;

                // If the count argument is absent, read it in the stream.
                if (!recordDescription) {
                  recordDescription = count;
                  count = this.parseULong();
                }
                var records = new Array(count);
                var fields = Object.keys(recordDescription);
                for (var i = 0; i < count; i++) {
                  var rec = {};
                  for (var j = 0; j < fields.length; j++) {
                    var fieldName = fields[j];
                    var fieldType = recordDescription[fieldName];
                    rec[fieldName] = fieldType.call(this$1);
                  }
                  records[i] = rec;
                }
                return records;
              };

              // Parse a data structure into an object
              // Example of description: { sequenceIndex: Parser.uShort, lookupListIndex: Parser.uShort }
              Parser.prototype.parseStruct = function(description) {
                var this$1 = this;

                if (typeof description === 'function') {
                  return description.call(this);
                } else {
                  var fields = Object.keys(description);
                  var struct = {};
                  for (var j = 0; j < fields.length; j++) {
                    var fieldName = fields[j];
                    var fieldType = description[fieldName];
                    struct[fieldName] = fieldType.call(this$1);
                  }
                  return struct;
                }
              };

              /**
               * Parse a GPOS valueRecord
               * https://docs.microsoft.com/en-us/typography/opentype/spec/gpos#value-record
               * valueFormat is optional, if omitted it is read from the stream.
               */
              Parser.prototype.parseValueRecord = function(valueFormat) {
                if (valueFormat === undefined) {
                  valueFormat = this.parseUShort();
                }
                if (valueFormat === 0) {
                  // valueFormat2 in kerning pairs is most often 0
                  // in this case return undefined instead of an empty object, to save space
                  return;
                }
                var valueRecord = {};

                if (valueFormat & 0x0001) {
                  valueRecord.xPlacement = this.parseShort();
                }
                if (valueFormat & 0x0002) {
                  valueRecord.yPlacement = this.parseShort();
                }
                if (valueFormat & 0x0004) {
                  valueRecord.xAdvance = this.parseShort();
                }
                if (valueFormat & 0x0008) {
                  valueRecord.yAdvance = this.parseShort();
                }

                // Device table (non-variable font) / VariationIndex table (variable font) not supported
                // https://docs.microsoft.com/fr-fr/typography/opentype/spec/chapter2#devVarIdxTbls
                if (valueFormat & 0x0010) {
                  valueRecord.xPlaDevice = undefined;
                  this.parseShort();
                }
                if (valueFormat & 0x0020) {
                  valueRecord.yPlaDevice = undefined;
                  this.parseShort();
                }
                if (valueFormat & 0x0040) {
                  valueRecord.xAdvDevice = undefined;
                  this.parseShort();
                }
                if (valueFormat & 0x0080) {
                  valueRecord.yAdvDevice = undefined;
                  this.parseShort();
                }

                return valueRecord;
              };

              /**
               * Parse a list of GPOS valueRecords
               * https://docs.microsoft.com/en-us/typography/opentype/spec/gpos#value-record
               * valueFormat and valueCount are read from the stream.
               */
              Parser.prototype.parseValueRecordList = function() {
                var this$1 = this;

                var valueFormat = this.parseUShort();
                var valueCount = this.parseUShort();
                var values = new Array(valueCount);
                for (var i = 0; i < valueCount; i++) {
                  values[i] = this$1.parseValueRecord(valueFormat);
                }
                return values;
              };

              Parser.prototype.parsePointer = function(description) {
                var structOffset = this.parseOffset16();
                if (structOffset > 0) {
                  // NULL offset => return undefined
                  return new Parser(this.data, this.offset + structOffset).parseStruct(
                    description
                  );
                }
                return undefined;
              };

              Parser.prototype.parsePointer32 = function(description) {
                var structOffset = this.parseOffset32();
                if (structOffset > 0) {
                  // NULL offset => return undefined
                  return new Parser(this.data, this.offset + structOffset).parseStruct(
                    description
                  );
                }
                return undefined;
              };

              /**
               * Parse a list of offsets to lists of 16-bit integers,
               * or a list of offsets to lists of offsets to any kind of items.
               * If itemCallback is not provided, a list of list of UShort is assumed.
               * If provided, itemCallback is called on each item and must parse the item.
               * See examples in tables/gsub.js
               */
              Parser.prototype.parseListOfLists = function(itemCallback) {
                var this$1 = this;

                var offsets = this.parseOffset16List();
                var count = offsets.length;
                var relativeOffset = this.relativeOffset;
                var list = new Array(count);
                for (var i = 0; i < count; i++) {
                  var start = offsets[i];
                  if (start === 0) {
                    // NULL offset
                    // Add i as owned property to list. Convenient with assert.
                    list[i] = undefined;
                    continue;
                  }
                  this$1.relativeOffset = start;
                  if (itemCallback) {
                    var subOffsets = this$1.parseOffset16List();
                    var subList = new Array(subOffsets.length);
                    for (var j = 0; j < subOffsets.length; j++) {
                      this$1.relativeOffset = start + subOffsets[j];
                      subList[j] = itemCallback.call(this$1);
                    }
                    list[i] = subList;
                  } else {
                    list[i] = this$1.parseUShortList();
                  }
                }
                this.relativeOffset = relativeOffset;
                return list;
              };

              ///// Complex tables parsing //////////////////////////////////

              // Parse a coverage table in a GSUB, GPOS or GDEF table.
              // https://www.microsoft.com/typography/OTSPEC/chapter2.htm
              // parser.offset must point to the start of the table containing the coverage.
              Parser.prototype.parseCoverage = function() {
                var this$1 = this;

                var startOffset = this.offset + this.relativeOffset;
                var format = this.parseUShort();
                var count = this.parseUShort();
                if (format === 1) {
                  return {
                    format: 1,
                    glyphs: this.parseUShortList(count)
                  };
                } else if (format === 2) {
                  var ranges = new Array(count);
                  for (var i = 0; i < count; i++) {
                    ranges[i] = {
                      start: this$1.parseUShort(),
                      end: this$1.parseUShort(),
                      index: this$1.parseUShort()
                    };
                  }
                  return {
                    format: 2,
                    ranges: ranges
                  };
                }
                throw new Error(
                  '0x' + startOffset.toString(16) + ': Coverage format must be 1 or 2.'
                );
              };

              // Parse a Class Definition Table in a GSUB, GPOS or GDEF table.
              // https://www.microsoft.com/typography/OTSPEC/chapter2.htm
              Parser.prototype.parseClassDef = function() {
                var startOffset = this.offset + this.relativeOffset;
                var format = this.parseUShort();
                if (format === 1) {
                  return {
                    format: 1,
                    startGlyph: this.parseUShort(),
                    classes: this.parseUShortList()
                  };
                } else if (format === 2) {
                  return {
                    format: 2,
                    ranges: this.parseRecordList({
                      start: Parser.uShort,
                      end: Parser.uShort,
                      classId: Parser.uShort
                    })
                  };
                }
                throw new Error(
                  '0x' + startOffset.toString(16) + ': ClassDef format must be 1 or 2.'
                );
              };

              ///// Static methods ///////////////////////////////////
              // These convenience methods can be used as callbacks and should be called with "this" context set to a Parser instance.

              Parser.list = function(count, itemCallback) {
                return function() {
                  return this.parseList(count, itemCallback);
                };
              };

              Parser.list32 = function(count, itemCallback) {
                return function() {
                  return this.parseList32(count, itemCallback);
                };
              };

              Parser.recordList = function(count, recordDescription) {
                return function() {
                  return this.parseRecordList(count, recordDescription);
                };
              };

              Parser.recordList32 = function(count, recordDescription) {
                return function() {
                  return this.parseRecordList32(count, recordDescription);
                };
              };

              Parser.pointer = function(description) {
                return function() {
                  return this.parsePointer(description);
                };
              };

              Parser.pointer32 = function(description) {
                return function() {
                  return this.parsePointer32(description);
                };
              };

              Parser.tag = Parser.prototype.parseTag;
              Parser.byte = Parser.prototype.parseByte;
              Parser.uShort = Parser.offset16 = Parser.prototype.parseUShort;
              Parser.uShortList = Parser.prototype.parseUShortList;
              Parser.uLong = Parser.offset32 = Parser.prototype.parseULong;
              Parser.uLongList = Parser.prototype.parseULongList;
              Parser.struct = Parser.prototype.parseStruct;
              Parser.coverage = Parser.prototype.parseCoverage;
              Parser.classDef = Parser.prototype.parseClassDef;

              ///// Script, Feature, Lookup lists ///////////////////////////////////////////////
              // https://www.microsoft.com/typography/OTSPEC/chapter2.htm

              var langSysTable = {
                reserved: Parser.uShort,
                reqFeatureIndex: Parser.uShort,
                featureIndexes: Parser.uShortList
              };

              Parser.prototype.parseScriptList = function() {
                return (
                  this.parsePointer(
                    Parser.recordList({
                      tag: Parser.tag,
                      script: Parser.pointer({
                        defaultLangSys: Parser.pointer(langSysTable),
                        langSysRecords: Parser.recordList({
                          tag: Parser.tag,
                          langSys: Parser.pointer(langSysTable)
                        })
                      })
                    })
                  ) || []
                );
              };

              Parser.prototype.parseFeatureList = function() {
                return (
                  this.parsePointer(
                    Parser.recordList({
                      tag: Parser.tag,
                      feature: Parser.pointer({
                        featureParams: Parser.offset16,
                        lookupListIndexes: Parser.uShortList
                      })
                    })
                  ) || []
                );
              };

              Parser.prototype.parseLookupList = function(lookupTableParsers) {
                return (
                  this.parsePointer(
                    Parser.list(
                      Parser.pointer(function() {
                        var lookupType = this.parseUShort();
                        check.argument(
                          1 <= lookupType && lookupType <= 9,
                          'GPOS/GSUB lookup type ' + lookupType + ' unknown.'
                        );
                        var lookupFlag = this.parseUShort();
                        var useMarkFilteringSet = lookupFlag & 0x10;
                        return {
                          lookupType: lookupType,
                          lookupFlag: lookupFlag,
                          subtables: this.parseList(
                            Parser.pointer(lookupTableParsers[lookupType])
                          ),
                          markFilteringSet: useMarkFilteringSet
                            ? this.parseUShort()
                            : undefined
                        };
                      })
                    )
                  ) || []
                );
              };

              Parser.prototype.parseFeatureVariationsList = function() {
                return (
                  this.parsePointer32(function() {
                    var majorVersion = this.parseUShort();
                    var minorVersion = this.parseUShort();
                    check.argument(
                      majorVersion === 1 && minorVersion < 1,
                      'GPOS/GSUB feature variations table unknown.'
                    );
                    var featureVariations = this.parseRecordList32({
                      conditionSetOffset: Parser.offset32,
                      featureTableSubstitutionOffset: Parser.offset32
                    });
                    return featureVariations;
                  }) || []
                );
              };

              var parse = {
                getByte: getByte,
                getCard8: getByte,
                getUShort: getUShort,
                getCard16: getUShort,
                getShort: getShort,
                getULong: getULong,
                getFixed: getFixed,
                getTag: getTag,
                getOffset: getOffset,
                getBytes: getBytes,
                bytesToString: bytesToString,
                Parser: Parser
              };

              // The `cmap` table stores the mappings from characters to glyphs.

              function parseCmapTableFormat12(cmap, p) {
                //Skip reserved.
                p.parseUShort();

                // Length in bytes of the sub-tables.
                cmap.length = p.parseULong();
                cmap.language = p.parseULong();

                var groupCount;
                cmap.groupCount = groupCount = p.parseULong();
                cmap.glyphIndexMap = {};

                for (var i = 0; i < groupCount; i += 1) {
                  var startCharCode = p.parseULong();
                  var endCharCode = p.parseULong();
                  var startGlyphId = p.parseULong();

                  for (var c = startCharCode; c <= endCharCode; c += 1) {
                    cmap.glyphIndexMap[c] = startGlyphId;
                    startGlyphId++;
                  }
                }
              }

              function parseCmapTableFormat4(cmap, p, data, start, offset) {
                // Length in bytes of the sub-tables.
                cmap.length = p.parseUShort();
                cmap.language = p.parseUShort();

                // segCount is stored x 2.
                var segCount;
                cmap.segCount = segCount = p.parseUShort() >> 1;

                // Skip searchRange, entrySelector, rangeShift.
                p.skip('uShort', 3);

                // The "unrolled" mapping from character codes to glyph indices.
                cmap.glyphIndexMap = {};
                var endCountParser = new parse.Parser(data, start + offset + 14);
                var startCountParser = new parse.Parser(
                  data,
                  start + offset + 16 + segCount * 2
                );
                var idDeltaParser = new parse.Parser(
                  data,
                  start + offset + 16 + segCount * 4
                );
                var idRangeOffsetParser = new parse.Parser(
                  data,
                  start + offset + 16 + segCount * 6
                );
                var glyphIndexOffset = start + offset + 16 + segCount * 8;
                for (var i = 0; i < segCount - 1; i += 1) {
                  var glyphIndex = void 0;
                  var endCount = endCountParser.parseUShort();
                  var startCount = startCountParser.parseUShort();
                  var idDelta = idDeltaParser.parseShort();
                  var idRangeOffset = idRangeOffsetParser.parseUShort();
                  for (var c = startCount; c <= endCount; c += 1) {
                    if (idRangeOffset !== 0) {
                      // The idRangeOffset is relative to the current position in the idRangeOffset array.
                      // Take the current offset in the idRangeOffset array.
                      glyphIndexOffset =
                        idRangeOffsetParser.offset + idRangeOffsetParser.relativeOffset - 2;

                      // Add the value of the idRangeOffset, which will move us into the glyphIndex array.
                      glyphIndexOffset += idRangeOffset;

                      // Then add the character index of the current segment, multiplied by 2 for USHORTs.
                      glyphIndexOffset += (c - startCount) * 2;
                      glyphIndex = parse.getUShort(data, glyphIndexOffset);
                      if (glyphIndex !== 0) {
                        glyphIndex = (glyphIndex + idDelta) & 0xffff;
                      }
                    } else {
                      glyphIndex = (c + idDelta) & 0xffff;
                    }

                    cmap.glyphIndexMap[c] = glyphIndex;
                  }
                }
              }

              // Parse the `cmap` table. This table stores the mappings from characters to glyphs.
              // There are many available formats, but we only support the Windows format 4 and 12.
              // This function returns a `CmapEncoding` object or null if no supported format could be found.
              function parseCmapTable(data, start) {
                var cmap = {};
                cmap.version = parse.getUShort(data, start);
                check.argument(cmap.version === 0, 'cmap table version should be 0.');

                // The cmap table can contain many sub-tables, each with their own format.
                // We're only interested in a "platform 0" (Unicode format) and "platform 3" (Windows format) table.
                cmap.numTables = parse.getUShort(data, start + 2);
                var offset = -1;
                for (var i = cmap.numTables - 1; i >= 0; i -= 1) {
                  var platformId = parse.getUShort(data, start + 4 + i * 8);
                  var encodingId = parse.getUShort(data, start + 4 + i * 8 + 2);
                  if (
                    (platformId === 3 &&
                      (encodingId === 0 || encodingId === 1 || encodingId === 10)) ||
                    (platformId === 0 &&
                      (encodingId === 0 ||
                        encodingId === 1 ||
                        encodingId === 2 ||
                        encodingId === 3 ||
                        encodingId === 4))
                  ) {
                    offset = parse.getULong(data, start + 4 + i * 8 + 4);
                    break;
                  }
                }

                if (offset === -1) {
                  // There is no cmap table in the font that we support.
                  throw new Error('No valid cmap sub-tables found.');
                }

                var p = new parse.Parser(data, start + offset);
                cmap.format = p.parseUShort();

                if (cmap.format === 12) {
                  parseCmapTableFormat12(cmap, p);
                } else if (cmap.format === 4) {
                  parseCmapTableFormat4(cmap, p, data, start, offset);
                } else {
                  throw new Error(
                    'Only format 4 and 12 cmap tables are supported (found format ' +
                      cmap.format +
                      ').'
                  );
                }

                return cmap;
              }

              function addSegment(t, code, glyphIndex) {
                t.segments.push({
                  end: code,
                  start: code,
                  delta: -(code - glyphIndex),
                  offset: 0,
                  glyphIndex: glyphIndex
                });
              }

              function addTerminatorSegment(t) {
                t.segments.push({
                  end: 0xffff,
                  start: 0xffff,
                  delta: 1,
                  offset: 0
                });
              }

              // Make cmap table, format 4 by default, 12 if needed only
              function makeCmapTable(glyphs) {
                // Plan 0 is the base Unicode Plan but emojis, for example are on another plan, and needs cmap 12 format (with 32bit)
                var isPlan0Only = true;
                var i;

                // Check if we need to add cmap format 12 or if format 4 only is fine
                for (i = glyphs.length - 1; i > 0; i -= 1) {
                  var g = glyphs.get(i);
                  if (g.unicode > 65535) {
                    console.log('Adding CMAP format 12 (needed!)');
                    isPlan0Only = false;
                    break;
                  }
                }

                var cmapTable = [
                  { name: 'version', type: 'USHORT', value: 0 },
                  { name: 'numTables', type: 'USHORT', value: isPlan0Only ? 1 : 2 },

                  // CMAP 4 header
                  { name: 'platformID', type: 'USHORT', value: 3 },
                  { name: 'encodingID', type: 'USHORT', value: 1 },
                  { name: 'offset', type: 'ULONG', value: isPlan0Only ? 12 : 12 + 8 }
                ];

                if (!isPlan0Only) {
                  cmapTable = cmapTable.concat([
                    // CMAP 12 header
                    { name: 'cmap12PlatformID', type: 'USHORT', value: 3 }, // We encode only for PlatformID = 3 (Windows) because it is supported everywhere
                    { name: 'cmap12EncodingID', type: 'USHORT', value: 10 },
                    { name: 'cmap12Offset', type: 'ULONG', value: 0 }
                  ]);
                }

                cmapTable = cmapTable.concat([
                  // CMAP 4 Subtable
                  { name: 'format', type: 'USHORT', value: 4 },
                  { name: 'cmap4Length', type: 'USHORT', value: 0 },
                  { name: 'language', type: 'USHORT', value: 0 },
                  { name: 'segCountX2', type: 'USHORT', value: 0 },
                  { name: 'searchRange', type: 'USHORT', value: 0 },
                  { name: 'entrySelector', type: 'USHORT', value: 0 },
                  { name: 'rangeShift', type: 'USHORT', value: 0 }
                ]);

                var t = new table.Table('cmap', cmapTable);

                t.segments = [];
                for (i = 0; i < glyphs.length; i += 1) {
                  var glyph = glyphs.get(i);
                  for (var j = 0; j < glyph.unicodes.length; j += 1) {
                    addSegment(t, glyph.unicodes[j], i);
                  }

                  t.segments = t.segments.sort(function(a, b) {
                    return a.start - b.start;
                  });
                }

                addTerminatorSegment(t);

                var segCount = t.segments.length;
                var segCountToRemove = 0;

                // CMAP 4
                // Set up parallel segment arrays.
                var endCounts = [];
                var startCounts = [];
                var idDeltas = [];
                var idRangeOffsets = [];
                var glyphIds = [];

                // CMAP 12
                var cmap12Groups = [];

                // Reminder this loop is not following the specification at 100%
                // The specification -> find suites of characters and make a group
                // Here we're doing one group for each letter
                // Doing as the spec can save 8 times (or more) space
                for (i = 0; i < segCount; i += 1) {
                  var segment = t.segments[i];

                  // CMAP 4
                  if (segment.end <= 65535 && segment.start <= 65535) {
                    endCounts = endCounts.concat({
                      name: 'end_' + i,
                      type: 'USHORT',
                      value: segment.end
                    });
                    startCounts = startCounts.concat({
                      name: 'start_' + i,
                      type: 'USHORT',
                      value: segment.start
                    });
                    idDeltas = idDeltas.concat({
                      name: 'idDelta_' + i,
                      type: 'SHORT',
                      value: segment.delta
                    });
                    idRangeOffsets = idRangeOffsets.concat({
                      name: 'idRangeOffset_' + i,
                      type: 'USHORT',
                      value: segment.offset
                    });
                    if (segment.glyphId !== undefined) {
                      glyphIds = glyphIds.concat({
                        name: 'glyph_' + i,
                        type: 'USHORT',
                        value: segment.glyphId
                      });
                    }
                  } else {
                    // Skip Unicode > 65535 (16bit unsigned max) for CMAP 4, will be added in CMAP 12
                    segCountToRemove += 1;
                  }

                  // CMAP 12
                  // Skip Terminator Segment
                  if (!isPlan0Only && segment.glyphIndex !== undefined) {
                    cmap12Groups = cmap12Groups.concat({
                      name: 'cmap12Start_' + i,
                      type: 'ULONG',
                      value: segment.start
                    });
                    cmap12Groups = cmap12Groups.concat({
                      name: 'cmap12End_' + i,
                      type: 'ULONG',
                      value: segment.end
                    });
                    cmap12Groups = cmap12Groups.concat({
                      name: 'cmap12Glyph_' + i,
                      type: 'ULONG',
                      value: segment.glyphIndex
                    });
                  }
                }

                // CMAP 4 Subtable
                t.segCountX2 = (segCount - segCountToRemove) * 2;
                t.searchRange =
                  Math.pow(
                    2,
                    Math.floor(Math.log(segCount - segCountToRemove) / Math.log(2))
                  ) * 2;
                t.entrySelector = Math.log(t.searchRange / 2) / Math.log(2);
                t.rangeShift = t.segCountX2 - t.searchRange;

                t.fields = t.fields.concat(endCounts);
                t.fields.push({ name: 'reservedPad', type: 'USHORT', value: 0 });
                t.fields = t.fields.concat(startCounts);
                t.fields = t.fields.concat(idDeltas);
                t.fields = t.fields.concat(idRangeOffsets);
                t.fields = t.fields.concat(glyphIds);

                t.cmap4Length =
                  14 + // Subtable header
                  endCounts.length * 2 +
                  2 + // reservedPad
                  startCounts.length * 2 +
                  idDeltas.length * 2 +
                  idRangeOffsets.length * 2 +
                  glyphIds.length * 2;

                if (!isPlan0Only) {
                  // CMAP 12 Subtable
                  var cmap12Length =
                    16 + // Subtable header
                    cmap12Groups.length * 4;

                  t.cmap12Offset = 12 + 2 * 2 + 4 + t.cmap4Length;
                  t.fields = t.fields.concat([
                    { name: 'cmap12Format', type: 'USHORT', value: 12 },
                    { name: 'cmap12Reserved', type: 'USHORT', value: 0 },
                    { name: 'cmap12Length', type: 'ULONG', value: cmap12Length },
                    { name: 'cmap12Language', type: 'ULONG', value: 0 },
                    { name: 'cmap12nGroups', type: 'ULONG', value: cmap12Groups.length / 3 }
                  ]);

                  t.fields = t.fields.concat(cmap12Groups);
                }

                return t;
              }

              var cmap = { parse: parseCmapTable, make: makeCmapTable };

              // Glyph encoding

              var cffStandardStrings = [
                '.notdef',
                'space',
                'exclam',
                'quotedbl',
                'numbersign',
                'dollar',
                'percent',
                'ampersand',
                'quoteright',
                'parenleft',
                'parenright',
                'asterisk',
                'plus',
                'comma',
                'hyphen',
                'period',
                'slash',
                'zero',
                'one',
                'two',
                'three',
                'four',
                'five',
                'six',
                'seven',
                'eight',
                'nine',
                'colon',
                'semicolon',
                'less',
                'equal',
                'greater',
                'question',
                'at',
                'A',
                'B',
                'C',
                'D',
                'E',
                'F',
                'G',
                'H',
                'I',
                'J',
                'K',
                'L',
                'M',
                'N',
                'O',
                'P',
                'Q',
                'R',
                'S',
                'T',
                'U',
                'V',
                'W',
                'X',
                'Y',
                'Z',
                'bracketleft',
                'backslash',
                'bracketright',
                'asciicircum',
                'underscore',
                'quoteleft',
                'a',
                'b',
                'c',
                'd',
                'e',
                'f',
                'g',
                'h',
                'i',
                'j',
                'k',
                'l',
                'm',
                'n',
                'o',
                'p',
                'q',
                'r',
                's',
                't',
                'u',
                'v',
                'w',
                'x',
                'y',
                'z',
                'braceleft',
                'bar',
                'braceright',
                'asciitilde',
                'exclamdown',
                'cent',
                'sterling',
                'fraction',
                'yen',
                'florin',
                'section',
                'currency',
                'quotesingle',
                'quotedblleft',
                'guillemotleft',
                'guilsinglleft',
                'guilsinglright',
                'fi',
                'fl',
                'endash',
                'dagger',
                'daggerdbl',
                'periodcentered',
                'paragraph',
                'bullet',
                'quotesinglbase',
                'quotedblbase',
                'quotedblright',
                'guillemotright',
                'ellipsis',
                'perthousand',
                'questiondown',
                'grave',
                'acute',
                'circumflex',
                'tilde',
                'macron',
                'breve',
                'dotaccent',
                'dieresis',
                'ring',
                'cedilla',
                'hungarumlaut',
                'ogonek',
                'caron',
                'emdash',
                'AE',
                'ordfeminine',
                'Lslash',
                'Oslash',
                'OE',
                'ordmasculine',
                'ae',
                'dotlessi',
                'lslash',
                'oslash',
                'oe',
                'germandbls',
                'onesuperior',
                'logicalnot',
                'mu',
                'trademark',
                'Eth',
                'onehalf',
                'plusminus',
                'Thorn',
                'onequarter',
                'divide',
                'brokenbar',
                'degree',
                'thorn',
                'threequarters',
                'twosuperior',
                'registered',
                'minus',
                'eth',
                'multiply',
                'threesuperior',
                'copyright',
                'Aacute',
                'Acircumflex',
                'Adieresis',
                'Agrave',
                'Aring',
                'Atilde',
                'Ccedilla',
                'Eacute',
                'Ecircumflex',
                'Edieresis',
                'Egrave',
                'Iacute',
                'Icircumflex',
                'Idieresis',
                'Igrave',
                'Ntilde',
                'Oacute',
                'Ocircumflex',
                'Odieresis',
                'Ograve',
                'Otilde',
                'Scaron',
                'Uacute',
                'Ucircumflex',
                'Udieresis',
                'Ugrave',
                'Yacute',
                'Ydieresis',
                'Zcaron',
                'aacute',
                'acircumflex',
                'adieresis',
                'agrave',
                'aring',
                'atilde',
                'ccedilla',
                'eacute',
                'ecircumflex',
                'edieresis',
                'egrave',
                'iacute',
                'icircumflex',
                'idieresis',
                'igrave',
                'ntilde',
                'oacute',
                'ocircumflex',
                'odieresis',
                'ograve',
                'otilde',
                'scaron',
                'uacute',
                'ucircumflex',
                'udieresis',
                'ugrave',
                'yacute',
                'ydieresis',
                'zcaron',
                'exclamsmall',
                'Hungarumlautsmall',
                'dollaroldstyle',
                'dollarsuperior',
                'ampersandsmall',
                'Acutesmall',
                'parenleftsuperior',
                'parenrightsuperior',
                '266 ff',
                'onedotenleader',
                'zerooldstyle',
                'oneoldstyle',
                'twooldstyle',
                'threeoldstyle',
                'fouroldstyle',
                'fiveoldstyle',
                'sixoldstyle',
                'sevenoldstyle',
                'eightoldstyle',
                'nineoldstyle',
                'commasuperior',
                'threequartersemdash',
                'periodsuperior',
                'questionsmall',
                'asuperior',
                'bsuperior',
                'centsuperior',
                'dsuperior',
                'esuperior',
                'isuperior',
                'lsuperior',
                'msuperior',
                'nsuperior',
                'osuperior',
                'rsuperior',
                'ssuperior',
                'tsuperior',
                'ff',
                'ffi',
                'ffl',
                'parenleftinferior',
                'parenrightinferior',
                'Circumflexsmall',
                'hyphensuperior',
                'Gravesmall',
                'Asmall',
                'Bsmall',
                'Csmall',
                'Dsmall',
                'Esmall',
                'Fsmall',
                'Gsmall',
                'Hsmall',
                'Ismall',
                'Jsmall',
                'Ksmall',
                'Lsmall',
                'Msmall',
                'Nsmall',
                'Osmall',
                'Psmall',
                'Qsmall',
                'Rsmall',
                'Ssmall',
                'Tsmall',
                'Usmall',
                'Vsmall',
                'Wsmall',
                'Xsmall',
                'Ysmall',
                'Zsmall',
                'colonmonetary',
                'onefitted',
                'rupiah',
                'Tildesmall',
                'exclamdownsmall',
                'centoldstyle',
                'Lslashsmall',
                'Scaronsmall',
                'Zcaronsmall',
                'Dieresissmall',
                'Brevesmall',
                'Caronsmall',
                'Dotaccentsmall',
                'Macronsmall',
                'figuredash',
                'hypheninferior',
                'Ogoneksmall',
                'Ringsmall',
                'Cedillasmall',
                'questiondownsmall',
                'oneeighth',
                'threeeighths',
                'fiveeighths',
                'seveneighths',
                'onethird',
                'twothirds',
                'zerosuperior',
                'foursuperior',
                'fivesuperior',
                'sixsuperior',
                'sevensuperior',
                'eightsuperior',
                'ninesuperior',
                'zeroinferior',
                'oneinferior',
                'twoinferior',
                'threeinferior',
                'fourinferior',
                'fiveinferior',
                'sixinferior',
                'seveninferior',
                'eightinferior',
                'nineinferior',
                'centinferior',
                'dollarinferior',
                'periodinferior',
                'commainferior',
                'Agravesmall',
                'Aacutesmall',
                'Acircumflexsmall',
                'Atildesmall',
                'Adieresissmall',
                'Aringsmall',
                'AEsmall',
                'Ccedillasmall',
                'Egravesmall',
                'Eacutesmall',
                'Ecircumflexsmall',
                'Edieresissmall',
                'Igravesmall',
                'Iacutesmall',
                'Icircumflexsmall',
                'Idieresissmall',
                'Ethsmall',
                'Ntildesmall',
                'Ogravesmall',
                'Oacutesmall',
                'Ocircumflexsmall',
                'Otildesmall',
                'Odieresissmall',
                'OEsmall',
                'Oslashsmall',
                'Ugravesmall',
                'Uacutesmall',
                'Ucircumflexsmall',
                'Udieresissmall',
                'Yacutesmall',
                'Thornsmall',
                'Ydieresissmall',
                '001.000',
                '001.001',
                '001.002',
                '001.003',
                'Black',
                'Bold',
                'Book',
                'Light',
                'Medium',
                'Regular',
                'Roman',
                'Semibold'
              ];

              var cffStandardEncoding = [
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                'space',
                'exclam',
                'quotedbl',
                'numbersign',
                'dollar',
                'percent',
                'ampersand',
                'quoteright',
                'parenleft',
                'parenright',
                'asterisk',
                'plus',
                'comma',
                'hyphen',
                'period',
                'slash',
                'zero',
                'one',
                'two',
                'three',
                'four',
                'five',
                'six',
                'seven',
                'eight',
                'nine',
                'colon',
                'semicolon',
                'less',
                'equal',
                'greater',
                'question',
                'at',
                'A',
                'B',
                'C',
                'D',
                'E',
                'F',
                'G',
                'H',
                'I',
                'J',
                'K',
                'L',
                'M',
                'N',
                'O',
                'P',
                'Q',
                'R',
                'S',
                'T',
                'U',
                'V',
                'W',
                'X',
                'Y',
                'Z',
                'bracketleft',
                'backslash',
                'bracketright',
                'asciicircum',
                'underscore',
                'quoteleft',
                'a',
                'b',
                'c',
                'd',
                'e',
                'f',
                'g',
                'h',
                'i',
                'j',
                'k',
                'l',
                'm',
                'n',
                'o',
                'p',
                'q',
                'r',
                's',
                't',
                'u',
                'v',
                'w',
                'x',
                'y',
                'z',
                'braceleft',
                'bar',
                'braceright',
                'asciitilde',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                'exclamdown',
                'cent',
                'sterling',
                'fraction',
                'yen',
                'florin',
                'section',
                'currency',
                'quotesingle',
                'quotedblleft',
                'guillemotleft',
                'guilsinglleft',
                'guilsinglright',
                'fi',
                'fl',
                '',
                'endash',
                'dagger',
                'daggerdbl',
                'periodcentered',
                '',
                'paragraph',
                'bullet',
                'quotesinglbase',
                'quotedblbase',
                'quotedblright',
                'guillemotright',
                'ellipsis',
                'perthousand',
                '',
                'questiondown',
                '',
                'grave',
                'acute',
                'circumflex',
                'tilde',
                'macron',
                'breve',
                'dotaccent',
                'dieresis',
                '',
                'ring',
                'cedilla',
                '',
                'hungarumlaut',
                'ogonek',
                'caron',
                'emdash',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                'AE',
                '',
                'ordfeminine',
                '',
                '',
                '',
                '',
                'Lslash',
                'Oslash',
                'OE',
                'ordmasculine',
                '',
                '',
                '',
                '',
                '',
                'ae',
                '',
                '',
                '',
                'dotlessi',
                '',
                '',
                'lslash',
                'oslash',
                'oe',
                'germandbls'
              ];

              var cffExpertEncoding = [
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                'space',
                'exclamsmall',
                'Hungarumlautsmall',
                '',
                'dollaroldstyle',
                'dollarsuperior',
                'ampersandsmall',
                'Acutesmall',
                'parenleftsuperior',
                'parenrightsuperior',
                'twodotenleader',
                'onedotenleader',
                'comma',
                'hyphen',
                'period',
                'fraction',
                'zerooldstyle',
                'oneoldstyle',
                'twooldstyle',
                'threeoldstyle',
                'fouroldstyle',
                'fiveoldstyle',
                'sixoldstyle',
                'sevenoldstyle',
                'eightoldstyle',
                'nineoldstyle',
                'colon',
                'semicolon',
                'commasuperior',
                'threequartersemdash',
                'periodsuperior',
                'questionsmall',
                '',
                'asuperior',
                'bsuperior',
                'centsuperior',
                'dsuperior',
                'esuperior',
                '',
                '',
                'isuperior',
                '',
                '',
                'lsuperior',
                'msuperior',
                'nsuperior',
                'osuperior',
                '',
                '',
                'rsuperior',
                'ssuperior',
                'tsuperior',
                '',
                'ff',
                'fi',
                'fl',
                'ffi',
                'ffl',
                'parenleftinferior',
                '',
                'parenrightinferior',
                'Circumflexsmall',
                'hyphensuperior',
                'Gravesmall',
                'Asmall',
                'Bsmall',
                'Csmall',
                'Dsmall',
                'Esmall',
                'Fsmall',
                'Gsmall',
                'Hsmall',
                'Ismall',
                'Jsmall',
                'Ksmall',
                'Lsmall',
                'Msmall',
                'Nsmall',
                'Osmall',
                'Psmall',
                'Qsmall',
                'Rsmall',
                'Ssmall',
                'Tsmall',
                'Usmall',
                'Vsmall',
                'Wsmall',
                'Xsmall',
                'Ysmall',
                'Zsmall',
                'colonmonetary',
                'onefitted',
                'rupiah',
                'Tildesmall',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                '',
                'exclamdownsmall',
                'centoldstyle',
                'Lslashsmall',
                '',
                '',
                'Scaronsmall',
                'Zcaronsmall',
                'Dieresissmall',
                'Brevesmall',
                'Caronsmall',
                '',
                'Dotaccentsmall',
                '',
                '',
                'Macronsmall',
                '',
                '',
                'figuredash',
                'hypheninferior',
                '',
                '',
                'Ogoneksmall',
                'Ringsmall',
                'Cedillasmall',
                '',
                '',
                '',
                'onequarter',
                'onehalf',
                'threequarters',
                'questiondownsmall',
                'oneeighth',
                'threeeighths',
                'fiveeighths',
                'seveneighths',
                'onethird',
                'twothirds',
                '',
                '',
                'zerosuperior',
                'onesuperior',
                'twosuperior',
                'threesuperior',
                'foursuperior',
                'fivesuperior',
                'sixsuperior',
                'sevensuperior',
                'eightsuperior',
                'ninesuperior',
                'zeroinferior',
                'oneinferior',
                'twoinferior',
                'threeinferior',
                'fourinferior',
                'fiveinferior',
                'sixinferior',
                'seveninferior',
                'eightinferior',
                'nineinferior',
                'centinferior',
                'dollarinferior',
                'periodinferior',
                'commainferior',
                'Agravesmall',
                'Aacutesmall',
                'Acircumflexsmall',
                'Atildesmall',
                'Adieresissmall',
                'Aringsmall',
                'AEsmall',
                'Ccedillasmall',
                'Egravesmall',
                'Eacutesmall',
                'Ecircumflexsmall',
                'Edieresissmall',
                'Igravesmall',
                'Iacutesmall',
                'Icircumflexsmall',
                'Idieresissmall',
                'Ethsmall',
                'Ntildesmall',
                'Ogravesmall',
                'Oacutesmall',
                'Ocircumflexsmall',
                'Otildesmall',
                'Odieresissmall',
                'OEsmall',
                'Oslashsmall',
                'Ugravesmall',
                'Uacutesmall',
                'Ucircumflexsmall',
                'Udieresissmall',
                'Yacutesmall',
                'Thornsmall',
                'Ydieresissmall'
              ];

              var standardNames = [
                '.notdef',
                '.null',
                'nonmarkingreturn',
                'space',
                'exclam',
                'quotedbl',
                'numbersign',
                'dollar',
                'percent',
                'ampersand',
                'quotesingle',
                'parenleft',
                'parenright',
                'asterisk',
                'plus',
                'comma',
                'hyphen',
                'period',
                'slash',
                'zero',
                'one',
                'two',
                'three',
                'four',
                'five',
                'six',
                'seven',
                'eight',
                'nine',
                'colon',
                'semicolon',
                'less',
                'equal',
                'greater',
                'question',
                'at',
                'A',
                'B',
                'C',
                'D',
                'E',
                'F',
                'G',
                'H',
                'I',
                'J',
                'K',
                'L',
                'M',
                'N',
                'O',
                'P',
                'Q',
                'R',
                'S',
                'T',
                'U',
                'V',
                'W',
                'X',
                'Y',
                'Z',
                'bracketleft',
                'backslash',
                'bracketright',
                'asciicircum',
                'underscore',
                'grave',
                'a',
                'b',
                'c',
                'd',
                'e',
                'f',
                'g',
                'h',
                'i',
                'j',
                'k',
                'l',
                'm',
                'n',
                'o',
                'p',
                'q',
                'r',
                's',
                't',
                'u',
                'v',
                'w',
                'x',
                'y',
                'z',
                'braceleft',
                'bar',
                'braceright',
                'asciitilde',
                'Adieresis',
                'Aring',
                'Ccedilla',
                'Eacute',
                'Ntilde',
                'Odieresis',
                'Udieresis',
                'aacute',
                'agrave',
                'acircumflex',
                'adieresis',
                'atilde',
                'aring',
                'ccedilla',
                'eacute',
                'egrave',
                'ecircumflex',
                'edieresis',
                'iacute',
                'igrave',
                'icircumflex',
                'idieresis',
                'ntilde',
                'oacute',
                'ograve',
                'ocircumflex',
                'odieresis',
                'otilde',
                'uacute',
                'ugrave',
                'ucircumflex',
                'udieresis',
                'dagger',
                'degree',
                'cent',
                'sterling',
                'section',
                'bullet',
                'paragraph',
                'germandbls',
                'registered',
                'copyright',
                'trademark',
                'acute',
                'dieresis',
                'notequal',
                'AE',
                'Oslash',
                'infinity',
                'plusminus',
                'lessequal',
                'greaterequal',
                'yen',
                'mu',
                'partialdiff',
                'summation',
                'product',
                'pi',
                'integral',
                'ordfeminine',
                'ordmasculine',
                'Omega',
                'ae',
                'oslash',
                'questiondown',
                'exclamdown',
                'logicalnot',
                'radical',
                'florin',
                'approxequal',
                'Delta',
                'guillemotleft',
                'guillemotright',
                'ellipsis',
                'nonbreakingspace',
                'Agrave',
                'Atilde',
                'Otilde',
                'OE',
                'oe',
                'endash',
                'emdash',
                'quotedblleft',
                'quotedblright',
                'quoteleft',
                'quoteright',
                'divide',
                'lozenge',
                'ydieresis',
                'Ydieresis',
                'fraction',
                'currency',
                'guilsinglleft',
                'guilsinglright',
                'fi',
                'fl',
                'daggerdbl',
                'periodcentered',
                'quotesinglbase',
                'quotedblbase',
                'perthousand',
                'Acircumflex',
                'Ecircumflex',
                'Aacute',
                'Edieresis',
                'Egrave',
                'Iacute',
                'Icircumflex',
                'Idieresis',
                'Igrave',
                'Oacute',
                'Ocircumflex',
                'apple',
                'Ograve',
                'Uacute',
                'Ucircumflex',
                'Ugrave',
                'dotlessi',
                'circumflex',
                'tilde',
                'macron',
                'breve',
                'dotaccent',
                'ring',
                'cedilla',
                'hungarumlaut',
                'ogonek',
                'caron',
                'Lslash',
                'lslash',
                'Scaron',
                'scaron',
                'Zcaron',
                'zcaron',
                'brokenbar',
                'Eth',
                'eth',
                'Yacute',
                'yacute',
                'Thorn',
                'thorn',
                'minus',
                'multiply',
                'onesuperior',
                'twosuperior',
                'threesuperior',
                'onehalf',
                'onequarter',
                'threequarters',
                'franc',
                'Gbreve',
                'gbreve',
                'Idotaccent',
                'Scedilla',
                'scedilla',
                'Cacute',
                'cacute',
                'Ccaron',
                'ccaron',
                'dcroat'
              ];

              /**
               * This is the encoding used for fonts created from scratch.
               * It loops through all glyphs and finds the appropriate unicode value.
               * Since it's linear time, other encodings will be faster.
               * @exports opentype.DefaultEncoding
               * @class
               * @constructor
               * @param {opentype.Font}
               */
              function DefaultEncoding(font) {
                this.font = font;
              }

              DefaultEncoding.prototype.charToGlyphIndex = function(c) {
                var code = c.codePointAt(0);
                var glyphs = this.font.glyphs;
                if (glyphs) {
                  for (var i = 0; i < glyphs.length; i += 1) {
                    var glyph = glyphs.get(i);
                    for (var j = 0; j < glyph.unicodes.length; j += 1) {
                      if (glyph.unicodes[j] === code) {
                        return i;
                      }
                    }
                  }
                }
                return null;
              };

              /**
               * @exports opentype.CmapEncoding
               * @class
               * @constructor
               * @param {Object} cmap - a object with the cmap encoded data
               */
              function CmapEncoding(cmap) {
                this.cmap = cmap;
              }

              /**
               * @param  {string} c - the character
               * @return {number} The glyph index.
               */
              CmapEncoding.prototype.charToGlyphIndex = function(c) {
                return this.cmap.glyphIndexMap[c.codePointAt(0)] || 0;
              };

              /**
               * @exports opentype.CffEncoding
               * @class
               * @constructor
               * @param {string} encoding - The encoding
               * @param {Array} charset - The character set.
               */
              function CffEncoding(encoding, charset) {
                this.encoding = encoding;
                this.charset = charset;
              }

              /**
               * @param  {string} s - The character
               * @return {number} The index.
               */
              CffEncoding.prototype.charToGlyphIndex = function(s) {
                var code = s.codePointAt(0);
                var charName = this.encoding[code];
                return this.charset.indexOf(charName);
              };

              /**
               * @exports opentype.GlyphNames
               * @class
               * @constructor
               * @param {Object} post
               */
              function GlyphNames(post) {
                var this$1 = this;

                switch (post.version) {
                  case 1:
                    this.names = standardNames.slice();
                    break;
                  case 2:
                    this.names = new Array(post.numberOfGlyphs);
                    for (var i = 0; i < post.numberOfGlyphs; i++) {
                      if (post.glyphNameIndex[i] < standardNames.length) {
                        this$1.names[i] = standardNames[post.glyphNameIndex[i]];
                      } else {
                        this$1.names[i] =
                          post.names[post.glyphNameIndex[i] - standardNames.length];
                      }
                    }

                    break;
                  case 2.5:
                    this.names = new Array(post.numberOfGlyphs);
                    for (var i$1 = 0; i$1 < post.numberOfGlyphs; i$1++) {
                      this$1.names[i$1] = standardNames[i$1 + post.glyphNameIndex[i$1]];
                    }

                    break;
                  case 3:
                    this.names = [];
                    break;
                  default:
                    this.names = [];
                    break;
                }
              }

              /**
               * Gets the index of a glyph by name.
               * @param  {string} name - The glyph name
               * @return {number} The index
               */
              GlyphNames.prototype.nameToGlyphIndex = function(name) {
                return this.names.indexOf(name);
              };

              /**
               * @param  {number} gid
               * @return {string}
               */
              GlyphNames.prototype.glyphIndexToName = function(gid) {
                return this.names[gid];
              };

              /**
               * @alias opentype.addGlyphNames
               * @param {opentype.Font}
               */
              function addGlyphNames(font) {
                var glyph;
                var glyphIndexMap = font.tables.cmap.glyphIndexMap;
                var charCodes = Object.keys(glyphIndexMap);

                for (var i = 0; i < charCodes.length; i += 1) {
                  var c = charCodes[i];
                  var glyphIndex = glyphIndexMap[c];
                  glyph = font.glyphs.get(glyphIndex);
                  glyph.addUnicode(parseInt(c));
                }

                for (var i$1 = 0; i$1 < font.glyphs.length; i$1 += 1) {
                  glyph = font.glyphs.get(i$1);
                  if (font.cffEncoding) {
                    if (font.isCIDFont) {
                      glyph.name = 'gid' + i$1;
                    } else {
                      glyph.name = font.cffEncoding.charset[i$1];
                    }
                  } else if (font.glyphNames.names) {
                    glyph.name = font.glyphNames.glyphIndexToName(i$1);
                  }
                }
              }

              // Drawing utility functions.

              // Draw a line on the given context from point `x1,y1` to point `x2,y2`.
              function line(ctx, x1, y1, x2, y2) {
                ctx.beginPath();
                ctx.moveTo(x1, y1);
                ctx.lineTo(x2, y2);
                ctx.stroke();
              }

              var draw = { line: line };

              // The Glyph object
              // import glyf from './tables/glyf' Can't be imported here, because it's a circular dependency

              function getPathDefinition(glyph, path) {
                var _path = path || new Path();
                return {
                  configurable: true,

                  get: function() {
                    if (typeof _path === 'function') {
                      _path = _path();
                    }

                    return _path;
                  },

                  set: function(p) {
                    _path = p;
                  }
                };
              }
              /**
               * @typedef GlyphOptions
               * @type Object
               * @property {string} [name] - The glyph name
               * @property {number} [unicode]
               * @property {Array} [unicodes]
               * @property {number} [xMin]
               * @property {number} [yMin]
               * @property {number} [xMax]
               * @property {number} [yMax]
               * @property {number} [advanceWidth]
               */

              // A Glyph is an individual mark that often corresponds to a character.
              // Some glyphs, such as ligatures, are a combination of many characters.
              // Glyphs are the basic building blocks of a font.
              //
              // The `Glyph` class contains utility methods for drawing the path and its points.
              /**
               * @exports opentype.Glyph
               * @class
               * @param {GlyphOptions}
               * @constructor
               */
              function Glyph(options) {
                // By putting all the code on a prototype function (which is only declared once)
                // we reduce the memory requirements for larger fonts by some 2%
                this.bindConstructorValues(options);
              }

              /**
               * @param  {GlyphOptions}
               */
              Glyph.prototype.bindConstructorValues = function(options) {
                this.index = options.index || 0;

                // These three values cannot be deferred for memory optimization:
                this.name = options.name || null;
                this.unicode = options.unicode || undefined;
                this.unicodes =
                  options.unicodes || options.unicode !== undefined
                    ? [options.unicode]
                    : [];

                // But by binding these values only when necessary, we reduce can
                // the memory requirements by almost 3% for larger fonts.
                if (options.xMin) {
                  this.xMin = options.xMin;
                }

                if (options.yMin) {
                  this.yMin = options.yMin;
                }

                if (options.xMax) {
                  this.xMax = options.xMax;
                }

                if (options.yMax) {
                  this.yMax = options.yMax;
                }

                if (options.advanceWidth) {
                  this.advanceWidth = options.advanceWidth;
                }

                // The path for a glyph is the most memory intensive, and is bound as a value
                // with a getter/setter to ensure we actually do path parsing only once the
                // path is actually needed by anything.
                Object.defineProperty(this, 'path', getPathDefinition(this, options.path));
              };

              /**
               * @param {number}
               */
              Glyph.prototype.addUnicode = function(unicode) {
                if (this.unicodes.length === 0) {
                  this.unicode = unicode;
                }

                this.unicodes.push(unicode);
              };

              /**
               * Calculate the minimum bounding box for this glyph.
               * @return {opentype.BoundingBox}
               */
              Glyph.prototype.getBoundingBox = function() {
                return this.path.getBoundingBox();
              };

              /**
               * Convert the glyph to a Path we can draw on a drawing context.
               * @param  {number} [x=0] - Horizontal position of the beginning of the text.
               * @param  {number} [y=0] - Vertical position of the *baseline* of the text.
               * @param  {number} [fontSize=72] - Font size in pixels. We scale the glyph units by `1 / unitsPerEm * fontSize`.
               * @param  {Object=} options - xScale, yScale to stretch the glyph.
               * @param  {opentype.Font} if hinting is to be used, the font
               * @return {opentype.Path}
               */
              Glyph.prototype.getPath = function(x, y, fontSize, options, font) {
                x = x !== undefined ? x : 0;
                y = y !== undefined ? y : 0;
                fontSize = fontSize !== undefined ? fontSize : 72;
                var commands;
                var hPoints;
                if (!options) {
                  options = {};
                }
                var xScale = options.xScale;
                var yScale = options.yScale;

                if (options.hinting && font && font.hinting) {
                  // in case of hinting, the hinting engine takes care
                  // of scaling the points (not the path) before hinting.
                  hPoints = this.path && font.hinting.exec(this, fontSize);
                  // in case the hinting engine failed hPoints is undefined
                  // and thus reverts to plain rending
                }

                if (hPoints) {
                  // Call font.hinting.getCommands instead of `glyf.getPath(hPoints).commands` to avoid a circular dependency
                  commands = font.hinting.getCommands(hPoints);
                  x = Math.round(x);
                  y = Math.round(y);
                  // TODO in case of hinting xyScaling is not yet supported
                  xScale = yScale = 1;
                } else {
                  commands = this.path.commands;
                  var scale = 1 / this.path.unitsPerEm * fontSize;
                  if (xScale === undefined) {
                    xScale = scale;
                  }
                  if (yScale === undefined) {
                    yScale = scale;
                  }
                }

                var p = new Path();
                for (var i = 0; i < commands.length; i += 1) {
                  var cmd = commands[i];
                  if (cmd.type === 'M') {
                    p.moveTo(x + cmd.x * xScale, y + -cmd.y * yScale);
                  } else if (cmd.type === 'L') {
                    p.lineTo(x + cmd.x * xScale, y + -cmd.y * yScale);
                  } else if (cmd.type === 'Q') {
                    p.quadraticCurveTo(
                      x + cmd.x1 * xScale,
                      y + -cmd.y1 * yScale,
                      x + cmd.x * xScale,
                      y + -cmd.y * yScale
                    );
                  } else if (cmd.type === 'C') {
                    p.curveTo(
                      x + cmd.x1 * xScale,
                      y + -cmd.y1 * yScale,
                      x + cmd.x2 * xScale,
                      y + -cmd.y2 * yScale,
                      x + cmd.x * xScale,
                      y + -cmd.y * yScale
                    );
                  } else if (cmd.type === 'Z') {
                    p.closePath();
                  }
                }

                return p;
              };

              /**
               * Split the glyph into contours.
               * This function is here for backwards compatibility, and to
               * provide raw access to the TrueType glyph outlines.
               * @return {Array}
               */
              Glyph.prototype.getContours = function() {
                var this$1 = this;

                if (this.points === undefined) {
                  return [];
                }

                var contours = [];
                var currentContour = [];
                for (var i = 0; i < this.points.length; i += 1) {
                  var pt = this$1.points[i];
                  currentContour.push(pt);
                  if (pt.lastPointOfContour) {
                    contours.push(currentContour);
                    currentContour = [];
                  }
                }

                check.argument(
                  currentContour.length === 0,
                  'There are still points left in the current contour.'
                );
                return contours;
              };

              /**
               * Calculate the xMin/yMin/xMax/yMax/lsb/rsb for a Glyph.
               * @return {Object}
               */
              Glyph.prototype.getMetrics = function() {
                var commands = this.path.commands;
                var xCoords = [];
                var yCoords = [];
                for (var i = 0; i < commands.length; i += 1) {
                  var cmd = commands[i];
                  if (cmd.type !== 'Z') {
                    xCoords.push(cmd.x);
                    yCoords.push(cmd.y);
                  }

                  if (cmd.type === 'Q' || cmd.type === 'C') {
                    xCoords.push(cmd.x1);
                    yCoords.push(cmd.y1);
                  }

                  if (cmd.type === 'C') {
                    xCoords.push(cmd.x2);
                    yCoords.push(cmd.y2);
                  }
                }

                var metrics = {
                  xMin: Math.min.apply(null, xCoords),
                  yMin: Math.min.apply(null, yCoords),
                  xMax: Math.max.apply(null, xCoords),
                  yMax: Math.max.apply(null, yCoords),
                  leftSideBearing: this.leftSideBearing
                };

                if (!isFinite(metrics.xMin)) {
                  metrics.xMin = 0;
                }

                if (!isFinite(metrics.xMax)) {
                  metrics.xMax = this.advanceWidth;
                }

                if (!isFinite(metrics.yMin)) {
                  metrics.yMin = 0;
                }

                if (!isFinite(metrics.yMax)) {
                  metrics.yMax = 0;
                }

                metrics.rightSideBearing =
                  this.advanceWidth -
                  metrics.leftSideBearing -
                  (metrics.xMax - metrics.xMin);
                return metrics;
              };

              /**
               * Draw the glyph on the given context.
               * @param  {CanvasRenderingContext2D} ctx - A 2D drawing context, like Canvas.
               * @param  {number} [x=0] - Horizontal position of the beginning of the text.
               * @param  {number} [y=0] - Vertical position of the *baseline* of the text.
               * @param  {number} [fontSize=72] - Font size in pixels. We scale the glyph units by `1 / unitsPerEm * fontSize`.
               * @param  {Object=} options - xScale, yScale to stretch the glyph.
               */
              Glyph.prototype.draw = function(ctx, x, y, fontSize, options) {
                this.getPath(x, y, fontSize, options).draw(ctx);
              };

              /**
               * Draw the points of the glyph.
               * On-curve points will be drawn in blue, off-curve points will be drawn in red.
               * @param  {CanvasRenderingContext2D} ctx - A 2D drawing context, like Canvas.
               * @param  {number} [x=0] - Horizontal position of the beginning of the text.
               * @param  {number} [y=0] - Vertical position of the *baseline* of the text.
               * @param  {number} [fontSize=72] - Font size in pixels. We scale the glyph units by `1 / unitsPerEm * fontSize`.
               */
              Glyph.prototype.drawPoints = function(ctx, x, y, fontSize) {
                function drawCircles(l, x, y, scale) {
                  var PI_SQ = Math.PI * 2;
                  ctx.beginPath();
                  for (var j = 0; j < l.length; j += 1) {
                    ctx.moveTo(x + l[j].x * scale, y + l[j].y * scale);
                    ctx.arc(x + l[j].x * scale, y + l[j].y * scale, 2, 0, PI_SQ, false);
                  }

                  ctx.closePath();
                  ctx.fill();
                }

                x = x !== undefined ? x : 0;
                y = y !== undefined ? y : 0;
                fontSize = fontSize !== undefined ? fontSize : 24;
                var scale = 1 / this.path.unitsPerEm * fontSize;

                var blueCircles = [];
                var redCircles = [];
                var path = this.path;
                for (var i = 0; i < path.commands.length; i += 1) {
                  var cmd = path.commands[i];
                  if (cmd.x !== undefined) {
                    blueCircles.push({ x: cmd.x, y: -cmd.y });
                  }

                  if (cmd.x1 !== undefined) {
                    redCircles.push({ x: cmd.x1, y: -cmd.y1 });
                  }

                  if (cmd.x2 !== undefined) {
                    redCircles.push({ x: cmd.x2, y: -cmd.y2 });
                  }
                }

                ctx.fillStyle = 'blue';
                drawCircles(blueCircles, x, y, scale);
                ctx.fillStyle = 'red';
                drawCircles(redCircles, x, y, scale);
              };

              /**
               * Draw lines indicating important font measurements.
               * Black lines indicate the origin of the coordinate system (point 0,0).
               * Blue lines indicate the glyph bounding box.
               * Green line indicates the advance width of the glyph.
               * @param  {CanvasRenderingContext2D} ctx - A 2D drawing context, like Canvas.
               * @param  {number} [x=0] - Horizontal position of the beginning of the text.
               * @param  {number} [y=0] - Vertical position of the *baseline* of the text.
               * @param  {number} [fontSize=72] - Font size in pixels. We scale the glyph units by `1 / unitsPerEm * fontSize`.
               */
              Glyph.prototype.drawMetrics = function(ctx, x, y, fontSize) {
                var scale;
                x = x !== undefined ? x : 0;
                y = y !== undefined ? y : 0;
                fontSize = fontSize !== undefined ? fontSize : 24;
                scale = 1 / this.path.unitsPerEm * fontSize;
                ctx.lineWidth = 1;

                // Draw the origin
                ctx.strokeStyle = 'black';
                draw.line(ctx, x, -10000, x, 10000);
                draw.line(ctx, -10000, y, 10000, y);

                // This code is here due to memory optimization: by not using
                // defaults in the constructor, we save a notable amount of memory.
                var xMin = this.xMin || 0;
                var yMin = this.yMin || 0;
                var xMax = this.xMax || 0;
                var yMax = this.yMax || 0;
                var advanceWidth = this.advanceWidth || 0;

                // Draw the glyph box
                ctx.strokeStyle = 'blue';
                draw.line(ctx, x + xMin * scale, -10000, x + xMin * scale, 10000);
                draw.line(ctx, x + xMax * scale, -10000, x + xMax * scale, 10000);
                draw.line(ctx, -10000, y + -yMin * scale, 10000, y + -yMin * scale);
                draw.line(ctx, -10000, y + -yMax * scale, 10000, y + -yMax * scale);

                // Draw the advance width
                ctx.strokeStyle = 'green';
                draw.line(
                  ctx,
                  x + advanceWidth * scale,
                  -10000,
                  x + advanceWidth * scale,
                  10000
                );
              };

              // The GlyphSet object

              // Define a property on the glyph that depends on the path being loaded.
              function defineDependentProperty(glyph, externalName, internalName) {
                Object.defineProperty(glyph, externalName, {
                  get: function() {
                    // Request the path property to make sure the path is loaded.
                    glyph.path; // jshint ignore:line
                    return glyph[internalName];
                  },
                  set: function(newValue) {
                    glyph[internalName] = newValue;
                  },
                  enumerable: true,
                  configurable: true
                });
              }

              /**
               * A GlyphSet represents all glyphs available in the font, but modelled using
               * a deferred glyph loader, for retrieving glyphs only once they are absolutely
               * necessary, to keep the memory footprint down.
               * @exports opentype.GlyphSet
               * @class
               * @param {opentype.Font}
               * @param {Array}
               */
              function GlyphSet(font, glyphs) {
                var this$1 = this;

                this.font = font;
                this.glyphs = {};
                if (Array.isArray(glyphs)) {
                  for (var i = 0; i < glyphs.length; i++) {
                    this$1.glyphs[i] = glyphs[i];
                  }
                }

                this.length = (glyphs && glyphs.length) || 0;
              }

              /**
               * @param  {number} index
               * @return {opentype.Glyph}
               */
              GlyphSet.prototype.get = function(index) {
                if (typeof this.glyphs[index] === 'function') {
                  this.glyphs[index] = this.glyphs[index]();
                }

                return this.glyphs[index];
              };

              /**
               * @param  {number} index
               * @param  {Object}
               */
              GlyphSet.prototype.push = function(index, loader) {
                this.glyphs[index] = loader;
                this.length++;
              };

              /**
               * @alias opentype.glyphLoader
               * @param  {opentype.Font} font
               * @param  {number} index
               * @return {opentype.Glyph}
               */
              function glyphLoader(font, index) {
                return new Glyph({ index: index, font: font });
              }

              /**
               * Generate a stub glyph that can be filled with all metadata *except*
               * the "points" and "path" properties, which must be loaded only once
               * the glyph's path is actually requested for text shaping.
               * @alias opentype.ttfGlyphLoader
               * @param  {opentype.Font} font
               * @param  {number} index
               * @param  {Function} parseGlyph
               * @param  {Object} data
               * @param  {number} position
               * @param  {Function} buildPath
               * @return {opentype.Glyph}
               */
              function ttfGlyphLoader(font, index, parseGlyph, data, position, buildPath) {
                return function() {
                  var glyph = new Glyph({ index: index, font: font });

                  glyph.path = function() {
                    parseGlyph(glyph, data, position);
                    var path = buildPath(font.glyphs, glyph);
                    path.unitsPerEm = font.unitsPerEm;
                    return path;
                  };

                  defineDependentProperty(glyph, 'xMin', '_xMin');
                  defineDependentProperty(glyph, 'xMax', '_xMax');
                  defineDependentProperty(glyph, 'yMin', '_yMin');
                  defineDependentProperty(glyph, 'yMax', '_yMax');

                  return glyph;
                };
              }
              /**
               * @alias opentype.cffGlyphLoader
               * @param  {opentype.Font} font
               * @param  {number} index
               * @param  {Function} parseCFFCharstring
               * @param  {string} charstring
               * @return {opentype.Glyph}
               */
              function cffGlyphLoader(font, index, parseCFFCharstring, charstring) {
                return function() {
                  var glyph = new Glyph({ index: index, font: font });

                  glyph.path = function() {
                    var path = parseCFFCharstring(font, glyph, charstring);
                    path.unitsPerEm = font.unitsPerEm;
                    return path;
                  };

                  return glyph;
                };
              }

              var glyphset = {
                GlyphSet: GlyphSet,
                glyphLoader: glyphLoader,
                ttfGlyphLoader: ttfGlyphLoader,
                cffGlyphLoader: cffGlyphLoader
              };

              // The `CFF` table contains the glyph outlines in PostScript format.

              // Custom equals function that can also check lists.
              function equals(a, b) {
                if (a === b) {
                  return true;
                } else if (Array.isArray(a) && Array.isArray(b)) {
                  if (a.length !== b.length) {
                    return false;
                  }

                  for (var i = 0; i < a.length; i += 1) {
                    if (!equals(a[i], b[i])) {
                      return false;
                    }
                  }

                  return true;
                } else {
                  return false;
                }
              }

              // Subroutines are encoded using the negative half of the number space.
              // See type 2 chapter 4.7 "Subroutine operators".
              function calcCFFSubroutineBias(subrs) {
                var bias;
                if (subrs.length < 1240) {
                  bias = 107;
                } else if (subrs.length < 33900) {
                  bias = 1131;
                } else {
                  bias = 32768;
                }

                return bias;
              }

              // Parse a `CFF` INDEX array.
              // An index array consists of a list of offsets, then a list of objects at those offsets.
              function parseCFFIndex(data, start, conversionFn) {
                var offsets = [];
                var objects = [];
                var count = parse.getCard16(data, start);
                var objectOffset;
                var endOffset;
                if (count !== 0) {
                  var offsetSize = parse.getByte(data, start + 2);
                  objectOffset = start + (count + 1) * offsetSize + 2;
                  var pos = start + 3;
                  for (var i = 0; i < count + 1; i += 1) {
                    offsets.push(parse.getOffset(data, pos, offsetSize));
                    pos += offsetSize;
                  }

                  // The total size of the index array is 4 header bytes + the value of the last offset.
                  endOffset = objectOffset + offsets[count];
                } else {
                  endOffset = start + 2;
                }

                for (var i$1 = 0; i$1 < offsets.length - 1; i$1 += 1) {
                  var value = parse.getBytes(
                    data,
                    objectOffset + offsets[i$1],
                    objectOffset + offsets[i$1 + 1]
                  );
                  if (conversionFn) {
                    value = conversionFn(value);
                  }

                  objects.push(value);
                }

                return { objects: objects, startOffset: start, endOffset: endOffset };
              }

              // Parse a `CFF` DICT real value.
              function parseFloatOperand(parser) {
                var s = '';
                var eof = 15;
                var lookup = [
                  '0',
                  '1',
                  '2',
                  '3',
                  '4',
                  '5',
                  '6',
                  '7',
                  '8',
                  '9',
                  '.',
                  'E',
                  'E-',
                  null,
                  '-'
                ];
                while (true) {
                  var b = parser.parseByte();
                  var n1 = b >> 4;
                  var n2 = b & 15;

                  if (n1 === eof) {
                    break;
                  }

                  s += lookup[n1];

                  if (n2 === eof) {
                    break;
                  }

                  s += lookup[n2];
                }

                return parseFloat(s);
              }

              // Parse a `CFF` DICT operand.
              function parseOperand(parser, b0) {
                var b1;
                var b2;
                var b3;
                var b4;
                if (b0 === 28) {
                  b1 = parser.parseByte();
                  b2 = parser.parseByte();
                  return (b1 << 8) | b2;
                }

                if (b0 === 29) {
                  b1 = parser.parseByte();
                  b2 = parser.parseByte();
                  b3 = parser.parseByte();
                  b4 = parser.parseByte();
                  return (b1 << 24) | (b2 << 16) | (b3 << 8) | b4;
                }

                if (b0 === 30) {
                  return parseFloatOperand(parser);
                }

                if (b0 >= 32 && b0 <= 246) {
                  return b0 - 139;
                }

                if (b0 >= 247 && b0 <= 250) {
                  b1 = parser.parseByte();
                  return (b0 - 247) * 256 + b1 + 108;
                }

                if (b0 >= 251 && b0 <= 254) {
                  b1 = parser.parseByte();
                  return -(b0 - 251) * 256 - b1 - 108;
                }

                throw new Error('Invalid b0 ' + b0);
              }

              // Convert the entries returned by `parseDict` to a proper dictionary.
              // If a value is a list of one, it is unpacked.
              function entriesToObject(entries) {
                var o = {};
                for (var i = 0; i < entries.length; i += 1) {
                  var key = entries[i][0];
                  var values = entries[i][1];
                  var value = void 0;
                  if (values.length === 1) {
                    value = values[0];
                  } else {
                    value = values;
                  }

                  if (o.hasOwnProperty(key) && !isNaN(o[key])) {
                    throw new Error('Object ' + o + ' already has key ' + key);
                  }

                  o[key] = value;
                }

                return o;
              }

              // Parse a `CFF` DICT object.
              // A dictionary contains key-value pairs in a compact tokenized format.
              function parseCFFDict(data, start, size) {
                start = start !== undefined ? start : 0;
                var parser = new parse.Parser(data, start);
                var entries = [];
                var operands = [];
                size = size !== undefined ? size : data.length;

                while (parser.relativeOffset < size) {
                  var op = parser.parseByte();

                  // The first byte for each dict item distinguishes between operator (key) and operand (value).
                  // Values <= 21 are operators.
                  if (op <= 21) {
                    // Two-byte operators have an initial escape byte of 12.
                    if (op === 12) {
                      op = 1200 + parser.parseByte();
                    }

                    entries.push([op, operands]);
                    operands = [];
                  } else {
                    // Since the operands (values) come before the operators (keys), we store all operands in a list
                    // until we encounter an operator.
                    operands.push(parseOperand(parser, op));
                  }
                }

                return entriesToObject(entries);
              }

              // Given a String Index (SID), return the value of the string.
              // Strings below index 392 are standard CFF strings and are not encoded in the font.
              function getCFFString(strings, index) {
                if (index <= 390) {
                  index = cffStandardStrings[index];
                } else {
                  index = strings[index - 391];
                }

                return index;
              }

              // Interpret a dictionary and return a new dictionary with readable keys and values for missing entries.
              // This function takes `meta` which is a list of objects containing `operand`, `name` and `default`.
              function interpretDict(dict, meta, strings) {
                var newDict = {};
                var value;

                // Because we also want to include missing values, we start out from the meta list
                // and lookup values in the dict.
                for (var i = 0; i < meta.length; i += 1) {
                  var m = meta[i];

                  if (Array.isArray(m.type)) {
                    var values = [];
                    values.length = m.type.length;
                    for (var j = 0; j < m.type.length; j++) {
                      value = dict[m.op] !== undefined ? dict[m.op][j] : undefined;
                      if (value === undefined) {
                        value =
                          m.value !== undefined && m.value[j] !== undefined
                            ? m.value[j]
                            : null;
                      }
                      if (m.type[j] === 'SID') {
                        value = getCFFString(strings, value);
                      }
                      values[j] = value;
                    }
                    newDict[m.name] = values;
                  } else {
                    value = dict[m.op];
                    if (value === undefined) {
                      value = m.value !== undefined ? m.value : null;
                    }

                    if (m.type === 'SID') {
                      value = getCFFString(strings, value);
                    }
                    newDict[m.name] = value;
                  }
                }

                return newDict;
              }

              // Parse the CFF header.
              function parseCFFHeader(data, start) {
                var header = {};
                header.formatMajor = parse.getCard8(data, start);
                header.formatMinor = parse.getCard8(data, start + 1);
                header.size = parse.getCard8(data, start + 2);
                header.offsetSize = parse.getCard8(data, start + 3);
                header.startOffset = start;
                header.endOffset = start + 4;
                return header;
              }

              var TOP_DICT_META = [
                { name: 'version', op: 0, type: 'SID' },
                { name: 'notice', op: 1, type: 'SID' },
                { name: 'copyright', op: 1200, type: 'SID' },
                { name: 'fullName', op: 2, type: 'SID' },
                { name: 'familyName', op: 3, type: 'SID' },
                { name: 'weight', op: 4, type: 'SID' },
                { name: 'isFixedPitch', op: 1201, type: 'number', value: 0 },
                { name: 'italicAngle', op: 1202, type: 'number', value: 0 },
                { name: 'underlinePosition', op: 1203, type: 'number', value: -100 },
                { name: 'underlineThickness', op: 1204, type: 'number', value: 50 },
                { name: 'paintType', op: 1205, type: 'number', value: 0 },
                { name: 'charstringType', op: 1206, type: 'number', value: 2 },
                {
                  name: 'fontMatrix',
                  op: 1207,
                  type: ['real', 'real', 'real', 'real', 'real', 'real'],
                  value: [0.001, 0, 0, 0.001, 0, 0]
                },
                { name: 'uniqueId', op: 13, type: 'number' },
                {
                  name: 'fontBBox',
                  op: 5,
                  type: ['number', 'number', 'number', 'number'],
                  value: [0, 0, 0, 0]
                },
                { name: 'strokeWidth', op: 1208, type: 'number', value: 0 },
                { name: 'xuid', op: 14, type: [], value: null },
                { name: 'charset', op: 15, type: 'offset', value: 0 },
                { name: 'encoding', op: 16, type: 'offset', value: 0 },
                { name: 'charStrings', op: 17, type: 'offset', value: 0 },
                { name: 'private', op: 18, type: ['number', 'offset'], value: [0, 0] },
                { name: 'ros', op: 1230, type: ['SID', 'SID', 'number'] },
                { name: 'cidFontVersion', op: 1231, type: 'number', value: 0 },
                { name: 'cidFontRevision', op: 1232, type: 'number', value: 0 },
                { name: 'cidFontType', op: 1233, type: 'number', value: 0 },
                { name: 'cidCount', op: 1234, type: 'number', value: 8720 },
                { name: 'uidBase', op: 1235, type: 'number' },
                { name: 'fdArray', op: 1236, type: 'offset' },
                { name: 'fdSelect', op: 1237, type: 'offset' },
                { name: 'fontName', op: 1238, type: 'SID' }
              ];

              var PRIVATE_DICT_META = [
                { name: 'subrs', op: 19, type: 'offset', value: 0 },
                { name: 'defaultWidthX', op: 20, type: 'number', value: 0 },
                { name: 'nominalWidthX', op: 21, type: 'number', value: 0 }
              ];

              // Parse the CFF top dictionary. A CFF table can contain multiple fonts, each with their own top dictionary.
              // The top dictionary contains the essential metadata for the font, together with the private dictionary.
              function parseCFFTopDict(data, strings) {
                var dict = parseCFFDict(data, 0, data.byteLength);
                return interpretDict(dict, TOP_DICT_META, strings);
              }

              // Parse the CFF private dictionary. We don't fully parse out all the values, only the ones we need.
              function parseCFFPrivateDict(data, start, size, strings) {
                var dict = parseCFFDict(data, start, size);
                return interpretDict(dict, PRIVATE_DICT_META, strings);
              }

              // Returns a list of "Top DICT"s found using an INDEX list.
              // Used to read both the usual high-level Top DICTs and also the FDArray
              // discovered inside CID-keyed fonts.  When a Top DICT has a reference to
              // a Private DICT that is read and saved into the Top DICT.
              //
              // In addition to the expected/optional values as outlined in TOP_DICT_META
              // the following values might be saved into the Top DICT.
              //
              //    _subrs []        array of local CFF subroutines from Private DICT
              //    _subrsBias       bias value computed from number of subroutines
              //                      (see calcCFFSubroutineBias() and parseCFFCharstring())
              //    _defaultWidthX   default widths for CFF characters
              //    _nominalWidthX   bias added to width embedded within glyph description
              //
              //    _privateDict     saved copy of parsed Private DICT from Top DICT
              function gatherCFFTopDicts(data, start, cffIndex, strings) {
                var topDictArray = [];
                for (var iTopDict = 0; iTopDict < cffIndex.length; iTopDict += 1) {
                  var topDictData = new DataView(new Uint8Array(cffIndex[iTopDict]).buffer);
                  var topDict = parseCFFTopDict(topDictData, strings);
                  topDict._subrs = [];
                  topDict._subrsBias = 0;
                  var privateSize = topDict.private[0];
                  var privateOffset = topDict.private[1];
                  if (privateSize !== 0 && privateOffset !== 0) {
                    var privateDict = parseCFFPrivateDict(
                      data,
                      privateOffset + start,
                      privateSize,
                      strings
                    );
                    topDict._defaultWidthX = privateDict.defaultWidthX;
                    topDict._nominalWidthX = privateDict.nominalWidthX;
                    if (privateDict.subrs !== 0) {
                      var subrOffset = privateOffset + privateDict.subrs;
                      var subrIndex = parseCFFIndex(data, subrOffset + start);
                      topDict._subrs = subrIndex.objects;
                      topDict._subrsBias = calcCFFSubroutineBias(topDict._subrs);
                    }
                    topDict._privateDict = privateDict;
                  }
                  topDictArray.push(topDict);
                }
                return topDictArray;
              }

              // Parse the CFF charset table, which contains internal names for all the glyphs.
              // This function will return a list of glyph names.
              // See Adobe TN #5176 chapter 13, "Charsets".
              function parseCFFCharset(data, start, nGlyphs, strings) {
                var sid;
                var count;
                var parser = new parse.Parser(data, start);

                // The .notdef glyph is not included, so subtract 1.
                nGlyphs -= 1;
                var charset = ['.notdef'];

                var format = parser.parseCard8();
                if (format === 0) {
                  for (var i = 0; i < nGlyphs; i += 1) {
                    sid = parser.parseSID();
                    charset.push(getCFFString(strings, sid));
                  }
                } else if (format === 1) {
                  while (charset.length <= nGlyphs) {
                    sid = parser.parseSID();
                    count = parser.parseCard8();
                    for (var i$1 = 0; i$1 <= count; i$1 += 1) {
                      charset.push(getCFFString(strings, sid));
                      sid += 1;
                    }
                  }
                } else if (format === 2) {
                  while (charset.length <= nGlyphs) {
                    sid = parser.parseSID();
                    count = parser.parseCard16();
                    for (var i$2 = 0; i$2 <= count; i$2 += 1) {
                      charset.push(getCFFString(strings, sid));
                      sid += 1;
                    }
                  }
                } else {
                  throw new Error('Unknown charset format ' + format);
                }

                return charset;
              }

              // Parse the CFF encoding data. Only one encoding can be specified per font.
              // See Adobe TN #5176 chapter 12, "Encodings".
              function parseCFFEncoding(data, start, charset) {
                var code;
                var enc = {};
                var parser = new parse.Parser(data, start);
                var format = parser.parseCard8();
                if (format === 0) {
                  var nCodes = parser.parseCard8();
                  for (var i = 0; i < nCodes; i += 1) {
                    code = parser.parseCard8();
                    enc[code] = i;
                  }
                } else if (format === 1) {
                  var nRanges = parser.parseCard8();
                  code = 1;
                  for (var i$1 = 0; i$1 < nRanges; i$1 += 1) {
                    var first = parser.parseCard8();
                    var nLeft = parser.parseCard8();
                    for (var j = first; j <= first + nLeft; j += 1) {
                      enc[j] = code;
                      code += 1;
                    }
                  }
                } else {
                  throw new Error('Unknown encoding format ' + format);
                }

                return new CffEncoding(enc, charset);
              }

              // Take in charstring code and return a Glyph object.
              // The encoding is described in the Type 2 Charstring Format
              // https://www.microsoft.com/typography/OTSPEC/charstr2.htm
              function parseCFFCharstring(font, glyph, code) {
                var c1x;
                var c1y;
                var c2x;
                var c2y;
                var p = new Path();
                var stack = [];
                var nStems = 0;
                var haveWidth = false;
                var open = false;
                var x = 0;
                var y = 0;
                var subrs;
                var subrsBias;
                var defaultWidthX;
                var nominalWidthX;
                if (font.isCIDFont) {
                  var fdIndex = font.tables.cff.topDict._fdSelect[glyph.index];
                  var fdDict = font.tables.cff.topDict._fdArray[fdIndex];
                  subrs = fdDict._subrs;
                  subrsBias = fdDict._subrsBias;
                  defaultWidthX = fdDict._defaultWidthX;
                  nominalWidthX = fdDict._nominalWidthX;
                } else {
                  subrs = font.tables.cff.topDict._subrs;
                  subrsBias = font.tables.cff.topDict._subrsBias;
                  defaultWidthX = font.tables.cff.topDict._defaultWidthX;
                  nominalWidthX = font.tables.cff.topDict._nominalWidthX;
                }
                var width = defaultWidthX;

                function newContour(x, y) {
                  if (open) {
                    p.closePath();
                  }

                  p.moveTo(x, y);
                  open = true;
                }

                function parseStems() {
                  var hasWidthArg;

                  // The number of stem operators on the stack is always even.
                  // If the value is uneven, that means a width is specified.
                  hasWidthArg = stack.length % 2 !== 0;
                  if (hasWidthArg && !haveWidth) {
                    width = stack.shift() + nominalWidthX;
                  }

                  nStems += stack.length >> 1;
                  stack.length = 0;
                  haveWidth = true;
                }

                function parse$$1(code) {
                  var b1;
                  var b2;
                  var b3;
                  var b4;
                  var codeIndex;
                  var subrCode;
                  var jpx;
                  var jpy;
                  var c3x;
                  var c3y;
                  var c4x;
                  var c4y;

                  var i = 0;
                  while (i < code.length) {
                    var v = code[i];
                    i += 1;
                    switch (v) {
                      case 1: // hstem
                        parseStems();
                        break;
                      case 3: // vstem
                        parseStems();
                        break;
                      case 4: // vmoveto
                        if (stack.length > 1 && !haveWidth) {
                          width = stack.shift() + nominalWidthX;
                          haveWidth = true;
                        }

                        y += stack.pop();
                        newContour(x, y);
                        break;
                      case 5: // rlineto
                        while (stack.length > 0) {
                          x += stack.shift();
                          y += stack.shift();
                          p.lineTo(x, y);
                        }

                        break;
                      case 6: // hlineto
                        while (stack.length > 0) {
                          x += stack.shift();
                          p.lineTo(x, y);
                          if (stack.length === 0) {
                            break;
                          }

                          y += stack.shift();
                          p.lineTo(x, y);
                        }

                        break;
                      case 7: // vlineto
                        while (stack.length > 0) {
                          y += stack.shift();
                          p.lineTo(x, y);
                          if (stack.length === 0) {
                            break;
                          }

                          x += stack.shift();
                          p.lineTo(x, y);
                        }

                        break;
                      case 8: // rrcurveto
                        while (stack.length > 0) {
                          c1x = x + stack.shift();
                          c1y = y + stack.shift();
                          c2x = c1x + stack.shift();
                          c2y = c1y + stack.shift();
                          x = c2x + stack.shift();
                          y = c2y + stack.shift();
                          p.curveTo(c1x, c1y, c2x, c2y, x, y);
                        }

                        break;
                      case 10: // callsubr
                        codeIndex = stack.pop() + subrsBias;
                        subrCode = subrs[codeIndex];
                        if (subrCode) {
                          parse$$1(subrCode);
                        }

                        break;
                      case 11: // return
                        return;
                      case 12: // flex operators
                        v = code[i];
                        i += 1;
                        switch (v) {
                          case 35: // flex
                            // |- dx1 dy1 dx2 dy2 dx3 dy3 dx4 dy4 dx5 dy5 dx6 dy6 fd flex (12 35) |-
                            c1x = x + stack.shift(); // dx1
                            c1y = y + stack.shift(); // dy1
                            c2x = c1x + stack.shift(); // dx2
                            c2y = c1y + stack.shift(); // dy2
                            jpx = c2x + stack.shift(); // dx3
                            jpy = c2y + stack.shift(); // dy3
                            c3x = jpx + stack.shift(); // dx4
                            c3y = jpy + stack.shift(); // dy4
                            c4x = c3x + stack.shift(); // dx5
                            c4y = c3y + stack.shift(); // dy5
                            x = c4x + stack.shift(); // dx6
                            y = c4y + stack.shift(); // dy6
                            stack.shift(); // flex depth
                            p.curveTo(c1x, c1y, c2x, c2y, jpx, jpy);
                            p.curveTo(c3x, c3y, c4x, c4y, x, y);
                            break;
                          case 34: // hflex
                            // |- dx1 dx2 dy2 dx3 dx4 dx5 dx6 hflex (12 34) |-
                            c1x = x + stack.shift(); // dx1
                            c1y = y; // dy1
                            c2x = c1x + stack.shift(); // dx2
                            c2y = c1y + stack.shift(); // dy2
                            jpx = c2x + stack.shift(); // dx3
                            jpy = c2y; // dy3
                            c3x = jpx + stack.shift(); // dx4
                            c3y = c2y; // dy4
                            c4x = c3x + stack.shift(); // dx5
                            c4y = y; // dy5
                            x = c4x + stack.shift(); // dx6
                            p.curveTo(c1x, c1y, c2x, c2y, jpx, jpy);
                            p.curveTo(c3x, c3y, c4x, c4y, x, y);
                            break;
                          case 36: // hflex1
                            // |- dx1 dy1 dx2 dy2 dx3 dx4 dx5 dy5 dx6 hflex1 (12 36) |-
                            c1x = x + stack.shift(); // dx1
                            c1y = y + stack.shift(); // dy1
                            c2x = c1x + stack.shift(); // dx2
                            c2y = c1y + stack.shift(); // dy2
                            jpx = c2x + stack.shift(); // dx3
                            jpy = c2y; // dy3
                            c3x = jpx + stack.shift(); // dx4
                            c3y = c2y; // dy4
                            c4x = c3x + stack.shift(); // dx5
                            c4y = c3y + stack.shift(); // dy5
                            x = c4x + stack.shift(); // dx6
                            p.curveTo(c1x, c1y, c2x, c2y, jpx, jpy);
                            p.curveTo(c3x, c3y, c4x, c4y, x, y);
                            break;
                          case 37: // flex1
                            // |- dx1 dy1 dx2 dy2 dx3 dy3 dx4 dy4 dx5 dy5 d6 flex1 (12 37) |-
                            c1x = x + stack.shift(); // dx1
                            c1y = y + stack.shift(); // dy1
                            c2x = c1x + stack.shift(); // dx2
                            c2y = c1y + stack.shift(); // dy2
                            jpx = c2x + stack.shift(); // dx3
                            jpy = c2y + stack.shift(); // dy3
                            c3x = jpx + stack.shift(); // dx4
                            c3y = jpy + stack.shift(); // dy4
                            c4x = c3x + stack.shift(); // dx5
                            c4y = c3y + stack.shift(); // dy5
                            if (Math.abs(c4x - x) > Math.abs(c4y - y)) {
                              x = c4x + stack.shift();
                            } else {
                              y = c4y + stack.shift();
                            }

                            p.curveTo(c1x, c1y, c2x, c2y, jpx, jpy);
                            p.curveTo(c3x, c3y, c4x, c4y, x, y);
                            break;
                          default:
                            console.log(
                              'Glyph ' + glyph.index + ': unknown operator ' + 1200 + v
                            );
                            stack.length = 0;
                        }
                        break;
                      case 14: // endchar
                        if (stack.length > 0 && !haveWidth) {
                          width = stack.shift() + nominalWidthX;
                          haveWidth = true;
                        }

                        if (open) {
                          p.closePath();
                          open = false;
                        }

                        break;
                      case 18: // hstemhm
                        parseStems();
                        break;
                      case 19: // hintmask
                      case 20: // cntrmask
                        parseStems();
                        i += (nStems + 7) >> 3;
                        break;
                      case 21: // rmoveto
                        if (stack.length > 2 && !haveWidth) {
                          width = stack.shift() + nominalWidthX;
                          haveWidth = true;
                        }

                        y += stack.pop();
                        x += stack.pop();
                        newContour(x, y);
                        break;
                      case 22: // hmoveto
                        if (stack.length > 1 && !haveWidth) {
                          width = stack.shift() + nominalWidthX;
                          haveWidth = true;
                        }

                        x += stack.pop();
                        newContour(x, y);
                        break;
                      case 23: // vstemhm
                        parseStems();
                        break;
                      case 24: // rcurveline
                        while (stack.length > 2) {
                          c1x = x + stack.shift();
                          c1y = y + stack.shift();
                          c2x = c1x + stack.shift();
                          c2y = c1y + stack.shift();
                          x = c2x + stack.shift();
                          y = c2y + stack.shift();
                          p.curveTo(c1x, c1y, c2x, c2y, x, y);
                        }

                        x += stack.shift();
                        y += stack.shift();
                        p.lineTo(x, y);
                        break;
                      case 25: // rlinecurve
                        while (stack.length > 6) {
                          x += stack.shift();
                          y += stack.shift();
                          p.lineTo(x, y);
                        }

                        c1x = x + stack.shift();
                        c1y = y + stack.shift();
                        c2x = c1x + stack.shift();
                        c2y = c1y + stack.shift();
                        x = c2x + stack.shift();
                        y = c2y + stack.shift();
                        p.curveTo(c1x, c1y, c2x, c2y, x, y);
                        break;
                      case 26: // vvcurveto
                        if (stack.length % 2) {
                          x += stack.shift();
                        }

                        while (stack.length > 0) {
                          c1x = x;
                          c1y = y + stack.shift();
                          c2x = c1x + stack.shift();
                          c2y = c1y + stack.shift();
                          x = c2x;
                          y = c2y + stack.shift();
                          p.curveTo(c1x, c1y, c2x, c2y, x, y);
                        }

                        break;
                      case 27: // hhcurveto
                        if (stack.length % 2) {
                          y += stack.shift();
                        }

                        while (stack.length > 0) {
                          c1x = x + stack.shift();
                          c1y = y;
                          c2x = c1x + stack.shift();
                          c2y = c1y + stack.shift();
                          x = c2x + stack.shift();
                          y = c2y;
                          p.curveTo(c1x, c1y, c2x, c2y, x, y);
                        }

                        break;
                      case 28: // shortint
                        b1 = code[i];
                        b2 = code[i + 1];
                        stack.push(((b1 << 24) | (b2 << 16)) >> 16);
                        i += 2;
                        break;
                      case 29: // callgsubr
                        codeIndex = stack.pop() + font.gsubrsBias;
                        subrCode = font.gsubrs[codeIndex];
                        if (subrCode) {
                          parse$$1(subrCode);
                        }

                        break;
                      case 30: // vhcurveto
                        while (stack.length > 0) {
                          c1x = x;
                          c1y = y + stack.shift();
                          c2x = c1x + stack.shift();
                          c2y = c1y + stack.shift();
                          x = c2x + stack.shift();
                          y = c2y + (stack.length === 1 ? stack.shift() : 0);
                          p.curveTo(c1x, c1y, c2x, c2y, x, y);
                          if (stack.length === 0) {
                            break;
                          }

                          c1x = x + stack.shift();
                          c1y = y;
                          c2x = c1x + stack.shift();
                          c2y = c1y + stack.shift();
                          y = c2y + stack.shift();
                          x = c2x + (stack.length === 1 ? stack.shift() : 0);
                          p.curveTo(c1x, c1y, c2x, c2y, x, y);
                        }

                        break;
                      case 31: // hvcurveto
                        while (stack.length > 0) {
                          c1x = x + stack.shift();
                          c1y = y;
                          c2x = c1x + stack.shift();
                          c2y = c1y + stack.shift();
                          y = c2y + stack.shift();
                          x = c2x + (stack.length === 1 ? stack.shift() : 0);
                          p.curveTo(c1x, c1y, c2x, c2y, x, y);
                          if (stack.length === 0) {
                            break;
                          }

                          c1x = x;
                          c1y = y + stack.shift();
                          c2x = c1x + stack.shift();
                          c2y = c1y + stack.shift();
                          x = c2x + stack.shift();
                          y = c2y + (stack.length === 1 ? stack.shift() : 0);
                          p.curveTo(c1x, c1y, c2x, c2y, x, y);
                        }

                        break;
                      default:
                        if (v < 32) {
                          console.log('Glyph ' + glyph.index + ': unknown operator ' + v);
                        } else if (v < 247) {
                          stack.push(v - 139);
                        } else if (v < 251) {
                          b1 = code[i];
                          i += 1;
                          stack.push((v - 247) * 256 + b1 + 108);
                        } else if (v < 255) {
                          b1 = code[i];
                          i += 1;
                          stack.push(-(v - 251) * 256 - b1 - 108);
                        } else {
                          b1 = code[i];
                          b2 = code[i + 1];
                          b3 = code[i + 2];
                          b4 = code[i + 3];
                          i += 4;
                          stack.push(((b1 << 24) | (b2 << 16) | (b3 << 8) | b4) / 65536);
                        }
                    }
                  }
                }

                parse$$1(code);

                glyph.advanceWidth = width;
                return p;
              }

              function parseCFFFDSelect(data, start, nGlyphs, fdArrayCount) {
                var fdSelect = [];
                var fdIndex;
                var parser = new parse.Parser(data, start);
                var format = parser.parseCard8();
                if (format === 0) {
                  // Simple list of nGlyphs elements
                  for (var iGid = 0; iGid < nGlyphs; iGid++) {
                    fdIndex = parser.parseCard8();
                    if (fdIndex >= fdArrayCount) {
                      throw new Error(
                        'CFF table CID Font FDSelect has bad FD index value ' +
                          fdIndex +
                          ' (FD count ' +
                          fdArrayCount +
                          ')'
                      );
                    }
                    fdSelect.push(fdIndex);
                  }
                } else if (format === 3) {
                  // Ranges
                  var nRanges = parser.parseCard16();
                  var first = parser.parseCard16();
                  if (first !== 0) {
                    throw new Error(
                      'CFF Table CID Font FDSelect format 3 range has bad initial GID ' +
                        first
                    );
                  }
                  var next;
                  for (var iRange = 0; iRange < nRanges; iRange++) {
                    fdIndex = parser.parseCard8();
                    next = parser.parseCard16();
                    if (fdIndex >= fdArrayCount) {
                      throw new Error(
                        'CFF table CID Font FDSelect has bad FD index value ' +
                          fdIndex +
                          ' (FD count ' +
                          fdArrayCount +
                          ')'
                      );
                    }
                    if (next > nGlyphs) {
                      throw new Error(
                        'CFF Table CID Font FDSelect format 3 range has bad GID ' + next
                      );
                    }
                    for (; first < next; first++) {
                      fdSelect.push(fdIndex);
                    }
                    first = next;
                  }
                  if (next !== nGlyphs) {
                    throw new Error(
                      'CFF Table CID Font FDSelect format 3 range has bad final GID ' + next
                    );
                  }
                } else {
                  throw new Error(
                    'CFF Table CID Font FDSelect table has unsupported format ' + format
                  );
                }
                return fdSelect;
              }

              // Parse the `CFF` table, which contains the glyph outlines in PostScript format.
              function parseCFFTable(data, start, font) {
                font.tables.cff = {};
                var header = parseCFFHeader(data, start);
                var nameIndex = parseCFFIndex(data, header.endOffset, parse.bytesToString);
                var topDictIndex = parseCFFIndex(data, nameIndex.endOffset);
                var stringIndex = parseCFFIndex(
                  data,
                  topDictIndex.endOffset,
                  parse.bytesToString
                );
                var globalSubrIndex = parseCFFIndex(data, stringIndex.endOffset);
                font.gsubrs = globalSubrIndex.objects;
                font.gsubrsBias = calcCFFSubroutineBias(font.gsubrs);

                var topDictArray = gatherCFFTopDicts(
                  data,
                  start,
                  topDictIndex.objects,
                  stringIndex.objects
                );
                if (topDictArray.length !== 1) {
                  throw new Error(
                    "CFF table has too many fonts in 'FontSet' - count of fonts NameIndex.length = " +
                      topDictArray.length
                  );
                }

                var topDict = topDictArray[0];
                font.tables.cff.topDict = topDict;

                if (topDict._privateDict) {
                  font.defaultWidthX = topDict._privateDict.defaultWidthX;
                  font.nominalWidthX = topDict._privateDict.nominalWidthX;
                }

                if (topDict.ros[0] !== undefined && topDict.ros[1] !== undefined) {
                  font.isCIDFont = true;
                }

                if (font.isCIDFont) {
                  var fdArrayOffset = topDict.fdArray;
                  var fdSelectOffset = topDict.fdSelect;
                  if (fdArrayOffset === 0 || fdSelectOffset === 0) {
                    throw new Error(
                      'Font is marked as a CID font, but FDArray and/or FDSelect information is missing'
                    );
                  }
                  fdArrayOffset += start;
                  var fdArrayIndex = parseCFFIndex(data, fdArrayOffset);
                  var fdArray = gatherCFFTopDicts(
                    data,
                    start,
                    fdArrayIndex.objects,
                    stringIndex.objects
                  );
                  topDict._fdArray = fdArray;
                  fdSelectOffset += start;
                  topDict._fdSelect = parseCFFFDSelect(
                    data,
                    fdSelectOffset,
                    font.numGlyphs,
                    fdArray.length
                  );
                }

                var privateDictOffset = start + topDict.private[1];
                var privateDict = parseCFFPrivateDict(
                  data,
                  privateDictOffset,
                  topDict.private[0],
                  stringIndex.objects
                );
                font.defaultWidthX = privateDict.defaultWidthX;
                font.nominalWidthX = privateDict.nominalWidthX;

                if (privateDict.subrs !== 0) {
                  var subrOffset = privateDictOffset + privateDict.subrs;
                  var subrIndex = parseCFFIndex(data, subrOffset);
                  font.subrs = subrIndex.objects;
                  font.subrsBias = calcCFFSubroutineBias(font.subrs);
                } else {
                  font.subrs = [];
                  font.subrsBias = 0;
                }

                // Offsets in the top dict are relative to the beginning of the CFF data, so add the CFF start offset.
                var charStringsIndex = parseCFFIndex(data, start + topDict.charStrings);
                font.nGlyphs = charStringsIndex.objects.length;

                var charset = parseCFFCharset(
                  data,
                  start + topDict.charset,
                  font.nGlyphs,
                  stringIndex.objects
                );
                if (topDict.encoding === 0) {
                  // Standard encoding
                  font.cffEncoding = new CffEncoding(cffStandardEncoding, charset);
                } else if (topDict.encoding === 1) {
                  // Expert encoding
                  font.cffEncoding = new CffEncoding(cffExpertEncoding, charset);
                } else {
                  font.cffEncoding = parseCFFEncoding(
                    data,
                    start + topDict.encoding,
                    charset
                  );
                }

                // Prefer the CMAP encoding to the CFF encoding.
                font.encoding = font.encoding || font.cffEncoding;

                font.glyphs = new glyphset.GlyphSet(font);
                for (var i = 0; i < font.nGlyphs; i += 1) {
                  var charString = charStringsIndex.objects[i];
                  font.glyphs.push(
                    i,
                    glyphset.cffGlyphLoader(font, i, parseCFFCharstring, charString)
                  );
                }
              }

              // Convert a string to a String ID (SID).
              // The list of strings is modified in place.
              function encodeString(s, strings) {
                var sid;

                // Is the string in the CFF standard strings?
                var i = cffStandardStrings.indexOf(s);
                if (i >= 0) {
                  sid = i;
                }

                // Is the string already in the string index?
                i = strings.indexOf(s);
                if (i >= 0) {
                  sid = i + cffStandardStrings.length;
                } else {
                  sid = cffStandardStrings.length + strings.length;
                  strings.push(s);
                }

                return sid;
              }

              function makeHeader() {
                return new table.Record('Header', [
                  { name: 'major', type: 'Card8', value: 1 },
                  { name: 'minor', type: 'Card8', value: 0 },
                  { name: 'hdrSize', type: 'Card8', value: 4 },
                  { name: 'major', type: 'Card8', value: 1 }
                ]);
              }

              function makeNameIndex(fontNames) {
                var t = new table.Record('Name INDEX', [
                  { name: 'names', type: 'INDEX', value: [] }
                ]);
                t.names = [];
                for (var i = 0; i < fontNames.length; i += 1) {
                  t.names.push({ name: 'name_' + i, type: 'NAME', value: fontNames[i] });
                }

                return t;
              }

              // Given a dictionary's metadata, create a DICT structure.
              function makeDict(meta, attrs, strings) {
                var m = {};
                for (var i = 0; i < meta.length; i += 1) {
                  var entry = meta[i];
                  var value = attrs[entry.name];
                  if (value !== undefined && !equals(value, entry.value)) {
                    if (entry.type === 'SID') {
                      value = encodeString(value, strings);
                    }

                    m[entry.op] = { name: entry.name, type: entry.type, value: value };
                  }
                }

                return m;
              }

              // The Top DICT houses the global font attributes.
              function makeTopDict(attrs, strings) {
                var t = new table.Record('Top DICT', [
                  { name: 'dict', type: 'DICT', value: {} }
                ]);
                t.dict = makeDict(TOP_DICT_META, attrs, strings);
                return t;
              }

              function makeTopDictIndex(topDict) {
                var t = new table.Record('Top DICT INDEX', [
                  { name: 'topDicts', type: 'INDEX', value: [] }
                ]);
                t.topDicts = [{ name: 'topDict_0', type: 'TABLE', value: topDict }];
                return t;
              }

              function makeStringIndex(strings) {
                var t = new table.Record('String INDEX', [
                  { name: 'strings', type: 'INDEX', value: [] }
                ]);
                t.strings = [];
                for (var i = 0; i < strings.length; i += 1) {
                  t.strings.push({
                    name: 'string_' + i,
                    type: 'STRING',
                    value: strings[i]
                  });
                }

                return t;
              }

              function makeGlobalSubrIndex() {
                // Currently we don't use subroutines.
                return new table.Record('Global Subr INDEX', [
                  { name: 'subrs', type: 'INDEX', value: [] }
                ]);
              }

              function makeCharsets(glyphNames, strings) {
                var t = new table.Record('Charsets', [
                  { name: 'format', type: 'Card8', value: 0 }
                ]);
                for (var i = 0; i < glyphNames.length; i += 1) {
                  var glyphName = glyphNames[i];
                  var glyphSID = encodeString(glyphName, strings);
                  t.fields.push({ name: 'glyph_' + i, type: 'SID', value: glyphSID });
                }

                return t;
              }

              function glyphToOps(glyph) {
                var ops = [];
                var path = glyph.path;
                ops.push({ name: 'width', type: 'NUMBER', value: glyph.advanceWidth });
                var x = 0;
                var y = 0;
                for (var i = 0; i < path.commands.length; i += 1) {
                  var dx = void 0;
                  var dy = void 0;
                  var cmd = path.commands[i];
                  if (cmd.type === 'Q') {
                    // CFF only supports bézier curves, so convert the quad to a bézier.
                    var _13 = 1 / 3;
                    var _23 = 2 / 3;

                    // We're going to create a new command so we don't change the original path.
                    cmd = {
                      type: 'C',
                      x: cmd.x,
                      y: cmd.y,
                      x1: _13 * x + _23 * cmd.x1,
                      y1: _13 * y + _23 * cmd.y1,
                      x2: _13 * cmd.x + _23 * cmd.x1,
                      y2: _13 * cmd.y + _23 * cmd.y1
                    };
                  }

                  if (cmd.type === 'M') {
                    dx = Math.round(cmd.x - x);
                    dy = Math.round(cmd.y - y);
                    ops.push({ name: 'dx', type: 'NUMBER', value: dx });
                    ops.push({ name: 'dy', type: 'NUMBER', value: dy });
                    ops.push({ name: 'rmoveto', type: 'OP', value: 21 });
                    x = Math.round(cmd.x);
                    y = Math.round(cmd.y);
                  } else if (cmd.type === 'L') {
                    dx = Math.round(cmd.x - x);
                    dy = Math.round(cmd.y - y);
                    ops.push({ name: 'dx', type: 'NUMBER', value: dx });
                    ops.push({ name: 'dy', type: 'NUMBER', value: dy });
                    ops.push({ name: 'rlineto', type: 'OP', value: 5 });
                    x = Math.round(cmd.x);
                    y = Math.round(cmd.y);
                  } else if (cmd.type === 'C') {
                    var dx1 = Math.round(cmd.x1 - x);
                    var dy1 = Math.round(cmd.y1 - y);
                    var dx2 = Math.round(cmd.x2 - cmd.x1);
                    var dy2 = Math.round(cmd.y2 - cmd.y1);
                    dx = Math.round(cmd.x - cmd.x2);
                    dy = Math.round(cmd.y - cmd.y2);
                    ops.push({ name: 'dx1', type: 'NUMBER', value: dx1 });
                    ops.push({ name: 'dy1', type: 'NUMBER', value: dy1 });
                    ops.push({ name: 'dx2', type: 'NUMBER', value: dx2 });
                    ops.push({ name: 'dy2', type: 'NUMBER', value: dy2 });
                    ops.push({ name: 'dx', type: 'NUMBER', value: dx });
                    ops.push({ name: 'dy', type: 'NUMBER', value: dy });
                    ops.push({ name: 'rrcurveto', type: 'OP', value: 8 });
                    x = Math.round(cmd.x);
                    y = Math.round(cmd.y);
                  }

                  // Contours are closed automatically.
                }

                ops.push({ name: 'endchar', type: 'OP', value: 14 });
                return ops;
              }

              function makeCharStringsIndex(glyphs) {
                var t = new table.Record('CharStrings INDEX', [
                  { name: 'charStrings', type: 'INDEX', value: [] }
                ]);

                for (var i = 0; i < glyphs.length; i += 1) {
                  var glyph = glyphs.get(i);
                  var ops = glyphToOps(glyph);
                  t.charStrings.push({ name: glyph.name, type: 'CHARSTRING', value: ops });
                }

                return t;
              }

              function makePrivateDict(attrs, strings) {
                var t = new table.Record('Private DICT', [
                  { name: 'dict', type: 'DICT', value: {} }
                ]);
                t.dict = makeDict(PRIVATE_DICT_META, attrs, strings);
                return t;
              }

              function makeCFFTable(glyphs, options) {
                var t = new table.Table('CFF ', [
                  { name: 'header', type: 'RECORD' },
                  { name: 'nameIndex', type: 'RECORD' },
                  { name: 'topDictIndex', type: 'RECORD' },
                  { name: 'stringIndex', type: 'RECORD' },
                  { name: 'globalSubrIndex', type: 'RECORD' },
                  { name: 'charsets', type: 'RECORD' },
                  { name: 'charStringsIndex', type: 'RECORD' },
                  { name: 'privateDict', type: 'RECORD' }
                ]);

                var fontScale = 1 / options.unitsPerEm;
                // We use non-zero values for the offsets so that the DICT encodes them.
                // This is important because the size of the Top DICT plays a role in offset calculation,
                // and the size shouldn't change after we've written correct offsets.
                var attrs = {
                  version: options.version,
                  fullName: options.fullName,
                  familyName: options.familyName,
                  weight: options.weightName,
                  fontBBox: options.fontBBox || [0, 0, 0, 0],
                  fontMatrix: [fontScale, 0, 0, fontScale, 0, 0],
                  charset: 999,
                  encoding: 0,
                  charStrings: 999,
                  private: [0, 999]
                };

                var privateAttrs = {};

                var glyphNames = [];
                var glyph;

                // Skip first glyph (.notdef)
                for (var i = 1; i < glyphs.length; i += 1) {
                  glyph = glyphs.get(i);
                  glyphNames.push(glyph.name);
                }

                var strings = [];

                t.header = makeHeader();
                t.nameIndex = makeNameIndex([options.postScriptName]);
                var topDict = makeTopDict(attrs, strings);
                t.topDictIndex = makeTopDictIndex(topDict);
                t.globalSubrIndex = makeGlobalSubrIndex();
                t.charsets = makeCharsets(glyphNames, strings);
                t.charStringsIndex = makeCharStringsIndex(glyphs);
                t.privateDict = makePrivateDict(privateAttrs, strings);

                // Needs to come at the end, to encode all custom strings used in the font.
                t.stringIndex = makeStringIndex(strings);

                var startOffset =
                  t.header.sizeOf() +
                  t.nameIndex.sizeOf() +
                  t.topDictIndex.sizeOf() +
                  t.stringIndex.sizeOf() +
                  t.globalSubrIndex.sizeOf();
                attrs.charset = startOffset;

                // We use the CFF standard encoding; proper encoding will be handled in cmap.
                attrs.encoding = 0;
                attrs.charStrings = attrs.charset + t.charsets.sizeOf();
                attrs.private[1] = attrs.charStrings + t.charStringsIndex.sizeOf();

                // Recreate the Top DICT INDEX with the correct offsets.
                topDict = makeTopDict(attrs, strings);
                t.topDictIndex = makeTopDictIndex(topDict);

                return t;
              }

              var cff = { parse: parseCFFTable, make: makeCFFTable };

              // The `head` table contains global information about the font.

              // Parse the header `head` table
              function parseHeadTable(data, start) {
                var head = {};
                var p = new parse.Parser(data, start);
                head.version = p.parseVersion();
                head.fontRevision = Math.round(p.parseFixed() * 1000) / 1000;
                head.checkSumAdjustment = p.parseULong();
                head.magicNumber = p.parseULong();
                check.argument(
                  head.magicNumber === 0x5f0f3cf5,
                  'Font header has wrong magic number.'
                );
                head.flags = p.parseUShort();
                head.unitsPerEm = p.parseUShort();
                head.created = p.parseLongDateTime();
                head.modified = p.parseLongDateTime();
                head.xMin = p.parseShort();
                head.yMin = p.parseShort();
                head.xMax = p.parseShort();
                head.yMax = p.parseShort();
                head.macStyle = p.parseUShort();
                head.lowestRecPPEM = p.parseUShort();
                head.fontDirectionHint = p.parseShort();
                head.indexToLocFormat = p.parseShort();
                head.glyphDataFormat = p.parseShort();
                return head;
              }

              function makeHeadTable(options) {
                // Apple Mac timestamp epoch is 01/01/1904 not 01/01/1970
                var timestamp = Math.round(new Date().getTime() / 1000) + 2082844800;
                var createdTimestamp = timestamp;

                if (options.createdTimestamp) {
                  createdTimestamp = options.createdTimestamp + 2082844800;
                }

                return new table.Table(
                  'head',
                  [
                    { name: 'version', type: 'FIXED', value: 0x00010000 },
                    { name: 'fontRevision', type: 'FIXED', value: 0x00010000 },
                    { name: 'checkSumAdjustment', type: 'ULONG', value: 0 },
                    { name: 'magicNumber', type: 'ULONG', value: 0x5f0f3cf5 },
                    { name: 'flags', type: 'USHORT', value: 0 },
                    { name: 'unitsPerEm', type: 'USHORT', value: 1000 },
                    { name: 'created', type: 'LONGDATETIME', value: createdTimestamp },
                    { name: 'modified', type: 'LONGDATETIME', value: timestamp },
                    { name: 'xMin', type: 'SHORT', value: 0 },
                    { name: 'yMin', type: 'SHORT', value: 0 },
                    { name: 'xMax', type: 'SHORT', value: 0 },
                    { name: 'yMax', type: 'SHORT', value: 0 },
                    { name: 'macStyle', type: 'USHORT', value: 0 },
                    { name: 'lowestRecPPEM', type: 'USHORT', value: 0 },
                    { name: 'fontDirectionHint', type: 'SHORT', value: 2 },
                    { name: 'indexToLocFormat', type: 'SHORT', value: 0 },
                    { name: 'glyphDataFormat', type: 'SHORT', value: 0 }
                  ],
                  options
                );
              }

              var head = { parse: parseHeadTable, make: makeHeadTable };

              // The `hhea` table contains information for horizontal layout.

              // Parse the horizontal header `hhea` table
              function parseHheaTable(data, start) {
                var hhea = {};
                var p = new parse.Parser(data, start);
                hhea.version = p.parseVersion();
                hhea.ascender = p.parseShort();
                hhea.descender = p.parseShort();
                hhea.lineGap = p.parseShort();
                hhea.advanceWidthMax = p.parseUShort();
                hhea.minLeftSideBearing = p.parseShort();
                hhea.minRightSideBearing = p.parseShort();
                hhea.xMaxExtent = p.parseShort();
                hhea.caretSlopeRise = p.parseShort();
                hhea.caretSlopeRun = p.parseShort();
                hhea.caretOffset = p.parseShort();
                p.relativeOffset += 8;
                hhea.metricDataFormat = p.parseShort();
                hhea.numberOfHMetrics = p.parseUShort();
                return hhea;
              }

              function makeHheaTable(options) {
                return new table.Table(
                  'hhea',
                  [
                    { name: 'version', type: 'FIXED', value: 0x00010000 },
                    { name: 'ascender', type: 'FWORD', value: 0 },
                    { name: 'descender', type: 'FWORD', value: 0 },
                    { name: 'lineGap', type: 'FWORD', value: 0 },
                    { name: 'advanceWidthMax', type: 'UFWORD', value: 0 },
                    { name: 'minLeftSideBearing', type: 'FWORD', value: 0 },
                    { name: 'minRightSideBearing', type: 'FWORD', value: 0 },
                    { name: 'xMaxExtent', type: 'FWORD', value: 0 },
                    { name: 'caretSlopeRise', type: 'SHORT', value: 1 },
                    { name: 'caretSlopeRun', type: 'SHORT', value: 0 },
                    { name: 'caretOffset', type: 'SHORT', value: 0 },
                    { name: 'reserved1', type: 'SHORT', value: 0 },
                    { name: 'reserved2', type: 'SHORT', value: 0 },
                    { name: 'reserved3', type: 'SHORT', value: 0 },
                    { name: 'reserved4', type: 'SHORT', value: 0 },
                    { name: 'metricDataFormat', type: 'SHORT', value: 0 },
                    { name: 'numberOfHMetrics', type: 'USHORT', value: 0 }
                  ],
                  options
                );
              }

              var hhea = { parse: parseHheaTable, make: makeHheaTable };

              // The `hmtx` table contains the horizontal metrics for all glyphs.

              // Parse the `hmtx` table, which contains the horizontal metrics for all glyphs.
              // This function augments the glyph array, adding the advanceWidth and leftSideBearing to each glyph.
              function parseHmtxTable(data, start, numMetrics, numGlyphs, glyphs) {
                var advanceWidth;
                var leftSideBearing;
                var p = new parse.Parser(data, start);
                for (var i = 0; i < numGlyphs; i += 1) {
                  // If the font is monospaced, only one entry is needed. This last entry applies to all subsequent glyphs.
                  if (i < numMetrics) {
                    advanceWidth = p.parseUShort();
                    leftSideBearing = p.parseShort();
                  }

                  var glyph = glyphs.get(i);
                  glyph.advanceWidth = advanceWidth;
                  glyph.leftSideBearing = leftSideBearing;
                }
              }

              function makeHmtxTable(glyphs) {
                var t = new table.Table('hmtx', []);
                for (var i = 0; i < glyphs.length; i += 1) {
                  var glyph = glyphs.get(i);
                  var advanceWidth = glyph.advanceWidth || 0;
                  var leftSideBearing = glyph.leftSideBearing || 0;
                  t.fields.push({
                    name: 'advanceWidth_' + i,
                    type: 'USHORT',
                    value: advanceWidth
                  });
                  t.fields.push({
                    name: 'leftSideBearing_' + i,
                    type: 'SHORT',
                    value: leftSideBearing
                  });
                }

                return t;
              }

              var hmtx = { parse: parseHmtxTable, make: makeHmtxTable };

              // The `ltag` table stores IETF BCP-47 language tags. It allows supporting

              function makeLtagTable(tags) {
                var result = new table.Table('ltag', [
                  { name: 'version', type: 'ULONG', value: 1 },
                  { name: 'flags', type: 'ULONG', value: 0 },
                  { name: 'numTags', type: 'ULONG', value: tags.length }
                ]);

                var stringPool = '';
                var stringPoolOffset = 12 + tags.length * 4;
                for (var i = 0; i < tags.length; ++i) {
                  var pos = stringPool.indexOf(tags[i]);
                  if (pos < 0) {
                    pos = stringPool.length;
                    stringPool += tags[i];
                  }

                  result.fields.push({
                    name: 'offset ' + i,
                    type: 'USHORT',
                    value: stringPoolOffset + pos
                  });
                  result.fields.push({
                    name: 'length ' + i,
                    type: 'USHORT',
                    value: tags[i].length
                  });
                }

                result.fields.push({
                  name: 'stringPool',
                  type: 'CHARARRAY',
                  value: stringPool
                });
                return result;
              }

              function parseLtagTable(data, start) {
                var p = new parse.Parser(data, start);
                var tableVersion = p.parseULong();
                check.argument(tableVersion === 1, 'Unsupported ltag table version.');
                // The 'ltag' specification does not define any flags; skip the field.
                p.skip('uLong', 1);
                var numTags = p.parseULong();

                var tags = [];
                for (var i = 0; i < numTags; i++) {
                  var tag = '';
                  var offset = start + p.parseUShort();
                  var length = p.parseUShort();
                  for (var j = offset; j < offset + length; ++j) {
                    tag += String.fromCharCode(data.getInt8(j));
                  }

                  tags.push(tag);
                }

                return tags;
              }

              var ltag = { make: makeLtagTable, parse: parseLtagTable };

              // The `maxp` table establishes the memory requirements for the font.

              // Parse the maximum profile `maxp` table.
              function parseMaxpTable(data, start) {
                var maxp = {};
                var p = new parse.Parser(data, start);
                maxp.version = p.parseVersion();
                maxp.numGlyphs = p.parseUShort();
                if (maxp.version === 1.0) {
                  maxp.maxPoints = p.parseUShort();
                  maxp.maxContours = p.parseUShort();
                  maxp.maxCompositePoints = p.parseUShort();
                  maxp.maxCompositeContours = p.parseUShort();
                  maxp.maxZones = p.parseUShort();
                  maxp.maxTwilightPoints = p.parseUShort();
                  maxp.maxStorage = p.parseUShort();
                  maxp.maxFunctionDefs = p.parseUShort();
                  maxp.maxInstructionDefs = p.parseUShort();
                  maxp.maxStackElements = p.parseUShort();
                  maxp.maxSizeOfInstructions = p.parseUShort();
                  maxp.maxComponentElements = p.parseUShort();
                  maxp.maxComponentDepth = p.parseUShort();
                }

                return maxp;
              }

              function makeMaxpTable(numGlyphs) {
                return new table.Table('maxp', [
                  { name: 'version', type: 'FIXED', value: 0x00005000 },
                  { name: 'numGlyphs', type: 'USHORT', value: numGlyphs }
                ]);
              }

              var maxp = { parse: parseMaxpTable, make: makeMaxpTable };

              // The `name` naming table.

              // NameIDs for the name table.
              var nameTableNames = [
                'copyright', // 0
                'fontFamily', // 1
                'fontSubfamily', // 2
                'uniqueID', // 3
                'fullName', // 4
                'version', // 5
                'postScriptName', // 6
                'trademark', // 7
                'manufacturer', // 8
                'designer', // 9
                'description', // 10
                'manufacturerURL', // 11
                'designerURL', // 12
                'license', // 13
                'licenseURL', // 14
                'reserved', // 15
                'preferredFamily', // 16
                'preferredSubfamily', // 17
                'compatibleFullName', // 18
                'sampleText', // 19
                'postScriptFindFontName', // 20
                'wwsFamily', // 21
                'wwsSubfamily' // 22
              ];

              var macLanguages = {
                0: 'en',
                1: 'fr',
                2: 'de',
                3: 'it',
                4: 'nl',
                5: 'sv',
                6: 'es',
                7: 'da',
                8: 'pt',
                9: 'no',
                10: 'he',
                11: 'ja',
                12: 'ar',
                13: 'fi',
                14: 'el',
                15: 'is',
                16: 'mt',
                17: 'tr',
                18: 'hr',
                19: 'zh-Hant',
                20: 'ur',
                21: 'hi',
                22: 'th',
                23: 'ko',
                24: 'lt',
                25: 'pl',
                26: 'hu',
                27: 'es',
                28: 'lv',
                29: 'se',
                30: 'fo',
                31: 'fa',
                32: 'ru',
                33: 'zh',
                34: 'nl-BE',
                35: 'ga',
                36: 'sq',
                37: 'ro',
                38: 'cz',
                39: 'sk',
                40: 'si',
                41: 'yi',
                42: 'sr',
                43: 'mk',
                44: 'bg',
                45: 'uk',
                46: 'be',
                47: 'uz',
                48: 'kk',
                49: 'az-Cyrl',
                50: 'az-Arab',
                51: 'hy',
                52: 'ka',
                53: 'mo',
                54: 'ky',
                55: 'tg',
                56: 'tk',
                57: 'mn-CN',
                58: 'mn',
                59: 'ps',
                60: 'ks',
                61: 'ku',
                62: 'sd',
                63: 'bo',
                64: 'ne',
                65: 'sa',
                66: 'mr',
                67: 'bn',
                68: 'as',
                69: 'gu',
                70: 'pa',
                71: 'or',
                72: 'ml',
                73: 'kn',
                74: 'ta',
                75: 'te',
                76: 'si',
                77: 'my',
                78: 'km',
                79: 'lo',
                80: 'vi',
                81: 'id',
                82: 'tl',
                83: 'ms',
                84: 'ms-Arab',
                85: 'am',
                86: 'ti',
                87: 'om',
                88: 'so',
                89: 'sw',
                90: 'rw',
                91: 'rn',
                92: 'ny',
                93: 'mg',
                94: 'eo',
                128: 'cy',
                129: 'eu',
                130: 'ca',
                131: 'la',
                132: 'qu',
                133: 'gn',
                134: 'ay',
                135: 'tt',
                136: 'ug',
                137: 'dz',
                138: 'jv',
                139: 'su',
                140: 'gl',
                141: 'af',
                142: 'br',
                143: 'iu',
                144: 'gd',
                145: 'gv',
                146: 'ga',
                147: 'to',
                148: 'el-polyton',
                149: 'kl',
                150: 'az',
                151: 'nn'
              };

              // MacOS language ID → MacOS script ID
              //
              // Note that the script ID is not sufficient to determine what encoding
              // to use in TrueType files. For some languages, MacOS used a modification
              // of a mainstream script. For example, an Icelandic name would be stored
              // with smRoman in the TrueType naming table, but the actual encoding
              // is a special Icelandic version of the normal Macintosh Roman encoding.
              // As another example, Inuktitut uses an 8-bit encoding for Canadian Aboriginal
              // Syllables but MacOS had run out of available script codes, so this was
              // done as a (pretty radical) "modification" of Ethiopic.
              //
              // http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt
              var macLanguageToScript = {
                0: 0, // langEnglish → smRoman
                1: 0, // langFrench → smRoman
                2: 0, // langGerman → smRoman
                3: 0, // langItalian → smRoman
                4: 0, // langDutch → smRoman
                5: 0, // langSwedish → smRoman
                6: 0, // langSpanish → smRoman
                7: 0, // langDanish → smRoman
                8: 0, // langPortuguese → smRoman
                9: 0, // langNorwegian → smRoman
                10: 5, // langHebrew → smHebrew
                11: 1, // langJapanese → smJapanese
                12: 4, // langArabic → smArabic
                13: 0, // langFinnish → smRoman
                14: 6, // langGreek → smGreek
                15: 0, // langIcelandic → smRoman (modified)
                16: 0, // langMaltese → smRoman
                17: 0, // langTurkish → smRoman (modified)
                18: 0, // langCroatian → smRoman (modified)
                19: 2, // langTradChinese → smTradChinese
                20: 4, // langUrdu → smArabic
                21: 9, // langHindi → smDevanagari
                22: 21, // langThai → smThai
                23: 3, // langKorean → smKorean
                24: 29, // langLithuanian → smCentralEuroRoman
                25: 29, // langPolish → smCentralEuroRoman
                26: 29, // langHungarian → smCentralEuroRoman
                27: 29, // langEstonian → smCentralEuroRoman
                28: 29, // langLatvian → smCentralEuroRoman
                29: 0, // langSami → smRoman
                30: 0, // langFaroese → smRoman (modified)
                31: 4, // langFarsi → smArabic (modified)
                32: 7, // langRussian → smCyrillic
                33: 25, // langSimpChinese → smSimpChinese
                34: 0, // langFlemish → smRoman
                35: 0, // langIrishGaelic → smRoman (modified)
                36: 0, // langAlbanian → smRoman
                37: 0, // langRomanian → smRoman (modified)
                38: 29, // langCzech → smCentralEuroRoman
                39: 29, // langSlovak → smCentralEuroRoman
                40: 0, // langSlovenian → smRoman (modified)
                41: 5, // langYiddish → smHebrew
                42: 7, // langSerbian → smCyrillic
                43: 7, // langMacedonian → smCyrillic
                44: 7, // langBulgarian → smCyrillic
                45: 7, // langUkrainian → smCyrillic (modified)
                46: 7, // langByelorussian → smCyrillic
                47: 7, // langUzbek → smCyrillic
                48: 7, // langKazakh → smCyrillic
                49: 7, // langAzerbaijani → smCyrillic
                50: 4, // langAzerbaijanAr → smArabic
                51: 24, // langArmenian → smArmenian
                52: 23, // langGeorgian → smGeorgian
                53: 7, // langMoldavian → smCyrillic
                54: 7, // langKirghiz → smCyrillic
                55: 7, // langTajiki → smCyrillic
                56: 7, // langTurkmen → smCyrillic
                57: 27, // langMongolian → smMongolian
                58: 7, // langMongolianCyr → smCyrillic
                59: 4, // langPashto → smArabic
                60: 4, // langKurdish → smArabic
                61: 4, // langKashmiri → smArabic
                62: 4, // langSindhi → smArabic
                63: 26, // langTibetan → smTibetan
                64: 9, // langNepali → smDevanagari
                65: 9, // langSanskrit → smDevanagari
                66: 9, // langMarathi → smDevanagari
                67: 13, // langBengali → smBengali
                68: 13, // langAssamese → smBengali
                69: 11, // langGujarati → smGujarati
                70: 10, // langPunjabi → smGurmukhi
                71: 12, // langOriya → smOriya
                72: 17, // langMalayalam → smMalayalam
                73: 16, // langKannada → smKannada
                74: 14, // langTamil → smTamil
                75: 15, // langTelugu → smTelugu
                76: 18, // langSinhalese → smSinhalese
                77: 19, // langBurmese → smBurmese
                78: 20, // langKhmer → smKhmer
                79: 22, // langLao → smLao
                80: 30, // langVietnamese → smVietnamese
                81: 0, // langIndonesian → smRoman
                82: 0, // langTagalog → smRoman
                83: 0, // langMalayRoman → smRoman
                84: 4, // langMalayArabic → smArabic
                85: 28, // langAmharic → smEthiopic
                86: 28, // langTigrinya → smEthiopic
                87: 28, // langOromo → smEthiopic
                88: 0, // langSomali → smRoman
                89: 0, // langSwahili → smRoman
                90: 0, // langKinyarwanda → smRoman
                91: 0, // langRundi → smRoman
                92: 0, // langNyanja → smRoman
                93: 0, // langMalagasy → smRoman
                94: 0, // langEsperanto → smRoman
                128: 0, // langWelsh → smRoman (modified)
                129: 0, // langBasque → smRoman
                130: 0, // langCatalan → smRoman
                131: 0, // langLatin → smRoman
                132: 0, // langQuechua → smRoman
                133: 0, // langGuarani → smRoman
                134: 0, // langAymara → smRoman
                135: 7, // langTatar → smCyrillic
                136: 4, // langUighur → smArabic
                137: 26, // langDzongkha → smTibetan
                138: 0, // langJavaneseRom → smRoman
                139: 0, // langSundaneseRom → smRoman
                140: 0, // langGalician → smRoman
                141: 0, // langAfrikaans → smRoman
                142: 0, // langBreton → smRoman (modified)
                143: 28, // langInuktitut → smEthiopic (modified)
                144: 0, // langScottishGaelic → smRoman (modified)
                145: 0, // langManxGaelic → smRoman (modified)
                146: 0, // langIrishGaelicScript → smRoman (modified)
                147: 0, // langTongan → smRoman
                148: 6, // langGreekAncient → smRoman
                149: 0, // langGreenlandic → smRoman
                150: 0, // langAzerbaijanRoman → smRoman
                151: 0 // langNynorsk → smRoman
              };

              // While Microsoft indicates a region/country for all its language
              // IDs, we omit the region code if it's equal to the "most likely
              // region subtag" according to Unicode CLDR. For scripts, we omit
              // the subtag if it is equal to the Suppress-Script entry in the
              // IANA language subtag registry for IETF BCP 47.
              //
              // For example, Microsoft states that its language code 0x041A is
              // Croatian in Croatia. We transform this to the BCP 47 language code 'hr'
              // and not 'hr-HR' because Croatia is the default country for Croatian,
              // according to Unicode CLDR. As another example, Microsoft states
              // that 0x101A is Croatian (Latin) in Bosnia-Herzegovina. We transform
              // this to 'hr-BA' and not 'hr-Latn-BA' because Latin is the default script
              // for the Croatian language, according to IANA.
              //
              // http://www.unicode.org/cldr/charts/latest/supplemental/likely_subtags.html
              // http://www.iana.org/assignments/language-subtag-registry/language-subtag-registry
              var windowsLanguages = {
                0x0436: 'af',
                0x041c: 'sq',
                0x0484: 'gsw',
                0x045e: 'am',
                0x1401: 'ar-DZ',
                0x3c01: 'ar-BH',
                0x0c01: 'ar',
                0x0801: 'ar-IQ',
                0x2c01: 'ar-JO',
                0x3401: 'ar-KW',
                0x3001: 'ar-LB',
                0x1001: 'ar-LY',
                0x1801: 'ary',
                0x2001: 'ar-OM',
                0x4001: 'ar-QA',
                0x0401: 'ar-SA',
                0x2801: 'ar-SY',
                0x1c01: 'aeb',
                0x3801: 'ar-AE',
                0x2401: 'ar-YE',
                0x042b: 'hy',
                0x044d: 'as',
                0x082c: 'az-Cyrl',
                0x042c: 'az',
                0x046d: 'ba',
                0x042d: 'eu',
                0x0423: 'be',
                0x0845: 'bn',
                0x0445: 'bn-IN',
                0x201a: 'bs-Cyrl',
                0x141a: 'bs',
                0x047e: 'br',
                0x0402: 'bg',
                0x0403: 'ca',
                0x0c04: 'zh-HK',
                0x1404: 'zh-MO',
                0x0804: 'zh',
                0x1004: 'zh-SG',
                0x0404: 'zh-TW',
                0x0483: 'co',
                0x041a: 'hr',
                0x101a: 'hr-BA',
                0x0405: 'cs',
                0x0406: 'da',
                0x048c: 'prs',
                0x0465: 'dv',
                0x0813: 'nl-BE',
                0x0413: 'nl',
                0x0c09: 'en-AU',
                0x2809: 'en-BZ',
                0x1009: 'en-CA',
                0x2409: 'en-029',
                0x4009: 'en-IN',
                0x1809: 'en-IE',
                0x2009: 'en-JM',
                0x4409: 'en-MY',
                0x1409: 'en-NZ',
                0x3409: 'en-PH',
                0x4809: 'en-SG',
                0x1c09: 'en-ZA',
                0x2c09: 'en-TT',
                0x0809: 'en-GB',
                0x0409: 'en',
                0x3009: 'en-ZW',
                0x0425: 'et',
                0x0438: 'fo',
                0x0464: 'fil',
                0x040b: 'fi',
                0x080c: 'fr-BE',
                0x0c0c: 'fr-CA',
                0x040c: 'fr',
                0x140c: 'fr-LU',
                0x180c: 'fr-MC',
                0x100c: 'fr-CH',
                0x0462: 'fy',
                0x0456: 'gl',
                0x0437: 'ka',
                0x0c07: 'de-AT',
                0x0407: 'de',
                0x1407: 'de-LI',
                0x1007: 'de-LU',
                0x0807: 'de-CH',
                0x0408: 'el',
                0x046f: 'kl',
                0x0447: 'gu',
                0x0468: 'ha',
                0x040d: 'he',
                0x0439: 'hi',
                0x040e: 'hu',
                0x040f: 'is',
                0x0470: 'ig',
                0x0421: 'id',
                0x045d: 'iu',
                0x085d: 'iu-Latn',
                0x083c: 'ga',
                0x0434: 'xh',
                0x0435: 'zu',
                0x0410: 'it',
                0x0810: 'it-CH',
                0x0411: 'ja',
                0x044b: 'kn',
                0x043f: 'kk',
                0x0453: 'km',
                0x0486: 'quc',
                0x0487: 'rw',
                0x0441: 'sw',
                0x0457: 'kok',
                0x0412: 'ko',
                0x0440: 'ky',
                0x0454: 'lo',
                0x0426: 'lv',
                0x0427: 'lt',
                0x082e: 'dsb',
                0x046e: 'lb',
                0x042f: 'mk',
                0x083e: 'ms-BN',
                0x043e: 'ms',
                0x044c: 'ml',
                0x043a: 'mt',
                0x0481: 'mi',
                0x047a: 'arn',
                0x044e: 'mr',
                0x047c: 'moh',
                0x0450: 'mn',
                0x0850: 'mn-CN',
                0x0461: 'ne',
                0x0414: 'nb',
                0x0814: 'nn',
                0x0482: 'oc',
                0x0448: 'or',
                0x0463: 'ps',
                0x0415: 'pl',
                0x0416: 'pt',
                0x0816: 'pt-PT',
                0x0446: 'pa',
                0x046b: 'qu-BO',
                0x086b: 'qu-EC',
                0x0c6b: 'qu',
                0x0418: 'ro',
                0x0417: 'rm',
                0x0419: 'ru',
                0x243b: 'smn',
                0x103b: 'smj-NO',
                0x143b: 'smj',
                0x0c3b: 'se-FI',
                0x043b: 'se',
                0x083b: 'se-SE',
                0x203b: 'sms',
                0x183b: 'sma-NO',
                0x1c3b: 'sms',
                0x044f: 'sa',
                0x1c1a: 'sr-Cyrl-BA',
                0x0c1a: 'sr',
                0x181a: 'sr-Latn-BA',
                0x081a: 'sr-Latn',
                0x046c: 'nso',
                0x0432: 'tn',
                0x045b: 'si',
                0x041b: 'sk',
                0x0424: 'sl',
                0x2c0a: 'es-AR',
                0x400a: 'es-BO',
                0x340a: 'es-CL',
                0x240a: 'es-CO',
                0x140a: 'es-CR',
                0x1c0a: 'es-DO',
                0x300a: 'es-EC',
                0x440a: 'es-SV',
                0x100a: 'es-GT',
                0x480a: 'es-HN',
                0x080a: 'es-MX',
                0x4c0a: 'es-NI',
                0x180a: 'es-PA',
                0x3c0a: 'es-PY',
                0x280a: 'es-PE',
                0x500a: 'es-PR',

                // Microsoft has defined two different language codes for
                // “Spanish with modern sorting” and “Spanish with traditional
                // sorting”. This makes sense for collation APIs, and it would be
                // possible to express this in BCP 47 language tags via Unicode
                // extensions (eg., es-u-co-trad is Spanish with traditional
                // sorting). However, for storing names in fonts, the distinction
                // does not make sense, so we give “es” in both cases.
                0x0c0a: 'es',
                0x040a: 'es',

                0x540a: 'es-US',
                0x380a: 'es-UY',
                0x200a: 'es-VE',
                0x081d: 'sv-FI',
                0x041d: 'sv',
                0x045a: 'syr',
                0x0428: 'tg',
                0x085f: 'tzm',
                0x0449: 'ta',
                0x0444: 'tt',
                0x044a: 'te',
                0x041e: 'th',
                0x0451: 'bo',
                0x041f: 'tr',
                0x0442: 'tk',
                0x0480: 'ug',
                0x0422: 'uk',
                0x042e: 'hsb',
                0x0420: 'ur',
                0x0843: 'uz-Cyrl',
                0x0443: 'uz',
                0x042a: 'vi',
                0x0452: 'cy',
                0x0488: 'wo',
                0x0485: 'sah',
                0x0478: 'ii',
                0x046a: 'yo'
              };

              // Returns a IETF BCP 47 language code, for example 'zh-Hant'
              // for 'Chinese in the traditional script'.
              function getLanguageCode(platformID, languageID, ltag) {
                switch (platformID) {
                  case 0: // Unicode
                    if (languageID === 0xffff) {
                      return 'und';
                    } else if (ltag) {
                      return ltag[languageID];
                    }

                    break;

                  case 1: // Macintosh
                    return macLanguages[languageID];

                  case 3: // Windows
                    return windowsLanguages[languageID];
                }

                return undefined;
              }

              var utf16 = 'utf-16';

              // MacOS script ID → encoding. This table stores the default case,
              // which can be overridden by macLanguageEncodings.
              var macScriptEncodings = {
                0: 'macintosh', // smRoman
                1: 'x-mac-japanese', // smJapanese
                2: 'x-mac-chinesetrad', // smTradChinese
                3: 'x-mac-korean', // smKorean
                6: 'x-mac-greek', // smGreek
                7: 'x-mac-cyrillic', // smCyrillic
                9: 'x-mac-devanagai', // smDevanagari
                10: 'x-mac-gurmukhi', // smGurmukhi
                11: 'x-mac-gujarati', // smGujarati
                12: 'x-mac-oriya', // smOriya
                13: 'x-mac-bengali', // smBengali
                14: 'x-mac-tamil', // smTamil
                15: 'x-mac-telugu', // smTelugu
                16: 'x-mac-kannada', // smKannada
                17: 'x-mac-malayalam', // smMalayalam
                18: 'x-mac-sinhalese', // smSinhalese
                19: 'x-mac-burmese', // smBurmese
                20: 'x-mac-khmer', // smKhmer
                21: 'x-mac-thai', // smThai
                22: 'x-mac-lao', // smLao
                23: 'x-mac-georgian', // smGeorgian
                24: 'x-mac-armenian', // smArmenian
                25: 'x-mac-chinesesimp', // smSimpChinese
                26: 'x-mac-tibetan', // smTibetan
                27: 'x-mac-mongolian', // smMongolian
                28: 'x-mac-ethiopic', // smEthiopic
                29: 'x-mac-ce', // smCentralEuroRoman
                30: 'x-mac-vietnamese', // smVietnamese
                31: 'x-mac-extarabic' // smExtArabic
              };

              // MacOS language ID → encoding. This table stores the exceptional
              // cases, which override macScriptEncodings. For writing MacOS naming
              // tables, we need to emit a MacOS script ID. Therefore, we cannot
              // merge macScriptEncodings into macLanguageEncodings.
              //
              // http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt
              var macLanguageEncodings = {
                15: 'x-mac-icelandic', // langIcelandic
                17: 'x-mac-turkish', // langTurkish
                18: 'x-mac-croatian', // langCroatian
                24: 'x-mac-ce', // langLithuanian
                25: 'x-mac-ce', // langPolish
                26: 'x-mac-ce', // langHungarian
                27: 'x-mac-ce', // langEstonian
                28: 'x-mac-ce', // langLatvian
                30: 'x-mac-icelandic', // langFaroese
                37: 'x-mac-romanian', // langRomanian
                38: 'x-mac-ce', // langCzech
                39: 'x-mac-ce', // langSlovak
                40: 'x-mac-ce', // langSlovenian
                143: 'x-mac-inuit', // langInuktitut
                146: 'x-mac-gaelic' // langIrishGaelicScript
              };

              function getEncoding(platformID, encodingID, languageID) {
                switch (platformID) {
                  case 0: // Unicode
                    return utf16;

                  case 1: // Apple Macintosh
                    return (
                      macLanguageEncodings[languageID] || macScriptEncodings[encodingID]
                    );

                  case 3: // Microsoft Windows
                    if (encodingID === 1 || encodingID === 10) {
                      return utf16;
                    }

                    break;
                }

                return undefined;
              }

              // Parse the naming `name` table.
              // FIXME: Format 1 additional fields are not supported yet.
              // ltag is the content of the `ltag' table, such as ['en', 'zh-Hans', 'de-CH-1904'].
              function parseNameTable(data, start, ltag) {
                var name = {};
                var p = new parse.Parser(data, start);
                var format = p.parseUShort();
                var count = p.parseUShort();
                var stringOffset = p.offset + p.parseUShort();
                for (var i = 0; i < count; i++) {
                  var platformID = p.parseUShort();
                  var encodingID = p.parseUShort();
                  var languageID = p.parseUShort();
                  var nameID = p.parseUShort();
                  var property = nameTableNames[nameID] || nameID;
                  var byteLength = p.parseUShort();
                  var offset = p.parseUShort();
                  var language = getLanguageCode(platformID, languageID, ltag);
                  var encoding = getEncoding(platformID, encodingID, languageID);
                  if (encoding !== undefined && language !== undefined) {
                    var text = void 0;
                    if (encoding === utf16) {
                      text = decode.UTF16(data, stringOffset + offset, byteLength);
                    } else {
                      text = decode.MACSTRING(
                        data,
                        stringOffset + offset,
                        byteLength,
                        encoding
                      );
                    }

                    if (text) {
                      var translations = name[property];
                      if (translations === undefined) {
                        translations = name[property] = {};
                      }

                      translations[language] = text;
                    }
                  }
                }

                var langTagCount = 0;
                if (format === 1) {
                  // FIXME: Also handle Microsoft's 'name' table 1.
                  langTagCount = p.parseUShort();
                }

                return name;
              }

              // {23: 'foo'} → {'foo': 23}
              // ['bar', 'baz'] → {'bar': 0, 'baz': 1}
              function reverseDict(dict) {
                var result = {};
                for (var key in dict) {
                  result[dict[key]] = parseInt(key);
                }

                return result;
              }

              function makeNameRecord(
                platformID,
                encodingID,
                languageID,
                nameID,
                length,
                offset
              ) {
                return new table.Record('NameRecord', [
                  { name: 'platformID', type: 'USHORT', value: platformID },
                  { name: 'encodingID', type: 'USHORT', value: encodingID },
                  { name: 'languageID', type: 'USHORT', value: languageID },
                  { name: 'nameID', type: 'USHORT', value: nameID },
                  { name: 'length', type: 'USHORT', value: length },
                  { name: 'offset', type: 'USHORT', value: offset }
                ]);
              }

              // Finds the position of needle in haystack, or -1 if not there.
              // Like String.indexOf(), but for arrays.
              function findSubArray(needle, haystack) {
                var needleLength = needle.length;
                var limit = haystack.length - needleLength + 1;

                loop: for (var pos = 0; pos < limit; pos++) {
                  for (; pos < limit; pos++) {
                    for (var k = 0; k < needleLength; k++) {
                      if (haystack[pos + k] !== needle[k]) {
                        continue loop;
                      }
                    }

                    return pos;
                  }
                }

                return -1;
              }

              function addStringToPool(s, pool) {
                var offset = findSubArray(s, pool);
                if (offset < 0) {
                  offset = pool.length;
                  var i = 0;
                  var len = s.length;
                  for (; i < len; ++i) {
                    pool.push(s[i]);
                  }
                }

                return offset;
              }

              function makeNameTable(names, ltag) {
                var nameID;
                var nameIDs = [];

                var namesWithNumericKeys = {};
                var nameTableIds = reverseDict(nameTableNames);
                for (var key in names) {
                  var id = nameTableIds[key];
                  if (id === undefined) {
                    id = key;
                  }

                  nameID = parseInt(id);

                  if (isNaN(nameID)) {
                    throw new Error(
                      'Name table entry "' +
                        key +
                        '" does not exist, see nameTableNames for complete list.'
                    );
                  }

                  namesWithNumericKeys[nameID] = names[key];
                  nameIDs.push(nameID);
                }

                var macLanguageIds = reverseDict(macLanguages);
                var windowsLanguageIds = reverseDict(windowsLanguages);

                var nameRecords = [];
                var stringPool = [];

                for (var i = 0; i < nameIDs.length; i++) {
                  nameID = nameIDs[i];
                  var translations = namesWithNumericKeys[nameID];
                  for (var lang in translations) {
                    var text = translations[lang];

                    // For MacOS, we try to emit the name in the form that was introduced
                    // in the initial version of the TrueType spec (in the late 1980s).
                    // However, this can fail for various reasons: the requested BCP 47
                    // language code might not have an old-style Mac equivalent;
                    // we might not have a codec for the needed character encoding;
                    // or the name might contain characters that cannot be expressed
                    // in the old-style Macintosh encoding. In case of failure, we emit
                    // the name in a more modern fashion (Unicode encoding with BCP 47
                    // language tags) that is recognized by MacOS 10.5, released in 2009.
                    // If fonts were only read by operating systems, we could simply
                    // emit all names in the modern form; this would be much easier.
                    // However, there are many applications and libraries that read
                    // 'name' tables directly, and these will usually only recognize
                    // the ancient form (silently skipping the unrecognized names).
                    var macPlatform = 1; // Macintosh
                    var macLanguage = macLanguageIds[lang];
                    var macScript = macLanguageToScript[macLanguage];
                    var macEncoding = getEncoding(macPlatform, macScript, macLanguage);
                    var macName = encode.MACSTRING(text, macEncoding);
                    if (macName === undefined) {
                      macPlatform = 0; // Unicode
                      macLanguage = ltag.indexOf(lang);
                      if (macLanguage < 0) {
                        macLanguage = ltag.length;
                        ltag.push(lang);
                      }

                      macScript = 4; // Unicode 2.0 and later
                      macName = encode.UTF16(text);
                    }

                    var macNameOffset = addStringToPool(macName, stringPool);
                    nameRecords.push(
                      makeNameRecord(
                        macPlatform,
                        macScript,
                        macLanguage,
                        nameID,
                        macName.length,
                        macNameOffset
                      )
                    );

                    var winLanguage = windowsLanguageIds[lang];
                    if (winLanguage !== undefined) {
                      var winName = encode.UTF16(text);
                      var winNameOffset = addStringToPool(winName, stringPool);
                      nameRecords.push(
                        makeNameRecord(
                          3,
                          1,
                          winLanguage,
                          nameID,
                          winName.length,
                          winNameOffset
                        )
                      );
                    }
                  }
                }

                nameRecords.sort(function(a, b) {
                  return (
                    a.platformID - b.platformID ||
                    a.encodingID - b.encodingID ||
                    a.languageID - b.languageID ||
                    a.nameID - b.nameID
                  );
                });

                var t = new table.Table('name', [
                  { name: 'format', type: 'USHORT', value: 0 },
                  { name: 'count', type: 'USHORT', value: nameRecords.length },
                  {
                    name: 'stringOffset',
                    type: 'USHORT',
                    value: 6 + nameRecords.length * 12
                  }
                ]);

                for (var r = 0; r < nameRecords.length; r++) {
                  t.fields.push({
                    name: 'record_' + r,
                    type: 'RECORD',
                    value: nameRecords[r]
                  });
                }

                t.fields.push({ name: 'strings', type: 'LITERAL', value: stringPool });
                return t;
              }

              var _name = { parse: parseNameTable, make: makeNameTable };

              // The `OS/2` table contains metrics required in OpenType fonts.

              var unicodeRanges = [
                { begin: 0x0000, end: 0x007f }, // Basic Latin
                { begin: 0x0080, end: 0x00ff }, // Latin-1 Supplement
                { begin: 0x0100, end: 0x017f }, // Latin Extended-A
                { begin: 0x0180, end: 0x024f }, // Latin Extended-B
                { begin: 0x0250, end: 0x02af }, // IPA Extensions
                { begin: 0x02b0, end: 0x02ff }, // Spacing Modifier Letters
                { begin: 0x0300, end: 0x036f }, // Combining Diacritical Marks
                { begin: 0x0370, end: 0x03ff }, // Greek and Coptic
                { begin: 0x2c80, end: 0x2cff }, // Coptic
                { begin: 0x0400, end: 0x04ff }, // Cyrillic
                { begin: 0x0530, end: 0x058f }, // Armenian
                { begin: 0x0590, end: 0x05ff }, // Hebrew
                { begin: 0xa500, end: 0xa63f }, // Vai
                { begin: 0x0600, end: 0x06ff }, // Arabic
                { begin: 0x07c0, end: 0x07ff }, // NKo
                { begin: 0x0900, end: 0x097f }, // Devanagari
                { begin: 0x0980, end: 0x09ff }, // Bengali
                { begin: 0x0a00, end: 0x0a7f }, // Gurmukhi
                { begin: 0x0a80, end: 0x0aff }, // Gujarati
                { begin: 0x0b00, end: 0x0b7f }, // Oriya
                { begin: 0x0b80, end: 0x0bff }, // Tamil
                { begin: 0x0c00, end: 0x0c7f }, // Telugu
                { begin: 0x0c80, end: 0x0cff }, // Kannada
                { begin: 0x0d00, end: 0x0d7f }, // Malayalam
                { begin: 0x0e00, end: 0x0e7f }, // Thai
                { begin: 0x0e80, end: 0x0eff }, // Lao
                { begin: 0x10a0, end: 0x10ff }, // Georgian
                { begin: 0x1b00, end: 0x1b7f }, // Balinese
                { begin: 0x1100, end: 0x11ff }, // Hangul Jamo
                { begin: 0x1e00, end: 0x1eff }, // Latin Extended Additional
                { begin: 0x1f00, end: 0x1fff }, // Greek Extended
                { begin: 0x2000, end: 0x206f }, // General Punctuation
                { begin: 0x2070, end: 0x209f }, // Superscripts And Subscripts
                { begin: 0x20a0, end: 0x20cf }, // Currency Symbol
                { begin: 0x20d0, end: 0x20ff }, // Combining Diacritical Marks For Symbols
                { begin: 0x2100, end: 0x214f }, // Letterlike Symbols
                { begin: 0x2150, end: 0x218f }, // Number Forms
                { begin: 0x2190, end: 0x21ff }, // Arrows
                { begin: 0x2200, end: 0x22ff }, // Mathematical Operators
                { begin: 0x2300, end: 0x23ff }, // Miscellaneous Technical
                { begin: 0x2400, end: 0x243f }, // Control Pictures
                { begin: 0x2440, end: 0x245f }, // Optical Character Recognition
                { begin: 0x2460, end: 0x24ff }, // Enclosed Alphanumerics
                { begin: 0x2500, end: 0x257f }, // Box Drawing
                { begin: 0x2580, end: 0x259f }, // Block Elements
                { begin: 0x25a0, end: 0x25ff }, // Geometric Shapes
                { begin: 0x2600, end: 0x26ff }, // Miscellaneous Symbols
                { begin: 0x2700, end: 0x27bf }, // Dingbats
                { begin: 0x3000, end: 0x303f }, // CJK Symbols And Punctuation
                { begin: 0x3040, end: 0x309f }, // Hiragana
                { begin: 0x30a0, end: 0x30ff }, // Katakana
                { begin: 0x3100, end: 0x312f }, // Bopomofo
                { begin: 0x3130, end: 0x318f }, // Hangul Compatibility Jamo
                { begin: 0xa840, end: 0xa87f }, // Phags-pa
                { begin: 0x3200, end: 0x32ff }, // Enclosed CJK Letters And Months
                { begin: 0x3300, end: 0x33ff }, // CJK Compatibility
                { begin: 0xac00, end: 0xd7af }, // Hangul Syllables
                { begin: 0xd800, end: 0xdfff }, // Non-Plane 0 *
                { begin: 0x10900, end: 0x1091f }, // Phoenicia
                { begin: 0x4e00, end: 0x9fff }, // CJK Unified Ideographs
                { begin: 0xe000, end: 0xf8ff }, // Private Use Area (plane 0)
                { begin: 0x31c0, end: 0x31ef }, // CJK Strokes
                { begin: 0xfb00, end: 0xfb4f }, // Alphabetic Presentation Forms
                { begin: 0xfb50, end: 0xfdff }, // Arabic Presentation Forms-A
                { begin: 0xfe20, end: 0xfe2f }, // Combining Half Marks
                { begin: 0xfe10, end: 0xfe1f }, // Vertical Forms
                { begin: 0xfe50, end: 0xfe6f }, // Small Form Variants
                { begin: 0xfe70, end: 0xfeff }, // Arabic Presentation Forms-B
                { begin: 0xff00, end: 0xffef }, // Halfwidth And Fullwidth Forms
                { begin: 0xfff0, end: 0xffff }, // Specials
                { begin: 0x0f00, end: 0x0fff }, // Tibetan
                { begin: 0x0700, end: 0x074f }, // Syriac
                { begin: 0x0780, end: 0x07bf }, // Thaana
                { begin: 0x0d80, end: 0x0dff }, // Sinhala
                { begin: 0x1000, end: 0x109f }, // Myanmar
                { begin: 0x1200, end: 0x137f }, // Ethiopic
                { begin: 0x13a0, end: 0x13ff }, // Cherokee
                { begin: 0x1400, end: 0x167f }, // Unified Canadian Aboriginal Syllabics
                { begin: 0x1680, end: 0x169f }, // Ogham
                { begin: 0x16a0, end: 0x16ff }, // Runic
                { begin: 0x1780, end: 0x17ff }, // Khmer
                { begin: 0x1800, end: 0x18af }, // Mongolian
                { begin: 0x2800, end: 0x28ff }, // Braille Patterns
                { begin: 0xa000, end: 0xa48f }, // Yi Syllables
                { begin: 0x1700, end: 0x171f }, // Tagalog
                { begin: 0x10300, end: 0x1032f }, // Old Italic
                { begin: 0x10330, end: 0x1034f }, // Gothic
                { begin: 0x10400, end: 0x1044f }, // Deseret
                { begin: 0x1d000, end: 0x1d0ff }, // Byzantine Musical Symbols
                { begin: 0x1d400, end: 0x1d7ff }, // Mathematical Alphanumeric Symbols
                { begin: 0xff000, end: 0xffffd }, // Private Use (plane 15)
                { begin: 0xfe00, end: 0xfe0f }, // Variation Selectors
                { begin: 0xe0000, end: 0xe007f }, // Tags
                { begin: 0x1900, end: 0x194f }, // Limbu
                { begin: 0x1950, end: 0x197f }, // Tai Le
                { begin: 0x1980, end: 0x19df }, // New Tai Lue
                { begin: 0x1a00, end: 0x1a1f }, // Buginese
                { begin: 0x2c00, end: 0x2c5f }, // Glagolitic
                { begin: 0x2d30, end: 0x2d7f }, // Tifinagh
                { begin: 0x4dc0, end: 0x4dff }, // Yijing Hexagram Symbols
                { begin: 0xa800, end: 0xa82f }, // Syloti Nagri
                { begin: 0x10000, end: 0x1007f }, // Linear B Syllabary
                { begin: 0x10140, end: 0x1018f }, // Ancient Greek Numbers
                { begin: 0x10380, end: 0x1039f }, // Ugaritic
                { begin: 0x103a0, end: 0x103df }, // Old Persian
                { begin: 0x10450, end: 0x1047f }, // Shavian
                { begin: 0x10480, end: 0x104af }, // Osmanya
                { begin: 0x10800, end: 0x1083f }, // Cypriot Syllabary
                { begin: 0x10a00, end: 0x10a5f }, // Kharoshthi
                { begin: 0x1d300, end: 0x1d35f }, // Tai Xuan Jing Symbols
                { begin: 0x12000, end: 0x123ff }, // Cuneiform
                { begin: 0x1d360, end: 0x1d37f }, // Counting Rod Numerals
                { begin: 0x1b80, end: 0x1bbf }, // Sundanese
                { begin: 0x1c00, end: 0x1c4f }, // Lepcha
                { begin: 0x1c50, end: 0x1c7f }, // Ol Chiki
                { begin: 0xa880, end: 0xa8df }, // Saurashtra
                { begin: 0xa900, end: 0xa92f }, // Kayah Li
                { begin: 0xa930, end: 0xa95f }, // Rejang
                { begin: 0xaa00, end: 0xaa5f }, // Cham
                { begin: 0x10190, end: 0x101cf }, // Ancient Symbols
                { begin: 0x101d0, end: 0x101ff }, // Phaistos Disc
                { begin: 0x102a0, end: 0x102df }, // Carian
                { begin: 0x1f030, end: 0x1f09f } // Domino Tiles
              ];

              function getUnicodeRange(unicode) {
                for (var i = 0; i < unicodeRanges.length; i += 1) {
                  var range = unicodeRanges[i];
                  if (unicode >= range.begin && unicode < range.end) {
                    return i;
                  }
                }

                return -1;
              }

              // Parse the OS/2 and Windows metrics `OS/2` table
              function parseOS2Table(data, start) {
                var os2 = {};
                var p = new parse.Parser(data, start);
                os2.version = p.parseUShort();
                os2.xAvgCharWidth = p.parseShort();
                os2.usWeightClass = p.parseUShort();
                os2.usWidthClass = p.parseUShort();
                os2.fsType = p.parseUShort();
                os2.ySubscriptXSize = p.parseShort();
                os2.ySubscriptYSize = p.parseShort();
                os2.ySubscriptXOffset = p.parseShort();
                os2.ySubscriptYOffset = p.parseShort();
                os2.ySuperscriptXSize = p.parseShort();
                os2.ySuperscriptYSize = p.parseShort();
                os2.ySuperscriptXOffset = p.parseShort();
                os2.ySuperscriptYOffset = p.parseShort();
                os2.yStrikeoutSize = p.parseShort();
                os2.yStrikeoutPosition = p.parseShort();
                os2.sFamilyClass = p.parseShort();
                os2.panose = [];
                for (var i = 0; i < 10; i++) {
                  os2.panose[i] = p.parseByte();
                }

                os2.ulUnicodeRange1 = p.parseULong();
                os2.ulUnicodeRange2 = p.parseULong();
                os2.ulUnicodeRange3 = p.parseULong();
                os2.ulUnicodeRange4 = p.parseULong();
                os2.achVendID = String.fromCharCode(
                  p.parseByte(),
                  p.parseByte(),
                  p.parseByte(),
                  p.parseByte()
                );
                os2.fsSelection = p.parseUShort();
                os2.usFirstCharIndex = p.parseUShort();
                os2.usLastCharIndex = p.parseUShort();
                os2.sTypoAscender = p.parseShort();
                os2.sTypoDescender = p.parseShort();
                os2.sTypoLineGap = p.parseShort();
                os2.usWinAscent = p.parseUShort();
                os2.usWinDescent = p.parseUShort();
                if (os2.version >= 1) {
                  os2.ulCodePageRange1 = p.parseULong();
                  os2.ulCodePageRange2 = p.parseULong();
                }

                if (os2.version >= 2) {
                  os2.sxHeight = p.parseShort();
                  os2.sCapHeight = p.parseShort();
                  os2.usDefaultChar = p.parseUShort();
                  os2.usBreakChar = p.parseUShort();
                  os2.usMaxContent = p.parseUShort();
                }

                return os2;
              }

              function makeOS2Table(options) {
                return new table.Table(
                  'OS/2',
                  [
                    { name: 'version', type: 'USHORT', value: 0x0003 },
                    { name: 'xAvgCharWidth', type: 'SHORT', value: 0 },
                    { name: 'usWeightClass', type: 'USHORT', value: 0 },
                    { name: 'usWidthClass', type: 'USHORT', value: 0 },
                    { name: 'fsType', type: 'USHORT', value: 0 },
                    { name: 'ySubscriptXSize', type: 'SHORT', value: 650 },
                    { name: 'ySubscriptYSize', type: 'SHORT', value: 699 },
                    { name: 'ySubscriptXOffset', type: 'SHORT', value: 0 },
                    { name: 'ySubscriptYOffset', type: 'SHORT', value: 140 },
                    { name: 'ySuperscriptXSize', type: 'SHORT', value: 650 },
                    { name: 'ySuperscriptYSize', type: 'SHORT', value: 699 },
                    { name: 'ySuperscriptXOffset', type: 'SHORT', value: 0 },
                    { name: 'ySuperscriptYOffset', type: 'SHORT', value: 479 },
                    { name: 'yStrikeoutSize', type: 'SHORT', value: 49 },
                    { name: 'yStrikeoutPosition', type: 'SHORT', value: 258 },
                    { name: 'sFamilyClass', type: 'SHORT', value: 0 },
                    { name: 'bFamilyType', type: 'BYTE', value: 0 },
                    { name: 'bSerifStyle', type: 'BYTE', value: 0 },
                    { name: 'bWeight', type: 'BYTE', value: 0 },
                    { name: 'bProportion', type: 'BYTE', value: 0 },
                    { name: 'bContrast', type: 'BYTE', value: 0 },
                    { name: 'bStrokeVariation', type: 'BYTE', value: 0 },
                    { name: 'bArmStyle', type: 'BYTE', value: 0 },
                    { name: 'bLetterform', type: 'BYTE', value: 0 },
                    { name: 'bMidline', type: 'BYTE', value: 0 },
                    { name: 'bXHeight', type: 'BYTE', value: 0 },
                    { name: 'ulUnicodeRange1', type: 'ULONG', value: 0 },
                    { name: 'ulUnicodeRange2', type: 'ULONG', value: 0 },
                    { name: 'ulUnicodeRange3', type: 'ULONG', value: 0 },
                    { name: 'ulUnicodeRange4', type: 'ULONG', value: 0 },
                    { name: 'achVendID', type: 'CHARARRAY', value: 'XXXX' },
                    { name: 'fsSelection', type: 'USHORT', value: 0 },
                    { name: 'usFirstCharIndex', type: 'USHORT', value: 0 },
                    { name: 'usLastCharIndex', type: 'USHORT', value: 0 },
                    { name: 'sTypoAscender', type: 'SHORT', value: 0 },
                    { name: 'sTypoDescender', type: 'SHORT', value: 0 },
                    { name: 'sTypoLineGap', type: 'SHORT', value: 0 },
                    { name: 'usWinAscent', type: 'USHORT', value: 0 },
                    { name: 'usWinDescent', type: 'USHORT', value: 0 },
                    { name: 'ulCodePageRange1', type: 'ULONG', value: 0 },
                    { name: 'ulCodePageRange2', type: 'ULONG', value: 0 },
                    { name: 'sxHeight', type: 'SHORT', value: 0 },
                    { name: 'sCapHeight', type: 'SHORT', value: 0 },
                    { name: 'usDefaultChar', type: 'USHORT', value: 0 },
                    { name: 'usBreakChar', type: 'USHORT', value: 0 },
                    { name: 'usMaxContext', type: 'USHORT', value: 0 }
                  ],
                  options
                );
              }

              var os2 = {
                parse: parseOS2Table,
                make: makeOS2Table,
                unicodeRanges: unicodeRanges,
                getUnicodeRange: getUnicodeRange
              };

              // The `post` table stores additional PostScript information, such as glyph names.

              // Parse the PostScript `post` table
              function parsePostTable(data, start) {
                var post = {};
                var p = new parse.Parser(data, start);
                post.version = p.parseVersion();
                post.italicAngle = p.parseFixed();
                post.underlinePosition = p.parseShort();
                post.underlineThickness = p.parseShort();
                post.isFixedPitch = p.parseULong();
                post.minMemType42 = p.parseULong();
                post.maxMemType42 = p.parseULong();
                post.minMemType1 = p.parseULong();
                post.maxMemType1 = p.parseULong();
                switch (post.version) {
                  case 1:
                    post.names = standardNames.slice();
                    break;
                  case 2:
                    post.numberOfGlyphs = p.parseUShort();
                    post.glyphNameIndex = new Array(post.numberOfGlyphs);
                    for (var i = 0; i < post.numberOfGlyphs; i++) {
                      post.glyphNameIndex[i] = p.parseUShort();
                    }

                    post.names = [];
                    for (var i$1 = 0; i$1 < post.numberOfGlyphs; i$1++) {
                      if (post.glyphNameIndex[i$1] >= standardNames.length) {
                        var nameLength = p.parseChar();
                        post.names.push(p.parseString(nameLength));
                      }
                    }

                    break;
                  case 2.5:
                    post.numberOfGlyphs = p.parseUShort();
                    post.offset = new Array(post.numberOfGlyphs);
                    for (var i$2 = 0; i$2 < post.numberOfGlyphs; i$2++) {
                      post.offset[i$2] = p.parseChar();
                    }

                    break;
                }
                return post;
              }

              function makePostTable() {
                return new table.Table('post', [
                  { name: 'version', type: 'FIXED', value: 0x00030000 },
                  { name: 'italicAngle', type: 'FIXED', value: 0 },
                  { name: 'underlinePosition', type: 'FWORD', value: 0 },
                  { name: 'underlineThickness', type: 'FWORD', value: 0 },
                  { name: 'isFixedPitch', type: 'ULONG', value: 0 },
                  { name: 'minMemType42', type: 'ULONG', value: 0 },
                  { name: 'maxMemType42', type: 'ULONG', value: 0 },
                  { name: 'minMemType1', type: 'ULONG', value: 0 },
                  { name: 'maxMemType1', type: 'ULONG', value: 0 }
                ]);
              }

              var post = { parse: parsePostTable, make: makePostTable };

              // The `GSUB` table contains ligatures, among other things.

              var subtableParsers = new Array(9); // subtableParsers[0] is unused

              // https://www.microsoft.com/typography/OTSPEC/GSUB.htm#SS
              subtableParsers[1] = function parseLookup1() {
                var start = this.offset + this.relativeOffset;
                var substFormat = this.parseUShort();
                if (substFormat === 1) {
                  return {
                    substFormat: 1,
                    coverage: this.parsePointer(Parser.coverage),
                    deltaGlyphId: this.parseUShort()
                  };
                } else if (substFormat === 2) {
                  return {
                    substFormat: 2,
                    coverage: this.parsePointer(Parser.coverage),
                    substitute: this.parseOffset16List()
                  };
                }
                check.assert(
                  false,
                  '0x' + start.toString(16) + ': lookup type 1 format must be 1 or 2.'
                );
              };

              // https://www.microsoft.com/typography/OTSPEC/GSUB.htm#MS
              subtableParsers[2] = function parseLookup2() {
                var substFormat = this.parseUShort();
                check.argument(
                  substFormat === 1,
                  'GSUB Multiple Substitution Subtable identifier-format must be 1'
                );
                return {
                  substFormat: substFormat,
                  coverage: this.parsePointer(Parser.coverage),
                  sequences: this.parseListOfLists()
                };
              };

              // https://www.microsoft.com/typography/OTSPEC/GSUB.htm#AS
              subtableParsers[3] = function parseLookup3() {
                var substFormat = this.parseUShort();
                check.argument(
                  substFormat === 1,
                  'GSUB Alternate Substitution Subtable identifier-format must be 1'
                );
                return {
                  substFormat: substFormat,
                  coverage: this.parsePointer(Parser.coverage),
                  alternateSets: this.parseListOfLists()
                };
              };

              // https://www.microsoft.com/typography/OTSPEC/GSUB.htm#LS
              subtableParsers[4] = function parseLookup4() {
                var substFormat = this.parseUShort();
                check.argument(
                  substFormat === 1,
                  'GSUB ligature table identifier-format must be 1'
                );
                return {
                  substFormat: substFormat,
                  coverage: this.parsePointer(Parser.coverage),
                  ligatureSets: this.parseListOfLists(function() {
                    return {
                      ligGlyph: this.parseUShort(),
                      components: this.parseUShortList(this.parseUShort() - 1)
                    };
                  })
                };
              };

              var lookupRecordDesc = {
                sequenceIndex: Parser.uShort,
                lookupListIndex: Parser.uShort
              };

              // https://www.microsoft.com/typography/OTSPEC/GSUB.htm#CSF
              subtableParsers[5] = function parseLookup5() {
                var start = this.offset + this.relativeOffset;
                var substFormat = this.parseUShort();

                if (substFormat === 1) {
                  return {
                    substFormat: substFormat,
                    coverage: this.parsePointer(Parser.coverage),
                    ruleSets: this.parseListOfLists(function() {
                      var glyphCount = this.parseUShort();
                      var substCount = this.parseUShort();
                      return {
                        input: this.parseUShortList(glyphCount - 1),
                        lookupRecords: this.parseRecordList(substCount, lookupRecordDesc)
                      };
                    })
                  };
                } else if (substFormat === 2) {
                  return {
                    substFormat: substFormat,
                    coverage: this.parsePointer(Parser.coverage),
                    classDef: this.parsePointer(Parser.classDef),
                    classSets: this.parseListOfLists(function() {
                      var glyphCount = this.parseUShort();
                      var substCount = this.parseUShort();
                      return {
                        classes: this.parseUShortList(glyphCount - 1),
                        lookupRecords: this.parseRecordList(substCount, lookupRecordDesc)
                      };
                    })
                  };
                } else if (substFormat === 3) {
                  var glyphCount = this.parseUShort();
                  var substCount = this.parseUShort();
                  return {
                    substFormat: substFormat,
                    coverages: this.parseList(glyphCount, Parser.pointer(Parser.coverage)),
                    lookupRecords: this.parseRecordList(substCount, lookupRecordDesc)
                  };
                }
                check.assert(
                  false,
                  '0x' + start.toString(16) + ': lookup type 5 format must be 1, 2 or 3.'
                );
              };

              // https://www.microsoft.com/typography/OTSPEC/GSUB.htm#CC
              subtableParsers[6] = function parseLookup6() {
                var start = this.offset + this.relativeOffset;
                var substFormat = this.parseUShort();
                if (substFormat === 1) {
                  return {
                    substFormat: 1,
                    coverage: this.parsePointer(Parser.coverage),
                    chainRuleSets: this.parseListOfLists(function() {
                      return {
                        backtrack: this.parseUShortList(),
                        input: this.parseUShortList(this.parseShort() - 1),
                        lookahead: this.parseUShortList(),
                        lookupRecords: this.parseRecordList(lookupRecordDesc)
                      };
                    })
                  };
                } else if (substFormat === 2) {
                  return {
                    substFormat: 2,
                    coverage: this.parsePointer(Parser.coverage),
                    backtrackClassDef: this.parsePointer(Parser.classDef),
                    inputClassDef: this.parsePointer(Parser.classDef),
                    lookaheadClassDef: this.parsePointer(Parser.classDef),
                    chainClassSet: this.parseListOfLists(function() {
                      return {
                        backtrack: this.parseUShortList(),
                        input: this.parseUShortList(this.parseShort() - 1),
                        lookahead: this.parseUShortList(),
                        lookupRecords: this.parseRecordList(lookupRecordDesc)
                      };
                    })
                  };
                } else if (substFormat === 3) {
                  return {
                    substFormat: 3,
                    backtrackCoverage: this.parseList(Parser.pointer(Parser.coverage)),
                    inputCoverage: this.parseList(Parser.pointer(Parser.coverage)),
                    lookaheadCoverage: this.parseList(Parser.pointer(Parser.coverage)),
                    lookupRecords: this.parseRecordList(lookupRecordDesc)
                  };
                }
                check.assert(
                  false,
                  '0x' + start.toString(16) + ': lookup type 6 format must be 1, 2 or 3.'
                );
              };

              // https://www.microsoft.com/typography/OTSPEC/GSUB.htm#ES
              subtableParsers[7] = function parseLookup7() {
                // Extension Substitution subtable
                var substFormat = this.parseUShort();
                check.argument(
                  substFormat === 1,
                  'GSUB Extension Substitution subtable identifier-format must be 1'
                );
                var extensionLookupType = this.parseUShort();
                var extensionParser = new Parser(
                  this.data,
                  this.offset + this.parseULong()
                );
                return {
                  substFormat: 1,
                  lookupType: extensionLookupType,
                  extension: subtableParsers[extensionLookupType].call(extensionParser)
                };
              };

              // https://www.microsoft.com/typography/OTSPEC/GSUB.htm#RCCS
              subtableParsers[8] = function parseLookup8() {
                var substFormat = this.parseUShort();
                check.argument(
                  substFormat === 1,
                  'GSUB Reverse Chaining Contextual Single Substitution Subtable identifier-format must be 1'
                );
                return {
                  substFormat: substFormat,
                  coverage: this.parsePointer(Parser.coverage),
                  backtrackCoverage: this.parseList(Parser.pointer(Parser.coverage)),
                  lookaheadCoverage: this.parseList(Parser.pointer(Parser.coverage)),
                  substitutes: this.parseUShortList()
                };
              };

              // https://www.microsoft.com/typography/OTSPEC/gsub.htm
              function parseGsubTable(data, start) {
                start = start || 0;
                var p = new Parser(data, start);
                var tableVersion = p.parseVersion(1);
                check.argument(
                  tableVersion === 1 || tableVersion === 1.1,
                  'Unsupported GSUB table version.'
                );
                if (tableVersion === 1) {
                  return {
                    version: tableVersion,
                    scripts: p.parseScriptList(),
                    features: p.parseFeatureList(),
                    lookups: p.parseLookupList(subtableParsers)
                  };
                } else {
                  return {
                    version: tableVersion,
                    scripts: p.parseScriptList(),
                    features: p.parseFeatureList(),
                    lookups: p.parseLookupList(subtableParsers),
                    variations: p.parseFeatureVariationsList()
                  };
                }
              }

              // GSUB Writing //////////////////////////////////////////////
              var subtableMakers = new Array(9);

              subtableMakers[1] = function makeLookup1(subtable) {
                if (subtable.substFormat === 1) {
                  return new table.Table('substitutionTable', [
                    { name: 'substFormat', type: 'USHORT', value: 1 },
                    {
                      name: 'coverage',
                      type: 'TABLE',
                      value: new table.Coverage(subtable.coverage)
                    },
                    { name: 'deltaGlyphID', type: 'USHORT', value: subtable.deltaGlyphId }
                  ]);
                } else {
                  return new table.Table(
                    'substitutionTable',
                    [
                      { name: 'substFormat', type: 'USHORT', value: 2 },
                      {
                        name: 'coverage',
                        type: 'TABLE',
                        value: new table.Coverage(subtable.coverage)
                      }
                    ].concat(table.ushortList('substitute', subtable.substitute))
                  );
                }
                check.fail('Lookup type 1 substFormat must be 1 or 2.');
              };

              subtableMakers[3] = function makeLookup3(subtable) {
                check.assert(
                  subtable.substFormat === 1,
                  'Lookup type 3 substFormat must be 1.'
                );
                return new table.Table(
                  'substitutionTable',
                  [
                    { name: 'substFormat', type: 'USHORT', value: 1 },
                    {
                      name: 'coverage',
                      type: 'TABLE',
                      value: new table.Coverage(subtable.coverage)
                    }
                  ].concat(
                    table.tableList('altSet', subtable.alternateSets, function(
                      alternateSet
                    ) {
                      return new table.Table(
                        'alternateSetTable',
                        table.ushortList('alternate', alternateSet)
                      );
                    })
                  )
                );
              };

              subtableMakers[4] = function makeLookup4(subtable) {
                check.assert(
                  subtable.substFormat === 1,
                  'Lookup type 4 substFormat must be 1.'
                );
                return new table.Table(
                  'substitutionTable',
                  [
                    { name: 'substFormat', type: 'USHORT', value: 1 },
                    {
                      name: 'coverage',
                      type: 'TABLE',
                      value: new table.Coverage(subtable.coverage)
                    }
                  ].concat(
                    table.tableList('ligSet', subtable.ligatureSets, function(ligatureSet) {
                      return new table.Table(
                        'ligatureSetTable',
                        table.tableList('ligature', ligatureSet, function(ligature) {
                          return new table.Table(
                            'ligatureTable',
                            [
                              { name: 'ligGlyph', type: 'USHORT', value: ligature.ligGlyph }
                            ].concat(
                              table.ushortList(
                                'component',
                                ligature.components,
                                ligature.components.length + 1
                              )
                            )
                          );
                        })
                      );
                    })
                  )
                );
              };

              function makeGsubTable(gsub) {
                return new table.Table('GSUB', [
                  { name: 'version', type: 'ULONG', value: 0x10000 },
                  {
                    name: 'scripts',
                    type: 'TABLE',
                    value: new table.ScriptList(gsub.scripts)
                  },
                  {
                    name: 'features',
                    type: 'TABLE',
                    value: new table.FeatureList(gsub.features)
                  },
                  {
                    name: 'lookups',
                    type: 'TABLE',
                    value: new table.LookupList(gsub.lookups, subtableMakers)
                  }
                ]);
              }

              var gsub = { parse: parseGsubTable, make: makeGsubTable };

              // The `GPOS` table contains kerning pairs, among other things.

              // Parse the metadata `meta` table.
              // https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6meta.html
              function parseMetaTable(data, start) {
                var p = new parse.Parser(data, start);
                var tableVersion = p.parseULong();
                check.argument(tableVersion === 1, 'Unsupported META table version.');
                p.parseULong(); // flags - currently unused and set to 0
                p.parseULong(); // tableOffset
                var numDataMaps = p.parseULong();

                var tags = {};
                for (var i = 0; i < numDataMaps; i++) {
                  var tag = p.parseTag();
                  var dataOffset = p.parseULong();
                  var dataLength = p.parseULong();
                  var text = decode.UTF8(data, start + dataOffset, dataLength);

                  tags[tag] = text;
                }
                return tags;
              }

              function makeMetaTable(tags) {
                var numTags = Object.keys(tags).length;
                var stringPool = '';
                var stringPoolOffset = 16 + numTags * 12;

                var result = new table.Table('meta', [
                  { name: 'version', type: 'ULONG', value: 1 },
                  { name: 'flags', type: 'ULONG', value: 0 },
                  { name: 'offset', type: 'ULONG', value: stringPoolOffset },
                  { name: 'numTags', type: 'ULONG', value: numTags }
                ]);

                for (var tag in tags) {
                  var pos = stringPool.length;
                  stringPool += tags[tag];

                  result.fields.push({ name: 'tag ' + tag, type: 'TAG', value: tag });
                  result.fields.push({
                    name: 'offset ' + tag,
                    type: 'ULONG',
                    value: stringPoolOffset + pos
                  });
                  result.fields.push({
                    name: 'length ' + tag,
                    type: 'ULONG',
                    value: tags[tag].length
                  });
                }

                result.fields.push({
                  name: 'stringPool',
                  type: 'CHARARRAY',
                  value: stringPool
                });

                return result;
              }

              var meta = { parse: parseMetaTable, make: makeMetaTable };

              // The `sfnt` wrapper provides organization for the tables in the font.

              function log2(v) {
                return (Math.log(v) / Math.log(2)) | 0;
              }

              function computeCheckSum(bytes) {
                while (bytes.length % 4 !== 0) {
                  bytes.push(0);
                }

                var sum = 0;
                for (var i = 0; i < bytes.length; i += 4) {
                  sum +=
                    (bytes[i] << 24) +
                    (bytes[i + 1] << 16) +
                    (bytes[i + 2] << 8) +
                    bytes[i + 3];
                }

                sum %= Math.pow(2, 32);
                return sum;
              }

              function makeTableRecord(tag, checkSum, offset, length) {
                return new table.Record('Table Record', [
                  { name: 'tag', type: 'TAG', value: tag !== undefined ? tag : '' },
                  {
                    name: 'checkSum',
                    type: 'ULONG',
                    value: checkSum !== undefined ? checkSum : 0
                  },
                  {
                    name: 'offset',
                    type: 'ULONG',
                    value: offset !== undefined ? offset : 0
                  },
                  {
                    name: 'length',
                    type: 'ULONG',
                    value: length !== undefined ? length : 0
                  }
                ]);
              }

              function makeSfntTable(tables) {
                var sfnt = new table.Table('sfnt', [
                  { name: 'version', type: 'TAG', value: 'OTTO' },
                  { name: 'numTables', type: 'USHORT', value: 0 },
                  { name: 'searchRange', type: 'USHORT', value: 0 },
                  { name: 'entrySelector', type: 'USHORT', value: 0 },
                  { name: 'rangeShift', type: 'USHORT', value: 0 }
                ]);
                sfnt.tables = tables;
                sfnt.numTables = tables.length;
                var highestPowerOf2 = Math.pow(2, log2(sfnt.numTables));
                sfnt.searchRange = 16 * highestPowerOf2;
                sfnt.entrySelector = log2(highestPowerOf2);
                sfnt.rangeShift = sfnt.numTables * 16 - sfnt.searchRange;

                var recordFields = [];
                var tableFields = [];

                var offset = sfnt.sizeOf() + makeTableRecord().sizeOf() * sfnt.numTables;
                while (offset % 4 !== 0) {
                  offset += 1;
                  tableFields.push({ name: 'padding', type: 'BYTE', value: 0 });
                }

                for (var i = 0; i < tables.length; i += 1) {
                  var t = tables[i];
                  check.argument(
                    t.tableName.length === 4,
                    'Table name' + t.tableName + ' is invalid.'
                  );
                  var tableLength = t.sizeOf();
                  var tableRecord = makeTableRecord(
                    t.tableName,
                    computeCheckSum(t.encode()),
                    offset,
                    tableLength
                  );
                  recordFields.push({
                    name: tableRecord.tag + ' Table Record',
                    type: 'RECORD',
                    value: tableRecord
                  });
                  tableFields.push({
                    name: t.tableName + ' table',
                    type: 'RECORD',
                    value: t
                  });
                  offset += tableLength;
                  check.argument(
                    !isNaN(offset),
                    'Something went wrong calculating the offset.'
                  );
                  while (offset % 4 !== 0) {
                    offset += 1;
                    tableFields.push({ name: 'padding', type: 'BYTE', value: 0 });
                  }
                }

                // Table records need to be sorted alphabetically.
                recordFields.sort(function(r1, r2) {
                  if (r1.value.tag > r2.value.tag) {
                    return 1;
                  } else {
                    return -1;
                  }
                });

                sfnt.fields = sfnt.fields.concat(recordFields);
                sfnt.fields = sfnt.fields.concat(tableFields);
                return sfnt;
              }

              // Get the metrics for a character. If the string has more than one character
              // this function returns metrics for the first available character.
              // You can provide optional fallback metrics if no characters are available.
              function metricsForChar(font, chars, notFoundMetrics) {
                for (var i = 0; i < chars.length; i += 1) {
                  var glyphIndex = font.charToGlyphIndex(chars[i]);
                  if (glyphIndex > 0) {
                    var glyph = font.glyphs.get(glyphIndex);
                    return glyph.getMetrics();
                  }
                }

                return notFoundMetrics;
              }

              function average(vs) {
                var sum = 0;
                for (var i = 0; i < vs.length; i += 1) {
                  sum += vs[i];
                }

                return sum / vs.length;
              }

              // Convert the font object to a SFNT data structure.
              // This structure contains all the necessary tables and metadata to create a binary OTF file.
              function fontToSfntTable(font) {
                var xMins = [];
                var yMins = [];
                var xMaxs = [];
                var yMaxs = [];
                var advanceWidths = [];
                var leftSideBearings = [];
                var rightSideBearings = [];
                var firstCharIndex;
                var lastCharIndex = 0;
                var ulUnicodeRange1 = 0;
                var ulUnicodeRange2 = 0;
                var ulUnicodeRange3 = 0;
                var ulUnicodeRange4 = 0;

                for (var i = 0; i < font.glyphs.length; i += 1) {
                  var glyph = font.glyphs.get(i);
                  var unicode = glyph.unicode | 0;

                  if (isNaN(glyph.advanceWidth)) {
                    throw new Error(
                      'Glyph ' + glyph.name + ' (' + i + '): advanceWidth is not a number.'
                    );
                  }

                  if (firstCharIndex > unicode || firstCharIndex === undefined) {
                    // ignore .notdef char
                    if (unicode > 0) {
                      firstCharIndex = unicode;
                    }
                  }

                  if (lastCharIndex < unicode) {
                    lastCharIndex = unicode;
                  }

                  var position = os2.getUnicodeRange(unicode);
                  if (position < 32) {
                    ulUnicodeRange1 |= 1 << position;
                  } else if (position < 64) {
                    ulUnicodeRange2 |= 1 << (position - 32);
                  } else if (position < 96) {
                    ulUnicodeRange3 |= 1 << (position - 64);
                  } else if (position < 123) {
                    ulUnicodeRange4 |= 1 << (position - 96);
                  } else {
                    throw new Error(
                      'Unicode ranges bits > 123 are reserved for internal usage'
                    );
                  }
                  // Skip non-important characters.
                  if (glyph.name === '.notdef') {
                    continue;
                  }
                  var metrics = glyph.getMetrics();
                  xMins.push(metrics.xMin);
                  yMins.push(metrics.yMin);
                  xMaxs.push(metrics.xMax);
                  yMaxs.push(metrics.yMax);
                  leftSideBearings.push(metrics.leftSideBearing);
                  rightSideBearings.push(metrics.rightSideBearing);
                  advanceWidths.push(glyph.advanceWidth);
                }

                var globals = {
                  xMin: Math.min.apply(null, xMins),
                  yMin: Math.min.apply(null, yMins),
                  xMax: Math.max.apply(null, xMaxs),
                  yMax: Math.max.apply(null, yMaxs),
                  advanceWidthMax: Math.max.apply(null, advanceWidths),
                  advanceWidthAvg: average(advanceWidths),
                  minLeftSideBearing: Math.min.apply(null, leftSideBearings),
                  maxLeftSideBearing: Math.max.apply(null, leftSideBearings),
                  minRightSideBearing: Math.min.apply(null, rightSideBearings)
                };
                globals.ascender = font.ascender;
                globals.descender = font.descender;

                var headTable = head.make({
                  flags: 3, // 00000011 (baseline for font at y=0; left sidebearing point at x=0)
                  unitsPerEm: font.unitsPerEm,
                  xMin: globals.xMin,
                  yMin: globals.yMin,
                  xMax: globals.xMax,
                  yMax: globals.yMax,
                  lowestRecPPEM: 3,
                  createdTimestamp: font.createdTimestamp
                });

                var hheaTable = hhea.make({
                  ascender: globals.ascender,
                  descender: globals.descender,
                  advanceWidthMax: globals.advanceWidthMax,
                  minLeftSideBearing: globals.minLeftSideBearing,
                  minRightSideBearing: globals.minRightSideBearing,
                  xMaxExtent: globals.maxLeftSideBearing + (globals.xMax - globals.xMin),
                  numberOfHMetrics: font.glyphs.length
                });

                var maxpTable = maxp.make(font.glyphs.length);

                var os2Table = os2.make({
                  xAvgCharWidth: Math.round(globals.advanceWidthAvg),
                  usWeightClass: font.tables.os2.usWeightClass,
                  usWidthClass: font.tables.os2.usWidthClass,
                  usFirstCharIndex: firstCharIndex,
                  usLastCharIndex: lastCharIndex,
                  ulUnicodeRange1: ulUnicodeRange1,
                  ulUnicodeRange2: ulUnicodeRange2,
                  ulUnicodeRange3: ulUnicodeRange3,
                  ulUnicodeRange4: ulUnicodeRange4,
                  fsSelection: font.tables.os2.fsSelection, // REGULAR
                  // See http://typophile.com/node/13081 for more info on vertical metrics.
                  // We get metrics for typical characters (such as "x" for xHeight).
                  // We provide some fallback characters if characters are unavailable: their
                  // ordering was chosen experimentally.
                  sTypoAscender: globals.ascender,
                  sTypoDescender: globals.descender,
                  sTypoLineGap: 0,
                  usWinAscent: globals.yMax,
                  usWinDescent: Math.abs(globals.yMin),
                  ulCodePageRange1: 1, // FIXME: hard-code Latin 1 support for now
                  sxHeight: metricsForChar(font, 'xyvw', {
                    yMax: Math.round(globals.ascender / 2)
                  }).yMax,
                  sCapHeight: metricsForChar(font, 'HIKLEFJMNTZBDPRAGOQSUVWXY', globals)
                    .yMax,
                  usDefaultChar: font.hasChar(' ') ? 32 : 0, // Use space as the default character, if available.
                  usBreakChar: font.hasChar(' ') ? 32 : 0 // Use space as the break character, if available.
                });

                var hmtxTable = hmtx.make(font.glyphs);
                var cmapTable = cmap.make(font.glyphs);

                var englishFamilyName = font.getEnglishName('fontFamily');
                var englishStyleName = font.getEnglishName('fontSubfamily');
                var englishFullName = englishFamilyName + ' ' + englishStyleName;
                var postScriptName = font.getEnglishName('postScriptName');
                if (!postScriptName) {
                  postScriptName =
                    englishFamilyName.replace(/\s/g, '') + '-' + englishStyleName;
                }

                var names = {};
                for (var n in font.names) {
                  names[n] = font.names[n];
                }

                if (!names.uniqueID) {
                  names.uniqueID = {
                    en: font.getEnglishName('manufacturer') + ':' + englishFullName
                  };
                }

                if (!names.postScriptName) {
                  names.postScriptName = { en: postScriptName };
                }

                if (!names.preferredFamily) {
                  names.preferredFamily = font.names.fontFamily;
                }

                if (!names.preferredSubfamily) {
                  names.preferredSubfamily = font.names.fontSubfamily;
                }

                var languageTags = [];
                var nameTable = _name.make(names, languageTags);
                var ltagTable =
                  languageTags.length > 0 ? ltag.make(languageTags) : undefined;

                var postTable = post.make();
                var cffTable = cff.make(font.glyphs, {
                  version: font.getEnglishName('version'),
                  fullName: englishFullName,
                  familyName: englishFamilyName,
                  weightName: englishStyleName,
                  postScriptName: postScriptName,
                  unitsPerEm: font.unitsPerEm,
                  fontBBox: [0, globals.yMin, globals.ascender, globals.advanceWidthMax]
                });

                var metaTable =
                  font.metas && Object.keys(font.metas).length > 0
                    ? meta.make(font.metas)
                    : undefined;

                // The order does not matter because makeSfntTable() will sort them.
                var tables = [
                  headTable,
                  hheaTable,
                  maxpTable,
                  os2Table,
                  nameTable,
                  cmapTable,
                  postTable,
                  cffTable,
                  hmtxTable
                ];
                if (ltagTable) {
                  tables.push(ltagTable);
                }
                // Optional tables
                if (font.tables.gsub) {
                  tables.push(gsub.make(font.tables.gsub));
                }
                if (metaTable) {
                  tables.push(metaTable);
                }

                var sfntTable = makeSfntTable(tables);

                // Compute the font's checkSum and store it in head.checkSumAdjustment.
                var bytes = sfntTable.encode();
                var checkSum = computeCheckSum(bytes);
                var tableFields = sfntTable.fields;
                var checkSumAdjusted = false;
                for (var i$1 = 0; i$1 < tableFields.length; i$1 += 1) {
                  if (tableFields[i$1].name === 'head table') {
                    tableFields[i$1].value.checkSumAdjustment = 0xb1b0afba - checkSum;
                    checkSumAdjusted = true;
                    break;
                  }
                }

                if (!checkSumAdjusted) {
                  throw new Error('Could not find head table with checkSum to adjust.');
                }

                return sfntTable;
              }

              var sfnt = {
                make: makeSfntTable,
                fontToTable: fontToSfntTable,
                computeCheckSum: computeCheckSum
              };

              // The Layout object is the prototype of Substitution objects, and provides

              function searchTag(arr, tag) {
                /* jshint bitwise: false */
                var imin = 0;
                var imax = arr.length - 1;
                while (imin <= imax) {
                  var imid = (imin + imax) >>> 1;
                  var val = arr[imid].tag;
                  if (val === tag) {
                    return imid;
                  } else if (val < tag) {
                    imin = imid + 1;
                  } else {
                    imax = imid - 1;
                  }
                }
                // Not found: return -1-insertion point
                return -imin - 1;
              }

              function binSearch(arr, value) {
                /* jshint bitwise: false */
                var imin = 0;
                var imax = arr.length - 1;
                while (imin <= imax) {
                  var imid = (imin + imax) >>> 1;
                  var val = arr[imid];
                  if (val === value) {
                    return imid;
                  } else if (val < value) {
                    imin = imid + 1;
                  } else {
                    imax = imid - 1;
                  }
                }
                // Not found: return -1-insertion point
                return -imin - 1;
              }

              // binary search in a list of ranges (coverage, class definition)
              function searchRange(ranges, value) {
                // jshint bitwise: false
                var range;
                var imin = 0;
                var imax = ranges.length - 1;
                while (imin <= imax) {
                  var imid = (imin + imax) >>> 1;
                  range = ranges[imid];
                  var start = range.start;
                  if (start === value) {
                    return range;
                  } else if (start < value) {
                    imin = imid + 1;
                  } else {
                    imax = imid - 1;
                  }
                }
                if (imin > 0) {
                  range = ranges[imin - 1];
                  if (value > range.end) {
                    return 0;
                  }
                  return range;
                }
              }

              /**
               * @exports opentype.Layout
               * @class
               */
              function Layout(font, tableName) {
                this.font = font;
                this.tableName = tableName;
              }

              Layout.prototype = {
                /**
                 * Binary search an object by "tag" property
                 * @instance
                 * @function searchTag
                 * @memberof opentype.Layout
                 * @param  {Array} arr
                 * @param  {string} tag
                 * @return {number}
                 */
                searchTag: searchTag,

                /**
                 * Binary search in a list of numbers
                 * @instance
                 * @function binSearch
                 * @memberof opentype.Layout
                 * @param  {Array} arr
                 * @param  {number} value
                 * @return {number}
                 */
                binSearch: binSearch,

                /**
                 * Get or create the Layout table (GSUB, GPOS etc).
                 * @param  {boolean} create - Whether to create a new one.
                 * @return {Object} The GSUB or GPOS table.
                 */
                getTable: function(create) {
                  var layout = this.font.tables[this.tableName];
                  if (!layout && create) {
                    layout = this.font.tables[this.tableName] = this.createDefaultTable();
                  }
                  return layout;
                },

                /**
                 * Returns all scripts in the substitution table.
                 * @instance
                 * @return {Array}
                 */
                getScriptNames: function() {
                  var layout = this.getTable();
                  if (!layout) {
                    return [];
                  }
                  return layout.scripts.map(function(script) {
                    return script.tag;
                  });
                },

                /**
                 * Returns the best bet for a script name.
                 * Returns 'DFLT' if it exists.
                 * If not, returns 'latn' if it exists.
                 * If neither exist, returns undefined.
                 */
                getDefaultScriptName: function() {
                  var layout = this.getTable();
                  if (!layout) {
                    return;
                  }
                  var hasLatn = false;
                  for (var i = 0; i < layout.scripts.length; i++) {
                    var name = layout.scripts[i].tag;
                    if (name === 'DFLT') {
                      return name;
                    }
                    if (name === 'latn') {
                      hasLatn = true;
                    }
                  }
                  if (hasLatn) {
                    return 'latn';
                  }
                },

                /**
                 * Returns all LangSysRecords in the given script.
                 * @instance
                 * @param {string} [script='DFLT']
                 * @param {boolean} create - forces the creation of this script table if it doesn't exist.
                 * @return {Object} An object with tag and script properties.
                 */
                getScriptTable: function(script, create) {
                  var layout = this.getTable(create);
                  if (layout) {
                    script = script || 'DFLT';
                    var scripts = layout.scripts;
                    var pos = searchTag(layout.scripts, script);
                    if (pos >= 0) {
                      return scripts[pos].script;
                    } else if (create) {
                      var scr = {
                        tag: script,
                        script: {
                          defaultLangSys: {
                            reserved: 0,
                            reqFeatureIndex: 0xffff,
                            featureIndexes: []
                          },
                          langSysRecords: []
                        }
                      };
                      scripts.splice(-1 - pos, 0, scr);
                      return scr.script;
                    }
                  }
                },

                /**
                 * Returns a language system table
                 * @instance
                 * @param {string} [script='DFLT']
                 * @param {string} [language='dlft']
                 * @param {boolean} create - forces the creation of this langSysTable if it doesn't exist.
                 * @return {Object}
                 */
                getLangSysTable: function(script, language, create) {
                  var scriptTable = this.getScriptTable(script, create);
                  if (scriptTable) {
                    if (!language || language === 'dflt' || language === 'DFLT') {
                      return scriptTable.defaultLangSys;
                    }
                    var pos = searchTag(scriptTable.langSysRecords, language);
                    if (pos >= 0) {
                      return scriptTable.langSysRecords[pos].langSys;
                    } else if (create) {
                      var langSysRecord = {
                        tag: language,
                        langSys: {
                          reserved: 0,
                          reqFeatureIndex: 0xffff,
                          featureIndexes: []
                        }
                      };
                      scriptTable.langSysRecords.splice(-1 - pos, 0, langSysRecord);
                      return langSysRecord.langSys;
                    }
                  }
                },

                /**
                 * Get a specific feature table.
                 * @instance
                 * @param {string} [script='DFLT']
                 * @param {string} [language='dlft']
                 * @param {string} feature - One of the codes listed at https://www.microsoft.com/typography/OTSPEC/featurelist.htm
                 * @param {boolean} create - forces the creation of the feature table if it doesn't exist.
                 * @return {Object}
                 */
                getFeatureTable: function(script, language, feature, create) {
                  var langSysTable = this.getLangSysTable(script, language, create);
                  if (langSysTable) {
                    var featureRecord;
                    var featIndexes = langSysTable.featureIndexes;
                    var allFeatures = this.font.tables[this.tableName].features;
                    // The FeatureIndex array of indices is in arbitrary order,
                    // even if allFeatures is sorted alphabetically by feature tag.
                    for (var i = 0; i < featIndexes.length; i++) {
                      featureRecord = allFeatures[featIndexes[i]];
                      if (featureRecord.tag === feature) {
                        return featureRecord.feature;
                      }
                    }
                    if (create) {
                      var index = allFeatures.length;
                      // Automatic ordering of features would require to shift feature indexes in the script list.
                      check.assert(
                        index === 0 || feature >= allFeatures[index - 1].tag,
                        'Features must be added in alphabetical order.'
                      );
                      featureRecord = {
                        tag: feature,
                        feature: { params: 0, lookupListIndexes: [] }
                      };
                      allFeatures.push(featureRecord);
                      featIndexes.push(index);
                      return featureRecord.feature;
                    }
                  }
                },

                /**
                 * Get the lookup tables of a given type for a script/language/feature.
                 * @instance
                 * @param {string} [script='DFLT']
                 * @param {string} [language='dlft']
                 * @param {string} feature - 4-letter feature code
                 * @param {number} lookupType - 1 to 9
                 * @param {boolean} create - forces the creation of the lookup table if it doesn't exist, with no subtables.
                 * @return {Object[]}
                 */
                getLookupTables: function(script, language, feature, lookupType, create) {
                  var featureTable = this.getFeatureTable(
                    script,
                    language,
                    feature,
                    create
                  );
                  var tables = [];
                  if (featureTable) {
                    var lookupTable;
                    var lookupListIndexes = featureTable.lookupListIndexes;
                    var allLookups = this.font.tables[this.tableName].lookups;
                    // lookupListIndexes are in no particular order, so use naive search.
                    for (var i = 0; i < lookupListIndexes.length; i++) {
                      lookupTable = allLookups[lookupListIndexes[i]];
                      if (lookupTable.lookupType === lookupType) {
                        tables.push(lookupTable);
                      }
                    }
                    if (tables.length === 0 && create) {
                      lookupTable = {
                        lookupType: lookupType,
                        lookupFlag: 0,
                        subtables: [],
                        markFilteringSet: undefined
                      };
                      var index = allLookups.length;
                      allLookups.push(lookupTable);
                      lookupListIndexes.push(index);
                      return [lookupTable];
                    }
                  }
                  return tables;
                },

                /**
                 * Find a glyph in a class definition table
                 * https://docs.microsoft.com/en-us/typography/opentype/spec/chapter2#class-definition-table
                 * @param {object} classDefTable - an OpenType Layout class definition table
                 * @param {number} glyphIndex - the index of the glyph to find
                 * @returns {number} -1 if not found
                 */
                getGlyphClass: function(classDefTable, glyphIndex) {
                  switch (classDefTable.format) {
                    case 1:
                      if (
                        classDefTable.startGlyph <= glyphIndex &&
                        glyphIndex < classDefTable.startGlyph + classDefTable.classes.length
                      ) {
                        return classDefTable.classes[glyphIndex - classDefTable.startGlyph];
                      }
                      return 0;
                    case 2:
                      var range = searchRange(classDefTable.ranges, glyphIndex);
                      return range ? range.classId : 0;
                  }
                },

                /**
                 * Find a glyph in a coverage table
                 * https://docs.microsoft.com/en-us/typography/opentype/spec/chapter2#coverage-table
                 * @param {object} coverageTable - an OpenType Layout coverage table
                 * @param {number} glyphIndex - the index of the glyph to find
                 * @returns {number} -1 if not found
                 */
                getCoverageIndex: function(coverageTable, glyphIndex) {
                  switch (coverageTable.format) {
                    case 1:
                      var index = binSearch(coverageTable.glyphs, glyphIndex);
                      return index >= 0 ? index : -1;
                    case 2:
                      var range = searchRange(coverageTable.ranges, glyphIndex);
                      return range ? range.index + glyphIndex - range.start : -1;
                  }
                },

                /**
                 * Returns the list of glyph indexes of a coverage table.
                 * Format 1: the list is stored raw
                 * Format 2: compact list as range records.
                 * @instance
                 * @param  {Object} coverageTable
                 * @return {Array}
                 */
                expandCoverage: function(coverageTable) {
                  if (coverageTable.format === 1) {
                    return coverageTable.glyphs;
                  } else {
                    var glyphs = [];
                    var ranges = coverageTable.ranges;
                    for (var i = 0; i < ranges.length; i++) {
                      var range = ranges[i];
                      var start = range.start;
                      var end = range.end;
                      for (var j = start; j <= end; j++) {
                        glyphs.push(j);
                      }
                    }
                    return glyphs;
                  }
                }
              };

              // The Position object provides utility methods to manipulate

              /**
               * @exports opentype.Position
               * @class
               * @extends opentype.Layout
               * @param {opentype.Font}
               * @constructor
               */
              function Position(font) {
                Layout.call(this, font, 'gpos');
              }

              Position.prototype = Layout.prototype;

              /**
               * Init some data for faster and easier access later.
               */
              Position.prototype.init = function() {
                var script = this.getDefaultScriptName();
                this.defaultKerningTables = this.getKerningTables(script);
              };

              /**
               * Find a glyph pair in a list of lookup tables of type 2 and retrieve the xAdvance kerning value.
               *
               * @param {integer} leftIndex - left glyph index
               * @param {integer} rightIndex - right glyph index
               * @returns {integer}
               */
              Position.prototype.getKerningValue = function(
                kerningLookups,
                leftIndex,
                rightIndex
              ) {
                var this$1 = this;

                for (var i = 0; i < kerningLookups.length; i++) {
                  var subtables = kerningLookups[i].subtables;
                  for (var j = 0; j < subtables.length; j++) {
                    var subtable = subtables[j];
                    var covIndex = this$1.getCoverageIndex(subtable.coverage, leftIndex);
                    if (covIndex < 0) {
                      continue;
                    }
                    switch (subtable.posFormat) {
                      case 1:
                        // Search Pair Adjustment Positioning Format 1
                        var pairSet = subtable.pairSets[covIndex];
                        for (var k = 0; k < pairSet.length; k++) {
                          var pair = pairSet[k];
                          if (pair.secondGlyph === rightIndex) {
                            return (pair.value1 && pair.value1.xAdvance) || 0;
                          }
                        }
                        break; // left glyph found, not right glyph - try next subtable
                      case 2:
                        // Search Pair Adjustment Positioning Format 2
                        var class1 = this$1.getGlyphClass(subtable.classDef1, leftIndex);
                        var class2 = this$1.getGlyphClass(subtable.classDef2, rightIndex);
                        var pair$1 = subtable.classRecords[class1][class2];
                        return (pair$1.value1 && pair$1.value1.xAdvance) || 0;
                    }
                  }
                }
                return 0;
              };

              /**
               * List all kerning lookup tables.
               *
               * @param {string} [script='DFLT'] - use font.position.getDefaultScriptName() for a better default value
               * @param {string} [language='dflt']
               * @return {object[]} The list of kerning lookup tables (may be empty), or undefined if there is no GPOS table (and we should use the kern table)
               */
              Position.prototype.getKerningTables = function(script, language) {
                if (this.font.tables.gpos) {
                  return this.getLookupTables(script, language, 'kern', 2);
                }
              };

              // The Substitution object provides utility methods to manipulate

              /**
               * @exports opentype.Substitution
               * @class
               * @extends opentype.Layout
               * @param {opentype.Font}
               * @constructor
               */
              function Substitution(font) {
                Layout.call(this, font, 'gsub');
              }

              // Check if 2 arrays of primitives are equal.
              function arraysEqual(ar1, ar2) {
                var n = ar1.length;
                if (n !== ar2.length) {
                  return false;
                }
                for (var i = 0; i < n; i++) {
                  if (ar1[i] !== ar2[i]) {
                    return false;
                  }
                }
                return true;
              }

              // Find the first subtable of a lookup table in a particular format.
              function getSubstFormat(lookupTable, format, defaultSubtable) {
                var subtables = lookupTable.subtables;
                for (var i = 0; i < subtables.length; i++) {
                  var subtable = subtables[i];
                  if (subtable.substFormat === format) {
                    return subtable;
                  }
                }
                if (defaultSubtable) {
                  subtables.push(defaultSubtable);
                  return defaultSubtable;
                }
                return undefined;
              }

              Substitution.prototype = Layout.prototype;

              /**
               * Create a default GSUB table.
               * @return {Object} gsub - The GSUB table.
               */
              Substitution.prototype.createDefaultTable = function() {
                // Generate a default empty GSUB table with just a DFLT script and dflt lang sys.
                return {
                  version: 1,
                  scripts: [
                    {
                      tag: 'DFLT',
                      script: {
                        defaultLangSys: {
                          reserved: 0,
                          reqFeatureIndex: 0xffff,
                          featureIndexes: []
                        },
                        langSysRecords: []
                      }
                    }
                  ],
                  features: [],
                  lookups: []
                };
              };

              /**
               * List all single substitutions (lookup type 1) for a given script, language, and feature.
               * @param {string} [script='DFLT']
               * @param {string} [language='dflt']
               * @param {string} feature - 4-character feature name ('aalt', 'salt', 'ss01'...)
               * @return {Array} substitutions - The list of substitutions.
               */
              Substitution.prototype.getSingle = function(feature, script, language) {
                var this$1 = this;

                var substitutions = [];
                var lookupTables = this.getLookupTables(script, language, feature, 1);
                for (var idx = 0; idx < lookupTables.length; idx++) {
                  var subtables = lookupTables[idx].subtables;
                  for (var i = 0; i < subtables.length; i++) {
                    var subtable = subtables[i];
                    var glyphs = this$1.expandCoverage(subtable.coverage);
                    var j = void 0;
                    if (subtable.substFormat === 1) {
                      var delta = subtable.deltaGlyphId;
                      for (j = 0; j < glyphs.length; j++) {
                        var glyph = glyphs[j];
                        substitutions.push({ sub: glyph, by: glyph + delta });
                      }
                    } else {
                      var substitute = subtable.substitute;
                      for (j = 0; j < glyphs.length; j++) {
                        substitutions.push({ sub: glyphs[j], by: substitute[j] });
                      }
                    }
                  }
                }
                return substitutions;
              };

              /**
               * List all alternates (lookup type 3) for a given script, language, and feature.
               * @param {string} [script='DFLT']
               * @param {string} [language='dflt']
               * @param {string} feature - 4-character feature name ('aalt', 'salt'...)
               * @return {Array} alternates - The list of alternates
               */
              Substitution.prototype.getAlternates = function(feature, script, language) {
                var this$1 = this;

                var alternates = [];
                var lookupTables = this.getLookupTables(script, language, feature, 3);
                for (var idx = 0; idx < lookupTables.length; idx++) {
                  var subtables = lookupTables[idx].subtables;
                  for (var i = 0; i < subtables.length; i++) {
                    var subtable = subtables[i];
                    var glyphs = this$1.expandCoverage(subtable.coverage);
                    var alternateSets = subtable.alternateSets;
                    for (var j = 0; j < glyphs.length; j++) {
                      alternates.push({ sub: glyphs[j], by: alternateSets[j] });
                    }
                  }
                }
                return alternates;
              };

              /**
               * List all ligatures (lookup type 4) for a given script, language, and feature.
               * The result is an array of ligature objects like { sub: [ids], by: id }
               * @param {string} feature - 4-letter feature name ('liga', 'rlig', 'dlig'...)
               * @param {string} [script='DFLT']
               * @param {string} [language='dflt']
               * @return {Array} ligatures - The list of ligatures.
               */
              Substitution.prototype.getLigatures = function(feature, script, language) {
                var this$1 = this;

                var ligatures = [];
                var lookupTables = this.getLookupTables(script, language, feature, 4);
                for (var idx = 0; idx < lookupTables.length; idx++) {
                  var subtables = lookupTables[idx].subtables;
                  for (var i = 0; i < subtables.length; i++) {
                    var subtable = subtables[i];
                    var glyphs = this$1.expandCoverage(subtable.coverage);
                    var ligatureSets = subtable.ligatureSets;
                    for (var j = 0; j < glyphs.length; j++) {
                      var startGlyph = glyphs[j];
                      var ligSet = ligatureSets[j];
                      for (var k = 0; k < ligSet.length; k++) {
                        var lig = ligSet[k];
                        ligatures.push({
                          sub: [startGlyph].concat(lig.components),
                          by: lig.ligGlyph
                        });
                      }
                    }
                  }
                }
                return ligatures;
              };

              /**
               * Add or modify a single substitution (lookup type 1)
               * Format 2, more flexible, is always used.
               * @param {string} feature - 4-letter feature name ('liga', 'rlig', 'dlig'...)
               * @param {Object} substitution - { sub: id, delta: number } for format 1 or { sub: id, by: id } for format 2.
               * @param {string} [script='DFLT']
               * @param {string} [language='dflt']
               */
              Substitution.prototype.addSingle = function(
                feature,
                substitution,
                script,
                language
              ) {
                var lookupTable = this.getLookupTables(
                  script,
                  language,
                  feature,
                  1,
                  true
                )[0];
                var subtable = getSubstFormat(lookupTable, 2, {
                  // lookup type 1 subtable, format 2, coverage format 1
                  substFormat: 2,
                  coverage: { format: 1, glyphs: [] },
                  substitute: []
                });
                check.assert(
                  subtable.coverage.format === 1,
                  'Ligature: unable to modify coverage table format ' +
                    subtable.coverage.format
                );
                var coverageGlyph = substitution.sub;
                var pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph);
                if (pos < 0) {
                  pos = -1 - pos;
                  subtable.coverage.glyphs.splice(pos, 0, coverageGlyph);
                  subtable.substitute.splice(pos, 0, 0);
                }
                subtable.substitute[pos] = substitution.by;
              };

              /**
               * Add or modify an alternate substitution (lookup type 1)
               * @param {string} feature - 4-letter feature name ('liga', 'rlig', 'dlig'...)
               * @param {Object} substitution - { sub: id, by: [ids] }
               * @param {string} [script='DFLT']
               * @param {string} [language='dflt']
               */
              Substitution.prototype.addAlternate = function(
                feature,
                substitution,
                script,
                language
              ) {
                var lookupTable = this.getLookupTables(
                  script,
                  language,
                  feature,
                  3,
                  true
                )[0];
                var subtable = getSubstFormat(lookupTable, 1, {
                  // lookup type 3 subtable, format 1, coverage format 1
                  substFormat: 1,
                  coverage: { format: 1, glyphs: [] },
                  alternateSets: []
                });
                check.assert(
                  subtable.coverage.format === 1,
                  'Ligature: unable to modify coverage table format ' +
                    subtable.coverage.format
                );
                var coverageGlyph = substitution.sub;
                var pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph);
                if (pos < 0) {
                  pos = -1 - pos;
                  subtable.coverage.glyphs.splice(pos, 0, coverageGlyph);
                  subtable.alternateSets.splice(pos, 0, 0);
                }
                subtable.alternateSets[pos] = substitution.by;
              };

              /**
               * Add a ligature (lookup type 4)
               * Ligatures with more components must be stored ahead of those with fewer components in order to be found
               * @param {string} feature - 4-letter feature name ('liga', 'rlig', 'dlig'...)
               * @param {Object} ligature - { sub: [ids], by: id }
               * @param {string} [script='DFLT']
               * @param {string} [language='dflt']
               */
              Substitution.prototype.addLigature = function(
                feature,
                ligature,
                script,
                language
              ) {
                var lookupTable = this.getLookupTables(
                  script,
                  language,
                  feature,
                  4,
                  true
                )[0];
                var subtable = lookupTable.subtables[0];
                if (!subtable) {
                  subtable = {
                    // lookup type 4 subtable, format 1, coverage format 1
                    substFormat: 1,
                    coverage: { format: 1, glyphs: [] },
                    ligatureSets: []
                  };
                  lookupTable.subtables[0] = subtable;
                }
                check.assert(
                  subtable.coverage.format === 1,
                  'Ligature: unable to modify coverage table format ' +
                    subtable.coverage.format
                );
                var coverageGlyph = ligature.sub[0];
                var ligComponents = ligature.sub.slice(1);
                var ligatureTable = {
                  ligGlyph: ligature.by,
                  components: ligComponents
                };
                var pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph);
                if (pos >= 0) {
                  // ligatureSet already exists
                  var ligatureSet = subtable.ligatureSets[pos];
                  for (var i = 0; i < ligatureSet.length; i++) {
                    // If ligature already exists, return.
                    if (arraysEqual(ligatureSet[i].components, ligComponents)) {
                      return;
                    }
                  }
                  // ligature does not exist: add it.
                  ligatureSet.push(ligatureTable);
                } else {
                  // Create a new ligatureSet and add coverage for the first glyph.
                  pos = -1 - pos;
                  subtable.coverage.glyphs.splice(pos, 0, coverageGlyph);
                  subtable.ligatureSets.splice(pos, 0, [ligatureTable]);
                }
              };

              /**
               * List all feature data for a given script and language.
               * @param {string} feature - 4-letter feature name
               * @param {string} [script='DFLT']
               * @param {string} [language='dflt']
               * @return {Array} substitutions - The list of substitutions.
               */
              Substitution.prototype.getFeature = function(feature, script, language) {
                if (/ss\d\d/.test(feature)) {
                  // ss01 - ss20
                  return this.getSingle(feature, script, language);
                }
                switch (feature) {
                  case 'aalt':
                  case 'salt':
                    return this.getSingle(feature, script, language).concat(
                      this.getAlternates(feature, script, language)
                    );
                  case 'dlig':
                  case 'liga':
                  case 'rlig':
                    return this.getLigatures(feature, script, language);
                }
                return undefined;
              };

              /**
               * Add a substitution to a feature for a given script and language.
               * @param {string} feature - 4-letter feature name
               * @param {Object} sub - the substitution to add (an object like { sub: id or [ids], by: id or [ids] })
               * @param {string} [script='DFLT']
               * @param {string} [language='dflt']
               */
              Substitution.prototype.add = function(feature, sub, script, language) {
                if (/ss\d\d/.test(feature)) {
                  // ss01 - ss20
                  return this.addSingle(feature, sub, script, language);
                }
                switch (feature) {
                  case 'aalt':
                  case 'salt':
                    if (typeof sub.by === 'number') {
                      return this.addSingle(feature, sub, script, language);
                    }
                    return this.addAlternate(feature, sub, script, language);
                  case 'dlig':
                  case 'liga':
                  case 'rlig':
                    return this.addLigature(feature, sub, script, language);
                }
                return undefined;
              };

              function isBrowser() {
                return typeof window !== 'undefined';
              }

              function nodeBufferToArrayBuffer(buffer) {
                var ab = new ArrayBuffer(buffer.length);
                var view = new Uint8Array(ab);
                for (var i = 0; i < buffer.length; ++i) {
                  view[i] = buffer[i];
                }

                return ab;
              }

              function arrayBufferToNodeBuffer(ab) {
                var buffer = new Buffer(ab.byteLength);
                var view = new Uint8Array(ab);
                for (var i = 0; i < buffer.length; ++i) {
                  buffer[i] = view[i];
                }

                return buffer;
              }

              function checkArgument(expression, message) {
                if (!expression) {
                  throw message;
                }
              }

              // The `glyf` table describes the glyphs in TrueType outline format.

              // Parse the coordinate data for a glyph.
              function parseGlyphCoordinate(
                p,
                flag,
                previousValue,
                shortVectorBitMask,
                sameBitMask
              ) {
                var v;
                if ((flag & shortVectorBitMask) > 0) {
                  // The coordinate is 1 byte long.
                  v = p.parseByte();
                  // The `same` bit is re-used for short values to signify the sign of the value.
                  if ((flag & sameBitMask) === 0) {
                    v = -v;
                  }

                  v = previousValue + v;
                } else {
                  //  The coordinate is 2 bytes long.
                  // If the `same` bit is set, the coordinate is the same as the previous coordinate.
                  if ((flag & sameBitMask) > 0) {
                    v = previousValue;
                  } else {
                    // Parse the coordinate as a signed 16-bit delta value.
                    v = previousValue + p.parseShort();
                  }
                }

                return v;
              }

              // Parse a TrueType glyph.
              function parseGlyph(glyph, data, start) {
                var p = new parse.Parser(data, start);
                glyph.numberOfContours = p.parseShort();
                glyph._xMin = p.parseShort();
                glyph._yMin = p.parseShort();
                glyph._xMax = p.parseShort();
                glyph._yMax = p.parseShort();
                var flags;
                var flag;

                if (glyph.numberOfContours > 0) {
                  // This glyph is not a composite.
                  var endPointIndices = (glyph.endPointIndices = []);
                  for (var i = 0; i < glyph.numberOfContours; i += 1) {
                    endPointIndices.push(p.parseUShort());
                  }

                  glyph.instructionLength = p.parseUShort();
                  glyph.instructions = [];
                  for (var i$1 = 0; i$1 < glyph.instructionLength; i$1 += 1) {
                    glyph.instructions.push(p.parseByte());
                  }

                  var numberOfCoordinates = endPointIndices[endPointIndices.length - 1] + 1;
                  flags = [];
                  for (var i$2 = 0; i$2 < numberOfCoordinates; i$2 += 1) {
                    flag = p.parseByte();
                    flags.push(flag);
                    // If bit 3 is set, we repeat this flag n times, where n is the next byte.
                    if ((flag & 8) > 0) {
                      var repeatCount = p.parseByte();
                      for (var j = 0; j < repeatCount; j += 1) {
                        flags.push(flag);
                        i$2 += 1;
                      }
                    }
                  }

                  check.argument(flags.length === numberOfCoordinates, 'Bad flags.');

                  if (endPointIndices.length > 0) {
                    var points = [];
                    var point;
                    // X/Y coordinates are relative to the previous point, except for the first point which is relative to 0,0.
                    if (numberOfCoordinates > 0) {
                      for (var i$3 = 0; i$3 < numberOfCoordinates; i$3 += 1) {
                        flag = flags[i$3];
                        point = {};
                        point.onCurve = !!(flag & 1);
                        point.lastPointOfContour = endPointIndices.indexOf(i$3) >= 0;
                        points.push(point);
                      }

                      var px = 0;
                      for (var i$4 = 0; i$4 < numberOfCoordinates; i$4 += 1) {
                        flag = flags[i$4];
                        point = points[i$4];
                        point.x = parseGlyphCoordinate(p, flag, px, 2, 16);
                        px = point.x;
                      }

                      var py = 0;
                      for (var i$5 = 0; i$5 < numberOfCoordinates; i$5 += 1) {
                        flag = flags[i$5];
                        point = points[i$5];
                        point.y = parseGlyphCoordinate(p, flag, py, 4, 32);
                        py = point.y;
                      }
                    }

                    glyph.points = points;
                  } else {
                    glyph.points = [];
                  }
                } else if (glyph.numberOfContours === 0) {
                  glyph.points = [];
                } else {
                  glyph.isComposite = true;
                  glyph.points = [];
                  glyph.components = [];
                  var moreComponents = true;
                  while (moreComponents) {
                    flags = p.parseUShort();
                    var component = {
                      glyphIndex: p.parseUShort(),
                      xScale: 1,
                      scale01: 0,
                      scale10: 0,
                      yScale: 1,
                      dx: 0,
                      dy: 0
                    };
                    if ((flags & 1) > 0) {
                      // The arguments are words
                      if ((flags & 2) > 0) {
                        // values are offset
                        component.dx = p.parseShort();
                        component.dy = p.parseShort();
                      } else {
                        // values are matched points
                        component.matchedPoints = [p.parseUShort(), p.parseUShort()];
                      }
                    } else {
                      // The arguments are bytes
                      if ((flags & 2) > 0) {
                        // values are offset
                        component.dx = p.parseChar();
                        component.dy = p.parseChar();
                      } else {
                        // values are matched points
                        component.matchedPoints = [p.parseByte(), p.parseByte()];
                      }
                    }

                    if ((flags & 8) > 0) {
                      // We have a scale
                      component.xScale = component.yScale = p.parseF2Dot14();
                    } else if ((flags & 64) > 0) {
                      // We have an X / Y scale
                      component.xScale = p.parseF2Dot14();
                      component.yScale = p.parseF2Dot14();
                    } else if ((flags & 128) > 0) {
                      // We have a 2x2 transformation
                      component.xScale = p.parseF2Dot14();
                      component.scale01 = p.parseF2Dot14();
                      component.scale10 = p.parseF2Dot14();
                      component.yScale = p.parseF2Dot14();
                    }

                    glyph.components.push(component);
                    moreComponents = !!(flags & 32);
                  }
                  if (flags & 0x100) {
                    // We have instructions
                    glyph.instructionLength = p.parseUShort();
                    glyph.instructions = [];
                    for (var i$6 = 0; i$6 < glyph.instructionLength; i$6 += 1) {
                      glyph.instructions.push(p.parseByte());
                    }
                  }
                }
              }

              // Transform an array of points and return a new array.
              function transformPoints(points, transform) {
                var newPoints = [];
                for (var i = 0; i < points.length; i += 1) {
                  var pt = points[i];
                  var newPt = {
                    x: transform.xScale * pt.x + transform.scale01 * pt.y + transform.dx,
                    y: transform.scale10 * pt.x + transform.yScale * pt.y + transform.dy,
                    onCurve: pt.onCurve,
                    lastPointOfContour: pt.lastPointOfContour
                  };
                  newPoints.push(newPt);
                }

                return newPoints;
              }

              function getContours(points) {
                var contours = [];
                var currentContour = [];
                for (var i = 0; i < points.length; i += 1) {
                  var pt = points[i];
                  currentContour.push(pt);
                  if (pt.lastPointOfContour) {
                    contours.push(currentContour);
                    currentContour = [];
                  }
                }

                check.argument(
                  currentContour.length === 0,
                  'There are still points left in the current contour.'
                );
                return contours;
              }

              // Convert the TrueType glyph outline to a Path.
              function getPath(points) {
                var p = new Path();
                if (!points) {
                  return p;
                }

                var contours = getContours(points);

                for (var contourIndex = 0; contourIndex < contours.length; ++contourIndex) {
                  var contour = contours[contourIndex];

                  var prev = null;
                  var curr = contour[contour.length - 1];
                  var next = contour[0];

                  if (curr.onCurve) {
                    p.moveTo(curr.x, curr.y);
                  } else {
                    if (next.onCurve) {
                      p.moveTo(next.x, next.y);
                    } else {
                      // If both first and last points are off-curve, start at their middle.
                      var start = {
                        x: (curr.x + next.x) * 0.5,
                        y: (curr.y + next.y) * 0.5
                      };
                      p.moveTo(start.x, start.y);
                    }
                  }

                  for (var i = 0; i < contour.length; ++i) {
                    prev = curr;
                    curr = next;
                    next = contour[(i + 1) % contour.length];

                    if (curr.onCurve) {
                      // This is a straight line.
                      p.lineTo(curr.x, curr.y);
                    } else {
                      var prev2 = prev;
                      var next2 = next;

                      if (!prev.onCurve) {
                        prev2 = { x: (curr.x + prev.x) * 0.5, y: (curr.y + prev.y) * 0.5 };
                      }

                      if (!next.onCurve) {
                        next2 = { x: (curr.x + next.x) * 0.5, y: (curr.y + next.y) * 0.5 };
                      }

                      p.quadraticCurveTo(curr.x, curr.y, next2.x, next2.y);
                    }
                  }

                  p.closePath();
                }
                return p;
              }

              function buildPath(glyphs, glyph) {
                if (glyph.isComposite) {
                  for (var j = 0; j < glyph.components.length; j += 1) {
                    var component = glyph.components[j];
                    var componentGlyph = glyphs.get(component.glyphIndex);
                    // Force the ttfGlyphLoader to parse the glyph.
                    componentGlyph.getPath();
                    if (componentGlyph.points) {
                      var transformedPoints = void 0;
                      if (component.matchedPoints === undefined) {
                        // component positioned by offset
                        transformedPoints = transformPoints(
                          componentGlyph.points,
                          component
                        );
                      } else {
                        // component positioned by matched points
                        if (
                          component.matchedPoints[0] > glyph.points.length - 1 ||
                          component.matchedPoints[1] > componentGlyph.points.length - 1
                        ) {
                          throw Error('Matched points out of range in ' + glyph.name);
                        }
                        var firstPt = glyph.points[component.matchedPoints[0]];
                        var secondPt = componentGlyph.points[component.matchedPoints[1]];
                        var transform = {
                          xScale: component.xScale,
                          scale01: component.scale01,
                          scale10: component.scale10,
                          yScale: component.yScale,
                          dx: 0,
                          dy: 0
                        };
                        secondPt = transformPoints([secondPt], transform)[0];
                        transform.dx = firstPt.x - secondPt.x;
                        transform.dy = firstPt.y - secondPt.y;
                        transformedPoints = transformPoints(
                          componentGlyph.points,
                          transform
                        );
                      }
                      glyph.points = glyph.points.concat(transformedPoints);
                    }
                  }
                }

                return getPath(glyph.points);
              }

              // Parse all the glyphs according to the offsets from the `loca` table.
              function parseGlyfTable(data, start, loca, font) {
                var glyphs = new glyphset.GlyphSet(font);

                // The last element of the loca table is invalid.
                for (var i = 0; i < loca.length - 1; i += 1) {
                  var offset = loca[i];
                  var nextOffset = loca[i + 1];
                  if (offset !== nextOffset) {
                    glyphs.push(
                      i,
                      glyphset.ttfGlyphLoader(
                        font,
                        i,
                        parseGlyph,
                        data,
                        start + offset,
                        buildPath
                      )
                    );
                  } else {
                    glyphs.push(i, glyphset.glyphLoader(font, i));
                  }
                }

                return glyphs;
              }

              var glyf = { getPath: getPath, parse: parseGlyfTable };

              /* A TrueType font hinting interpreter.
	*
	* (c) 2017 Axel Kittenberger
	*
	* This interpreter has been implemented according to this documentation:
	* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM05/Chap5.html
	*
	* According to the documentation F24DOT6 values are used for pixels.
	* That means calculation is 1/64 pixel accurate and uses integer operations.
	* However, Javascript has floating point operations by default and only
	* those are available. One could make a case to simulate the 1/64 accuracy
	* exactly by truncating after every division operation
	* (for example with << 0) to get pixel exactly results as other TrueType
	* implementations. It may make sense since some fonts are pixel optimized
	* by hand using DELTAP instructions. The current implementation doesn't
	* and rather uses full floating point precision.
	*
	* xScale, yScale and rotation is currently ignored.
	*
	* A few non-trivial instructions are missing as I didn't encounter yet
	* a font that used them to test a possible implementation.
	*
	* Some fonts seem to use undocumented features regarding the twilight zone.
	* Only some of them are implemented as they were encountered.
	*
	* The exports.DEBUG statements are removed on the minified distribution file.
	*/

              var instructionTable;
              var exec;
              var execGlyph;
              var execComponent;

              /*
	* Creates a hinting object.
	*
	* There ought to be exactly one
	* for each truetype font that is used for hinting.
	*/
              function Hinting(font) {
                // the font this hinting object is for
                this.font = font;

                this.getCommands = function(hPoints) {
                  return glyf.getPath(hPoints).commands;
                };

                // cached states
                this._fpgmState = this._prepState = undefined;

                // errorState
                // 0 ... all okay
                // 1 ... had an error in a glyf,
                //       continue working but stop spamming
                //       the console
                // 2 ... error at prep, stop hinting at this ppem
                // 3 ... error at fpeg, stop hinting for this font at all
                this._errorState = 0;
              }

              /*
	* Not rounding.
	*/
              function roundOff(v) {
                return v;
              }

              /*
	* Rounding to grid.
	*/
              function roundToGrid(v) {
                //Rounding in TT is supposed to "symmetrical around zero"
                return Math.sign(v) * Math.round(Math.abs(v));
              }

              /*
	* Rounding to double grid.
	*/
              function roundToDoubleGrid(v) {
                return Math.sign(v) * Math.round(Math.abs(v * 2)) / 2;
              }

              /*
	* Rounding to half grid.
	*/
              function roundToHalfGrid(v) {
                return Math.sign(v) * (Math.round(Math.abs(v) + 0.5) - 0.5);
              }

              /*
	* Rounding to up to grid.
	*/
              function roundUpToGrid(v) {
                return Math.sign(v) * Math.ceil(Math.abs(v));
              }

              /*
	* Rounding to down to grid.
	*/
              function roundDownToGrid(v) {
                return Math.sign(v) * Math.floor(Math.abs(v));
              }

              /*
	* Super rounding.
	*/
              var roundSuper = function(v) {
                var period = this.srPeriod;
                var phase = this.srPhase;
                var threshold = this.srThreshold;
                var sign = 1;

                if (v < 0) {
                  v = -v;
                  sign = -1;
                }

                v += threshold - phase;

                v = Math.trunc(v / period) * period;

                v += phase;

                // according to http://xgridfit.sourceforge.net/round.html
                if (v < 0) {
                  return phase * sign;
                }

                return v * sign;
              };

              /*
	* Unit vector of x-axis.
	*/
              var xUnitVector = {
                x: 1,

                y: 0,

                axis: 'x',

                // Gets the projected distance between two points.
                // o1/o2 ... if true, respective original position is used.
                distance: function(p1, p2, o1, o2) {
                  return (o1 ? p1.xo : p1.x) - (o2 ? p2.xo : p2.x);
                },

                // Moves point p so the moved position has the same relative
                // position to the moved positions of rp1 and rp2 than the
                // original positions had.
                //
                // See APPENDIX on INTERPOLATE at the bottom of this file.
                interpolate: function(p, rp1, rp2, pv) {
                  var do1;
                  var do2;
                  var doa1;
                  var doa2;
                  var dm1;
                  var dm2;
                  var dt;

                  if (!pv || pv === this) {
                    do1 = p.xo - rp1.xo;
                    do2 = p.xo - rp2.xo;
                    dm1 = rp1.x - rp1.xo;
                    dm2 = rp2.x - rp2.xo;
                    doa1 = Math.abs(do1);
                    doa2 = Math.abs(do2);
                    dt = doa1 + doa2;

                    if (dt === 0) {
                      p.x = p.xo + (dm1 + dm2) / 2;
                      return;
                    }

                    p.x = p.xo + (dm1 * doa2 + dm2 * doa1) / dt;
                    return;
                  }

                  do1 = pv.distance(p, rp1, true, true);
                  do2 = pv.distance(p, rp2, true, true);
                  dm1 = pv.distance(rp1, rp1, false, true);
                  dm2 = pv.distance(rp2, rp2, false, true);
                  doa1 = Math.abs(do1);
                  doa2 = Math.abs(do2);
                  dt = doa1 + doa2;

                  if (dt === 0) {
                    xUnitVector.setRelative(p, p, (dm1 + dm2) / 2, pv, true);
                    return;
                  }

                  xUnitVector.setRelative(p, p, (dm1 * doa2 + dm2 * doa1) / dt, pv, true);
                },

                // Slope of line normal to this
                normalSlope: Number.NEGATIVE_INFINITY,

                // Sets the point 'p' relative to point 'rp'
                // by the distance 'd'.
                //
                // See APPENDIX on SETRELATIVE at the bottom of this file.
                //
                // p   ... point to set
                // rp  ... reference point
                // d   ... distance on projection vector
                // pv  ... projection vector (undefined = this)
                // org ... if true, uses the original position of rp as reference.
                setRelative: function(p, rp, d, pv, org) {
                  if (!pv || pv === this) {
                    p.x = (org ? rp.xo : rp.x) + d;
                    return;
                  }

                  var rpx = org ? rp.xo : rp.x;
                  var rpy = org ? rp.yo : rp.y;
                  var rpdx = rpx + d * pv.x;
                  var rpdy = rpy + d * pv.y;

                  p.x = rpdx + (p.y - rpdy) / pv.normalSlope;
                },

                // Slope of vector line.
                slope: 0,

                // Touches the point p.
                touch: function(p) {
                  p.xTouched = true;
                },

                // Tests if a point p is touched.
                touched: function(p) {
                  return p.xTouched;
                },

                // Untouches the point p.
                untouch: function(p) {
                  p.xTouched = false;
                }
              };

              /*
	* Unit vector of y-axis.
	*/
              var yUnitVector = {
                x: 0,

                y: 1,

                axis: 'y',

                // Gets the projected distance between two points.
                // o1/o2 ... if true, respective original position is used.
                distance: function(p1, p2, o1, o2) {
                  return (o1 ? p1.yo : p1.y) - (o2 ? p2.yo : p2.y);
                },

                // Moves point p so the moved position has the same relative
                // position to the moved positions of rp1 and rp2 than the
                // original positions had.
                //
                // See APPENDIX on INTERPOLATE at the bottom of this file.
                interpolate: function(p, rp1, rp2, pv) {
                  var do1;
                  var do2;
                  var doa1;
                  var doa2;
                  var dm1;
                  var dm2;
                  var dt;

                  if (!pv || pv === this) {
                    do1 = p.yo - rp1.yo;
                    do2 = p.yo - rp2.yo;
                    dm1 = rp1.y - rp1.yo;
                    dm2 = rp2.y - rp2.yo;
                    doa1 = Math.abs(do1);
                    doa2 = Math.abs(do2);
                    dt = doa1 + doa2;

                    if (dt === 0) {
                      p.y = p.yo + (dm1 + dm2) / 2;
                      return;
                    }

                    p.y = p.yo + (dm1 * doa2 + dm2 * doa1) / dt;
                    return;
                  }

                  do1 = pv.distance(p, rp1, true, true);
                  do2 = pv.distance(p, rp2, true, true);
                  dm1 = pv.distance(rp1, rp1, false, true);
                  dm2 = pv.distance(rp2, rp2, false, true);
                  doa1 = Math.abs(do1);
                  doa2 = Math.abs(do2);
                  dt = doa1 + doa2;

                  if (dt === 0) {
                    yUnitVector.setRelative(p, p, (dm1 + dm2) / 2, pv, true);
                    return;
                  }

                  yUnitVector.setRelative(p, p, (dm1 * doa2 + dm2 * doa1) / dt, pv, true);
                },

                // Slope of line normal to this.
                normalSlope: 0,

                // Sets the point 'p' relative to point 'rp'
                // by the distance 'd'
                //
                // See APPENDIX on SETRELATIVE at the bottom of this file.
                //
                // p   ... point to set
                // rp  ... reference point
                // d   ... distance on projection vector
                // pv  ... projection vector (undefined = this)
                // org ... if true, uses the original position of rp as reference.
                setRelative: function(p, rp, d, pv, org) {
                  if (!pv || pv === this) {
                    p.y = (org ? rp.yo : rp.y) + d;
                    return;
                  }

                  var rpx = org ? rp.xo : rp.x;
                  var rpy = org ? rp.yo : rp.y;
                  var rpdx = rpx + d * pv.x;
                  var rpdy = rpy + d * pv.y;

                  p.y = rpdy + pv.normalSlope * (p.x - rpdx);
                },

                // Slope of vector line.
                slope: Number.POSITIVE_INFINITY,

                // Touches the point p.
                touch: function(p) {
                  p.yTouched = true;
                },

                // Tests if a point p is touched.
                touched: function(p) {
                  return p.yTouched;
                },

                // Untouches the point p.
                untouch: function(p) {
                  p.yTouched = false;
                }
              };

              Object.freeze(xUnitVector);
              Object.freeze(yUnitVector);

              /*
	* Creates a unit vector that is not x- or y-axis.
	*/
              function UnitVector(x, y) {
                this.x = x;
                this.y = y;
                this.axis = undefined;
                this.slope = y / x;
                this.normalSlope = -x / y;
                Object.freeze(this);
              }

              /*
	* Gets the projected distance between two points.
	* o1/o2 ... if true, respective original position is used.
	*/
              UnitVector.prototype.distance = function(p1, p2, o1, o2) {
                return (
                  this.x * xUnitVector.distance(p1, p2, o1, o2) +
                  this.y * yUnitVector.distance(p1, p2, o1, o2)
                );
              };

              /*
	* Moves point p so the moved position has the same relative
	* position to the moved positions of rp1 and rp2 than the
	* original positions had.
	*
	* See APPENDIX on INTERPOLATE at the bottom of this file.
	*/
              UnitVector.prototype.interpolate = function(p, rp1, rp2, pv) {
                var dm1;
                var dm2;
                var do1;
                var do2;
                var doa1;
                var doa2;
                var dt;

                do1 = pv.distance(p, rp1, true, true);
                do2 = pv.distance(p, rp2, true, true);
                dm1 = pv.distance(rp1, rp1, false, true);
                dm2 = pv.distance(rp2, rp2, false, true);
                doa1 = Math.abs(do1);
                doa2 = Math.abs(do2);
                dt = doa1 + doa2;

                if (dt === 0) {
                  this.setRelative(p, p, (dm1 + dm2) / 2, pv, true);
                  return;
                }

                this.setRelative(p, p, (dm1 * doa2 + dm2 * doa1) / dt, pv, true);
              };

              /*
	* Sets the point 'p' relative to point 'rp'
	* by the distance 'd'
	*
	* See APPENDIX on SETRELATIVE at the bottom of this file.
	*
	* p   ...  point to set
	* rp  ... reference point
	* d   ... distance on projection vector
	* pv  ... projection vector (undefined = this)
	* org ... if true, uses the original position of rp as reference.
	*/
              UnitVector.prototype.setRelative = function(p, rp, d, pv, org) {
                pv = pv || this;

                var rpx = org ? rp.xo : rp.x;
                var rpy = org ? rp.yo : rp.y;
                var rpdx = rpx + d * pv.x;
                var rpdy = rpy + d * pv.y;

                var pvns = pv.normalSlope;
                var fvs = this.slope;

                var px = p.x;
                var py = p.y;

                p.x = (fvs * px - pvns * rpdx + rpdy - py) / (fvs - pvns);
                p.y = fvs * (p.x - px) + py;
              };

              /*
	* Touches the point p.
	*/
              UnitVector.prototype.touch = function(p) {
                p.xTouched = true;
                p.yTouched = true;
              };

              /*
	* Returns a unit vector with x/y coordinates.
	*/
              function getUnitVector(x, y) {
                var d = Math.sqrt(x * x + y * y);

                x /= d;
                y /= d;

                if (x === 1 && y === 0) {
                  return xUnitVector;
                } else if (x === 0 && y === 1) {
                  return yUnitVector;
                } else {
                  return new UnitVector(x, y);
                }
              }

              /*
	* Creates a point in the hinting engine.
	*/
              function HPoint(x, y, lastPointOfContour, onCurve) {
                this.x = this.xo = Math.round(x * 64) / 64; // hinted x value and original x-value
                this.y = this.yo = Math.round(y * 64) / 64; // hinted y value and original y-value

                this.lastPointOfContour = lastPointOfContour;
                this.onCurve = onCurve;
                this.prevPointOnContour = undefined;
                this.nextPointOnContour = undefined;
                this.xTouched = false;
                this.yTouched = false;

                Object.preventExtensions(this);
              }

              /*
	* Returns the next touched point on the contour.
	*
	* v  ... unit vector to test touch axis.
	*/
              HPoint.prototype.nextTouched = function(v) {
                var p = this.nextPointOnContour;

                while (!v.touched(p) && p !== this) {
                  p = p.nextPointOnContour;
                }

                return p;
              };

              /*
	* Returns the previous touched point on the contour
	*
	* v  ... unit vector to test touch axis.
	*/
              HPoint.prototype.prevTouched = function(v) {
                var p = this.prevPointOnContour;

                while (!v.touched(p) && p !== this) {
                  p = p.prevPointOnContour;
                }

                return p;
              };

              /*
	* The zero point.
	*/
              var HPZero = Object.freeze(new HPoint(0, 0));

              /*
	* The default state of the interpreter.
	*
	* Note: Freezing the defaultState and then deriving from it
	* makes the V8 Javascript engine going awkward,
	* so this is avoided, albeit the defaultState shouldn't
	* ever change.
	*/
              var defaultState = {
                cvCutIn: 17 / 16, // control value cut in
                deltaBase: 9,
                deltaShift: 0.125,
                loop: 1, // loops some instructions
                minDis: 1, // minimum distance
                autoFlip: true
              };

              /*
	* The current state of the interpreter.
	*
	* env  ... 'fpgm' or 'prep' or 'glyf'
	* prog ... the program
	*/
              function State(env, prog) {
                this.env = env;
                this.stack = [];
                this.prog = prog;

                switch (env) {
                  case 'glyf':
                    this.zp0 = this.zp1 = this.zp2 = 1;
                    this.rp0 = this.rp1 = this.rp2 = 0;
                  /* fall through */
                  case 'prep':
                    this.fv = this.pv = this.dpv = xUnitVector;
                    this.round = roundToGrid;
                }
              }

              /*
	* Executes a glyph program.
	*
	* This does the hinting for each glyph.
	*
	* Returns an array of moved points.
	*
	* glyph: the glyph to hint
	* ppem: the size the glyph is rendered for
	*/
              Hinting.prototype.exec = function(glyph, ppem) {
                if (typeof ppem !== 'number') {
                  throw new Error('Point size is not a number!');
                }

                // Received a fatal error, don't do any hinting anymore.
                if (this._errorState > 2) {
                  return;
                }

                var font = this.font;
                var prepState = this._prepState;

                if (!prepState || prepState.ppem !== ppem) {
                  var fpgmState = this._fpgmState;

                  if (!fpgmState) {
                    // Executes the fpgm state.
                    // This is used by fonts to define functions.
                    State.prototype = defaultState;

                    fpgmState = this._fpgmState = new State('fpgm', font.tables.fpgm);

                    fpgmState.funcs = [];
                    fpgmState.font = font;

                    if (exports.DEBUG) {
                      console.log('---EXEC FPGM---');
                      fpgmState.step = -1;
                    }

                    try {
                      exec(fpgmState);
                    } catch (e) {
                      console.log('Hinting error in FPGM:' + e);
                      this._errorState = 3;
                      return;
                    }
                  }

                  // Executes the prep program for this ppem setting.
                  // This is used by fonts to set cvt values
                  // depending on to be rendered font size.

                  State.prototype = fpgmState;
                  prepState = this._prepState = new State('prep', font.tables.prep);

                  prepState.ppem = ppem;

                  // Creates a copy of the cvt table
                  // and scales it to the current ppem setting.
                  var oCvt = font.tables.cvt;
                  if (oCvt) {
                    var cvt = (prepState.cvt = new Array(oCvt.length));
                    var scale = ppem / font.unitsPerEm;
                    for (var c = 0; c < oCvt.length; c++) {
                      cvt[c] = oCvt[c] * scale;
                    }
                  } else {
                    prepState.cvt = [];
                  }

                  if (exports.DEBUG) {
                    console.log('---EXEC PREP---');
                    prepState.step = -1;
                  }

                  try {
                    exec(prepState);
                  } catch (e) {
                    if (this._errorState < 2) {
                      console.log('Hinting error in PREP:' + e);
                    }
                    this._errorState = 2;
                  }
                }

                if (this._errorState > 1) {
                  return;
                }

                try {
                  return execGlyph(glyph, prepState);
                } catch (e) {
                  if (this._errorState < 1) {
                    console.log('Hinting error:' + e);
                    console.log('Note: further hinting errors are silenced');
                  }
                  this._errorState = 1;
                  return undefined;
                }
              };

              /*
	* Executes the hinting program for a glyph.
	*/
              execGlyph = function(glyph, prepState) {
                // original point positions
                var xScale = prepState.ppem / prepState.font.unitsPerEm;
                var yScale = xScale;
                var components = glyph.components;
                var contours;
                var gZone;
                var state;

                State.prototype = prepState;
                if (!components) {
                  state = new State('glyf', glyph.instructions);
                  if (exports.DEBUG) {
                    console.log('---EXEC GLYPH---');
                    state.step = -1;
                  }
                  execComponent(glyph, state, xScale, yScale);
                  gZone = state.gZone;
                } else {
                  var font = prepState.font;
                  gZone = [];
                  contours = [];
                  for (var i = 0; i < components.length; i++) {
                    var c = components[i];
                    var cg = font.glyphs.get(c.glyphIndex);

                    state = new State('glyf', cg.instructions);

                    if (exports.DEBUG) {
                      console.log('---EXEC COMP ' + i + '---');
                      state.step = -1;
                    }

                    execComponent(cg, state, xScale, yScale);
                    // appends the computed points to the result array
                    // post processes the component points
                    var dx = Math.round(c.dx * xScale);
                    var dy = Math.round(c.dy * yScale);
                    var gz = state.gZone;
                    var cc = state.contours;
                    for (var pi = 0; pi < gz.length; pi++) {
                      var p = gz[pi];
                      p.xTouched = p.yTouched = false;
                      p.xo = p.x = p.x + dx;
                      p.yo = p.y = p.y + dy;
                    }

                    var gLen = gZone.length;
                    gZone.push.apply(gZone, gz);
                    for (var j = 0; j < cc.length; j++) {
                      contours.push(cc[j] + gLen);
                    }
                  }

                  if (glyph.instructions && !state.inhibitGridFit) {
                    // the composite has instructions on its own
                    state = new State('glyf', glyph.instructions);

                    state.gZone = state.z0 = state.z1 = state.z2 = gZone;

                    state.contours = contours;

                    // note: HPZero cannot be used here, since
                    //       the point might be modified
                    gZone.push(
                      new HPoint(0, 0),
                      new HPoint(Math.round(glyph.advanceWidth * xScale), 0)
                    );

                    if (exports.DEBUG) {
                      console.log('---EXEC COMPOSITE---');
                      state.step = -1;
                    }

                    exec(state);

                    gZone.length -= 2;
                  }
                }

                return gZone;
              };

              /*
	* Executes the hinting program for a component of a multi-component glyph
	* or of the glyph itself for a non-component glyph.
	*/
              execComponent = function(glyph, state, xScale, yScale) {
                var points = glyph.points || [];
                var pLen = points.length;
                var gZone = (state.gZone = state.z0 = state.z1 = state.z2 = []);
                var contours = (state.contours = []);

                // Scales the original points and
                // makes copies for the hinted points.
                var cp; // current point
                for (var i = 0; i < pLen; i++) {
                  cp = points[i];

                  gZone[i] = new HPoint(
                    cp.x * xScale,
                    cp.y * yScale,
                    cp.lastPointOfContour,
                    cp.onCurve
                  );
                }

                // Chain links the contours.
                var sp; // start point
                var np; // next point

                for (var i$1 = 0; i$1 < pLen; i$1++) {
                  cp = gZone[i$1];

                  if (!sp) {
                    sp = cp;
                    contours.push(i$1);
                  }

                  if (cp.lastPointOfContour) {
                    cp.nextPointOnContour = sp;
                    sp.prevPointOnContour = cp;
                    sp = undefined;
                  } else {
                    np = gZone[i$1 + 1];
                    cp.nextPointOnContour = np;
                    np.prevPointOnContour = cp;
                  }
                }

                if (state.inhibitGridFit) {
                  return;
                }

                if (exports.DEBUG) {
                  console.log('PROCESSING GLYPH', state.stack);
                  for (var i$2 = 0; i$2 < pLen; i$2++) {
                    console.log(i$2, gZone[i$2].x, gZone[i$2].y);
                  }
                }

                gZone.push(
                  new HPoint(0, 0),
                  new HPoint(Math.round(glyph.advanceWidth * xScale), 0)
                );

                exec(state);

                // Removes the extra points.
                gZone.length -= 2;

                if (exports.DEBUG) {
                  console.log('FINISHED GLYPH', state.stack);
                  for (var i$3 = 0; i$3 < pLen; i$3++) {
                    console.log(i$3, gZone[i$3].x, gZone[i$3].y);
                  }
                }
              };

              /*
	* Executes the program loaded in state.
	*/
              exec = function(state) {
                var prog = state.prog;

                if (!prog) {
                  return;
                }

                var pLen = prog.length;
                var ins;

                for (state.ip = 0; state.ip < pLen; state.ip++) {
                  if (exports.DEBUG) {
                    state.step++;
                  }
                  ins = instructionTable[prog[state.ip]];

                  if (!ins) {
                    throw new Error(
                      'unknown instruction: 0x' + Number(prog[state.ip]).toString(16)
                    );
                  }

                  ins(state);

                  // very extensive debugging for each step
                  /*
	        if (exports.DEBUG) {
	            var da;
	            if (state.gZone) {
	                da = [];
	                for (let i = 0; i < state.gZone.length; i++)
	                {
	                    da.push(i + ' ' +
	                        state.gZone[i].x * 64 + ' ' +
	                        state.gZone[i].y * 64 + ' ' +
	                        (state.gZone[i].xTouched ? 'x' : '') +
	                        (state.gZone[i].yTouched ? 'y' : '')
	                    );
	                }
	                console.log('GZ', da);
	            }

	            if (state.tZone) {
	                da = [];
	                for (let i = 0; i < state.tZone.length; i++) {
	                    da.push(i + ' ' +
	                        state.tZone[i].x * 64 + ' ' +
	                        state.tZone[i].y * 64 + ' ' +
	                        (state.tZone[i].xTouched ? 'x' : '') +
	                        (state.tZone[i].yTouched ? 'y' : '')
	                    );
	                }
	                console.log('TZ', da);
	            }

	            if (state.stack.length > 10) {
	                console.log(
	                    state.stack.length,
	                    '...', state.stack.slice(state.stack.length - 10)
	                );
	            } else {
	                console.log(state.stack.length, state.stack);
	            }
	        }
	        */
                }
              };

              /*
	* Initializes the twilight zone.
	*
	* This is only done if a SZPx instruction
	* refers to the twilight zone.
	*/
              function initTZone(state) {
                var tZone = (state.tZone = new Array(state.gZone.length));

                // no idea if this is actually correct...
                for (var i = 0; i < tZone.length; i++) {
                  tZone[i] = new HPoint(0, 0);
                }
              }

              /*
	* Skips the instruction pointer ahead over an IF/ELSE block.
	* handleElse .. if true breaks on matching ELSE
	*/
              function skip(state, handleElse) {
                var prog = state.prog;
                var ip = state.ip;
                var nesting = 1;
                var ins;

                do {
                  ins = prog[++ip];
                  if (ins === 0x58) {
                    // IF
                    nesting++;
                  } else if (ins === 0x59) {
                    // EIF
                    nesting--;
                  } else if (ins === 0x40) {
                    // NPUSHB
                    ip += prog[ip + 1] + 1;
                  } else if (ins === 0x41) {
                    // NPUSHW
                    ip += 2 * prog[ip + 1] + 1;
                  } else if (ins >= 0xb0 && ins <= 0xb7) {
                    // PUSHB
                    ip += ins - 0xb0 + 1;
                  } else if (ins >= 0xb8 && ins <= 0xbf) {
                    // PUSHW
                    ip += (ins - 0xb8 + 1) * 2;
                  } else if (handleElse && nesting === 1 && ins === 0x1b) {
                    // ELSE
                    break;
                  }
                } while (nesting > 0);

                state.ip = ip;
              }

              /*----------------------------------------------------------*
	*          And then a lot of instructions...                *
	*----------------------------------------------------------*/

              // SVTCA[a] Set freedom and projection Vectors To Coordinate Axis
              // 0x00-0x01
              function SVTCA(v, state) {
                if (exports.DEBUG) {
                  console.log(state.step, 'SVTCA[' + v.axis + ']');
                }

                state.fv = state.pv = state.dpv = v;
              }

              // SPVTCA[a] Set Projection Vector to Coordinate Axis
              // 0x02-0x03
              function SPVTCA(v, state) {
                if (exports.DEBUG) {
                  console.log(state.step, 'SPVTCA[' + v.axis + ']');
                }

                state.pv = state.dpv = v;
              }

              // SFVTCA[a] Set Freedom Vector to Coordinate Axis
              // 0x04-0x05
              function SFVTCA(v, state) {
                if (exports.DEBUG) {
                  console.log(state.step, 'SFVTCA[' + v.axis + ']');
                }

                state.fv = v;
              }

              // SPVTL[a] Set Projection Vector To Line
              // 0x06-0x07
              function SPVTL(a, state) {
                var stack = state.stack;
                var p2i = stack.pop();
                var p1i = stack.pop();
                var p2 = state.z2[p2i];
                var p1 = state.z1[p1i];

                if (exports.DEBUG) {
                  console.log('SPVTL[' + a + ']', p2i, p1i);
                }

                var dx;
                var dy;

                if (!a) {
                  dx = p1.x - p2.x;
                  dy = p1.y - p2.y;
                } else {
                  dx = p2.y - p1.y;
                  dy = p1.x - p2.x;
                }

                state.pv = state.dpv = getUnitVector(dx, dy);
              }

              // SFVTL[a] Set Freedom Vector To Line
              // 0x08-0x09
              function SFVTL(a, state) {
                var stack = state.stack;
                var p2i = stack.pop();
                var p1i = stack.pop();
                var p2 = state.z2[p2i];
                var p1 = state.z1[p1i];

                if (exports.DEBUG) {
                  console.log('SFVTL[' + a + ']', p2i, p1i);
                }

                var dx;
                var dy;

                if (!a) {
                  dx = p1.x - p2.x;
                  dy = p1.y - p2.y;
                } else {
                  dx = p2.y - p1.y;
                  dy = p1.x - p2.x;
                }

                state.fv = getUnitVector(dx, dy);
              }

              // SPVFS[] Set Projection Vector From Stack
              // 0x0A
              function SPVFS(state) {
                var stack = state.stack;
                var y = stack.pop();
                var x = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'SPVFS[]', y, x);
                }

                state.pv = state.dpv = getUnitVector(x, y);
              }

              // SFVFS[] Set Freedom Vector From Stack
              // 0x0B
              function SFVFS(state) {
                var stack = state.stack;
                var y = stack.pop();
                var x = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'SPVFS[]', y, x);
                }

                state.fv = getUnitVector(x, y);
              }

              // GPV[] Get Projection Vector
              // 0x0C
              function GPV(state) {
                var stack = state.stack;
                var pv = state.pv;

                if (exports.DEBUG) {
                  console.log(state.step, 'GPV[]');
                }

                stack.push(pv.x * 0x4000);
                stack.push(pv.y * 0x4000);
              }

              // GFV[] Get Freedom Vector
              // 0x0C
              function GFV(state) {
                var stack = state.stack;
                var fv = state.fv;

                if (exports.DEBUG) {
                  console.log(state.step, 'GFV[]');
                }

                stack.push(fv.x * 0x4000);
                stack.push(fv.y * 0x4000);
              }

              // SFVTPV[] Set Freedom Vector To Projection Vector
              // 0x0E
              function SFVTPV(state) {
                state.fv = state.pv;

                if (exports.DEBUG) {
                  console.log(state.step, 'SFVTPV[]');
                }
              }

              // ISECT[] moves point p to the InterSECTion of two lines
              // 0x0F
              function ISECT(state) {
                var stack = state.stack;
                var pa0i = stack.pop();
                var pa1i = stack.pop();
                var pb0i = stack.pop();
                var pb1i = stack.pop();
                var pi = stack.pop();
                var z0 = state.z0;
                var z1 = state.z1;
                var pa0 = z0[pa0i];
                var pa1 = z0[pa1i];
                var pb0 = z1[pb0i];
                var pb1 = z1[pb1i];
                var p = state.z2[pi];

                if (exports.DEBUG) {
                  console.log('ISECT[], ', pa0i, pa1i, pb0i, pb1i, pi);
                }

                // math from
                // en.wikipedia.org/wiki/Line%E2%80%93line_intersection#Given_two_points_on_each_line

                var x1 = pa0.x;
                var y1 = pa0.y;
                var x2 = pa1.x;
                var y2 = pa1.y;
                var x3 = pb0.x;
                var y3 = pb0.y;
                var x4 = pb1.x;
                var y4 = pb1.y;

                var div = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);
                var f1 = x1 * y2 - y1 * x2;
                var f2 = x3 * y4 - y3 * x4;

                p.x = (f1 * (x3 - x4) - f2 * (x1 - x2)) / div;
                p.y = (f1 * (y3 - y4) - f2 * (y1 - y2)) / div;
              }

              // SRP0[] Set Reference Point 0
              // 0x10
              function SRP0(state) {
                state.rp0 = state.stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'SRP0[]', state.rp0);
                }
              }

              // SRP1[] Set Reference Point 1
              // 0x11
              function SRP1(state) {
                state.rp1 = state.stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'SRP1[]', state.rp1);
                }
              }

              // SRP1[] Set Reference Point 2
              // 0x12
              function SRP2(state) {
                state.rp2 = state.stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'SRP2[]', state.rp2);
                }
              }

              // SZP0[] Set Zone Pointer 0
              // 0x13
              function SZP0(state) {
                var n = state.stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'SZP0[]', n);
                }

                state.zp0 = n;

                switch (n) {
                  case 0:
                    if (!state.tZone) {
                      initTZone(state);
                    }
                    state.z0 = state.tZone;
                    break;
                  case 1:
                    state.z0 = state.gZone;
                    break;
                  default:
                    throw new Error('Invalid zone pointer');
                }
              }

              // SZP1[] Set Zone Pointer 1
              // 0x14
              function SZP1(state) {
                var n = state.stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'SZP1[]', n);
                }

                state.zp1 = n;

                switch (n) {
                  case 0:
                    if (!state.tZone) {
                      initTZone(state);
                    }
                    state.z1 = state.tZone;
                    break;
                  case 1:
                    state.z1 = state.gZone;
                    break;
                  default:
                    throw new Error('Invalid zone pointer');
                }
              }

              // SZP2[] Set Zone Pointer 2
              // 0x15
              function SZP2(state) {
                var n = state.stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'SZP2[]', n);
                }

                state.zp2 = n;

                switch (n) {
                  case 0:
                    if (!state.tZone) {
                      initTZone(state);
                    }
                    state.z2 = state.tZone;
                    break;
                  case 1:
                    state.z2 = state.gZone;
                    break;
                  default:
                    throw new Error('Invalid zone pointer');
                }
              }

              // SZPS[] Set Zone PointerS
              // 0x16
              function SZPS(state) {
                var n = state.stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'SZPS[]', n);
                }

                state.zp0 = state.zp1 = state.zp2 = n;

                switch (n) {
                  case 0:
                    if (!state.tZone) {
                      initTZone(state);
                    }
                    state.z0 = state.z1 = state.z2 = state.tZone;
                    break;
                  case 1:
                    state.z0 = state.z1 = state.z2 = state.gZone;
                    break;
                  default:
                    throw new Error('Invalid zone pointer');
                }
              }

              // SLOOP[] Set LOOP variable
              // 0x17
              function SLOOP(state) {
                state.loop = state.stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'SLOOP[]', state.loop);
                }
              }

              // RTG[] Round To Grid
              // 0x18
              function RTG(state) {
                if (exports.DEBUG) {
                  console.log(state.step, 'RTG[]');
                }

                state.round = roundToGrid;
              }

              // RTHG[] Round To Half Grid
              // 0x19
              function RTHG(state) {
                if (exports.DEBUG) {
                  console.log(state.step, 'RTHG[]');
                }

                state.round = roundToHalfGrid;
              }

              // SMD[] Set Minimum Distance
              // 0x1A
              function SMD(state) {
                var d = state.stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'SMD[]', d);
                }

                state.minDis = d / 0x40;
              }

              // ELSE[] ELSE clause
              // 0x1B
              function ELSE(state) {
                // This instruction has been reached by executing a then branch
                // so it just skips ahead until matching EIF.
                //
                // In case the IF was negative the IF[] instruction already
                // skipped forward over the ELSE[]

                if (exports.DEBUG) {
                  console.log(state.step, 'ELSE[]');
                }

                skip(state, false);
              }

              // JMPR[] JuMP Relative
              // 0x1C
              function JMPR(state) {
                var o = state.stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'JMPR[]', o);
                }

                // A jump by 1 would do nothing.
                state.ip += o - 1;
              }

              // SCVTCI[] Set Control Value Table Cut-In
              // 0x1D
              function SCVTCI(state) {
                var n = state.stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'SCVTCI[]', n);
                }

                state.cvCutIn = n / 0x40;
              }

              // DUP[] DUPlicate top stack element
              // 0x20
              function DUP(state) {
                var stack = state.stack;

                if (exports.DEBUG) {
                  console.log(state.step, 'DUP[]');
                }

                stack.push(stack[stack.length - 1]);
              }

              // POP[] POP top stack element
              // 0x21
              function POP(state) {
                if (exports.DEBUG) {
                  console.log(state.step, 'POP[]');
                }

                state.stack.pop();
              }

              // CLEAR[] CLEAR the stack
              // 0x22
              function CLEAR(state) {
                if (exports.DEBUG) {
                  console.log(state.step, 'CLEAR[]');
                }

                state.stack.length = 0;
              }

              // SWAP[] SWAP the top two elements on the stack
              // 0x23
              function SWAP(state) {
                var stack = state.stack;

                var a = stack.pop();
                var b = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'SWAP[]');
                }

                stack.push(a);
                stack.push(b);
              }

              // DEPTH[] DEPTH of the stack
              // 0x24
              function DEPTH(state) {
                var stack = state.stack;

                if (exports.DEBUG) {
                  console.log(state.step, 'DEPTH[]');
                }

                stack.push(stack.length);
              }

              // LOOPCALL[] LOOPCALL function
              // 0x2A
              function LOOPCALL(state) {
                var stack = state.stack;
                var fn = stack.pop();
                var c = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'LOOPCALL[]', fn, c);
                }

                // saves callers program
                var cip = state.ip;
                var cprog = state.prog;

                state.prog = state.funcs[fn];

                // executes the function
                for (var i = 0; i < c; i++) {
                  exec(state);

                  if (exports.DEBUG) {
                    console.log(
                      ++state.step,
                      i + 1 < c ? 'next loopcall' : 'done loopcall',
                      i
                    );
                  }
                }

                // restores the callers program
                state.ip = cip;
                state.prog = cprog;
              }

              // CALL[] CALL function
              // 0x2B
              function CALL(state) {
                var fn = state.stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'CALL[]', fn);
                }

                // saves callers program
                var cip = state.ip;
                var cprog = state.prog;

                state.prog = state.funcs[fn];

                // executes the function
                exec(state);

                // restores the callers program
                state.ip = cip;
                state.prog = cprog;

                if (exports.DEBUG) {
                  console.log(++state.step, 'returning from', fn);
                }
              }

              // CINDEX[] Copy the INDEXed element to the top of the stack
              // 0x25
              function CINDEX(state) {
                var stack = state.stack;
                var k = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'CINDEX[]', k);
                }

                // In case of k == 1, it copies the last element after popping
                // thus stack.length - k.
                stack.push(stack[stack.length - k]);
              }

              // MINDEX[] Move the INDEXed element to the top of the stack
              // 0x26
              function MINDEX(state) {
                var stack = state.stack;
                var k = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'MINDEX[]', k);
                }

                stack.push(stack.splice(stack.length - k, 1)[0]);
              }

              // FDEF[] Function DEFinition
              // 0x2C
              function FDEF(state) {
                if (state.env !== 'fpgm') {
                  throw new Error('FDEF not allowed here');
                }
                var stack = state.stack;
                var prog = state.prog;
                var ip = state.ip;

                var fn = stack.pop();
                var ipBegin = ip;

                if (exports.DEBUG) {
                  console.log(state.step, 'FDEF[]', fn);
                }

                while (prog[++ip] !== 0x2d) {}

                state.ip = ip;
                state.funcs[fn] = prog.slice(ipBegin + 1, ip);
              }

              // MDAP[a] Move Direct Absolute Point
              // 0x2E-0x2F
              function MDAP(round, state) {
                var pi = state.stack.pop();
                var p = state.z0[pi];
                var fv = state.fv;
                var pv = state.pv;

                if (exports.DEBUG) {
                  console.log(state.step, 'MDAP[' + round + ']', pi);
                }

                var d = pv.distance(p, HPZero);

                if (round) {
                  d = state.round(d);
                }

                fv.setRelative(p, HPZero, d, pv);
                fv.touch(p);

                state.rp0 = state.rp1 = pi;
              }

              // IUP[a] Interpolate Untouched Points through the outline
              // 0x30
              function IUP(v, state) {
                var z2 = state.z2;
                var pLen = z2.length - 2;
                var cp;
                var pp;
                var np;

                if (exports.DEBUG) {
                  console.log(state.step, 'IUP[' + v.axis + ']');
                }

                for (var i = 0; i < pLen; i++) {
                  cp = z2[i]; // current point

                  // if this point has been touched go on
                  if (v.touched(cp)) {
                    continue;
                  }

                  pp = cp.prevTouched(v);

                  // no point on the contour has been touched?
                  if (pp === cp) {
                    continue;
                  }

                  np = cp.nextTouched(v);

                  if (pp === np) {
                    // only one point on the contour has been touched
                    // so simply moves the point like that

                    v.setRelative(cp, cp, v.distance(pp, pp, false, true), v, true);
                  }

                  v.interpolate(cp, pp, np, v);
                }
              }

              // SHP[] SHift Point using reference point
              // 0x32-0x33
              function SHP(a, state) {
                var stack = state.stack;
                var rpi = a ? state.rp1 : state.rp2;
                var rp = (a ? state.z0 : state.z1)[rpi];
                var fv = state.fv;
                var pv = state.pv;
                var loop = state.loop;
                var z2 = state.z2;

                while (loop--) {
                  var pi = stack.pop();
                  var p = z2[pi];

                  var d = pv.distance(rp, rp, false, true);
                  fv.setRelative(p, p, d, pv);
                  fv.touch(p);

                  if (exports.DEBUG) {
                    console.log(
                      state.step,
                      (state.loop > 1 ? 'loop ' + (state.loop - loop) + ': ' : '') +
                        'SHP[' +
                        (a ? 'rp1' : 'rp2') +
                        ']',
                      pi
                    );
                  }
                }

                state.loop = 1;
              }

              // SHC[] SHift Contour using reference point
              // 0x36-0x37
              function SHC(a, state) {
                var stack = state.stack;
                var rpi = a ? state.rp1 : state.rp2;
                var rp = (a ? state.z0 : state.z1)[rpi];
                var fv = state.fv;
                var pv = state.pv;
                var ci = stack.pop();
                var sp = state.z2[state.contours[ci]];
                var p = sp;

                if (exports.DEBUG) {
                  console.log(state.step, 'SHC[' + a + ']', ci);
                }

                var d = pv.distance(rp, rp, false, true);

                do {
                  if (p !== rp) {
                    fv.setRelative(p, p, d, pv);
                  }
                  p = p.nextPointOnContour;
                } while (p !== sp);
              }

              // SHZ[] SHift Zone using reference point
              // 0x36-0x37
              function SHZ(a, state) {
                var stack = state.stack;
                var rpi = a ? state.rp1 : state.rp2;
                var rp = (a ? state.z0 : state.z1)[rpi];
                var fv = state.fv;
                var pv = state.pv;

                var e = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'SHZ[' + a + ']', e);
                }

                var z;
                switch (e) {
                  case 0:
                    z = state.tZone;
                    break;
                  case 1:
                    z = state.gZone;
                    break;
                  default:
                    throw new Error('Invalid zone');
                }

                var p;
                var d = pv.distance(rp, rp, false, true);
                var pLen = z.length - 2;
                for (var i = 0; i < pLen; i++) {
                  p = z[i];
                  fv.setRelative(p, p, d, pv);
                  //if (p !== rp) fv.setRelative(p, p, d, pv);
                }
              }

              // SHPIX[] SHift point by a PIXel amount
              // 0x38
              function SHPIX(state) {
                var stack = state.stack;
                var loop = state.loop;
                var fv = state.fv;
                var d = stack.pop() / 0x40;
                var z2 = state.z2;

                while (loop--) {
                  var pi = stack.pop();
                  var p = z2[pi];

                  if (exports.DEBUG) {
                    console.log(
                      state.step,
                      (state.loop > 1 ? 'loop ' + (state.loop - loop) + ': ' : '') +
                        'SHPIX[]',
                      pi,
                      d
                    );
                  }

                  fv.setRelative(p, p, d);
                  fv.touch(p);
                }

                state.loop = 1;
              }

              // IP[] Interpolate Point
              // 0x39
              function IP(state) {
                var stack = state.stack;
                var rp1i = state.rp1;
                var rp2i = state.rp2;
                var loop = state.loop;
                var rp1 = state.z0[rp1i];
                var rp2 = state.z1[rp2i];
                var fv = state.fv;
                var pv = state.dpv;
                var z2 = state.z2;

                while (loop--) {
                  var pi = stack.pop();
                  var p = z2[pi];

                  if (exports.DEBUG) {
                    console.log(
                      state.step,
                      (state.loop > 1 ? 'loop ' + (state.loop - loop) + ': ' : '') + 'IP[]',
                      pi,
                      rp1i,
                      '<->',
                      rp2i
                    );
                  }

                  fv.interpolate(p, rp1, rp2, pv);

                  fv.touch(p);
                }

                state.loop = 1;
              }

              // MSIRP[a] Move Stack Indirect Relative Point
              // 0x3A-0x3B
              function MSIRP(a, state) {
                var stack = state.stack;
                var d = stack.pop() / 64;
                var pi = stack.pop();
                var p = state.z1[pi];
                var rp0 = state.z0[state.rp0];
                var fv = state.fv;
                var pv = state.pv;

                fv.setRelative(p, rp0, d, pv);
                fv.touch(p);

                if (exports.DEBUG) {
                  console.log(state.step, 'MSIRP[' + a + ']', d, pi);
                }

                state.rp1 = state.rp0;
                state.rp2 = pi;
                if (a) {
                  state.rp0 = pi;
                }
              }

              // ALIGNRP[] Align to reference point.
              // 0x3C
              function ALIGNRP(state) {
                var stack = state.stack;
                var rp0i = state.rp0;
                var rp0 = state.z0[rp0i];
                var loop = state.loop;
                var fv = state.fv;
                var pv = state.pv;
                var z1 = state.z1;

                while (loop--) {
                  var pi = stack.pop();
                  var p = z1[pi];

                  if (exports.DEBUG) {
                    console.log(
                      state.step,
                      (state.loop > 1 ? 'loop ' + (state.loop - loop) + ': ' : '') +
                        'ALIGNRP[]',
                      pi
                    );
                  }

                  fv.setRelative(p, rp0, 0, pv);
                  fv.touch(p);
                }

                state.loop = 1;
              }

              // RTG[] Round To Double Grid
              // 0x3D
              function RTDG(state) {
                if (exports.DEBUG) {
                  console.log(state.step, 'RTDG[]');
                }

                state.round = roundToDoubleGrid;
              }

              // MIAP[a] Move Indirect Absolute Point
              // 0x3E-0x3F
              function MIAP(round, state) {
                var stack = state.stack;
                var n = stack.pop();
                var pi = stack.pop();
                var p = state.z0[pi];
                var fv = state.fv;
                var pv = state.pv;
                var cv = state.cvt[n];

                if (exports.DEBUG) {
                  console.log(state.step, 'MIAP[' + round + ']', n, '(', cv, ')', pi);
                }

                var d = pv.distance(p, HPZero);

                if (round) {
                  if (Math.abs(d - cv) < state.cvCutIn) {
                    d = cv;
                  }

                  d = state.round(d);
                }

                fv.setRelative(p, HPZero, d, pv);

                if (state.zp0 === 0) {
                  p.xo = p.x;
                  p.yo = p.y;
                }

                fv.touch(p);

                state.rp0 = state.rp1 = pi;
              }

              // NPUSB[] PUSH N Bytes
              // 0x40
              function NPUSHB(state) {
                var prog = state.prog;
                var ip = state.ip;
                var stack = state.stack;

                var n = prog[++ip];

                if (exports.DEBUG) {
                  console.log(state.step, 'NPUSHB[]', n);
                }

                for (var i = 0; i < n; i++) {
                  stack.push(prog[++ip]);
                }

                state.ip = ip;
              }

              // NPUSHW[] PUSH N Words
              // 0x41
              function NPUSHW(state) {
                var ip = state.ip;
                var prog = state.prog;
                var stack = state.stack;
                var n = prog[++ip];

                if (exports.DEBUG) {
                  console.log(state.step, 'NPUSHW[]', n);
                }

                for (var i = 0; i < n; i++) {
                  var w = (prog[++ip] << 8) | prog[++ip];
                  if (w & 0x8000) {
                    w = -((w ^ 0xffff) + 1);
                  }
                  stack.push(w);
                }

                state.ip = ip;
              }

              // WS[] Write Store
              // 0x42
              function WS(state) {
                var stack = state.stack;
                var store = state.store;

                if (!store) {
                  store = state.store = [];
                }

                var v = stack.pop();
                var l = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'WS', v, l);
                }

                store[l] = v;
              }

              // RS[] Read Store
              // 0x43
              function RS(state) {
                var stack = state.stack;
                var store = state.store;

                var l = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'RS', l);
                }

                var v = (store && store[l]) || 0;

                stack.push(v);
              }

              // WCVTP[] Write Control Value Table in Pixel units
              // 0x44
              function WCVTP(state) {
                var stack = state.stack;

                var v = stack.pop();
                var l = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'WCVTP', v, l);
                }

                state.cvt[l] = v / 0x40;
              }

              // RCVT[] Read Control Value Table entry
              // 0x45
              function RCVT(state) {
                var stack = state.stack;
                var cvte = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'RCVT', cvte);
                }

                stack.push(state.cvt[cvte] * 0x40);
              }

              // GC[] Get Coordinate projected onto the projection vector
              // 0x46-0x47
              function GC(a, state) {
                var stack = state.stack;
                var pi = stack.pop();
                var p = state.z2[pi];

                if (exports.DEBUG) {
                  console.log(state.step, 'GC[' + a + ']', pi);
                }

                stack.push(state.dpv.distance(p, HPZero, a, false) * 0x40);
              }

              // MD[a] Measure Distance
              // 0x49-0x4A
              function MD(a, state) {
                var stack = state.stack;
                var pi2 = stack.pop();
                var pi1 = stack.pop();
                var p2 = state.z1[pi2];
                var p1 = state.z0[pi1];
                var d = state.dpv.distance(p1, p2, a, a);

                if (exports.DEBUG) {
                  console.log(state.step, 'MD[' + a + ']', pi2, pi1, '->', d);
                }

                state.stack.push(Math.round(d * 64));
              }

              // MPPEM[] Measure Pixels Per EM
              // 0x4B
              function MPPEM(state) {
                if (exports.DEBUG) {
                  console.log(state.step, 'MPPEM[]');
                }
                state.stack.push(state.ppem);
              }

              // FLIPON[] set the auto FLIP Boolean to ON
              // 0x4D
              function FLIPON(state) {
                if (exports.DEBUG) {
                  console.log(state.step, 'FLIPON[]');
                }
                state.autoFlip = true;
              }

              // LT[] Less Than
              // 0x50
              function LT(state) {
                var stack = state.stack;
                var e2 = stack.pop();
                var e1 = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'LT[]', e2, e1);
                }

                stack.push(e1 < e2 ? 1 : 0);
              }

              // LTEQ[] Less Than or EQual
              // 0x53
              function LTEQ(state) {
                var stack = state.stack;
                var e2 = stack.pop();
                var e1 = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'LTEQ[]', e2, e1);
                }

                stack.push(e1 <= e2 ? 1 : 0);
              }

              // GTEQ[] Greater Than
              // 0x52
              function GT(state) {
                var stack = state.stack;
                var e2 = stack.pop();
                var e1 = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'GT[]', e2, e1);
                }

                stack.push(e1 > e2 ? 1 : 0);
              }

              // GTEQ[] Greater Than or EQual
              // 0x53
              function GTEQ(state) {
                var stack = state.stack;
                var e2 = stack.pop();
                var e1 = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'GTEQ[]', e2, e1);
                }

                stack.push(e1 >= e2 ? 1 : 0);
              }

              // EQ[] EQual
              // 0x54
              function EQ(state) {
                var stack = state.stack;
                var e2 = stack.pop();
                var e1 = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'EQ[]', e2, e1);
                }

                stack.push(e2 === e1 ? 1 : 0);
              }

              // NEQ[] Not EQual
              // 0x55
              function NEQ(state) {
                var stack = state.stack;
                var e2 = stack.pop();
                var e1 = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'NEQ[]', e2, e1);
                }

                stack.push(e2 !== e1 ? 1 : 0);
              }

              // ODD[] ODD
              // 0x56
              function ODD(state) {
                var stack = state.stack;
                var n = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'ODD[]', n);
                }

                stack.push(Math.trunc(n) % 2 ? 1 : 0);
              }

              // EVEN[] EVEN
              // 0x57
              function EVEN(state) {
                var stack = state.stack;
                var n = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'EVEN[]', n);
                }

                stack.push(Math.trunc(n) % 2 ? 0 : 1);
              }

              // IF[] IF test
              // 0x58
              function IF(state) {
                var test = state.stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'IF[]', test);
                }

                // if test is true it just continues
                // if not the ip is skipped until matching ELSE or EIF
                if (!test) {
                  skip(state, true);

                  if (exports.DEBUG) {
                    console.log(state.step, 'EIF[]');
                  }
                }
              }

              // EIF[] End IF
              // 0x59
              function EIF(state) {
                // this can be reached normally when
                // executing an else branch.
                // -> just ignore it

                if (exports.DEBUG) {
                  console.log(state.step, 'EIF[]');
                }
              }

              // AND[] logical AND
              // 0x5A
              function AND(state) {
                var stack = state.stack;
                var e2 = stack.pop();
                var e1 = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'AND[]', e2, e1);
                }

                stack.push(e2 && e1 ? 1 : 0);
              }

              // OR[] logical OR
              // 0x5B
              function OR(state) {
                var stack = state.stack;
                var e2 = stack.pop();
                var e1 = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'OR[]', e2, e1);
                }

                stack.push(e2 || e1 ? 1 : 0);
              }

              // NOT[] logical NOT
              // 0x5C
              function NOT(state) {
                var stack = state.stack;
                var e = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'NOT[]', e);
                }

                stack.push(e ? 0 : 1);
              }

              // DELTAP1[] DELTA exception P1
              // DELTAP2[] DELTA exception P2
              // DELTAP3[] DELTA exception P3
              // 0x5D, 0x71, 0x72
              function DELTAP123(b, state) {
                var stack = state.stack;
                var n = stack.pop();
                var fv = state.fv;
                var pv = state.pv;
                var ppem = state.ppem;
                var base = state.deltaBase + (b - 1) * 16;
                var ds = state.deltaShift;
                var z0 = state.z0;

                if (exports.DEBUG) {
                  console.log(state.step, 'DELTAP[' + b + ']', n, stack);
                }

                for (var i = 0; i < n; i++) {
                  var pi = stack.pop();
                  var arg = stack.pop();
                  var appem = base + ((arg & 0xf0) >> 4);
                  if (appem !== ppem) {
                    continue;
                  }

                  var mag = (arg & 0x0f) - 8;
                  if (mag >= 0) {
                    mag++;
                  }
                  if (exports.DEBUG) {
                    console.log(state.step, 'DELTAPFIX', pi, 'by', mag * ds);
                  }

                  var p = z0[pi];
                  fv.setRelative(p, p, mag * ds, pv);
                }
              }

              // SDB[] Set Delta Base in the graphics state
              // 0x5E
              function SDB(state) {
                var stack = state.stack;
                var n = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'SDB[]', n);
                }

                state.deltaBase = n;
              }

              // SDS[] Set Delta Shift in the graphics state
              // 0x5F
              function SDS(state) {
                var stack = state.stack;
                var n = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'SDS[]', n);
                }

                state.deltaShift = Math.pow(0.5, n);
              }

              // ADD[] ADD
              // 0x60
              function ADD(state) {
                var stack = state.stack;
                var n2 = stack.pop();
                var n1 = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'ADD[]', n2, n1);
                }

                stack.push(n1 + n2);
              }

              // SUB[] SUB
              // 0x61
              function SUB(state) {
                var stack = state.stack;
                var n2 = stack.pop();
                var n1 = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'SUB[]', n2, n1);
                }

                stack.push(n1 - n2);
              }

              // DIV[] DIV
              // 0x62
              function DIV(state) {
                var stack = state.stack;
                var n2 = stack.pop();
                var n1 = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'DIV[]', n2, n1);
                }

                stack.push(n1 * 64 / n2);
              }

              // MUL[] MUL
              // 0x63
              function MUL(state) {
                var stack = state.stack;
                var n2 = stack.pop();
                var n1 = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'MUL[]', n2, n1);
                }

                stack.push(n1 * n2 / 64);
              }

              // ABS[] ABSolute value
              // 0x64
              function ABS(state) {
                var stack = state.stack;
                var n = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'ABS[]', n);
                }

                stack.push(Math.abs(n));
              }

              // NEG[] NEGate
              // 0x65
              function NEG(state) {
                var stack = state.stack;
                var n = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'NEG[]', n);
                }

                stack.push(-n);
              }

              // FLOOR[] FLOOR
              // 0x66
              function FLOOR(state) {
                var stack = state.stack;
                var n = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'FLOOR[]', n);
                }

                stack.push(Math.floor(n / 0x40) * 0x40);
              }

              // CEILING[] CEILING
              // 0x67
              function CEILING(state) {
                var stack = state.stack;
                var n = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'CEILING[]', n);
                }

                stack.push(Math.ceil(n / 0x40) * 0x40);
              }

              // ROUND[ab] ROUND value
              // 0x68-0x6B
              function ROUND(dt, state) {
                var stack = state.stack;
                var n = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'ROUND[]');
                }

                stack.push(state.round(n / 0x40) * 0x40);
              }

              // WCVTF[] Write Control Value Table in Funits
              // 0x70
              function WCVTF(state) {
                var stack = state.stack;
                var v = stack.pop();
                var l = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'WCVTF[]', v, l);
                }

                state.cvt[l] = v * state.ppem / state.font.unitsPerEm;
              }

              // DELTAC1[] DELTA exception C1
              // DELTAC2[] DELTA exception C2
              // DELTAC3[] DELTA exception C3
              // 0x73, 0x74, 0x75
              function DELTAC123(b, state) {
                var stack = state.stack;
                var n = stack.pop();
                var ppem = state.ppem;
                var base = state.deltaBase + (b - 1) * 16;
                var ds = state.deltaShift;

                if (exports.DEBUG) {
                  console.log(state.step, 'DELTAC[' + b + ']', n, stack);
                }

                for (var i = 0; i < n; i++) {
                  var c = stack.pop();
                  var arg = stack.pop();
                  var appem = base + ((arg & 0xf0) >> 4);
                  if (appem !== ppem) {
                    continue;
                  }

                  var mag = (arg & 0x0f) - 8;
                  if (mag >= 0) {
                    mag++;
                  }

                  var delta = mag * ds;

                  if (exports.DEBUG) {
                    console.log(state.step, 'DELTACFIX', c, 'by', delta);
                  }

                  state.cvt[c] += delta;
                }
              }

              // SROUND[] Super ROUND
              // 0x76
              function SROUND(state) {
                var n = state.stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'SROUND[]', n);
                }

                state.round = roundSuper;

                var period;

                switch (n & 0xc0) {
                  case 0x00:
                    period = 0.5;
                    break;
                  case 0x40:
                    period = 1;
                    break;
                  case 0x80:
                    period = 2;
                    break;
                  default:
                    throw new Error('invalid SROUND value');
                }

                state.srPeriod = period;

                switch (n & 0x30) {
                  case 0x00:
                    state.srPhase = 0;
                    break;
                  case 0x10:
                    state.srPhase = 0.25 * period;
                    break;
                  case 0x20:
                    state.srPhase = 0.5 * period;
                    break;
                  case 0x30:
                    state.srPhase = 0.75 * period;
                    break;
                  default:
                    throw new Error('invalid SROUND value');
                }

                n &= 0x0f;

                if (n === 0) {
                  state.srThreshold = 0;
                } else {
                  state.srThreshold = (n / 8 - 0.5) * period;
                }
              }

              // S45ROUND[] Super ROUND 45 degrees
              // 0x77
              function S45ROUND(state) {
                var n = state.stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'S45ROUND[]', n);
                }

                state.round = roundSuper;

                var period;

                switch (n & 0xc0) {
                  case 0x00:
                    period = Math.sqrt(2) / 2;
                    break;
                  case 0x40:
                    period = Math.sqrt(2);
                    break;
                  case 0x80:
                    period = 2 * Math.sqrt(2);
                    break;
                  default:
                    throw new Error('invalid S45ROUND value');
                }

                state.srPeriod = period;

                switch (n & 0x30) {
                  case 0x00:
                    state.srPhase = 0;
                    break;
                  case 0x10:
                    state.srPhase = 0.25 * period;
                    break;
                  case 0x20:
                    state.srPhase = 0.5 * period;
                    break;
                  case 0x30:
                    state.srPhase = 0.75 * period;
                    break;
                  default:
                    throw new Error('invalid S45ROUND value');
                }

                n &= 0x0f;

                if (n === 0) {
                  state.srThreshold = 0;
                } else {
                  state.srThreshold = (n / 8 - 0.5) * period;
                }
              }

              // ROFF[] Round Off
              // 0x7A
              function ROFF(state) {
                if (exports.DEBUG) {
                  console.log(state.step, 'ROFF[]');
                }

                state.round = roundOff;
              }

              // RUTG[] Round Up To Grid
              // 0x7C
              function RUTG(state) {
                if (exports.DEBUG) {
                  console.log(state.step, 'RUTG[]');
                }

                state.round = roundUpToGrid;
              }

              // RDTG[] Round Down To Grid
              // 0x7D
              function RDTG(state) {
                if (exports.DEBUG) {
                  console.log(state.step, 'RDTG[]');
                }

                state.round = roundDownToGrid;
              }

              // SCANCTRL[] SCAN conversion ConTRoL
              // 0x85
              function SCANCTRL(state) {
                var n = state.stack.pop();

                // ignored by opentype.js

                if (exports.DEBUG) {
                  console.log(state.step, 'SCANCTRL[]', n);
                }
              }

              // SDPVTL[a] Set Dual Projection Vector To Line
              // 0x86-0x87
              function SDPVTL(a, state) {
                var stack = state.stack;
                var p2i = stack.pop();
                var p1i = stack.pop();
                var p2 = state.z2[p2i];
                var p1 = state.z1[p1i];

                if (exports.DEBUG) {
                  console.log(state.step, 'SDPVTL[' + a + ']', p2i, p1i);
                }

                var dx;
                var dy;

                if (!a) {
                  dx = p1.x - p2.x;
                  dy = p1.y - p2.y;
                } else {
                  dx = p2.y - p1.y;
                  dy = p1.x - p2.x;
                }

                state.dpv = getUnitVector(dx, dy);
              }

              // GETINFO[] GET INFOrmation
              // 0x88
              function GETINFO(state) {
                var stack = state.stack;
                var sel = stack.pop();
                var r = 0;

                if (exports.DEBUG) {
                  console.log(state.step, 'GETINFO[]', sel);
                }

                // v35 as in no subpixel hinting
                if (sel & 0x01) {
                  r = 35;
                }

                // TODO rotation and stretch currently not supported
                // and thus those GETINFO are always 0.

                // opentype.js is always gray scaling
                if (sel & 0x20) {
                  r |= 0x1000;
                }

                stack.push(r);
              }

              // ROLL[] ROLL the top three stack elements
              // 0x8A
              function ROLL(state) {
                var stack = state.stack;
                var a = stack.pop();
                var b = stack.pop();
                var c = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'ROLL[]');
                }

                stack.push(b);
                stack.push(a);
                stack.push(c);
              }

              // MAX[] MAXimum of top two stack elements
              // 0x8B
              function MAX(state) {
                var stack = state.stack;
                var e2 = stack.pop();
                var e1 = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'MAX[]', e2, e1);
                }

                stack.push(Math.max(e1, e2));
              }

              // MIN[] MINimum of top two stack elements
              // 0x8C
              function MIN(state) {
                var stack = state.stack;
                var e2 = stack.pop();
                var e1 = stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'MIN[]', e2, e1);
                }

                stack.push(Math.min(e1, e2));
              }

              // SCANTYPE[] SCANTYPE
              // 0x8D
              function SCANTYPE(state) {
                var n = state.stack.pop();
                // ignored by opentype.js
                if (exports.DEBUG) {
                  console.log(state.step, 'SCANTYPE[]', n);
                }
              }

              // INSTCTRL[] INSTCTRL
              // 0x8D
              function INSTCTRL(state) {
                var s = state.stack.pop();
                var v = state.stack.pop();

                if (exports.DEBUG) {
                  console.log(state.step, 'INSTCTRL[]', s, v);
                }

                switch (s) {
                  case 1:
                    state.inhibitGridFit = !!v;
                    return;
                  case 2:
                    state.ignoreCvt = !!v;
                    return;
                  default:
                    throw new Error('invalid INSTCTRL[] selector');
                }
              }

              // PUSHB[abc] PUSH Bytes
              // 0xB0-0xB7
              function PUSHB(n, state) {
                var stack = state.stack;
                var prog = state.prog;
                var ip = state.ip;

                if (exports.DEBUG) {
                  console.log(state.step, 'PUSHB[' + n + ']');
                }

                for (var i = 0; i < n; i++) {
                  stack.push(prog[++ip]);
                }

                state.ip = ip;
              }

              // PUSHW[abc] PUSH Words
              // 0xB8-0xBF
              function PUSHW(n, state) {
                var ip = state.ip;
                var prog = state.prog;
                var stack = state.stack;

                if (exports.DEBUG) {
                  console.log(state.ip, 'PUSHW[' + n + ']');
                }

                for (var i = 0; i < n; i++) {
                  var w = (prog[++ip] << 8) | prog[++ip];
                  if (w & 0x8000) {
                    w = -((w ^ 0xffff) + 1);
                  }
                  stack.push(w);
                }

                state.ip = ip;
              }

              // MDRP[abcde] Move Direct Relative Point
              // 0xD0-0xEF
              // (if indirect is 0)
              //
              // and
              //
              // MIRP[abcde] Move Indirect Relative Point
              // 0xE0-0xFF
              // (if indirect is 1)

              function MDRP_MIRP(indirect, setRp0, keepD, ro, dt, state) {
                var stack = state.stack;
                var cvte = indirect && stack.pop();
                var pi = stack.pop();
                var rp0i = state.rp0;
                var rp = state.z0[rp0i];
                var p = state.z1[pi];

                var md = state.minDis;
                var fv = state.fv;
                var pv = state.dpv;
                var od; // original distance
                var d; // moving distance
                var sign; // sign of distance
                var cv;

                d = od = pv.distance(p, rp, true, true);
                sign = d >= 0 ? 1 : -1; // Math.sign would be 0 in case of 0

                // TODO consider autoFlip
                d = Math.abs(d);

                if (indirect) {
                  cv = state.cvt[cvte];

                  if (ro && Math.abs(d - cv) < state.cvCutIn) {
                    d = cv;
                  }
                }

                if (keepD && d < md) {
                  d = md;
                }

                if (ro) {
                  d = state.round(d);
                }

                fv.setRelative(p, rp, sign * d, pv);
                fv.touch(p);

                if (exports.DEBUG) {
                  console.log(
                    state.step,
                    (indirect ? 'MIRP[' : 'MDRP[') +
                      (setRp0 ? 'M' : 'm') +
                      (keepD ? '>' : '_') +
                      (ro ? 'R' : '_') +
                      (dt === 0 ? 'Gr' : dt === 1 ? 'Bl' : dt === 2 ? 'Wh' : '') +
                      ']',
                    indirect ? cvte + '(' + state.cvt[cvte] + ',' + cv + ')' : '',
                    pi,
                    '(d =',
                    od,
                    '->',
                    sign * d,
                    ')'
                  );
                }

                state.rp1 = state.rp0;
                state.rp2 = pi;
                if (setRp0) {
                  state.rp0 = pi;
                }
              }

              /*
	* The instruction table.
	*/
              instructionTable = [
                /* 0x00 */ SVTCA.bind(undefined, yUnitVector),
                /* 0x01 */ SVTCA.bind(undefined, xUnitVector),
                /* 0x02 */ SPVTCA.bind(undefined, yUnitVector),
                /* 0x03 */ SPVTCA.bind(undefined, xUnitVector),
                /* 0x04 */ SFVTCA.bind(undefined, yUnitVector),
                /* 0x05 */ SFVTCA.bind(undefined, xUnitVector),
                /* 0x06 */ SPVTL.bind(undefined, 0),
                /* 0x07 */ SPVTL.bind(undefined, 1),
                /* 0x08 */ SFVTL.bind(undefined, 0),
                /* 0x09 */ SFVTL.bind(undefined, 1),
                /* 0x0A */ SPVFS,
                /* 0x0B */ SFVFS,
                /* 0x0C */ GPV,
                /* 0x0D */ GFV,
                /* 0x0E */ SFVTPV,
                /* 0x0F */ ISECT,
                /* 0x10 */ SRP0,
                /* 0x11 */ SRP1,
                /* 0x12 */ SRP2,
                /* 0x13 */ SZP0,
                /* 0x14 */ SZP1,
                /* 0x15 */ SZP2,
                /* 0x16 */ SZPS,
                /* 0x17 */ SLOOP,
                /* 0x18 */ RTG,
                /* 0x19 */ RTHG,
                /* 0x1A */ SMD,
                /* 0x1B */ ELSE,
                /* 0x1C */ JMPR,
                /* 0x1D */ SCVTCI,
                /* 0x1E */ undefined, // TODO SSWCI
                /* 0x1F */ undefined, // TODO SSW
                /* 0x20 */ DUP,
                /* 0x21 */ POP,
                /* 0x22 */ CLEAR,
                /* 0x23 */ SWAP,
                /* 0x24 */ DEPTH,
                /* 0x25 */ CINDEX,
                /* 0x26 */ MINDEX,
                /* 0x27 */ undefined, // TODO ALIGNPTS
                /* 0x28 */ undefined,
                /* 0x29 */ undefined, // TODO UTP
                /* 0x2A */ LOOPCALL,
                /* 0x2B */ CALL,
                /* 0x2C */ FDEF,
                /* 0x2D */ undefined, // ENDF (eaten by FDEF)
                /* 0x2E */ MDAP.bind(undefined, 0),
                /* 0x2F */ MDAP.bind(undefined, 1),
                /* 0x30 */ IUP.bind(undefined, yUnitVector),
                /* 0x31 */ IUP.bind(undefined, xUnitVector),
                /* 0x32 */ SHP.bind(undefined, 0),
                /* 0x33 */ SHP.bind(undefined, 1),
                /* 0x34 */ SHC.bind(undefined, 0),
                /* 0x35 */ SHC.bind(undefined, 1),
                /* 0x36 */ SHZ.bind(undefined, 0),
                /* 0x37 */ SHZ.bind(undefined, 1),
                /* 0x38 */ SHPIX,
                /* 0x39 */ IP,
                /* 0x3A */ MSIRP.bind(undefined, 0),
                /* 0x3B */ MSIRP.bind(undefined, 1),
                /* 0x3C */ ALIGNRP,
                /* 0x3D */ RTDG,
                /* 0x3E */ MIAP.bind(undefined, 0),
                /* 0x3F */ MIAP.bind(undefined, 1),
                /* 0x40 */ NPUSHB,
                /* 0x41 */ NPUSHW,
                /* 0x42 */ WS,
                /* 0x43 */ RS,
                /* 0x44 */ WCVTP,
                /* 0x45 */ RCVT,
                /* 0x46 */ GC.bind(undefined, 0),
                /* 0x47 */ GC.bind(undefined, 1),
                /* 0x48 */ undefined, // TODO SCFS
                /* 0x49 */ MD.bind(undefined, 0),
                /* 0x4A */ MD.bind(undefined, 1),
                /* 0x4B */ MPPEM,
                /* 0x4C */ undefined, // TODO MPS
                /* 0x4D */ FLIPON,
                /* 0x4E */ undefined, // TODO FLIPOFF
                /* 0x4F */ undefined, // TODO DEBUG
                /* 0x50 */ LT,
                /* 0x51 */ LTEQ,
                /* 0x52 */ GT,
                /* 0x53 */ GTEQ,
                /* 0x54 */ EQ,
                /* 0x55 */ NEQ,
                /* 0x56 */ ODD,
                /* 0x57 */ EVEN,
                /* 0x58 */ IF,
                /* 0x59 */ EIF,
                /* 0x5A */ AND,
                /* 0x5B */ OR,
                /* 0x5C */ NOT,
                /* 0x5D */ DELTAP123.bind(undefined, 1),
                /* 0x5E */ SDB,
                /* 0x5F */ SDS,
                /* 0x60 */ ADD,
                /* 0x61 */ SUB,
                /* 0x62 */ DIV,
                /* 0x63 */ MUL,
                /* 0x64 */ ABS,
                /* 0x65 */ NEG,
                /* 0x66 */ FLOOR,
                /* 0x67 */ CEILING,
                /* 0x68 */ ROUND.bind(undefined, 0),
                /* 0x69 */ ROUND.bind(undefined, 1),
                /* 0x6A */ ROUND.bind(undefined, 2),
                /* 0x6B */ ROUND.bind(undefined, 3),
                /* 0x6C */ undefined, // TODO NROUND[ab]
                /* 0x6D */ undefined, // TODO NROUND[ab]
                /* 0x6E */ undefined, // TODO NROUND[ab]
                /* 0x6F */ undefined, // TODO NROUND[ab]
                /* 0x70 */ WCVTF,
                /* 0x71 */ DELTAP123.bind(undefined, 2),
                /* 0x72 */ DELTAP123.bind(undefined, 3),
                /* 0x73 */ DELTAC123.bind(undefined, 1),
                /* 0x74 */ DELTAC123.bind(undefined, 2),
                /* 0x75 */ DELTAC123.bind(undefined, 3),
                /* 0x76 */ SROUND,
                /* 0x77 */ S45ROUND,
                /* 0x78 */ undefined, // TODO JROT[]
                /* 0x79 */ undefined, // TODO JROF[]
                /* 0x7A */ ROFF,
                /* 0x7B */ undefined,
                /* 0x7C */ RUTG,
                /* 0x7D */ RDTG,
                /* 0x7E */ POP, // actually SANGW, supposed to do only a pop though
                /* 0x7F */ POP, // actually AA, supposed to do only a pop though
                /* 0x80 */ undefined, // TODO FLIPPT
                /* 0x81 */ undefined, // TODO FLIPRGON
                /* 0x82 */ undefined, // TODO FLIPRGOFF
                /* 0x83 */ undefined,
                /* 0x84 */ undefined,
                /* 0x85 */ SCANCTRL,
                /* 0x86 */ SDPVTL.bind(undefined, 0),
                /* 0x87 */ SDPVTL.bind(undefined, 1),
                /* 0x88 */ GETINFO,
                /* 0x89 */ undefined, // TODO IDEF
                /* 0x8A */ ROLL,
                /* 0x8B */ MAX,
                /* 0x8C */ MIN,
                /* 0x8D */ SCANTYPE,
                /* 0x8E */ INSTCTRL,
                /* 0x8F */ undefined,
                /* 0x90 */ undefined,
                /* 0x91 */ undefined,
                /* 0x92 */ undefined,
                /* 0x93 */ undefined,
                /* 0x94 */ undefined,
                /* 0x95 */ undefined,
                /* 0x96 */ undefined,
                /* 0x97 */ undefined,
                /* 0x98 */ undefined,
                /* 0x99 */ undefined,
                /* 0x9A */ undefined,
                /* 0x9B */ undefined,
                /* 0x9C */ undefined,
                /* 0x9D */ undefined,
                /* 0x9E */ undefined,
                /* 0x9F */ undefined,
                /* 0xA0 */ undefined,
                /* 0xA1 */ undefined,
                /* 0xA2 */ undefined,
                /* 0xA3 */ undefined,
                /* 0xA4 */ undefined,
                /* 0xA5 */ undefined,
                /* 0xA6 */ undefined,
                /* 0xA7 */ undefined,
                /* 0xA8 */ undefined,
                /* 0xA9 */ undefined,
                /* 0xAA */ undefined,
                /* 0xAB */ undefined,
                /* 0xAC */ undefined,
                /* 0xAD */ undefined,
                /* 0xAE */ undefined,
                /* 0xAF */ undefined,
                /* 0xB0 */ PUSHB.bind(undefined, 1),
                /* 0xB1 */ PUSHB.bind(undefined, 2),
                /* 0xB2 */ PUSHB.bind(undefined, 3),
                /* 0xB3 */ PUSHB.bind(undefined, 4),
                /* 0xB4 */ PUSHB.bind(undefined, 5),
                /* 0xB5 */ PUSHB.bind(undefined, 6),
                /* 0xB6 */ PUSHB.bind(undefined, 7),
                /* 0xB7 */ PUSHB.bind(undefined, 8),
                /* 0xB8 */ PUSHW.bind(undefined, 1),
                /* 0xB9 */ PUSHW.bind(undefined, 2),
                /* 0xBA */ PUSHW.bind(undefined, 3),
                /* 0xBB */ PUSHW.bind(undefined, 4),
                /* 0xBC */ PUSHW.bind(undefined, 5),
                /* 0xBD */ PUSHW.bind(undefined, 6),
                /* 0xBE */ PUSHW.bind(undefined, 7),
                /* 0xBF */ PUSHW.bind(undefined, 8),
                /* 0xC0 */ MDRP_MIRP.bind(undefined, 0, 0, 0, 0, 0),
                /* 0xC1 */ MDRP_MIRP.bind(undefined, 0, 0, 0, 0, 1),
                /* 0xC2 */ MDRP_MIRP.bind(undefined, 0, 0, 0, 0, 2),
                /* 0xC3 */ MDRP_MIRP.bind(undefined, 0, 0, 0, 0, 3),
                /* 0xC4 */ MDRP_MIRP.bind(undefined, 0, 0, 0, 1, 0),
                /* 0xC5 */ MDRP_MIRP.bind(undefined, 0, 0, 0, 1, 1),
                /* 0xC6 */ MDRP_MIRP.bind(undefined, 0, 0, 0, 1, 2),
                /* 0xC7 */ MDRP_MIRP.bind(undefined, 0, 0, 0, 1, 3),
                /* 0xC8 */ MDRP_MIRP.bind(undefined, 0, 0, 1, 0, 0),
                /* 0xC9 */ MDRP_MIRP.bind(undefined, 0, 0, 1, 0, 1),
                /* 0xCA */ MDRP_MIRP.bind(undefined, 0, 0, 1, 0, 2),
                /* 0xCB */ MDRP_MIRP.bind(undefined, 0, 0, 1, 0, 3),
                /* 0xCC */ MDRP_MIRP.bind(undefined, 0, 0, 1, 1, 0),
                /* 0xCD */ MDRP_MIRP.bind(undefined, 0, 0, 1, 1, 1),
                /* 0xCE */ MDRP_MIRP.bind(undefined, 0, 0, 1, 1, 2),
                /* 0xCF */ MDRP_MIRP.bind(undefined, 0, 0, 1, 1, 3),
                /* 0xD0 */ MDRP_MIRP.bind(undefined, 0, 1, 0, 0, 0),
                /* 0xD1 */ MDRP_MIRP.bind(undefined, 0, 1, 0, 0, 1),
                /* 0xD2 */ MDRP_MIRP.bind(undefined, 0, 1, 0, 0, 2),
                /* 0xD3 */ MDRP_MIRP.bind(undefined, 0, 1, 0, 0, 3),
                /* 0xD4 */ MDRP_MIRP.bind(undefined, 0, 1, 0, 1, 0),
                /* 0xD5 */ MDRP_MIRP.bind(undefined, 0, 1, 0, 1, 1),
                /* 0xD6 */ MDRP_MIRP.bind(undefined, 0, 1, 0, 1, 2),
                /* 0xD7 */ MDRP_MIRP.bind(undefined, 0, 1, 0, 1, 3),
                /* 0xD8 */ MDRP_MIRP.bind(undefined, 0, 1, 1, 0, 0),
                /* 0xD9 */ MDRP_MIRP.bind(undefined, 0, 1, 1, 0, 1),
                /* 0xDA */ MDRP_MIRP.bind(undefined, 0, 1, 1, 0, 2),
                /* 0xDB */ MDRP_MIRP.bind(undefined, 0, 1, 1, 0, 3),
                /* 0xDC */ MDRP_MIRP.bind(undefined, 0, 1, 1, 1, 0),
                /* 0xDD */ MDRP_MIRP.bind(undefined, 0, 1, 1, 1, 1),
                /* 0xDE */ MDRP_MIRP.bind(undefined, 0, 1, 1, 1, 2),
                /* 0xDF */ MDRP_MIRP.bind(undefined, 0, 1, 1, 1, 3),
                /* 0xE0 */ MDRP_MIRP.bind(undefined, 1, 0, 0, 0, 0),
                /* 0xE1 */ MDRP_MIRP.bind(undefined, 1, 0, 0, 0, 1),
                /* 0xE2 */ MDRP_MIRP.bind(undefined, 1, 0, 0, 0, 2),
                /* 0xE3 */ MDRP_MIRP.bind(undefined, 1, 0, 0, 0, 3),
                /* 0xE4 */ MDRP_MIRP.bind(undefined, 1, 0, 0, 1, 0),
                /* 0xE5 */ MDRP_MIRP.bind(undefined, 1, 0, 0, 1, 1),
                /* 0xE6 */ MDRP_MIRP.bind(undefined, 1, 0, 0, 1, 2),
                /* 0xE7 */ MDRP_MIRP.bind(undefined, 1, 0, 0, 1, 3),
                /* 0xE8 */ MDRP_MIRP.bind(undefined, 1, 0, 1, 0, 0),
                /* 0xE9 */ MDRP_MIRP.bind(undefined, 1, 0, 1, 0, 1),
                /* 0xEA */ MDRP_MIRP.bind(undefined, 1, 0, 1, 0, 2),
                /* 0xEB */ MDRP_MIRP.bind(undefined, 1, 0, 1, 0, 3),
                /* 0xEC */ MDRP_MIRP.bind(undefined, 1, 0, 1, 1, 0),
                /* 0xED */ MDRP_MIRP.bind(undefined, 1, 0, 1, 1, 1),
                /* 0xEE */ MDRP_MIRP.bind(undefined, 1, 0, 1, 1, 2),
                /* 0xEF */ MDRP_MIRP.bind(undefined, 1, 0, 1, 1, 3),
                /* 0xF0 */ MDRP_MIRP.bind(undefined, 1, 1, 0, 0, 0),
                /* 0xF1 */ MDRP_MIRP.bind(undefined, 1, 1, 0, 0, 1),
                /* 0xF2 */ MDRP_MIRP.bind(undefined, 1, 1, 0, 0, 2),
                /* 0xF3 */ MDRP_MIRP.bind(undefined, 1, 1, 0, 0, 3),
                /* 0xF4 */ MDRP_MIRP.bind(undefined, 1, 1, 0, 1, 0),
                /* 0xF5 */ MDRP_MIRP.bind(undefined, 1, 1, 0, 1, 1),
                /* 0xF6 */ MDRP_MIRP.bind(undefined, 1, 1, 0, 1, 2),
                /* 0xF7 */ MDRP_MIRP.bind(undefined, 1, 1, 0, 1, 3),
                /* 0xF8 */ MDRP_MIRP.bind(undefined, 1, 1, 1, 0, 0),
                /* 0xF9 */ MDRP_MIRP.bind(undefined, 1, 1, 1, 0, 1),
                /* 0xFA */ MDRP_MIRP.bind(undefined, 1, 1, 1, 0, 2),
                /* 0xFB */ MDRP_MIRP.bind(undefined, 1, 1, 1, 0, 3),
                /* 0xFC */ MDRP_MIRP.bind(undefined, 1, 1, 1, 1, 0),
                /* 0xFD */ MDRP_MIRP.bind(undefined, 1, 1, 1, 1, 1),
                /* 0xFE */ MDRP_MIRP.bind(undefined, 1, 1, 1, 1, 2),
                /* 0xFF */ MDRP_MIRP.bind(undefined, 1, 1, 1, 1, 3)
              ];

              /*****************************
	  Mathematical Considerations
	******************************

	fv ... refers to freedom vector
	pv ... refers to projection vector
	rp ... refers to reference point
	p  ... refers to to point being operated on
	d  ... refers to distance

	SETRELATIVE:
	============

	case freedom vector == x-axis:
	------------------------------

	                        (pv)
	                     .-'
	              rpd .-'
	               .-*
	          d .-'90°'
	         .-'       '
	      .-'           '
	   *-'               ' b
	  rp                  '
	                       '
	                        '
	            p *----------*-------------- (fv)
	                          pm

	  rpdx = rpx + d * pv.x
	  rpdy = rpy + d * pv.y

	  equation of line b

	   y - rpdy = pvns * (x- rpdx)

	   y = p.y

	   x = rpdx + ( p.y - rpdy ) / pvns


	case freedom vector == y-axis:
	------------------------------

	    * pm
	    |\
	    | \
	    |  \
	    |   \
	    |    \
	    |     \
	    |      \
	    |       \
	    |        \
	    |         \ b
	    |          \
	    |           \
	    |            \    .-' (pv)
	    |         90° \.-'
	    |           .-'* rpd
	    |        .-'
	    *     *-'  d
	    p     rp

	  rpdx = rpx + d * pv.x
	  rpdy = rpy + d * pv.y

	  equation of line b:
	           pvns ... normal slope to pv

	   y - rpdy = pvns * (x - rpdx)

	   x = p.x

	   y = rpdy +  pvns * (p.x - rpdx)



	generic case:
	-------------


	                              .'(fv)
	                            .'
	                          .* pm
	                        .' !
	                      .'    .
	                    .'      !
	                  .'         . b
	                .'           !
	               *              .
	              p               !
	                         90°   .    ... (pv)
	                           ...-*-'''
	                  ...---'''    rpd
	         ...---'''   d
	   *--'''
	  rp

	    rpdx = rpx + d * pv.x
	    rpdy = rpy + d * pv.y

	 equation of line b:
	    pvns... normal slope to pv

	    y - rpdy = pvns * (x - rpdx)

	 equation of freedom vector line:
	    fvs ... slope of freedom vector (=fy/fx)

	    y - py = fvs * (x - px)


	  on pm both equations are true for same x/y

	    y - rpdy = pvns * (x - rpdx)

	    y - py = fvs * (x - px)

	  form to y and set equal:

	    pvns * (x - rpdx) + rpdy = fvs * (x - px) + py

	  expand:

	    pvns * x - pvns * rpdx + rpdy = fvs * x - fvs * px + py

	  switch:

	    fvs * x - fvs * px + py = pvns * x - pvns * rpdx + rpdy

	  solve for x:

	    fvs * x - pvns * x = fvs * px - pvns * rpdx - py + rpdy



	          fvs * px - pvns * rpdx + rpdy - py
	    x =  -----------------------------------
	                 fvs - pvns

	  and:

	    y = fvs * (x - px) + py



	INTERPOLATE:
	============

	Examples of point interpolation.

	The weight of the movement of the reference point gets bigger
	the further the other reference point is away, thus the safest
	option (that is avoiding 0/0 divisions) is to weight the
	original distance of the other point by the sum of both distances.

	If the sum of both distances is 0, then move the point by the
	arithmetic average of the movement of both reference points.




	           (+6)
	    rp1o *---->*rp1
	         .     .                          (+12)
	         .     .                  rp2o *---------->* rp2
	         .     .                       .           .
	         .     .                       .           .
	         .    10          20           .           .
	         |.........|...................|           .
	               .   .                               .
	               .   . (+8)                          .
	                po *------>*p                      .
	               .           .                       .
	               .    12     .          24           .
	               |...........|.......................|
	                                  36


	-------



	           (+10)
	    rp1o *-------->*rp1
	         .         .                      (-10)
	         .         .              rp2 *<---------* rpo2
	         .         .                   .         .
	         .         .                   .         .
	         .    10   .          30       .         .
	         |.........|.............................|
	                   .                   .
	                   . (+5)              .
	                po *--->* p            .
	                   .    .              .
	                   .    .   20         .
	                   |....|..............|
	                     5        15


	-------


	           (+10)
	    rp1o *-------->*rp1
	         .         .
	         .         .
	    rp2o *-------->*rp2


	                               (+10)
	                          po *-------->* p

	-------


	           (+10)
	    rp1o *-------->*rp1
	         .         .
	         .         .(+30)
	    rp2o *---------------------------->*rp2


	                                        (+25)
	                          po *----------------------->* p



	vim: set ts=4 sw=4 expandtab:
	*****/

              // The Font object

              // This code is based on Array.from implementation for strings in https://github.com/mathiasbynens/Array.from
              var arrayFromString =
                Array.from ||
                function(s) {
                  return (
                    s.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]?|[^\uD800-\uDFFF]|./g) || []
                  );
                };

              /**
               * @typedef FontOptions
               * @type Object
               * @property {Boolean} empty - whether to create a new empty font
               * @property {string} familyName
               * @property {string} styleName
               * @property {string=} fullName
               * @property {string=} postScriptName
               * @property {string=} designer
               * @property {string=} designerURL
               * @property {string=} manufacturer
               * @property {string=} manufacturerURL
               * @property {string=} license
               * @property {string=} licenseURL
               * @property {string=} version
               * @property {string=} description
               * @property {string=} copyright
               * @property {string=} trademark
               * @property {Number} unitsPerEm
               * @property {Number} ascender
               * @property {Number} descender
               * @property {Number} createdTimestamp
               * @property {string=} weightClass
               * @property {string=} widthClass
               * @property {string=} fsSelection
               */

              /**
               * A Font represents a loaded OpenType font file.
               * It contains a set of glyphs and methods to draw text on a drawing context,
               * or to get a path representing the text.
               * @exports opentype.Font
               * @class
               * @param {FontOptions}
               * @constructor
               */
              function Font(options) {
                options = options || {};

                if (!options.empty) {
                  // Check that we've provided the minimum set of names.
                  checkArgument(
                    options.familyName,
                    'When creating a new Font object, familyName is required.'
                  );
                  checkArgument(
                    options.styleName,
                    'When creating a new Font object, styleName is required.'
                  );
                  checkArgument(
                    options.unitsPerEm,
                    'When creating a new Font object, unitsPerEm is required.'
                  );
                  checkArgument(
                    options.ascender,
                    'When creating a new Font object, ascender is required.'
                  );
                  checkArgument(
                    options.descender,
                    'When creating a new Font object, descender is required.'
                  );
                  checkArgument(
                    options.descender < 0,
                    'Descender should be negative (e.g. -512).'
                  );

                  // OS X will complain if the names are empty, so we put a single space everywhere by default.
                  this.names = {
                    fontFamily: { en: options.familyName || ' ' },
                    fontSubfamily: { en: options.styleName || ' ' },
                    fullName: {
                      en: options.fullName || options.familyName + ' ' + options.styleName
                    },
                    // postScriptName may not contain any whitespace
                    postScriptName: {
                      en:
                        options.postScriptName ||
                        (options.familyName + options.styleName).replace(/\s/g, '')
                    },
                    designer: { en: options.designer || ' ' },
                    designerURL: { en: options.designerURL || ' ' },
                    manufacturer: { en: options.manufacturer || ' ' },
                    manufacturerURL: { en: options.manufacturerURL || ' ' },
                    license: { en: options.license || ' ' },
                    licenseURL: { en: options.licenseURL || ' ' },
                    version: { en: options.version || 'Version 0.1' },
                    description: { en: options.description || ' ' },
                    copyright: { en: options.copyright || ' ' },
                    trademark: { en: options.trademark || ' ' }
                  };
                  this.unitsPerEm = options.unitsPerEm || 1000;
                  this.ascender = options.ascender;
                  this.descender = options.descender;
                  this.createdTimestamp = options.createdTimestamp;
                  this.tables = {
                    os2: {
                      usWeightClass: options.weightClass || this.usWeightClasses.MEDIUM,
                      usWidthClass: options.widthClass || this.usWidthClasses.MEDIUM,
                      fsSelection: options.fsSelection || this.fsSelectionValues.REGULAR
                    }
                  };
                }

                this.supported = true; // Deprecated: parseBuffer will throw an error if font is not supported.
                this.glyphs = new glyphset.GlyphSet(this, options.glyphs || []);
                this.encoding = new DefaultEncoding(this);
                this.position = new Position(this);
                this.substitution = new Substitution(this);
                this.tables = this.tables || {};

                Object.defineProperty(this, 'hinting', {
                  get: function() {
                    if (this._hinting) {
                      return this._hinting;
                    }
                    if (this.outlinesFormat === 'truetype') {
                      return (this._hinting = new Hinting(this));
                    }
                  }
                });
              }

              /**
               * Check if the font has a glyph for the given character.
               * @param  {string}
               * @return {Boolean}
               */
              Font.prototype.hasChar = function(c) {
                return this.encoding.charToGlyphIndex(c) !== null;
              };

              /**
               * Convert the given character to a single glyph index.
               * Note that this function assumes that there is a one-to-one mapping between
               * the given character and a glyph; for complex scripts this might not be the case.
               * @param  {string}
               * @return {Number}
               */
              Font.prototype.charToGlyphIndex = function(s) {
                return this.encoding.charToGlyphIndex(s);
              };

              /**
               * Convert the given character to a single Glyph object.
               * Note that this function assumes that there is a one-to-one mapping between
               * the given character and a glyph; for complex scripts this might not be the case.
               * @param  {string}
               * @return {opentype.Glyph}
               */
              Font.prototype.charToGlyph = function(c) {
                var glyphIndex = this.charToGlyphIndex(c);
                var glyph = this.glyphs.get(glyphIndex);
                if (!glyph) {
                  // .notdef
                  glyph = this.glyphs.get(0);
                }

                return glyph;
              };

              /**
               * Convert the given text to a list of Glyph objects.
               * Note that there is no strict one-to-one mapping between characters and
               * glyphs, so the list of returned glyphs can be larger or smaller than the
               * length of the given string.
               * @param  {string}
               * @param  {GlyphRenderOptions} [options]
               * @return {opentype.Glyph[]}
               */
              Font.prototype.stringToGlyphs = function(s, options) {
                var this$1 = this;

                options = options || this.defaultRenderOptions;
                // Get glyph indexes
                var chars = arrayFromString(s);
                var indexes = [];
                for (var i = 0; i < chars.length; i += 1) {
                  var c = chars[i];
                  indexes.push(this$1.charToGlyphIndex(c));
                }
                var length = indexes.length;

                // Apply substitutions on glyph indexes
                if (options.features) {
                  var script = options.script || this.substitution.getDefaultScriptName();
                  var manyToOne = [];
                  if (options.features.liga) {
                    manyToOne = manyToOne.concat(
                      this.substitution.getFeature('liga', script, options.language)
                    );
                  }
                  if (options.features.rlig) {
                    manyToOne = manyToOne.concat(
                      this.substitution.getFeature('rlig', script, options.language)
                    );
                  }
                  for (var i$1 = 0; i$1 < length; i$1 += 1) {
                    for (var j = 0; j < manyToOne.length; j++) {
                      var ligature = manyToOne[j];
                      var components = ligature.sub;
                      var compCount = components.length;
                      var k = 0;
                      while (k < compCount && components[k] === indexes[i$1 + k]) {
                        k++;
                      }
                      if (k === compCount) {
                        indexes.splice(i$1, compCount, ligature.by);
                        length = length - compCount + 1;
                      }
                    }
                  }
                }

                // convert glyph indexes to glyph objects
                var glyphs = new Array(length);
                var notdef = this.glyphs.get(0);
                for (var i$2 = 0; i$2 < length; i$2 += 1) {
                  glyphs[i$2] = this$1.glyphs.get(indexes[i$2]) || notdef;
                }
                return glyphs;
              };

              /**
               * @param  {string}
               * @return {Number}
               */
              Font.prototype.nameToGlyphIndex = function(name) {
                return this.glyphNames.nameToGlyphIndex(name);
              };

              /**
               * @param  {string}
               * @return {opentype.Glyph}
               */
              Font.prototype.nameToGlyph = function(name) {
                var glyphIndex = this.nameToGlyphIndex(name);
                var glyph = this.glyphs.get(glyphIndex);
                if (!glyph) {
                  // .notdef
                  glyph = this.glyphs.get(0);
                }

                return glyph;
              };

              /**
               * @param  {Number}
               * @return {String}
               */
              Font.prototype.glyphIndexToName = function(gid) {
                if (!this.glyphNames.glyphIndexToName) {
                  return '';
                }

                return this.glyphNames.glyphIndexToName(gid);
              };

              /**
               * Retrieve the value of the kerning pair between the left glyph (or its index)
               * and the right glyph (or its index). If no kerning pair is found, return 0.
               * The kerning value gets added to the advance width when calculating the spacing
               * between glyphs.
               * For GPOS kerning, this method uses the default script and language, which covers
               * most use cases. To have greater control, use font.position.getKerningValue .
               * @param  {opentype.Glyph} leftGlyph
               * @param  {opentype.Glyph} rightGlyph
               * @return {Number}
               */
              Font.prototype.getKerningValue = function(leftGlyph, rightGlyph) {
                leftGlyph = leftGlyph.index || leftGlyph;
                rightGlyph = rightGlyph.index || rightGlyph;
                var gposKerning = this.position.defaultKerningTables;
                if (gposKerning) {
                  return this.position.getKerningValue(gposKerning, leftGlyph, rightGlyph);
                }
                // "kern" table
                return this.kerningPairs[leftGlyph + ',' + rightGlyph] || 0;
              };

              /**
               * @typedef GlyphRenderOptions
               * @type Object
               * @property {string} [script] - script used to determine which features to apply. By default, 'DFLT' or 'latn' is used.
               *                               See https://www.microsoft.com/typography/otspec/scripttags.htm
               * @property {string} [language='dflt'] - language system used to determine which features to apply.
               *                                        See https://www.microsoft.com/typography/developers/opentype/languagetags.aspx
               * @property {boolean} [kerning=true] - whether to include kerning values
               * @property {object} [features] - OpenType Layout feature tags. Used to enable or disable the features of the given script/language system.
               *                                 See https://www.microsoft.com/typography/otspec/featuretags.htm
               */
              Font.prototype.defaultRenderOptions = {
                kerning: true,
                features: {
                  liga: true,
                  rlig: true
                }
              };

              /**
               * Helper function that invokes the given callback for each glyph in the given text.
               * The callback gets `(glyph, x, y, fontSize, options)`.* @param  {string} text
               * @param {string} text - The text to apply.
               * @param  {number} [x=0] - Horizontal position of the beginning of the text.
               * @param  {number} [y=0] - Vertical position of the *baseline* of the text.
               * @param  {number} [fontSize=72] - Font size in pixels. We scale the glyph units by `1 / unitsPerEm * fontSize`.
               * @param  {GlyphRenderOptions=} options
               * @param  {Function} callback
               */
              Font.prototype.forEachGlyph = function(
                text,
                x,
                y,
                fontSize,
                options,
                callback
              ) {
                var this$1 = this;

                x = x !== undefined ? x : 0;
                y = y !== undefined ? y : 0;
                fontSize = fontSize !== undefined ? fontSize : 72;
                options = options || this.defaultRenderOptions;
                var fontScale = 1 / this.unitsPerEm * fontSize;
                var glyphs = this.stringToGlyphs(text, options);
                var kerningLookups;
                if (options.kerning) {
                  var script = options.script || this.position.getDefaultScriptName();
                  kerningLookups = this.position.getKerningTables(script, options.language);
                }
                for (var i = 0; i < glyphs.length; i += 1) {
                  var glyph = glyphs[i];
                  callback.call(this$1, glyph, x, y, fontSize, options);
                  if (glyph.advanceWidth) {
                    x += glyph.advanceWidth * fontScale;
                  }

                  if (options.kerning && i < glyphs.length - 1) {
                    // We should apply position adjustment lookups in a more generic way.
                    // Here we only use the xAdvance value.
                    var kerningValue = kerningLookups
                      ? this$1.position.getKerningValue(
                          kerningLookups,
                          glyph.index,
                          glyphs[i + 1].index
                        )
                      : this$1.getKerningValue(glyph, glyphs[i + 1]);
                    x += kerningValue * fontScale;
                  }

                  if (options.letterSpacing) {
                    x += options.letterSpacing * fontSize;
                  } else if (options.tracking) {
                    x += options.tracking / 1000 * fontSize;
                  }
                }
                return x;
              };

              /**
               * Create a Path object that represents the given text.
               * @param  {string} text - The text to create.
               * @param  {number} [x=0] - Horizontal position of the beginning of the text.
               * @param  {number} [y=0] - Vertical position of the *baseline* of the text.
               * @param  {number} [fontSize=72] - Font size in pixels. We scale the glyph units by `1 / unitsPerEm * fontSize`.
               * @param  {GlyphRenderOptions=} options
               * @return {opentype.Path}
               */
              Font.prototype.getPath = function(text, x, y, fontSize, options) {
                var fullPath = new Path();
                this.forEachGlyph(text, x, y, fontSize, options, function(
                  glyph,
                  gX,
                  gY,
                  gFontSize
                ) {
                  var glyphPath = glyph.getPath(gX, gY, gFontSize, options, this);
                  fullPath.extend(glyphPath);
                });
                return fullPath;
              };

              /**
               * Create an array of Path objects that represent the glyphs of a given text.
               * @param  {string} text - The text to create.
               * @param  {number} [x=0] - Horizontal position of the beginning of the text.
               * @param  {number} [y=0] - Vertical position of the *baseline* of the text.
               * @param  {number} [fontSize=72] - Font size in pixels. We scale the glyph units by `1 / unitsPerEm * fontSize`.
               * @param  {GlyphRenderOptions=} options
               * @return {opentype.Path[]}
               */
              Font.prototype.getPaths = function(text, x, y, fontSize, options) {
                var glyphPaths = [];
                this.forEachGlyph(text, x, y, fontSize, options, function(
                  glyph,
                  gX,
                  gY,
                  gFontSize
                ) {
                  var glyphPath = glyph.getPath(gX, gY, gFontSize, options, this);
                  glyphPaths.push(glyphPath);
                });

                return glyphPaths;
              };

              /**
               * Returns the advance width of a text.
               *
               * This is something different than Path.getBoundingBox() as for example a
               * suffixed whitespace increases the advanceWidth but not the bounding box
               * or an overhanging letter like a calligraphic 'f' might have a quite larger
               * bounding box than its advance width.
               *
               * This corresponds to canvas2dContext.measureText(text).width
               *
               * @param  {string} text - The text to create.
               * @param  {number} [fontSize=72] - Font size in pixels. We scale the glyph units by `1 / unitsPerEm * fontSize`.
               * @param  {GlyphRenderOptions=} options
               * @return advance width
               */
              Font.prototype.getAdvanceWidth = function(text, fontSize, options) {
                return this.forEachGlyph(text, 0, 0, fontSize, options, function() {});
              };

              /**
               * Draw the text on the given drawing context.
               * @param  {CanvasRenderingContext2D} ctx - A 2D drawing context, like Canvas.
               * @param  {string} text - The text to create.
               * @param  {number} [x=0] - Horizontal position of the beginning of the text.
               * @param  {number} [y=0] - Vertical position of the *baseline* of the text.
               * @param  {number} [fontSize=72] - Font size in pixels. We scale the glyph units by `1 / unitsPerEm * fontSize`.
               * @param  {GlyphRenderOptions=} options
               */
              Font.prototype.draw = function(ctx, text, x, y, fontSize, options) {
                this.getPath(text, x, y, fontSize, options).draw(ctx);
              };

              /**
               * Draw the points of all glyphs in the text.
               * On-curve points will be drawn in blue, off-curve points will be drawn in red.
               * @param {CanvasRenderingContext2D} ctx - A 2D drawing context, like Canvas.
               * @param {string} text - The text to create.
               * @param {number} [x=0] - Horizontal position of the beginning of the text.
               * @param {number} [y=0] - Vertical position of the *baseline* of the text.
               * @param {number} [fontSize=72] - Font size in pixels. We scale the glyph units by `1 / unitsPerEm * fontSize`.
               * @param {GlyphRenderOptions=} options
               */
              Font.prototype.drawPoints = function(ctx, text, x, y, fontSize, options) {
                this.forEachGlyph(text, x, y, fontSize, options, function(
                  glyph,
                  gX,
                  gY,
                  gFontSize
                ) {
                  glyph.drawPoints(ctx, gX, gY, gFontSize);
                });
              };

              /**
               * Draw lines indicating important font measurements for all glyphs in the text.
               * Black lines indicate the origin of the coordinate system (point 0,0).
               * Blue lines indicate the glyph bounding box.
               * Green line indicates the advance width of the glyph.
               * @param {CanvasRenderingContext2D} ctx - A 2D drawing context, like Canvas.
               * @param {string} text - The text to create.
               * @param {number} [x=0] - Horizontal position of the beginning of the text.
               * @param {number} [y=0] - Vertical position of the *baseline* of the text.
               * @param {number} [fontSize=72] - Font size in pixels. We scale the glyph units by `1 / unitsPerEm * fontSize`.
               * @param {GlyphRenderOptions=} options
               */
              Font.prototype.drawMetrics = function(ctx, text, x, y, fontSize, options) {
                this.forEachGlyph(text, x, y, fontSize, options, function(
                  glyph,
                  gX,
                  gY,
                  gFontSize
                ) {
                  glyph.drawMetrics(ctx, gX, gY, gFontSize);
                });
              };

              /**
               * @param  {string}
               * @return {string}
               */
              Font.prototype.getEnglishName = function(name) {
                var translations = this.names[name];
                if (translations) {
                  return translations.en;
                }
              };

              /**
               * Validate
               */
              Font.prototype.validate = function() {
                var _this = this;

                function assert(predicate, message) {}

                function assertNamePresent(name) {
                  var englishName = _this.getEnglishName(name);
                  assert(
                    englishName && englishName.trim().length > 0,
                    'No English ' + name + ' specified.'
                  );
                }

                // Identification information
                assertNamePresent('fontFamily');
                assertNamePresent('weightName');
                assertNamePresent('manufacturer');
                assertNamePresent('copyright');
                assertNamePresent('version');

                // Dimension information
                assert(this.unitsPerEm > 0, 'No unitsPerEm specified.');
              };

              /**
               * Convert the font object to a SFNT data structure.
               * This structure contains all the necessary tables and metadata to create a binary OTF file.
               * @return {opentype.Table}
               */
              Font.prototype.toTables = function() {
                return sfnt.fontToTable(this);
              };
              /**
               * @deprecated Font.toBuffer is deprecated. Use Font.toArrayBuffer instead.
               */
              Font.prototype.toBuffer = function() {
                console.warn(
                  'Font.toBuffer is deprecated. Use Font.toArrayBuffer instead.'
                );
                return this.toArrayBuffer();
              };
              /**
               * Converts a `opentype.Font` into an `ArrayBuffer`
               * @return {ArrayBuffer}
               */
              Font.prototype.toArrayBuffer = function() {
                var sfntTable = this.toTables();
                var bytes = sfntTable.encode();
                var buffer = new ArrayBuffer(bytes.length);
                var intArray = new Uint8Array(buffer);
                for (var i = 0; i < bytes.length; i++) {
                  intArray[i] = bytes[i];
                }

                return buffer;
              };

              /**
               * Initiate a download of the OpenType font.
               */
              Font.prototype.download = function(fileName) {
                var familyName = this.getEnglishName('fontFamily');
                var styleName = this.getEnglishName('fontSubfamily');
                fileName =
                  fileName || familyName.replace(/\s/g, '') + '-' + styleName + '.otf';
                var arrayBuffer = this.toArrayBuffer();

                if (isBrowser()) {
                  window.requestFileSystem =
                    window.requestFileSystem || window.webkitRequestFileSystem;
                  window.requestFileSystem(
                    window.TEMPORARY,
                    arrayBuffer.byteLength,
                    function(fs) {
                      fs.root.getFile(fileName, { create: true }, function(fileEntry) {
                        fileEntry.createWriter(function(writer) {
                          var dataView = new DataView(arrayBuffer);
                          var blob = new Blob([dataView], { type: 'font/opentype' });
                          writer.write(blob);

                          writer.addEventListener(
                            'writeend',
                            function() {
                              // Navigating to the file will download it.
                              location.href = fileEntry.toURL();
                            },
                            false
                          );
                        });
                      });
                    },
                    function(err) {
                      throw new Error(err.name + ': ' + err.message);
                    }
                  );
                } else {
                  var fs = _dereq_('fs');
                  var buffer = arrayBufferToNodeBuffer(arrayBuffer);
                  fs.writeFileSync(fileName, buffer);
                }
              };
              /**
               * @private
               */
              Font.prototype.fsSelectionValues = {
                ITALIC: 0x001, //1
                UNDERSCORE: 0x002, //2
                NEGATIVE: 0x004, //4
                OUTLINED: 0x008, //8
                STRIKEOUT: 0x010, //16
                BOLD: 0x020, //32
                REGULAR: 0x040, //64
                USER_TYPO_METRICS: 0x080, //128
                WWS: 0x100, //256
                OBLIQUE: 0x200 //512
              };

              /**
               * @private
               */
              Font.prototype.usWidthClasses = {
                ULTRA_CONDENSED: 1,
                EXTRA_CONDENSED: 2,
                CONDENSED: 3,
                SEMI_CONDENSED: 4,
                MEDIUM: 5,
                SEMI_EXPANDED: 6,
                EXPANDED: 7,
                EXTRA_EXPANDED: 8,
                ULTRA_EXPANDED: 9
              };

              /**
               * @private
               */
              Font.prototype.usWeightClasses = {
                THIN: 100,
                EXTRA_LIGHT: 200,
                LIGHT: 300,
                NORMAL: 400,
                MEDIUM: 500,
                SEMI_BOLD: 600,
                BOLD: 700,
                EXTRA_BOLD: 800,
                BLACK: 900
              };

              // The `fvar` table stores font variation axes and instances.

              function addName(name, names) {
                var nameString = JSON.stringify(name);
                var nameID = 256;
                for (var nameKey in names) {
                  var n = parseInt(nameKey);
                  if (!n || n < 256) {
                    continue;
                  }

                  if (JSON.stringify(names[nameKey]) === nameString) {
                    return n;
                  }

                  if (nameID <= n) {
                    nameID = n + 1;
                  }
                }

                names[nameID] = name;
                return nameID;
              }

              function makeFvarAxis(n, axis, names) {
                var nameID = addName(axis.name, names);
                return [
                  { name: 'tag_' + n, type: 'TAG', value: axis.tag },
                  { name: 'minValue_' + n, type: 'FIXED', value: axis.minValue << 16 },
                  {
                    name: 'defaultValue_' + n,
                    type: 'FIXED',
                    value: axis.defaultValue << 16
                  },
                  { name: 'maxValue_' + n, type: 'FIXED', value: axis.maxValue << 16 },
                  { name: 'flags_' + n, type: 'USHORT', value: 0 },
                  { name: 'nameID_' + n, type: 'USHORT', value: nameID }
                ];
              }

              function parseFvarAxis(data, start, names) {
                var axis = {};
                var p = new parse.Parser(data, start);
                axis.tag = p.parseTag();
                axis.minValue = p.parseFixed();
                axis.defaultValue = p.parseFixed();
                axis.maxValue = p.parseFixed();
                p.skip('uShort', 1); // reserved for flags; no values defined
                axis.name = names[p.parseUShort()] || {};
                return axis;
              }

              function makeFvarInstance(n, inst, axes, names) {
                var nameID = addName(inst.name, names);
                var fields = [
                  { name: 'nameID_' + n, type: 'USHORT', value: nameID },
                  { name: 'flags_' + n, type: 'USHORT', value: 0 }
                ];

                for (var i = 0; i < axes.length; ++i) {
                  var axisTag = axes[i].tag;
                  fields.push({
                    name: 'axis_' + n + ' ' + axisTag,
                    type: 'FIXED',
                    value: inst.coordinates[axisTag] << 16
                  });
                }

                return fields;
              }

              function parseFvarInstance(data, start, axes, names) {
                var inst = {};
                var p = new parse.Parser(data, start);
                inst.name = names[p.parseUShort()] || {};
                p.skip('uShort', 1); // reserved for flags; no values defined

                inst.coordinates = {};
                for (var i = 0; i < axes.length; ++i) {
                  inst.coordinates[axes[i].tag] = p.parseFixed();
                }

                return inst;
              }

              function makeFvarTable(fvar, names) {
                var result = new table.Table('fvar', [
                  { name: 'version', type: 'ULONG', value: 0x10000 },
                  { name: 'offsetToData', type: 'USHORT', value: 0 },
                  { name: 'countSizePairs', type: 'USHORT', value: 2 },
                  { name: 'axisCount', type: 'USHORT', value: fvar.axes.length },
                  { name: 'axisSize', type: 'USHORT', value: 20 },
                  { name: 'instanceCount', type: 'USHORT', value: fvar.instances.length },
                  { name: 'instanceSize', type: 'USHORT', value: 4 + fvar.axes.length * 4 }
                ]);
                result.offsetToData = result.sizeOf();

                for (var i = 0; i < fvar.axes.length; i++) {
                  result.fields = result.fields.concat(
                    makeFvarAxis(i, fvar.axes[i], names)
                  );
                }

                for (var j = 0; j < fvar.instances.length; j++) {
                  result.fields = result.fields.concat(
                    makeFvarInstance(j, fvar.instances[j], fvar.axes, names)
                  );
                }

                return result;
              }

              function parseFvarTable(data, start, names) {
                var p = new parse.Parser(data, start);
                var tableVersion = p.parseULong();
                check.argument(
                  tableVersion === 0x00010000,
                  'Unsupported fvar table version.'
                );
                var offsetToData = p.parseOffset16();
                // Skip countSizePairs.
                p.skip('uShort', 1);
                var axisCount = p.parseUShort();
                var axisSize = p.parseUShort();
                var instanceCount = p.parseUShort();
                var instanceSize = p.parseUShort();

                var axes = [];
                for (var i = 0; i < axisCount; i++) {
                  axes.push(
                    parseFvarAxis(data, start + offsetToData + i * axisSize, names)
                  );
                }

                var instances = [];
                var instanceStart = start + offsetToData + axisCount * axisSize;
                for (var j = 0; j < instanceCount; j++) {
                  instances.push(
                    parseFvarInstance(data, instanceStart + j * instanceSize, axes, names)
                  );
                }

                return { axes: axes, instances: instances };
              }

              var fvar = { make: makeFvarTable, parse: parseFvarTable };

              // The `GPOS` table contains kerning pairs, among other things.

              var subtableParsers$1 = new Array(10); // subtableParsers[0] is unused

              // https://docs.microsoft.com/en-us/typography/opentype/spec/gpos#lookup-type-1-single-adjustment-positioning-subtable
              // this = Parser instance
              subtableParsers$1[1] = function parseLookup1() {
                var start = this.offset + this.relativeOffset;
                var posformat = this.parseUShort();
                if (posformat === 1) {
                  return {
                    posFormat: 1,
                    coverage: this.parsePointer(Parser.coverage),
                    value: this.parseValueRecord()
                  };
                } else if (posformat === 2) {
                  return {
                    posFormat: 2,
                    coverage: this.parsePointer(Parser.coverage),
                    values: this.parseValueRecordList()
                  };
                }
                check.assert(
                  false,
                  '0x' + start.toString(16) + ': GPOS lookup type 1 format must be 1 or 2.'
                );
              };

              // https://docs.microsoft.com/en-us/typography/opentype/spec/gpos#lookup-type-2-pair-adjustment-positioning-subtable
              subtableParsers$1[2] = function parseLookup2() {
                var start = this.offset + this.relativeOffset;
                var posFormat = this.parseUShort();
                check.assert(
                  posFormat === 1 || posFormat === 2,
                  '0x' + start.toString(16) + ': GPOS lookup type 2 format must be 1 or 2.'
                );
                var coverage = this.parsePointer(Parser.coverage);
                var valueFormat1 = this.parseUShort();
                var valueFormat2 = this.parseUShort();
                if (posFormat === 1) {
                  // Adjustments for Glyph Pairs
                  return {
                    posFormat: posFormat,
                    coverage: coverage,
                    valueFormat1: valueFormat1,
                    valueFormat2: valueFormat2,
                    pairSets: this.parseList(
                      Parser.pointer(
                        Parser.list(function() {
                          return {
                            // pairValueRecord
                            secondGlyph: this.parseUShort(),
                            value1: this.parseValueRecord(valueFormat1),
                            value2: this.parseValueRecord(valueFormat2)
                          };
                        })
                      )
                    )
                  };
                } else if (posFormat === 2) {
                  var classDef1 = this.parsePointer(Parser.classDef);
                  var classDef2 = this.parsePointer(Parser.classDef);
                  var class1Count = this.parseUShort();
                  var class2Count = this.parseUShort();
                  return {
                    // Class Pair Adjustment
                    posFormat: posFormat,
                    coverage: coverage,
                    valueFormat1: valueFormat1,
                    valueFormat2: valueFormat2,
                    classDef1: classDef1,
                    classDef2: classDef2,
                    class1Count: class1Count,
                    class2Count: class2Count,
                    classRecords: this.parseList(
                      class1Count,
                      Parser.list(class2Count, function() {
                        return {
                          value1: this.parseValueRecord(valueFormat1),
                          value2: this.parseValueRecord(valueFormat2)
                        };
                      })
                    )
                  };
                }
              };

              subtableParsers$1[3] = function parseLookup3() {
                return { error: 'GPOS Lookup 3 not supported' };
              };
              subtableParsers$1[4] = function parseLookup4() {
                return { error: 'GPOS Lookup 4 not supported' };
              };
              subtableParsers$1[5] = function parseLookup5() {
                return { error: 'GPOS Lookup 5 not supported' };
              };
              subtableParsers$1[6] = function parseLookup6() {
                return { error: 'GPOS Lookup 6 not supported' };
              };
              subtableParsers$1[7] = function parseLookup7() {
                return { error: 'GPOS Lookup 7 not supported' };
              };
              subtableParsers$1[8] = function parseLookup8() {
                return { error: 'GPOS Lookup 8 not supported' };
              };
              subtableParsers$1[9] = function parseLookup9() {
                return { error: 'GPOS Lookup 9 not supported' };
              };

              // https://docs.microsoft.com/en-us/typography/opentype/spec/gpos
              function parseGposTable(data, start) {
                start = start || 0;
                var p = new Parser(data, start);
                var tableVersion = p.parseVersion(1);
                check.argument(
                  tableVersion === 1 || tableVersion === 1.1,
                  'Unsupported GPOS table version ' + tableVersion
                );

                if (tableVersion === 1) {
                  return {
                    version: tableVersion,
                    scripts: p.parseScriptList(),
                    features: p.parseFeatureList(),
                    lookups: p.parseLookupList(subtableParsers$1)
                  };
                } else {
                  return {
                    version: tableVersion,
                    scripts: p.parseScriptList(),
                    features: p.parseFeatureList(),
                    lookups: p.parseLookupList(subtableParsers$1),
                    variations: p.parseFeatureVariationsList()
                  };
                }
              }

              // GPOS Writing //////////////////////////////////////////////
              // NOT SUPPORTED
              var subtableMakers$1 = new Array(10);

              function makeGposTable(gpos) {
                return new table.Table('GPOS', [
                  { name: 'version', type: 'ULONG', value: 0x10000 },
                  {
                    name: 'scripts',
                    type: 'TABLE',
                    value: new table.ScriptList(gpos.scripts)
                  },
                  {
                    name: 'features',
                    type: 'TABLE',
                    value: new table.FeatureList(gpos.features)
                  },
                  {
                    name: 'lookups',
                    type: 'TABLE',
                    value: new table.LookupList(gpos.lookups, subtableMakers$1)
                  }
                ]);
              }

              var gpos = { parse: parseGposTable, make: makeGposTable };

              // The `kern` table contains kerning pairs.

              function parseWindowsKernTable(p) {
                var pairs = {};
                // Skip nTables.
                p.skip('uShort');
                var subtableVersion = p.parseUShort();
                check.argument(
                  subtableVersion === 0,
                  'Unsupported kern sub-table version.'
                );
                // Skip subtableLength, subtableCoverage
                p.skip('uShort', 2);
                var nPairs = p.parseUShort();
                // Skip searchRange, entrySelector, rangeShift.
                p.skip('uShort', 3);
                for (var i = 0; i < nPairs; i += 1) {
                  var leftIndex = p.parseUShort();
                  var rightIndex = p.parseUShort();
                  var value = p.parseShort();
                  pairs[leftIndex + ',' + rightIndex] = value;
                }
                return pairs;
              }

              function parseMacKernTable(p) {
                var pairs = {};
                // The Mac kern table stores the version as a fixed (32 bits) but we only loaded the first 16 bits.
                // Skip the rest.
                p.skip('uShort');
                var nTables = p.parseULong();
                //check.argument(nTables === 1, 'Only 1 subtable is supported (got ' + nTables + ').');
                if (nTables > 1) {
                  console.warn('Only the first kern subtable is supported.');
                }
                p.skip('uLong');
                var coverage = p.parseUShort();
                var subtableVersion = coverage & 0xff;
                p.skip('uShort');
                if (subtableVersion === 0) {
                  var nPairs = p.parseUShort();
                  // Skip searchRange, entrySelector, rangeShift.
                  p.skip('uShort', 3);
                  for (var i = 0; i < nPairs; i += 1) {
                    var leftIndex = p.parseUShort();
                    var rightIndex = p.parseUShort();
                    var value = p.parseShort();
                    pairs[leftIndex + ',' + rightIndex] = value;
                  }
                }
                return pairs;
              }

              // Parse the `kern` table which contains kerning pairs.
              function parseKernTable(data, start) {
                var p = new parse.Parser(data, start);
                var tableVersion = p.parseUShort();
                if (tableVersion === 0) {
                  return parseWindowsKernTable(p);
                } else if (tableVersion === 1) {
                  return parseMacKernTable(p);
                } else {
                  throw new Error('Unsupported kern table version (' + tableVersion + ').');
                }
              }

              var kern = { parse: parseKernTable };

              // The `loca` table stores the offsets to the locations of the glyphs in the font.

              // Parse the `loca` table. This table stores the offsets to the locations of the glyphs in the font,
              // relative to the beginning of the glyphData table.
              // The number of glyphs stored in the `loca` table is specified in the `maxp` table (under numGlyphs)
              // The loca table has two versions: a short version where offsets are stored as uShorts, and a long
              // version where offsets are stored as uLongs. The `head` table specifies which version to use
              // (under indexToLocFormat).
              function parseLocaTable(data, start, numGlyphs, shortVersion) {
                var p = new parse.Parser(data, start);
                var parseFn = shortVersion ? p.parseUShort : p.parseULong;
                // There is an extra entry after the last index element to compute the length of the last glyph.
                // That's why we use numGlyphs + 1.
                var glyphOffsets = [];
                for (var i = 0; i < numGlyphs + 1; i += 1) {
                  var glyphOffset = parseFn.call(p);
                  if (shortVersion) {
                    // The short table version stores the actual offset divided by 2.
                    glyphOffset *= 2;
                  }

                  glyphOffsets.push(glyphOffset);
                }

                return glyphOffsets;
              }

              var loca = { parse: parseLocaTable };

              // opentype.js

              /**
               * The opentype library.
               * @namespace opentype
               */

              // File loaders /////////////////////////////////////////////////////////
              /**
               * Loads a font from a file. The callback throws an error message as the first parameter if it fails
               * and the font as an ArrayBuffer in the second parameter if it succeeds.
               * @param  {string} path - The path of the file
               * @param  {Function} callback - The function to call when the font load completes
               */
              function loadFromFile(path, callback) {
                var fs = _dereq_('fs');
                fs.readFile(path, function(err, buffer) {
                  if (err) {
                    return callback(err.message);
                  }

                  callback(null, nodeBufferToArrayBuffer(buffer));
                });
              }
              /**
               * Loads a font from a URL. The callback throws an error message as the first parameter if it fails
               * and the font as an ArrayBuffer in the second parameter if it succeeds.
               * @param  {string} url - The URL of the font file.
               * @param  {Function} callback - The function to call when the font load completes
               */
              function loadFromUrl(url, callback) {
                var request = new XMLHttpRequest();
                request.open('get', url, true);
                request.responseType = 'arraybuffer';
                request.onload = function() {
                  if (request.response) {
                    return callback(null, request.response);
                  } else {
                    return callback('Font could not be loaded: ' + request.statusText);
                  }
                };

                request.onerror = function() {
                  callback('Font could not be loaded');
                };

                request.send();
              }

              // Table Directory Entries //////////////////////////////////////////////
              /**
               * Parses OpenType table entries.
               * @param  {DataView}
               * @param  {Number}
               * @return {Object[]}
               */
              function parseOpenTypeTableEntries(data, numTables) {
                var tableEntries = [];
                var p = 12;
                for (var i = 0; i < numTables; i += 1) {
                  var tag = parse.getTag(data, p);
                  var checksum = parse.getULong(data, p + 4);
                  var offset = parse.getULong(data, p + 8);
                  var length = parse.getULong(data, p + 12);
                  tableEntries.push({
                    tag: tag,
                    checksum: checksum,
                    offset: offset,
                    length: length,
                    compression: false
                  });
                  p += 16;
                }

                return tableEntries;
              }

              /**
               * Parses WOFF table entries.
               * @param  {DataView}
               * @param  {Number}
               * @return {Object[]}
               */
              function parseWOFFTableEntries(data, numTables) {
                var tableEntries = [];
                var p = 44; // offset to the first table directory entry.
                for (var i = 0; i < numTables; i += 1) {
                  var tag = parse.getTag(data, p);
                  var offset = parse.getULong(data, p + 4);
                  var compLength = parse.getULong(data, p + 8);
                  var origLength = parse.getULong(data, p + 12);
                  var compression = void 0;
                  if (compLength < origLength) {
                    compression = 'WOFF';
                  } else {
                    compression = false;
                  }

                  tableEntries.push({
                    tag: tag,
                    offset: offset,
                    compression: compression,
                    compressedLength: compLength,
                    length: origLength
                  });
                  p += 20;
                }

                return tableEntries;
              }

              /**
               * @typedef TableData
               * @type Object
               * @property {DataView} data - The DataView
               * @property {number} offset - The data offset.
               */

              /**
               * @param  {DataView}
               * @param  {Object}
               * @return {TableData}
               */
              function uncompressTable(data, tableEntry) {
                if (tableEntry.compression === 'WOFF') {
                  var inBuffer = new Uint8Array(
                    data.buffer,
                    tableEntry.offset + 2,
                    tableEntry.compressedLength - 2
                  );
                  var outBuffer = new Uint8Array(tableEntry.length);
                  tinyInflate(inBuffer, outBuffer);
                  if (outBuffer.byteLength !== tableEntry.length) {
                    throw new Error(
                      'Decompression error: ' +
                        tableEntry.tag +
                        " decompressed length doesn't match recorded length"
                    );
                  }

                  var view = new DataView(outBuffer.buffer, 0);
                  return { data: view, offset: 0 };
                } else {
                  return { data: data, offset: tableEntry.offset };
                }
              }

              // Public API ///////////////////////////////////////////////////////////

              /**
               * Parse the OpenType file data (as an ArrayBuffer) and return a Font object.
               * Throws an error if the font could not be parsed.
               * @param  {ArrayBuffer}
               * @return {opentype.Font}
               */
              function parseBuffer(buffer) {
                var indexToLocFormat;
                var ltagTable;

                // Since the constructor can also be called to create new fonts from scratch, we indicate this
                // should be an empty font that we'll fill with our own data.
                var font = new Font({ empty: true });

                // OpenType fonts use big endian byte ordering.
                // We can't rely on typed array view types, because they operate with the endianness of the host computer.
                // Instead we use DataViews where we can specify endianness.
                var data = new DataView(buffer, 0);
                var numTables;
                var tableEntries = [];
                var signature = parse.getTag(data, 0);
                if (
                  signature === String.fromCharCode(0, 1, 0, 0) ||
                  signature === 'true' ||
                  signature === 'typ1'
                ) {
                  font.outlinesFormat = 'truetype';
                  numTables = parse.getUShort(data, 4);
                  tableEntries = parseOpenTypeTableEntries(data, numTables);
                } else if (signature === 'OTTO') {
                  font.outlinesFormat = 'cff';
                  numTables = parse.getUShort(data, 4);
                  tableEntries = parseOpenTypeTableEntries(data, numTables);
                } else if (signature === 'wOFF') {
                  var flavor = parse.getTag(data, 4);
                  if (flavor === String.fromCharCode(0, 1, 0, 0)) {
                    font.outlinesFormat = 'truetype';
                  } else if (flavor === 'OTTO') {
                    font.outlinesFormat = 'cff';
                  } else {
                    throw new Error('Unsupported OpenType flavor ' + signature);
                  }

                  numTables = parse.getUShort(data, 12);
                  tableEntries = parseWOFFTableEntries(data, numTables);
                } else {
                  throw new Error('Unsupported OpenType signature ' + signature);
                }

                var cffTableEntry;
                var fvarTableEntry;
                var glyfTableEntry;
                var gposTableEntry;
                var gsubTableEntry;
                var hmtxTableEntry;
                var kernTableEntry;
                var locaTableEntry;
                var nameTableEntry;
                var metaTableEntry;
                var p;

                for (var i = 0; i < numTables; i += 1) {
                  var tableEntry = tableEntries[i];
                  var table = void 0;
                  switch (tableEntry.tag) {
                    case 'cmap':
                      table = uncompressTable(data, tableEntry);
                      font.tables.cmap = cmap.parse(table.data, table.offset);
                      font.encoding = new CmapEncoding(font.tables.cmap);
                      break;
                    case 'cvt ':
                      table = uncompressTable(data, tableEntry);
                      p = new parse.Parser(table.data, table.offset);
                      font.tables.cvt = p.parseShortList(tableEntry.length / 2);
                      break;
                    case 'fvar':
                      fvarTableEntry = tableEntry;
                      break;
                    case 'fpgm':
                      table = uncompressTable(data, tableEntry);
                      p = new parse.Parser(table.data, table.offset);
                      font.tables.fpgm = p.parseByteList(tableEntry.length);
                      break;
                    case 'head':
                      table = uncompressTable(data, tableEntry);
                      font.tables.head = head.parse(table.data, table.offset);
                      font.unitsPerEm = font.tables.head.unitsPerEm;
                      indexToLocFormat = font.tables.head.indexToLocFormat;
                      break;
                    case 'hhea':
                      table = uncompressTable(data, tableEntry);
                      font.tables.hhea = hhea.parse(table.data, table.offset);
                      font.ascender = font.tables.hhea.ascender;
                      font.descender = font.tables.hhea.descender;
                      font.numberOfHMetrics = font.tables.hhea.numberOfHMetrics;
                      break;
                    case 'hmtx':
                      hmtxTableEntry = tableEntry;
                      break;
                    case 'ltag':
                      table = uncompressTable(data, tableEntry);
                      ltagTable = ltag.parse(table.data, table.offset);
                      break;
                    case 'maxp':
                      table = uncompressTable(data, tableEntry);
                      font.tables.maxp = maxp.parse(table.data, table.offset);
                      font.numGlyphs = font.tables.maxp.numGlyphs;
                      break;
                    case 'name':
                      nameTableEntry = tableEntry;
                      break;
                    case 'OS/2':
                      table = uncompressTable(data, tableEntry);
                      font.tables.os2 = os2.parse(table.data, table.offset);
                      break;
                    case 'post':
                      table = uncompressTable(data, tableEntry);
                      font.tables.post = post.parse(table.data, table.offset);
                      font.glyphNames = new GlyphNames(font.tables.post);
                      break;
                    case 'prep':
                      table = uncompressTable(data, tableEntry);
                      p = new parse.Parser(table.data, table.offset);
                      font.tables.prep = p.parseByteList(tableEntry.length);
                      break;
                    case 'glyf':
                      glyfTableEntry = tableEntry;
                      break;
                    case 'loca':
                      locaTableEntry = tableEntry;
                      break;
                    case 'CFF ':
                      cffTableEntry = tableEntry;
                      break;
                    case 'kern':
                      kernTableEntry = tableEntry;
                      break;
                    case 'GPOS':
                      gposTableEntry = tableEntry;
                      break;
                    case 'GSUB':
                      gsubTableEntry = tableEntry;
                      break;
                    case 'meta':
                      metaTableEntry = tableEntry;
                      break;
                  }
                }

                var nameTable = uncompressTable(data, nameTableEntry);
                font.tables.name = _name.parse(nameTable.data, nameTable.offset, ltagTable);
                font.names = font.tables.name;

                if (glyfTableEntry && locaTableEntry) {
                  var shortVersion = indexToLocFormat === 0;
                  var locaTable = uncompressTable(data, locaTableEntry);
                  var locaOffsets = loca.parse(
                    locaTable.data,
                    locaTable.offset,
                    font.numGlyphs,
                    shortVersion
                  );
                  var glyfTable = uncompressTable(data, glyfTableEntry);
                  font.glyphs = glyf.parse(
                    glyfTable.data,
                    glyfTable.offset,
                    locaOffsets,
                    font
                  );
                } else if (cffTableEntry) {
                  var cffTable = uncompressTable(data, cffTableEntry);
                  cff.parse(cffTable.data, cffTable.offset, font);
                } else {
                  throw new Error("Font doesn't contain TrueType or CFF outlines.");
                }

                var hmtxTable = uncompressTable(data, hmtxTableEntry);
                hmtx.parse(
                  hmtxTable.data,
                  hmtxTable.offset,
                  font.numberOfHMetrics,
                  font.numGlyphs,
                  font.glyphs
                );
                addGlyphNames(font);

                if (kernTableEntry) {
                  var kernTable = uncompressTable(data, kernTableEntry);
                  font.kerningPairs = kern.parse(kernTable.data, kernTable.offset);
                } else {
                  font.kerningPairs = {};
                }

                if (gposTableEntry) {
                  var gposTable = uncompressTable(data, gposTableEntry);
                  font.tables.gpos = gpos.parse(gposTable.data, gposTable.offset);
                  font.position.init();
                }

                if (gsubTableEntry) {
                  var gsubTable = uncompressTable(data, gsubTableEntry);
                  font.tables.gsub = gsub.parse(gsubTable.data, gsubTable.offset);
                }

                if (fvarTableEntry) {
                  var fvarTable = uncompressTable(data, fvarTableEntry);
                  font.tables.fvar = fvar.parse(
                    fvarTable.data,
                    fvarTable.offset,
                    font.names
                  );
                }

                if (metaTableEntry) {
                  var metaTable = uncompressTable(data, metaTableEntry);
                  font.tables.meta = meta.parse(metaTable.data, metaTable.offset);
                  font.metas = font.tables.meta;
                }

                return font;
              }

              /**
               * Asynchronously load the font from a URL or a filesystem. When done, call the callback
               * with two arguments `(err, font)`. The `err` will be null on success,
               * the `font` is a Font object.
               * We use the node.js callback convention so that
               * opentype.js can integrate with frameworks like async.js.
               * @alias opentype.load
               * @param  {string} url - The URL of the font to load.
               * @param  {Function} callback - The callback.
               */
              function load(url, callback) {
                var isNode$$1 = typeof window === 'undefined';
                var loadFn = isNode$$1 ? loadFromFile : loadFromUrl;
                loadFn(url, function(err, arrayBuffer) {
                  if (err) {
                    return callback(err);
                  }
                  var font;
                  try {
                    font = parseBuffer(arrayBuffer);
                  } catch (e) {
                    return callback(e, null);
                  }
                  return callback(null, font);
                });
              }

              /**
               * Synchronously load the font from a URL or file.
               * When done, returns the font object or throws an error.
               * @alias opentype.loadSync
               * @param  {string} url - The URL of the font to load.
               * @return {opentype.Font}
               */
              function loadSync(url) {
                var fs = _dereq_('fs');
                var buffer = fs.readFileSync(url);
                return parseBuffer(nodeBufferToArrayBuffer(buffer));
              }

              exports.Font = Font;
              exports.Glyph = Glyph;
              exports.Path = Path;
              exports.BoundingBox = BoundingBox;
              exports._parse = parse;
              exports.parse = parseBuffer;
              exports.load = load;
              exports.loadSync = loadSync;

              Object.defineProperty(exports, '__esModule', { value: true });
            });
          }.call(this, _dereq_('buffer').Buffer));
        },
        { buffer: 22, fs: 21 }
      ],
      259: [
        function(_dereq_, module, exports) {
          (function(process) {
            // .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,
            // backported and transplited with Babel, with backwards-compat fixes

            // Copyright Joyent, Inc. and other Node contributors.
            //
            // Permission is hereby granted, free of charge, to any person obtaining a
            // copy of this software and associated documentation files (the
            // "Software"), to deal in the Software without restriction, including
            // without limitation the rights to use, copy, modify, merge, publish,
            // distribute, sublicense, and/or sell copies of the Software, and to permit
            // persons to whom the Software is furnished to do so, subject to the
            // following conditions:
            //
            // The above copyright notice and this permission notice shall be included
            // in all copies or substantial portions of the Software.
            //
            // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
            // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
            // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
            // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
            // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
            // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
            // USE OR OTHER DEALINGS IN THE SOFTWARE.

            // resolves . and .. elements in a path array with directory names there
            // must be no slashes, empty elements, or device names (c:\) in the array
            // (so also no leading and trailing slashes - it does not distinguish
            // relative and absolute paths)
            function normalizeArray(parts, allowAboveRoot) {
              // if the path tries to go above the root, `up` ends up > 0
              var up = 0;
              for (var i = parts.length - 1; i >= 0; i--) {
                var last = parts[i];
                if (last === '.') {
                  parts.splice(i, 1);
                } else if (last === '..') {
                  parts.splice(i, 1);
                  up++;
                } else if (up) {
                  parts.splice(i, 1);
                  up--;
                }
              }

              // if the path is allowed to go above the root, restore leading ..s
              if (allowAboveRoot) {
                for (; up--; up) {
                  parts.unshift('..');
                }
              }

              return parts;
            }

            // path.resolve([from ...], to)
            // posix version
            exports.resolve = function() {
              var resolvedPath = '',
                resolvedAbsolute = false;

              for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
                var path = i >= 0 ? arguments[i] : process.cwd();

                // Skip empty and invalid entries
                if (typeof path !== 'string') {
                  throw new TypeError('Arguments to path.resolve must be strings');
                } else if (!path) {
                  continue;
                }

                resolvedPath = path + '/' + resolvedPath;
                resolvedAbsolute = path.charAt(0) === '/';
              }

              // At this point the path should be resolved to a full absolute path, but
              // handle relative paths to be safe (might happen when process.cwd() fails)

              // Normalize the path
              resolvedPath = normalizeArray(
                filter(resolvedPath.split('/'), function(p) {
                  return !!p;
                }),
                !resolvedAbsolute
              ).join('/');

              return (resolvedAbsolute ? '/' : '') + resolvedPath || '.';
            };

            // path.normalize(path)
            // posix version
            exports.normalize = function(path) {
              var isAbsolute = exports.isAbsolute(path),
                trailingSlash = substr(path, -1) === '/';

              // Normalize the path
              path = normalizeArray(
                filter(path.split('/'), function(p) {
                  return !!p;
                }),
                !isAbsolute
              ).join('/');

              if (!path && !isAbsolute) {
                path = '.';
              }
              if (path && trailingSlash) {
                path += '/';
              }

              return (isAbsolute ? '/' : '') + path;
            };

            // posix version
            exports.isAbsolute = function(path) {
              return path.charAt(0) === '/';
            };

            // posix version
            exports.join = function() {
              var paths = Array.prototype.slice.call(arguments, 0);
              return exports.normalize(
                filter(paths, function(p, index) {
                  if (typeof p !== 'string') {
                    throw new TypeError('Arguments to path.join must be strings');
                  }
                  return p;
                }).join('/')
              );
            };

            // path.relative(from, to)
            // posix version
            exports.relative = function(from, to) {
              from = exports.resolve(from).substr(1);
              to = exports.resolve(to).substr(1);

              function trim(arr) {
                var start = 0;
                for (; start < arr.length; start++) {
                  if (arr[start] !== '') break;
                }

                var end = arr.length - 1;
                for (; end >= 0; end--) {
                  if (arr[end] !== '') break;
                }

                if (start > end) return [];
                return arr.slice(start, end - start + 1);
              }

              var fromParts = trim(from.split('/'));
              var toParts = trim(to.split('/'));

              var length = Math.min(fromParts.length, toParts.length);
              var samePartsLength = length;
              for (var i = 0; i < length; i++) {
                if (fromParts[i] !== toParts[i]) {
                  samePartsLength = i;
                  break;
                }
              }

              var outputParts = [];
              for (var i = samePartsLength; i < fromParts.length; i++) {
                outputParts.push('..');
              }

              outputParts = outputParts.concat(toParts.slice(samePartsLength));

              return outputParts.join('/');
            };

            exports.sep = '/';
            exports.delimiter = ':';

            exports.dirname = function(path) {
              if (typeof path !== 'string') path = path + '';
              if (path.length === 0) return '.';
              var code = path.charCodeAt(0);
              var hasRoot = code === 47 /*/*/;
              var end = -1;
              var matchedSlash = true;
              for (var i = path.length - 1; i >= 1; --i) {
                code = path.charCodeAt(i);
                if (code === 47 /*/*/) {
                  if (!matchedSlash) {
                    end = i;
                    break;
                  }
                } else {
                  // We saw the first non-path separator
                  matchedSlash = false;
                }
              }

              if (end === -1) return hasRoot ? '/' : '.';
              if (hasRoot && end === 1) {
                // return '//';
                // Backwards-compat fix:
                return '/';
              }
              return path.slice(0, end);
            };

            function basename(path) {
              if (typeof path !== 'string') path = path + '';

              var start = 0;
              var end = -1;
              var matchedSlash = true;
              var i;

              for (i = path.length - 1; i >= 0; --i) {
                if (path.charCodeAt(i) === 47 /*/*/) {
                  // If we reached a path separator that was not part of a set of path
                  // separators at the end of the string, stop now
                  if (!matchedSlash) {
                    start = i + 1;
                    break;
                  }
                } else if (end === -1) {
                  // We saw the first non-path separator, mark this as the end of our
                  // path component
                  matchedSlash = false;
                  end = i + 1;
                }
              }

              if (end === -1) return '';
              return path.slice(start, end);
            }

            // Uses a mixed approach for backwards-compatibility, as ext behavior changed
            // in new Node.js versions, so only basename() above is backported here
            exports.basename = function(path, ext) {
              var f = basename(path);
              if (ext && f.substr(-1 * ext.length) === ext) {
                f = f.substr(0, f.length - ext.length);
              }
              return f;
            };

            exports.extname = function(path) {
              if (typeof path !== 'string') path = path + '';
              var startDot = -1;
              var startPart = 0;
              var end = -1;
              var matchedSlash = true;
              // Track the state of characters (if any) we see before our first dot and
              // after any path separator we find
              var preDotState = 0;
              for (var i = path.length - 1; i >= 0; --i) {
                var code = path.charCodeAt(i);
                if (code === 47 /*/*/) {
                  // If we reached a path separator that was not part of a set of path
                  // separators at the end of the string, stop now
                  if (!matchedSlash) {
                    startPart = i + 1;
                    break;
                  }
                  continue;
                }
                if (end === -1) {
                  // We saw the first non-path separator, mark this as the end of our
                  // extension
                  matchedSlash = false;
                  end = i + 1;
                }
                if (code === 46 /*.*/) {
                  // If this is our first dot, mark it as the start of our extension
                  if (startDot === -1) startDot = i;
                  else if (preDotState !== 1) preDotState = 1;
                } else if (startDot !== -1) {
                  // We saw a non-dot and non-path separator before our dot, so we should
                  // have a good chance at having a non-empty extension
                  preDotState = -1;
                }
              }

              if (
                startDot === -1 ||
                end === -1 ||
                // We saw a non-dot character immediately before the dot
                preDotState === 0 ||
                // The (right-most) trimmed path component is exactly '..'
                (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)
              ) {
                return '';
              }
              return path.slice(startDot, end);
            };

            function filter(xs, f) {
              if (xs.filter) return xs.filter(f);
              var res = [];
              for (var i = 0; i < xs.length; i++) {
                if (f(xs[i], i, xs)) res.push(xs[i]);
              }
              return res;
            }

            // String.prototype.substr - negative index don't work in IE8
            var substr =
              'ab'.substr(-1) === 'b'
                ? function(str, start, len) {
                    return str.substr(start, len);
                  }
                : function(str, start, len) {
                    if (start < 0) start = str.length + start;
                    return str.substr(start, len);
                  };
          }.call(this, _dereq_('_process')));
        },
        { _process: 260 }
      ],
      260: [
        function(_dereq_, module, exports) {
          // shim for using process in browser
          var process = (module.exports = {});

          // cached from whatever global is present so that test runners that stub it
          // don't break things.  But we need to wrap it in a try catch in case it is
          // wrapped in strict mode code which doesn't define any globals.  It's inside a
          // function because try/catches deoptimize in certain engines.

          var cachedSetTimeout;
          var cachedClearTimeout;

          function defaultSetTimout() {
            throw new Error('setTimeout has not been defined');
          }
          function defaultClearTimeout() {
            throw new Error('clearTimeout has not been defined');
          }
          (function() {
            try {
              if (typeof setTimeout === 'function') {
                cachedSetTimeout = setTimeout;
              } else {
                cachedSetTimeout = defaultSetTimout;
              }
            } catch (e) {
              cachedSetTimeout = defaultSetTimout;
            }
            try {
              if (typeof clearTimeout === 'function') {
                cachedClearTimeout = clearTimeout;
              } else {
                cachedClearTimeout = defaultClearTimeout;
              }
            } catch (e) {
              cachedClearTimeout = defaultClearTimeout;
            }
          })();
          function runTimeout(fun) {
            if (cachedSetTimeout === setTimeout) {
              //normal enviroments in sane situations
              return setTimeout(fun, 0);
            }
            // if setTimeout wasn't available but was latter defined
            if (
              (cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) &&
              setTimeout
            ) {
              cachedSetTimeout = setTimeout;
              return setTimeout(fun, 0);
            }
            try {
              // when when somebody has screwed with setTimeout but no I.E. maddness
              return cachedSetTimeout(fun, 0);
            } catch (e) {
              try {
                // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
                return cachedSetTimeout.call(null, fun, 0);
              } catch (e) {
                // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
                return cachedSetTimeout.call(this, fun, 0);
              }
            }
          }
          function runClearTimeout(marker) {
            if (cachedClearTimeout === clearTimeout) {
              //normal enviroments in sane situations
              return clearTimeout(marker);
            }
            // if clearTimeout wasn't available but was latter defined
            if (
              (cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) &&
              clearTimeout
            ) {
              cachedClearTimeout = clearTimeout;
              return clearTimeout(marker);
            }
            try {
              // when when somebody has screwed with setTimeout but no I.E. maddness
              return cachedClearTimeout(marker);
            } catch (e) {
              try {
                // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
                return cachedClearTimeout.call(null, marker);
              } catch (e) {
                // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
                // Some versions of I.E. have different rules for clearTimeout vs setTimeout
                return cachedClearTimeout.call(this, marker);
              }
            }
          }
          var queue = [];
          var draining = false;
          var currentQueue;
          var queueIndex = -1;

          function cleanUpNextTick() {
            if (!draining || !currentQueue) {
              return;
            }
            draining = false;
            if (currentQueue.length) {
              queue = currentQueue.concat(queue);
            } else {
              queueIndex = -1;
            }
            if (queue.length) {
              drainQueue();
            }
          }

          function drainQueue() {
            if (draining) {
              return;
            }
            var timeout = runTimeout(cleanUpNextTick);
            draining = true;

            var len = queue.length;
            while (len) {
              currentQueue = queue;
              queue = [];
              while (++queueIndex < len) {
                if (currentQueue) {
                  currentQueue[queueIndex].run();
                }
              }
              queueIndex = -1;
              len = queue.length;
            }
            currentQueue = null;
            draining = false;
            runClearTimeout(timeout);
          }

          process.nextTick = function(fun) {
            var args = new Array(arguments.length - 1);
            if (arguments.length > 1) {
              for (var i = 1; i < arguments.length; i++) {
                args[i - 1] = arguments[i];
              }
            }
            queue.push(new Item(fun, args));
            if (queue.length === 1 && !draining) {
              runTimeout(drainQueue);
            }
          };

          // v8 likes predictible objects
          function Item(fun, array) {
            this.fun = fun;
            this.array = array;
          }
          Item.prototype.run = function() {
            this.fun.apply(null, this.array);
          };
          process.title = 'browser';
          process.browser = true;
          process.env = {};
          process.argv = [];
          process.version = ''; // empty string to avoid regexp issues
          process.versions = {};

          function noop() {}

          process.on = noop;
          process.addListener = noop;
          process.once = noop;
          process.off = noop;
          process.removeListener = noop;
          process.removeAllListeners = noop;
          process.emit = noop;
          process.prependListener = noop;
          process.prependOnceListener = noop;

          process.listeners = function(name) {
            return [];
          };

          process.binding = function(name) {
            throw new Error('process.binding is not supported');
          };

          process.cwd = function() {
            return '/';
          };
          process.chdir = function(dir) {
            throw new Error('process.chdir is not supported');
          };
          process.umask = function() {
            return 0;
          };
        },
        {}
      ],
      261: [
        function(_dereq_, module, exports) {
          (function(self) {
            'use strict';

            if (self.fetch) {
              return;
            }

            var support = {
              searchParams: 'URLSearchParams' in self,
              iterable: 'Symbol' in self && 'iterator' in Symbol,
              blob:
                'FileReader' in self &&
                'Blob' in self &&
                (function() {
                  try {
                    new Blob();
                    return true;
                  } catch (e) {
                    return false;
                  }
                })(),
              formData: 'FormData' in self,
              arrayBuffer: 'ArrayBuffer' in self
            };

            if (support.arrayBuffer) {
              var viewClasses = [
                '[object Int8Array]',
                '[object Uint8Array]',
                '[object Uint8ClampedArray]',
                '[object Int16Array]',
                '[object Uint16Array]',
                '[object Int32Array]',
                '[object Uint32Array]',
                '[object Float32Array]',
                '[object Float64Array]'
              ];

              var isDataView = function(obj) {
                return obj && DataView.prototype.isPrototypeOf(obj);
              };

              var isArrayBufferView =
                ArrayBuffer.isView ||
                function(obj) {
                  return (
                    obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1
                  );
                };
            }

            function normalizeName(name) {
              if (typeof name !== 'string') {
                name = String(name);
              }
              if (/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(name)) {
                throw new TypeError('Invalid character in header field name');
              }
              return name.toLowerCase();
            }

            function normalizeValue(value) {
              if (typeof value !== 'string') {
                value = String(value);
              }
              return value;
            }

            // Build a destructive iterator for the value list
            function iteratorFor(items) {
              var iterator = {
                next: function() {
                  var value = items.shift();
                  return { done: value === undefined, value: value };
                }
              };

              if (support.iterable) {
                iterator[Symbol.iterator] = function() {
                  return iterator;
                };
              }

              return iterator;
            }

            function Headers(headers) {
              this.map = {};

              if (headers instanceof Headers) {
                headers.forEach(function(value, name) {
                  this.append(name, value);
                }, this);
              } else if (Array.isArray(headers)) {
                headers.forEach(function(header) {
                  this.append(header[0], header[1]);
                }, this);
              } else if (headers) {
                Object.getOwnPropertyNames(headers).forEach(function(name) {
                  this.append(name, headers[name]);
                }, this);
              }
            }

            Headers.prototype.append = function(name, value) {
              name = normalizeName(name);
              value = normalizeValue(value);
              var oldValue = this.map[name];
              this.map[name] = oldValue ? oldValue + ',' + value : value;
            };

            Headers.prototype['delete'] = function(name) {
              delete this.map[normalizeName(name)];
            };

            Headers.prototype.get = function(name) {
              name = normalizeName(name);
              return this.has(name) ? this.map[name] : null;
            };

            Headers.prototype.has = function(name) {
              return this.map.hasOwnProperty(normalizeName(name));
            };

            Headers.prototype.set = function(name, value) {
              this.map[normalizeName(name)] = normalizeValue(value);
            };

            Headers.prototype.forEach = function(callback, thisArg) {
              for (var name in this.map) {
                if (this.map.hasOwnProperty(name)) {
                  callback.call(thisArg, this.map[name], name, this);
                }
              }
            };

            Headers.prototype.keys = function() {
              var items = [];
              this.forEach(function(value, name) {
                items.push(name);
              });
              return iteratorFor(items);
            };

            Headers.prototype.values = function() {
              var items = [];
              this.forEach(function(value) {
                items.push(value);
              });
              return iteratorFor(items);
            };

            Headers.prototype.entries = function() {
              var items = [];
              this.forEach(function(value, name) {
                items.push([name, value]);
              });
              return iteratorFor(items);
            };

            if (support.iterable) {
              Headers.prototype[Symbol.iterator] = Headers.prototype.entries;
            }

            function consumed(body) {
              if (body.bodyUsed) {
                return Promise.reject(new TypeError('Already read'));
              }
              body.bodyUsed = true;
            }

            function fileReaderReady(reader) {
              return new Promise(function(resolve, reject) {
                reader.onload = function() {
                  resolve(reader.result);
                };
                reader.onerror = function() {
                  reject(reader.error);
                };
              });
            }

            function readBlobAsArrayBuffer(blob) {
              var reader = new FileReader();
              var promise = fileReaderReady(reader);
              reader.readAsArrayBuffer(blob);
              return promise;
            }

            function readBlobAsText(blob) {
              var reader = new FileReader();
              var promise = fileReaderReady(reader);
              reader.readAsText(blob);
              return promise;
            }

            function readArrayBufferAsText(buf) {
              var view = new Uint8Array(buf);
              var chars = new Array(view.length);

              for (var i = 0; i < view.length; i++) {
                chars[i] = String.fromCharCode(view[i]);
              }
              return chars.join('');
            }

            function bufferClone(buf) {
              if (buf.slice) {
                return buf.slice(0);
              } else {
                var view = new Uint8Array(buf.byteLength);
                view.set(new Uint8Array(buf));
                return view.buffer;
              }
            }

            function Body() {
              this.bodyUsed = false;

              this._initBody = function(body) {
                this._bodyInit = body;
                if (!body) {
                  this._bodyText = '';
                } else if (typeof body === 'string') {
                  this._bodyText = body;
                } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {
                  this._bodyBlob = body;
                } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {
                  this._bodyFormData = body;
                } else if (
                  support.searchParams &&
                  URLSearchParams.prototype.isPrototypeOf(body)
                ) {
                  this._bodyText = body.toString();
                } else if (support.arrayBuffer && support.blob && isDataView(body)) {
                  this._bodyArrayBuffer = bufferClone(body.buffer);
                  // IE 10-11 can't handle a DataView body.
                  this._bodyInit = new Blob([this._bodyArrayBuffer]);
                } else if (
                  support.arrayBuffer &&
                  (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))
                ) {
                  this._bodyArrayBuffer = bufferClone(body);
                } else {
                  throw new Error('unsupported BodyInit type');
                }

                if (!this.headers.get('content-type')) {
                  if (typeof body === 'string') {
                    this.headers.set('content-type', 'text/plain;charset=UTF-8');
                  } else if (this._bodyBlob && this._bodyBlob.type) {
                    this.headers.set('content-type', this._bodyBlob.type);
                  } else if (
                    support.searchParams &&
                    URLSearchParams.prototype.isPrototypeOf(body)
                  ) {
                    this.headers.set(
                      'content-type',
                      'application/x-www-form-urlencoded;charset=UTF-8'
                    );
                  }
                }
              };

              if (support.blob) {
                this.blob = function() {
                  var rejected = consumed(this);
                  if (rejected) {
                    return rejected;
                  }

                  if (this._bodyBlob) {
                    return Promise.resolve(this._bodyBlob);
                  } else if (this._bodyArrayBuffer) {
                    return Promise.resolve(new Blob([this._bodyArrayBuffer]));
                  } else if (this._bodyFormData) {
                    throw new Error('could not read FormData body as blob');
                  } else {
                    return Promise.resolve(new Blob([this._bodyText]));
                  }
                };

                this.arrayBuffer = function() {
                  if (this._bodyArrayBuffer) {
                    return consumed(this) || Promise.resolve(this._bodyArrayBuffer);
                  } else {
                    return this.blob().then(readBlobAsArrayBuffer);
                  }
                };
              }

              this.text = function() {
                var rejected = consumed(this);
                if (rejected) {
                  return rejected;
                }

                if (this._bodyBlob) {
                  return readBlobAsText(this._bodyBlob);
                } else if (this._bodyArrayBuffer) {
                  return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer));
                } else if (this._bodyFormData) {
                  throw new Error('could not read FormData body as text');
                } else {
                  return Promise.resolve(this._bodyText);
                }
              };

              if (support.formData) {
                this.formData = function() {
                  return this.text().then(decode);
                };
              }

              this.json = function() {
                return this.text().then(JSON.parse);
              };

              return this;
            }

            // HTTP methods whose capitalization should be normalized
            var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];

            function normalizeMethod(method) {
              var upcased = method.toUpperCase();
              return methods.indexOf(upcased) > -1 ? upcased : method;
            }

            function Request(input, options) {
              options = options || {};
              var body = options.body;

              if (input instanceof Request) {
                if (input.bodyUsed) {
                  throw new TypeError('Already read');
                }
                this.url = input.url;
                this.credentials = input.credentials;
                if (!options.headers) {
                  this.headers = new Headers(input.headers);
                }
                this.method = input.method;
                this.mode = input.mode;
                if (!body && input._bodyInit != null) {
                  body = input._bodyInit;
                  input.bodyUsed = true;
                }
              } else {
                this.url = String(input);
              }

              this.credentials = options.credentials || this.credentials || 'omit';
              if (options.headers || !this.headers) {
                this.headers = new Headers(options.headers);
              }
              this.method = normalizeMethod(options.method || this.method || 'GET');
              this.mode = options.mode || this.mode || null;
              this.referrer = null;

              if ((this.method === 'GET' || this.method === 'HEAD') && body) {
                throw new TypeError('Body not allowed for GET or HEAD requests');
              }
              this._initBody(body);
            }

            Request.prototype.clone = function() {
              return new Request(this, { body: this._bodyInit });
            };

            function decode(body) {
              var form = new FormData();
              body
                .trim()
                .split('&')
                .forEach(function(bytes) {
                  if (bytes) {
                    var split = bytes.split('=');
                    var name = split.shift().replace(/\+/g, ' ');
                    var value = split.join('=').replace(/\+/g, ' ');
                    form.append(decodeURIComponent(name), decodeURIComponent(value));
                  }
                });
              return form;
            }

            function parseHeaders(rawHeaders) {
              var headers = new Headers();
              // Replace instances of \r\n and \n followed by at least one space or horizontal tab with a space
              // https://tools.ietf.org/html/rfc7230#section-3.2
              var preProcessedHeaders = rawHeaders.replace(/\r?\n[\t ]+/g, ' ');
              preProcessedHeaders.split(/\r?\n/).forEach(function(line) {
                var parts = line.split(':');
                var key = parts.shift().trim();
                if (key) {
                  var value = parts.join(':').trim();
                  headers.append(key, value);
                }
              });
              return headers;
            }

            Body.call(Request.prototype);

            function Response(bodyInit, options) {
              if (!options) {
                options = {};
              }

              this.type = 'default';
              this.status = options.status === undefined ? 200 : options.status;
              this.ok = this.status >= 200 && this.status < 300;
              this.statusText = 'statusText' in options ? options.statusText : 'OK';
              this.headers = new Headers(options.headers);
              this.url = options.url || '';
              this._initBody(bodyInit);
            }

            Body.call(Response.prototype);

            Response.prototype.clone = function() {
              return new Response(this._bodyInit, {
                status: this.status,
                statusText: this.statusText,
                headers: new Headers(this.headers),
                url: this.url
              });
            };

            Response.error = function() {
              var response = new Response(null, { status: 0, statusText: '' });
              response.type = 'error';
              return response;
            };

            var redirectStatuses = [301, 302, 303, 307, 308];

            Response.redirect = function(url, status) {
              if (redirectStatuses.indexOf(status) === -1) {
                throw new RangeError('Invalid status code');
              }

              return new Response(null, { status: status, headers: { location: url } });
            };

            self.Headers = Headers;
            self.Request = Request;
            self.Response = Response;

            self.fetch = function(input, init) {
              return new Promise(function(resolve, reject) {
                var request = new Request(input, init);
                var xhr = new XMLHttpRequest();

                xhr.onload = function() {
                  var options = {
                    status: xhr.status,
                    statusText: xhr.statusText,
                    headers: parseHeaders(xhr.getAllResponseHeaders() || '')
                  };
                  options.url =
                    'responseURL' in xhr
                      ? xhr.responseURL
                      : options.headers.get('X-Request-URL');
                  var body = 'response' in xhr ? xhr.response : xhr.responseText;
                  resolve(new Response(body, options));
                };

                xhr.onerror = function() {
                  reject(new TypeError('Network request failed'));
                };

                xhr.ontimeout = function() {
                  reject(new TypeError('Network request failed'));
                };

                xhr.open(request.method, request.url, true);

                if (request.credentials === 'include') {
                  xhr.withCredentials = true;
                } else if (request.credentials === 'omit') {
                  xhr.withCredentials = false;
                }

                if ('responseType' in xhr && support.blob) {
                  xhr.responseType = 'blob';
                }

                request.headers.forEach(function(value, name) {
                  xhr.setRequestHeader(name, value);
                });

                xhr.send(
                  typeof request._bodyInit === 'undefined' ? null : request._bodyInit
                );
              });
            };
            self.fetch.polyfill = true;
          })(typeof self !== 'undefined' ? self : this);
        },
        {}
      ],
      262: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_n95ye216f = (function() {
            var path = '/Users/outofambit/src/p5.js/src/accessibility/color_namer.js';
            var hash = '9de9002bbdcc620e74a0cd01a400f2fb285fbb1d';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/accessibility/color_namer.js',
              statementMap: {
                '0': { start: { line: 15, column: 24 }, end: { line: 40, column: 1 } },
                '1': { start: { line: 43, column: 20 }, end: { line: 620, column: 1 } },
                '2': { start: { line: 626, column: 2 }, end: { line: 655, column: 3 } },
                '3': { start: { line: 627, column: 4 }, end: { line: 627, column: 38 } },
                '4': { start: { line: 628, column: 14 }, end: { line: 628, column: 41 } },
                '5': { start: { line: 629, column: 17 }, end: { line: 629, column: 31 } },
                '6': { start: { line: 630, column: 4 }, end: { line: 630, column: 36 } },
                '7': { start: { line: 632, column: 4 }, end: { line: 637, column: 5 } },
                '8': { start: { line: 633, column: 6 }, end: { line: 633, column: 20 } },
                '9': { start: { line: 635, column: 11 }, end: { line: 637, column: 5 } },
                '10': { start: { line: 636, column: 6 }, end: { line: 636, column: 20 } },
                '11': { start: { line: 639, column: 4 }, end: { line: 654, column: 5 } },
                '12': { start: { line: 640, column: 6 }, end: { line: 640, column: 32 } },
                '13': { start: { line: 642, column: 6 }, end: { line: 646, column: 7 } },
                '14': { start: { line: 644, column: 8 }, end: { line: 644, column: 22 } },
                '15': { start: { line: 645, column: 8 }, end: { line: 645, column: 28 } },
                '16': { start: { line: 647, column: 6 }, end: { line: 647, column: 36 } },
                '17': { start: { line: 649, column: 6 }, end: { line: 653, column: 7 } },
                '18': { start: { line: 650, column: 8 }, end: { line: 650, column: 20 } },
                '19': { start: { line: 652, column: 8 }, end: { line: 652, column: 27 } },
                '20': { start: { line: 657, column: 2 }, end: { line: 657, column: 24 } },
                '21': { start: { line: 659, column: 2 }, end: { line: 667, column: 3 } },
                '22': { start: { line: 659, column: 15 }, end: { line: 659, column: 29 } },
                '23': { start: { line: 660, column: 4 }, end: { line: 666, column: 5 } },
                '24': { start: { line: 661, column: 6 }, end: { line: 661, column: 17 } },
                '25': { start: { line: 662, column: 11 }, end: { line: 666, column: 5 } },
                '26': { start: { line: 663, column: 6 }, end: { line: 663, column: 19 } },
                '27': { start: { line: 665, column: 6 }, end: { line: 665, column: 17 } },
                '28': { start: { line: 670, column: 2 }, end: { line: 701, column: 3 } },
                '29': { start: { line: 672, column: 4 }, end: { line: 674, column: 5 } },
                '30': { start: { line: 672, column: 17 }, end: { line: 672, column: 18 } },
                '31': { start: { line: 673, column: 6 }, end: { line: 673, column: 66 } },
                '32': { start: { line: 676, column: 4 }, end: { line: 688, column: 5 } },
                '33': { start: { line: 676, column: 17 }, end: { line: 676, column: 18 } },
                '34': { start: { line: 677, column: 6 }, end: { line: 687, column: 7 } },
                '35': { start: { line: 682, column: 8 }, end: { line: 682, column: 44 } },
                '36': { start: { line: 683, column: 8 }, end: { line: 683, column: 14 } },
                '37': { start: { line: 686, column: 8 }, end: { line: 686, column: 28 } },
                '38': { start: { line: 691, column: 4 }, end: { line: 700, column: 5 } },
                '39': { start: { line: 691, column: 17 }, end: { line: 691, column: 18 } },
                '40': { start: { line: 692, column: 6 }, end: { line: 699, column: 7 } },
                '41': { start: { line: 697, column: 8 }, end: { line: 697, column: 40 } },
                '42': { start: { line: 698, column: 8 }, end: { line: 698, column: 14 } },
                '43': { start: { line: 702, column: 2 }, end: { line: 702, column: 19 } },
                '44': { start: { line: 706, column: 0 }, end: { line: 713, column: 2 } },
                '45': { start: { line: 708, column: 12 }, end: { line: 708, column: 45 } },
                '46': { start: { line: 710, column: 2 }, end: { line: 710, column: 20 } },
                '47': { start: { line: 712, column: 2 }, end: { line: 712, column: 51 } }
              },
              fnMap: {
                '0': {
                  name: '_calculateColor',
                  decl: { start: { line: 623, column: 9 }, end: { line: 623, column: 24 } },
                  loc: { start: { line: 623, column: 30 }, end: { line: 703, column: 1 } },
                  line: 623
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: {
                    start: { line: 706, column: 29 },
                    end: { line: 706, column: 30 }
                  },
                  loc: { start: { line: 706, column: 43 }, end: { line: 713, column: 1 } },
                  line: 706
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 626, column: 2 }, end: { line: 655, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 626, column: 2 }, end: { line: 655, column: 3 } },
                    { start: { line: 626, column: 2 }, end: { line: 655, column: 3 } }
                  ],
                  line: 626
                },
                '1': {
                  loc: { start: { line: 632, column: 4 }, end: { line: 637, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 632, column: 4 }, end: { line: 637, column: 5 } },
                    { start: { line: 632, column: 4 }, end: { line: 637, column: 5 } }
                  ],
                  line: 632
                },
                '2': {
                  loc: { start: { line: 635, column: 11 }, end: { line: 637, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 635, column: 11 }, end: { line: 637, column: 5 } },
                    { start: { line: 635, column: 11 }, end: { line: 637, column: 5 } }
                  ],
                  line: 635
                },
                '3': {
                  loc: { start: { line: 635, column: 15 }, end: { line: 635, column: 50 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 635, column: 15 }, end: { line: 635, column: 31 } },
                    { start: { line: 635, column: 35 }, end: { line: 635, column: 50 } }
                  ],
                  line: 635
                },
                '4': {
                  loc: { start: { line: 639, column: 4 }, end: { line: 654, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 639, column: 4 }, end: { line: 654, column: 5 } },
                    { start: { line: 639, column: 4 }, end: { line: 654, column: 5 } }
                  ],
                  line: 639
                },
                '5': {
                  loc: { start: { line: 642, column: 6 }, end: { line: 646, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 642, column: 6 }, end: { line: 646, column: 7 } },
                    { start: { line: 642, column: 6 }, end: { line: 646, column: 7 } }
                  ],
                  line: 642
                },
                '6': {
                  loc: { start: { line: 649, column: 6 }, end: { line: 653, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 649, column: 6 }, end: { line: 653, column: 7 } },
                    { start: { line: 649, column: 6 }, end: { line: 653, column: 7 } }
                  ],
                  line: 649
                },
                '7': {
                  loc: { start: { line: 660, column: 4 }, end: { line: 666, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 660, column: 4 }, end: { line: 666, column: 5 } },
                    { start: { line: 660, column: 4 }, end: { line: 666, column: 5 } }
                  ],
                  line: 660
                },
                '8': {
                  loc: { start: { line: 662, column: 11 }, end: { line: 666, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 662, column: 11 }, end: { line: 666, column: 5 } },
                    { start: { line: 662, column: 11 }, end: { line: 666, column: 5 } }
                  ],
                  line: 662
                },
                '9': {
                  loc: { start: { line: 662, column: 15 }, end: { line: 662, column: 45 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 662, column: 15 }, end: { line: 662, column: 28 } },
                    { start: { line: 662, column: 32 }, end: { line: 662, column: 45 } }
                  ],
                  line: 662
                },
                '10': {
                  loc: { start: { line: 670, column: 2 }, end: { line: 701, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 670, column: 2 }, end: { line: 701, column: 3 } },
                    { start: { line: 670, column: 2 }, end: { line: 701, column: 3 } }
                  ],
                  line: 670
                },
                '11': {
                  loc: { start: { line: 670, column: 6 }, end: { line: 670, column: 50 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 670, column: 6 }, end: { line: 670, column: 18 } },
                    { start: { line: 670, column: 22 }, end: { line: 670, column: 34 } },
                    { start: { line: 670, column: 38 }, end: { line: 670, column: 50 } }
                  ],
                  line: 670
                },
                '12': {
                  loc: { start: { line: 677, column: 6 }, end: { line: 687, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 677, column: 6 }, end: { line: 687, column: 7 } },
                    { start: { line: 677, column: 6 }, end: { line: 687, column: 7 } }
                  ],
                  line: 677
                },
                '13': {
                  loc: { start: { line: 678, column: 8 }, end: { line: 680, column: 47 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 678, column: 8 }, end: { line: 678, column: 47 } },
                    { start: { line: 679, column: 8 }, end: { line: 679, column: 47 } },
                    { start: { line: 680, column: 8 }, end: { line: 680, column: 47 } }
                  ],
                  line: 678
                },
                '14': {
                  loc: { start: { line: 692, column: 6 }, end: { line: 699, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 692, column: 6 }, end: { line: 699, column: 7 } },
                    { start: { line: 692, column: 6 }, end: { line: 699, column: 7 } }
                  ],
                  line: 692
                },
                '15': {
                  loc: { start: { line: 693, column: 8 }, end: { line: 695, column: 35 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 693, column: 8 }, end: { line: 693, column: 35 } },
                    { start: { line: 694, column: 8 }, end: { line: 694, column: 35 } },
                    { start: { line: 695, column: 8 }, end: { line: 695, column: 35 } }
                  ],
                  line: 693
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0
              },
              f: { '0': 0, '1': 0 },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0, 0],
                '12': [0, 0],
                '13': [0, 0, 0],
                '14': [0, 0],
                '15': [0, 0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '9de9002bbdcc620e74a0cd01a400f2fb285fbb1d'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.function.name');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.regexp.exec');
          _dereq_('core-js/modules/es.regexp.to-string');
          _dereq_('core-js/modules/es.string.split');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          var _color_conversion = _interopRequireDefault(
            _dereq_('../color/color_conversion')
          );
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }

          //stores the original hsb values
          var originalHSB;

          //stores values for color name exceptions
          var colorExceptions = (cov_n95ye216f.s[0]++,
          [
            {
              h: 0,
              s: 0,
              b: 0.8275,
              name: 'gray'
            },

            {
              h: 0,
              s: 0,
              b: 0.8627,
              name: 'gray'
            },

            {
              h: 0,
              s: 0,
              b: 0.7529,
              name: 'gray'
            },

            {
              h: 0.0167,
              s: 0.1176,
              b: 1,
              name: 'light pink'
            }
          ]);

          //stores values for color names
          var colorLookUp = (cov_n95ye216f.s[1]++,
          [
            {
              h: 0,
              s: 0,
              b: 0,
              name: 'black'
            },

            {
              h: 0,
              s: 0,
              b: 0.5,
              name: 'gray'
            },

            {
              h: 0,
              s: 0,
              b: 1,
              name: 'white'
            },

            {
              h: 0,
              s: 0.5,
              b: 0.5,
              name: 'dark maroon'
            },

            {
              h: 0,
              s: 0.5,
              b: 1,
              name: 'salmon pink'
            },

            {
              h: 0,
              s: 1,
              b: 0,
              name: 'black'
            },

            {
              h: 0,
              s: 1,
              b: 0.5,
              name: 'dark red'
            },

            {
              h: 0,
              s: 1,
              b: 1,
              name: 'red'
            },

            {
              h: 5,
              s: 0,
              b: 1,
              name: 'very light peach'
            },

            {
              h: 5,
              s: 0.5,
              b: 0.5,
              name: 'brown'
            },

            {
              h: 5,
              s: 0.5,
              b: 1,
              name: 'peach'
            },

            {
              h: 5,
              s: 1,
              b: 0.5,
              name: 'brick red'
            },

            {
              h: 5,
              s: 1,
              b: 1,
              name: 'crimson'
            },

            {
              h: 10,
              s: 0,
              b: 1,
              name: 'light peach'
            },

            {
              h: 10,
              s: 0.5,
              b: 0.5,
              name: 'brown'
            },

            {
              h: 10,
              s: 0.5,
              b: 1,
              name: 'light orange'
            },

            {
              h: 10,
              s: 1,
              b: 0.5,
              name: 'brown'
            },

            {
              h: 10,
              s: 1,
              b: 1,
              name: 'orange'
            },

            {
              h: 15,
              s: 0,
              b: 1,
              name: 'very light yellow'
            },

            {
              h: 15,
              s: 0.5,
              b: 0.5,
              name: 'olive green'
            },

            {
              h: 15,
              s: 0.5,
              b: 1,
              name: 'light yellow'
            },

            {
              h: 15,
              s: 1,
              b: 0,
              name: 'dark olive green'
            },

            {
              h: 15,
              s: 1,
              b: 0.5,
              name: 'olive green'
            },

            {
              h: 15,
              s: 1,
              b: 1,
              name: 'yellow'
            },

            {
              h: 20,
              s: 0,
              b: 1,
              name: 'very light yellow'
            },

            {
              h: 20,
              s: 0.5,
              b: 0.5,
              name: 'olive green'
            },

            {
              h: 20,
              s: 0.5,
              b: 1,
              name: 'light yellow green'
            },

            {
              h: 20,
              s: 1,
              b: 0,
              name: 'dark olive green'
            },

            {
              h: 20,
              s: 1,
              b: 0.5,
              name: 'dark yellow green'
            },

            {
              h: 20,
              s: 1,
              b: 1,
              name: 'yellow green'
            },

            {
              h: 25,
              s: 0.5,
              b: 0.5,
              name: 'dark yellow green'
            },

            {
              h: 25,
              s: 0.5,
              b: 1,
              name: 'light green'
            },

            {
              h: 25,
              s: 1,
              b: 0.5,
              name: 'dark green'
            },

            {
              h: 25,
              s: 1,
              b: 1,
              name: 'green'
            },

            {
              h: 30,
              s: 0.5,
              b: 1,
              name: 'light green'
            },

            {
              h: 30,
              s: 1,
              b: 0.5,
              name: 'dark green'
            },

            {
              h: 30,
              s: 1,
              b: 1,
              name: 'green'
            },

            {
              h: 35,
              s: 0,
              b: 0.5,
              name: 'light green'
            },

            {
              h: 35,
              s: 0,
              b: 1,
              name: 'very light green'
            },

            {
              h: 35,
              s: 0.5,
              b: 0.5,
              name: 'dark green'
            },

            {
              h: 35,
              s: 0.5,
              b: 1,
              name: 'light green'
            },

            {
              h: 35,
              s: 1,
              b: 0,
              name: 'very dark green'
            },

            {
              h: 35,
              s: 1,
              b: 0.5,
              name: 'dark green'
            },

            {
              h: 35,
              s: 1,
              b: 1,
              name: 'green'
            },

            {
              h: 40,
              s: 0,
              b: 1,
              name: 'very light green'
            },

            {
              h: 40,
              s: 0.5,
              b: 0.5,
              name: 'dark green'
            },

            {
              h: 40,
              s: 0.5,
              b: 1,
              name: 'light green'
            },

            {
              h: 40,
              s: 1,
              b: 0.5,
              name: 'dark green'
            },

            {
              h: 40,
              s: 1,
              b: 1,
              name: 'green'
            },

            {
              h: 45,
              s: 0.5,
              b: 1,
              name: 'light turquoise'
            },

            {
              h: 45,
              s: 1,
              b: 0.5,
              name: 'dark turquoise'
            },

            {
              h: 45,
              s: 1,
              b: 1,
              name: 'turquoise'
            },

            {
              h: 50,
              s: 0,
              b: 1,
              name: 'light sky blue'
            },

            {
              h: 50,
              s: 0.5,
              b: 0.5,
              name: 'dark cyan'
            },

            {
              h: 50,
              s: 0.5,
              b: 1,
              name: 'light cyan'
            },

            {
              h: 50,
              s: 1,
              b: 0.5,
              name: 'dark cyan'
            },

            {
              h: 50,
              s: 1,
              b: 1,
              name: 'cyan'
            },

            {
              h: 55,
              s: 0,
              b: 1,
              name: 'light sky blue'
            },

            {
              h: 55,
              s: 0.5,
              b: 1,
              name: 'light sky blue'
            },

            {
              h: 55,
              s: 1,
              b: 0.5,
              name: 'dark blue'
            },

            {
              h: 55,
              s: 1,
              b: 1,
              name: 'sky blue'
            },

            {
              h: 60,
              s: 0,
              b: 0.5,
              name: 'gray'
            },

            {
              h: 60,
              s: 0,
              b: 1,
              name: 'very light blue'
            },

            {
              h: 60,
              s: 0.5,
              b: 0.5,
              name: 'blue'
            },

            {
              h: 60,
              s: 0.5,
              b: 1,
              name: 'light blue'
            },

            {
              h: 60,
              s: 1,
              b: 0.5,
              name: 'navy blue'
            },

            {
              h: 60,
              s: 1,
              b: 1,
              name: 'blue'
            },

            {
              h: 65,
              s: 0,
              b: 1,
              name: 'lavender'
            },

            {
              h: 65,
              s: 0.5,
              b: 0.5,
              name: 'navy blue'
            },

            {
              h: 65,
              s: 0.5,
              b: 1,
              name: 'light purple'
            },

            {
              h: 65,
              s: 1,
              b: 0.5,
              name: 'dark navy blue'
            },

            {
              h: 65,
              s: 1,
              b: 1,
              name: 'blue'
            },

            {
              h: 70,
              s: 0,
              b: 1,
              name: 'lavender'
            },

            {
              h: 70,
              s: 0.5,
              b: 0.5,
              name: 'navy blue'
            },

            {
              h: 70,
              s: 0.5,
              b: 1,
              name: 'lavender blue'
            },

            {
              h: 70,
              s: 1,
              b: 0.5,
              name: 'dark navy blue'
            },

            {
              h: 70,
              s: 1,
              b: 1,
              name: 'blue'
            },

            {
              h: 75,
              s: 0.5,
              b: 1,
              name: 'lavender'
            },

            {
              h: 75,
              s: 1,
              b: 0.5,
              name: 'dark purple'
            },

            {
              h: 75,
              s: 1,
              b: 1,
              name: 'purple'
            },

            {
              h: 80,
              s: 0.5,
              b: 1,
              name: 'pinkish purple'
            },

            {
              h: 80,
              s: 1,
              b: 0.5,
              name: 'dark purple'
            },

            {
              h: 80,
              s: 1,
              b: 1,
              name: 'purple'
            },

            {
              h: 85,
              s: 0,
              b: 1,
              name: 'light pink'
            },

            {
              h: 85,
              s: 0.5,
              b: 0.5,
              name: 'purple'
            },

            {
              h: 85,
              s: 0.5,
              b: 1,
              name: 'light fuchsia'
            },

            {
              h: 85,
              s: 1,
              b: 0.5,
              name: 'dark fuchsia'
            },

            {
              h: 85,
              s: 1,
              b: 1,
              name: 'fuchsia'
            },

            {
              h: 90,
              s: 0.5,
              b: 0.5,
              name: 'dark fuchsia'
            },

            {
              h: 90,
              s: 0.5,
              b: 1,
              name: 'hot pink'
            },

            {
              h: 90,
              s: 1,
              b: 0.5,
              name: 'dark fuchsia'
            },

            {
              h: 90,
              s: 1,
              b: 1,
              name: 'fuchsia'
            },

            {
              h: 95,
              s: 0,
              b: 1,
              name: 'pink'
            },

            {
              h: 95,
              s: 0.5,
              b: 1,
              name: 'light pink'
            },

            {
              h: 95,
              s: 1,
              b: 0.5,
              name: 'dark magenta'
            },

            {
              h: 95,
              s: 1,
              b: 1,
              name: 'magenta'
            }
          ]);

          //returns text with color name
          function _calculateColor(hsb) {
            cov_n95ye216f.f[0]++;
            var colortext;
            //round hue
            cov_n95ye216f.s[2]++;
            if (hsb[0] !== 0) {
              cov_n95ye216f.b[0][0]++;
              cov_n95ye216f.s[3]++;
              hsb[0] = Math.round(hsb[0] * 100);
              var hue = (cov_n95ye216f.s[4]++, hsb[0].toString().split(''));
              var last = (cov_n95ye216f.s[5]++, hue.length - 1);
              cov_n95ye216f.s[6]++;
              hue[last] = parseInt(hue[last]);
              //if last digit of hue is < 2.5 make it 0
              cov_n95ye216f.s[7]++;
              if (hue[last] < 2.5) {
                cov_n95ye216f.b[1][0]++;
                cov_n95ye216f.s[8]++;
                hue[last] = 0;
                //if last digit of hue is >= 2.5 and less than 7.5 make it 5
              } else {
                cov_n95ye216f.b[1][1]++;
                cov_n95ye216f.s[9]++;
                if (
                  (cov_n95ye216f.b[3][0]++, hue[last] >= 2.5) &&
                  (cov_n95ye216f.b[3][1]++, hue[last] < 7.5)
                ) {
                  cov_n95ye216f.b[2][0]++;
                  cov_n95ye216f.s[10]++;
                  hue[last] = 5;
                } else {
                  cov_n95ye216f.b[2][1]++;
                }
              }
              //if hue only has two digits
              cov_n95ye216f.s[11]++;
              if (hue.length === 2) {
                cov_n95ye216f.b[4][0]++;
                cov_n95ye216f.s[12]++;
                hue[0] = parseInt(hue[0]);
                //if last is greater than 7.5
                cov_n95ye216f.s[13]++;
                if (hue[last] >= 7.5) {
                  cov_n95ye216f.b[5][0]++;
                  cov_n95ye216f.s[14]++;
                  //add one to the tens
                  hue[last] = 0;
                  cov_n95ye216f.s[15]++;
                  hue[0] = hue[0] + 1;
                } else {
                  cov_n95ye216f.b[5][1]++;
                }
                cov_n95ye216f.s[16]++;
                hsb[0] = hue[0] * 10 + hue[1];
              } else {
                cov_n95ye216f.b[4][1]++;
                cov_n95ye216f.s[17]++;
                if (hue[last] >= 7.5) {
                  cov_n95ye216f.b[6][0]++;
                  cov_n95ye216f.s[18]++;
                  hsb[0] = 10;
                } else {
                  cov_n95ye216f.b[6][1]++;
                  cov_n95ye216f.s[19]++;
                  hsb[0] = hue[last];
                }
              }
            } else {
              cov_n95ye216f.b[0][1]++;
            }
            //map brightness from 0 to 1
            cov_n95ye216f.s[20]++;
            hsb[2] = hsb[2] / 255;
            //round saturation and brightness
            cov_n95ye216f.s[21]++;
            for (var i = (cov_n95ye216f.s[22]++, hsb.length - 1); i >= 1; i--) {
              cov_n95ye216f.s[23]++;
              if (hsb[i] <= 0.25) {
                cov_n95ye216f.b[7][0]++;
                cov_n95ye216f.s[24]++;
                hsb[i] = 0;
              } else {
                cov_n95ye216f.b[7][1]++;
                cov_n95ye216f.s[25]++;
                if (
                  (cov_n95ye216f.b[9][0]++, hsb[i] > 0.25) &&
                  (cov_n95ye216f.b[9][1]++, hsb[i] < 0.75)
                ) {
                  cov_n95ye216f.b[8][0]++;
                  cov_n95ye216f.s[26]++;
                  hsb[i] = 0.5;
                } else {
                  cov_n95ye216f.b[8][1]++;
                  cov_n95ye216f.s[27]++;
                  hsb[i] = 1;
                }
              }
            }
            //after rounding, if the values are hue 0, saturation 0 and brightness 1
            //look at color exceptions which includes several tones from white to gray
            cov_n95ye216f.s[28]++;
            if (
              (cov_n95ye216f.b[11][0]++, hsb[0] === 0) &&
              (cov_n95ye216f.b[11][1]++, hsb[1] === 0) &&
              (cov_n95ye216f.b[11][2]++, hsb[2] === 1)
            ) {
              cov_n95ye216f.b[10][0]++;
              cov_n95ye216f.s[29]++;
              //round original hsb values
              for (var _i = (cov_n95ye216f.s[30]++, 2); _i >= 0; _i--) {
                cov_n95ye216f.s[31]++;
                originalHSB[_i] = Math.round(originalHSB[_i] * 10000) / 10000;
              }
              //compare with the values in the colorExceptions array
              cov_n95ye216f.s[32]++;
              for (var e = (cov_n95ye216f.s[33]++, 0); e < colorExceptions.length; e++) {
                cov_n95ye216f.s[34]++;
                if (
                  (cov_n95ye216f.b[13][0]++, colorExceptions[e].h === originalHSB[0]) &&
                  (cov_n95ye216f.b[13][1]++, colorExceptions[e].s === originalHSB[1]) &&
                  (cov_n95ye216f.b[13][2]++, colorExceptions[e].b === originalHSB[2])
                ) {
                  cov_n95ye216f.b[12][0]++;
                  cov_n95ye216f.s[35]++;
                  colortext = colorExceptions[e].name;
                  cov_n95ye216f.s[36]++;
                  break;
                } else {
                  cov_n95ye216f.b[12][1]++;
                  cov_n95ye216f.s[37]++;
                  //if there is no match return white
                  colortext = 'white';
                }
              }
            } else {
              cov_n95ye216f.b[10][1]++;
              cov_n95ye216f.s[38]++;
              //otherwise, compare with values in colorLookUp
              for (var _i2 = (cov_n95ye216f.s[39]++, 0); _i2 < colorLookUp.length; _i2++) {
                cov_n95ye216f.s[40]++;
                if (
                  (cov_n95ye216f.b[15][0]++, colorLookUp[_i2].h === hsb[0]) &&
                  (cov_n95ye216f.b[15][1]++, colorLookUp[_i2].s === hsb[1]) &&
                  (cov_n95ye216f.b[15][2]++, colorLookUp[_i2].b === hsb[2])
                ) {
                  cov_n95ye216f.b[14][0]++;
                  cov_n95ye216f.s[41]++;
                  colortext = colorLookUp[_i2].name;
                  cov_n95ye216f.s[42]++;
                  break;
                } else {
                  cov_n95ye216f.b[14][1]++;
                }
              }
            }
            cov_n95ye216f.s[43]++;
            return colortext;
          }

          //gets rgba and returs a color name
          cov_n95ye216f.s[44]++;
          _main.default.prototype._rgbColorName = function(arg) {
            cov_n95ye216f.f[1]++;
            //conversts rgba to hsb
            var hsb = (cov_n95ye216f.s[45]++, _color_conversion.default._rgbaToHSBA(arg));
            //stores hsb in global variable
            cov_n95ye216f.s[46]++;
            originalHSB = hsb;
            //calculate color name
            cov_n95ye216f.s[47]++;
            return _calculateColor([hsb[0], hsb[1], hsb[2]]);
          };
          var _default = _main.default;
          exports.default = _default;
        },
        {
          '../color/color_conversion': 268,
          '../core/main': 283,
          'core-js/modules/es.function.name': 181,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.regexp.exec': 196,
          'core-js/modules/es.regexp.to-string': 197,
          'core-js/modules/es.string.split': 206
        }
      ],
      263: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_iymlm3j1o = (function() {
            var path = '/Users/outofambit/src/p5.js/src/accessibility/describe.js';
            var hash = '7e42c3c7d403ce2a21fe103e47107fd102c274da';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/accessibility/describe.js',
              statementMap: {
                '0': { start: { line: 9, column: 22 }, end: { line: 9, column: 36 } },
                '1': { start: { line: 10, column: 23 }, end: { line: 10, column: 38 } },
                '2': { start: { line: 11, column: 24 }, end: { line: 11, column: 40 } },
                '3': { start: { line: 12, column: 26 }, end: { line: 12, column: 33 } },
                '4': { start: { line: 13, column: 23 }, end: { line: 13, column: 31 } },
                '5': { start: { line: 14, column: 20 }, end: { line: 14, column: 32 } },
                '6': { start: { line: 15, column: 21 }, end: { line: 15, column: 34 } },
                '7': { start: { line: 16, column: 23 }, end: { line: 16, column: 30 } },
                '8': { start: { line: 72, column: 0 }, end: { line: 112, column: 2 } },
                '9': { start: { line: 73, column: 2 }, end: { line: 73, column: 48 } },
                '10': { start: { line: 74, column: 2 }, end: { line: 76, column: 3 } },
                '11': { start: { line: 75, column: 4 }, end: { line: 75, column: 11 } },
                '12': { start: { line: 77, column: 16 }, end: { line: 77, column: 30 } },
                '13': { start: { line: 79, column: 2 }, end: { line: 79, column: 32 } },
                '14': { start: { line: 81, column: 2 }, end: { line: 83, column: 3 } },
                '15': { start: { line: 82, column: 4 }, end: { line: 82, column: 62 } },
                '16': { start: { line: 84, column: 2 }, end: { line: 86, column: 3 } },
                '17': { start: { line: 85, column: 4 }, end: { line: 85, column: 27 } },
                '18': { start: { line: 88, column: 2 }, end: { line: 97, column: 3 } },
                '19': { start: { line: 90, column: 4 }, end: { line: 93, column: 5 } },
                '20': { start: { line: 92, column: 6 }, end: { line: 92, column: 50 } },
                '21': { start: { line: 96, column: 4 }, end: { line: 96, column: 41 } },
                '22': { start: { line: 99, column: 2 }, end: { line: 111, column: 3 } },
                '23': { start: { line: 101, column: 4 }, end: { line: 110, column: 5 } },
                '24': { start: { line: 103, column: 6 }, end: { line: 106, column: 7 } },
                '25': { start: { line: 105, column: 8 }, end: { line: 105, column: 49 } },
                '26': { start: { line: 109, column: 6 }, end: { line: 109, column: 40 } },
                '27': { start: { line: 158, column: 0 }, end: { line: 210, column: 2 } },
                '28': { start: { line: 159, column: 2 }, end: { line: 159, column: 55 } },
                '29': { start: { line: 160, column: 2 }, end: { line: 162, column: 3 } },
                '30': { start: { line: 161, column: 4 }, end: { line: 161, column: 11 } },
                '31': { start: { line: 163, column: 16 }, end: { line: 163, column: 30 } },
                '32': { start: { line: 165, column: 2 }, end: { line: 165, column: 32 } },
                '33': { start: { line: 167, column: 20 }, end: { line: 167, column: 38 } },
                '34': { start: { line: 169, column: 2 }, end: { line: 169, column: 43 } },
                '35': { start: { line: 172, column: 14 }, end: { line: 172, column: 67 } },
                '36': { start: { line: 174, column: 2 }, end: { line: 176, column: 3 } },
                '37': { start: { line: 175, column: 4 }, end: { line: 175, column: 62 } },
                '38': { start: { line: 177, column: 2 }, end: { line: 181, column: 3 } },
                '39': { start: { line: 178, column: 4 }, end: { line: 178, column: 49 } },
                '40': { start: { line: 179, column: 9 }, end: { line: 181, column: 3 } },
                '41': { start: { line: 180, column: 4 }, end: { line: 180, column: 44 } },
                '42': { start: { line: 183, column: 2 }, end: { line: 192, column: 3 } },
                '43': { start: { line: 185, column: 4 }, end: { line: 188, column: 5 } },
                '44': { start: { line: 187, column: 6 }, end: { line: 187, column: 65 } },
                '45': { start: { line: 191, column: 4 }, end: { line: 191, column: 55 } },
                '46': { start: { line: 194, column: 2 }, end: { line: 209, column: 3 } },
                '47': { start: { line: 195, column: 4 }, end: { line: 197, column: 5 } },
                '48': { start: { line: 196, column: 6 }, end: { line: 196, column: 43 } },
                '49': { start: { line: 199, column: 4 }, end: { line: 208, column: 5 } },
                '50': { start: { line: 201, column: 6 }, end: { line: 204, column: 7 } },
                '51': { start: { line: 203, column: 8 }, end: { line: 203, column: 64 } },
                '52': { start: { line: 207, column: 6 }, end: { line: 207, column: 54 } },
                '53': { start: { line: 220, column: 2 }, end: { line: 222, column: 3 } },
                '54': { start: { line: 221, column: 4 }, end: { line: 221, column: 67 } },
                '55': { start: { line: 224, column: 2 }, end: { line: 233, column: 3 } },
                '56': { start: { line: 232, column: 4 }, end: { line: 232, column: 22 } },
                '57': { start: { line: 234, column: 2 }, end: { line: 234, column: 14 } },
                '58': { start: { line: 242, column: 0 }, end: { line: 306, column: 2 } },
                '59': { start: { line: 243, column: 16 }, end: { line: 243, column: 30 } },
                '60': { start: { line: 244, column: 2 }, end: { line: 305, column: 3 } },
                '61': { start: { line: 246, column: 4 }, end: { line: 267, column: 5 } },
                '62': { start: { line: 248, column: 17 }, end: { line: 248, column: 144 } },
                '63': { start: { line: 249, column: 6 }, end: { line: 257, column: 7 } },
                '64': { start: { line: 251, column: 8 }, end: { line: 251, column: 66 } },
                '65': { start: { line: 254, column: 8 }, end: { line: 256, column: 51 } },
                '66': { start: { line: 261, column: 6 }, end: { line: 266, column: 10 } },
                '67': { start: { line: 269, column: 4 }, end: { line: 271, column: 6 } },
                '68': { start: { line: 272, column: 4 }, end: { line: 272, column: 48 } },
                '69': { start: { line: 273, column: 4 }, end: { line: 273, column: 11 } },
                '70': { start: { line: 274, column: 9 }, end: { line: 305, column: 3 } },
                '71': { start: { line: 276, column: 4 }, end: { line: 299, column: 5 } },
                '72': { start: { line: 277, column: 17 }, end: { line: 277, column: 112 } },
                '73': { start: { line: 279, column: 6 }, end: { line: 289, column: 7 } },
                '74': { start: { line: 281, column: 8 }, end: { line: 283, column: 48 } },
                '75': { start: { line: 286, column: 8 }, end: { line: 288, column: 51 } },
                '76': { start: { line: 290, column: 11 }, end: { line: 299, column: 5 } },
                '77': { start: { line: 293, column: 6 }, end: { line: 298, column: 10 } },
                '78': { start: { line: 300, column: 4 }, end: { line: 302, column: 6 } },
                '79': { start: { line: 303, column: 4 }, end: { line: 303, column: 45 } },
                '80': { start: { line: 304, column: 4 }, end: { line: 304, column: 11 } },
                '81': { start: { line: 314, column: 2 }, end: { line: 316, column: 3 } },
                '82': { start: { line: 315, column: 4 }, end: { line: 315, column: 68 } },
                '83': { start: { line: 318, column: 2 }, end: { line: 325, column: 3 } },
                '84': { start: { line: 320, column: 4 }, end: { line: 320, column: 35 } },
                '85': { start: { line: 321, column: 9 }, end: { line: 325, column: 3 } },
                '86': { start: { line: 324, column: 4 }, end: { line: 324, column: 22 } },
                '87': { start: { line: 326, column: 2 }, end: { line: 326, column: 14 } },
                '88': { start: { line: 330, column: 0 }, end: { line: 411, column: 2 } },
                '89': { start: { line: 331, column: 16 }, end: { line: 331, column: 30 } },
                '90': { start: { line: 332, column: 2 }, end: { line: 410, column: 3 } },
                '91': { start: { line: 334, column: 4 }, end: { line: 356, column: 5 } },
                '92': { start: { line: 336, column: 17 }, end: { line: 336, column: 210 } },
                '93': { start: { line: 337, column: 6 }, end: { line: 345, column: 7 } },
                '94': { start: { line: 339, column: 8 }, end: { line: 339, column: 66 } },
                '95': { start: { line: 342, column: 8 }, end: { line: 344, column: 51 } },
                '96': { start: { line: 346, column: 11 }, end: { line: 356, column: 5 } },
                '97': { start: { line: 350, column: 6 }, end: { line: 355, column: 10 } },
                '98': { start: { line: 358, column: 19 }, end: { line: 358, column: 47 } },
                '99': { start: { line: 359, column: 4 }, end: { line: 359, column: 51 } },
                '100': { start: { line: 360, column: 4 }, end: { line: 362, column: 29 } },
                '101': { start: { line: 364, column: 4 }, end: { line: 366, column: 6 } },
                '102': { start: { line: 367, column: 4 }, end: { line: 367, column: 62 } },
                '103': { start: { line: 368, column: 4 }, end: { line: 368, column: 11 } },
                '104': { start: { line: 369, column: 9 }, end: { line: 410, column: 3 } },
                '105': { start: { line: 374, column: 4 }, end: { line: 398, column: 5 } },
                '106': {
                  start: { line: 376, column: 17 },
                  end: { line: 376, column: 121 }
                },
                '107': { start: { line: 377, column: 6 }, end: { line: 387, column: 7 } },
                '108': { start: { line: 379, column: 8 }, end: { line: 381, column: 48 } },
                '109': { start: { line: 384, column: 8 }, end: { line: 386, column: 51 } },
                '110': { start: { line: 388, column: 11 }, end: { line: 398, column: 5 } },
                '111': { start: { line: 392, column: 6 }, end: { line: 397, column: 10 } },
                '112': { start: { line: 400, column: 19 }, end: { line: 400, column: 47 } },
                '113': { start: { line: 401, column: 4 }, end: { line: 401, column: 48 } },
                '114': { start: { line: 402, column: 4 }, end: { line: 404, column: 29 } },
                '115': { start: { line: 406, column: 4 }, end: { line: 408, column: 6 } },
                '116': { start: { line: 409, column: 4 }, end: { line: 409, column: 59 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 72, column: 24 }, end: { line: 72, column: 25 } },
                  loc: { start: { line: 72, column: 48 }, end: { line: 112, column: 1 } },
                  line: 72
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: {
                    start: { line: 158, column: 31 },
                    end: { line: 158, column: 32 }
                  },
                  loc: { start: { line: 158, column: 61 }, end: { line: 210, column: 1 } },
                  line: 158
                },
                '2': {
                  name: '_descriptionText',
                  decl: { start: { line: 219, column: 9 }, end: { line: 219, column: 25 } },
                  loc: { start: { line: 219, column: 32 }, end: { line: 235, column: 1 } },
                  line: 219
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 242, column: 29 },
                    end: { line: 242, column: 30 }
                  },
                  loc: { start: { line: 242, column: 50 }, end: { line: 306, column: 1 } },
                  line: 242
                },
                '4': {
                  name: '_elementName',
                  decl: { start: { line: 313, column: 9 }, end: { line: 313, column: 21 } },
                  loc: { start: { line: 313, column: 28 }, end: { line: 327, column: 1 } },
                  line: 313
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 330, column: 36 },
                    end: { line: 330, column: 37 }
                  },
                  loc: { start: { line: 330, column: 63 }, end: { line: 411, column: 1 } },
                  line: 330
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 74, column: 2 }, end: { line: 76, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 74, column: 2 }, end: { line: 76, column: 3 } },
                    { start: { line: 74, column: 2 }, end: { line: 76, column: 3 } }
                  ],
                  line: 74
                },
                '1': {
                  loc: { start: { line: 81, column: 2 }, end: { line: 83, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 81, column: 2 }, end: { line: 83, column: 3 } },
                    { start: { line: 81, column: 2 }, end: { line: 83, column: 3 } }
                  ],
                  line: 81
                },
                '2': {
                  loc: { start: { line: 84, column: 2 }, end: { line: 86, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 84, column: 2 }, end: { line: 86, column: 3 } },
                    { start: { line: 84, column: 2 }, end: { line: 86, column: 3 } }
                  ],
                  line: 84
                },
                '3': {
                  loc: { start: { line: 88, column: 2 }, end: { line: 97, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 88, column: 2 }, end: { line: 97, column: 3 } },
                    { start: { line: 88, column: 2 }, end: { line: 97, column: 3 } }
                  ],
                  line: 88
                },
                '4': {
                  loc: { start: { line: 90, column: 4 }, end: { line: 93, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 90, column: 4 }, end: { line: 93, column: 5 } },
                    { start: { line: 90, column: 4 }, end: { line: 93, column: 5 } }
                  ],
                  line: 90
                },
                '5': {
                  loc: { start: { line: 99, column: 2 }, end: { line: 111, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 99, column: 2 }, end: { line: 111, column: 3 } },
                    { start: { line: 99, column: 2 }, end: { line: 111, column: 3 } }
                  ],
                  line: 99
                },
                '6': {
                  loc: { start: { line: 101, column: 4 }, end: { line: 110, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 101, column: 4 }, end: { line: 110, column: 5 } },
                    { start: { line: 101, column: 4 }, end: { line: 110, column: 5 } }
                  ],
                  line: 101
                },
                '7': {
                  loc: { start: { line: 103, column: 6 }, end: { line: 106, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 103, column: 6 }, end: { line: 106, column: 7 } },
                    { start: { line: 103, column: 6 }, end: { line: 106, column: 7 } }
                  ],
                  line: 103
                },
                '8': {
                  loc: { start: { line: 160, column: 2 }, end: { line: 162, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 160, column: 2 }, end: { line: 162, column: 3 } },
                    { start: { line: 160, column: 2 }, end: { line: 162, column: 3 } }
                  ],
                  line: 160
                },
                '9': {
                  loc: { start: { line: 160, column: 6 }, end: { line: 160, column: 58 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 160, column: 6 }, end: { line: 160, column: 30 } },
                    { start: { line: 160, column: 34 }, end: { line: 160, column: 58 } }
                  ],
                  line: 160
                },
                '10': {
                  loc: { start: { line: 174, column: 2 }, end: { line: 176, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 174, column: 2 }, end: { line: 176, column: 3 } },
                    { start: { line: 174, column: 2 }, end: { line: 176, column: 3 } }
                  ],
                  line: 174
                },
                '11': {
                  loc: { start: { line: 177, column: 2 }, end: { line: 181, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 177, column: 2 }, end: { line: 181, column: 3 } },
                    { start: { line: 177, column: 2 }, end: { line: 181, column: 3 } }
                  ],
                  line: 177
                },
                '12': {
                  loc: { start: { line: 179, column: 9 }, end: { line: 181, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 179, column: 9 }, end: { line: 181, column: 3 } },
                    { start: { line: 179, column: 9 }, end: { line: 181, column: 3 } }
                  ],
                  line: 179
                },
                '13': {
                  loc: { start: { line: 183, column: 2 }, end: { line: 192, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 183, column: 2 }, end: { line: 192, column: 3 } },
                    { start: { line: 183, column: 2 }, end: { line: 192, column: 3 } }
                  ],
                  line: 183
                },
                '14': {
                  loc: { start: { line: 185, column: 4 }, end: { line: 188, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 185, column: 4 }, end: { line: 188, column: 5 } },
                    { start: { line: 185, column: 4 }, end: { line: 188, column: 5 } }
                  ],
                  line: 185
                },
                '15': {
                  loc: { start: { line: 194, column: 2 }, end: { line: 209, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 194, column: 2 }, end: { line: 209, column: 3 } },
                    { start: { line: 194, column: 2 }, end: { line: 209, column: 3 } }
                  ],
                  line: 194
                },
                '16': {
                  loc: { start: { line: 195, column: 4 }, end: { line: 197, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 195, column: 4 }, end: { line: 197, column: 5 } },
                    { start: { line: 195, column: 4 }, end: { line: 197, column: 5 } }
                  ],
                  line: 195
                },
                '17': {
                  loc: { start: { line: 199, column: 4 }, end: { line: 208, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 199, column: 4 }, end: { line: 208, column: 5 } },
                    { start: { line: 199, column: 4 }, end: { line: 208, column: 5 } }
                  ],
                  line: 199
                },
                '18': {
                  loc: { start: { line: 201, column: 6 }, end: { line: 204, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 201, column: 6 }, end: { line: 204, column: 7 } },
                    { start: { line: 201, column: 6 }, end: { line: 204, column: 7 } }
                  ],
                  line: 201
                },
                '19': {
                  loc: { start: { line: 220, column: 2 }, end: { line: 222, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 220, column: 2 }, end: { line: 222, column: 3 } },
                    { start: { line: 220, column: 2 }, end: { line: 222, column: 3 } }
                  ],
                  line: 220
                },
                '20': {
                  loc: { start: { line: 220, column: 6 }, end: { line: 220, column: 45 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 220, column: 6 }, end: { line: 220, column: 22 } },
                    { start: { line: 220, column: 26 }, end: { line: 220, column: 45 } }
                  ],
                  line: 220
                },
                '21': {
                  loc: { start: { line: 224, column: 2 }, end: { line: 233, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 224, column: 2 }, end: { line: 233, column: 3 } },
                    { start: { line: 224, column: 2 }, end: { line: 233, column: 3 } }
                  ],
                  line: 224
                },
                '22': {
                  loc: { start: { line: 225, column: 4 }, end: { line: 229, column: 23 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 225, column: 4 }, end: { line: 225, column: 23 } },
                    { start: { line: 226, column: 4 }, end: { line: 226, column: 23 } },
                    { start: { line: 227, column: 4 }, end: { line: 227, column: 23 } },
                    { start: { line: 228, column: 4 }, end: { line: 228, column: 23 } },
                    { start: { line: 229, column: 4 }, end: { line: 229, column: 23 } }
                  ],
                  line: 225
                },
                '23': {
                  loc: { start: { line: 244, column: 2 }, end: { line: 305, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 244, column: 2 }, end: { line: 305, column: 3 } },
                    { start: { line: 244, column: 2 }, end: { line: 305, column: 3 } }
                  ],
                  line: 244
                },
                '24': {
                  loc: { start: { line: 246, column: 4 }, end: { line: 267, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 246, column: 4 }, end: { line: 267, column: 5 } },
                    { start: { line: 246, column: 4 }, end: { line: 267, column: 5 } }
                  ],
                  line: 246
                },
                '25': {
                  loc: { start: { line: 249, column: 6 }, end: { line: 257, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 249, column: 6 }, end: { line: 257, column: 7 } },
                    { start: { line: 249, column: 6 }, end: { line: 257, column: 7 } }
                  ],
                  line: 249
                },
                '26': {
                  loc: { start: { line: 274, column: 9 }, end: { line: 305, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 274, column: 9 }, end: { line: 305, column: 3 } },
                    { start: { line: 274, column: 9 }, end: { line: 305, column: 3 } }
                  ],
                  line: 274
                },
                '27': {
                  loc: { start: { line: 276, column: 4 }, end: { line: 299, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 276, column: 4 }, end: { line: 299, column: 5 } },
                    { start: { line: 276, column: 4 }, end: { line: 299, column: 5 } }
                  ],
                  line: 276
                },
                '28': {
                  loc: { start: { line: 279, column: 6 }, end: { line: 289, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 279, column: 6 }, end: { line: 289, column: 7 } },
                    { start: { line: 279, column: 6 }, end: { line: 289, column: 7 } }
                  ],
                  line: 279
                },
                '29': {
                  loc: { start: { line: 290, column: 11 }, end: { line: 299, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 290, column: 11 }, end: { line: 299, column: 5 } },
                    { start: { line: 290, column: 11 }, end: { line: 299, column: 5 } }
                  ],
                  line: 290
                },
                '30': {
                  loc: { start: { line: 314, column: 2 }, end: { line: 316, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 314, column: 2 }, end: { line: 316, column: 3 } },
                    { start: { line: 314, column: 2 }, end: { line: 316, column: 3 } }
                  ],
                  line: 314
                },
                '31': {
                  loc: { start: { line: 314, column: 6 }, end: { line: 314, column: 45 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 314, column: 6 }, end: { line: 314, column: 22 } },
                    { start: { line: 314, column: 26 }, end: { line: 314, column: 45 } }
                  ],
                  line: 314
                },
                '32': {
                  loc: { start: { line: 318, column: 2 }, end: { line: 325, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 318, column: 2 }, end: { line: 325, column: 3 } },
                    { start: { line: 318, column: 2 }, end: { line: 325, column: 3 } }
                  ],
                  line: 318
                },
                '33': {
                  loc: { start: { line: 318, column: 6 }, end: { line: 318, column: 68 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 318, column: 6 }, end: { line: 318, column: 24 } },
                    { start: { line: 318, column: 28 }, end: { line: 318, column: 46 } },
                    { start: { line: 318, column: 50 }, end: { line: 318, column: 68 } }
                  ],
                  line: 318
                },
                '34': {
                  loc: { start: { line: 321, column: 9 }, end: { line: 325, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 321, column: 9 }, end: { line: 325, column: 3 } },
                    { start: { line: 321, column: 9 }, end: { line: 325, column: 3 } }
                  ],
                  line: 321
                },
                '35': {
                  loc: { start: { line: 332, column: 2 }, end: { line: 410, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 332, column: 2 }, end: { line: 410, column: 3 } },
                    { start: { line: 332, column: 2 }, end: { line: 410, column: 3 } }
                  ],
                  line: 332
                },
                '36': {
                  loc: { start: { line: 334, column: 4 }, end: { line: 356, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 334, column: 4 }, end: { line: 356, column: 5 } },
                    { start: { line: 334, column: 4 }, end: { line: 356, column: 5 } }
                  ],
                  line: 334
                },
                '37': {
                  loc: { start: { line: 337, column: 6 }, end: { line: 345, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 337, column: 6 }, end: { line: 345, column: 7 } },
                    { start: { line: 337, column: 6 }, end: { line: 345, column: 7 } }
                  ],
                  line: 337
                },
                '38': {
                  loc: { start: { line: 346, column: 11 }, end: { line: 356, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 346, column: 11 }, end: { line: 356, column: 5 } },
                    { start: { line: 346, column: 11 }, end: { line: 356, column: 5 } }
                  ],
                  line: 346
                },
                '39': {
                  loc: { start: { line: 369, column: 9 }, end: { line: 410, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 369, column: 9 }, end: { line: 410, column: 3 } },
                    { start: { line: 369, column: 9 }, end: { line: 410, column: 3 } }
                  ],
                  line: 369
                },
                '40': {
                  loc: { start: { line: 374, column: 4 }, end: { line: 398, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 374, column: 4 }, end: { line: 398, column: 5 } },
                    { start: { line: 374, column: 4 }, end: { line: 398, column: 5 } }
                  ],
                  line: 374
                },
                '41': {
                  loc: { start: { line: 377, column: 6 }, end: { line: 387, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 377, column: 6 }, end: { line: 387, column: 7 } },
                    { start: { line: 377, column: 6 }, end: { line: 387, column: 7 } }
                  ],
                  line: 377
                },
                '42': {
                  loc: { start: { line: 388, column: 11 }, end: { line: 398, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 388, column: 11 }, end: { line: 398, column: 5 } },
                    { start: { line: 388, column: 11 }, end: { line: 398, column: 5 } }
                  ],
                  line: 388
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0
              },
              f: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0 },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0],
                '20': [0, 0],
                '21': [0, 0],
                '22': [0, 0, 0, 0, 0],
                '23': [0, 0],
                '24': [0, 0],
                '25': [0, 0],
                '26': [0, 0],
                '27': [0, 0],
                '28': [0, 0],
                '29': [0, 0],
                '30': [0, 0],
                '31': [0, 0],
                '32': [0, 0],
                '33': [0, 0, 0],
                '34': [0, 0],
                '35': [0, 0],
                '36': [0, 0],
                '37': [0, 0],
                '38': [0, 0],
                '39': [0, 0],
                '40': [0, 0],
                '41': [0, 0],
                '42': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '7e42c3c7d403ce2a21fe103e47107fd102c274da'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.concat');
          _dereq_('core-js/modules/es.regexp.exec');
          _dereq_('core-js/modules/es.string.ends-with');
          _dereq_('core-js/modules/es.string.replace');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          var descContainer = (cov_iymlm3j1o.s[0]++, '_Description'); //Fallback container
          var fallbackDescId = (cov_iymlm3j1o.s[1]++, '_fallbackDesc'); //Fallback description
          var fallbackTableId = (cov_iymlm3j1o.s[2]++, '_fallbackTable'); //Fallback Table
          var fallbackTableElId = (cov_iymlm3j1o.s[3]++, '_fte_'); //Fallback Table Element
          var labelContainer = (cov_iymlm3j1o.s[4]++, '_Label'); //Label container
          var labelDescId = (cov_iymlm3j1o.s[5]++, '_labelDesc'); //Label description
          var labelTableId = (cov_iymlm3j1o.s[6]++, '_labelTable'); //Label Table
          var labelTableElId = (cov_iymlm3j1o.s[7]++, '_lte_'); //Label Table Element

          /**
           * Creates a screen reader accessible description for the canvas.
           * The first parameter should be a string with a description of the canvas.
           * The second parameter is optional. If specified, it determines how the
           * description is displayed.
           *
           * <code class="language-javascript">describe(text, LABEL)</code> displays
           * the description to all users as a <a
           * href="https://en.wikipedia.org/wiki/Museum_label" target="_blank">
           * tombstone or exhibit label/caption</a> in a div
           * adjacent to the canvas. You can style it as you wish in your CSS.
           *
           * <code class="language-javascript">describe(text, FALLBACK)</code> makes the
           * description accessible to screen-reader users only, in
           * <a href="https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Hit_regions_and_accessibility" target="_blank">
           * a sub DOM inside the canvas element</a>. If a second parameter is not
           * specified, by default, the description will only be available to
           * screen-reader users.
           *
           * @method describe
           * @param  {String} text      description of the canvas
           * @param  {Constant} [display] either LABEL or FALLBACK
           *
           * @example
           * <div>
           * <code>
           * describe('pink square with red heart in the bottom right corner');
           * background('pink');
           * fill('red');
           * noStroke();
           * ellipse(67, 67, 20, 20);
           * ellipse(83, 67, 20, 20);
           * triangle(91, 73, 75, 95, 59, 73);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * let x = 0;
           * function draw() {
           *   if (x > 100) {
           *     x = 0;
           *   }
           *   background(220);
           *   fill(0, 255, 0);
           *   ellipse(x, 50, 40, 40);
           *   x = x + 0.1;
           *   describe('green circle at x pos ' + round(x) + ' moving to the right');
           * }
           * </code>
           * </div>
           *
           */ cov_iymlm3j1o.s[8]++;

          _main.default.prototype.describe = function(text, display) {
            cov_iymlm3j1o.f[0]++;
            cov_iymlm3j1o.s[9]++;
            _main.default._validateParameters('describe', arguments);
            cov_iymlm3j1o.s[10]++;
            if (typeof text !== 'string') {
              cov_iymlm3j1o.b[0][0]++;
              cov_iymlm3j1o.s[11]++;
              return;
            } else {
              cov_iymlm3j1o.b[0][1]++;
            }
            var cnvId = (cov_iymlm3j1o.s[12]++, this.canvas.id);
            //calls function that adds punctuation for better screen reading
            cov_iymlm3j1o.s[13]++;
            text = _descriptionText(text);
            //if there is no dummyDOM
            cov_iymlm3j1o.s[14]++;
            if (!this.dummyDOM) {
              cov_iymlm3j1o.b[1][0]++;
              cov_iymlm3j1o.s[15]++;
              this.dummyDOM = document.getElementById(cnvId).parentNode;
            } else {
              cov_iymlm3j1o.b[1][1]++;
            }
            cov_iymlm3j1o.s[16]++;
            if (!this.descriptions) {
              cov_iymlm3j1o.b[2][0]++;
              cov_iymlm3j1o.s[17]++;
              this.descriptions = {};
            } else {
              cov_iymlm3j1o.b[2][1]++;
            }
            //check if html structure for description is ready
            cov_iymlm3j1o.s[18]++;
            if (this.descriptions.fallback) {
              cov_iymlm3j1o.b[3][0]++;
              cov_iymlm3j1o.s[19]++;
              //check if text is different from current description
              if (this.descriptions.fallback.innerHTML !== text) {
                cov_iymlm3j1o.b[4][0]++;
                cov_iymlm3j1o.s[20]++;
                //update description
                this.descriptions.fallback.innerHTML = text;
              } else {
                cov_iymlm3j1o.b[4][1]++;
              }
            } else {
              cov_iymlm3j1o.b[3][1]++;
              cov_iymlm3j1o.s[21]++;
              //create fallback html structure
              this._describeHTML('fallback', text);
            }
            //if display is LABEL
            cov_iymlm3j1o.s[22]++;
            if (display === this.LABEL) {
              cov_iymlm3j1o.b[5][0]++;
              cov_iymlm3j1o.s[23]++;
              //check if html structure for label is ready
              if (this.descriptions.label) {
                cov_iymlm3j1o.b[6][0]++;
                cov_iymlm3j1o.s[24]++;
                //check if text is different from current label
                if (this.descriptions.label.innerHTML !== text) {
                  cov_iymlm3j1o.b[7][0]++;
                  cov_iymlm3j1o.s[25]++;
                  //update label description
                  this.descriptions.label.innerHTML = text;
                } else {
                  cov_iymlm3j1o.b[7][1]++;
                }
              } else {
                cov_iymlm3j1o.b[6][1]++;
                cov_iymlm3j1o.s[26]++;
                //create label html structure
                this._describeHTML('label', text);
              }
            } else {
              cov_iymlm3j1o.b[5][1]++;
            }
          };

          /**
           * This function creates a screen-reader accessible
           * description for elements —shapes or groups of shapes that create
           * meaning together— in the canvas. The first paramater should
           * be the name of the element. The second parameter should be a string
           * with a description of the element. The third parameter is optional.
           * If specified, it determines how the element description is displayed.
           *
           * <code class="language-javascript">describeElement(name, text, LABEL)</code>
           * displays the element description to all users as a
           * <a href="https://en.wikipedia.org/wiki/Museum_label" target="_blank">
           * tombstone or exhibit label/caption</a> in a div
           * adjacent to the canvas. You can style it as you wish in your CSS.
           *
           * <code class="language-javascript">describeElement(name, text, FALLBACK)</code>
           * makes the element description accessible to screen-reader users
           * only, in <a href="https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Hit_regions_and_accessibility" target="_blank">
           * a sub DOM inside the canvas element</a>. If a second parameter is not
           * specified, by default, the element description will only be available
           * to screen-reader users.
           *
           * @method describeElement
           * @param  {String} name      name of the element
           * @param  {String} text      description of the element
           * @param  {Constant} [display] either LABEL or FALLBACK
           *
           * @example
           * <div>
           * <code>
           * describe('Heart and yellow circle over pink background');
           * noStroke();
           * background('pink');
           * describeElement('Circle', 'Yellow circle in the top left corner');
           * fill('yellow');
           * ellipse(25, 25, 40, 40);
           * describeElement('Heart', 'red heart in the bottom right corner');
           * fill('red');
           * ellipse(66.6, 66.6, 20, 20);
           * ellipse(83.2, 66.6, 20, 20);
           * triangle(91.2, 72.6, 75, 95, 58.6, 72.6);
           * </code>
           * </div>
           */ cov_iymlm3j1o.s[27]++;

          _main.default.prototype.describeElement = function(name, text, display) {
            cov_iymlm3j1o.f[1]++;
            cov_iymlm3j1o.s[28]++;
            _main.default._validateParameters('describeElement', arguments);
            cov_iymlm3j1o.s[29]++;
            if (
              (cov_iymlm3j1o.b[9][0]++, typeof text !== 'string') ||
              (cov_iymlm3j1o.b[9][1]++, typeof name !== 'string')
            ) {
              cov_iymlm3j1o.b[8][0]++;
              cov_iymlm3j1o.s[30]++;
              return;
            } else {
              cov_iymlm3j1o.b[8][1]++;
            }
            var cnvId = (cov_iymlm3j1o.s[31]++, this.canvas.id);
            //calls function that adds punctuation for better screen reading
            cov_iymlm3j1o.s[32]++;
            text = _descriptionText(text);
            //calls function that adds punctuation for better screen reading
            var elementName = (cov_iymlm3j1o.s[33]++, _elementName(name));
            //remove any special characters from name to use it as html id
            cov_iymlm3j1o.s[34]++;
            name = name.replace(/[^a-zA-Z0-9]/g, '');

            //store element description
            var inner = (cov_iymlm3j1o.s[35]++,
            '<th scope="row">'.concat(elementName, '</th><td>').concat(text, '</td>'));
            //if there is no dummyDOM
            cov_iymlm3j1o.s[36]++;
            if (!this.dummyDOM) {
              cov_iymlm3j1o.b[10][0]++;
              cov_iymlm3j1o.s[37]++;
              this.dummyDOM = document.getElementById(cnvId).parentNode;
            } else {
              cov_iymlm3j1o.b[10][1]++;
            }
            cov_iymlm3j1o.s[38]++;
            if (!this.descriptions) {
              cov_iymlm3j1o.b[11][0]++;
              cov_iymlm3j1o.s[39]++;
              this.descriptions = { fallbackElements: {} };
            } else {
              cov_iymlm3j1o.b[11][1]++;
              cov_iymlm3j1o.s[40]++;
              if (!this.descriptions.fallbackElements) {
                cov_iymlm3j1o.b[12][0]++;
                cov_iymlm3j1o.s[41]++;
                this.descriptions.fallbackElements = {};
              } else {
                cov_iymlm3j1o.b[12][1]++;
              }
            }
            //check if html structure for element description is ready
            cov_iymlm3j1o.s[42]++;
            if (this.descriptions.fallbackElements[name]) {
              cov_iymlm3j1o.b[13][0]++;
              cov_iymlm3j1o.s[43]++;
              //if current element description is not the same as inner
              if (this.descriptions.fallbackElements[name].innerHTML !== inner) {
                cov_iymlm3j1o.b[14][0]++;
                cov_iymlm3j1o.s[44]++;
                //update element description
                this.descriptions.fallbackElements[name].innerHTML = inner;
              } else {
                cov_iymlm3j1o.b[14][1]++;
              }
            } else {
              cov_iymlm3j1o.b[13][1]++;
              cov_iymlm3j1o.s[45]++;
              //create fallback html structure
              this._describeElementHTML('fallback', name, inner);
            }
            //if display is LABEL
            cov_iymlm3j1o.s[46]++;
            if (display === this.LABEL) {
              cov_iymlm3j1o.b[15][0]++;
              cov_iymlm3j1o.s[47]++;
              if (!this.descriptions.labelElements) {
                cov_iymlm3j1o.b[16][0]++;
                cov_iymlm3j1o.s[48]++;
                this.descriptions.labelElements = {};
              } else {
                cov_iymlm3j1o.b[16][1]++;
              }
              //if html structure for label element description is ready
              cov_iymlm3j1o.s[49]++;
              if (this.descriptions.labelElements[name]) {
                cov_iymlm3j1o.b[17][0]++;
                cov_iymlm3j1o.s[50]++;
                //if label element description is different
                if (this.descriptions.labelElements[name].innerHTML !== inner) {
                  cov_iymlm3j1o.b[18][0]++;
                  cov_iymlm3j1o.s[51]++;
                  //update label element description
                  this.descriptions.labelElements[name].innerHTML = inner;
                } else {
                  cov_iymlm3j1o.b[18][1]++;
                }
              } else {
                cov_iymlm3j1o.b[17][1]++;
                cov_iymlm3j1o.s[52]++;
                //create label element html structure
                this._describeElementHTML('label', name, inner);
              }
            } else {
              cov_iymlm3j1o.b[15][1]++;
            }
          };

          /*
    *
    * Helper functions for describe() and describeElement().
    *
    */

          // check that text is not LABEL or FALLBACK and ensure text ends with punctuation mark
          function _descriptionText(text) {
            cov_iymlm3j1o.f[2]++;
            cov_iymlm3j1o.s[53]++;
            if (
              (cov_iymlm3j1o.b[20][0]++, text === 'label') ||
              (cov_iymlm3j1o.b[20][1]++, text === 'fallback')
            ) {
              cov_iymlm3j1o.b[19][0]++;
              cov_iymlm3j1o.s[54]++;
              throw new Error('description should not be LABEL or FALLBACK');
            } else {
              cov_iymlm3j1o.b[19][1]++;
            }
            //if string does not end with '.'
            cov_iymlm3j1o.s[55]++;
            if (
              (cov_iymlm3j1o.b[22][0]++, !text.endsWith('.')) &&
              (cov_iymlm3j1o.b[22][1]++, !text.endsWith(';')) &&
              (cov_iymlm3j1o.b[22][2]++, !text.endsWith(',')) &&
              (cov_iymlm3j1o.b[22][3]++, !text.endsWith('?')) &&
              (cov_iymlm3j1o.b[22][4]++, !text.endsWith('!'))
            ) {
              cov_iymlm3j1o.b[21][0]++;
              cov_iymlm3j1o.s[56]++;
              //add '.' to the end of string
              text = text + '.';
            } else {
              cov_iymlm3j1o.b[21][1]++;
            }
            cov_iymlm3j1o.s[57]++;
            return text;
          }

          /*
   * Helper functions for describe()
   */

          //creates HTML structure for canvas descriptions
          cov_iymlm3j1o.s[58]++;
          _main.default.prototype._describeHTML = function(type, text) {
            cov_iymlm3j1o.f[3]++;
            var cnvId = (cov_iymlm3j1o.s[59]++, this.canvas.id);
            cov_iymlm3j1o.s[60]++;
            if (type === 'fallback') {
              cov_iymlm3j1o.b[23][0]++;
              cov_iymlm3j1o.s[61]++;
              //if there is no description container
              if (!this.dummyDOM.querySelector('#'.concat(cnvId + descContainer))) {
                cov_iymlm3j1o.b[24][0]++;
                //if there are no accessible outputs (see textOutput() and gridOutput())
                var html = (cov_iymlm3j1o.s[62]++,
                '<div id="'
                  .concat(cnvId)
                  .concat(
                    descContainer,
                    '" role="region" aria-label="Canvas Description"><p id="'
                  )
                  .concat(cnvId)
                  .concat(fallbackDescId, '"></p></div>'));
                cov_iymlm3j1o.s[63]++;
                if (!this.dummyDOM.querySelector('#'.concat(cnvId, 'accessibleOutput'))) {
                  cov_iymlm3j1o.b[25][0]++;
                  cov_iymlm3j1o.s[64]++;
                  //create description container + <p> for fallback description
                  this.dummyDOM.querySelector('#'.concat(cnvId)).innerHTML = html;
                } else {
                  cov_iymlm3j1o.b[25][1]++;
                  cov_iymlm3j1o.s[65]++;
                  //create description container + <p> for fallback description before outputs
                  this.dummyDOM
                    .querySelector('#'.concat(cnvId, 'accessibleOutput'))
                    .insertAdjacentHTML('beforebegin', html);
                }
              } else {
                cov_iymlm3j1o.b[24][1]++;
                cov_iymlm3j1o.s[66]++;
                //if describeElement() has already created the container and added a table of elements
                //create fallback description <p> before the table
                this.dummyDOM
                  .querySelector('#' + cnvId + fallbackTableId)
                  .insertAdjacentHTML(
                    'beforebegin',
                    '<p id="'.concat(cnvId + fallbackDescId, '"></p>')
                  );
              }
              //if the container for the description exists
              cov_iymlm3j1o.s[67]++;
              this.descriptions.fallback = this.dummyDOM.querySelector(
                '#'.concat(cnvId).concat(fallbackDescId)
              );
              cov_iymlm3j1o.s[68]++;

              this.descriptions.fallback.innerHTML = text;
              cov_iymlm3j1o.s[69]++;
              return;
            } else {
              cov_iymlm3j1o.b[23][1]++;
              cov_iymlm3j1o.s[70]++;
              if (type === 'label') {
                cov_iymlm3j1o.b[26][0]++;
                cov_iymlm3j1o.s[71]++;
                //if there is no label container
                if (!this.dummyDOM.querySelector('#'.concat(cnvId + labelContainer))) {
                  cov_iymlm3j1o.b[27][0]++;
                  var _html = (cov_iymlm3j1o.s[72]++,
                  '<div id="'
                    .concat(cnvId)
                    .concat(labelContainer, '" class="p5Label"><p id="')
                    .concat(cnvId)
                    .concat(labelDescId, '"></p></div>'));
                  //if there are no accessible outputs (see textOutput() and gridOutput())
                  cov_iymlm3j1o.s[73]++;
                  if (
                    !this.dummyDOM.querySelector('#'.concat(cnvId, 'accessibleOutputLabel'))
                  ) {
                    cov_iymlm3j1o.b[28][0]++;
                    cov_iymlm3j1o.s[74]++;
                    //create label container + <p> for label description
                    this.dummyDOM
                      .querySelector('#' + cnvId)
                      .insertAdjacentHTML('afterend', _html);
                  } else {
                    cov_iymlm3j1o.b[28][1]++;
                    cov_iymlm3j1o.s[75]++;
                    //create label container + <p> for label description before outputs
                    this.dummyDOM
                      .querySelector('#'.concat(cnvId, 'accessibleOutputLabel'))
                      .insertAdjacentHTML('beforebegin', _html);
                  }
                } else {
                  cov_iymlm3j1o.b[27][1]++;
                  cov_iymlm3j1o.s[76]++;
                  if (this.dummyDOM.querySelector('#'.concat(cnvId + labelTableId))) {
                    cov_iymlm3j1o.b[29][0]++;
                    cov_iymlm3j1o.s[77]++;
                    //if describeElement() has already created the container and added a table of elements
                    //create label description <p> before the table
                    this.dummyDOM
                      .querySelector('#'.concat(cnvId + labelTableId))
                      .insertAdjacentHTML(
                        'beforebegin',
                        '<p id="'.concat(cnvId).concat(labelDescId, '"></p>')
                      );
                  } else {
                    cov_iymlm3j1o.b[29][1]++;
                  }
                }
                cov_iymlm3j1o.s[78]++;
                this.descriptions.label = this.dummyDOM.querySelector(
                  '#' + cnvId + labelDescId
                );
                cov_iymlm3j1o.s[79]++;

                this.descriptions.label.innerHTML = text;
                cov_iymlm3j1o.s[80]++;
                return;
              } else {
                cov_iymlm3j1o.b[26][1]++;
              }
            }
          };

          /*
    * Helper functions for describeElement().
    */

          //check that name is not LABEL or FALLBACK and ensure text ends with colon
          function _elementName(name) {
            cov_iymlm3j1o.f[4]++;
            cov_iymlm3j1o.s[81]++;
            if (
              (cov_iymlm3j1o.b[31][0]++, name === 'label') ||
              (cov_iymlm3j1o.b[31][1]++, name === 'fallback')
            ) {
              cov_iymlm3j1o.b[30][0]++;
              cov_iymlm3j1o.s[82]++;
              throw new Error('element name should not be LABEL or FALLBACK');
            } else {
              cov_iymlm3j1o.b[30][1]++;
            }
            //check if last character of string n is '.', ';', or ','
            cov_iymlm3j1o.s[83]++;
            if (
              (cov_iymlm3j1o.b[33][0]++, name.endsWith('.')) ||
              (cov_iymlm3j1o.b[33][1]++, name.endsWith(';')) ||
              (cov_iymlm3j1o.b[33][2]++, name.endsWith(','))
            ) {
              cov_iymlm3j1o.b[32][0]++;
              cov_iymlm3j1o.s[84]++;
              //replace last character with ':'
              name = name.replace(/.$/, ':');
            } else {
              cov_iymlm3j1o.b[32][1]++;
              cov_iymlm3j1o.s[85]++;
              if (!name.endsWith(':')) {
                cov_iymlm3j1o.b[34][0]++;
                cov_iymlm3j1o.s[86]++;
                //if string n does not end with ':'
                //add ':'' at the end of string
                name = name + ':';
              } else {
                cov_iymlm3j1o.b[34][1]++;
              }
            }
            cov_iymlm3j1o.s[87]++;
            return name;
          }

          //creates HTML structure for element descriptions
          cov_iymlm3j1o.s[88]++;
          _main.default.prototype._describeElementHTML = function(type, name, text) {
            cov_iymlm3j1o.f[5]++;
            var cnvId = (cov_iymlm3j1o.s[89]++, this.canvas.id);
            cov_iymlm3j1o.s[90]++;
            if (type === 'fallback') {
              cov_iymlm3j1o.b[35][0]++;
              cov_iymlm3j1o.s[91]++;
              //if there is no description container
              if (!this.dummyDOM.querySelector('#'.concat(cnvId + descContainer))) {
                cov_iymlm3j1o.b[36][0]++;
                //if there are no accessible outputs (see textOutput() and gridOutput())
                var html = (cov_iymlm3j1o.s[92]++,
                '<div id="'
                  .concat(cnvId)
                  .concat(
                    descContainer,
                    '" role="region" aria-label="Canvas Description"><table id="'
                  )
                  .concat(cnvId)
                  .concat(
                    fallbackTableId,
                    '"><caption>Canvas elements and their descriptions</caption></table></div>'
                  ));
                cov_iymlm3j1o.s[93]++;
                if (!this.dummyDOM.querySelector('#'.concat(cnvId, 'accessibleOutput'))) {
                  cov_iymlm3j1o.b[37][0]++;
                  cov_iymlm3j1o.s[94]++;
                  //create container + table for element descriptions
                  this.dummyDOM.querySelector('#' + cnvId).innerHTML = html;
                } else {
                  cov_iymlm3j1o.b[37][1]++;
                  cov_iymlm3j1o.s[95]++;
                  //create container + table for element descriptions before outputs
                  this.dummyDOM
                    .querySelector('#'.concat(cnvId, 'accessibleOutput'))
                    .insertAdjacentHTML('beforebegin', html);
                }
              } else {
                cov_iymlm3j1o.b[36][1]++;
                cov_iymlm3j1o.s[96]++;
                if (!this.dummyDOM.querySelector('#' + cnvId + fallbackTableId)) {
                  cov_iymlm3j1o.b[38][0]++;
                  cov_iymlm3j1o.s[97]++;
                  //if describe() has already created the container and added a description
                  //and there is no table create fallback table for element description after
                  //fallback description
                  this.dummyDOM
                    .querySelector('#' + cnvId + fallbackDescId)
                    .insertAdjacentHTML(
                      'afterend',
                      '<table id="'
                        .concat(cnvId)
                        .concat(
                          fallbackTableId,
                          '"><caption>Canvas elements and their descriptions</caption></table>'
                        )
                    );
                } else {
                  cov_iymlm3j1o.b[38][1]++;
                }
              }
              //create a table row for the element
              var tableRow = (cov_iymlm3j1o.s[98]++, document.createElement('tr'));
              cov_iymlm3j1o.s[99]++;
              tableRow.id = cnvId + fallbackTableElId + name;
              cov_iymlm3j1o.s[100]++;
              this.dummyDOM
                .querySelector('#' + cnvId + fallbackTableId)
                .appendChild(tableRow);
              //update element description
              cov_iymlm3j1o.s[101]++;
              this.descriptions.fallbackElements[name] = this.dummyDOM.querySelector(
                '#'
                  .concat(cnvId)
                  .concat(fallbackTableElId)
                  .concat(name)
              );
              cov_iymlm3j1o.s[102]++;

              this.descriptions.fallbackElements[name].innerHTML = text;
              cov_iymlm3j1o.s[103]++;
              return;
            } else {
              cov_iymlm3j1o.b[35][1]++;
              cov_iymlm3j1o.s[104]++;
              if (type === 'label') {
                cov_iymlm3j1o.b[39][0]++;
                cov_iymlm3j1o.s[105]++;
                //If display is LABEL creates a div adjacent to the canvas element with
                //a table, a row header cell with the name of the elements,
                //and adds the description of the element in adjecent cell.
                //if there is no label description container
                if (!this.dummyDOM.querySelector('#'.concat(cnvId + labelContainer))) {
                  cov_iymlm3j1o.b[40][0]++;
                  //if there are no accessible outputs (see textOutput() and gridOutput())
                  var _html2 = (cov_iymlm3j1o.s[106]++,
                  '<div id="'
                    .concat(cnvId)
                    .concat(labelContainer, '" class="p5Label"><table id="')
                    .concat(cnvId)
                    .concat(labelTableId, '"></table></div>'));
                  cov_iymlm3j1o.s[107]++;
                  if (
                    !this.dummyDOM.querySelector('#'.concat(cnvId, 'accessibleOutputLabel'))
                  ) {
                    cov_iymlm3j1o.b[41][0]++;
                    cov_iymlm3j1o.s[108]++;
                    //create container + table for element descriptions
                    this.dummyDOM
                      .querySelector('#' + cnvId)
                      .insertAdjacentHTML('afterend', _html2);
                  } else {
                    cov_iymlm3j1o.b[41][1]++;
                    cov_iymlm3j1o.s[109]++;
                    //create container + table for element descriptions before outputs
                    this.dummyDOM
                      .querySelector('#'.concat(cnvId, 'accessibleOutputLabel'))
                      .insertAdjacentHTML('beforebegin', _html2);
                  }
                } else {
                  cov_iymlm3j1o.b[40][1]++;
                  cov_iymlm3j1o.s[110]++;
                  if (!this.dummyDOM.querySelector('#'.concat(cnvId + labelTableId))) {
                    cov_iymlm3j1o.b[42][0]++;
                    cov_iymlm3j1o.s[111]++;
                    //if describe() has already created the label container and added a description
                    //and there is no table create label table for element description after
                    //label description
                    this.dummyDOM
                      .querySelector('#' + cnvId + labelDescId)
                      .insertAdjacentHTML(
                        'afterend',
                        '<table id="'.concat(cnvId + labelTableId, '"></table>')
                      );
                  } else {
                    cov_iymlm3j1o.b[42][1]++;
                  }
                }
                //create a table row for the element label description
                var _tableRow = (cov_iymlm3j1o.s[112]++, document.createElement('tr'));
                cov_iymlm3j1o.s[113]++;
                _tableRow.id = cnvId + labelTableElId + name;
                cov_iymlm3j1o.s[114]++;
                this.dummyDOM
                  .querySelector('#' + cnvId + labelTableId)
                  .appendChild(_tableRow);
                //update element label description
                cov_iymlm3j1o.s[115]++;
                this.descriptions.labelElements[name] = this.dummyDOM.querySelector(
                  '#'
                    .concat(cnvId)
                    .concat(labelTableElId)
                    .concat(name)
                );
                cov_iymlm3j1o.s[116]++;

                this.descriptions.labelElements[name].innerHTML = text;
              } else {
                cov_iymlm3j1o.b[39][1]++;
              }
            }
          };
          var _default = _main.default;
          exports.default = _default;
        },
        {
          '../core/main': 283,
          'core-js/modules/es.array.concat': 166,
          'core-js/modules/es.regexp.exec': 196,
          'core-js/modules/es.string.ends-with': 199,
          'core-js/modules/es.string.replace': 204
        }
      ],
      264: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_ky7h8ig6c = (function() {
            var path = '/Users/outofambit/src/p5.js/src/accessibility/gridOutput.js';
            var hash = 'da2614412523e93843a1ba2baaf7afc6a9ab756e';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/accessibility/gridOutput.js',
              statementMap: {
                '0': { start: { line: 12, column: 0 }, end: { line: 45, column: 2 } },
                '1': { start: { line: 14, column: 2 }, end: { line: 16, column: 3 } },
                '2': { start: { line: 15, column: 4 }, end: { line: 15, column: 11 } },
                '3': { start: { line: 17, column: 16 }, end: { line: 17, column: 44 } },
                '4': { start: { line: 19, column: 26 }, end: { line: 19, column: 73 } },
                '5': { start: { line: 21, column: 21 }, end: { line: 26, column: 3 } },
                '6': { start: { line: 28, column: 17 }, end: { line: 28, column: 55 } },
                '7': { start: { line: 30, column: 2 }, end: { line: 33, column: 3 } },
                '8': { start: { line: 32, column: 4 }, end: { line: 32, column: 45 } },
                '9': { start: { line: 35, column: 2 }, end: { line: 38, column: 3 } },
                '10': { start: { line: 37, column: 4 }, end: { line: 37, column: 37 } },
                '11': { start: { line: 40, column: 2 }, end: { line: 43, column: 3 } },
                '12': { start: { line: 42, column: 4 }, end: { line: 42, column: 63 } },
                '13': { start: { line: 44, column: 2 }, end: { line: 44, column: 41 } },
                '14': { start: { line: 49, column: 20 }, end: { line: 49, column: 21 } },
                '15': { start: { line: 50, column: 14 }, end: { line: 50, column: 16 } },
                '16': { start: { line: 52, column: 14 }, end: { line: 52, column: 61 } },
                '17': { start: { line: 53, column: 2 }, end: { line: 55, column: 3 } },
                '18': { start: { line: 54, column: 4 }, end: { line: 54, column: 63 } },
                '19': { start: { line: 56, column: 2 }, end: { line: 82, column: 3 } },
                '20': { start: { line: 57, column: 4 }, end: { line: 81, column: 5 } },
                '21': { start: { line: 59, column: 6 }, end: { line: 67, column: 7 } },
                '22': { start: { line: 60, column: 8 }, end: { line: 62, column: 20 } },
                '23': { start: { line: 64, column: 8 }, end: { line: 66, column: 29 } },
                '24': { start: { line: 69, column: 6 }, end: { line: 79, column: 7 } },
                '25': { start: { line: 71, column: 8 }, end: { line: 71, column: 77 } },
                '26': { start: { line: 75, column: 8 }, end: { line: 78, column: 15 } },
                '27': { start: { line: 80, column: 6 }, end: { line: 80, column: 20 } },
                '28': { start: { line: 84, column: 2 }, end: { line: 94, column: 3 } },
                '29': { start: { line: 85, column: 14 }, end: { line: 85, column: 20 } },
                '30': { start: { line: 86, column: 4 }, end: { line: 92, column: 5 } },
                '31': { start: { line: 87, column: 6 }, end: { line: 87, column: 25 } },
                '32': { start: { line: 88, column: 6 }, end: { line: 90, column: 7 } },
                '33': { start: { line: 89, column: 8 }, end: { line: 89, column: 33 } },
                '34': { start: { line: 91, column: 6 }, end: { line: 91, column: 26 } },
                '35': { start: { line: 93, column: 4 }, end: { line: 93, column: 34 } },
                '36': { start: { line: 95, column: 2 }, end: { line: 95, column: 15 } },
                '37': { start: { line: 100, column: 13 }, end: { line: 102, column: 4 } },
                '38': { start: { line: 103, column: 2 }, end: { line: 107, column: 3 } },
                '39': { start: { line: 104, column: 4 }, end: { line: 104, column: 44 } },
                '40': { start: { line: 106, column: 4 }, end: { line: 106, column: 45 } },
                '41': { start: { line: 108, column: 2 }, end: { line: 108, column: 14 } },
                '42': { start: { line: 113, column: 21 }, end: { line: 113, column: 23 } },
                '43': { start: { line: 114, column: 15 }, end: { line: 114, column: 17 } },
                '44': { start: { line: 115, column: 20 }, end: { line: 115, column: 21 } },
                '45': { start: { line: 117, column: 2 }, end: { line: 146, column: 3 } },
                '46': { start: { line: 118, column: 19 }, end: { line: 118, column: 20 } },
                '47': { start: { line: 119, column: 4 }, end: { line: 140, column: 5 } },
                '48': { start: { line: 121, column: 17 }, end: { line: 123, column: 14 } },
                '49': { start: { line: 124, column: 6 }, end: { line: 136, column: 7 } },
                '50': { start: { line: 125, column: 8 }, end: { line: 129, column: 20 } },
                '51': { start: { line: 131, column: 8 }, end: { line: 131, column: 61 } },
                '52': { start: { line: 132, column: 8 }, end: { line: 134, column: 9 } },
                '53': { start: { line: 133, column: 10 }, end: { line: 133, column: 63 } },
                '54': { start: { line: 135, column: 8 }, end: { line: 135, column: 30 } },
                '55': { start: { line: 137, column: 6 }, end: { line: 137, column: 41 } },
                '56': { start: { line: 138, column: 6 }, end: { line: 138, column: 17 } },
                '57': { start: { line: 139, column: 6 }, end: { line: 139, column: 20 } },
                '58': { start: { line: 141, column: 4 }, end: { line: 145, column: 5 } },
                '59': { start: { line: 142, column: 6 }, end: { line: 142, column: 45 } },
                '60': { start: { line: 144, column: 6 }, end: { line: 144, column: 44 } },
                '61': { start: { line: 147, column: 2 }, end: { line: 147, column: 69 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 12, column: 33 }, end: { line: 12, column: 34 } },
                  loc: { start: { line: 12, column: 47 }, end: { line: 45, column: 1 } },
                  line: 12
                },
                '1': {
                  name: '_gridMap',
                  decl: { start: { line: 48, column: 9 }, end: { line: 48, column: 17 } },
                  loc: { start: { line: 48, column: 36 }, end: { line: 96, column: 1 } },
                  line: 48
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: { start: { line: 52, column: 47 }, end: { line: 52, column: 48 } },
                  loc: { start: { line: 52, column: 58 }, end: { line: 52, column: 60 } },
                  line: 52
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: { start: { line: 54, column: 48 }, end: { line: 54, column: 49 } },
                  loc: { start: { line: 54, column: 59 }, end: { line: 54, column: 61 } },
                  line: 54
                },
                '4': {
                  name: '_gridSummary',
                  decl: { start: { line: 99, column: 9 }, end: { line: 99, column: 21 } },
                  loc: { start: { line: 99, column: 60 }, end: { line: 109, column: 1 } },
                  line: 99
                },
                '5': {
                  name: '_gridShapeDetails',
                  decl: { start: { line: 112, column: 9 }, end: { line: 112, column: 26 } },
                  loc: { start: { line: 112, column: 45 }, end: { line: 148, column: 1 } },
                  line: 112
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 14, column: 2 }, end: { line: 16, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 14, column: 2 }, end: { line: 16, column: 3 } },
                    { start: { line: 14, column: 2 }, end: { line: 16, column: 3 } }
                  ],
                  line: 14
                },
                '1': {
                  loc: { start: { line: 30, column: 2 }, end: { line: 33, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 30, column: 2 }, end: { line: 33, column: 3 } },
                    { start: { line: 30, column: 2 }, end: { line: 33, column: 3 } }
                  ],
                  line: 30
                },
                '2': {
                  loc: { start: { line: 35, column: 2 }, end: { line: 38, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 35, column: 2 }, end: { line: 38, column: 3 } },
                    { start: { line: 35, column: 2 }, end: { line: 38, column: 3 } }
                  ],
                  line: 35
                },
                '3': {
                  loc: { start: { line: 40, column: 2 }, end: { line: 43, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 40, column: 2 }, end: { line: 43, column: 3 } },
                    { start: { line: 40, column: 2 }, end: { line: 43, column: 3 } }
                  ],
                  line: 40
                },
                '4': {
                  loc: { start: { line: 59, column: 6 }, end: { line: 67, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 59, column: 6 }, end: { line: 67, column: 7 } },
                    { start: { line: 59, column: 6 }, end: { line: 67, column: 7 } }
                  ],
                  line: 59
                },
                '5': {
                  loc: { start: { line: 69, column: 6 }, end: { line: 79, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 69, column: 6 }, end: { line: 79, column: 7 } },
                    { start: { line: 69, column: 6 }, end: { line: 79, column: 7 } }
                  ],
                  line: 69
                },
                '6': {
                  loc: { start: { line: 88, column: 6 }, end: { line: 90, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 88, column: 6 }, end: { line: 90, column: 7 } },
                    { start: { line: 88, column: 6 }, end: { line: 90, column: 7 } }
                  ],
                  line: 88
                },
                '7': {
                  loc: { start: { line: 103, column: 2 }, end: { line: 107, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 103, column: 2 }, end: { line: 107, column: 3 } },
                    { start: { line: 103, column: 2 }, end: { line: 107, column: 3 } }
                  ],
                  line: 103
                },
                '8': {
                  loc: { start: { line: 124, column: 6 }, end: { line: 136, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 124, column: 6 }, end: { line: 136, column: 7 } },
                    { start: { line: 124, column: 6 }, end: { line: 136, column: 7 } }
                  ],
                  line: 124
                },
                '9': {
                  loc: { start: { line: 132, column: 8 }, end: { line: 134, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 132, column: 8 }, end: { line: 134, column: 9 } },
                    { start: { line: 132, column: 8 }, end: { line: 134, column: 9 } }
                  ],
                  line: 132
                },
                '10': {
                  loc: { start: { line: 141, column: 4 }, end: { line: 145, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 141, column: 4 }, end: { line: 145, column: 5 } },
                    { start: { line: 141, column: 4 }, end: { line: 145, column: 5 } }
                  ],
                  line: 141
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0
              },
              f: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0 },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: 'da2614412523e93843a1ba2baaf7afc6a9ab756e'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.concat');
          _dereq_('core-js/modules/es.array.map');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_ky7h8ig6c.s[0]++;

          //the functions in this file support updating the grid output

          //updates gridOutput
          _main.default.prototype._updateGridOutput = function(idT) {
            cov_ky7h8ig6c.f[0]++;
            cov_ky7h8ig6c.s[1]++;
            //if html structure is not there yet
            if (!this.dummyDOM.querySelector('#'.concat(idT, '_summary'))) {
              cov_ky7h8ig6c.b[0][0]++;
              cov_ky7h8ig6c.s[2]++;
              return;
            } else {
              cov_ky7h8ig6c.b[0][1]++;
            }
            var current = (cov_ky7h8ig6c.s[3]++, this._accessibleOutputs[idT]);
            //create shape details list
            var innerShapeDetails = (cov_ky7h8ig6c.s[4]++,
            _gridShapeDetails(idT, this.ingredients.shapes));
            //create summary
            var innerSummary = (cov_ky7h8ig6c.s[5]++,
            _gridSummary(
              innerShapeDetails.numShapes,
              this.ingredients.colors.background,
              this.width,
              this.height
            ));

            //create grid map
            var innerMap = (cov_ky7h8ig6c.s[6]++, _gridMap(idT, this.ingredients.shapes));
            //if it is different from current summary
            cov_ky7h8ig6c.s[7]++;
            if (innerSummary !== current.summary.innerHTML) {
              cov_ky7h8ig6c.b[1][0]++;
              cov_ky7h8ig6c.s[8]++;
              //update
              current.summary.innerHTML = innerSummary;
            } else {
              cov_ky7h8ig6c.b[1][1]++;
            }
            //if it is different from current map
            cov_ky7h8ig6c.s[9]++;
            if (innerMap !== current.map.innerHTML) {
              cov_ky7h8ig6c.b[2][0]++;
              cov_ky7h8ig6c.s[10]++;
              //update
              current.map.innerHTML = innerMap;
            } else {
              cov_ky7h8ig6c.b[2][1]++;
            }
            //if it is different from current shape details
            cov_ky7h8ig6c.s[11]++;
            if (innerShapeDetails.details !== current.shapeDetails.innerHTML) {
              cov_ky7h8ig6c.b[3][0]++;
              cov_ky7h8ig6c.s[12]++;
              //update
              current.shapeDetails.innerHTML = innerShapeDetails.details;
            } else {
              cov_ky7h8ig6c.b[3][1]++;
            }
            cov_ky7h8ig6c.s[13]++;
            this._accessibleOutputs[idT] = current;
          };

          //creates spatial grid that maps the location of shapes
          function _gridMap(idT, ingredients) {
            cov_ky7h8ig6c.f[1]++;
            var shapeNumber = (cov_ky7h8ig6c.s[14]++, 0);
            var table = (cov_ky7h8ig6c.s[15]++, '');
            //create an array of arrays 10*10 of empty cells
            var cells = (cov_ky7h8ig6c.s[16]++,
            Array.apply(null, Array(10)).map(function() {
              cov_ky7h8ig6c.f[2]++;
            }));
            cov_ky7h8ig6c.s[17]++;
            for (var r in cells) {
              cov_ky7h8ig6c.s[18]++;
              cells[r] = Array.apply(null, Array(10)).map(function() {
                cov_ky7h8ig6c.f[3]++;
              });
            }
            cov_ky7h8ig6c.s[19]++;
            for (var x in ingredients) {
              cov_ky7h8ig6c.s[20]++;
              for (var y in ingredients[x]) {
                var fill = void 0;
                cov_ky7h8ig6c.s[21]++;
                if (x !== 'line') {
                  cov_ky7h8ig6c.b[4][0]++;
                  cov_ky7h8ig6c.s[22]++;
                  fill = '<a href="#'
                    .concat(idT, 'shape')
                    .concat(shapeNumber, '">')
                    .concat(ingredients[x][y].color, ' ')
                    .concat(x, '</a>');
                } else {
                  cov_ky7h8ig6c.b[4][1]++;
                  cov_ky7h8ig6c.s[23]++;
                  fill = '<a href="#'
                    .concat(idT, 'shape')
                    .concat(shapeNumber, '">')
                    .concat(ingredients[x][y].color, ' ')
                    .concat(x, ' midpoint</a>');
                }
                //if empty cell of location of shape is undefined
                cov_ky7h8ig6c.s[24]++;
                if (!cells[ingredients[x][y].loc.locY][ingredients[x][y].loc.locX]) {
                  cov_ky7h8ig6c.b[5][0]++;
                  cov_ky7h8ig6c.s[25]++;
                  //fill it with shape info
                  cells[ingredients[x][y].loc.locY][ingredients[x][y].loc.locX] = fill;
                  //if a shape is already in that location
                } else {
                  cov_ky7h8ig6c.b[5][1]++;
                  cov_ky7h8ig6c.s[26]++;
                  //add it
                  cells[ingredients[x][y].loc.locY][ingredients[x][y].loc.locX] =
                    cells[ingredients[x][y].loc.locY][ingredients[x][y].loc.locX] +
                    '  ' +
                    fill;
                }
                cov_ky7h8ig6c.s[27]++;
                shapeNumber++;
              }
            }
            //make table based on array
            cov_ky7h8ig6c.s[28]++;
            for (var _r in cells) {
              var row = (cov_ky7h8ig6c.s[29]++, '<tr>');
              cov_ky7h8ig6c.s[30]++;
              for (var c in cells[_r]) {
                cov_ky7h8ig6c.s[31]++;
                row = row + '<td>';
                cov_ky7h8ig6c.s[32]++;
                if (cells[_r][c] !== undefined) {
                  cov_ky7h8ig6c.b[6][0]++;
                  cov_ky7h8ig6c.s[33]++;
                  row = row + cells[_r][c];
                } else {
                  cov_ky7h8ig6c.b[6][1]++;
                }
                cov_ky7h8ig6c.s[34]++;
                row = row + '</td>';
              }
              cov_ky7h8ig6c.s[35]++;
              table = table + row + '</tr>';
            }
            cov_ky7h8ig6c.s[36]++;
            return table;
          }

          //creates grid summary
          function _gridSummary(numShapes, background, width, height) {
            cov_ky7h8ig6c.f[4]++;
            var text = (cov_ky7h8ig6c.s[37]++,
            ''
              .concat(background, ' canvas, ')
              .concat(width, ' by ')
              .concat(height, ' pixels, contains ')
              .concat(numShapes[0]));
            cov_ky7h8ig6c.s[38]++;

            if (numShapes[0] === 1) {
              cov_ky7h8ig6c.b[7][0]++;
              cov_ky7h8ig6c.s[39]++;
              text = ''.concat(text, ' shape: ').concat(numShapes[1]);
            } else {
              cov_ky7h8ig6c.b[7][1]++;
              cov_ky7h8ig6c.s[40]++;
              text = ''.concat(text, ' shapes: ').concat(numShapes[1]);
            }
            cov_ky7h8ig6c.s[41]++;
            return text;
          }

          //creates list of shapes
          function _gridShapeDetails(idT, ingredients) {
            cov_ky7h8ig6c.f[5]++;
            var shapeDetails = (cov_ky7h8ig6c.s[42]++, '');
            var shapes = (cov_ky7h8ig6c.s[43]++, '');
            var totalShapes = (cov_ky7h8ig6c.s[44]++, 0);
            //goes trhough every shape type in ingredients
            cov_ky7h8ig6c.s[45]++;
            for (var x in ingredients) {
              var shapeNum = (cov_ky7h8ig6c.s[46]++, 0);
              cov_ky7h8ig6c.s[47]++;
              for (var y in ingredients[x]) {
                //it creates a line in a list
                var line = (cov_ky7h8ig6c.s[48]++,
                '<li id="'
                  .concat(idT, 'shape')
                  .concat(totalShapes, '">')
                  .concat(ingredients[x][y].color, ' ')
                  .concat(x, ','));
                cov_ky7h8ig6c.s[49]++;
                if (x === 'line') {
                  cov_ky7h8ig6c.b[8][0]++;
                  cov_ky7h8ig6c.s[50]++;
                  line =
                    line +
                    ' location = '
                      .concat(ingredients[x][y].pos, ', length = ')
                      .concat(ingredients[x][y].length, ' pixels');
                } else {
                  cov_ky7h8ig6c.b[8][1]++;
                  cov_ky7h8ig6c.s[51]++;
                  line = line + ' location = '.concat(ingredients[x][y].pos);
                  cov_ky7h8ig6c.s[52]++;
                  if (x !== 'point') {
                    cov_ky7h8ig6c.b[9][0]++;
                    cov_ky7h8ig6c.s[53]++;
                    line = line + ', area = '.concat(ingredients[x][y].area, ' %');
                  } else {
                    cov_ky7h8ig6c.b[9][1]++;
                  }
                  cov_ky7h8ig6c.s[54]++;
                  line = line + '</li>';
                }
                cov_ky7h8ig6c.s[55]++;
                shapeDetails = shapeDetails + line;
                cov_ky7h8ig6c.s[56]++;
                shapeNum++;
                cov_ky7h8ig6c.s[57]++;
                totalShapes++;
              }
              cov_ky7h8ig6c.s[58]++;
              if (shapeNum > 1) {
                cov_ky7h8ig6c.b[10][0]++;
                cov_ky7h8ig6c.s[59]++;
                shapes = ''
                  .concat(shapes, ' ')
                  .concat(shapeNum, ' ')
                  .concat(x, 's');
              } else {
                cov_ky7h8ig6c.b[10][1]++;
                cov_ky7h8ig6c.s[60]++;
                shapes = ''
                  .concat(shapes, ' ')
                  .concat(shapeNum, ' ')
                  .concat(x);
              }
            }
            cov_ky7h8ig6c.s[61]++;
            return { numShapes: [totalShapes, shapes], details: shapeDetails };
          }
          var _default = _main.default;
          exports.default = _default;
        },
        {
          '../core/main': 283,
          'core-js/modules/es.array.concat': 166,
          'core-js/modules/es.array.map': 177
        }
      ],
      265: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_kag52ummu = (function() {
            var path = '/Users/outofambit/src/p5.js/src/accessibility/outputs.js';
            var hash = '40c904e962fd63a557e43ee6c806084fc7aaeb6d';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/accessibility/outputs.js',
              statementMap: {
                '0': { start: { line: 69, column: 0 }, end: { line: 86, column: 2 } },
                '1': { start: { line: 70, column: 2 }, end: { line: 70, column: 50 } },
                '2': { start: { line: 72, column: 2 }, end: { line: 85, column: 3 } },
                '3': { start: { line: 73, column: 4 }, end: { line: 73, column: 11 } },
                '4': { start: { line: 76, column: 4 }, end: { line: 76, column: 40 } },
                '5': { start: { line: 78, column: 4 }, end: { line: 78, column: 49 } },
                '6': { start: { line: 79, column: 4 }, end: { line: 84, column: 5 } },
                '7': { start: { line: 81, column: 6 }, end: { line: 81, column: 47 } },
                '8': { start: { line: 83, column: 6 }, end: { line: 83, column: 48 } },
                '9': { start: { line: 148, column: 0 }, end: { line: 165, column: 2 } },
                '10': { start: { line: 149, column: 2 }, end: { line: 149, column: 50 } },
                '11': { start: { line: 151, column: 2 }, end: { line: 164, column: 3 } },
                '12': { start: { line: 152, column: 4 }, end: { line: 152, column: 11 } },
                '13': { start: { line: 155, column: 4 }, end: { line: 155, column: 40 } },
                '14': { start: { line: 157, column: 4 }, end: { line: 157, column: 49 } },
                '15': { start: { line: 158, column: 4 }, end: { line: 163, column: 5 } },
                '16': { start: { line: 160, column: 6 }, end: { line: 160, column: 47 } },
                '17': { start: { line: 162, column: 6 }, end: { line: 162, column: 48 } },
                '18': { start: { line: 168, column: 0 }, end: { line: 179, column: 2 } },
                '19': { start: { line: 170, column: 2 }, end: { line: 177, column: 3 } },
                '20': { start: { line: 171, column: 4 }, end: { line: 176, column: 6 } },
                '21': { start: { line: 178, column: 2 }, end: { line: 178, column: 70 } },
                '22': { start: { line: 182, column: 0 }, end: { line: 278, column: 2 } },
                '23': { start: { line: 183, column: 14 }, end: { line: 183, column: 28 } },
                '24': { start: { line: 185, column: 2 }, end: { line: 191, column: 3 } },
                '25': { start: { line: 186, column: 4 }, end: { line: 190, column: 6 } },
                '26': { start: { line: 193, column: 2 }, end: { line: 195, column: 3 } },
                '27': { start: { line: 194, column: 4 }, end: { line: 194, column: 62 } },
                '28': { start: { line: 197, column: 14 }, end: { line: 197, column: 16 } },
                '29': { start: { line: 198, column: 2 }, end: { line: 236, column: 3 } },
                '30': { start: { line: 199, column: 4 }, end: { line: 199, column: 24 } },
                '31': { start: { line: 200, column: 4 }, end: { line: 200, column: 43 } },
                '32': { start: { line: 201, column: 4 }, end: { line: 217, column: 5 } },
                '33': { start: { line: 203, column: 6 }, end: { line: 216, column: 7 } },
                '34': { start: { line: 205, column: 8 }, end: { line: 207, column: 96 } },
                '35': { start: { line: 210, column: 8 }, end: { line: 215, column: 12 } },
                '36': { start: { line: 218, column: 9 }, end: { line: 236, column: 3 } },
                '37': { start: { line: 219, column: 4 }, end: { line: 219, column: 20 } },
                '38': { start: { line: 220, column: 4 }, end: { line: 220, column: 34 } },
                '39': { start: { line: 221, column: 4 }, end: { line: 221, column: 53 } },
                '40': { start: { line: 222, column: 4 }, end: { line: 235, column: 5 } },
                '41': { start: { line: 224, column: 6 }, end: { line: 234, column: 7 } },
                '42': { start: { line: 226, column: 8 }, end: { line: 228, column: 75 } },
                '43': { start: { line: 231, column: 8 }, end: { line: 233, column: 75 } },
                '44': { start: { line: 238, column: 2 }, end: { line: 238, column: 37 } },
                '45': { start: { line: 239, column: 2 }, end: { line: 271, column: 3 } },
                '46': { start: { line: 240, column: 4 }, end: { line: 240, column: 42 } },
                '47': { start: { line: 241, column: 4 }, end: { line: 241, column: 246 } },
                '48': { start: { line: 243, column: 4 }, end: { line: 251, column: 5 } },
                '49': { start: { line: 245, column: 6 }, end: { line: 247, column: 50 } },
                '50': { start: { line: 250, column: 6 }, end: { line: 250, column: 69 } },
                '51': { start: { line: 253, column: 4 }, end: { line: 255, column: 6 } },
                '52': { start: { line: 256, column: 9 }, end: { line: 271, column: 3 } },
                '53': { start: { line: 257, column: 4 }, end: { line: 257, column: 42 } },
                '54': { start: { line: 258, column: 4 }, end: { line: 258, column: 243 } },
                '55': { start: { line: 260, column: 4 }, end: { line: 266, column: 5 } },
                '56': { start: { line: 262, column: 6 }, end: { line: 262, column: 79 } },
                '57': { start: { line: 265, column: 6 }, end: { line: 265, column: 69 } },
                '58': { start: { line: 268, column: 4 }, end: { line: 270, column: 6 } },
                '59': { start: { line: 272, column: 2 }, end: { line: 274, column: 4 } },
                '60': { start: { line: 275, column: 2 }, end: { line: 277, column: 4 } },
                '61': { start: { line: 282, column: 0 }, end: { line: 301, column: 2 } },
                '62': { start: { line: 283, column: 14 }, end: { line: 283, column: 28 } },
                '63': { start: { line: 285, column: 2 }, end: { line: 300, column: 3 } },
                '64': { start: { line: 287, column: 4 }, end: { line: 287, column: 71 } },
                '65': { start: { line: 288, column: 4 }, end: { line: 290, column: 5 } },
                '66': { start: { line: 289, column: 6 }, end: { line: 289, column: 51 } },
                '67': { start: { line: 291, column: 4 }, end: { line: 293, column: 5 } },
                '68': { start: { line: 292, column: 6 }, end: { line: 292, column: 51 } },
                '69': { start: { line: 294, column: 4 }, end: { line: 296, column: 5 } },
                '70': { start: { line: 295, column: 6 }, end: { line: 295, column: 56 } },
                '71': { start: { line: 297, column: 4 }, end: { line: 299, column: 5 } },
                '72': { start: { line: 298, column: 6 }, end: { line: 298, column: 56 } },
                '73': { start: { line: 305, column: 0 }, end: { line: 315, column: 2 } },
                '74': { start: { line: 307, column: 2 }, end: { line: 307, column: 69 } },
                '75': { start: { line: 309, column: 2 }, end: { line: 309, column: 31 } },
                '76': { start: { line: 311, column: 2 }, end: { line: 314, column: 3 } },
                '77': { start: { line: 312, column: 4 }, end: { line: 312, column: 50 } },
                '78': { start: { line: 313, column: 4 }, end: { line: 313, column: 66 } },
                '79': { start: { line: 318, column: 0 }, end: { line: 332, column: 2 } },
                '80': { start: { line: 319, column: 2 }, end: { line: 331, column: 3 } },
                '81': { start: { line: 321, column: 4 }, end: { line: 324, column: 5 } },
                '82': { start: { line: 322, column: 6 }, end: { line: 322, column: 46 } },
                '83': { start: { line: 323, column: 6 }, end: { line: 323, column: 62 } },
                '84': { start: { line: 325, column: 9 }, end: { line: 331, column: 3 } },
                '85': { start: { line: 327, column: 4 }, end: { line: 330, column: 5 } },
                '86': { start: { line: 328, column: 6 }, end: { line: 328, column: 48 } },
                '87': { start: { line: 329, column: 6 }, end: { line: 329, column: 64 } },
                '88': { start: { line: 335, column: 0 }, end: { line: 394, column: 2 } },
                '89': { start: { line: 336, column: 2 }, end: { line: 340, column: 3 } },
                '90': { start: { line: 337, column: 4 }, end: { line: 337, column: 17 } },
                '91': { start: { line: 338, column: 9 }, end: { line: 340, column: 3 } },
                '92': { start: { line: 339, column: 4 }, end: { line: 339, column: 17 } },
                '93': { start: { line: 341, column: 16 }, end: { line: 341, column: 18 } },
                '94': { start: { line: 342, column: 12 }, end: { line: 342, column: 16 } },
                '95': { start: { line: 343, column: 15 }, end: { line: 343, column: 34 } },
                '96': { start: { line: 344, column: 2 }, end: { line: 373, column: 3 } },
                '97': { start: { line: 346, column: 4 }, end: { line: 346, column: 51 } },
                '98': { start: { line: 348, column: 4 }, end: { line: 348, column: 79 } },
                '99': { start: { line: 350, column: 13 }, end: { line: 350, column: 61 } },
                '100': { start: { line: 351, column: 13 }, end: { line: 351, column: 61 } },
                '101': { start: { line: 352, column: 4 }, end: { line: 352, column: 66 } },
                '102': { start: { line: 353, column: 4 }, end: { line: 357, column: 5 } },
                '103': { start: { line: 354, column: 6 }, end: { line: 354, column: 31 } },
                '104': { start: { line: 356, column: 6 }, end: { line: 356, column: 42 } },
                '105': { start: { line: 359, column: 4 }, end: { line: 367, column: 5 } },
                '106': { start: { line: 361, column: 6 }, end: { line: 361, column: 53 } },
                '107': { start: { line: 364, column: 6 }, end: { line: 364, column: 51 } },
                '108': { start: { line: 366, column: 6 }, end: { line: 366, column: 64 } },
                '109': { start: { line: 370, column: 4 }, end: { line: 370, column: 59 } },
                '110': { start: { line: 372, column: 4 }, end: { line: 372, column: 66 } },
                '111': { start: { line: 375, column: 2 }, end: { line: 393, column: 3 } },
                '112': { start: { line: 376, column: 4 }, end: { line: 376, column: 43 } },
                '113': { start: { line: 378, column: 9 }, end: { line: 393, column: 3 } },
                '114': { start: { line: 380, column: 4 }, end: { line: 388, column: 5 } },
                '115': { start: { line: 382, column: 6 }, end: { line: 387, column: 7 } },
                '116': { start: { line: 386, column: 8 }, end: { line: 386, column: 20 } },
                '117': { start: { line: 390, column: 4 }, end: { line: 392, column: 5 } },
                '118': { start: { line: 391, column: 6 }, end: { line: 391, column: 47 } },
                '119': { start: { line: 399, column: 2 }, end: { line: 420, column: 3 } },
                '120': { start: { line: 406, column: 4 }, end: { line: 406, column: 42 } },
                '121': { start: { line: 407, column: 4 }, end: { line: 407, column: 42 } },
                '122': { start: { line: 408, column: 9 }, end: { line: 420, column: 3 } },
                '123': { start: { line: 409, column: 4 }, end: { line: 409, column: 42 } },
                '124': { start: { line: 410, column: 4 }, end: { line: 410, column: 42 } },
                '125': { start: { line: 411, column: 9 }, end: { line: 420, column: 3 } },
                '126': { start: { line: 412, column: 4 }, end: { line: 412, column: 52 } },
                '127': { start: { line: 413, column: 4 }, end: { line: 413, column: 52 } },
                '128': { start: { line: 414, column: 9 }, end: { line: 420, column: 3 } },
                '129': { start: { line: 415, column: 4 }, end: { line: 415, column: 32 } },
                '130': { start: { line: 416, column: 4 }, end: { line: 416, column: 32 } },
                '131': { start: { line: 418, column: 4 }, end: { line: 418, column: 16 } },
                '132': { start: { line: 419, column: 4 }, end: { line: 419, column: 16 } },
                '133': { start: { line: 421, column: 2 }, end: { line: 421, column: 16 } },
                '134': { start: { line: 426, column: 2 }, end: { line: 450, column: 3 } },
                '135': { start: { line: 427, column: 4 }, end: { line: 433, column: 5 } },
                '136': { start: { line: 428, column: 6 }, end: { line: 428, column: 24 } },
                '137': { start: { line: 429, column: 11 }, end: { line: 433, column: 5 } },
                '138': { start: { line: 430, column: 6 }, end: { line: 430, column: 27 } },
                '139': { start: { line: 432, column: 6 }, end: { line: 432, column: 24 } },
                '140': { start: { line: 434, column: 9 }, end: { line: 450, column: 3 } },
                '141': { start: { line: 435, column: 4 }, end: { line: 441, column: 5 } },
                '142': { start: { line: 436, column: 6 }, end: { line: 436, column: 25 } },
                '143': { start: { line: 437, column: 11 }, end: { line: 441, column: 5 } },
                '144': { start: { line: 438, column: 6 }, end: { line: 438, column: 28 } },
                '145': { start: { line: 440, column: 6 }, end: { line: 440, column: 25 } },
                '146': { start: { line: 443, column: 4 }, end: { line: 449, column: 5 } },
                '147': { start: { line: 444, column: 6 }, end: { line: 444, column: 26 } },
                '148': { start: { line: 445, column: 11 }, end: { line: 449, column: 5 } },
                '149': { start: { line: 446, column: 6 }, end: { line: 446, column: 29 } },
                '150': { start: { line: 448, column: 6 }, end: { line: 448, column: 22 } },
                '151': { start: { line: 455, column: 17 }, end: { line: 455, column: 19 } },
                '152': { start: { line: 456, column: 17 }, end: { line: 456, column: 19 } },
                '153': { start: { line: 457, column: 13 }, end: { line: 457, column: 55 } },
                '154': { start: { line: 458, column: 13 }, end: { line: 458, column: 56 } },
                '155': { start: { line: 459, column: 2 }, end: { line: 461, column: 3 } },
                '156': { start: { line: 460, column: 4 }, end: { line: 460, column: 20 } },
                '157': { start: { line: 462, column: 2 }, end: { line: 464, column: 3 } },
                '158': { start: { line: 463, column: 4 }, end: { line: 463, column: 20 } },
                '159': { start: { line: 465, column: 2 }, end: { line: 468, column: 4 } },
                '160': { start: { line: 473, column: 19 }, end: { line: 473, column: 20 } },
                '161': { start: { line: 474, column: 2 }, end: { line: 528, column: 3 } },
                '162': { start: { line: 479, column: 6 }, end: { line: 480, column: 19 } },
                '163': { start: { line: 481, column: 4 }, end: { line: 481, column: 68 } },
                '164': { start: { line: 482, column: 4 }, end: { line: 502, column: 5 } },
                '165': { start: { line: 485, column: 17 }, end: { line: 485, column: 29 } },
                '166': { start: { line: 486, column: 17 }, end: { line: 486, column: 29 } },
                '167': { start: { line: 488, column: 8 }, end: { line: 488, column: 75 } },
                '168': { start: { line: 490, column: 8 }, end: { line: 490, column: 75 } },
                '169': { start: { line: 492, column: 8 }, end: { line: 492, column: 75 } },
                '170': { start: { line: 494, column: 8 }, end: { line: 494, column: 75 } },
                '171': { start: { line: 496, column: 8 }, end: { line: 496, column: 70 } },
                '172': { start: { line: 497, column: 6 }, end: { line: 501, column: 7 } },
                '173': { start: { line: 498, column: 8 }, end: { line: 498, column: 54 } },
                '174': { start: { line: 500, column: 8 }, end: { line: 500, column: 54 } },
                '175': { start: { line: 503, column: 9 }, end: { line: 528, column: 3 } },
                '176': { start: { line: 504, column: 4 }, end: { line: 504, column: 60 } },
                '177': { start: { line: 505, column: 9 }, end: { line: 528, column: 3 } },
                '178': { start: { line: 506, column: 4 }, end: { line: 506, column: 19 } },
                '179': { start: { line: 507, column: 9 }, end: { line: 528, column: 3 } },
                '180': { start: { line: 508, column: 4 }, end: { line: 508, column: 19 } },
                '181': { start: { line: 509, column: 9 }, end: { line: 528, column: 3 } },
                '182': { start: { line: 511, column: 4 }, end: { line: 517, column: 12 } },
                '183': { start: { line: 518, column: 9 }, end: { line: 528, column: 3 } },
                '184': { start: { line: 519, column: 4 }, end: { line: 519, column: 45 } },
                '185': { start: { line: 520, column: 9 }, end: { line: 528, column: 3 } },
                '186': { start: { line: 521, column: 4 }, end: { line: 526, column: 12 } },
                '187': { start: { line: 530, column: 2 }, end: { line: 530, column: 69 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 69, column: 26 }, end: { line: 69, column: 27 } },
                  loc: { start: { line: 69, column: 44 }, end: { line: 86, column: 1 } },
                  line: 69
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: {
                    start: { line: 148, column: 26 },
                    end: { line: 148, column: 27 }
                  },
                  loc: { start: { line: 148, column: 44 }, end: { line: 165, column: 1 } },
                  line: 148
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 168, column: 30 },
                    end: { line: 168, column: 31 }
                  },
                  loc: { start: { line: 168, column: 41 }, end: { line: 179, column: 1 } },
                  line: 168
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 182, column: 29 },
                    end: { line: 182, column: 30 }
                  },
                  loc: { start: { line: 182, column: 53 }, end: { line: 278, column: 1 } },
                  line: 182
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 282, column: 33 },
                    end: { line: 282, column: 34 }
                  },
                  loc: { start: { line: 282, column: 44 }, end: { line: 301, column: 1 } },
                  line: 282
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 305, column: 31 },
                    end: { line: 305, column: 32 }
                  },
                  loc: { start: { line: 305, column: 46 }, end: { line: 315, column: 1 } },
                  line: 305
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 318, column: 33 },
                    end: { line: 318, column: 34 }
                  },
                  loc: { start: { line: 318, column: 51 }, end: { line: 332, column: 1 } },
                  line: 318
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 335, column: 27 },
                    end: { line: 335, column: 28 }
                  },
                  loc: { start: { line: 335, column: 45 }, end: { line: 394, column: 1 } },
                  line: 335
                },
                '8': {
                  name: '_getMiddle',
                  decl: { start: { line: 397, column: 9 }, end: { line: 397, column: 19 } },
                  loc: { start: { line: 397, column: 29 }, end: { line: 422, column: 1 } },
                  line: 397
                },
                '9': {
                  name: '_getPos',
                  decl: { start: { line: 425, column: 9 }, end: { line: 425, column: 16 } },
                  loc: { start: { line: 425, column: 50 }, end: { line: 451, column: 1 } },
                  line: 425
                },
                '10': {
                  name: '_canvasLocator',
                  decl: { start: { line: 454, column: 9 }, end: { line: 454, column: 23 } },
                  loc: { start: { line: 454, column: 57 }, end: { line: 469, column: 1 } },
                  line: 454
                },
                '11': {
                  name: '_getArea',
                  decl: { start: { line: 472, column: 9 }, end: { line: 472, column: 17 } },
                  loc: { start: { line: 472, column: 68 }, end: { line: 531, column: 1 } },
                  line: 472
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 72, column: 2 }, end: { line: 85, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 72, column: 2 }, end: { line: 85, column: 3 } },
                    { start: { line: 72, column: 2 }, end: { line: 85, column: 3 } }
                  ],
                  line: 72
                },
                '1': {
                  loc: { start: { line: 79, column: 4 }, end: { line: 84, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 79, column: 4 }, end: { line: 84, column: 5 } },
                    { start: { line: 79, column: 4 }, end: { line: 84, column: 5 } }
                  ],
                  line: 79
                },
                '2': {
                  loc: { start: { line: 151, column: 2 }, end: { line: 164, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 151, column: 2 }, end: { line: 164, column: 3 } },
                    { start: { line: 151, column: 2 }, end: { line: 164, column: 3 } }
                  ],
                  line: 151
                },
                '3': {
                  loc: { start: { line: 158, column: 4 }, end: { line: 163, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 158, column: 4 }, end: { line: 163, column: 5 } },
                    { start: { line: 158, column: 4 }, end: { line: 163, column: 5 } }
                  ],
                  line: 158
                },
                '4': {
                  loc: { start: { line: 170, column: 2 }, end: { line: 177, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 170, column: 2 }, end: { line: 177, column: 3 } },
                    { start: { line: 170, column: 2 }, end: { line: 177, column: 3 } }
                  ],
                  line: 170
                },
                '5': {
                  loc: { start: { line: 178, column: 9 }, end: { line: 178, column: 69 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 178, column: 9 }, end: { line: 178, column: 37 } },
                    { start: { line: 178, column: 41 }, end: { line: 178, column: 69 } }
                  ],
                  line: 178
                },
                '6': {
                  loc: { start: { line: 185, column: 2 }, end: { line: 191, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 185, column: 2 }, end: { line: 191, column: 3 } },
                    { start: { line: 185, column: 2 }, end: { line: 191, column: 3 } }
                  ],
                  line: 185
                },
                '7': {
                  loc: { start: { line: 193, column: 2 }, end: { line: 195, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 193, column: 2 }, end: { line: 195, column: 3 } },
                    { start: { line: 193, column: 2 }, end: { line: 195, column: 3 } }
                  ],
                  line: 193
                },
                '8': {
                  loc: { start: { line: 198, column: 2 }, end: { line: 236, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 198, column: 2 }, end: { line: 236, column: 3 } },
                    { start: { line: 198, column: 2 }, end: { line: 236, column: 3 } }
                  ],
                  line: 198
                },
                '9': {
                  loc: { start: { line: 201, column: 4 }, end: { line: 217, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 201, column: 4 }, end: { line: 217, column: 5 } },
                    { start: { line: 201, column: 4 }, end: { line: 217, column: 5 } }
                  ],
                  line: 201
                },
                '10': {
                  loc: { start: { line: 203, column: 6 }, end: { line: 216, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 203, column: 6 }, end: { line: 216, column: 7 } },
                    { start: { line: 203, column: 6 }, end: { line: 216, column: 7 } }
                  ],
                  line: 203
                },
                '11': {
                  loc: { start: { line: 218, column: 9 }, end: { line: 236, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 218, column: 9 }, end: { line: 236, column: 3 } },
                    { start: { line: 218, column: 9 }, end: { line: 236, column: 3 } }
                  ],
                  line: 218
                },
                '12': {
                  loc: { start: { line: 222, column: 4 }, end: { line: 235, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 222, column: 4 }, end: { line: 235, column: 5 } },
                    { start: { line: 222, column: 4 }, end: { line: 235, column: 5 } }
                  ],
                  line: 222
                },
                '13': {
                  loc: { start: { line: 224, column: 6 }, end: { line: 234, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 224, column: 6 }, end: { line: 234, column: 7 } },
                    { start: { line: 224, column: 6 }, end: { line: 234, column: 7 } }
                  ],
                  line: 224
                },
                '14': {
                  loc: { start: { line: 239, column: 2 }, end: { line: 271, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 239, column: 2 }, end: { line: 271, column: 3 } },
                    { start: { line: 239, column: 2 }, end: { line: 271, column: 3 } }
                  ],
                  line: 239
                },
                '15': {
                  loc: { start: { line: 243, column: 4 }, end: { line: 251, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 243, column: 4 }, end: { line: 251, column: 5 } },
                    { start: { line: 243, column: 4 }, end: { line: 251, column: 5 } }
                  ],
                  line: 243
                },
                '16': {
                  loc: { start: { line: 256, column: 9 }, end: { line: 271, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 256, column: 9 }, end: { line: 271, column: 3 } },
                    { start: { line: 256, column: 9 }, end: { line: 271, column: 3 } }
                  ],
                  line: 256
                },
                '17': {
                  loc: { start: { line: 260, column: 4 }, end: { line: 266, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 260, column: 4 }, end: { line: 266, column: 5 } },
                    { start: { line: 260, column: 4 }, end: { line: 266, column: 5 } }
                  ],
                  line: 260
                },
                '18': {
                  loc: { start: { line: 285, column: 2 }, end: { line: 300, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 285, column: 2 }, end: { line: 300, column: 3 } },
                    { start: { line: 285, column: 2 }, end: { line: 300, column: 3 } }
                  ],
                  line: 285
                },
                '19': {
                  loc: { start: { line: 288, column: 4 }, end: { line: 290, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 288, column: 4 }, end: { line: 290, column: 5 } },
                    { start: { line: 288, column: 4 }, end: { line: 290, column: 5 } }
                  ],
                  line: 288
                },
                '20': {
                  loc: { start: { line: 291, column: 4 }, end: { line: 293, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 291, column: 4 }, end: { line: 293, column: 5 } },
                    { start: { line: 291, column: 4 }, end: { line: 293, column: 5 } }
                  ],
                  line: 291
                },
                '21': {
                  loc: { start: { line: 294, column: 4 }, end: { line: 296, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 294, column: 4 }, end: { line: 296, column: 5 } },
                    { start: { line: 294, column: 4 }, end: { line: 296, column: 5 } }
                  ],
                  line: 294
                },
                '22': {
                  loc: { start: { line: 297, column: 4 }, end: { line: 299, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 297, column: 4 }, end: { line: 299, column: 5 } },
                    { start: { line: 297, column: 4 }, end: { line: 299, column: 5 } }
                  ],
                  line: 297
                },
                '23': {
                  loc: { start: { line: 311, column: 2 }, end: { line: 314, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 311, column: 2 }, end: { line: 314, column: 3 } },
                    { start: { line: 311, column: 2 }, end: { line: 314, column: 3 } }
                  ],
                  line: 311
                },
                '24': {
                  loc: { start: { line: 319, column: 2 }, end: { line: 331, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 319, column: 2 }, end: { line: 331, column: 3 } },
                    { start: { line: 319, column: 2 }, end: { line: 331, column: 3 } }
                  ],
                  line: 319
                },
                '25': {
                  loc: { start: { line: 321, column: 4 }, end: { line: 324, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 321, column: 4 }, end: { line: 324, column: 5 } },
                    { start: { line: 321, column: 4 }, end: { line: 324, column: 5 } }
                  ],
                  line: 321
                },
                '26': {
                  loc: { start: { line: 325, column: 9 }, end: { line: 331, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 325, column: 9 }, end: { line: 331, column: 3 } },
                    { start: { line: 325, column: 9 }, end: { line: 331, column: 3 } }
                  ],
                  line: 325
                },
                '27': {
                  loc: { start: { line: 327, column: 4 }, end: { line: 330, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 327, column: 4 }, end: { line: 330, column: 5 } },
                    { start: { line: 327, column: 4 }, end: { line: 330, column: 5 } }
                  ],
                  line: 327
                },
                '28': {
                  loc: { start: { line: 336, column: 2 }, end: { line: 340, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 336, column: 2 }, end: { line: 340, column: 3 } },
                    { start: { line: 336, column: 2 }, end: { line: 340, column: 3 } }
                  ],
                  line: 336
                },
                '29': {
                  loc: { start: { line: 336, column: 6 }, end: { line: 336, column: 44 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 336, column: 6 }, end: { line: 336, column: 21 } },
                    { start: { line: 336, column: 25 }, end: { line: 336, column: 44 } }
                  ],
                  line: 336
                },
                '30': {
                  loc: { start: { line: 338, column: 9 }, end: { line: 340, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 338, column: 9 }, end: { line: 340, column: 3 } },
                    { start: { line: 338, column: 9 }, end: { line: 340, column: 3 } }
                  ],
                  line: 338
                },
                '31': {
                  loc: { start: { line: 338, column: 13 }, end: { line: 338, column: 53 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 338, column: 13 }, end: { line: 338, column: 30 } },
                    { start: { line: 338, column: 34 }, end: { line: 338, column: 53 } }
                  ],
                  line: 338
                },
                '32': {
                  loc: { start: { line: 344, column: 2 }, end: { line: 373, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 344, column: 2 }, end: { line: 373, column: 3 } },
                    { start: { line: 344, column: 2 }, end: { line: 373, column: 3 } }
                  ],
                  line: 344
                },
                '33': {
                  loc: { start: { line: 353, column: 4 }, end: { line: 357, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 353, column: 4 }, end: { line: 357, column: 5 } },
                    { start: { line: 353, column: 4 }, end: { line: 357, column: 5 } }
                  ],
                  line: 353
                },
                '34': {
                  loc: { start: { line: 359, column: 4 }, end: { line: 367, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 359, column: 4 }, end: { line: 367, column: 5 } },
                    { start: { line: 359, column: 4 }, end: { line: 367, column: 5 } }
                  ],
                  line: 359
                },
                '35': {
                  loc: { start: { line: 375, column: 2 }, end: { line: 393, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 375, column: 2 }, end: { line: 393, column: 3 } },
                    { start: { line: 375, column: 2 }, end: { line: 393, column: 3 } }
                  ],
                  line: 375
                },
                '36': {
                  loc: { start: { line: 378, column: 9 }, end: { line: 393, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 378, column: 9 }, end: { line: 393, column: 3 } },
                    { start: { line: 378, column: 9 }, end: { line: 393, column: 3 } }
                  ],
                  line: 378
                },
                '37': {
                  loc: { start: { line: 382, column: 6 }, end: { line: 387, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 382, column: 6 }, end: { line: 387, column: 7 } },
                    { start: { line: 382, column: 6 }, end: { line: 387, column: 7 } }
                  ],
                  line: 382
                },
                '38': {
                  loc: { start: { line: 390, column: 4 }, end: { line: 392, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 390, column: 4 }, end: { line: 392, column: 5 } },
                    { start: { line: 390, column: 4 }, end: { line: 392, column: 5 } }
                  ],
                  line: 390
                },
                '39': {
                  loc: { start: { line: 399, column: 2 }, end: { line: 420, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 399, column: 2 }, end: { line: 420, column: 3 } },
                    { start: { line: 399, column: 2 }, end: { line: 420, column: 3 } }
                  ],
                  line: 399
                },
                '40': {
                  loc: { start: { line: 400, column: 4 }, end: { line: 404, column: 18 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 400, column: 4 }, end: { line: 400, column: 21 } },
                    { start: { line: 401, column: 4 }, end: { line: 401, column: 19 } },
                    { start: { line: 402, column: 4 }, end: { line: 402, column: 15 } },
                    { start: { line: 403, column: 4 }, end: { line: 403, column: 18 } },
                    { start: { line: 404, column: 4 }, end: { line: 404, column: 18 } }
                  ],
                  line: 400
                },
                '41': {
                  loc: { start: { line: 408, column: 9 }, end: { line: 420, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 408, column: 9 }, end: { line: 420, column: 3 } },
                    { start: { line: 408, column: 9 }, end: { line: 420, column: 3 } }
                  ],
                  line: 408
                },
                '42': {
                  loc: { start: { line: 411, column: 9 }, end: { line: 420, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 411, column: 9 }, end: { line: 420, column: 3 } },
                    { start: { line: 411, column: 9 }, end: { line: 420, column: 3 } }
                  ],
                  line: 411
                },
                '43': {
                  loc: { start: { line: 414, column: 9 }, end: { line: 420, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 414, column: 9 }, end: { line: 420, column: 3 } },
                    { start: { line: 414, column: 9 }, end: { line: 420, column: 3 } }
                  ],
                  line: 414
                },
                '44': {
                  loc: { start: { line: 426, column: 2 }, end: { line: 450, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 426, column: 2 }, end: { line: 450, column: 3 } },
                    { start: { line: 426, column: 2 }, end: { line: 450, column: 3 } }
                  ],
                  line: 426
                },
                '45': {
                  loc: { start: { line: 427, column: 4 }, end: { line: 433, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 427, column: 4 }, end: { line: 433, column: 5 } },
                    { start: { line: 427, column: 4 }, end: { line: 433, column: 5 } }
                  ],
                  line: 427
                },
                '46': {
                  loc: { start: { line: 429, column: 11 }, end: { line: 433, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 429, column: 11 }, end: { line: 433, column: 5 } },
                    { start: { line: 429, column: 11 }, end: { line: 433, column: 5 } }
                  ],
                  line: 429
                },
                '47': {
                  loc: { start: { line: 434, column: 9 }, end: { line: 450, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 434, column: 9 }, end: { line: 450, column: 3 } },
                    { start: { line: 434, column: 9 }, end: { line: 450, column: 3 } }
                  ],
                  line: 434
                },
                '48': {
                  loc: { start: { line: 435, column: 4 }, end: { line: 441, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 435, column: 4 }, end: { line: 441, column: 5 } },
                    { start: { line: 435, column: 4 }, end: { line: 441, column: 5 } }
                  ],
                  line: 435
                },
                '49': {
                  loc: { start: { line: 437, column: 11 }, end: { line: 441, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 437, column: 11 }, end: { line: 441, column: 5 } },
                    { start: { line: 437, column: 11 }, end: { line: 441, column: 5 } }
                  ],
                  line: 437
                },
                '50': {
                  loc: { start: { line: 443, column: 4 }, end: { line: 449, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 443, column: 4 }, end: { line: 449, column: 5 } },
                    { start: { line: 443, column: 4 }, end: { line: 449, column: 5 } }
                  ],
                  line: 443
                },
                '51': {
                  loc: { start: { line: 445, column: 11 }, end: { line: 449, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 445, column: 11 }, end: { line: 449, column: 5 } },
                    { start: { line: 445, column: 11 }, end: { line: 449, column: 5 } }
                  ],
                  line: 445
                },
                '52': {
                  loc: { start: { line: 459, column: 2 }, end: { line: 461, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 459, column: 2 }, end: { line: 461, column: 3 } },
                    { start: { line: 459, column: 2 }, end: { line: 461, column: 3 } }
                  ],
                  line: 459
                },
                '53': {
                  loc: { start: { line: 462, column: 2 }, end: { line: 464, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 462, column: 2 }, end: { line: 464, column: 3 } },
                    { start: { line: 462, column: 2 }, end: { line: 464, column: 3 } }
                  ],
                  line: 462
                },
                '54': {
                  loc: { start: { line: 474, column: 2 }, end: { line: 528, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 474, column: 2 }, end: { line: 528, column: 3 } },
                    { start: { line: 474, column: 2 }, end: { line: 528, column: 3 } }
                  ],
                  line: 474
                },
                '55': {
                  loc: { start: { line: 482, column: 4 }, end: { line: 502, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 482, column: 4 }, end: { line: 502, column: 5 } },
                    { start: { line: 482, column: 4 }, end: { line: 502, column: 5 } }
                  ],
                  line: 482
                },
                '56': {
                  loc: { start: { line: 482, column: 8 }, end: { line: 482, column: 59 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 482, column: 8 }, end: { line: 482, column: 31 } },
                    { start: { line: 482, column: 35 }, end: { line: 482, column: 59 } }
                  ],
                  line: 482
                },
                '57': {
                  loc: { start: { line: 497, column: 6 }, end: { line: 501, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 497, column: 6 }, end: { line: 501, column: 7 } },
                    { start: { line: 497, column: 6 }, end: { line: 501, column: 7 } }
                  ],
                  line: 497
                },
                '58': {
                  loc: { start: { line: 503, column: 9 }, end: { line: 528, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 503, column: 9 }, end: { line: 528, column: 3 } },
                    { start: { line: 503, column: 9 }, end: { line: 528, column: 3 } }
                  ],
                  line: 503
                },
                '59': {
                  loc: { start: { line: 503, column: 13 }, end: { line: 503, column: 64 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 503, column: 13 }, end: { line: 503, column: 37 } },
                    { start: { line: 503, column: 41 }, end: { line: 503, column: 64 } }
                  ],
                  line: 503
                },
                '60': {
                  loc: { start: { line: 505, column: 9 }, end: { line: 528, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 505, column: 9 }, end: { line: 528, column: 3 } },
                    { start: { line: 505, column: 9 }, end: { line: 528, column: 3 } }
                  ],
                  line: 505
                },
                '61': {
                  loc: { start: { line: 507, column: 9 }, end: { line: 528, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 507, column: 9 }, end: { line: 528, column: 3 } },
                    { start: { line: 507, column: 9 }, end: { line: 528, column: 3 } }
                  ],
                  line: 507
                },
                '62': {
                  loc: { start: { line: 509, column: 9 }, end: { line: 528, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 509, column: 9 }, end: { line: 528, column: 3 } },
                    { start: { line: 509, column: 9 }, end: { line: 528, column: 3 } }
                  ],
                  line: 509
                },
                '63': {
                  loc: { start: { line: 518, column: 9 }, end: { line: 528, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 518, column: 9 }, end: { line: 528, column: 3 } },
                    { start: { line: 518, column: 9 }, end: { line: 528, column: 3 } }
                  ],
                  line: 518
                },
                '64': {
                  loc: { start: { line: 518, column: 13 }, end: { line: 518, column: 66 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 518, column: 13 }, end: { line: 518, column: 39 } },
                    { start: { line: 518, column: 43 }, end: { line: 518, column: 66 } }
                  ],
                  line: 518
                },
                '65': {
                  loc: { start: { line: 520, column: 9 }, end: { line: 528, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 520, column: 9 }, end: { line: 528, column: 3 } },
                    { start: { line: 520, column: 9 }, end: { line: 528, column: 3 } }
                  ],
                  line: 520
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0,
                '118': 0,
                '119': 0,
                '120': 0,
                '121': 0,
                '122': 0,
                '123': 0,
                '124': 0,
                '125': 0,
                '126': 0,
                '127': 0,
                '128': 0,
                '129': 0,
                '130': 0,
                '131': 0,
                '132': 0,
                '133': 0,
                '134': 0,
                '135': 0,
                '136': 0,
                '137': 0,
                '138': 0,
                '139': 0,
                '140': 0,
                '141': 0,
                '142': 0,
                '143': 0,
                '144': 0,
                '145': 0,
                '146': 0,
                '147': 0,
                '148': 0,
                '149': 0,
                '150': 0,
                '151': 0,
                '152': 0,
                '153': 0,
                '154': 0,
                '155': 0,
                '156': 0,
                '157': 0,
                '158': 0,
                '159': 0,
                '160': 0,
                '161': 0,
                '162': 0,
                '163': 0,
                '164': 0,
                '165': 0,
                '166': 0,
                '167': 0,
                '168': 0,
                '169': 0,
                '170': 0,
                '171': 0,
                '172': 0,
                '173': 0,
                '174': 0,
                '175': 0,
                '176': 0,
                '177': 0,
                '178': 0,
                '179': 0,
                '180': 0,
                '181': 0,
                '182': 0,
                '183': 0,
                '184': 0,
                '185': 0,
                '186': 0,
                '187': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0],
                '20': [0, 0],
                '21': [0, 0],
                '22': [0, 0],
                '23': [0, 0],
                '24': [0, 0],
                '25': [0, 0],
                '26': [0, 0],
                '27': [0, 0],
                '28': [0, 0],
                '29': [0, 0],
                '30': [0, 0],
                '31': [0, 0],
                '32': [0, 0],
                '33': [0, 0],
                '34': [0, 0],
                '35': [0, 0],
                '36': [0, 0],
                '37': [0, 0],
                '38': [0, 0],
                '39': [0, 0],
                '40': [0, 0, 0, 0, 0],
                '41': [0, 0],
                '42': [0, 0],
                '43': [0, 0],
                '44': [0, 0],
                '45': [0, 0],
                '46': [0, 0],
                '47': [0, 0],
                '48': [0, 0],
                '49': [0, 0],
                '50': [0, 0],
                '51': [0, 0],
                '52': [0, 0],
                '53': [0, 0],
                '54': [0, 0],
                '55': [0, 0],
                '56': [0, 0],
                '57': [0, 0],
                '58': [0, 0],
                '59': [0, 0],
                '60': [0, 0],
                '61': [0, 0],
                '62': [0, 0],
                '63': [0, 0],
                '64': [0, 0],
                '65': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '40c904e962fd63a557e43ee6c806084fc7aaeb6d'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.concat');
          _dereq_('core-js/modules/es.array.fill');
          _dereq_('core-js/modules/es.array.map');
          _dereq_('core-js/modules/es.number.to-fixed');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_kag52ummu.s[0]++;

          /**
           * <code class="language-javascript">textOutput()</code> creates a screenreader
           * accessible output that describes the shapes present on the canvas.
           * The general description of the canvas includes canvas size,
           * canvas color, and number of elements in the canvas
           * (example: 'Your output is a, 400 by 400 pixels, lavender blue
           * canvas containing the following 4 shapes:'). This description
           * is followed by a list of shapes where the color, position, and area
           * of each shape are described (example: "orange ellipse at top left
           * covering 1% of the canvas"). Each element can be selected to get
           * more details. A table of elements is also provided. In this table,
           * shape, color, location, coordinates and area are described
           * (example: "orange ellipse location=top left area=2").
           *
           * <code class="language-javascript">textOutput()</code> and <code class="language-javascript">textOutput(FALLBACK)</code>
           * make the output available in <a href="https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Hit_regions_and_accessibility" target="_blank">
           * a sub DOM inside the canvas element</a> which is accessible to screen readers.
           * <code class="language-javascript">textOutput(LABEL)</code> creates an
           * additional div with the output adjacent to the canvas, this is useful
           * for non-screen reader users that might want to display the output outside
           * of the canvas' sub DOM as they code. However, using LABEL will create
           * unnecessary redundancy for screen reader users. We recommend using LABEL
           * only as part of the development process of a sketch and removing it before
           * publishing or sharing with screen reader users.
           *
           * @method textOutput
           * @param  {Constant} [display] either FALLBACK or LABEL
           *
           * @example
           * <div>
           * <code>
           * textOutput();
           * background(148, 196, 0);
           * fill(255, 0, 0);
           * ellipse(20, 20, 20, 20);
           * fill(0, 0, 255);
           * rect(50, 50, 50, 50);
           * </code>
           * </div>
           *
           *
           * <div>
           * <code>
           * let x = 0;
           * function draw() {
           *   textOutput();
           *   background(148, 196, 0);
           *   fill(255, 0, 0);
           *   ellipse(x, 20, 20, 20);
           *   fill(0, 0, 255);
           *   rect(50, 50, 50, 50);
           *   ellipse(20, 20, 20, 20);
           *   x += 0.1;
           * }
           * </code>
           * </div>
           *
           */

          _main.default.prototype.textOutput = function(display) {
            cov_kag52ummu.f[0]++;
            cov_kag52ummu.s[1]++;
            _main.default._validateParameters('textOutput', arguments);
            //if textOutput is already true
            cov_kag52ummu.s[2]++;
            if (this._accessibleOutputs.text) {
              cov_kag52ummu.b[0][0]++;
              cov_kag52ummu.s[3]++;
              return;
            } else {
              cov_kag52ummu.b[0][1]++;
              cov_kag52ummu.s[4]++;
              //make textOutput true
              this._accessibleOutputs.text = true;
              //create output for fallback
              cov_kag52ummu.s[5]++;
              this._createOutput('textOutput', 'Fallback');
              cov_kag52ummu.s[6]++;
              if (display === this.LABEL) {
                cov_kag52ummu.b[1][0]++;
                cov_kag52ummu.s[7]++;
                //make textOutput label true
                this._accessibleOutputs.textLabel = true;
                //create output for label
                cov_kag52ummu.s[8]++;
                this._createOutput('textOutput', 'Label');
              } else {
                cov_kag52ummu.b[1][1]++;
              }
            }
          };

          /**
           * <code class="language-javascript">gridOutput()</code> lays out the
           * content of the canvas in the form of a grid (html table) based
           * on the spatial location of each shape. A brief
           * description of the canvas is available before the table output.
           * This description includes: color of the background, size of the canvas,
           * number of objects, and object types (example: "lavender blue canvas is
           * 200 by 200 and contains 4 objects - 3 ellipses 1 rectangle"). The grid
           * describes the content spatially, each element is placed on a cell of the
           * table depending on its position. Within each cell an element the color
           * and type of shape of that element are available (example: "orange ellipse").
           * These descriptions can be selected individually to get more details.
           * A list of elements where shape, color, location, and area are described
           * (example: "orange ellipse location=top left area=1%") is also available.
           *
           * <code class="language-javascript">gridOutput()</code> and <code class="language-javascript">gridOutput(FALLBACK)</code>
           * make the output available in <a href="https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Hit_regions_and_accessibility" target="_blank">
           * a sub DOM inside the canvas element</a> which is accessible to screen readers.
           * <code class="language-javascript">gridOutput(LABEL)</code> creates an
           * additional div with the output adjacent to the canvas, this is useful
           * for non-screen reader users that might want to display the output outside
           * of the canvas' sub DOM as they code. However, using LABEL will create
           * unnecessary redundancy for screen reader users. We recommend using LABEL
           * only as part of the development process of a sketch and removing it before
           * publishing or sharing with screen reader users.
           *
           * @method gridOutput
           * @param  {Constant} [display] either FALLBACK or LABEL
           *
           * @example
           * <div>
           * <code>
           * gridOutput();
           * background(148, 196, 0);
           * fill(255, 0, 0);
           * ellipse(20, 20, 20, 20);
           * fill(0, 0, 255);
           * rect(50, 50, 50, 50);
           * </code>
           * </div>
           *
           *
           * <div>
           * <code>
           * let x = 0;
           * function draw() {
           *   gridOutput();
           *   background(148, 196, 0);
           *   fill(255, 0, 0);
           *   ellipse(x, 20, 20, 20);
           *   fill(0, 0, 255);
           *   rect(50, 50, 50, 50);
           *   ellipse(20, 20, 20, 20);
           *   x += 0.1;
           * }
           * </code>
           * </div>
           *
           */ cov_kag52ummu.s[9]++;

          _main.default.prototype.gridOutput = function(display) {
            cov_kag52ummu.f[1]++;
            cov_kag52ummu.s[10]++;
            _main.default._validateParameters('gridOutput', arguments);
            //if gridOutput is already true
            cov_kag52ummu.s[11]++;
            if (this._accessibleOutputs.grid) {
              cov_kag52ummu.b[2][0]++;
              cov_kag52ummu.s[12]++;
              return;
            } else {
              cov_kag52ummu.b[2][1]++;
              cov_kag52ummu.s[13]++;
              //make gridOutput true
              this._accessibleOutputs.grid = true;
              //create output for fallback
              cov_kag52ummu.s[14]++;
              this._createOutput('gridOutput', 'Fallback');
              cov_kag52ummu.s[15]++;
              if (display === this.LABEL) {
                cov_kag52ummu.b[3][0]++;
                cov_kag52ummu.s[16]++;
                //make gridOutput label true
                this._accessibleOutputs.gridLabel = true;
                //create output for label
                cov_kag52ummu.s[17]++;
                this._createOutput('gridOutput', 'Label');
              } else {
                cov_kag52ummu.b[3][1]++;
              }
            }
          };

          //helper function returns true when accessible outputs are true
          cov_kag52ummu.s[18]++;
          _main.default.prototype._addAccsOutput = function() {
            cov_kag52ummu.f[2]++;
            cov_kag52ummu.s[19]++;
            //if there are no accessible outputs create object with all false
            if (!this._accessibleOutputs) {
              cov_kag52ummu.b[4][0]++;
              cov_kag52ummu.s[20]++;
              this._accessibleOutputs = {
                text: false,
                grid: false,
                textLabel: false,
                gridLabel: false
              };
            } else {
              cov_kag52ummu.b[4][1]++;
            }
            cov_kag52ummu.s[21]++;
            return (
              (cov_kag52ummu.b[5][0]++, this._accessibleOutputs.grid) ||
              (cov_kag52ummu.b[5][1]++, this._accessibleOutputs.text)
            );
          };

          //helper function that creates html structure for accessible outputs
          cov_kag52ummu.s[22]++;
          _main.default.prototype._createOutput = function(type, display) {
            cov_kag52ummu.f[3]++;
            var cnvId = (cov_kag52ummu.s[23]++, this.canvas.id);
            //if there are no ingredients create object. this object stores data for the outputs
            cov_kag52ummu.s[24]++;
            if (!this.ingredients) {
              cov_kag52ummu.b[6][0]++;
              cov_kag52ummu.s[25]++;
              this.ingredients = {
                shapes: {},
                colors: { background: 'white', fill: 'white', stroke: 'black' },
                pShapes: ''
              };
            } else {
              cov_kag52ummu.b[6][1]++;
            }
            //if there is no dummyDOM create it
            cov_kag52ummu.s[26]++;
            if (!this.dummyDOM) {
              cov_kag52ummu.b[7][0]++;
              cov_kag52ummu.s[27]++;
              this.dummyDOM = document.getElementById(cnvId).parentNode;
            } else {
              cov_kag52ummu.b[7][1]++;
            }
            var cIdT, container, inner;
            var query = (cov_kag52ummu.s[28]++, '');
            cov_kag52ummu.s[29]++;
            if (display === 'Fallback') {
              cov_kag52ummu.b[8][0]++;
              cov_kag52ummu.s[30]++;
              cIdT = cnvId + type;
              cov_kag52ummu.s[31]++;
              container = cnvId + 'accessibleOutput';
              cov_kag52ummu.s[32]++;
              if (!this.dummyDOM.querySelector('#'.concat(container))) {
                cov_kag52ummu.b[9][0]++;
                cov_kag52ummu.s[33]++;
                //if there is no canvas description (see describe() and describeElement())
                if (!this.dummyDOM.querySelector('#'.concat(cnvId, '_Description'))) {
                  cov_kag52ummu.b[10][0]++;
                  cov_kag52ummu.s[34]++;
                  //create html structure inside of canvas
                  this.dummyDOM.querySelector(
                    '#'.concat(cnvId)
                  ).innerHTML = '<div id="'.concat(
                    container,
                    '" role="region" aria-label="Canvas Outputs"></div>'
                  );
                } else {
                  cov_kag52ummu.b[10][1]++;
                  cov_kag52ummu.s[35]++;
                  //create html structure after canvas description container
                  this.dummyDOM
                    .querySelector('#'.concat(cnvId, '_Description'))
                    .insertAdjacentHTML(
                      'afterend',
                      '<div id="'.concat(
                        container,
                        '" role="region" aria-label="Canvas Outputs"></div>'
                      )
                    );
                }
              } else {
                cov_kag52ummu.b[9][1]++;
              }
            } else {
              cov_kag52ummu.b[8][1]++;
              cov_kag52ummu.s[36]++;
              if (display === 'Label') {
                cov_kag52ummu.b[11][0]++;
                cov_kag52ummu.s[37]++;
                query = display;
                cov_kag52ummu.s[38]++;
                cIdT = cnvId + type + display;
                cov_kag52ummu.s[39]++;
                container = cnvId + 'accessibleOutput' + display;
                cov_kag52ummu.s[40]++;
                if (!this.dummyDOM.querySelector('#'.concat(container))) {
                  cov_kag52ummu.b[12][0]++;
                  cov_kag52ummu.s[41]++;
                  //if there is no canvas description label (see describe() and describeElement())
                  if (!this.dummyDOM.querySelector('#'.concat(cnvId, '_Label'))) {
                    cov_kag52ummu.b[13][0]++;
                    cov_kag52ummu.s[42]++;
                    //create html structure adjacent to canvas
                    this.dummyDOM
                      .querySelector('#'.concat(cnvId))
                      .insertAdjacentHTML(
                        'afterend',
                        '<div id="'.concat(container, '"></div>')
                      );
                  } else {
                    cov_kag52ummu.b[13][1]++;
                    cov_kag52ummu.s[43]++;
                    //create html structure after canvas label
                    this.dummyDOM
                      .querySelector('#'.concat(cnvId, '_Label'))
                      .insertAdjacentHTML(
                        'afterend',
                        '<div id="'.concat(container, '"></div>')
                      );
                  }
                } else {
                  cov_kag52ummu.b[12][1]++;
                }
              } else {
                cov_kag52ummu.b[11][1]++;
              }
            }
            //create an object to store the latest output. this object is used in _updateTextOutput() and _updateGridOutput()
            cov_kag52ummu.s[44]++;
            this._accessibleOutputs[cIdT] = {};
            cov_kag52ummu.s[45]++;
            if (type === 'textOutput') {
              cov_kag52ummu.b[14][0]++;
              cov_kag52ummu.s[46]++;
              query = '#'.concat(cnvId, 'gridOutput').concat(query); //query is used to check if gridOutput already exists
              cov_kag52ummu.s[47]++;
              inner = '<div id="'
                .concat(cIdT, '">Text Output<div id="')
                .concat(cIdT, 'Summary" aria-label="text output summary"><p id="')
                .concat(cIdT, '_summary"></p><ul id="')
                .concat(cIdT, '_list"></ul></div><table id="')
                .concat(
                  cIdT,
                  '_shapeDetails" summary="text output shape details"></table></div>'
                );
              //if gridOutput already exists
              cov_kag52ummu.s[48]++;
              if (this.dummyDOM.querySelector(query)) {
                cov_kag52ummu.b[15][0]++;
                cov_kag52ummu.s[49]++;
                //create textOutput before gridOutput
                this.dummyDOM.querySelector(query).insertAdjacentHTML('beforebegin', inner);
              } else {
                cov_kag52ummu.b[15][1]++;
                cov_kag52ummu.s[50]++;
                //create output inside of container
                this.dummyDOM.querySelector('#'.concat(container)).innerHTML = inner;
              }
              //store output html elements
              cov_kag52ummu.s[51]++;
              this._accessibleOutputs[cIdT].list = this.dummyDOM.querySelector(
                '#'.concat(cIdT, '_list')
              );
            } else {
              cov_kag52ummu.b[14][1]++;
              cov_kag52ummu.s[52]++;
              if (type === 'gridOutput') {
                cov_kag52ummu.b[16][0]++;
                cov_kag52ummu.s[53]++;
                query = '#'.concat(cnvId, 'textOutput').concat(query); //query is used to check if textOutput already exists
                cov_kag52ummu.s[54]++;
                inner = '<div id="'
                  .concat(cIdT, '">Grid Output<p id="')
                  .concat(cIdT, '_summary" aria-label="grid output summary"><table id="')
                  .concat(cIdT, '_map" summary="grid output content"></table><ul id="')
                  .concat(
                    cIdT,
                    '_shapeDetails" aria-label="grid output shape details"></ul></div>'
                  );
                //if textOutput already exists
                cov_kag52ummu.s[55]++;
                if (this.dummyDOM.querySelector(query)) {
                  cov_kag52ummu.b[17][0]++;
                  cov_kag52ummu.s[56]++;
                  //create gridOutput after textOutput
                  this.dummyDOM.querySelector(query).insertAdjacentHTML('afterend', inner);
                } else {
                  cov_kag52ummu.b[17][1]++;
                  cov_kag52ummu.s[57]++;
                  //create output inside of container
                  this.dummyDOM.querySelector('#'.concat(container)).innerHTML = inner;
                }
                //store output html elements
                cov_kag52ummu.s[58]++;
                this._accessibleOutputs[cIdT].map = this.dummyDOM.querySelector(
                  '#'.concat(cIdT, '_map')
                );
              } else {
                cov_kag52ummu.b[16][1]++;
              }
            }
            cov_kag52ummu.s[59]++;
            this._accessibleOutputs[cIdT].shapeDetails = this.dummyDOM.querySelector(
              '#'.concat(cIdT, '_shapeDetails')
            );
            cov_kag52ummu.s[60]++;

            this._accessibleOutputs[cIdT].summary = this.dummyDOM.querySelector(
              '#'.concat(cIdT, '_summary')
            );
          };

          //this function is called at the end of setup and draw if using
          //accessibleOutputs and calls update functions of outputs
          cov_kag52ummu.s[61]++;
          _main.default.prototype._updateAccsOutput = function() {
            cov_kag52ummu.f[4]++;
            var cnvId = (cov_kag52ummu.s[62]++, this.canvas.id);
            //if the shapes are not the same as before
            cov_kag52ummu.s[63]++;
            if (JSON.stringify(this.ingredients.shapes) !== this.ingredients.pShapes) {
              cov_kag52ummu.b[18][0]++;
              cov_kag52ummu.s[64]++;
              //save current shapes as string in pShapes
              this.ingredients.pShapes = JSON.stringify(this.ingredients.shapes);
              cov_kag52ummu.s[65]++;
              if (this._accessibleOutputs.text) {
                cov_kag52ummu.b[19][0]++;
                cov_kag52ummu.s[66]++;
                this._updateTextOutput(cnvId + 'textOutput');
              } else {
                cov_kag52ummu.b[19][1]++;
              }
              cov_kag52ummu.s[67]++;
              if (this._accessibleOutputs.grid) {
                cov_kag52ummu.b[20][0]++;
                cov_kag52ummu.s[68]++;
                this._updateGridOutput(cnvId + 'gridOutput');
              } else {
                cov_kag52ummu.b[20][1]++;
              }
              cov_kag52ummu.s[69]++;
              if (this._accessibleOutputs.textLabel) {
                cov_kag52ummu.b[21][0]++;
                cov_kag52ummu.s[70]++;
                this._updateTextOutput(cnvId + 'textOutputLabel');
              } else {
                cov_kag52ummu.b[21][1]++;
              }
              cov_kag52ummu.s[71]++;
              if (this._accessibleOutputs.gridLabel) {
                cov_kag52ummu.b[22][0]++;
                cov_kag52ummu.s[72]++;
                this._updateGridOutput(cnvId + 'gridOutputLabel');
              } else {
                cov_kag52ummu.b[22][1]++;
              }
            } else {
              cov_kag52ummu.b[18][1]++;
            }
          };

          //helper function that resets all ingredients when background is called
          //and saves background color name
          cov_kag52ummu.s[73]++;
          _main.default.prototype._accsBackground = function(args) {
            cov_kag52ummu.f[5]++;
            cov_kag52ummu.s[74]++;
            //save current shapes as string in pShapes
            this.ingredients.pShapes = JSON.stringify(this.ingredients.shapes);
            //empty shapes JSON
            cov_kag52ummu.s[75]++;
            this.ingredients.shapes = {};
            //update background different
            cov_kag52ummu.s[76]++;
            if (this.ingredients.colors.backgroundRGBA !== args) {
              cov_kag52ummu.b[23][0]++;
              cov_kag52ummu.s[77]++;
              this.ingredients.colors.backgroundRGBA = args;
              cov_kag52ummu.s[78]++;
              this.ingredients.colors.background = this._rgbColorName(args);
            } else {
              cov_kag52ummu.b[23][1]++;
            }
          };

          //helper function that gets fill and stroke of shapes
          cov_kag52ummu.s[79]++;
          _main.default.prototype._accsCanvasColors = function(f, args) {
            cov_kag52ummu.f[6]++;
            cov_kag52ummu.s[80]++;
            if (f === 'fill') {
              cov_kag52ummu.b[24][0]++;
              cov_kag52ummu.s[81]++;
              //update fill different
              if (this.ingredients.colors.fillRGBA !== args) {
                cov_kag52ummu.b[25][0]++;
                cov_kag52ummu.s[82]++;
                this.ingredients.colors.fillRGBA = args;
                cov_kag52ummu.s[83]++;
                this.ingredients.colors.fill = this._rgbColorName(args);
              } else {
                cov_kag52ummu.b[25][1]++;
              }
            } else {
              cov_kag52ummu.b[24][1]++;
              cov_kag52ummu.s[84]++;
              if (f === 'stroke') {
                cov_kag52ummu.b[26][0]++;
                cov_kag52ummu.s[85]++;
                //update stroke if different
                if (this.ingredients.colors.strokeRGBA !== args) {
                  cov_kag52ummu.b[27][0]++;
                  cov_kag52ummu.s[86]++;
                  this.ingredients.colors.strokeRGBA = args;
                  cov_kag52ummu.s[87]++;
                  this.ingredients.colors.stroke = this._rgbColorName(args);
                } else {
                  cov_kag52ummu.b[27][1]++;
                }
              } else {
                cov_kag52ummu.b[26][1]++;
              }
            }
          };

          //builds ingredients.shapes used for building outputs
          cov_kag52ummu.s[88]++;
          _main.default.prototype._accsOutput = function(f, args) {
            cov_kag52ummu.f[7]++;
            cov_kag52ummu.s[89]++;
            if (
              (cov_kag52ummu.b[29][0]++, f === 'ellipse') &&
              (cov_kag52ummu.b[29][1]++, args[2] === args[3])
            ) {
              cov_kag52ummu.b[28][0]++;
              cov_kag52ummu.s[90]++;
              f = 'circle';
            } else {
              cov_kag52ummu.b[28][1]++;
              cov_kag52ummu.s[91]++;
              if (
                (cov_kag52ummu.b[31][0]++, f === 'rectangle') &&
                (cov_kag52ummu.b[31][1]++, args[2] === args[3])
              ) {
                cov_kag52ummu.b[30][0]++;
                cov_kag52ummu.s[92]++;
                f = 'square';
              } else {
                cov_kag52ummu.b[30][1]++;
              }
            }
            var include = (cov_kag52ummu.s[93]++, {});
            var add = (cov_kag52ummu.s[94]++, true);
            var middle = (cov_kag52ummu.s[95]++, _getMiddle(f, args));
            cov_kag52ummu.s[96]++;
            if (f === 'line') {
              cov_kag52ummu.b[32][0]++;
              cov_kag52ummu.s[97]++;
              //make color stroke
              include.color = this.ingredients.colors.stroke;
              //get lenght
              cov_kag52ummu.s[98]++;
              include.length = Math.round(this.dist(args[0], args[1], args[2], args[3]));
              //get position of end points
              var p1 = (cov_kag52ummu.s[99]++,
              _getPos([args[0], [1]], this.width, this.height));
              var p2 = (cov_kag52ummu.s[100]++,
              _getPos([args[2], [3]], this.width, this.height));
              cov_kag52ummu.s[101]++;
              include.loc = _canvasLocator(middle, this.width, this.height);
              cov_kag52ummu.s[102]++;
              if (p1 === p2) {
                cov_kag52ummu.b[33][0]++;
                cov_kag52ummu.s[103]++;
                include.pos = 'at '.concat(p1);
              } else {
                cov_kag52ummu.b[33][1]++;
                cov_kag52ummu.s[104]++;
                include.pos = 'from '.concat(p1, ' to ').concat(p2);
              }
            } else {
              cov_kag52ummu.b[32][1]++;
              cov_kag52ummu.s[105]++;
              if (f === 'point') {
                cov_kag52ummu.b[34][0]++;
                cov_kag52ummu.s[106]++;
                //make color stroke
                include.color = this.ingredients.colors.stroke;
              } else {
                cov_kag52ummu.b[34][1]++;
                cov_kag52ummu.s[107]++;
                //make color fill
                include.color = this.ingredients.colors.fill;
                //get area of shape
                cov_kag52ummu.s[108]++;
                include.area = _getArea(f, args, this.width, this.height);
              }
              //get middle of shapes
              //calculate position using middle of shape
              cov_kag52ummu.s[109]++;
              include.pos = _getPos(middle, this.width, this.height);
              //calculate location using middle of shape
              cov_kag52ummu.s[110]++;
              include.loc = _canvasLocator(middle, this.width, this.height);
            }
            //if it is the first time this shape is created
            cov_kag52ummu.s[111]++;
            if (!this.ingredients.shapes[f]) {
              cov_kag52ummu.b[35][0]++;
              cov_kag52ummu.s[112]++;
              this.ingredients.shapes[f] = [include];
              //if other shapes of this type have been created
            } else {
              cov_kag52ummu.b[35][1]++;
              cov_kag52ummu.s[113]++;
              if (this.ingredients.shapes[f] !== [include]) {
                cov_kag52ummu.b[36][0]++;
                cov_kag52ummu.s[114]++;
                //for every shape of this type
                for (var y in this.ingredients.shapes[f]) {
                  cov_kag52ummu.s[115]++;
                  //compare it with current shape and if it already exists make add false
                  if (
                    JSON.stringify(this.ingredients.shapes[f][y]) ===
                    JSON.stringify(include)
                  ) {
                    cov_kag52ummu.b[37][0]++;
                    cov_kag52ummu.s[116]++;
                    add = false;
                  } else {
                    cov_kag52ummu.b[37][1]++;
                  }
                }
                //add shape by pushing it to the end
                cov_kag52ummu.s[117]++;
                if (add === true) {
                  cov_kag52ummu.b[38][0]++;
                  cov_kag52ummu.s[118]++;
                  this.ingredients.shapes[f].push(include);
                } else {
                  cov_kag52ummu.b[38][1]++;
                }
              } else {
                cov_kag52ummu.b[36][1]++;
              }
            }
          };

          //gets middle point / centroid of shape
          function _getMiddle(f, args) {
            cov_kag52ummu.f[8]++;
            var x, y;
            cov_kag52ummu.s[119]++;
            if (
              (cov_kag52ummu.b[40][0]++, f === 'rectangle') ||
              (cov_kag52ummu.b[40][1]++, f === 'ellipse') ||
              (cov_kag52ummu.b[40][2]++, f === 'arc') ||
              (cov_kag52ummu.b[40][3]++, f === 'circle') ||
              (cov_kag52ummu.b[40][4]++, f === 'square')
            ) {
              cov_kag52ummu.b[39][0]++;
              cov_kag52ummu.s[120]++;
              x = Math.round(args[0] + args[2] / 2);
              cov_kag52ummu.s[121]++;
              y = Math.round(args[1] + args[3] / 2);
            } else {
              cov_kag52ummu.b[39][1]++;
              cov_kag52ummu.s[122]++;
              if (f === 'triangle') {
                cov_kag52ummu.b[41][0]++;
                cov_kag52ummu.s[123]++;
                x = (args[0] + args[2] + args[4]) / 3;
                cov_kag52ummu.s[124]++;
                y = (args[1] + args[3] + args[5]) / 3;
              } else {
                cov_kag52ummu.b[41][1]++;
                cov_kag52ummu.s[125]++;
                if (f === 'quadrilateral') {
                  cov_kag52ummu.b[42][0]++;
                  cov_kag52ummu.s[126]++;
                  x = (args[0] + args[2] + args[4] + args[6]) / 4;
                  cov_kag52ummu.s[127]++;
                  y = (args[1] + args[3] + args[5] + args[7]) / 4;
                } else {
                  cov_kag52ummu.b[42][1]++;
                  cov_kag52ummu.s[128]++;
                  if (f === 'line') {
                    cov_kag52ummu.b[43][0]++;
                    cov_kag52ummu.s[129]++;
                    x = (args[0] + args[2]) / 2;
                    cov_kag52ummu.s[130]++;
                    y = (args[1] + args[3]) / 2;
                  } else {
                    cov_kag52ummu.b[43][1]++;
                    cov_kag52ummu.s[131]++;
                    x = args[0];
                    cov_kag52ummu.s[132]++;
                    y = args[1];
                  }
                }
              }
            }
            cov_kag52ummu.s[133]++;
            return [x, y];
          }

          //gets position of shape in the canvas
          function _getPos(args, canvasWidth, canvasHeight) {
            cov_kag52ummu.f[9]++;
            cov_kag52ummu.s[134]++;
            if (args[0] < 0.4 * canvasWidth) {
              cov_kag52ummu.b[44][0]++;
              cov_kag52ummu.s[135]++;
              if (args[1] < 0.4 * canvasHeight) {
                cov_kag52ummu.b[45][0]++;
                cov_kag52ummu.s[136]++;
                return 'top left';
              } else {
                cov_kag52ummu.b[45][1]++;
                cov_kag52ummu.s[137]++;
                if (args[1] > 0.6 * canvasHeight) {
                  cov_kag52ummu.b[46][0]++;
                  cov_kag52ummu.s[138]++;
                  return 'bottom left';
                } else {
                  cov_kag52ummu.b[46][1]++;
                  cov_kag52ummu.s[139]++;
                  return 'mid left';
                }
              }
            } else {
              cov_kag52ummu.b[44][1]++;
              cov_kag52ummu.s[140]++;
              if (args[0] > 0.6 * canvasWidth) {
                cov_kag52ummu.b[47][0]++;
                cov_kag52ummu.s[141]++;
                if (args[1] < 0.4 * canvasHeight) {
                  cov_kag52ummu.b[48][0]++;
                  cov_kag52ummu.s[142]++;
                  return 'top right';
                } else {
                  cov_kag52ummu.b[48][1]++;
                  cov_kag52ummu.s[143]++;
                  if (args[1] > 0.6 * canvasHeight) {
                    cov_kag52ummu.b[49][0]++;
                    cov_kag52ummu.s[144]++;
                    return 'bottom right';
                  } else {
                    cov_kag52ummu.b[49][1]++;
                    cov_kag52ummu.s[145]++;
                    return 'mid right';
                  }
                }
              } else {
                cov_kag52ummu.b[47][1]++;
                cov_kag52ummu.s[146]++;
                if (args[1] < 0.4 * canvasHeight) {
                  cov_kag52ummu.b[50][0]++;
                  cov_kag52ummu.s[147]++;
                  return 'top middle';
                } else {
                  cov_kag52ummu.b[50][1]++;
                  cov_kag52ummu.s[148]++;
                  if (args[1] > 0.6 * canvasHeight) {
                    cov_kag52ummu.b[51][0]++;
                    cov_kag52ummu.s[149]++;
                    return 'bottom middle';
                  } else {
                    cov_kag52ummu.b[51][1]++;
                    cov_kag52ummu.s[150]++;
                    return 'middle';
                  }
                }
              }
            }
          }

          //locates shape in a 10*10 grid
          function _canvasLocator(args, canvasWidth, canvasHeight) {
            cov_kag52ummu.f[10]++;
            var noRows = (cov_kag52ummu.s[151]++, 10);
            var noCols = (cov_kag52ummu.s[152]++, 10);
            var locX = (cov_kag52ummu.s[153]++, Math.floor(args[0] / canvasWidth * noRows));
            var locY = (cov_kag52ummu.s[154]++,
            Math.floor(args[1] / canvasHeight * noCols));
            cov_kag52ummu.s[155]++;
            if (locX === noRows) {
              cov_kag52ummu.b[52][0]++;
              cov_kag52ummu.s[156]++;
              locX = locX - 1;
            } else {
              cov_kag52ummu.b[52][1]++;
            }
            cov_kag52ummu.s[157]++;
            if (locY === noCols) {
              cov_kag52ummu.b[53][0]++;
              cov_kag52ummu.s[158]++;
              locY = locY - 1;
            } else {
              cov_kag52ummu.b[53][1]++;
            }
            cov_kag52ummu.s[159]++;
            return {
              locX: locX,
              locY: locY
            };
          }

          //calculates area of shape
          function _getArea(objectType, shapeArgs, canvasWidth, canvasHeight) {
            cov_kag52ummu.f[11]++;
            var objectArea = (cov_kag52ummu.s[160]++, 0);
            cov_kag52ummu.s[161]++;
            if (objectType === 'arc') {
              cov_kag52ummu.b[54][0]++;
              // area of full ellipse = PI * horizontal radius * vertical radius.
              // therefore, area of arc = difference bet. arc's start and end radians * horizontal radius * vertical radius.
              // the below expression is adjusted for negative values and differences in arc's start and end radians over PI*2
              var arcSizeInRadians = (cov_kag52ummu.s[162]++,
              ((shapeArgs[5] - shapeArgs[4]) % (Math.PI * 2) + Math.PI * 2) %
                (Math.PI * 2));
              cov_kag52ummu.s[163]++;
              objectArea = arcSizeInRadians * shapeArgs[2] * shapeArgs[3] / 8;
              cov_kag52ummu.s[164]++;
              if (
                (cov_kag52ummu.b[56][0]++, shapeArgs[6] === 'open') ||
                (cov_kag52ummu.b[56][1]++, shapeArgs[6] === 'chord')
              ) {
                cov_kag52ummu.b[55][0]++;
                // when the arc's mode is OPEN or CHORD, we need to account for the area of the triangle that is formed to close the arc
                // (Ax( By −  Cy) + Bx(Cy − Ay) + Cx(Ay − By ) )/2
                var Ax = (cov_kag52ummu.s[165]++, shapeArgs[0]);
                var Ay = (cov_kag52ummu.s[166]++, shapeArgs[1]);
                var Bx = (cov_kag52ummu.s[167]++,
                shapeArgs[0] + shapeArgs[2] / 2 * Math.cos(shapeArgs[4]).toFixed(2));
                var By = (cov_kag52ummu.s[168]++,
                shapeArgs[1] + shapeArgs[3] / 2 * Math.sin(shapeArgs[4]).toFixed(2));
                var Cx = (cov_kag52ummu.s[169]++,
                shapeArgs[0] + shapeArgs[2] / 2 * Math.cos(shapeArgs[5]).toFixed(2));
                var Cy = (cov_kag52ummu.s[170]++,
                shapeArgs[1] + shapeArgs[3] / 2 * Math.sin(shapeArgs[5]).toFixed(2));
                var areaOfExtraTriangle = (cov_kag52ummu.s[171]++,
                Math.abs(Ax * (By - Cy) + Bx * (Cy - Ay) + Cx * (Ay - By)) / 2);
                cov_kag52ummu.s[172]++;
                if (arcSizeInRadians > Math.PI) {
                  cov_kag52ummu.b[57][0]++;
                  cov_kag52ummu.s[173]++;
                  objectArea = objectArea + areaOfExtraTriangle;
                } else {
                  cov_kag52ummu.b[57][1]++;
                  cov_kag52ummu.s[174]++;
                  objectArea = objectArea - areaOfExtraTriangle;
                }
              } else {
                cov_kag52ummu.b[55][1]++;
              }
            } else {
              cov_kag52ummu.b[54][1]++;
              cov_kag52ummu.s[175]++;
              if (
                (cov_kag52ummu.b[59][0]++, objectType === 'ellipse') ||
                (cov_kag52ummu.b[59][1]++, objectType === 'circle')
              ) {
                cov_kag52ummu.b[58][0]++;
                cov_kag52ummu.s[176]++;
                objectArea = 3.14 * shapeArgs[2] / 2 * shapeArgs[3] / 2;
              } else {
                cov_kag52ummu.b[58][1]++;
                cov_kag52ummu.s[177]++;
                if (objectType === 'line') {
                  cov_kag52ummu.b[60][0]++;
                  cov_kag52ummu.s[178]++;
                  objectArea = 0;
                } else {
                  cov_kag52ummu.b[60][1]++;
                  cov_kag52ummu.s[179]++;
                  if (objectType === 'point') {
                    cov_kag52ummu.b[61][0]++;
                    cov_kag52ummu.s[180]++;
                    objectArea = 0;
                  } else {
                    cov_kag52ummu.b[61][1]++;
                    cov_kag52ummu.s[181]++;
                    if (objectType === 'quadrilateral') {
                      cov_kag52ummu.b[62][0]++;
                      cov_kag52ummu.s[182]++;
                      // ((x4+x1)*(y4-y1)+(x1+x2)*(y1-y2)+(x2+x3)*(y2-y3)+(x3+x4)*(y3-y4))/2
                      objectArea =
                        Math.abs(
                          (shapeArgs[6] + shapeArgs[0]) * (shapeArgs[7] - shapeArgs[1]) +
                            (shapeArgs[0] + shapeArgs[2]) * (shapeArgs[1] - shapeArgs[3]) +
                            (shapeArgs[2] + shapeArgs[4]) * (shapeArgs[3] - shapeArgs[5]) +
                            (shapeArgs[4] + shapeArgs[6]) * (shapeArgs[5] - shapeArgs[7])
                        ) / 2;
                    } else {
                      cov_kag52ummu.b[62][1]++;
                      cov_kag52ummu.s[183]++;
                      if (
                        (cov_kag52ummu.b[64][0]++, objectType === 'rectangle') ||
                        (cov_kag52ummu.b[64][1]++, objectType === 'square')
                      ) {
                        cov_kag52ummu.b[63][0]++;
                        cov_kag52ummu.s[184]++;
                        objectArea = shapeArgs[2] * shapeArgs[3];
                      } else {
                        cov_kag52ummu.b[63][1]++;
                        cov_kag52ummu.s[185]++;
                        if (objectType === 'triangle') {
                          cov_kag52ummu.b[65][0]++;
                          cov_kag52ummu.s[186]++;
                          objectArea =
                            Math.abs(
                              shapeArgs[0] * (shapeArgs[3] - shapeArgs[5]) +
                                shapeArgs[2] * (shapeArgs[5] - shapeArgs[1]) +
                                shapeArgs[4] * (shapeArgs[1] - shapeArgs[3])
                            ) / 2;
                          // (Ax( By −  Cy) + Bx(Cy − Ay) + Cx(Ay − By ))/2
                        } else {
                          cov_kag52ummu.b[65][1]++;
                        }
                      }
                    }
                  }
                }
              }
            }
            cov_kag52ummu.s[187]++;

            return Math.round(objectArea * 100 / (canvasWidth * canvasHeight));
          }
          var _default = _main.default;
          exports.default = _default;
        },
        {
          '../core/main': 283,
          'core-js/modules/es.array.concat': 166,
          'core-js/modules/es.array.fill': 168,
          'core-js/modules/es.array.map': 177,
          'core-js/modules/es.number.to-fixed': 187
        }
      ],
      266: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_xe0qm3zhs = (function() {
            var path = '/Users/outofambit/src/p5.js/src/accessibility/textOutput.js';
            var hash = 'ec451e087588f257c452b01cf314baa464266dd5';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/accessibility/textOutput.js',
              statementMap: {
                '0': { start: { line: 12, column: 0 }, end: { line: 45, column: 2 } },
                '1': { start: { line: 14, column: 2 }, end: { line: 16, column: 3 } },
                '2': { start: { line: 15, column: 4 }, end: { line: 15, column: 11 } },
                '3': { start: { line: 17, column: 16 }, end: { line: 17, column: 44 } },
                '4': { start: { line: 19, column: 18 }, end: { line: 19, column: 58 } },
                '5': { start: { line: 21, column: 21 }, end: { line: 26, column: 3 } },
                '6': { start: { line: 28, column: 26 }, end: { line: 28, column: 69 } },
                '7': { start: { line: 30, column: 2 }, end: { line: 33, column: 3 } },
                '8': { start: { line: 32, column: 4 }, end: { line: 32, column: 45 } },
                '9': { start: { line: 35, column: 2 }, end: { line: 38, column: 3 } },
                '10': { start: { line: 37, column: 4 }, end: { line: 37, column: 50 } },
                '11': { start: { line: 40, column: 2 }, end: { line: 43, column: 3 } },
                '12': { start: { line: 42, column: 4 }, end: { line: 42, column: 55 } },
                '13': { start: { line: 44, column: 2 }, end: { line: 44, column: 41 } },
                '14': { start: { line: 49, column: 13 }, end: { line: 49, column: 108 } },
                '15': { start: { line: 50, column: 2 }, end: { line: 54, column: 3 } },
                '16': { start: { line: 51, column: 4 }, end: { line: 51, column: 28 } },
                '17': { start: { line: 53, column: 4 }, end: { line: 53, column: 42 } },
                '18': { start: { line: 55, column: 2 }, end: { line: 55, column: 14 } },
                '19': { start: { line: 60, column: 21 }, end: { line: 60, column: 23 } },
                '20': { start: { line: 61, column: 20 }, end: { line: 61, column: 21 } },
                '21': { start: { line: 63, column: 2 }, end: { line: 86, column: 3 } },
                '22': { start: { line: 65, column: 4 }, end: { line: 85, column: 5 } },
                '23': { start: { line: 67, column: 16 }, end: { line: 69, column: 18 } },
                '24': { start: { line: 70, column: 6 }, end: { line: 82, column: 7 } },
                '25': { start: { line: 71, column: 8 }, end: { line: 75, column: 30 } },
                '26': { start: { line: 77, column: 8 }, end: { line: 77, column: 67 } },
                '27': { start: { line: 78, column: 8 }, end: { line: 80, column: 9 } },
                '28': { start: { line: 79, column: 10 }, end: { line: 79, column: 68 } },
                '29': { start: { line: 81, column: 8 }, end: { line: 81, column: 28 } },
                '30': { start: { line: 83, column: 6 }, end: { line: 83, column: 40 } },
                '31': { start: { line: 84, column: 6 }, end: { line: 84, column: 20 } },
                '32': { start: { line: 87, column: 2 }, end: { line: 87, column: 22 } },
                '33': { start: { line: 92, column: 18 }, end: { line: 92, column: 20 } },
                '34': { start: { line: 93, column: 20 }, end: { line: 93, column: 21 } },
                '35': { start: { line: 95, column: 2 }, end: { line: 117, column: 3 } },
                '36': { start: { line: 96, column: 4 }, end: { line: 116, column: 5 } },
                '37': { start: { line: 98, column: 18 }, end: { line: 100, column: 17 } },
                '38': { start: { line: 101, column: 6 }, end: { line: 113, column: 7 } },
                '39': { start: { line: 102, column: 8 }, end: { line: 106, column: 31 } },
                '40': { start: { line: 108, column: 8 }, end: { line: 108, column: 56 } },
                '41': { start: { line: 109, column: 8 }, end: { line: 111, column: 9 } },
                '42': { start: { line: 110, column: 10 }, end: { line: 110, column: 80 } },
                '43': { start: { line: 112, column: 8 }, end: { line: 112, column: 33 } },
                '44': { start: { line: 114, column: 6 }, end: { line: 114, column: 36 } },
                '45': { start: { line: 115, column: 6 }, end: { line: 115, column: 20 } },
                '46': { start: { line: 118, column: 2 }, end: { line: 118, column: 59 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 12, column: 33 }, end: { line: 12, column: 34 } },
                  loc: { start: { line: 12, column: 47 }, end: { line: 45, column: 1 } },
                  line: 12
                },
                '1': {
                  name: '_textSummary',
                  decl: { start: { line: 48, column: 9 }, end: { line: 48, column: 21 } },
                  loc: { start: { line: 48, column: 60 }, end: { line: 56, column: 1 } },
                  line: 48
                },
                '2': {
                  name: '_shapeDetails',
                  decl: { start: { line: 59, column: 9 }, end: { line: 59, column: 22 } },
                  loc: { start: { line: 59, column: 41 }, end: { line: 88, column: 1 } },
                  line: 59
                },
                '3': {
                  name: '_shapeList',
                  decl: { start: { line: 91, column: 9 }, end: { line: 91, column: 19 } },
                  loc: { start: { line: 91, column: 38 }, end: { line: 119, column: 1 } },
                  line: 91
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 14, column: 2 }, end: { line: 16, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 14, column: 2 }, end: { line: 16, column: 3 } },
                    { start: { line: 14, column: 2 }, end: { line: 16, column: 3 } }
                  ],
                  line: 14
                },
                '1': {
                  loc: { start: { line: 30, column: 2 }, end: { line: 33, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 30, column: 2 }, end: { line: 33, column: 3 } },
                    { start: { line: 30, column: 2 }, end: { line: 33, column: 3 } }
                  ],
                  line: 30
                },
                '2': {
                  loc: { start: { line: 35, column: 2 }, end: { line: 38, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 35, column: 2 }, end: { line: 38, column: 3 } },
                    { start: { line: 35, column: 2 }, end: { line: 38, column: 3 } }
                  ],
                  line: 35
                },
                '3': {
                  loc: { start: { line: 40, column: 2 }, end: { line: 43, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 40, column: 2 }, end: { line: 43, column: 3 } },
                    { start: { line: 40, column: 2 }, end: { line: 43, column: 3 } }
                  ],
                  line: 40
                },
                '4': {
                  loc: { start: { line: 50, column: 2 }, end: { line: 54, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 50, column: 2 }, end: { line: 54, column: 3 } },
                    { start: { line: 50, column: 2 }, end: { line: 54, column: 3 } }
                  ],
                  line: 50
                },
                '5': {
                  loc: { start: { line: 70, column: 6 }, end: { line: 82, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 70, column: 6 }, end: { line: 82, column: 7 } },
                    { start: { line: 70, column: 6 }, end: { line: 82, column: 7 } }
                  ],
                  line: 70
                },
                '6': {
                  loc: { start: { line: 78, column: 8 }, end: { line: 80, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 78, column: 8 }, end: { line: 80, column: 9 } },
                    { start: { line: 78, column: 8 }, end: { line: 80, column: 9 } }
                  ],
                  line: 78
                },
                '7': {
                  loc: { start: { line: 101, column: 6 }, end: { line: 113, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 101, column: 6 }, end: { line: 113, column: 7 } },
                    { start: { line: 101, column: 6 }, end: { line: 113, column: 7 } }
                  ],
                  line: 101
                },
                '8': {
                  loc: { start: { line: 109, column: 8 }, end: { line: 111, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 109, column: 8 }, end: { line: 111, column: 9 } },
                    { start: { line: 109, column: 8 }, end: { line: 111, column: 9 } }
                  ],
                  line: 109
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0
              },
              f: { '0': 0, '1': 0, '2': 0, '3': 0 },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: 'ec451e087588f257c452b01cf314baa464266dd5'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.concat');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_xe0qm3zhs.s[0]++;

          //the functions in this file support updating the text output

          //updates textOutput
          _main.default.prototype._updateTextOutput = function(idT) {
            cov_xe0qm3zhs.f[0]++;
            cov_xe0qm3zhs.s[1]++;
            //if html structure is not there yet
            if (!this.dummyDOM.querySelector('#'.concat(idT, '_summary'))) {
              cov_xe0qm3zhs.b[0][0]++;
              cov_xe0qm3zhs.s[2]++;
              return;
            } else {
              cov_xe0qm3zhs.b[0][1]++;
            }
            var current = (cov_xe0qm3zhs.s[3]++, this._accessibleOutputs[idT]);
            //create shape list
            var innerList = (cov_xe0qm3zhs.s[4]++,
            _shapeList(idT, this.ingredients.shapes));
            //create output summary
            var innerSummary = (cov_xe0qm3zhs.s[5]++,
            _textSummary(
              innerList.numShapes,
              this.ingredients.colors.background,
              this.width,
              this.height
            ));

            //create shape details
            var innerShapeDetails = (cov_xe0qm3zhs.s[6]++,
            _shapeDetails(idT, this.ingredients.shapes));
            //if it is different from current summary
            cov_xe0qm3zhs.s[7]++;
            if (innerSummary !== current.summary.innerHTML) {
              cov_xe0qm3zhs.b[1][0]++;
              cov_xe0qm3zhs.s[8]++;
              //update
              current.summary.innerHTML = innerSummary;
            } else {
              cov_xe0qm3zhs.b[1][1]++;
            }
            //if it is different from current shape list
            cov_xe0qm3zhs.s[9]++;
            if (innerList.listShapes !== current.list.innerHTML) {
              cov_xe0qm3zhs.b[2][0]++;
              cov_xe0qm3zhs.s[10]++;
              //update
              current.list.innerHTML = innerList.listShapes;
            } else {
              cov_xe0qm3zhs.b[2][1]++;
            }
            //if it is different from current shape details
            cov_xe0qm3zhs.s[11]++;
            if (innerShapeDetails !== current.shapeDetails.innerHTML) {
              cov_xe0qm3zhs.b[3][0]++;
              cov_xe0qm3zhs.s[12]++;
              //update
              current.shapeDetails.innerHTML = innerShapeDetails;
            } else {
              cov_xe0qm3zhs.b[3][1]++;
            }
            cov_xe0qm3zhs.s[13]++;
            this._accessibleOutputs[idT] = current;
          };

          //Builds textOutput summary
          function _textSummary(numShapes, background, width, height) {
            cov_xe0qm3zhs.f[1]++;
            var text = (cov_xe0qm3zhs.s[14]++,
            'Your output is a, '
              .concat(width, ' by ')
              .concat(height, ' pixels, ')
              .concat(background, ' canvas containing the following'));
            cov_xe0qm3zhs.s[15]++;
            if (numShapes === 1) {
              cov_xe0qm3zhs.b[4][0]++;
              cov_xe0qm3zhs.s[16]++;
              text = ''.concat(text, ' shape:');
            } else {
              cov_xe0qm3zhs.b[4][1]++;
              cov_xe0qm3zhs.s[17]++;
              text = ''.concat(text, ' ').concat(numShapes, ' shapes:');
            }
            cov_xe0qm3zhs.s[18]++;
            return text;
          }

          //Builds textOutput table with shape details
          function _shapeDetails(idT, ingredients) {
            cov_xe0qm3zhs.f[2]++;
            var shapeDetails = (cov_xe0qm3zhs.s[19]++, '');
            var shapeNumber = (cov_xe0qm3zhs.s[20]++, 0);
            //goes trhough every shape type in ingredients
            cov_xe0qm3zhs.s[21]++;
            for (var x in ingredients) {
              cov_xe0qm3zhs.s[22]++;
              //and for every shape
              for (var y in ingredients[x]) {
                //it creates a table row
                var row = (cov_xe0qm3zhs.s[23]++,
                '<tr id="'
                  .concat(idT, 'shape')
                  .concat(shapeNumber, '"><th>')
                  .concat(ingredients[x][y].color, ' ')
                  .concat(x, '</th>'));
                cov_xe0qm3zhs.s[24]++;
                if (x === 'line') {
                  cov_xe0qm3zhs.b[5][0]++;
                  cov_xe0qm3zhs.s[25]++;
                  row =
                    row +
                    '<td>location = '
                      .concat(ingredients[x][y].pos, '</td><td>length = ')
                      .concat(ingredients[x][y].length, ' pixels</td></tr>');
                } else {
                  cov_xe0qm3zhs.b[5][1]++;
                  cov_xe0qm3zhs.s[26]++;
                  row = row + '<td>location = '.concat(ingredients[x][y].pos, '</td>');
                  cov_xe0qm3zhs.s[27]++;
                  if (x !== 'point') {
                    cov_xe0qm3zhs.b[6][0]++;
                    cov_xe0qm3zhs.s[28]++;
                    row = row + '<td> area = '.concat(ingredients[x][y].area, '%</td>');
                  } else {
                    cov_xe0qm3zhs.b[6][1]++;
                  }
                  cov_xe0qm3zhs.s[29]++;
                  row = row + '</tr>';
                }
                cov_xe0qm3zhs.s[30]++;
                shapeDetails = shapeDetails + row;
                cov_xe0qm3zhs.s[31]++;
                shapeNumber++;
              }
            }
            cov_xe0qm3zhs.s[32]++;
            return shapeDetails;
          }

          //Builds textOutput shape list
          function _shapeList(idT, ingredients) {
            cov_xe0qm3zhs.f[3]++;
            var shapeList = (cov_xe0qm3zhs.s[33]++, '');
            var shapeNumber = (cov_xe0qm3zhs.s[34]++, 0);
            //goes trhough every shape type in ingredients
            cov_xe0qm3zhs.s[35]++;
            for (var x in ingredients) {
              cov_xe0qm3zhs.s[36]++;
              for (var y in ingredients[x]) {
                //it creates a line in a list
                var _line = (cov_xe0qm3zhs.s[37]++,
                '<li><a href="#'
                  .concat(idT, 'shape')
                  .concat(shapeNumber, '">')
                  .concat(ingredients[x][y].color, ' ')
                  .concat(x, '</a>'));
                cov_xe0qm3zhs.s[38]++;
                if (x === 'line') {
                  cov_xe0qm3zhs.b[7][0]++;
                  cov_xe0qm3zhs.s[39]++;
                  _line =
                    _line +
                    ', '
                      .concat(ingredients[x][y].pos, ', ')
                      .concat(ingredients[x][y].length, ' pixels long.</li>');
                } else {
                  cov_xe0qm3zhs.b[7][1]++;
                  cov_xe0qm3zhs.s[40]++;
                  _line = _line + ', at '.concat(ingredients[x][y].pos);
                  cov_xe0qm3zhs.s[41]++;
                  if (x !== 'point') {
                    cov_xe0qm3zhs.b[8][0]++;
                    cov_xe0qm3zhs.s[42]++;
                    _line =
                      _line +
                      ', covering '.concat(ingredients[x][y].area, '% of the canvas');
                  } else {
                    cov_xe0qm3zhs.b[8][1]++;
                  }
                  cov_xe0qm3zhs.s[43]++;
                  _line = _line + '.</li>';
                }
                cov_xe0qm3zhs.s[44]++;
                shapeList = shapeList + _line;
                cov_xe0qm3zhs.s[45]++;
                shapeNumber++;
              }
            }
            cov_xe0qm3zhs.s[46]++;
            return { numShapes: shapeNumber, listShapes: shapeList };
          }
          var _default = _main.default;
          exports.default = _default;
        },
        { '../core/main': 283, 'core-js/modules/es.array.concat': 166 }
      ],
      267: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_1pbh9q6h9h = (function() {
            var path = '/Users/outofambit/src/p5.js/src/app.js';
            var hash = '3f9f049bdec1a86abea3164db5db29d86d959b04';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/app.js',
              statementMap: {
                '0': { start: { line: 102, column: 0 }, end: { line: 102, column: 20 } }
              },
              fnMap: {},
              branchMap: {},
              s: { '0': 0 },
              f: {},
              b: {},
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '3f9f049bdec1a86abea3164db5db29d86d959b04'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          var _main = _interopRequireDefault(_dereq_('./core/main'));
          _dereq_('./core/constants');
          _dereq_('./core/environment');
          _dereq_('./core/friendly_errors/stacktrace');
          _dereq_('./core/friendly_errors/validate_params');
          _dereq_('./core/friendly_errors/file_errors');
          _dereq_('./core/friendly_errors/fes_core');
          _dereq_('./core/helpers');
          _dereq_('./core/legacy');
          _dereq_('./core/preload');
          _dereq_('./core/p5.Element');
          _dereq_('./core/p5.Graphics');
          _dereq_('./core/p5.Renderer');
          _dereq_('./core/p5.Renderer2D');
          _dereq_('./core/rendering');
          _dereq_('./core/shim');
          _dereq_('./core/structure');
          _dereq_('./core/transform');
          _dereq_('./core/shape/2d_primitives');
          _dereq_('./core/shape/attributes');
          _dereq_('./core/shape/curves');
          _dereq_('./core/shape/vertex');

          _dereq_('./accessibility/outputs');
          _dereq_('./accessibility/textOutput');
          _dereq_('./accessibility/gridOutput');
          _dereq_('./accessibility/color_namer');

          _dereq_('./color/color_conversion');
          _dereq_('./color/creating_reading');
          _dereq_('./color/p5.Color');
          _dereq_('./color/setting');

          _dereq_('./data/p5.TypedDict');
          _dereq_('./data/local_storage.js');

          _dereq_('./dom/dom');

          _dereq_('./accessibility/describe');

          _dereq_('./events/acceleration');
          _dereq_('./events/keyboard');
          _dereq_('./events/mouse');
          _dereq_('./events/touch');

          _dereq_('./image/filters');
          _dereq_('./image/image');
          _dereq_('./image/loading_displaying');
          _dereq_('./image/p5.Image');
          _dereq_('./image/pixels');

          _dereq_('./io/files');
          _dereq_('./io/p5.Table');
          _dereq_('./io/p5.TableRow');
          _dereq_('./io/p5.XML');

          _dereq_('./math/calculation');
          _dereq_('./math/math');
          _dereq_('./math/noise');
          _dereq_('./math/p5.Vector');
          _dereq_('./math/random');
          _dereq_('./math/trigonometry');

          _dereq_('./typography/attributes');
          _dereq_('./typography/loading_displaying');
          _dereq_('./typography/p5.Font');

          _dereq_('./utilities/array_functions');
          _dereq_('./utilities/conversion');
          _dereq_('./utilities/string_functions');
          _dereq_('./utilities/time_date');

          _dereq_('./webgl/3d_primitives');
          _dereq_('./webgl/interaction');
          _dereq_('./webgl/light');
          _dereq_('./webgl/loading');
          _dereq_('./webgl/material');
          _dereq_('./webgl/p5.Camera');
          _dereq_('./webgl/p5.Geometry');
          _dereq_('./webgl/p5.Matrix');
          _dereq_('./webgl/p5.RendererGL.Immediate');
          _dereq_('./webgl/p5.RendererGL');
          _dereq_('./webgl/p5.RendererGL.Retained');
          _dereq_('./webgl/p5.Shader');
          _dereq_('./webgl/p5.RenderBuffer');
          _dereq_('./webgl/p5.Texture');
          _dereq_('./webgl/text');

          _dereq_('./core/init');
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_1pbh9q6h9h.s[0]++;

          module.exports = _main.default;
        },
        {
          './accessibility/color_namer': 262,
          './accessibility/describe': 263,
          './accessibility/gridOutput': 264,
          './accessibility/outputs': 265,
          './accessibility/textOutput': 266,
          './color/color_conversion': 268,
          './color/creating_reading': 269,
          './color/p5.Color': 270,
          './color/setting': 271,
          './core/constants': 272,
          './core/environment': 273,
          './core/friendly_errors/fes_core': 275,
          './core/friendly_errors/file_errors': 276,
          './core/friendly_errors/stacktrace': 277,
          './core/friendly_errors/validate_params': 278,
          './core/helpers': 279,
          './core/init': 280,
          './core/legacy': 282,
          './core/main': 283,
          './core/p5.Element': 284,
          './core/p5.Graphics': 285,
          './core/p5.Renderer': 286,
          './core/p5.Renderer2D': 287,
          './core/preload': 288,
          './core/rendering': 289,
          './core/shape/2d_primitives': 290,
          './core/shape/attributes': 291,
          './core/shape/curves': 292,
          './core/shape/vertex': 293,
          './core/shim': 294,
          './core/structure': 295,
          './core/transform': 296,
          './data/local_storage.js': 297,
          './data/p5.TypedDict': 298,
          './dom/dom': 299,
          './events/acceleration': 300,
          './events/keyboard': 301,
          './events/mouse': 302,
          './events/touch': 303,
          './image/filters': 304,
          './image/image': 305,
          './image/loading_displaying': 306,
          './image/p5.Image': 307,
          './image/pixels': 308,
          './io/files': 309,
          './io/p5.Table': 310,
          './io/p5.TableRow': 311,
          './io/p5.XML': 312,
          './math/calculation': 313,
          './math/math': 314,
          './math/noise': 315,
          './math/p5.Vector': 316,
          './math/random': 317,
          './math/trigonometry': 318,
          './typography/attributes': 319,
          './typography/loading_displaying': 320,
          './typography/p5.Font': 321,
          './utilities/array_functions': 322,
          './utilities/conversion': 323,
          './utilities/string_functions': 324,
          './utilities/time_date': 325,
          './webgl/3d_primitives': 326,
          './webgl/interaction': 327,
          './webgl/light': 328,
          './webgl/loading': 329,
          './webgl/material': 330,
          './webgl/p5.Camera': 331,
          './webgl/p5.Geometry': 332,
          './webgl/p5.Matrix': 333,
          './webgl/p5.RenderBuffer': 334,
          './webgl/p5.RendererGL': 337,
          './webgl/p5.RendererGL.Immediate': 335,
          './webgl/p5.RendererGL.Retained': 336,
          './webgl/p5.Shader': 338,
          './webgl/p5.Texture': 339,
          './webgl/text': 340
        }
      ],
      268: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_1u65syjkr4 = (function() {
            var path = '/Users/outofambit/src/p5.js/src/color/color_conversion.js';
            var hash = 'e6c8614886e48934fda3ab3cde6b9ef2ad0286ad';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/color/color_conversion.js',
              statementMap: {
                '0': { start: { line: 17, column: 0 }, end: { line: 17, column: 24 } },
                '1': { start: { line: 22, column: 0 }, end: { line: 43, column: 2 } },
                '2': { start: { line: 23, column: 14 }, end: { line: 23, column: 21 } },
                '3': { start: { line: 24, column: 12 }, end: { line: 24, column: 19 } },
                '4': { start: { line: 25, column: 14 }, end: { line: 25, column: 21 } },
                '5': { start: { line: 28, column: 13 }, end: { line: 28, column: 32 } },
                '6': { start: { line: 31, column: 2 }, end: { line: 39, column: 3 } },
                '7': { start: { line: 32, column: 4 }, end: { line: 38, column: 5 } },
                '8': { start: { line: 33, column: 6 }, end: { line: 33, column: 14 } },
                '9': { start: { line: 34, column: 11 }, end: { line: 38, column: 5 } },
                '10': { start: { line: 35, column: 6 }, end: { line: 35, column: 28 } },
                '11': { start: { line: 37, column: 6 }, end: { line: 37, column: 37 } },
                '12': { start: { line: 42, column: 2 }, end: { line: 42, column: 33 } },
                '13': { start: { line: 48, column: 0 }, end: { line: 98, column: 2 } },
                '14': { start: { line: 49, column: 14 }, end: { line: 49, column: 25 } },
                '15': { start: { line: 50, column: 14 }, end: { line: 50, column: 21 } },
                '16': { start: { line: 51, column: 14 }, end: { line: 51, column: 21 } },
                '17': { start: { line: 53, column: 13 }, end: { line: 53, column: 15 } },
                '18': { start: { line: 55, column: 2 }, end: { line: 95, column: 3 } },
                '19': { start: { line: 56, column: 4 }, end: { line: 56, column: 36 } },
                '20': { start: { line: 58, column: 19 }, end: { line: 58, column: 34 } },
                '21': { start: { line: 59, column: 18 }, end: { line: 59, column: 33 } },
                '22': { start: { line: 60, column: 18 }, end: { line: 60, column: 50 } },
                '23': { start: { line: 61, column: 18 }, end: { line: 61, column: 54 } },
                '24': { start: { line: 63, column: 4 }, end: { line: 93, column: 5 } },
                '25': { start: { line: 65, column: 6 }, end: { line: 65, column: 18 } },
                '26': { start: { line: 66, column: 6 }, end: { line: 66, column: 18 } },
                '27': { start: { line: 67, column: 6 }, end: { line: 67, column: 19 } },
                '28': { start: { line: 68, column: 11 }, end: { line: 93, column: 5 } },
                '29': { start: { line: 70, column: 6 }, end: { line: 70, column: 18 } },
                '30': { start: { line: 71, column: 6 }, end: { line: 71, column: 18 } },
                '31': { start: { line: 72, column: 6 }, end: { line: 72, column: 19 } },
                '32': { start: { line: 73, column: 11 }, end: { line: 93, column: 5 } },
                '33': { start: { line: 75, column: 6 }, end: { line: 75, column: 18 } },
                '34': { start: { line: 76, column: 6 }, end: { line: 76, column: 20 } },
                '35': { start: { line: 77, column: 6 }, end: { line: 77, column: 17 } },
                '36': { start: { line: 78, column: 11 }, end: { line: 93, column: 5 } },
                '37': { start: { line: 80, column: 6 }, end: { line: 80, column: 18 } },
                '38': { start: { line: 81, column: 6 }, end: { line: 81, column: 20 } },
                '39': { start: { line: 82, column: 6 }, end: { line: 82, column: 17 } },
                '40': { start: { line: 83, column: 11 }, end: { line: 93, column: 5 } },
                '41': { start: { line: 85, column: 6 }, end: { line: 85, column: 16 } },
                '42': { start: { line: 86, column: 6 }, end: { line: 86, column: 20 } },
                '43': { start: { line: 87, column: 6 }, end: { line: 87, column: 19 } },
                '44': { start: { line: 90, column: 6 }, end: { line: 90, column: 16 } },
                '45': { start: { line: 91, column: 6 }, end: { line: 91, column: 20 } },
                '46': { start: { line: 92, column: 6 }, end: { line: 92, column: 19 } },
                '47': { start: { line: 94, column: 4 }, end: { line: 94, column: 39 } },
                '48': { start: { line: 97, column: 2 }, end: { line: 97, column: 14 } },
                '49': { start: { line: 103, column: 0 }, end: { line: 121, column: 2 } },
                '50': { start: { line: 104, column: 14 }, end: { line: 104, column: 21 } },
                '51': { start: { line: 105, column: 12 }, end: { line: 105, column: 19 } },
                '52': { start: { line: 106, column: 13 }, end: { line: 106, column: 20 } },
                '53': { start: { line: 110, column: 2 }, end: { line: 114, column: 3 } },
                '54': { start: { line: 111, column: 4 }, end: { line: 111, column: 25 } },
                '55': { start: { line: 113, column: 4 }, end: { line: 113, column: 30 } },
                '56': { start: { line: 117, column: 2 }, end: { line: 117, column: 29 } },
                '57': { start: { line: 120, column: 2 }, end: { line: 120, column: 34 } },
                '58': { start: { line: 131, column: 0 }, end: { line: 185, column: 2 } },
                '59': { start: { line: 132, column: 14 }, end: { line: 132, column: 25 } },
                '60': { start: { line: 133, column: 14 }, end: { line: 133, column: 21 } },
                '61': { start: { line: 134, column: 13 }, end: { line: 134, column: 20 } },
                '62': { start: { line: 136, column: 13 }, end: { line: 136, column: 15 } },
                '63': { start: { line: 138, column: 2 }, end: { line: 182, column: 3 } },
                '64': { start: { line: 139, column: 4 }, end: { line: 139, column: 33 } },
                '65': { start: { line: 143, column: 4 }, end: { line: 147, column: 5 } },
                '66': { start: { line: 144, column: 6 }, end: { line: 144, column: 27 } },
                '67': { start: { line: 146, column: 6 }, end: { line: 146, column: 32 } },
                '68': { start: { line: 150, column: 17 }, end: { line: 150, column: 29 } },
                '69': { start: { line: 153, column: 21 }, end: { line: 173, column: 5 } },
                '70': { start: { line: 154, column: 6 }, end: { line: 159, column: 7 } },
                '71': { start: { line: 156, column: 8 }, end: { line: 156, column: 17 } },
                '72': { start: { line: 157, column: 13 }, end: { line: 159, column: 7 } },
                '73': { start: { line: 158, column: 8 }, end: { line: 158, column: 17 } },
                '74': { start: { line: 160, column: 6 }, end: { line: 172, column: 7 } },
                '75': { start: { line: 162, column: 8 }, end: { line: 162, column: 41 } },
                '76': { start: { line: 163, column: 13 }, end: { line: 172, column: 7 } },
                '77': { start: { line: 165, column: 8 }, end: { line: 165, column: 19 } },
                '78': { start: { line: 166, column: 13 }, end: { line: 172, column: 7 } },
                '79': { start: { line: 168, column: 8 }, end: { line: 168, column: 47 } },
                '80': { start: { line: 171, column: 8 }, end: { line: 171, column: 20 } },
                '81': { start: { line: 176, column: 4 }, end: { line: 181, column: 6 } },
                '82': { start: { line: 184, column: 2 }, end: { line: 184, column: 14 } },
                '83': { start: { line: 190, column: 0 }, end: { line: 224, column: 2 } },
                '84': { start: { line: 191, column: 14 }, end: { line: 191, column: 21 } },
                '85': { start: { line: 192, column: 16 }, end: { line: 192, column: 23 } },
                '86': { start: { line: 193, column: 15 }, end: { line: 193, column: 22 } },
                '87': { start: { line: 195, column: 14 }, end: { line: 195, column: 40 } },
                '88': { start: { line: 196, column: 17 }, end: { line: 196, column: 49 } },
                '89': { start: { line: 199, column: 2 }, end: { line: 221, column: 3 } },
                '90': { start: { line: 201, column: 4 }, end: { line: 201, column: 12 } },
                '91': { start: { line: 202, column: 4 }, end: { line: 202, column: 12 } },
                '92': { start: { line: 204, column: 4 }, end: { line: 204, column: 23 } },
                '93': { start: { line: 205, column: 4 }, end: { line: 214, column: 5 } },
                '94': { start: { line: 207, column: 6 }, end: { line: 207, column: 36 } },
                '95': { start: { line: 208, column: 11 }, end: { line: 214, column: 5 } },
                '96': { start: { line: 210, column: 6 }, end: { line: 210, column: 38 } },
                '97': { start: { line: 211, column: 11 }, end: { line: 214, column: 5 } },
                '98': { start: { line: 213, column: 6 }, end: { line: 213, column: 39 } },
                '99': { start: { line: 215, column: 4 }, end: { line: 220, column: 5 } },
                '100': { start: { line: 217, column: 6 }, end: { line: 217, column: 15 } },
                '101': { start: { line: 218, column: 11 }, end: { line: 220, column: 5 } },
                '102': { start: { line: 219, column: 6 }, end: { line: 219, column: 15 } },
                '103': { start: { line: 223, column: 2 }, end: { line: 223, column: 38 } },
                '104': { start: { line: 229, column: 0 }, end: { line: 269, column: 2 } },
                '105': { start: { line: 230, column: 14 }, end: { line: 230, column: 21 } },
                '106': { start: { line: 231, column: 16 }, end: { line: 231, column: 23 } },
                '107': { start: { line: 232, column: 15 }, end: { line: 232, column: 22 } },
                '108': { start: { line: 234, column: 14 }, end: { line: 234, column: 40 } },
                '109': { start: { line: 235, column: 14 }, end: { line: 235, column: 40 } },
                '110': { start: { line: 236, column: 13 }, end: { line: 236, column: 22 } },
                '111': { start: { line: 237, column: 17 }, end: { line: 237, column: 26 } },
                '112': { start: { line: 240, column: 2 }, end: { line: 266, column: 3 } },
                '113': { start: { line: 242, column: 4 }, end: { line: 242, column: 12 } },
                '114': { start: { line: 243, column: 4 }, end: { line: 243, column: 12 } },
                '115': { start: { line: 245, column: 4 }, end: { line: 249, column: 5 } },
                '116': { start: { line: 246, column: 6 }, end: { line: 246, column: 24 } },
                '117': { start: { line: 248, column: 6 }, end: { line: 248, column: 30 } },
                '118': { start: { line: 250, column: 4 }, end: { line: 259, column: 5 } },
                '119': { start: { line: 252, column: 6 }, end: { line: 252, column: 36 } },
                '120': { start: { line: 253, column: 11 }, end: { line: 259, column: 5 } },
                '121': { start: { line: 255, column: 6 }, end: { line: 255, column: 38 } },
                '122': { start: { line: 256, column: 11 }, end: { line: 259, column: 5 } },
                '123': { start: { line: 258, column: 6 }, end: { line: 258, column: 39 } },
                '124': { start: { line: 260, column: 4 }, end: { line: 265, column: 5 } },
                '125': { start: { line: 262, column: 6 }, end: { line: 262, column: 15 } },
                '126': { start: { line: 263, column: 11 }, end: { line: 265, column: 5 } },
                '127': { start: { line: 264, column: 6 }, end: { line: 264, column: 15 } },
                '128': { start: { line: 268, column: 2 }, end: { line: 268, column: 41 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 22, column: 33 }, end: { line: 22, column: 34 } },
                  loc: { start: { line: 22, column: 48 }, end: { line: 43, column: 1 } },
                  line: 22
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 48, column: 33 }, end: { line: 48, column: 34 } },
                  loc: { start: { line: 48, column: 48 }, end: { line: 98, column: 1 } },
                  line: 48
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 103, column: 33 },
                    end: { line: 103, column: 34 }
                  },
                  loc: { start: { line: 103, column: 48 }, end: { line: 121, column: 1 } },
                  line: 103
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 131, column: 33 },
                    end: { line: 131, column: 34 }
                  },
                  loc: { start: { line: 131, column: 48 }, end: { line: 185, column: 1 } },
                  line: 131
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 153, column: 21 },
                    end: { line: 153, column: 22 }
                  },
                  loc: { start: { line: 153, column: 41 }, end: { line: 173, column: 5 } },
                  line: 153
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 190, column: 33 },
                    end: { line: 190, column: 34 }
                  },
                  loc: { start: { line: 190, column: 48 }, end: { line: 224, column: 1 } },
                  line: 190
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 229, column: 33 },
                    end: { line: 229, column: 34 }
                  },
                  loc: { start: { line: 229, column: 48 }, end: { line: 269, column: 1 } },
                  line: 229
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 31, column: 2 }, end: { line: 39, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 31, column: 2 }, end: { line: 39, column: 3 } },
                    { start: { line: 31, column: 2 }, end: { line: 39, column: 3 } }
                  ],
                  line: 31
                },
                '1': {
                  loc: { start: { line: 32, column: 4 }, end: { line: 38, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 32, column: 4 }, end: { line: 38, column: 5 } },
                    { start: { line: 32, column: 4 }, end: { line: 38, column: 5 } }
                  ],
                  line: 32
                },
                '2': {
                  loc: { start: { line: 34, column: 11 }, end: { line: 38, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 34, column: 11 }, end: { line: 38, column: 5 } },
                    { start: { line: 34, column: 11 }, end: { line: 38, column: 5 } }
                  ],
                  line: 34
                },
                '3': {
                  loc: { start: { line: 55, column: 2 }, end: { line: 95, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 55, column: 2 }, end: { line: 95, column: 3 } },
                    { start: { line: 55, column: 2 }, end: { line: 95, column: 3 } }
                  ],
                  line: 55
                },
                '4': {
                  loc: { start: { line: 63, column: 4 }, end: { line: 93, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 63, column: 4 }, end: { line: 93, column: 5 } },
                    { start: { line: 63, column: 4 }, end: { line: 93, column: 5 } }
                  ],
                  line: 63
                },
                '5': {
                  loc: { start: { line: 68, column: 11 }, end: { line: 93, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 68, column: 11 }, end: { line: 93, column: 5 } },
                    { start: { line: 68, column: 11 }, end: { line: 93, column: 5 } }
                  ],
                  line: 68
                },
                '6': {
                  loc: { start: { line: 73, column: 11 }, end: { line: 93, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 73, column: 11 }, end: { line: 93, column: 5 } },
                    { start: { line: 73, column: 11 }, end: { line: 93, column: 5 } }
                  ],
                  line: 73
                },
                '7': {
                  loc: { start: { line: 78, column: 11 }, end: { line: 93, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 78, column: 11 }, end: { line: 93, column: 5 } },
                    { start: { line: 78, column: 11 }, end: { line: 93, column: 5 } }
                  ],
                  line: 78
                },
                '8': {
                  loc: { start: { line: 83, column: 11 }, end: { line: 93, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 83, column: 11 }, end: { line: 93, column: 5 } },
                    { start: { line: 83, column: 11 }, end: { line: 93, column: 5 } }
                  ],
                  line: 83
                },
                '9': {
                  loc: { start: { line: 110, column: 2 }, end: { line: 114, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 110, column: 2 }, end: { line: 114, column: 3 } },
                    { start: { line: 110, column: 2 }, end: { line: 114, column: 3 } }
                  ],
                  line: 110
                },
                '10': {
                  loc: { start: { line: 138, column: 2 }, end: { line: 182, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 138, column: 2 }, end: { line: 182, column: 3 } },
                    { start: { line: 138, column: 2 }, end: { line: 182, column: 3 } }
                  ],
                  line: 138
                },
                '11': {
                  loc: { start: { line: 143, column: 4 }, end: { line: 147, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 143, column: 4 }, end: { line: 147, column: 5 } },
                    { start: { line: 143, column: 4 }, end: { line: 147, column: 5 } }
                  ],
                  line: 143
                },
                '12': {
                  loc: { start: { line: 154, column: 6 }, end: { line: 159, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 154, column: 6 }, end: { line: 159, column: 7 } },
                    { start: { line: 154, column: 6 }, end: { line: 159, column: 7 } }
                  ],
                  line: 154
                },
                '13': {
                  loc: { start: { line: 157, column: 13 }, end: { line: 159, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 157, column: 13 }, end: { line: 159, column: 7 } },
                    { start: { line: 157, column: 13 }, end: { line: 159, column: 7 } }
                  ],
                  line: 157
                },
                '14': {
                  loc: { start: { line: 160, column: 6 }, end: { line: 172, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 160, column: 6 }, end: { line: 172, column: 7 } },
                    { start: { line: 160, column: 6 }, end: { line: 172, column: 7 } }
                  ],
                  line: 160
                },
                '15': {
                  loc: { start: { line: 163, column: 13 }, end: { line: 172, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 163, column: 13 }, end: { line: 172, column: 7 } },
                    { start: { line: 163, column: 13 }, end: { line: 172, column: 7 } }
                  ],
                  line: 163
                },
                '16': {
                  loc: { start: { line: 166, column: 13 }, end: { line: 172, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 166, column: 13 }, end: { line: 172, column: 7 } },
                    { start: { line: 166, column: 13 }, end: { line: 172, column: 7 } }
                  ],
                  line: 166
                },
                '17': {
                  loc: { start: { line: 199, column: 2 }, end: { line: 221, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 199, column: 2 }, end: { line: 221, column: 3 } },
                    { start: { line: 199, column: 2 }, end: { line: 221, column: 3 } }
                  ],
                  line: 199
                },
                '18': {
                  loc: { start: { line: 205, column: 4 }, end: { line: 214, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 205, column: 4 }, end: { line: 214, column: 5 } },
                    { start: { line: 205, column: 4 }, end: { line: 214, column: 5 } }
                  ],
                  line: 205
                },
                '19': {
                  loc: { start: { line: 208, column: 11 }, end: { line: 214, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 208, column: 11 }, end: { line: 214, column: 5 } },
                    { start: { line: 208, column: 11 }, end: { line: 214, column: 5 } }
                  ],
                  line: 208
                },
                '20': {
                  loc: { start: { line: 211, column: 11 }, end: { line: 214, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 211, column: 11 }, end: { line: 214, column: 5 } },
                    { start: { line: 211, column: 11 }, end: { line: 214, column: 5 } }
                  ],
                  line: 211
                },
                '21': {
                  loc: { start: { line: 215, column: 4 }, end: { line: 220, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 215, column: 4 }, end: { line: 220, column: 5 } },
                    { start: { line: 215, column: 4 }, end: { line: 220, column: 5 } }
                  ],
                  line: 215
                },
                '22': {
                  loc: { start: { line: 218, column: 11 }, end: { line: 220, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 218, column: 11 }, end: { line: 220, column: 5 } },
                    { start: { line: 218, column: 11 }, end: { line: 220, column: 5 } }
                  ],
                  line: 218
                },
                '23': {
                  loc: { start: { line: 240, column: 2 }, end: { line: 266, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 240, column: 2 }, end: { line: 266, column: 3 } },
                    { start: { line: 240, column: 2 }, end: { line: 266, column: 3 } }
                  ],
                  line: 240
                },
                '24': {
                  loc: { start: { line: 245, column: 4 }, end: { line: 249, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 245, column: 4 }, end: { line: 249, column: 5 } },
                    { start: { line: 245, column: 4 }, end: { line: 249, column: 5 } }
                  ],
                  line: 245
                },
                '25': {
                  loc: { start: { line: 250, column: 4 }, end: { line: 259, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 250, column: 4 }, end: { line: 259, column: 5 } },
                    { start: { line: 250, column: 4 }, end: { line: 259, column: 5 } }
                  ],
                  line: 250
                },
                '26': {
                  loc: { start: { line: 253, column: 11 }, end: { line: 259, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 253, column: 11 }, end: { line: 259, column: 5 } },
                    { start: { line: 253, column: 11 }, end: { line: 259, column: 5 } }
                  ],
                  line: 253
                },
                '27': {
                  loc: { start: { line: 256, column: 11 }, end: { line: 259, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 256, column: 11 }, end: { line: 259, column: 5 } },
                    { start: { line: 256, column: 11 }, end: { line: 259, column: 5 } }
                  ],
                  line: 256
                },
                '28': {
                  loc: { start: { line: 260, column: 4 }, end: { line: 265, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 260, column: 4 }, end: { line: 265, column: 5 } },
                    { start: { line: 260, column: 4 }, end: { line: 265, column: 5 } }
                  ],
                  line: 260
                },
                '29': {
                  loc: { start: { line: 263, column: 11 }, end: { line: 265, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 263, column: 11 }, end: { line: 265, column: 5 } },
                    { start: { line: 263, column: 11 }, end: { line: 265, column: 5 } }
                  ],
                  line: 263
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0,
                '118': 0,
                '119': 0,
                '120': 0,
                '121': 0,
                '122': 0,
                '123': 0,
                '124': 0,
                '125': 0,
                '126': 0,
                '127': 0,
                '128': 0
              },
              f: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0 },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0],
                '20': [0, 0],
                '21': [0, 0],
                '22': [0, 0],
                '23': [0, 0],
                '24': [0, 0],
                '25': [0, 0],
                '26': [0, 0],
                '27': [0, 0],
                '28': [0, 0],
                '29': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: 'e6c8614886e48934fda3ab3cde6b9ef2ad0286ad'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_1u65syjkr4.s[0]++;
          _main.default.ColorConversion = {};

          /**
           * Convert an HSBA array to HSLA.
           */ cov_1u65syjkr4.s[1]++;
          _main.default.ColorConversion._hsbaToHSLA = function(hsba) {
            cov_1u65syjkr4.f[0]++;
            var hue = (cov_1u65syjkr4.s[2]++, hsba[0]);
            var sat = (cov_1u65syjkr4.s[3]++, hsba[1]);
            var val = (cov_1u65syjkr4.s[4]++, hsba[2]);

            // Calculate lightness.
            var li = (cov_1u65syjkr4.s[5]++, (2 - sat) * val / 2);

            // Convert saturation.
            cov_1u65syjkr4.s[6]++;
            if (li !== 0) {
              cov_1u65syjkr4.b[0][0]++;
              cov_1u65syjkr4.s[7]++;
              if (li === 1) {
                cov_1u65syjkr4.b[1][0]++;
                cov_1u65syjkr4.s[8]++;
                sat = 0;
              } else {
                cov_1u65syjkr4.b[1][1]++;
                cov_1u65syjkr4.s[9]++;
                if (li < 0.5) {
                  cov_1u65syjkr4.b[2][0]++;
                  cov_1u65syjkr4.s[10]++;
                  sat = sat / (2 - sat);
                } else {
                  cov_1u65syjkr4.b[2][1]++;
                  cov_1u65syjkr4.s[11]++;
                  sat = sat * val / (2 - li * 2);
                }
              }
            } else {
              cov_1u65syjkr4.b[0][1]++;
            }

            // Hue and alpha stay the same.
            cov_1u65syjkr4.s[12]++;
            return [hue, sat, li, hsba[3]];
          };

          /**
           * Convert an HSBA array to RGBA.
           */ cov_1u65syjkr4.s[13]++;
          _main.default.ColorConversion._hsbaToRGBA = function(hsba) {
            cov_1u65syjkr4.f[1]++;
            var hue = (cov_1u65syjkr4.s[14]++, hsba[0] * 6); // We will split hue into 6 sectors.
            var sat = (cov_1u65syjkr4.s[15]++, hsba[1]);
            var val = (cov_1u65syjkr4.s[16]++, hsba[2]);

            var RGBA = (cov_1u65syjkr4.s[17]++, []);
            cov_1u65syjkr4.s[18]++;

            if (sat === 0) {
              cov_1u65syjkr4.b[3][0]++;
              cov_1u65syjkr4.s[19]++;
              RGBA = [val, val, val, hsba[3]]; // Return early if grayscale.
            } else {
              cov_1u65syjkr4.b[3][1]++;
              var sector = (cov_1u65syjkr4.s[20]++, Math.floor(hue));
              var tint1 = (cov_1u65syjkr4.s[21]++, val * (1 - sat));
              var tint2 = (cov_1u65syjkr4.s[22]++, val * (1 - sat * (hue - sector)));
              var tint3 = (cov_1u65syjkr4.s[23]++, val * (1 - sat * (1 + sector - hue)));
              var red, green, blue;
              cov_1u65syjkr4.s[24]++;
              if (sector === 1) {
                cov_1u65syjkr4.b[4][0]++;
                cov_1u65syjkr4.s[25]++;
                // Yellow to green.
                red = tint2;
                cov_1u65syjkr4.s[26]++;
                green = val;
                cov_1u65syjkr4.s[27]++;
                blue = tint1;
              } else {
                cov_1u65syjkr4.b[4][1]++;
                cov_1u65syjkr4.s[28]++;
                if (sector === 2) {
                  cov_1u65syjkr4.b[5][0]++;
                  cov_1u65syjkr4.s[29]++;
                  // Green to cyan.
                  red = tint1;
                  cov_1u65syjkr4.s[30]++;
                  green = val;
                  cov_1u65syjkr4.s[31]++;
                  blue = tint3;
                } else {
                  cov_1u65syjkr4.b[5][1]++;
                  cov_1u65syjkr4.s[32]++;
                  if (sector === 3) {
                    cov_1u65syjkr4.b[6][0]++;
                    cov_1u65syjkr4.s[33]++;
                    // Cyan to blue.
                    red = tint1;
                    cov_1u65syjkr4.s[34]++;
                    green = tint2;
                    cov_1u65syjkr4.s[35]++;
                    blue = val;
                  } else {
                    cov_1u65syjkr4.b[6][1]++;
                    cov_1u65syjkr4.s[36]++;
                    if (sector === 4) {
                      cov_1u65syjkr4.b[7][0]++;
                      cov_1u65syjkr4.s[37]++;
                      // Blue to magenta.
                      red = tint3;
                      cov_1u65syjkr4.s[38]++;
                      green = tint1;
                      cov_1u65syjkr4.s[39]++;
                      blue = val;
                    } else {
                      cov_1u65syjkr4.b[7][1]++;
                      cov_1u65syjkr4.s[40]++;
                      if (sector === 5) {
                        cov_1u65syjkr4.b[8][0]++;
                        cov_1u65syjkr4.s[41]++;
                        // Magenta to red.
                        red = val;
                        cov_1u65syjkr4.s[42]++;
                        green = tint1;
                        cov_1u65syjkr4.s[43]++;
                        blue = tint2;
                      } else {
                        cov_1u65syjkr4.b[8][1]++;
                        cov_1u65syjkr4.s[44]++;
                        // Red to yellow (sector could be 0 or 6).
                        red = val;
                        cov_1u65syjkr4.s[45]++;
                        green = tint3;
                        cov_1u65syjkr4.s[46]++;
                        blue = tint1;
                      }
                    }
                  }
                }
              }
              cov_1u65syjkr4.s[47]++;
              RGBA = [red, green, blue, hsba[3]];
            }
            cov_1u65syjkr4.s[48]++;

            return RGBA;
          };

          /**
           * Convert an HSLA array to HSBA.
           */ cov_1u65syjkr4.s[49]++;
          _main.default.ColorConversion._hslaToHSBA = function(hsla) {
            cov_1u65syjkr4.f[2]++;
            var hue = (cov_1u65syjkr4.s[50]++, hsla[0]);
            var sat = (cov_1u65syjkr4.s[51]++, hsla[1]);
            var li = (cov_1u65syjkr4.s[52]++, hsla[2]);

            // Calculate brightness.
            var val;
            cov_1u65syjkr4.s[53]++;
            if (li < 0.5) {
              cov_1u65syjkr4.b[9][0]++;
              cov_1u65syjkr4.s[54]++;
              val = (1 + sat) * li;
            } else {
              cov_1u65syjkr4.b[9][1]++;
              cov_1u65syjkr4.s[55]++;
              val = li + sat - li * sat;
            }

            // Convert saturation.
            cov_1u65syjkr4.s[56]++;
            sat = 2 * (val - li) / val;

            // Hue and alpha stay the same.
            cov_1u65syjkr4.s[57]++;
            return [hue, sat, val, hsla[3]];
          };

          /**
           * Convert an HSLA array to RGBA.
           *
           * We need to change basis from HSLA to something that can be more easily be
           * projected onto RGBA. We will choose hue and brightness as our first two
           * components, and pick a convenient third one ('zest') so that we don't need
           * to calculate formal HSBA saturation.
           */ cov_1u65syjkr4.s[58]++;
          _main.default.ColorConversion._hslaToRGBA = function(hsla) {
            cov_1u65syjkr4.f[3]++;
            var hue = (cov_1u65syjkr4.s[59]++, hsla[0] * 6); // We will split hue into 6 sectors.
            var sat = (cov_1u65syjkr4.s[60]++, hsla[1]);
            var li = (cov_1u65syjkr4.s[61]++, hsla[2]);

            var RGBA = (cov_1u65syjkr4.s[62]++, []);
            cov_1u65syjkr4.s[63]++;

            if (sat === 0) {
              cov_1u65syjkr4.b[10][0]++;
              cov_1u65syjkr4.s[64]++;
              RGBA = [li, li, li, hsla[3]]; // Return early if grayscale.
            } else {
              cov_1u65syjkr4.b[10][1]++;
              // Calculate brightness.
              var val;
              cov_1u65syjkr4.s[65]++;
              if (li < 0.5) {
                cov_1u65syjkr4.b[11][0]++;
                cov_1u65syjkr4.s[66]++;
                val = (1 + sat) * li;
              } else {
                cov_1u65syjkr4.b[11][1]++;
                cov_1u65syjkr4.s[67]++;
                val = li + sat - li * sat;
              }

              // Define zest.
              var zest = (cov_1u65syjkr4.s[68]++, 2 * li - val);

              // Implement projection (project onto green by default).
              cov_1u65syjkr4.s[69]++;
              var hzvToRGB = function hzvToRGB(hue, zest, val) {
                cov_1u65syjkr4.f[4]++;
                cov_1u65syjkr4.s[70]++;
                if (hue < 0) {
                  cov_1u65syjkr4.b[12][0]++;
                  cov_1u65syjkr4.s[71]++;
                  // Hue must wrap to allow projection onto red and blue.
                  hue += 6;
                } else {
                  cov_1u65syjkr4.b[12][1]++;
                  cov_1u65syjkr4.s[72]++;
                  if (hue >= 6) {
                    cov_1u65syjkr4.b[13][0]++;
                    cov_1u65syjkr4.s[73]++;
                    hue -= 6;
                  } else {
                    cov_1u65syjkr4.b[13][1]++;
                  }
                }
                cov_1u65syjkr4.s[74]++;
                if (hue < 1) {
                  cov_1u65syjkr4.b[14][0]++;
                  cov_1u65syjkr4.s[75]++;
                  // Red to yellow (increasing green).
                  return zest + (val - zest) * hue;
                } else {
                  cov_1u65syjkr4.b[14][1]++;
                  cov_1u65syjkr4.s[76]++;
                  if (hue < 3) {
                    cov_1u65syjkr4.b[15][0]++;
                    cov_1u65syjkr4.s[77]++;
                    // Yellow to cyan (greatest green).
                    return val;
                  } else {
                    cov_1u65syjkr4.b[15][1]++;
                    cov_1u65syjkr4.s[78]++;
                    if (hue < 4) {
                      cov_1u65syjkr4.b[16][0]++;
                      cov_1u65syjkr4.s[79]++;
                      // Cyan to blue (decreasing green).
                      return zest + (val - zest) * (4 - hue);
                    } else {
                      cov_1u65syjkr4.b[16][1]++;
                      cov_1u65syjkr4.s[80]++;
                      // Blue to red (least green).
                      return zest;
                    }
                  }
                }
              };

              // Perform projections, offsetting hue as necessary.
              cov_1u65syjkr4.s[81]++;
              RGBA = [
                hzvToRGB(hue + 2, zest, val),
                hzvToRGB(hue, zest, val),
                hzvToRGB(hue - 2, zest, val),
                hsla[3]
              ];
            }
            cov_1u65syjkr4.s[82]++;

            return RGBA;
          };

          /**
           * Convert an RGBA array to HSBA.
           */ cov_1u65syjkr4.s[83]++;
          _main.default.ColorConversion._rgbaToHSBA = function(rgba) {
            cov_1u65syjkr4.f[5]++;
            var red = (cov_1u65syjkr4.s[84]++, rgba[0]);
            var green = (cov_1u65syjkr4.s[85]++, rgba[1]);
            var blue = (cov_1u65syjkr4.s[86]++, rgba[2]);

            var val = (cov_1u65syjkr4.s[87]++, Math.max(red, green, blue));
            var chroma = (cov_1u65syjkr4.s[88]++, val - Math.min(red, green, blue));

            var hue, sat;
            cov_1u65syjkr4.s[89]++;
            if (chroma === 0) {
              cov_1u65syjkr4.b[17][0]++;
              cov_1u65syjkr4.s[90]++;
              // Return early if grayscale.
              hue = 0;
              cov_1u65syjkr4.s[91]++;
              sat = 0;
            } else {
              cov_1u65syjkr4.b[17][1]++;
              cov_1u65syjkr4.s[92]++;
              sat = chroma / val;
              cov_1u65syjkr4.s[93]++;
              if (red === val) {
                cov_1u65syjkr4.b[18][0]++;
                cov_1u65syjkr4.s[94]++;
                // Magenta to yellow.
                hue = (green - blue) / chroma;
              } else {
                cov_1u65syjkr4.b[18][1]++;
                cov_1u65syjkr4.s[95]++;
                if (green === val) {
                  cov_1u65syjkr4.b[19][0]++;
                  cov_1u65syjkr4.s[96]++;
                  // Yellow to cyan.
                  hue = 2 + (blue - red) / chroma;
                } else {
                  cov_1u65syjkr4.b[19][1]++;
                  cov_1u65syjkr4.s[97]++;
                  if (blue === val) {
                    cov_1u65syjkr4.b[20][0]++;
                    cov_1u65syjkr4.s[98]++;
                    // Cyan to magenta.
                    hue = 4 + (red - green) / chroma;
                  } else {
                    cov_1u65syjkr4.b[20][1]++;
                  }
                }
              }
              cov_1u65syjkr4.s[99]++;
              if (hue < 0) {
                cov_1u65syjkr4.b[21][0]++;
                cov_1u65syjkr4.s[100]++;
                // Confine hue to the interval [0, 1).
                hue += 6;
              } else {
                cov_1u65syjkr4.b[21][1]++;
                cov_1u65syjkr4.s[101]++;
                if (hue >= 6) {
                  cov_1u65syjkr4.b[22][0]++;
                  cov_1u65syjkr4.s[102]++;
                  hue -= 6;
                } else {
                  cov_1u65syjkr4.b[22][1]++;
                }
              }
            }
            cov_1u65syjkr4.s[103]++;

            return [hue / 6, sat, val, rgba[3]];
          };

          /**
           * Convert an RGBA array to HSLA.
           */ cov_1u65syjkr4.s[104]++;
          _main.default.ColorConversion._rgbaToHSLA = function(rgba) {
            cov_1u65syjkr4.f[6]++;
            var red = (cov_1u65syjkr4.s[105]++, rgba[0]);
            var green = (cov_1u65syjkr4.s[106]++, rgba[1]);
            var blue = (cov_1u65syjkr4.s[107]++, rgba[2]);

            var val = (cov_1u65syjkr4.s[108]++, Math.max(red, green, blue));
            var min = (cov_1u65syjkr4.s[109]++, Math.min(red, green, blue));
            var li = (cov_1u65syjkr4.s[110]++, val + min); // We will halve this later.
            var chroma = (cov_1u65syjkr4.s[111]++, val - min);

            var hue, sat;
            cov_1u65syjkr4.s[112]++;
            if (chroma === 0) {
              cov_1u65syjkr4.b[23][0]++;
              cov_1u65syjkr4.s[113]++;
              // Return early if grayscale.
              hue = 0;
              cov_1u65syjkr4.s[114]++;
              sat = 0;
            } else {
              cov_1u65syjkr4.b[23][1]++;
              cov_1u65syjkr4.s[115]++;
              if (li < 1) {
                cov_1u65syjkr4.b[24][0]++;
                cov_1u65syjkr4.s[116]++;
                sat = chroma / li;
              } else {
                cov_1u65syjkr4.b[24][1]++;
                cov_1u65syjkr4.s[117]++;
                sat = chroma / (2 - li);
              }
              cov_1u65syjkr4.s[118]++;
              if (red === val) {
                cov_1u65syjkr4.b[25][0]++;
                cov_1u65syjkr4.s[119]++;
                // Magenta to yellow.
                hue = (green - blue) / chroma;
              } else {
                cov_1u65syjkr4.b[25][1]++;
                cov_1u65syjkr4.s[120]++;
                if (green === val) {
                  cov_1u65syjkr4.b[26][0]++;
                  cov_1u65syjkr4.s[121]++;
                  // Yellow to cyan.
                  hue = 2 + (blue - red) / chroma;
                } else {
                  cov_1u65syjkr4.b[26][1]++;
                  cov_1u65syjkr4.s[122]++;
                  if (blue === val) {
                    cov_1u65syjkr4.b[27][0]++;
                    cov_1u65syjkr4.s[123]++;
                    // Cyan to magenta.
                    hue = 4 + (red - green) / chroma;
                  } else {
                    cov_1u65syjkr4.b[27][1]++;
                  }
                }
              }
              cov_1u65syjkr4.s[124]++;
              if (hue < 0) {
                cov_1u65syjkr4.b[28][0]++;
                cov_1u65syjkr4.s[125]++;
                // Confine hue to the interval [0, 1).
                hue += 6;
              } else {
                cov_1u65syjkr4.b[28][1]++;
                cov_1u65syjkr4.s[126]++;
                if (hue >= 6) {
                  cov_1u65syjkr4.b[29][0]++;
                  cov_1u65syjkr4.s[127]++;
                  hue -= 6;
                } else {
                  cov_1u65syjkr4.b[29][1]++;
                }
              }
            }
            cov_1u65syjkr4.s[128]++;

            return [hue / 6, sat, li / 2, rgba[3]];
          };
          var _default = _main.default.ColorConversion;
          exports.default = _default;
        },
        { '../core/main': 283 }
      ],
      269: [
        function(_dereq_, module, exports) {
          'use strict';
          function _typeof(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof = function _typeof(obj) {
                return typeof obj;
              };
            } else {
              _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof(obj);
          }
          var cov_1pyzfehw31 = (function() {
            var path = '/Users/outofambit/src/p5.js/src/color/creating_reading.js';
            var hash = '619ea29eeaea6923b5e3a6b61165991fb5a75861';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/color/creating_reading.js',
              statementMap: {
                '0': { start: { line: 40, column: 0 }, end: { line: 43, column: 2 } },
                '1': { start: { line: 41, column: 2 }, end: { line: 41, column: 45 } },
                '2': { start: { line: 42, column: 2 }, end: { line: 42, column: 35 } },
                '3': { start: { line: 67, column: 0 }, end: { line: 70, column: 2 } },
                '4': { start: { line: 68, column: 2 }, end: { line: 68, column: 44 } },
                '5': { start: { line: 69, column: 2 }, end: { line: 69, column: 34 } },
                '6': { start: { line: 111, column: 0 }, end: { line: 114, column: 2 } },
                '7': { start: { line: 112, column: 2 }, end: { line: 112, column: 50 } },
                '8': { start: { line: 113, column: 2 }, end: { line: 113, column: 40 } },
                '9': { start: { line: 287, column: 0 }, end: { line: 295, column: 2 } },
                '10': { start: { line: 288, column: 2 }, end: { line: 288, column: 45 } },
                '11': { start: { line: 289, column: 2 }, end: { line: 291, column: 3 } },
                '12': { start: { line: 290, column: 4 }, end: { line: 290, column: 24 } },
                '13': { start: { line: 293, column: 15 }, end: { line: 293, column: 71 } },
                '14': { start: { line: 294, column: 2 }, end: { line: 294, column: 34 } },
                '15': { start: { line: 321, column: 0 }, end: { line: 324, column: 2 } },
                '16': { start: { line: 322, column: 2 }, end: { line: 322, column: 45 } },
                '17': { start: { line: 323, column: 2 }, end: { line: 323, column: 35 } },
                '18': { start: { line: 356, column: 0 }, end: { line: 359, column: 2 } },
                '19': { start: { line: 357, column: 2 }, end: { line: 357, column: 43 } },
                '20': { start: { line: 358, column: 2 }, end: { line: 358, column: 33 } },
                '21': { start: { line: 404, column: 0 }, end: { line: 450, column: 2 } },
                '22': { start: { line: 405, column: 2 }, end: { line: 405, column: 49 } },
                '23': { start: { line: 406, column: 15 }, end: { line: 406, column: 30 } },
                '24': { start: { line: 407, column: 16 }, end: { line: 407, column: 32 } },
                '25': { start: { line: 411, column: 2 }, end: { line: 426, column: 3 } },
                '26': { start: { line: 412, column: 4 }, end: { line: 412, column: 52 } },
                '27': { start: { line: 412, column: 39 }, end: { line: 412, column: 50 } },
                '28': { start: { line: 413, column: 4 }, end: { line: 413, column: 50 } },
                '29': { start: { line: 413, column: 37 }, end: { line: 413, column: 48 } },
                '30': { start: { line: 414, column: 9 }, end: { line: 426, column: 3 } },
                '31': { start: { line: 415, column: 4 }, end: { line: 415, column: 24 } },
                '32': { start: { line: 416, column: 4 }, end: { line: 416, column: 24 } },
                '33': { start: { line: 417, column: 4 }, end: { line: 417, column: 24 } },
                '34': { start: { line: 418, column: 4 }, end: { line: 418, column: 22 } },
                '35': { start: { line: 419, column: 9 }, end: { line: 426, column: 3 } },
                '36': { start: { line: 420, column: 4 }, end: { line: 420, column: 23 } },
                '37': { start: { line: 421, column: 4 }, end: { line: 421, column: 23 } },
                '38': { start: { line: 422, column: 4 }, end: { line: 422, column: 24 } },
                '39': { start: { line: 423, column: 4 }, end: { line: 423, column: 22 } },
                '40': { start: { line: 425, column: 4 }, end: { line: 425, column: 64 } },
                '41': { start: { line: 429, column: 2 }, end: { line: 429, column: 38 } },
                '42': { start: { line: 433, column: 2 }, end: { line: 435, column: 3 } },
                '43': { start: { line: 434, column: 4 }, end: { line: 434, column: 67 } },
                '44': { start: { line: 434, column: 38 }, end: { line: 434, column: 66 } },
                '45': { start: { line: 438, column: 2 }, end: { line: 438, column: 48 } },
                '46': { start: { line: 439, column: 2 }, end: { line: 439, column: 48 } },
                '47': { start: { line: 440, column: 2 }, end: { line: 440, column: 48 } },
                '48': { start: { line: 441, column: 2 }, end: { line: 441, column: 48 } },
                '49': { start: { line: 444, column: 2 }, end: { line: 444, column: 23 } },
                '50': { start: { line: 445, column: 2 }, end: { line: 445, column: 23 } },
                '51': { start: { line: 446, column: 2 }, end: { line: 446, column: 23 } },
                '52': { start: { line: 447, column: 2 }, end: { line: 447, column: 23 } },
                '53': { start: { line: 449, column: 2 }, end: { line: 449, column: 36 } },
                '54': { start: { line: 477, column: 0 }, end: { line: 480, column: 2 } },
                '55': { start: { line: 478, column: 2 }, end: { line: 478, column: 49 } },
                '56': { start: { line: 479, column: 2 }, end: { line: 479, column: 39 } },
                '57': { start: { line: 517, column: 0 }, end: { line: 520, column: 2 } },
                '58': { start: { line: 518, column: 2 }, end: { line: 518, column: 43 } },
                '59': { start: { line: 519, column: 2 }, end: { line: 519, column: 33 } },
                '60': { start: { line: 551, column: 0 }, end: { line: 554, column: 2 } },
                '61': { start: { line: 552, column: 2 }, end: { line: 552, column: 50 } },
                '62': { start: { line: 553, column: 2 }, end: { line: 553, column: 40 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 40, column: 21 }, end: { line: 40, column: 22 } },
                  loc: { start: { line: 40, column: 33 }, end: { line: 43, column: 1 } },
                  line: 40
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 67, column: 20 }, end: { line: 67, column: 21 } },
                  loc: { start: { line: 67, column: 32 }, end: { line: 70, column: 1 } },
                  line: 67
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 111, column: 26 },
                    end: { line: 111, column: 27 }
                  },
                  loc: { start: { line: 111, column: 38 }, end: { line: 114, column: 1 } },
                  line: 111
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 287, column: 21 },
                    end: { line: 287, column: 22 }
                  },
                  loc: { start: { line: 287, column: 32 }, end: { line: 295, column: 1 } },
                  line: 287
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 321, column: 21 },
                    end: { line: 321, column: 22 }
                  },
                  loc: { start: { line: 321, column: 33 }, end: { line: 324, column: 1 } },
                  line: 321
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 356, column: 19 },
                    end: { line: 356, column: 20 }
                  },
                  loc: { start: { line: 356, column: 31 }, end: { line: 359, column: 1 } },
                  line: 356
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 404, column: 25 },
                    end: { line: 404, column: 26 }
                  },
                  loc: { start: { line: 404, column: 47 }, end: { line: 450, column: 1 } },
                  line: 404
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 412, column: 30 },
                    end: { line: 412, column: 31 }
                  },
                  loc: { start: { line: 412, column: 39 }, end: { line: 412, column: 50 } },
                  line: 412
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 413, column: 28 },
                    end: { line: 413, column: 29 }
                  },
                  loc: { start: { line: 413, column: 37 }, end: { line: 413, column: 48 } },
                  line: 413
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 434, column: 16 },
                    end: { line: 434, column: 17 }
                  },
                  loc: { start: { line: 434, column: 38 }, end: { line: 434, column: 66 } },
                  line: 434
                },
                '10': {
                  name: '(anonymous_10)',
                  decl: {
                    start: { line: 477, column: 25 },
                    end: { line: 477, column: 26 }
                  },
                  loc: { start: { line: 477, column: 37 }, end: { line: 480, column: 1 } },
                  line: 477
                },
                '11': {
                  name: '(anonymous_11)',
                  decl: {
                    start: { line: 517, column: 19 },
                    end: { line: 517, column: 20 }
                  },
                  loc: { start: { line: 517, column: 31 }, end: { line: 520, column: 1 } },
                  line: 517
                },
                '12': {
                  name: '(anonymous_12)',
                  decl: {
                    start: { line: 551, column: 26 },
                    end: { line: 551, column: 27 }
                  },
                  loc: { start: { line: 551, column: 38 }, end: { line: 554, column: 1 } },
                  line: 551
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 289, column: 2 }, end: { line: 291, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 289, column: 2 }, end: { line: 291, column: 3 } },
                    { start: { line: 289, column: 2 }, end: { line: 291, column: 3 } }
                  ],
                  line: 289
                },
                '1': {
                  loc: { start: { line: 293, column: 15 }, end: { line: 293, column: 71 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 293, column: 47 }, end: { line: 293, column: 59 } },
                    { start: { line: 293, column: 62 }, end: { line: 293, column: 71 } }
                  ],
                  line: 293
                },
                '2': {
                  loc: { start: { line: 411, column: 2 }, end: { line: 426, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 411, column: 2 }, end: { line: 426, column: 3 } },
                    { start: { line: 411, column: 2 }, end: { line: 426, column: 3 } }
                  ],
                  line: 411
                },
                '3': {
                  loc: { start: { line: 414, column: 9 }, end: { line: 426, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 414, column: 9 }, end: { line: 426, column: 3 } },
                    { start: { line: 414, column: 9 }, end: { line: 426, column: 3 } }
                  ],
                  line: 414
                },
                '4': {
                  loc: { start: { line: 419, column: 9 }, end: { line: 426, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 419, column: 9 }, end: { line: 426, column: 3 } },
                    { start: { line: 419, column: 9 }, end: { line: 426, column: 3 } }
                  ],
                  line: 419
                },
                '5': {
                  loc: { start: { line: 433, column: 2 }, end: { line: 435, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 433, column: 2 }, end: { line: 435, column: 3 } },
                    { start: { line: 433, column: 2 }, end: { line: 435, column: 3 } }
                  ],
                  line: 433
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '619ea29eeaea6923b5e3a6b61165991fb5a75861'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.map');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          var constants = _interopRequireWildcard(_dereq_('../core/constants'));
          _dereq_('./p5.Color');
          _dereq_('../core/friendly_errors/validate_params');
          _dereq_('../core/friendly_errors/file_errors');
          _dereq_('../core/friendly_errors/fes_core');
          function _getRequireWildcardCache() {
            if (typeof WeakMap !== 'function') return null;
            var cache = new WeakMap();
            _getRequireWildcardCache = function _getRequireWildcardCache() {
              return cache;
            };
            return cache;
          }
          function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
              return obj;
            }
            if (obj === null || (_typeof(obj) !== 'object' && typeof obj !== 'function')) {
              return { default: obj };
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
              return cache.get(obj);
            }
            var newObj = {};
            var hasPropertyDescriptor =
              Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
              if (Object.prototype.hasOwnProperty.call(obj, key)) {
                var desc = hasPropertyDescriptor
                  ? Object.getOwnPropertyDescriptor(obj, key)
                  : null;
                if (desc && (desc.get || desc.set)) {
                  Object.defineProperty(newObj, key, desc);
                } else {
                  newObj[key] = obj[key];
                }
              }
            }
            newObj.default = obj;
            if (cache) {
              cache.set(obj, newObj);
            }
            return newObj;
          }
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_1pyzfehw31.s[0]++;

          /**
           * Extracts the alpha value from a color or pixel array.
           *
           * @method alpha
           * @param {p5.Color|Number[]|String} color <a href="#/p5.Color">p5.Color</a> object, color components,
           *                                         or CSS color
           * @return {Number} the alpha value
           *
           * @example
           * <div>
           * <code>
           * noStroke();
           * let c = color(0, 126, 255, 102);
           * fill(c);
           * rect(15, 15, 35, 70);
           * let value = alpha(c); // Sets 'value' to 102
           * fill(value);
           * rect(50, 15, 35, 70);
           * </code>
           * </div>
           *
           * @alt
           * Left half of canvas light blue and right half light charcoal grey.
           */
          _main.default.prototype.alpha = function(c) {
            cov_1pyzfehw31.f[0]++;
            cov_1pyzfehw31.s[1]++;
            _main.default._validateParameters('alpha', arguments);
            cov_1pyzfehw31.s[2]++;
            return this.color(c)._getAlpha();
          };

          /**
           * Extracts the blue value from a color or pixel array.
           *
           * @method blue
           * @param {p5.Color|Number[]|String} color <a href="#/p5.Color">p5.Color</a> object, color components,
           *                                         or CSS color
           * @return {Number} the blue value
           * @example
           * <div>
           * <code>
           * let c = color(175, 100, 220);
           * fill(c);
           * rect(15, 20, 35, 60); // Draw left rectangle
           * let blueValue = blue(c);
           * fill(0, 0, blueValue);
           * rect(50, 20, 35, 60); // Draw right rectangle
           * </code>
           * </div>
           *
           * @alt
           * Left half of canvas light purple and right half a royal blue.
           */ cov_1pyzfehw31.s[3]++;
          _main.default.prototype.blue = function(c) {
            cov_1pyzfehw31.f[1]++;
            cov_1pyzfehw31.s[4]++;
            _main.default._validateParameters('blue', arguments);
            cov_1pyzfehw31.s[5]++;
            return this.color(c)._getBlue();
          };

          /**
           * Extracts the HSB brightness value from a color or pixel array.
           *
           * @method brightness
           * @param {p5.Color|Number[]|String} color <a href="#/p5.Color">p5.Color</a> object, color components,
           *                                         or CSS color
           * @return {Number} the brightness value
           *
           * @example
           * <div>
           * <code>
           * noStroke();
           * colorMode(HSB, 255);
           * let c = color(0, 126, 255);
           * fill(c);
           * rect(15, 20, 35, 60);
           * let value = brightness(c); // Sets 'value' to 255
           * fill(value);
           * rect(50, 20, 35, 60);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * noStroke();
           * colorMode(HSB, 255);
           * let c = color('hsb(60, 100%, 50%)');
           * fill(c);
           * rect(15, 20, 35, 60);
           * let value = brightness(c); // A 'value' of 50% is 127.5
           * fill(value);
           * rect(50, 20, 35, 60);
           * </code>
           * </div>
           *
           * @alt
           * Left half of canvas salmon pink and the right half with it's brightness colored white.
           * Left half of canvas olive colored and the right half with it's brightness color gray.
           */ cov_1pyzfehw31.s[6]++;
          _main.default.prototype.brightness = function(c) {
            cov_1pyzfehw31.f[2]++;
            cov_1pyzfehw31.s[7]++;
            _main.default._validateParameters('brightness', arguments);
            cov_1pyzfehw31.s[8]++;
            return this.color(c)._getBrightness();
          };

          /**
           * Creates colors for storing in variables of the color datatype. The
           * parameters are interpreted as RGB or HSB values depending on the
           * current <a href="#/p5/colorMode">colorMode()</a>. The default mode is RGB values from 0 to 255
           * and, therefore, the function call color(255, 204, 0) will return a
           * bright yellow color.
           *
           * Note that if only one value is provided to <a href="#/p5/color">color()</a>, it will be interpreted
           * as a grayscale value. Add a second value, and it will be used for alpha
           * transparency. When three values are specified, they are interpreted as
           * either RGB or HSB values. Adding a fourth value applies alpha
           * transparency.
           *
           * If a single string argument is provided, RGB, RGBA and Hex CSS color
           * strings and all named color strings are supported. In this case, an alpha
           * number value as a second argument is not supported, the RGBA form should be
           * used.
           *
           * @method color
           * @param  {Number} gray number specifying value between white and black.
           * @param  {Number} [alpha] alpha value relative to current color range
           *                                 (default is 0-255)
           * @return {p5.Color} resulting color
           *
           * @example
           * <div>
           * <code>
           * let c = color(255, 204, 0);
           * fill(c);
           * noStroke();
           * rect(30, 20, 55, 55);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * let c = color(255, 204, 0);
           * fill(c);
           * noStroke();
           * ellipse(25, 25, 80, 80); // Draw left circle
           * // Using only one value generates a grayscale value.
           * c = color(65);
           * fill(c);
           * ellipse(75, 75, 80, 80);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // You can use named SVG & CSS colors
           * let c = color('magenta');
           * fill(c);
           * noStroke();
           * rect(20, 20, 60, 60);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // Example of hex color codes
           * noStroke();
           * let c = color('#0f0');
           * fill(c);
           * rect(0, 10, 45, 80);
           * c = color('#00ff00');
           * fill(c);
           * rect(55, 10, 45, 80);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // RGB and RGBA color strings are also supported
           * // these all set to the same color (solid blue)
           * let c;
           * noStroke();
           * c = color('rgb(0,0,255)');
           * fill(c);
           * rect(10, 10, 35, 35); // Draw rectangle
           * c = color('rgb(0%, 0%, 100%)');
           * fill(c);
           * rect(55, 10, 35, 35); // Draw rectangle
           * c = color('rgba(0, 0, 255, 1)');
           * fill(c);
           * rect(10, 55, 35, 35); // Draw rectangle
           * c = color('rgba(0%, 0%, 100%, 1)');
           * fill(c);
           * rect(55, 55, 35, 35); // Draw rectangle
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // HSL color can also be specified by value
           * let c = color('hsl(160, 100%, 50%)');
           * noStroke();
           * fill(c);
           * rect(0, 10, 45, 80); // Draw rectangle
           * c = color('hsla(160, 100%, 50%, 0.5)');
           * fill(c);
           * rect(55, 10, 45, 80); // Draw rectangle
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // HSB color can also be specified
           * let c = color('hsb(160, 100%, 50%)');
           * noStroke();
           * fill(c);
           * rect(0, 10, 45, 80); // Draw rectangle
           * c = color('hsba(160, 100%, 50%, 0.5)');
           * fill(c);
           * rect(55, 10, 45, 80); // Draw rectangle
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * noStroke();
           * let c = color(50, 55, 100);
           * fill(c);
           * rect(0, 10, 45, 80); // Draw left rect
           * colorMode(HSB, 100);
           * c = color(50, 55, 100);
           * fill(c);
           * rect(55, 10, 45, 80);
           * </code>
           * </div>
           *
           * @alt
           * Yellow rect in middle right of canvas, with 55 pixel width and height.
           * Yellow ellipse in top left of canvas, black ellipse in bottom right,both 80x80.
           * Bright fuchsia rect in middle of canvas, 60 pixel width and height.
           * Two bright green rects on opposite sides of the canvas, both 45x80.
           * Four blue rects in each corner of the canvas, each are 35x35.
           * Bright sea green rect on left and darker rect on right of canvas, both 45x80.
           * Dark green rect on left and lighter green rect on right of canvas, both 45x80.
           * Dark blue rect on left and light teal rect on right of canvas, both 45x80.
           */

          /**
           * @method color
           * @param  {Number}        v1      red or hue value relative to
           *                                 the current color range
           * @param  {Number}        v2      green or saturation value
           *                                 relative to the current color range
           * @param  {Number}        v3      blue or brightness value
           *                                 relative to the current color range
           * @param  {Number}        [alpha]
           * @return {p5.Color}
           */

          /**
           * @method color
           * @param  {String}        value   a color string
           * @return {p5.Color}
           */

          /**
           * @method color
           * @param  {Number[]}      values  an array containing the red,green,blue &
           *                                 and alpha components of the color
           * @return {p5.Color}
           */

          /**
           * @method color
           * @param  {p5.Color}     color
           * @return {p5.Color}
           */ cov_1pyzfehw31.s[9]++;
          _main.default.prototype.color = function() {
            cov_1pyzfehw31.f[3]++;
            cov_1pyzfehw31.s[10]++;
            _main.default._validateParameters('color', arguments);
            cov_1pyzfehw31.s[11]++;
            if (arguments[0] instanceof _main.default.Color) {
              cov_1pyzfehw31.b[0][0]++;
              cov_1pyzfehw31.s[12]++;
              return arguments[0]; // Do nothing if argument is already a color object.
            } else {
              cov_1pyzfehw31.b[0][1]++;
            }

            var args = (cov_1pyzfehw31.s[13]++,
            arguments[0] instanceof Array
              ? (cov_1pyzfehw31.b[1][0]++, arguments[0])
              : (cov_1pyzfehw31.b[1][1]++, arguments));
            cov_1pyzfehw31.s[14]++;
            return new _main.default.Color(this, args);
          };

          /**
           * Extracts the green value from a color or pixel array.
           *
           * @method green
           * @param {p5.Color|Number[]|String} color <a href="#/p5.Color">p5.Color</a> object, color components,
           *                                         or CSS color
           * @return {Number} the green value
           * @example
           * <div>
           * <code>
           * let c = color(20, 75, 200); // Define color 'c'
           * fill(c); // Use color variable 'c' as fill color
           * rect(15, 20, 35, 60); // Draw left rectangle
           *
           * let greenValue = green(c); // Get green in 'c'
           * print(greenValue); // Print "75.0"
           * fill(0, greenValue, 0); // Use 'greenValue' in new fill
           * rect(50, 20, 35, 60); // Draw right rectangle
           * </code>
           * </div>
           *
           * @alt
           * blue rect on left and green on right, both with black outlines & 35x60.
           */ cov_1pyzfehw31.s[15]++;
          _main.default.prototype.green = function(c) {
            cov_1pyzfehw31.f[4]++;
            cov_1pyzfehw31.s[16]++;
            _main.default._validateParameters('green', arguments);
            cov_1pyzfehw31.s[17]++;
            return this.color(c)._getGreen();
          };

          /**
           * Extracts the hue value from a color or pixel array.
           *
           * Hue exists in both HSB and HSL. This function will return the
           * HSB-normalized hue when supplied with an HSB color object (or when supplied
           * with a pixel array while the color mode is HSB), but will default to the
           * HSL-normalized hue otherwise. (The values will only be different if the
           * maximum hue setting for each system is different.)
           *
           * @method hue
           * @param {p5.Color|Number[]|String} color <a href="#/p5.Color">p5.Color</a> object, color components,
           *                                         or CSS color
           * @return {Number} the hue
           * @example
           * <div>
           * <code>
           * noStroke();
           * colorMode(HSB, 255);
           * let c = color(0, 126, 255);
           * fill(c);
           * rect(15, 20, 35, 60);
           * let value = hue(c); // Sets 'value' to "0"
           * fill(value);
           * rect(50, 20, 35, 60);
           * </code>
           * </div>
           *
           * @alt
           * salmon pink rect on left and black on right, both 35x60.
           */ cov_1pyzfehw31.s[18]++;
          _main.default.prototype.hue = function(c) {
            cov_1pyzfehw31.f[5]++;
            cov_1pyzfehw31.s[19]++;
            _main.default._validateParameters('hue', arguments);
            cov_1pyzfehw31.s[20]++;
            return this.color(c)._getHue();
          };

          /**
           * Blends two colors to find a third color somewhere between them. The amt
           * parameter is the amount to interpolate between the two values where 0.0
           * is equal to the first color, 0.1 is very near the first color, 0.5 is halfway
           * in between, etc. An amount below 0 will be treated as 0. Likewise, amounts
           * above 1 will be capped at 1. This is different from the behavior of <a href="#/p5/lerp">lerp()</a>,
           * but necessary because otherwise numbers outside the range will produce
           * strange and unexpected colors.
           *
           * The way that colors are interpolated depends on the current color mode.
           *
           * @method lerpColor
           * @param  {p5.Color} c1  interpolate from this color
           * @param  {p5.Color} c2  interpolate to this color
           * @param  {Number}       amt number between 0 and 1
           * @return {p5.Color}     interpolated color
           *
           * @example
           * <div>
           * <code>
           * colorMode(RGB);
           * stroke(255);
           * background(51);
           * let from = color(218, 165, 32);
           * let to = color(72, 61, 139);
           * colorMode(RGB); // Try changing to HSB.
           * let interA = lerpColor(from, to, 0.33);
           * let interB = lerpColor(from, to, 0.66);
           * fill(from);
           * rect(10, 20, 20, 60);
           * fill(interA);
           * rect(30, 20, 20, 60);
           * fill(interB);
           * rect(50, 20, 20, 60);
           * fill(to);
           * rect(70, 20, 20, 60);
           * </code>
           * </div>
           *
           * @alt
           * 4 rects one tan, brown, brownish purple, purple, with white outlines & 20x60
           */ cov_1pyzfehw31.s[21]++;

          _main.default.prototype.lerpColor = function(c1, c2, amt) {
            cov_1pyzfehw31.f[6]++;
            cov_1pyzfehw31.s[22]++;
            _main.default._validateParameters('lerpColor', arguments);
            var mode = (cov_1pyzfehw31.s[23]++, this._colorMode);
            var maxes = (cov_1pyzfehw31.s[24]++, this._colorMaxes);
            var l0, l1, l2, l3;
            var fromArray, toArray;
            cov_1pyzfehw31.s[25]++;

            if (mode === constants.RGB) {
              cov_1pyzfehw31.b[2][0]++;
              cov_1pyzfehw31.s[26]++;
              fromArray = c1.levels.map(function(level) {
                cov_1pyzfehw31.f[7]++;
                cov_1pyzfehw31.s[27]++;
                return level / 255;
              });
              cov_1pyzfehw31.s[28]++;
              toArray = c2.levels.map(function(level) {
                cov_1pyzfehw31.f[8]++;
                cov_1pyzfehw31.s[29]++;
                return level / 255;
              });
            } else {
              cov_1pyzfehw31.b[2][1]++;
              cov_1pyzfehw31.s[30]++;
              if (mode === constants.HSB) {
                cov_1pyzfehw31.b[3][0]++;
                cov_1pyzfehw31.s[31]++;
                c1._getBrightness(); // Cache hsba so it definitely exists.
                cov_1pyzfehw31.s[32]++;
                c2._getBrightness();
                cov_1pyzfehw31.s[33]++;
                fromArray = c1.hsba;
                cov_1pyzfehw31.s[34]++;
                toArray = c2.hsba;
              } else {
                cov_1pyzfehw31.b[3][1]++;
                cov_1pyzfehw31.s[35]++;
                if (mode === constants.HSL) {
                  cov_1pyzfehw31.b[4][0]++;
                  cov_1pyzfehw31.s[36]++;
                  c1._getLightness(); // Cache hsla so it definitely exists.
                  cov_1pyzfehw31.s[37]++;
                  c2._getLightness();
                  cov_1pyzfehw31.s[38]++;
                  fromArray = c1.hsla;
                  cov_1pyzfehw31.s[39]++;
                  toArray = c2.hsla;
                } else {
                  cov_1pyzfehw31.b[4][1]++;
                  cov_1pyzfehw31.s[40]++;
                  throw new Error(''.concat(mode, 'cannot be used for interpolation.'));
                }
              }
            }

            // Prevent extrapolation.
            cov_1pyzfehw31.s[41]++;
            amt = Math.max(Math.min(amt, 1), 0);

            // Define lerp here itself if user isn't using math module.
            // Maintains the definition as found in math/calculation.js
            cov_1pyzfehw31.s[42]++;
            if (typeof this.lerp === 'undefined') {
              cov_1pyzfehw31.b[5][0]++;
              cov_1pyzfehw31.s[43]++;
              this.lerp = function(start, stop, amt) {
                cov_1pyzfehw31.f[9]++;
                cov_1pyzfehw31.s[44]++;
                return amt * (stop - start) + start;
              };
            } else {
              cov_1pyzfehw31.b[5][1]++;
            }

            // Perform interpolation.
            cov_1pyzfehw31.s[45]++;
            l0 = this.lerp(fromArray[0], toArray[0], amt);
            cov_1pyzfehw31.s[46]++;
            l1 = this.lerp(fromArray[1], toArray[1], amt);
            cov_1pyzfehw31.s[47]++;
            l2 = this.lerp(fromArray[2], toArray[2], amt);
            cov_1pyzfehw31.s[48]++;
            l3 = this.lerp(fromArray[3], toArray[3], amt);

            // Scale components.
            cov_1pyzfehw31.s[49]++;
            l0 *= maxes[mode][0];
            cov_1pyzfehw31.s[50]++;
            l1 *= maxes[mode][1];
            cov_1pyzfehw31.s[51]++;
            l2 *= maxes[mode][2];
            cov_1pyzfehw31.s[52]++;
            l3 *= maxes[mode][3];
            cov_1pyzfehw31.s[53]++;

            return this.color(l0, l1, l2, l3);
          };

          /**
           * Extracts the HSL lightness value from a color or pixel array.
           *
           * @method lightness
           * @param {p5.Color|Number[]|String} color <a href="#/p5.Color">p5.Color</a> object, color components,
           *                                         or CSS color
           * @return {Number} the lightness
           *
           * @example
           * <div>
           * <code>
           * noStroke();
           * colorMode(HSL);
           * let c = color(156, 100, 50, 1);
           * fill(c);
           * rect(15, 20, 35, 60);
           * let value = lightness(c); // Sets 'value' to 50
           * fill(value);
           * rect(50, 20, 35, 60);
           * </code>
           * </div>
           *
           * @alt
           * light pastel green rect on left and dark grey rect on right, both 35x60.
           */ cov_1pyzfehw31.s[54]++;
          _main.default.prototype.lightness = function(c) {
            cov_1pyzfehw31.f[10]++;
            cov_1pyzfehw31.s[55]++;
            _main.default._validateParameters('lightness', arguments);
            cov_1pyzfehw31.s[56]++;
            return this.color(c)._getLightness();
          };

          /**
           * Extracts the red value from a color or pixel array.
           *
           * @method red
           * @param {p5.Color|Number[]|String} color <a href="#/p5.Color">p5.Color</a> object, color components,
           *                                         or CSS color
           * @return {Number} the red value
           * @example
           * <div>
           * <code>
           * let c = color(255, 204, 0); // Define color 'c'
           * fill(c); // Use color variable 'c' as fill color
           * rect(15, 20, 35, 60); // Draw left rectangle
           *
           * let redValue = red(c); // Get red in 'c'
           * print(redValue); // Print "255.0"
           * fill(redValue, 0, 0); // Use 'redValue' in new fill
           * rect(50, 20, 35, 60); // Draw right rectangle
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * colorMode(RGB, 255); // Sets the range for red, green, and blue to 255
           * let c = color(127, 255, 0);
           * colorMode(RGB, 1); // Sets the range for red, green, and blue to 1
           * let myColor = red(c);
           * print(myColor); // 0.4980392156862745
           * </code>
           * </div>
           *
           * @alt
           * yellow rect on left and red rect on right, both with black outlines and 35x60.
           * grey canvas
           */ cov_1pyzfehw31.s[57]++;
          _main.default.prototype.red = function(c) {
            cov_1pyzfehw31.f[11]++;
            cov_1pyzfehw31.s[58]++;
            _main.default._validateParameters('red', arguments);
            cov_1pyzfehw31.s[59]++;
            return this.color(c)._getRed();
          };

          /**
           * Extracts the saturation value from a color or pixel array.
           *
           * Saturation is scaled differently in HSB and HSL. This function will return
           * the HSB saturation when supplied with an HSB color object (or when supplied
           * with a pixel array while the color mode is HSB), but will default to the
           * HSL saturation otherwise.
           *
           * @method saturation
           * @param {p5.Color|Number[]|String} color <a href="#/p5.Color">p5.Color</a> object, color components,
           *                                         or CSS color
           * @return {Number} the saturation value
           * @example
           * <div>
           * <code>
           * noStroke();
           * colorMode(HSB, 255);
           * let c = color(0, 126, 255);
           * fill(c);
           * rect(15, 20, 35, 60);
           * let value = saturation(c); // Sets 'value' to 126
           * fill(value);
           * rect(50, 20, 35, 60);
           * </code>
           * </div>
           *
           * @alt
           *deep pink rect on left and grey rect on right, both 35x60.
           */ cov_1pyzfehw31.s[60]++;
          _main.default.prototype.saturation = function(c) {
            cov_1pyzfehw31.f[12]++;
            cov_1pyzfehw31.s[61]++;
            _main.default._validateParameters('saturation', arguments);
            cov_1pyzfehw31.s[62]++;
            return this.color(c)._getSaturation();
          };
          var _default = _main.default;
          exports.default = _default;
        },
        {
          '../core/constants': 272,
          '../core/friendly_errors/fes_core': 275,
          '../core/friendly_errors/file_errors': 276,
          '../core/friendly_errors/validate_params': 278,
          '../core/main': 283,
          './p5.Color': 270,
          'core-js/modules/es.array.map': 177
        }
      ],
      270: [
        function(_dereq_, module, exports) {
          'use strict';
          function _typeof(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof = function _typeof(obj) {
                return typeof obj;
              };
            } else {
              _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof(obj);
          }
          var cov_2j9d41fbnl = (function() {
            var path = '/Users/outofambit/src/p5.js/src/color/p5.Color.js';
            var hash = '7f7052f2f6383df0bd7308ab2b9bb242b86b1831';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/color/p5.Color.js',
              statementMap: {
                '0': { start: { line: 31, column: 0 }, end: { line: 49, column: 2 } },
                '1': { start: { line: 33, column: 2 }, end: { line: 33, column: 63 } },
                '2': { start: { line: 36, column: 2 }, end: { line: 44, column: 3 } },
                '3': { start: { line: 41, column: 4 }, end: { line: 41, column: 61 } },
                '4': { start: { line: 43, column: 4 }, end: { line: 43, column: 58 } },
                '5': { start: { line: 47, column: 2 }, end: { line: 47, column: 26 } },
                '6': { start: { line: 48, column: 2 }, end: { line: 48, column: 14 } },
                '7': { start: { line: 89, column: 0 }, end: { line: 254, column: 2 } },
                '8': { start: { line: 90, column: 12 }, end: { line: 90, column: 23 } },
                '9': { start: { line: 91, column: 12 }, end: { line: 91, column: 23 } },
                '10': { start: { line: 92, column: 16 }, end: { line: 92, column: 20 } },
                '11': { start: { line: 94, column: 2 }, end: { line: 253, column: 3 } },
                '12': { start: { line: 96, column: 6 }, end: { line: 100, column: 8 } },
                '13': { start: { line: 103, column: 6 }, end: { line: 108, column: 8 } },
                '14': { start: { line: 111, column: 6 }, end: { line: 115, column: 8 } },
                '15': { start: { line: 118, column: 6 }, end: { line: 123, column: 8 } },
                '16': { start: { line: 126, column: 6 }, end: { line: 126, column: 62 } },
                '17': { start: { line: 129, column: 6 }, end: { line: 136, column: 8 } },
                '18': { start: { line: 139, column: 6 }, end: { line: 148, column: 8 } },
                '19': { start: { line: 152, column: 6 }, end: { line: 152, column: 76 } },
                '20': { start: { line: 152, column: 22 }, end: { line: 152, column: 76 } },
                '21': { start: { line: 153, column: 6 }, end: { line: 160, column: 8 } },
                '22': { start: { line: 164, column: 6 }, end: { line: 164, column: 76 } },
                '23': { start: { line: 164, column: 22 }, end: { line: 164, column: 76 } },
                '24': { start: { line: 165, column: 6 }, end: { line: 172, column: 8 } },
                '25': { start: { line: 176, column: 6 }, end: { line: 176, column: 76 } },
                '26': { start: { line: 176, column: 22 }, end: { line: 176, column: 76 } },
                '27': { start: { line: 177, column: 6 }, end: { line: 186, column: 8 } },
                '28': { start: { line: 190, column: 6 }, end: { line: 190, column: 76 } },
                '29': { start: { line: 190, column: 22 }, end: { line: 190, column: 76 } },
                '30': { start: { line: 191, column: 6 }, end: { line: 200, column: 8 } },
                '31': { start: { line: 203, column: 6 }, end: { line: 203, column: 76 } },
                '32': { start: { line: 203, column: 22 }, end: { line: 203, column: 76 } },
                '33': { start: { line: 204, column: 6 }, end: { line: 211, column: 8 } },
                '34': { start: { line: 214, column: 6 }, end: { line: 214, column: 76 } },
                '35': { start: { line: 214, column: 22 }, end: { line: 214, column: 76 } },
                '36': { start: { line: 215, column: 6 }, end: { line: 222, column: 8 } },
                '37': { start: { line: 225, column: 6 }, end: { line: 225, column: 76 } },
                '38': { start: { line: 225, column: 22 }, end: { line: 225, column: 76 } },
                '39': { start: { line: 226, column: 6 }, end: { line: 235, column: 8 } },
                '40': { start: { line: 238, column: 6 }, end: { line: 238, column: 76 } },
                '41': { start: { line: 238, column: 22 }, end: { line: 238, column: 76 } },
                '42': { start: { line: 239, column: 6 }, end: { line: 248, column: 8 } },
                '43': { start: { line: 252, column: 6 }, end: { line: 252, column: 73 } },
                '44': { start: { line: 280, column: 0 }, end: { line: 283, column: 2 } },
                '45': { start: { line: 281, column: 2 }, end: { line: 281, column: 58 } },
                '46': { start: { line: 282, column: 2 }, end: { line: 282, column: 26 } },
                '47': { start: { line: 304, column: 0 }, end: { line: 307, column: 2 } },
                '48': { start: { line: 305, column: 2 }, end: { line: 305, column: 60 } },
                '49': { start: { line: 306, column: 2 }, end: { line: 306, column: 26 } },
                '50': { start: { line: 328, column: 0 }, end: { line: 331, column: 2 } },
                '51': { start: { line: 329, column: 2 }, end: { line: 329, column: 59 } },
                '52': { start: { line: 330, column: 2 }, end: { line: 330, column: 26 } },
                '53': { start: { line: 355, column: 0 }, end: { line: 358, column: 2 } },
                '54': { start: { line: 356, column: 2 }, end: { line: 356, column: 56 } },
                '55': { start: { line: 357, column: 2 }, end: { line: 357, column: 26 } },
                '56': { start: { line: 361, column: 0 }, end: { line: 368, column: 2 } },
                '57': { start: { line: 362, column: 16 }, end: { line: 362, column: 27 } },
                '58': { start: { line: 364, column: 18 }, end: { line: 364, column: 55 } },
                '59': { start: { line: 365, column: 2 }, end: { line: 367, column: 3 } },
                '60': { start: { line: 365, column: 15 }, end: { line: 365, column: 31 } },
                '61': { start: { line: 366, column: 4 }, end: { line: 366, column: 43 } },
                '62': { start: { line: 370, column: 0 }, end: { line: 372, column: 2 } },
                '63': { start: { line: 371, column: 2 }, end: { line: 371, column: 51 } },
                '64': { start: { line: 376, column: 0 }, end: { line: 379, column: 2 } },
                '65': { start: { line: 377, column: 2 }, end: { line: 377, column: 23 } },
                '66': { start: { line: 378, column: 2 }, end: { line: 378, column: 25 } },
                '67': { start: { line: 381, column: 0 }, end: { line: 383, column: 2 } },
                '68': { start: { line: 382, column: 2 }, end: { line: 382, column: 19 } },
                '69': { start: { line: 385, column: 0 }, end: { line: 387, column: 2 } },
                '70': { start: { line: 386, column: 2 }, end: { line: 386, column: 20 } },
                '71': { start: { line: 389, column: 0 }, end: { line: 391, column: 2 } },
                '72': { start: { line: 390, column: 2 }, end: { line: 390, column: 55 } },
                '73': { start: { line: 393, column: 0 }, end: { line: 398, column: 2 } },
                '74': { start: { line: 394, column: 2 }, end: { line: 396, column: 3 } },
                '75': { start: { line: 395, column: 4 }, end: { line: 395, column: 58 } },
                '76': { start: { line: 397, column: 2 }, end: { line: 397, column: 53 } },
                '77': { start: { line: 400, column: 0 }, end: { line: 402, column: 2 } },
                '78': { start: { line: 401, column: 2 }, end: { line: 401, column: 55 } },
                '79': { start: { line: 410, column: 0 }, end: { line: 422, column: 2 } },
                '80': { start: { line: 411, column: 2 }, end: { line: 421, column: 3 } },
                '81': { start: { line: 412, column: 4 }, end: { line: 414, column: 5 } },
                '82': { start: { line: 413, column: 6 }, end: { line: 413, column: 60 } },
                '83': { start: { line: 415, column: 4 }, end: { line: 415, column: 55 } },
                '84': { start: { line: 417, column: 4 }, end: { line: 419, column: 5 } },
                '85': { start: { line: 418, column: 6 }, end: { line: 418, column: 60 } },
                '86': { start: { line: 420, column: 4 }, end: { line: 420, column: 55 } },
                '87': { start: { line: 424, column: 0 }, end: { line: 429, column: 2 } },
                '88': { start: { line: 425, column: 2 }, end: { line: 427, column: 3 } },
                '89': { start: { line: 426, column: 4 }, end: { line: 426, column: 58 } },
                '90': { start: { line: 428, column: 2 }, end: { line: 428, column: 53 } },
                '91': { start: { line: 431, column: 0 }, end: { line: 433, column: 2 } },
                '92': { start: { line: 432, column: 2 }, end: { line: 432, column: 55 } },
                '93': { start: { line: 440, column: 0 }, end: { line: 452, column: 2 } },
                '94': { start: { line: 441, column: 2 }, end: { line: 451, column: 3 } },
                '95': { start: { line: 442, column: 4 }, end: { line: 444, column: 5 } },
                '96': { start: { line: 443, column: 6 }, end: { line: 443, column: 60 } },
                '97': { start: { line: 445, column: 4 }, end: { line: 445, column: 55 } },
                '98': { start: { line: 447, column: 4 }, end: { line: 449, column: 5 } },
                '99': { start: { line: 448, column: 6 }, end: { line: 448, column: 60 } },
                '100': { start: { line: 450, column: 4 }, end: { line: 450, column: 55 } },
                '101': { start: { line: 457, column: 20 }, end: { line: 606, column: 1 } },
                '102': { start: { line: 616, column: 19 }, end: { line: 616, column: 24 } },
                '103': { start: { line: 617, column: 16 }, end: { line: 617, column: 27 } },
                '104': { start: { line: 618, column: 16 }, end: { line: 618, column: 47 } },
                '105': { start: { line: 619, column: 16 }, end: { line: 619, column: 48 } },
                '106': { start: { line: 624, column: 22 }, end: { line: 756, column: 1 } },
                '107': { start: { line: 786, column: 0 }, end: { line: 992, column: 2 } },
                '108': { start: { line: 787, column: 18 }, end: { line: 787, column: 34 } },
                '109': { start: { line: 788, column: 15 }, end: { line: 788, column: 24 } },
                '110': { start: { line: 789, column: 16 }, end: { line: 789, column: 32 } },
                '111': { start: { line: 790, column: 16 }, end: { line: 790, column: 18 } },
                '112': { start: { line: 793, column: 2 }, end: { line: 989, column: 3 } },
                '113': { start: { line: 796, column: 4 }, end: { line: 796, column: 30 } },
                '114': { start: { line: 797, column: 4 }, end: { line: 797, column: 30 } },
                '115': { start: { line: 798, column: 4 }, end: { line: 798, column: 30 } },
                '116': { start: { line: 801, column: 4 }, end: { line: 805, column: 5 } },
                '117': { start: { line: 802, column: 6 }, end: { line: 802, column: 32 } },
                '118': { start: { line: 804, column: 6 }, end: { line: 804, column: 21 } },
                '119': { start: { line: 809, column: 4 }, end: { line: 816, column: 5 } },
                '120': { start: { line: 810, column: 21 }, end: { line: 810, column: 31 } },
                '121': { start: { line: 811, column: 6 }, end: { line: 815, column: 7 } },
                '122': { start: { line: 812, column: 8 }, end: { line: 812, column: 23 } },
                '123': { start: { line: 813, column: 13 }, end: { line: 815, column: 7 } },
                '124': { start: { line: 814, column: 8 }, end: { line: 814, column: 23 } },
                '125': { start: { line: 819, column: 4 }, end: { line: 825, column: 5 } },
                '126': { start: { line: 820, column: 6 }, end: { line: 820, column: 51 } },
                '127': { start: { line: 821, column: 11 }, end: { line: 825, column: 5 } },
                '128': { start: { line: 822, column: 6 }, end: { line: 822, column: 51 } },
                '129': { start: { line: 824, column: 6 }, end: { line: 824, column: 21 } },
                '130': { start: { line: 826, column: 9 }, end: { line: 989, column: 3 } },
                '131': { start: { line: 827, column: 16 }, end: { line: 827, column: 38 } },
                '132': { start: { line: 830, column: 4 }, end: { line: 832, column: 5 } },
                '133': { start: { line: 831, column: 6 }, end: { line: 831, column: 64 } },
                '134': { start: { line: 835, column: 4 }, end: { line: 897, column: 5 } },
                '135': { start: { line: 837, column: 6 }, end: { line: 839, column: 57 } },
                '136': { start: { line: 839, column: 22 }, end: { line: 839, column: 55 } },
                '137': { start: { line: 840, column: 6 }, end: { line: 840, column: 21 } },
                '138': { start: { line: 841, column: 6 }, end: { line: 841, column: 21 } },
                '139': { start: { line: 842, column: 11 }, end: { line: 897, column: 5 } },
                '140': { start: { line: 844, column: 6 }, end: { line: 846, column: 49 } },
                '141': { start: { line: 846, column: 22 }, end: { line: 846, column: 47 } },
                '142': { start: { line: 847, column: 6 }, end: { line: 847, column: 21 } },
                '143': { start: { line: 848, column: 6 }, end: { line: 848, column: 21 } },
                '144': { start: { line: 849, column: 11 }, end: { line: 897, column: 5 } },
                '145': { start: { line: 851, column: 6 }, end: { line: 853, column: 57 } },
                '146': { start: { line: 853, column: 22 }, end: { line: 853, column: 55 } },
                '147': { start: { line: 854, column: 6 }, end: { line: 854, column: 21 } },
                '148': { start: { line: 855, column: 11 }, end: { line: 897, column: 5 } },
                '149': { start: { line: 857, column: 6 }, end: { line: 859, column: 49 } },
                '150': { start: { line: 859, column: 22 }, end: { line: 859, column: 47 } },
                '151': { start: { line: 860, column: 6 }, end: { line: 860, column: 21 } },
                '152': { start: { line: 861, column: 11 }, end: { line: 897, column: 5 } },
                '153': { start: { line: 863, column: 6 }, end: { line: 865, column: 35 } },
                '154': { start: { line: 865, column: 22 }, end: { line: 865, column: 33 } },
                '155': { start: { line: 866, column: 6 }, end: { line: 866, column: 21 } },
                '156': { start: { line: 867, column: 6 }, end: { line: 867, column: 21 } },
                '157': { start: { line: 868, column: 11 }, end: { line: 897, column: 5 } },
                '158': { start: { line: 870, column: 6 }, end: { line: 872, column: 47 } },
                '159': { start: { line: 872, column: 22 }, end: { line: 872, column: 45 } },
                '160': { start: { line: 873, column: 6 }, end: { line: 873, column: 21 } },
                '161': { start: { line: 874, column: 6 }, end: { line: 874, column: 21 } },
                '162': { start: { line: 875, column: 11 }, end: { line: 897, column: 5 } },
                '163': { start: { line: 877, column: 6 }, end: { line: 884, column: 11 } },
                '164': { start: { line: 880, column: 10 }, end: { line: 882, column: 11 } },
                '165': { start: { line: 881, column: 12 }, end: { line: 881, column: 37 } },
                '166': { start: { line: 883, column: 10 }, end: { line: 883, column: 29 } },
                '167': { start: { line: 885, column: 6 }, end: { line: 885, column: 21 } },
                '168': { start: { line: 886, column: 11 }, end: { line: 897, column: 5 } },
                '169': { start: { line: 888, column: 6 }, end: { line: 895, column: 11 } },
                '170': { start: { line: 891, column: 10 }, end: { line: 893, column: 11 } },
                '171': { start: { line: 892, column: 12 }, end: { line: 892, column: 37 } },
                '172': { start: { line: 894, column: 10 }, end: { line: 894, column: 41 } },
                '173': { start: { line: 896, column: 6 }, end: { line: 896, column: 21 } },
                '174': { start: { line: 900, column: 4 }, end: { line: 923, column: 5 } },
                '175': { start: { line: 902, column: 6 }, end: { line: 909, column: 11 } },
                '176': { start: { line: 905, column: 10 }, end: { line: 907, column: 11 } },
                '177': { start: { line: 906, column: 12 }, end: { line: 906, column: 45 } },
                '178': { start: { line: 908, column: 10 }, end: { line: 908, column: 43 } },
                '179': { start: { line: 910, column: 6 }, end: { line: 910, column: 21 } },
                '180': { start: { line: 911, column: 11 }, end: { line: 923, column: 5 } },
                '181': { start: { line: 913, column: 6 }, end: { line: 922, column: 11 } },
                '182': { start: { line: 916, column: 10 }, end: { line: 920, column: 11 } },
                '183': { start: { line: 917, column: 12 }, end: { line: 917, column: 45 } },
                '184': { start: { line: 918, column: 17 }, end: { line: 920, column: 11 } },
                '185': { start: { line: 919, column: 12 }, end: { line: 919, column: 37 } },
                '186': { start: { line: 921, column: 10 }, end: { line: 921, column: 43 } },
                '187': { start: { line: 924, column: 4 }, end: { line: 924, column: 68 } },
                '188': { start: { line: 924, column: 35 }, end: { line: 924, column: 66 } },
                '189': { start: { line: 925, column: 4 }, end: { line: 927, column: 5 } },
                '190': { start: { line: 926, column: 6 }, end: { line: 926, column: 51 } },
                '191': { start: { line: 930, column: 4 }, end: { line: 953, column: 5 } },
                '192': { start: { line: 932, column: 6 }, end: { line: 939, column: 11 } },
                '193': { start: { line: 935, column: 10 }, end: { line: 937, column: 11 } },
                '194': { start: { line: 936, column: 12 }, end: { line: 936, column: 45 } },
                '195': { start: { line: 938, column: 10 }, end: { line: 938, column: 43 } },
                '196': { start: { line: 940, column: 6 }, end: { line: 940, column: 21 } },
                '197': { start: { line: 941, column: 11 }, end: { line: 953, column: 5 } },
                '198': { start: { line: 943, column: 6 }, end: { line: 952, column: 11 } },
                '199': { start: { line: 946, column: 10 }, end: { line: 950, column: 11 } },
                '200': { start: { line: 947, column: 12 }, end: { line: 947, column: 45 } },
                '201': { start: { line: 948, column: 17 }, end: { line: 950, column: 11 } },
                '202': { start: { line: 949, column: 12 }, end: { line: 949, column: 37 } },
                '203': { start: { line: 951, column: 10 }, end: { line: 951, column: 43 } },
                '204': { start: { line: 955, column: 4 }, end: { line: 962, column: 5 } },
                '205': { start: { line: 957, column: 6 }, end: { line: 959, column: 7 } },
                '206': { start: { line: 958, column: 8 }, end: { line: 958, column: 58 } },
                '207': { start: { line: 961, column: 6 }, end: { line: 961, column: 51 } },
                '208': { start: { line: 965, column: 4 }, end: { line: 965, column: 27 } },
                '209': { start: { line: 966, column: 9 }, end: { line: 989, column: 3 } },
                '210': { start: { line: 974, column: 4 }, end: { line: 974, column: 30 } },
                '211': { start: { line: 975, column: 4 }, end: { line: 975, column: 30 } },
                '212': { start: { line: 976, column: 4 }, end: { line: 976, column: 30 } },
                '213': { start: { line: 979, column: 4 }, end: { line: 983, column: 5 } },
                '214': { start: { line: 980, column: 6 }, end: { line: 980, column: 32 } },
                '215': { start: { line: 982, column: 6 }, end: { line: 982, column: 21 } },
                '216': { start: { line: 986, column: 4 }, end: { line: 986, column: 68 } },
                '217': { start: { line: 986, column: 35 }, end: { line: 986, column: 66 } },
                '218': { start: { line: 988, column: 4 }, end: { line: 988, column: 72 } },
                '219': { start: { line: 991, column: 2 }, end: { line: 991, column: 17 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 31, column: 11 }, end: { line: 31, column: 12 } },
                  loc: { start: { line: 31, column: 33 }, end: { line: 49, column: 1 } },
                  line: 31
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 89, column: 30 }, end: { line: 89, column: 31 } },
                  loc: { start: { line: 89, column: 47 }, end: { line: 254, column: 1 } },
                  line: 89
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 280, column: 28 },
                    end: { line: 280, column: 29 }
                  },
                  loc: { start: { line: 280, column: 46 }, end: { line: 283, column: 1 } },
                  line: 280
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 304, column: 30 },
                    end: { line: 304, column: 31 }
                  },
                  loc: { start: { line: 304, column: 50 }, end: { line: 307, column: 1 } },
                  line: 304
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 328, column: 29 },
                    end: { line: 328, column: 30 }
                  },
                  loc: { start: { line: 328, column: 48 }, end: { line: 331, column: 1 } },
                  line: 328
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 355, column: 30 },
                    end: { line: 355, column: 31 }
                  },
                  loc: { start: { line: 355, column: 50 }, end: { line: 358, column: 1 } },
                  line: 355
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 361, column: 38 },
                    end: { line: 361, column: 39 }
                  },
                  loc: { start: { line: 361, column: 49 }, end: { line: 368, column: 1 } },
                  line: 361
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 370, column: 31 },
                    end: { line: 370, column: 32 }
                  },
                  loc: { start: { line: 370, column: 42 }, end: { line: 372, column: 1 } },
                  line: 370
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 376, column: 40 },
                    end: { line: 376, column: 41 }
                  },
                  loc: { start: { line: 376, column: 70 }, end: { line: 379, column: 1 } },
                  line: 376
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 381, column: 30 },
                    end: { line: 381, column: 31 }
                  },
                  loc: { start: { line: 381, column: 41 }, end: { line: 383, column: 1 } },
                  line: 381
                },
                '10': {
                  name: '(anonymous_10)',
                  decl: {
                    start: { line: 385, column: 31 },
                    end: { line: 385, column: 32 }
                  },
                  loc: { start: { line: 385, column: 42 }, end: { line: 387, column: 1 } },
                  line: 385
                },
                '11': {
                  name: '(anonymous_11)',
                  decl: {
                    start: { line: 389, column: 30 },
                    end: { line: 389, column: 31 }
                  },
                  loc: { start: { line: 389, column: 41 }, end: { line: 391, column: 1 } },
                  line: 389
                },
                '12': {
                  name: '(anonymous_12)',
                  decl: {
                    start: { line: 393, column: 36 },
                    end: { line: 393, column: 37 }
                  },
                  loc: { start: { line: 393, column: 47 }, end: { line: 398, column: 1 } },
                  line: 393
                },
                '13': {
                  name: '(anonymous_13)',
                  decl: {
                    start: { line: 400, column: 31 },
                    end: { line: 400, column: 32 }
                  },
                  loc: { start: { line: 400, column: 42 }, end: { line: 402, column: 1 } },
                  line: 400
                },
                '14': {
                  name: '(anonymous_14)',
                  decl: {
                    start: { line: 410, column: 29 },
                    end: { line: 410, column: 30 }
                  },
                  loc: { start: { line: 410, column: 40 }, end: { line: 422, column: 1 } },
                  line: 410
                },
                '15': {
                  name: '(anonymous_15)',
                  decl: {
                    start: { line: 424, column: 35 },
                    end: { line: 424, column: 36 }
                  },
                  loc: { start: { line: 424, column: 46 }, end: { line: 429, column: 1 } },
                  line: 424
                },
                '16': {
                  name: '(anonymous_16)',
                  decl: {
                    start: { line: 431, column: 29 },
                    end: { line: 431, column: 30 }
                  },
                  loc: { start: { line: 431, column: 40 }, end: { line: 433, column: 1 } },
                  line: 431
                },
                '17': {
                  name: '(anonymous_17)',
                  decl: {
                    start: { line: 440, column: 36 },
                    end: { line: 440, column: 37 }
                  },
                  loc: { start: { line: 440, column: 47 }, end: { line: 452, column: 1 } },
                  line: 440
                },
                '18': {
                  name: '(anonymous_18)',
                  decl: {
                    start: { line: 786, column: 24 },
                    end: { line: 786, column: 25 }
                  },
                  loc: { start: { line: 786, column: 45 }, end: { line: 992, column: 1 } },
                  line: 786
                },
                '19': {
                  name: '(anonymous_19)',
                  decl: {
                    start: { line: 839, column: 13 },
                    end: { line: 839, column: 14 }
                  },
                  loc: { start: { line: 839, column: 22 }, end: { line: 839, column: 55 } },
                  line: 839
                },
                '20': {
                  name: '(anonymous_20)',
                  decl: {
                    start: { line: 846, column: 13 },
                    end: { line: 846, column: 14 }
                  },
                  loc: { start: { line: 846, column: 22 }, end: { line: 846, column: 47 } },
                  line: 846
                },
                '21': {
                  name: '(anonymous_21)',
                  decl: {
                    start: { line: 853, column: 13 },
                    end: { line: 853, column: 14 }
                  },
                  loc: { start: { line: 853, column: 22 }, end: { line: 853, column: 55 } },
                  line: 853
                },
                '22': {
                  name: '(anonymous_22)',
                  decl: {
                    start: { line: 859, column: 13 },
                    end: { line: 859, column: 14 }
                  },
                  loc: { start: { line: 859, column: 22 }, end: { line: 859, column: 47 } },
                  line: 859
                },
                '23': {
                  name: '(anonymous_23)',
                  decl: {
                    start: { line: 865, column: 13 },
                    end: { line: 865, column: 14 }
                  },
                  loc: { start: { line: 865, column: 22 }, end: { line: 865, column: 33 } },
                  line: 865
                },
                '24': {
                  name: '(anonymous_24)',
                  decl: {
                    start: { line: 872, column: 13 },
                    end: { line: 872, column: 14 }
                  },
                  loc: { start: { line: 872, column: 22 }, end: { line: 872, column: 45 } },
                  line: 872
                },
                '25': {
                  name: '(anonymous_25)',
                  decl: {
                    start: { line: 879, column: 13 },
                    end: { line: 879, column: 14 }
                  },
                  loc: { start: { line: 879, column: 29 }, end: { line: 884, column: 9 } },
                  line: 879
                },
                '26': {
                  name: '(anonymous_26)',
                  decl: {
                    start: { line: 890, column: 13 },
                    end: { line: 890, column: 14 }
                  },
                  loc: { start: { line: 890, column: 29 }, end: { line: 895, column: 9 } },
                  line: 890
                },
                '27': {
                  name: '(anonymous_27)',
                  decl: {
                    start: { line: 904, column: 13 },
                    end: { line: 904, column: 14 }
                  },
                  loc: { start: { line: 904, column: 29 }, end: { line: 909, column: 9 } },
                  line: 904
                },
                '28': {
                  name: '(anonymous_28)',
                  decl: {
                    start: { line: 915, column: 13 },
                    end: { line: 915, column: 14 }
                  },
                  loc: { start: { line: 915, column: 29 }, end: { line: 922, column: 9 } },
                  line: 915
                },
                '29': {
                  name: '(anonymous_29)',
                  decl: {
                    start: { line: 924, column: 26 },
                    end: { line: 924, column: 27 }
                  },
                  loc: { start: { line: 924, column: 35 }, end: { line: 924, column: 66 } },
                  line: 924
                },
                '30': {
                  name: '(anonymous_30)',
                  decl: {
                    start: { line: 934, column: 13 },
                    end: { line: 934, column: 14 }
                  },
                  loc: { start: { line: 934, column: 29 }, end: { line: 939, column: 9 } },
                  line: 934
                },
                '31': {
                  name: '(anonymous_31)',
                  decl: {
                    start: { line: 945, column: 13 },
                    end: { line: 945, column: 14 }
                  },
                  loc: { start: { line: 945, column: 29 }, end: { line: 952, column: 9 } },
                  line: 945
                },
                '32': {
                  name: '(anonymous_32)',
                  decl: {
                    start: { line: 986, column: 26 },
                    end: { line: 986, column: 27 }
                  },
                  loc: { start: { line: 986, column: 35 }, end: { line: 986, column: 66 } },
                  line: 986
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 36, column: 2 }, end: { line: 44, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 36, column: 2 }, end: { line: 44, column: 3 } },
                    { start: { line: 36, column: 2 }, end: { line: 44, column: 3 } }
                  ],
                  line: 36
                },
                '1': {
                  loc: { start: { line: 37, column: 4 }, end: { line: 39, column: 31 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 37, column: 4 }, end: { line: 37, column: 31 } },
                    { start: { line: 38, column: 4 }, end: { line: 38, column: 31 } },
                    { start: { line: 39, column: 4 }, end: { line: 39, column: 31 } }
                  ],
                  line: 37
                },
                '2': {
                  loc: { start: { line: 94, column: 2 }, end: { line: 253, column: 3 } },
                  type: 'switch',
                  locations: [
                    { start: { line: 95, column: 4 }, end: { line: 100, column: 8 } },
                    { start: { line: 102, column: 4 }, end: { line: 108, column: 8 } },
                    { start: { line: 110, column: 4 }, end: { line: 115, column: 8 } },
                    { start: { line: 117, column: 4 }, end: { line: 123, column: 8 } },
                    { start: { line: 125, column: 4 }, end: { line: 126, column: 62 } },
                    { start: { line: 128, column: 4 }, end: { line: 136, column: 8 } },
                    { start: { line: 138, column: 4 }, end: { line: 148, column: 8 } },
                    { start: { line: 150, column: 4 }, end: { line: 150, column: 15 } },
                    { start: { line: 151, column: 4 }, end: { line: 160, column: 8 } },
                    { start: { line: 162, column: 4 }, end: { line: 162, column: 16 } },
                    { start: { line: 163, column: 4 }, end: { line: 172, column: 8 } },
                    { start: { line: 174, column: 4 }, end: { line: 174, column: 16 } },
                    { start: { line: 175, column: 4 }, end: { line: 186, column: 8 } },
                    { start: { line: 188, column: 4 }, end: { line: 188, column: 17 } },
                    { start: { line: 189, column: 4 }, end: { line: 200, column: 8 } },
                    { start: { line: 202, column: 4 }, end: { line: 211, column: 8 } },
                    { start: { line: 213, column: 4 }, end: { line: 222, column: 8 } },
                    { start: { line: 224, column: 4 }, end: { line: 235, column: 8 } },
                    { start: { line: 237, column: 4 }, end: { line: 248, column: 8 } },
                    { start: { line: 250, column: 4 }, end: { line: 250, column: 16 } },
                    { start: { line: 251, column: 4 }, end: { line: 252, column: 73 } }
                  ],
                  line: 94
                },
                '3': {
                  loc: { start: { line: 97, column: 8 }, end: { line: 97, column: 69 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 97, column: 20 }, end: { line: 97, column: 49 } },
                    { start: { line: 97, column: 52 }, end: { line: 97, column: 69 } }
                  ],
                  line: 97
                },
                '4': {
                  loc: { start: { line: 98, column: 8 }, end: { line: 98, column: 69 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 98, column: 20 }, end: { line: 98, column: 49 } },
                    { start: { line: 98, column: 52 }, end: { line: 98, column: 69 } }
                  ],
                  line: 98
                },
                '5': {
                  loc: { start: { line: 99, column: 8 }, end: { line: 99, column: 69 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 99, column: 20 }, end: { line: 99, column: 49 } },
                    { start: { line: 99, column: 52 }, end: { line: 99, column: 69 } }
                  ],
                  line: 99
                },
                '6': {
                  loc: { start: { line: 104, column: 8 }, end: { line: 104, column: 69 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 104, column: 20 }, end: { line: 104, column: 49 } },
                    { start: { line: 104, column: 52 }, end: { line: 104, column: 69 } }
                  ],
                  line: 104
                },
                '7': {
                  loc: { start: { line: 105, column: 8 }, end: { line: 105, column: 69 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 105, column: 20 }, end: { line: 105, column: 49 } },
                    { start: { line: 105, column: 52 }, end: { line: 105, column: 69 } }
                  ],
                  line: 105
                },
                '8': {
                  loc: { start: { line: 106, column: 8 }, end: { line: 106, column: 69 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 106, column: 20 }, end: { line: 106, column: 49 } },
                    { start: { line: 106, column: 52 }, end: { line: 106, column: 69 } }
                  ],
                  line: 106
                },
                '9': {
                  loc: { start: { line: 107, column: 8 }, end: { line: 107, column: 69 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 107, column: 20 }, end: { line: 107, column: 49 } },
                    { start: { line: 107, column: 52 }, end: { line: 107, column: 69 } }
                  ],
                  line: 107
                },
                '10': {
                  loc: { start: { line: 152, column: 6 }, end: { line: 152, column: 76 } },
                  type: 'if',
                  locations: [
                    { start: { line: 152, column: 6 }, end: { line: 152, column: 76 } },
                    { start: { line: 152, column: 6 }, end: { line: 152, column: 76 } }
                  ],
                  line: 152
                },
                '11': {
                  loc: { start: { line: 164, column: 6 }, end: { line: 164, column: 76 } },
                  type: 'if',
                  locations: [
                    { start: { line: 164, column: 6 }, end: { line: 164, column: 76 } },
                    { start: { line: 164, column: 6 }, end: { line: 164, column: 76 } }
                  ],
                  line: 164
                },
                '12': {
                  loc: { start: { line: 176, column: 6 }, end: { line: 176, column: 76 } },
                  type: 'if',
                  locations: [
                    { start: { line: 176, column: 6 }, end: { line: 176, column: 76 } },
                    { start: { line: 176, column: 6 }, end: { line: 176, column: 76 } }
                  ],
                  line: 176
                },
                '13': {
                  loc: { start: { line: 190, column: 6 }, end: { line: 190, column: 76 } },
                  type: 'if',
                  locations: [
                    { start: { line: 190, column: 6 }, end: { line: 190, column: 76 } },
                    { start: { line: 190, column: 6 }, end: { line: 190, column: 76 } }
                  ],
                  line: 190
                },
                '14': {
                  loc: { start: { line: 203, column: 6 }, end: { line: 203, column: 76 } },
                  type: 'if',
                  locations: [
                    { start: { line: 203, column: 6 }, end: { line: 203, column: 76 } },
                    { start: { line: 203, column: 6 }, end: { line: 203, column: 76 } }
                  ],
                  line: 203
                },
                '15': {
                  loc: { start: { line: 214, column: 6 }, end: { line: 214, column: 76 } },
                  type: 'if',
                  locations: [
                    { start: { line: 214, column: 6 }, end: { line: 214, column: 76 } },
                    { start: { line: 214, column: 6 }, end: { line: 214, column: 76 } }
                  ],
                  line: 214
                },
                '16': {
                  loc: { start: { line: 225, column: 6 }, end: { line: 225, column: 76 } },
                  type: 'if',
                  locations: [
                    { start: { line: 225, column: 6 }, end: { line: 225, column: 76 } },
                    { start: { line: 225, column: 6 }, end: { line: 225, column: 76 } }
                  ],
                  line: 225
                },
                '17': {
                  loc: { start: { line: 238, column: 6 }, end: { line: 238, column: 76 } },
                  type: 'if',
                  locations: [
                    { start: { line: 238, column: 6 }, end: { line: 238, column: 76 } },
                    { start: { line: 238, column: 6 }, end: { line: 238, column: 76 } }
                  ],
                  line: 238
                },
                '18': {
                  loc: { start: { line: 394, column: 2 }, end: { line: 396, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 394, column: 2 }, end: { line: 396, column: 3 } },
                    { start: { line: 394, column: 2 }, end: { line: 396, column: 3 } }
                  ],
                  line: 394
                },
                '19': {
                  loc: { start: { line: 411, column: 2 }, end: { line: 421, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 411, column: 2 }, end: { line: 421, column: 3 } },
                    { start: { line: 411, column: 2 }, end: { line: 421, column: 3 } }
                  ],
                  line: 411
                },
                '20': {
                  loc: { start: { line: 412, column: 4 }, end: { line: 414, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 412, column: 4 }, end: { line: 414, column: 5 } },
                    { start: { line: 412, column: 4 }, end: { line: 414, column: 5 } }
                  ],
                  line: 412
                },
                '21': {
                  loc: { start: { line: 417, column: 4 }, end: { line: 419, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 417, column: 4 }, end: { line: 419, column: 5 } },
                    { start: { line: 417, column: 4 }, end: { line: 419, column: 5 } }
                  ],
                  line: 417
                },
                '22': {
                  loc: { start: { line: 425, column: 2 }, end: { line: 427, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 425, column: 2 }, end: { line: 427, column: 3 } },
                    { start: { line: 425, column: 2 }, end: { line: 427, column: 3 } }
                  ],
                  line: 425
                },
                '23': {
                  loc: { start: { line: 441, column: 2 }, end: { line: 451, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 441, column: 2 }, end: { line: 451, column: 3 } },
                    { start: { line: 441, column: 2 }, end: { line: 451, column: 3 } }
                  ],
                  line: 441
                },
                '24': {
                  loc: { start: { line: 442, column: 4 }, end: { line: 444, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 442, column: 4 }, end: { line: 444, column: 5 } },
                    { start: { line: 442, column: 4 }, end: { line: 444, column: 5 } }
                  ],
                  line: 442
                },
                '25': {
                  loc: { start: { line: 447, column: 4 }, end: { line: 449, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 447, column: 4 }, end: { line: 449, column: 5 } },
                    { start: { line: 447, column: 4 }, end: { line: 449, column: 5 } }
                  ],
                  line: 447
                },
                '26': {
                  loc: { start: { line: 793, column: 2 }, end: { line: 989, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 793, column: 2 }, end: { line: 989, column: 3 } },
                    { start: { line: 793, column: 2 }, end: { line: 989, column: 3 } }
                  ],
                  line: 793
                },
                '27': {
                  loc: { start: { line: 801, column: 4 }, end: { line: 805, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 801, column: 4 }, end: { line: 805, column: 5 } },
                    { start: { line: 801, column: 4 }, end: { line: 805, column: 5 } }
                  ],
                  line: 801
                },
                '28': {
                  loc: { start: { line: 811, column: 6 }, end: { line: 815, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 811, column: 6 }, end: { line: 815, column: 7 } },
                    { start: { line: 811, column: 6 }, end: { line: 815, column: 7 } }
                  ],
                  line: 811
                },
                '29': {
                  loc: { start: { line: 813, column: 13 }, end: { line: 815, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 813, column: 13 }, end: { line: 815, column: 7 } },
                    { start: { line: 813, column: 13 }, end: { line: 815, column: 7 } }
                  ],
                  line: 813
                },
                '30': {
                  loc: { start: { line: 819, column: 4 }, end: { line: 825, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 819, column: 4 }, end: { line: 825, column: 5 } },
                    { start: { line: 819, column: 4 }, end: { line: 825, column: 5 } }
                  ],
                  line: 819
                },
                '31': {
                  loc: { start: { line: 821, column: 11 }, end: { line: 825, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 821, column: 11 }, end: { line: 825, column: 5 } },
                    { start: { line: 821, column: 11 }, end: { line: 825, column: 5 } }
                  ],
                  line: 821
                },
                '32': {
                  loc: { start: { line: 826, column: 9 }, end: { line: 989, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 826, column: 9 }, end: { line: 989, column: 3 } },
                    { start: { line: 826, column: 9 }, end: { line: 989, column: 3 } }
                  ],
                  line: 826
                },
                '33': {
                  loc: { start: { line: 826, column: 13 }, end: { line: 826, column: 51 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 826, column: 13 }, end: { line: 826, column: 26 } },
                    { start: { line: 826, column: 30 }, end: { line: 826, column: 51 } }
                  ],
                  line: 826
                },
                '34': {
                  loc: { start: { line: 830, column: 4 }, end: { line: 832, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 830, column: 4 }, end: { line: 832, column: 5 } },
                    { start: { line: 830, column: 4 }, end: { line: 832, column: 5 } }
                  ],
                  line: 830
                },
                '35': {
                  loc: { start: { line: 835, column: 4 }, end: { line: 897, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 835, column: 4 }, end: { line: 897, column: 5 } },
                    { start: { line: 835, column: 4 }, end: { line: 897, column: 5 } }
                  ],
                  line: 835
                },
                '36': {
                  loc: { start: { line: 842, column: 11 }, end: { line: 897, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 842, column: 11 }, end: { line: 897, column: 5 } },
                    { start: { line: 842, column: 11 }, end: { line: 897, column: 5 } }
                  ],
                  line: 842
                },
                '37': {
                  loc: { start: { line: 849, column: 11 }, end: { line: 897, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 849, column: 11 }, end: { line: 897, column: 5 } },
                    { start: { line: 849, column: 11 }, end: { line: 897, column: 5 } }
                  ],
                  line: 849
                },
                '38': {
                  loc: { start: { line: 855, column: 11 }, end: { line: 897, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 855, column: 11 }, end: { line: 897, column: 5 } },
                    { start: { line: 855, column: 11 }, end: { line: 897, column: 5 } }
                  ],
                  line: 855
                },
                '39': {
                  loc: { start: { line: 861, column: 11 }, end: { line: 897, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 861, column: 11 }, end: { line: 897, column: 5 } },
                    { start: { line: 861, column: 11 }, end: { line: 897, column: 5 } }
                  ],
                  line: 861
                },
                '40': {
                  loc: { start: { line: 868, column: 11 }, end: { line: 897, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 868, column: 11 }, end: { line: 897, column: 5 } },
                    { start: { line: 868, column: 11 }, end: { line: 897, column: 5 } }
                  ],
                  line: 868
                },
                '41': {
                  loc: { start: { line: 875, column: 11 }, end: { line: 897, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 875, column: 11 }, end: { line: 897, column: 5 } },
                    { start: { line: 875, column: 11 }, end: { line: 897, column: 5 } }
                  ],
                  line: 875
                },
                '42': {
                  loc: { start: { line: 880, column: 10 }, end: { line: 882, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 880, column: 10 }, end: { line: 882, column: 11 } },
                    { start: { line: 880, column: 10 }, end: { line: 882, column: 11 } }
                  ],
                  line: 880
                },
                '43': {
                  loc: { start: { line: 886, column: 11 }, end: { line: 897, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 886, column: 11 }, end: { line: 897, column: 5 } },
                    { start: { line: 886, column: 11 }, end: { line: 897, column: 5 } }
                  ],
                  line: 886
                },
                '44': {
                  loc: { start: { line: 891, column: 10 }, end: { line: 893, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 891, column: 10 }, end: { line: 893, column: 11 } },
                    { start: { line: 891, column: 10 }, end: { line: 893, column: 11 } }
                  ],
                  line: 891
                },
                '45': {
                  loc: { start: { line: 900, column: 4 }, end: { line: 923, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 900, column: 4 }, end: { line: 923, column: 5 } },
                    { start: { line: 900, column: 4 }, end: { line: 923, column: 5 } }
                  ],
                  line: 900
                },
                '46': {
                  loc: { start: { line: 905, column: 10 }, end: { line: 907, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 905, column: 10 }, end: { line: 907, column: 11 } },
                    { start: { line: 905, column: 10 }, end: { line: 907, column: 11 } }
                  ],
                  line: 905
                },
                '47': {
                  loc: { start: { line: 911, column: 11 }, end: { line: 923, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 911, column: 11 }, end: { line: 923, column: 5 } },
                    { start: { line: 911, column: 11 }, end: { line: 923, column: 5 } }
                  ],
                  line: 911
                },
                '48': {
                  loc: { start: { line: 916, column: 10 }, end: { line: 920, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 916, column: 10 }, end: { line: 920, column: 11 } },
                    { start: { line: 916, column: 10 }, end: { line: 920, column: 11 } }
                  ],
                  line: 916
                },
                '49': {
                  loc: { start: { line: 918, column: 17 }, end: { line: 920, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 918, column: 17 }, end: { line: 920, column: 11 } },
                    { start: { line: 918, column: 17 }, end: { line: 920, column: 11 } }
                  ],
                  line: 918
                },
                '50': {
                  loc: { start: { line: 925, column: 4 }, end: { line: 927, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 925, column: 4 }, end: { line: 927, column: 5 } },
                    { start: { line: 925, column: 4 }, end: { line: 927, column: 5 } }
                  ],
                  line: 925
                },
                '51': {
                  loc: { start: { line: 930, column: 4 }, end: { line: 953, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 930, column: 4 }, end: { line: 953, column: 5 } },
                    { start: { line: 930, column: 4 }, end: { line: 953, column: 5 } }
                  ],
                  line: 930
                },
                '52': {
                  loc: { start: { line: 935, column: 10 }, end: { line: 937, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 935, column: 10 }, end: { line: 937, column: 11 } },
                    { start: { line: 935, column: 10 }, end: { line: 937, column: 11 } }
                  ],
                  line: 935
                },
                '53': {
                  loc: { start: { line: 941, column: 11 }, end: { line: 953, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 941, column: 11 }, end: { line: 953, column: 5 } },
                    { start: { line: 941, column: 11 }, end: { line: 953, column: 5 } }
                  ],
                  line: 941
                },
                '54': {
                  loc: { start: { line: 946, column: 10 }, end: { line: 950, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 946, column: 10 }, end: { line: 950, column: 11 } },
                    { start: { line: 946, column: 10 }, end: { line: 950, column: 11 } }
                  ],
                  line: 946
                },
                '55': {
                  loc: { start: { line: 948, column: 17 }, end: { line: 950, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 948, column: 17 }, end: { line: 950, column: 11 } },
                    { start: { line: 948, column: 17 }, end: { line: 950, column: 11 } }
                  ],
                  line: 948
                },
                '56': {
                  loc: { start: { line: 955, column: 4 }, end: { line: 962, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 955, column: 4 }, end: { line: 962, column: 5 } },
                    { start: { line: 955, column: 4 }, end: { line: 962, column: 5 } }
                  ],
                  line: 955
                },
                '57': {
                  loc: { start: { line: 966, column: 9 }, end: { line: 989, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 966, column: 9 }, end: { line: 989, column: 3 } },
                    { start: { line: 966, column: 9 }, end: { line: 989, column: 3 } }
                  ],
                  line: 966
                },
                '58': {
                  loc: { start: { line: 966, column: 13 }, end: { line: 966, column: 70 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 966, column: 14 }, end: { line: 966, column: 27 } },
                    { start: { line: 966, column: 31 }, end: { line: 966, column: 44 } },
                    { start: { line: 966, column: 49 }, end: { line: 966, column: 70 } }
                  ],
                  line: 966
                },
                '59': {
                  loc: { start: { line: 979, column: 4 }, end: { line: 983, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 979, column: 4 }, end: { line: 983, column: 5 } },
                    { start: { line: 979, column: 4 }, end: { line: 983, column: 5 } }
                  ],
                  line: 979
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0,
                '118': 0,
                '119': 0,
                '120': 0,
                '121': 0,
                '122': 0,
                '123': 0,
                '124': 0,
                '125': 0,
                '126': 0,
                '127': 0,
                '128': 0,
                '129': 0,
                '130': 0,
                '131': 0,
                '132': 0,
                '133': 0,
                '134': 0,
                '135': 0,
                '136': 0,
                '137': 0,
                '138': 0,
                '139': 0,
                '140': 0,
                '141': 0,
                '142': 0,
                '143': 0,
                '144': 0,
                '145': 0,
                '146': 0,
                '147': 0,
                '148': 0,
                '149': 0,
                '150': 0,
                '151': 0,
                '152': 0,
                '153': 0,
                '154': 0,
                '155': 0,
                '156': 0,
                '157': 0,
                '158': 0,
                '159': 0,
                '160': 0,
                '161': 0,
                '162': 0,
                '163': 0,
                '164': 0,
                '165': 0,
                '166': 0,
                '167': 0,
                '168': 0,
                '169': 0,
                '170': 0,
                '171': 0,
                '172': 0,
                '173': 0,
                '174': 0,
                '175': 0,
                '176': 0,
                '177': 0,
                '178': 0,
                '179': 0,
                '180': 0,
                '181': 0,
                '182': 0,
                '183': 0,
                '184': 0,
                '185': 0,
                '186': 0,
                '187': 0,
                '188': 0,
                '189': 0,
                '190': 0,
                '191': 0,
                '192': 0,
                '193': 0,
                '194': 0,
                '195': 0,
                '196': 0,
                '197': 0,
                '198': 0,
                '199': 0,
                '200': 0,
                '201': 0,
                '202': 0,
                '203': 0,
                '204': 0,
                '205': 0,
                '206': 0,
                '207': 0,
                '208': 0,
                '209': 0,
                '210': 0,
                '211': 0,
                '212': 0,
                '213': 0,
                '214': 0,
                '215': 0,
                '216': 0,
                '217': 0,
                '218': 0,
                '219': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0, 0],
                '2': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0],
                '20': [0, 0],
                '21': [0, 0],
                '22': [0, 0],
                '23': [0, 0],
                '24': [0, 0],
                '25': [0, 0],
                '26': [0, 0],
                '27': [0, 0],
                '28': [0, 0],
                '29': [0, 0],
                '30': [0, 0],
                '31': [0, 0],
                '32': [0, 0],
                '33': [0, 0],
                '34': [0, 0],
                '35': [0, 0],
                '36': [0, 0],
                '37': [0, 0],
                '38': [0, 0],
                '39': [0, 0],
                '40': [0, 0],
                '41': [0, 0],
                '42': [0, 0],
                '43': [0, 0],
                '44': [0, 0],
                '45': [0, 0],
                '46': [0, 0],
                '47': [0, 0],
                '48': [0, 0],
                '49': [0, 0],
                '50': [0, 0],
                '51': [0, 0],
                '52': [0, 0],
                '53': [0, 0],
                '54': [0, 0],
                '55': [0, 0],
                '56': [0, 0],
                '57': [0, 0],
                '58': [0, 0, 0],
                '59': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '7f7052f2f6383df0bd7308ab2b9bb242b86b1831'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.join');
          _dereq_('core-js/modules/es.array.map');
          _dereq_('core-js/modules/es.array.slice');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.regexp.constructor');
          _dereq_('core-js/modules/es.regexp.exec');
          _dereq_('core-js/modules/es.regexp.to-string');
          _dereq_('core-js/modules/es.string.trim');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          var constants = _interopRequireWildcard(_dereq_('../core/constants'));
          var _color_conversion = _interopRequireDefault(_dereq_('./color_conversion'));
          function _getRequireWildcardCache() {
            if (typeof WeakMap !== 'function') return null;
            var cache = new WeakMap();
            _getRequireWildcardCache = function _getRequireWildcardCache() {
              return cache;
            };
            return cache;
          }
          function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
              return obj;
            }
            if (obj === null || (_typeof(obj) !== 'object' && typeof obj !== 'function')) {
              return { default: obj };
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
              return cache.get(obj);
            }
            var newObj = {};
            var hasPropertyDescriptor =
              Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
              if (Object.prototype.hasOwnProperty.call(obj, key)) {
                var desc = hasPropertyDescriptor
                  ? Object.getOwnPropertyDescriptor(obj, key)
                  : null;
                if (desc && (desc.get || desc.set)) {
                  Object.defineProperty(newObj, key, desc);
                } else {
                  newObj[key] = obj[key];
                }
              }
            }
            newObj.default = obj;
            if (cache) {
              cache.set(obj, newObj);
            }
            return newObj;
          }
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_2j9d41fbnl.s[0]++;

          /**
           * Each color stores the color mode and level maxes that was applied at the
           * time of its construction. These are used to interpret the input arguments
           * (at construction and later for that instance of color) and to format the
           * output e.g. when <a href="#/p5/saturation">saturation()</a> is requested.
           *
           * Internally, we store an array representing the ideal RGBA values in floating
           * point form, normalized from 0 to 1. From this we calculate the closest
           * screen color (RGBA levels from 0 to 255) and expose this to the renderer.
           *
           * We also cache normalized, floating point components of the color in various
           * representations as they are calculated. This is done to prevent repeating a
           * conversion that has already been performed.
           *
           * @class p5.Color
           * @constructor
           */
          _main.default.Color = function(pInst, vals) {
            cov_2j9d41fbnl.f[0]++;
            cov_2j9d41fbnl.s[1]++;
            // Record color mode and maxes at time of construction.
            this._storeModeAndMaxes(pInst._colorMode, pInst._colorMaxes);

            // Calculate normalized RGBA values.
            cov_2j9d41fbnl.s[2]++;
            if (
              (cov_2j9d41fbnl.b[1][0]++, this.mode !== constants.RGB) &&
              (cov_2j9d41fbnl.b[1][1]++, this.mode !== constants.HSL) &&
              (cov_2j9d41fbnl.b[1][2]++, this.mode !== constants.HSB)
            ) {
              cov_2j9d41fbnl.b[0][0]++;
              cov_2j9d41fbnl.s[3]++;
              throw new Error(''.concat(this.mode, ' is an invalid colorMode.'));
            } else {
              cov_2j9d41fbnl.b[0][1]++;
              cov_2j9d41fbnl.s[4]++;
              this._array = _main.default.Color._parseInputs.apply(this, vals);
            }

            // Expose closest screen color.
            cov_2j9d41fbnl.s[5]++;
            this._calculateLevels();
            cov_2j9d41fbnl.s[6]++;
            return this;
          };

          /**
           * This function returns the color formatted as a string. This can be useful
           * for debugging, or for using p5.js with other libraries.
           *
           * @method toString
           * @param {String} [format] How the color string will be formatted.
           * Leaving this empty formats the string as rgba(r, g, b, a).
           * '#rgb' '#rgba' '#rrggbb' and '#rrggbbaa' format as hexadecimal color codes.
           * 'rgb' 'hsb' and 'hsl' return the color formatted in the specified color mode.
           * 'rgba' 'hsba' and 'hsla' are the same as above but with alpha channels.
           * 'rgb%' 'hsb%' 'hsl%' 'rgba%' 'hsba%' and 'hsla%' format as percentages.
           * @return {String} the formatted string
           *
           * @example
           * <div>
           * <code>
           * createCanvas(200, 100);
           * let myColor;
           * stroke(255);
           * myColor = color(100, 100, 250);
           * fill(myColor);
           * rotate(HALF_PI);
           * text(myColor.toString(), 0, -5);
           * text(myColor.toString('#rrggbb'), 0, -30);
           * text(myColor.toString('rgba%'), 0, -55);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * let myColor = color(100, 130, 250);
           * text(myColor.toString('#rrggbb'), 25, 25);
           * </code>
           * </div>
           *
           * @alt
           * A canvas with 3 text representation of their color.
           */ cov_2j9d41fbnl.s[7]++;
          _main.default.Color.prototype.toString = function(format) {
            cov_2j9d41fbnl.f[1]++;
            var a = (cov_2j9d41fbnl.s[8]++, this.levels);
            var f = (cov_2j9d41fbnl.s[9]++, this._array);
            var alpha = (cov_2j9d41fbnl.s[10]++, f[3]); // String representation uses normalized alpha
            cov_2j9d41fbnl.s[11]++;
            switch (format) {
              case '#rrggbb':
                cov_2j9d41fbnl.b[2][0]++;
                cov_2j9d41fbnl.s[12]++;
                return '#'.concat(
                  a[0] < 16
                    ? (cov_2j9d41fbnl.b[3][0]++, '0'.concat(a[0].toString(16)))
                    : (cov_2j9d41fbnl.b[3][1]++, a[0].toString(16)),
                  a[1] < 16
                    ? (cov_2j9d41fbnl.b[4][0]++, '0'.concat(a[1].toString(16)))
                    : (cov_2j9d41fbnl.b[4][1]++, a[1].toString(16)),
                  a[2] < 16
                    ? (cov_2j9d41fbnl.b[5][0]++, '0'.concat(a[2].toString(16)))
                    : (cov_2j9d41fbnl.b[5][1]++, a[2].toString(16))
                );

              case '#rrggbbaa':
                cov_2j9d41fbnl.b[2][1]++;
                cov_2j9d41fbnl.s[13]++;
                return '#'.concat(
                  a[0] < 16
                    ? (cov_2j9d41fbnl.b[6][0]++, '0'.concat(a[0].toString(16)))
                    : (cov_2j9d41fbnl.b[6][1]++, a[0].toString(16)),
                  a[1] < 16
                    ? (cov_2j9d41fbnl.b[7][0]++, '0'.concat(a[1].toString(16)))
                    : (cov_2j9d41fbnl.b[7][1]++, a[1].toString(16)),
                  a[2] < 16
                    ? (cov_2j9d41fbnl.b[8][0]++, '0'.concat(a[2].toString(16)))
                    : (cov_2j9d41fbnl.b[8][1]++, a[2].toString(16)),
                  a[3] < 16
                    ? (cov_2j9d41fbnl.b[9][0]++, '0'.concat(a[3].toString(16)))
                    : (cov_2j9d41fbnl.b[9][1]++, a[3].toString(16))
                );

              case '#rgb':
                cov_2j9d41fbnl.b[2][2]++;
                cov_2j9d41fbnl.s[14]++;
                return '#'.concat(
                  Math.round(f[0] * 15).toString(16),
                  Math.round(f[1] * 15).toString(16),
                  Math.round(f[2] * 15).toString(16)
                );

              case '#rgba':
                cov_2j9d41fbnl.b[2][3]++;
                cov_2j9d41fbnl.s[15]++;
                return '#'.concat(
                  Math.round(f[0] * 15).toString(16),
                  Math.round(f[1] * 15).toString(16),
                  Math.round(f[2] * 15).toString(16),
                  Math.round(f[3] * 15).toString(16)
                );

              case 'rgb':
                cov_2j9d41fbnl.b[2][4]++;
                cov_2j9d41fbnl.s[16]++;
                return 'rgb('.concat(a[0], ', ', a[1], ', ', a[2], ')');

              case 'rgb%':
                cov_2j9d41fbnl.b[2][5]++;
                cov_2j9d41fbnl.s[17]++;
                return 'rgb('.concat(
                  (100 * f[0]).toPrecision(3),
                  '%, ',
                  (100 * f[1]).toPrecision(3),
                  '%, ',
                  (100 * f[2]).toPrecision(3),
                  '%)'
                );

              case 'rgba%':
                cov_2j9d41fbnl.b[2][6]++;
                cov_2j9d41fbnl.s[18]++;
                return 'rgba('.concat(
                  (100 * f[0]).toPrecision(3),
                  '%, ',
                  (100 * f[1]).toPrecision(3),
                  '%, ',
                  (100 * f[2]).toPrecision(3),
                  '%, ',
                  (100 * f[3]).toPrecision(3),
                  '%)'
                );

              case 'hsb':
                cov_2j9d41fbnl.b[2][7]++;
              case 'hsv':
                cov_2j9d41fbnl.b[2][8]++;
                cov_2j9d41fbnl.s[19]++;
                if (!this.hsba) {
                  cov_2j9d41fbnl.b[10][0]++;
                  cov_2j9d41fbnl.s[20]++;
                  this.hsba = _color_conversion.default._rgbaToHSBA(this._array);
                } else {
                  cov_2j9d41fbnl.b[10][1]++;
                }
                cov_2j9d41fbnl.s[21]++;
                return 'hsb('.concat(
                  this.hsba[0] * this.maxes[constants.HSB][0],
                  ', ',
                  this.hsba[1] * this.maxes[constants.HSB][1],
                  ', ',
                  this.hsba[2] * this.maxes[constants.HSB][2],
                  ')'
                );

              case 'hsb%':
                cov_2j9d41fbnl.b[2][9]++;
              case 'hsv%':
                cov_2j9d41fbnl.b[2][10]++;
                cov_2j9d41fbnl.s[22]++;
                if (!this.hsba) {
                  cov_2j9d41fbnl.b[11][0]++;
                  cov_2j9d41fbnl.s[23]++;
                  this.hsba = _color_conversion.default._rgbaToHSBA(this._array);
                } else {
                  cov_2j9d41fbnl.b[11][1]++;
                }
                cov_2j9d41fbnl.s[24]++;
                return 'hsb('.concat(
                  (100 * this.hsba[0]).toPrecision(3),
                  '%, ',
                  (100 * this.hsba[1]).toPrecision(3),
                  '%, ',
                  (100 * this.hsba[2]).toPrecision(3),
                  '%)'
                );

              case 'hsba':
                cov_2j9d41fbnl.b[2][11]++;
              case 'hsva':
                cov_2j9d41fbnl.b[2][12]++;
                cov_2j9d41fbnl.s[25]++;
                if (!this.hsba) {
                  cov_2j9d41fbnl.b[12][0]++;
                  cov_2j9d41fbnl.s[26]++;
                  this.hsba = _color_conversion.default._rgbaToHSBA(this._array);
                } else {
                  cov_2j9d41fbnl.b[12][1]++;
                }
                cov_2j9d41fbnl.s[27]++;
                return 'hsba('.concat(
                  this.hsba[0] * this.maxes[constants.HSB][0],
                  ', ',
                  this.hsba[1] * this.maxes[constants.HSB][1],
                  ', ',
                  this.hsba[2] * this.maxes[constants.HSB][2],
                  ', ',
                  alpha,
                  ')'
                );

              case 'hsba%':
                cov_2j9d41fbnl.b[2][13]++;
              case 'hsva%':
                cov_2j9d41fbnl.b[2][14]++;
                cov_2j9d41fbnl.s[28]++;
                if (!this.hsba) {
                  cov_2j9d41fbnl.b[13][0]++;
                  cov_2j9d41fbnl.s[29]++;
                  this.hsba = _color_conversion.default._rgbaToHSBA(this._array);
                } else {
                  cov_2j9d41fbnl.b[13][1]++;
                }
                cov_2j9d41fbnl.s[30]++;
                return 'hsba('.concat(
                  (100 * this.hsba[0]).toPrecision(3),
                  '%, ',
                  (100 * this.hsba[1]).toPrecision(3),
                  '%, ',
                  (100 * this.hsba[2]).toPrecision(3),
                  '%, ',
                  (100 * alpha).toPrecision(3),
                  '%)'
                );

              case 'hsl':
                cov_2j9d41fbnl.b[2][15]++;
                cov_2j9d41fbnl.s[31]++;
                if (!this.hsla) {
                  cov_2j9d41fbnl.b[14][0]++;
                  cov_2j9d41fbnl.s[32]++;
                  this.hsla = _color_conversion.default._rgbaToHSLA(this._array);
                } else {
                  cov_2j9d41fbnl.b[14][1]++;
                }
                cov_2j9d41fbnl.s[33]++;
                return 'hsl('.concat(
                  this.hsla[0] * this.maxes[constants.HSL][0],
                  ', ',
                  this.hsla[1] * this.maxes[constants.HSL][1],
                  ', ',
                  this.hsla[2] * this.maxes[constants.HSL][2],
                  ')'
                );

              case 'hsl%':
                cov_2j9d41fbnl.b[2][16]++;
                cov_2j9d41fbnl.s[34]++;
                if (!this.hsla) {
                  cov_2j9d41fbnl.b[15][0]++;
                  cov_2j9d41fbnl.s[35]++;
                  this.hsla = _color_conversion.default._rgbaToHSLA(this._array);
                } else {
                  cov_2j9d41fbnl.b[15][1]++;
                }
                cov_2j9d41fbnl.s[36]++;
                return 'hsl('.concat(
                  (100 * this.hsla[0]).toPrecision(3),
                  '%, ',
                  (100 * this.hsla[1]).toPrecision(3),
                  '%, ',
                  (100 * this.hsla[2]).toPrecision(3),
                  '%)'
                );

              case 'hsla':
                cov_2j9d41fbnl.b[2][17]++;
                cov_2j9d41fbnl.s[37]++;
                if (!this.hsla) {
                  cov_2j9d41fbnl.b[16][0]++;
                  cov_2j9d41fbnl.s[38]++;
                  this.hsla = _color_conversion.default._rgbaToHSLA(this._array);
                } else {
                  cov_2j9d41fbnl.b[16][1]++;
                }
                cov_2j9d41fbnl.s[39]++;
                return 'hsla('.concat(
                  this.hsla[0] * this.maxes[constants.HSL][0],
                  ', ',
                  this.hsla[1] * this.maxes[constants.HSL][1],
                  ', ',
                  this.hsla[2] * this.maxes[constants.HSL][2],
                  ', ',
                  alpha,
                  ')'
                );

              case 'hsla%':
                cov_2j9d41fbnl.b[2][18]++;
                cov_2j9d41fbnl.s[40]++;
                if (!this.hsla) {
                  cov_2j9d41fbnl.b[17][0]++;
                  cov_2j9d41fbnl.s[41]++;
                  this.hsla = _color_conversion.default._rgbaToHSLA(this._array);
                } else {
                  cov_2j9d41fbnl.b[17][1]++;
                }
                cov_2j9d41fbnl.s[42]++;
                return 'hsl('.concat(
                  (100 * this.hsla[0]).toPrecision(3),
                  '%, ',
                  (100 * this.hsla[1]).toPrecision(3),
                  '%, ',
                  (100 * this.hsla[2]).toPrecision(3),
                  '%, ',
                  (100 * alpha).toPrecision(3),
                  '%)'
                );

              case 'rgba':
                cov_2j9d41fbnl.b[2][19]++;
              default:
                cov_2j9d41fbnl.b[2][20]++;
                cov_2j9d41fbnl.s[43]++;
                return 'rgba('.concat(a[0], ',', a[1], ',', a[2], ',', alpha, ')');
            }
          };

          /**
           * The setRed function sets the red component of a color.
           * The range depends on your color mode, in the default RGB mode it's between 0 and 255.
           * @method setRed
           * @param {Number} red the new red value
           * @example
           * <div>
           * <code>
           * let backgroundColor;
           *
           * function setup() {
           *   backgroundColor = color(100, 50, 150);
           * }
           *
           * function draw() {
           *   backgroundColor.setRed(128 + 128 * sin(millis() / 1000));
           *   background(backgroundColor);
           * }
           * </code>
           * </div>
           *
           * @alt
           * canvas with gradually changing background color
           */ cov_2j9d41fbnl.s[44]++;
          _main.default.Color.prototype.setRed = function(new_red) {
            cov_2j9d41fbnl.f[2]++;
            cov_2j9d41fbnl.s[45]++;
            this._array[0] = new_red / this.maxes[constants.RGB][0];
            cov_2j9d41fbnl.s[46]++;
            this._calculateLevels();
          };

          /**
           * The setGreen function sets the green component of a color.
           * The range depends on your color mode, in the default RGB mode it's between 0 and 255.
           * @method setGreen
           * @param {Number} green the new green value
           * @example
           * <div>
           * <code>
           * let backgroundColor = color(100, 50, 150);
           * function draw() {
           *   backgroundColor.setGreen(128 + 128 * sin(millis() / 1000));
           *   background(backgroundColor);
           * }
           * </code>
           * </div>
           *
           * @alt
           * canvas with gradually changing background color
           **/ cov_2j9d41fbnl.s[47]++;
          _main.default.Color.prototype.setGreen = function(new_green) {
            cov_2j9d41fbnl.f[3]++;
            cov_2j9d41fbnl.s[48]++;
            this._array[1] = new_green / this.maxes[constants.RGB][1];
            cov_2j9d41fbnl.s[49]++;
            this._calculateLevels();
          };

          /**
           * The setBlue function sets the blue component of a color.
           * The range depends on your color mode, in the default RGB mode it's between 0 and 255.
           * @method setBlue
           * @param {Number} blue the new blue value
           * @example
           * <div>
           * <code>
           * let backgroundColor = color(100, 50, 150);
           * function draw() {
           *   backgroundColor.setBlue(128 + 128 * sin(millis() / 1000));
           *   background(backgroundColor);
           * }
           * </code>
           * </div>
           *
           * @alt
           * canvas with gradually changing background color
           **/ cov_2j9d41fbnl.s[50]++;
          _main.default.Color.prototype.setBlue = function(new_blue) {
            cov_2j9d41fbnl.f[4]++;
            cov_2j9d41fbnl.s[51]++;
            this._array[2] = new_blue / this.maxes[constants.RGB][2];
            cov_2j9d41fbnl.s[52]++;
            this._calculateLevels();
          };

          /**
           * The setAlpha function sets the transparency (alpha) value of a color.
           * The range depends on your color mode, in the default RGB mode it's between 0 and 255.
           * @method setAlpha
           * @param {Number} alpha the new alpha value
           * @example
           * <div>
           * <code>
           * function draw() {
           *   clear();
           *   background(200);
           *   squareColor = color(100, 50, 100);
           *   squareColor.setAlpha(128 + 128 * sin(millis() / 1000));
           *   fill(squareColor);
           *   rect(13, 13, width - 26, height - 26);
           * }
           * </code>
           * </div>
           *
           * @alt
           * a square with gradually changing opacity on a gray background
           **/ cov_2j9d41fbnl.s[53]++;
          _main.default.Color.prototype.setAlpha = function(new_alpha) {
            cov_2j9d41fbnl.f[5]++;
            cov_2j9d41fbnl.s[54]++;
            this._array[3] = new_alpha / this.maxes[this.mode][3];
            cov_2j9d41fbnl.s[55]++;
            this._calculateLevels();
          };

          // calculates and stores the closest screen levels
          cov_2j9d41fbnl.s[56]++;
          _main.default.Color.prototype._calculateLevels = function() {
            cov_2j9d41fbnl.f[6]++;
            var array = (cov_2j9d41fbnl.s[57]++, this._array);
            // (loop backwards for performance)
            var levels = (cov_2j9d41fbnl.s[58]++, (this.levels = new Array(array.length)));
            cov_2j9d41fbnl.s[59]++;
            for (var i = (cov_2j9d41fbnl.s[60]++, array.length - 1); i >= 0; --i) {
              cov_2j9d41fbnl.s[61]++;
              levels[i] = Math.round(array[i] * 255);
            }
          };
          cov_2j9d41fbnl.s[62]++;

          _main.default.Color.prototype._getAlpha = function() {
            cov_2j9d41fbnl.f[7]++;
            cov_2j9d41fbnl.s[63]++;
            return this._array[3] * this.maxes[this.mode][3];
          };

          // stores the color mode and maxes in this instance of Color
          // for later use (by _parseInputs())
          cov_2j9d41fbnl.s[64]++;
          _main.default.Color.prototype._storeModeAndMaxes = function(new_mode, new_maxes) {
            cov_2j9d41fbnl.f[8]++;
            cov_2j9d41fbnl.s[65]++;
            this.mode = new_mode;
            cov_2j9d41fbnl.s[66]++;
            this.maxes = new_maxes;
          };
          cov_2j9d41fbnl.s[67]++;

          _main.default.Color.prototype._getMode = function() {
            cov_2j9d41fbnl.f[9]++;
            cov_2j9d41fbnl.s[68]++;
            return this.mode;
          };
          cov_2j9d41fbnl.s[69]++;

          _main.default.Color.prototype._getMaxes = function() {
            cov_2j9d41fbnl.f[10]++;
            cov_2j9d41fbnl.s[70]++;
            return this.maxes;
          };
          cov_2j9d41fbnl.s[71]++;

          _main.default.Color.prototype._getBlue = function() {
            cov_2j9d41fbnl.f[11]++;
            cov_2j9d41fbnl.s[72]++;
            return this._array[2] * this.maxes[constants.RGB][2];
          };
          cov_2j9d41fbnl.s[73]++;

          _main.default.Color.prototype._getBrightness = function() {
            cov_2j9d41fbnl.f[12]++;
            cov_2j9d41fbnl.s[74]++;
            if (!this.hsba) {
              cov_2j9d41fbnl.b[18][0]++;
              cov_2j9d41fbnl.s[75]++;
              this.hsba = _color_conversion.default._rgbaToHSBA(this._array);
            } else {
              cov_2j9d41fbnl.b[18][1]++;
            }
            cov_2j9d41fbnl.s[76]++;
            return this.hsba[2] * this.maxes[constants.HSB][2];
          };
          cov_2j9d41fbnl.s[77]++;

          _main.default.Color.prototype._getGreen = function() {
            cov_2j9d41fbnl.f[13]++;
            cov_2j9d41fbnl.s[78]++;
            return this._array[1] * this.maxes[constants.RGB][1];
          };

          /**
           * Hue is the same in HSB and HSL, but the maximum value may be different.
           * This function will return the HSB-normalized saturation when supplied with
           * an HSB color object, but will default to the HSL-normalized saturation
           * otherwise.
           */ cov_2j9d41fbnl.s[79]++;
          _main.default.Color.prototype._getHue = function() {
            cov_2j9d41fbnl.f[14]++;
            cov_2j9d41fbnl.s[80]++;
            if (this.mode === constants.HSB) {
              cov_2j9d41fbnl.b[19][0]++;
              cov_2j9d41fbnl.s[81]++;
              if (!this.hsba) {
                cov_2j9d41fbnl.b[20][0]++;
                cov_2j9d41fbnl.s[82]++;
                this.hsba = _color_conversion.default._rgbaToHSBA(this._array);
              } else {
                cov_2j9d41fbnl.b[20][1]++;
              }
              cov_2j9d41fbnl.s[83]++;
              return this.hsba[0] * this.maxes[constants.HSB][0];
            } else {
              cov_2j9d41fbnl.b[19][1]++;
              cov_2j9d41fbnl.s[84]++;
              if (!this.hsla) {
                cov_2j9d41fbnl.b[21][0]++;
                cov_2j9d41fbnl.s[85]++;
                this.hsla = _color_conversion.default._rgbaToHSLA(this._array);
              } else {
                cov_2j9d41fbnl.b[21][1]++;
              }
              cov_2j9d41fbnl.s[86]++;
              return this.hsla[0] * this.maxes[constants.HSL][0];
            }
          };
          cov_2j9d41fbnl.s[87]++;

          _main.default.Color.prototype._getLightness = function() {
            cov_2j9d41fbnl.f[15]++;
            cov_2j9d41fbnl.s[88]++;
            if (!this.hsla) {
              cov_2j9d41fbnl.b[22][0]++;
              cov_2j9d41fbnl.s[89]++;
              this.hsla = _color_conversion.default._rgbaToHSLA(this._array);
            } else {
              cov_2j9d41fbnl.b[22][1]++;
            }
            cov_2j9d41fbnl.s[90]++;
            return this.hsla[2] * this.maxes[constants.HSL][2];
          };
          cov_2j9d41fbnl.s[91]++;

          _main.default.Color.prototype._getRed = function() {
            cov_2j9d41fbnl.f[16]++;
            cov_2j9d41fbnl.s[92]++;
            return this._array[0] * this.maxes[constants.RGB][0];
          };

          /**
           * Saturation is scaled differently in HSB and HSL. This function will return
           * the HSB saturation when supplied with an HSB color object, but will default
           * to the HSL saturation otherwise.
           */ cov_2j9d41fbnl.s[93]++;
          _main.default.Color.prototype._getSaturation = function() {
            cov_2j9d41fbnl.f[17]++;
            cov_2j9d41fbnl.s[94]++;
            if (this.mode === constants.HSB) {
              cov_2j9d41fbnl.b[23][0]++;
              cov_2j9d41fbnl.s[95]++;
              if (!this.hsba) {
                cov_2j9d41fbnl.b[24][0]++;
                cov_2j9d41fbnl.s[96]++;
                this.hsba = _color_conversion.default._rgbaToHSBA(this._array);
              } else {
                cov_2j9d41fbnl.b[24][1]++;
              }
              cov_2j9d41fbnl.s[97]++;
              return this.hsba[1] * this.maxes[constants.HSB][1];
            } else {
              cov_2j9d41fbnl.b[23][1]++;
              cov_2j9d41fbnl.s[98]++;
              if (!this.hsla) {
                cov_2j9d41fbnl.b[25][0]++;
                cov_2j9d41fbnl.s[99]++;
                this.hsla = _color_conversion.default._rgbaToHSLA(this._array);
              } else {
                cov_2j9d41fbnl.b[25][1]++;
              }
              cov_2j9d41fbnl.s[100]++;
              return this.hsla[1] * this.maxes[constants.HSL][1];
            }
          };

          /**
           * CSS named colors.
           */
          var namedColors = (cov_2j9d41fbnl.s[101]++,
          {
            aliceblue: '#f0f8ff',
            antiquewhite: '#faebd7',
            aqua: '#00ffff',
            aquamarine: '#7fffd4',
            azure: '#f0ffff',
            beige: '#f5f5dc',
            bisque: '#ffe4c4',
            black: '#000000',
            blanchedalmond: '#ffebcd',
            blue: '#0000ff',
            blueviolet: '#8a2be2',
            brown: '#a52a2a',
            burlywood: '#deb887',
            cadetblue: '#5f9ea0',
            chartreuse: '#7fff00',
            chocolate: '#d2691e',
            coral: '#ff7f50',
            cornflowerblue: '#6495ed',
            cornsilk: '#fff8dc',
            crimson: '#dc143c',
            cyan: '#00ffff',
            darkblue: '#00008b',
            darkcyan: '#008b8b',
            darkgoldenrod: '#b8860b',
            darkgray: '#a9a9a9',
            darkgreen: '#006400',
            darkgrey: '#a9a9a9',
            darkkhaki: '#bdb76b',
            darkmagenta: '#8b008b',
            darkolivegreen: '#556b2f',
            darkorange: '#ff8c00',
            darkorchid: '#9932cc',
            darkred: '#8b0000',
            darksalmon: '#e9967a',
            darkseagreen: '#8fbc8f',
            darkslateblue: '#483d8b',
            darkslategray: '#2f4f4f',
            darkslategrey: '#2f4f4f',
            darkturquoise: '#00ced1',
            darkviolet: '#9400d3',
            deeppink: '#ff1493',
            deepskyblue: '#00bfff',
            dimgray: '#696969',
            dimgrey: '#696969',
            dodgerblue: '#1e90ff',
            firebrick: '#b22222',
            floralwhite: '#fffaf0',
            forestgreen: '#228b22',
            fuchsia: '#ff00ff',
            gainsboro: '#dcdcdc',
            ghostwhite: '#f8f8ff',
            gold: '#ffd700',
            goldenrod: '#daa520',
            gray: '#808080',
            green: '#008000',
            greenyellow: '#adff2f',
            grey: '#808080',
            honeydew: '#f0fff0',
            hotpink: '#ff69b4',
            indianred: '#cd5c5c',
            indigo: '#4b0082',
            ivory: '#fffff0',
            khaki: '#f0e68c',
            lavender: '#e6e6fa',
            lavenderblush: '#fff0f5',
            lawngreen: '#7cfc00',
            lemonchiffon: '#fffacd',
            lightblue: '#add8e6',
            lightcoral: '#f08080',
            lightcyan: '#e0ffff',
            lightgoldenrodyellow: '#fafad2',
            lightgray: '#d3d3d3',
            lightgreen: '#90ee90',
            lightgrey: '#d3d3d3',
            lightpink: '#ffb6c1',
            lightsalmon: '#ffa07a',
            lightseagreen: '#20b2aa',
            lightskyblue: '#87cefa',
            lightslategray: '#778899',
            lightslategrey: '#778899',
            lightsteelblue: '#b0c4de',
            lightyellow: '#ffffe0',
            lime: '#00ff00',
            limegreen: '#32cd32',
            linen: '#faf0e6',
            magenta: '#ff00ff',
            maroon: '#800000',
            mediumaquamarine: '#66cdaa',
            mediumblue: '#0000cd',
            mediumorchid: '#ba55d3',
            mediumpurple: '#9370db',
            mediumseagreen: '#3cb371',
            mediumslateblue: '#7b68ee',
            mediumspringgreen: '#00fa9a',
            mediumturquoise: '#48d1cc',
            mediumvioletred: '#c71585',
            midnightblue: '#191970',
            mintcream: '#f5fffa',
            mistyrose: '#ffe4e1',
            moccasin: '#ffe4b5',
            navajowhite: '#ffdead',
            navy: '#000080',
            oldlace: '#fdf5e6',
            olive: '#808000',
            olivedrab: '#6b8e23',
            orange: '#ffa500',
            orangered: '#ff4500',
            orchid: '#da70d6',
            palegoldenrod: '#eee8aa',
            palegreen: '#98fb98',
            paleturquoise: '#afeeee',
            palevioletred: '#db7093',
            papayawhip: '#ffefd5',
            peachpuff: '#ffdab9',
            peru: '#cd853f',
            pink: '#ffc0cb',
            plum: '#dda0dd',
            powderblue: '#b0e0e6',
            purple: '#800080',
            rebeccapurple: '#663399',
            red: '#ff0000',
            rosybrown: '#bc8f8f',
            royalblue: '#4169e1',
            saddlebrown: '#8b4513',
            salmon: '#fa8072',
            sandybrown: '#f4a460',
            seagreen: '#2e8b57',
            seashell: '#fff5ee',
            sienna: '#a0522d',
            silver: '#c0c0c0',
            skyblue: '#87ceeb',
            slateblue: '#6a5acd',
            slategray: '#708090',
            slategrey: '#708090',
            snow: '#fffafa',
            springgreen: '#00ff7f',
            steelblue: '#4682b4',
            tan: '#d2b48c',
            teal: '#008080',
            thistle: '#d8bfd8',
            tomato: '#ff6347',
            turquoise: '#40e0d0',
            violet: '#ee82ee',
            wheat: '#f5deb3',
            white: '#ffffff',
            whitesmoke: '#f5f5f5',
            yellow: '#ffff00',
            yellowgreen: '#9acd32'
          });

          /**
           * These regular expressions are used to build up the patterns for matching
           * viable CSS color strings: fragmenting the regexes in this way increases the
           * legibility and comprehensibility of the code.
           *
           * Note that RGB values of .9 are not parsed by IE, but are supported here for
           * color string consistency.
           */
          var WHITESPACE = (cov_2j9d41fbnl.s[102]++, /\s*/); // Match zero or more whitespace characters.
          var INTEGER = (cov_2j9d41fbnl.s[103]++, /(\d{1,3})/); // Match integers: 79, 255, etc.
          var DECIMAL = (cov_2j9d41fbnl.s[104]++, /((?:\d+(?:\.\d+)?)|(?:\.\d+))/); // Match 129.6, 79, .9, etc.
          var PERCENT = (cov_2j9d41fbnl.s[105]++,
          new RegExp(''.concat(DECIMAL.source, '%'))); // Match 12.9%, 79%, .9%, etc.

          /**
           * Full color string patterns. The capture groups are necessary.
           */
          var colorPatterns = (cov_2j9d41fbnl.s[106]++,
          {
            // Match colors in format #XXX, e.g. #416.
            HEX3: /^#([a-f0-9])([a-f0-9])([a-f0-9])$/i,

            // Match colors in format #XXXX, e.g. #5123.
            HEX4: /^#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])$/i,

            // Match colors in format #XXXXXX, e.g. #b4d455.
            HEX6: /^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i,

            // Match colors in format #XXXXXXXX, e.g. #b4d45535.
            HEX8: /^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i,

            // Match colors in format rgb(R, G, B), e.g. rgb(255, 0, 128).
            RGB: new RegExp(
              [
                '^rgb\\(',
                INTEGER.source,
                ',',
                INTEGER.source,
                ',',
                INTEGER.source,
                '\\)$'
              ].join(WHITESPACE.source),
              'i'
            ),

            // Match colors in format rgb(R%, G%, B%), e.g. rgb(100%, 0%, 28.9%).
            RGB_PERCENT: new RegExp(
              [
                '^rgb\\(',
                PERCENT.source,
                ',',
                PERCENT.source,
                ',',
                PERCENT.source,
                '\\)$'
              ].join(WHITESPACE.source),
              'i'
            ),

            // Match colors in format rgb(R, G, B, A), e.g. rgb(255, 0, 128, 0.25).
            RGBA: new RegExp(
              [
                '^rgba\\(',
                INTEGER.source,
                ',',
                INTEGER.source,
                ',',
                INTEGER.source,
                ',',
                DECIMAL.source,
                '\\)$'
              ].join(WHITESPACE.source),
              'i'
            ),

            // Match colors in format rgb(R%, G%, B%, A), e.g. rgb(100%, 0%, 28.9%, 0.5).
            RGBA_PERCENT: new RegExp(
              [
                '^rgba\\(',
                PERCENT.source,
                ',',
                PERCENT.source,
                ',',
                PERCENT.source,
                ',',
                DECIMAL.source,
                '\\)$'
              ].join(WHITESPACE.source),
              'i'
            ),

            // Match colors in format hsla(H, S%, L%), e.g. hsl(100, 40%, 28.9%).
            HSL: new RegExp(
              [
                '^hsl\\(',
                INTEGER.source,
                ',',
                PERCENT.source,
                ',',
                PERCENT.source,
                '\\)$'
              ].join(WHITESPACE.source),
              'i'
            ),

            // Match colors in format hsla(H, S%, L%, A), e.g. hsla(100, 40%, 28.9%, 0.5).
            HSLA: new RegExp(
              [
                '^hsla\\(',
                INTEGER.source,
                ',',
                PERCENT.source,
                ',',
                PERCENT.source,
                ',',
                DECIMAL.source,
                '\\)$'
              ].join(WHITESPACE.source),
              'i'
            ),

            // Match colors in format hsb(H, S%, B%), e.g. hsb(100, 40%, 28.9%).
            HSB: new RegExp(
              [
                '^hsb\\(',
                INTEGER.source,
                ',',
                PERCENT.source,
                ',',
                PERCENT.source,
                '\\)$'
              ].join(WHITESPACE.source),
              'i'
            ),

            // Match colors in format hsba(H, S%, B%, A), e.g. hsba(100, 40%, 28.9%, 0.5).
            HSBA: new RegExp(
              [
                '^hsba\\(',
                INTEGER.source,
                ',',
                PERCENT.source,
                ',',
                PERCENT.source,
                ',',
                DECIMAL.source,
                '\\)$'
              ].join(WHITESPACE.source),
              'i'
            )
          });

          /**
           * For a number of different inputs, returns a color formatted as [r, g, b, a]
           * arrays, with each component normalized between 0 and 1.
           *
           * @private
           * @param {Array} [...args] An 'array-like' object that represents a list of
           *                          arguments
           * @return {Number[]}       a color formatted as [r, g, b, a]
           *                          Example:
           *                          input        ==> output
           *                          g            ==> [g, g, g, 255]
           *                          g,a          ==> [g, g, g, a]
           *                          r, g, b      ==> [r, g, b, 255]
           *                          r, g, b, a   ==> [r, g, b, a]
           *                          [g]          ==> [g, g, g, 255]
           *                          [g, a]       ==> [g, g, g, a]
           *                          [r, g, b]    ==> [r, g, b, 255]
           *                          [r, g, b, a] ==> [r, g, b, a]
           * @example
           * <div>
           * <code>
           * // todo
           * </code>
           * </div>
           *
           * @alt
           * //todo
           */ cov_2j9d41fbnl.s[107]++;
          _main.default.Color._parseInputs = function(r, g, b, a) {
            cov_2j9d41fbnl.f[18]++;
            var numArgs = (cov_2j9d41fbnl.s[108]++, arguments.length);
            var mode = (cov_2j9d41fbnl.s[109]++, this.mode);
            var maxes = (cov_2j9d41fbnl.s[110]++, this.maxes[mode]);
            var results = (cov_2j9d41fbnl.s[111]++, []);
            var i;
            cov_2j9d41fbnl.s[112]++;

            if (numArgs >= 3) {
              cov_2j9d41fbnl.b[26][0]++;
              cov_2j9d41fbnl.s[113]++;
              // Argument is a list of component values.

              results[0] = r / maxes[0];
              cov_2j9d41fbnl.s[114]++;
              results[1] = g / maxes[1];
              cov_2j9d41fbnl.s[115]++;
              results[2] = b / maxes[2];

              // Alpha may be undefined, so default it to 100%.
              cov_2j9d41fbnl.s[116]++;
              if (typeof a === 'number') {
                cov_2j9d41fbnl.b[27][0]++;
                cov_2j9d41fbnl.s[117]++;
                results[3] = a / maxes[3];
              } else {
                cov_2j9d41fbnl.b[27][1]++;
                cov_2j9d41fbnl.s[118]++;
                results[3] = 1;
              }

              // Constrain components to the range [0,1].
              // (loop backwards for performance)
              cov_2j9d41fbnl.s[119]++;
              for (i = results.length - 1; i >= 0; --i) {
                var result = (cov_2j9d41fbnl.s[120]++, results[i]);
                cov_2j9d41fbnl.s[121]++;
                if (result < 0) {
                  cov_2j9d41fbnl.b[28][0]++;
                  cov_2j9d41fbnl.s[122]++;
                  results[i] = 0;
                } else {
                  cov_2j9d41fbnl.b[28][1]++;
                  cov_2j9d41fbnl.s[123]++;
                  if (result > 1) {
                    cov_2j9d41fbnl.b[29][0]++;
                    cov_2j9d41fbnl.s[124]++;
                    results[i] = 1;
                  } else {
                    cov_2j9d41fbnl.b[29][1]++;
                  }
                }
              }

              // Convert to RGBA and return.
              cov_2j9d41fbnl.s[125]++;
              if (mode === constants.HSL) {
                cov_2j9d41fbnl.b[30][0]++;
                cov_2j9d41fbnl.s[126]++;
                return _color_conversion.default._hslaToRGBA(results);
              } else {
                cov_2j9d41fbnl.b[30][1]++;
                cov_2j9d41fbnl.s[127]++;
                if (mode === constants.HSB) {
                  cov_2j9d41fbnl.b[31][0]++;
                  cov_2j9d41fbnl.s[128]++;
                  return _color_conversion.default._hsbaToRGBA(results);
                } else {
                  cov_2j9d41fbnl.b[31][1]++;
                  cov_2j9d41fbnl.s[129]++;
                  return results;
                }
              }
            } else {
              cov_2j9d41fbnl.b[26][1]++;
              cov_2j9d41fbnl.s[130]++;
              if (
                (cov_2j9d41fbnl.b[33][0]++, numArgs === 1) &&
                (cov_2j9d41fbnl.b[33][1]++, typeof r === 'string')
              ) {
                cov_2j9d41fbnl.b[32][0]++;
                var str = (cov_2j9d41fbnl.s[131]++, r.trim().toLowerCase());

                // Return if string is a named colour.
                cov_2j9d41fbnl.s[132]++;
                if (namedColors[str]) {
                  cov_2j9d41fbnl.b[34][0]++;
                  cov_2j9d41fbnl.s[133]++;
                  return _main.default.Color._parseInputs.call(this, namedColors[str]);
                } else {
                  cov_2j9d41fbnl.b[34][1]++;
                }

                // Try RGBA pattern matching.
                cov_2j9d41fbnl.s[134]++;
                if (colorPatterns.HEX3.test(str)) {
                  cov_2j9d41fbnl.b[35][0]++;
                  cov_2j9d41fbnl.s[135]++;
                  // #rgb
                  results = colorPatterns.HEX3.exec(str)
                    .slice(1)
                    .map(function(color) {
                      cov_2j9d41fbnl.f[19]++;
                      cov_2j9d41fbnl.s[136]++;
                      return parseInt(color + color, 16) / 255;
                    });
                  cov_2j9d41fbnl.s[137]++;
                  results[3] = 1;
                  cov_2j9d41fbnl.s[138]++;
                  return results;
                } else {
                  cov_2j9d41fbnl.b[35][1]++;
                  cov_2j9d41fbnl.s[139]++;
                  if (colorPatterns.HEX6.test(str)) {
                    cov_2j9d41fbnl.b[36][0]++;
                    cov_2j9d41fbnl.s[140]++;
                    // #rrggbb
                    results = colorPatterns.HEX6.exec(str)
                      .slice(1)
                      .map(function(color) {
                        cov_2j9d41fbnl.f[20]++;
                        cov_2j9d41fbnl.s[141]++;
                        return parseInt(color, 16) / 255;
                      });
                    cov_2j9d41fbnl.s[142]++;
                    results[3] = 1;
                    cov_2j9d41fbnl.s[143]++;
                    return results;
                  } else {
                    cov_2j9d41fbnl.b[36][1]++;
                    cov_2j9d41fbnl.s[144]++;
                    if (colorPatterns.HEX4.test(str)) {
                      cov_2j9d41fbnl.b[37][0]++;
                      cov_2j9d41fbnl.s[145]++;
                      // #rgba
                      results = colorPatterns.HEX4.exec(str)
                        .slice(1)
                        .map(function(color) {
                          cov_2j9d41fbnl.f[21]++;
                          cov_2j9d41fbnl.s[146]++;
                          return parseInt(color + color, 16) / 255;
                        });
                      cov_2j9d41fbnl.s[147]++;
                      return results;
                    } else {
                      cov_2j9d41fbnl.b[37][1]++;
                      cov_2j9d41fbnl.s[148]++;
                      if (colorPatterns.HEX8.test(str)) {
                        cov_2j9d41fbnl.b[38][0]++;
                        cov_2j9d41fbnl.s[149]++;
                        // #rrggbbaa
                        results = colorPatterns.HEX8.exec(str)
                          .slice(1)
                          .map(function(color) {
                            cov_2j9d41fbnl.f[22]++;
                            cov_2j9d41fbnl.s[150]++;
                            return parseInt(color, 16) / 255;
                          });
                        cov_2j9d41fbnl.s[151]++;
                        return results;
                      } else {
                        cov_2j9d41fbnl.b[38][1]++;
                        cov_2j9d41fbnl.s[152]++;
                        if (colorPatterns.RGB.test(str)) {
                          cov_2j9d41fbnl.b[39][0]++;
                          cov_2j9d41fbnl.s[153]++;
                          // rgb(R,G,B)
                          results = colorPatterns.RGB.exec(str)
                            .slice(1)
                            .map(function(color) {
                              cov_2j9d41fbnl.f[23]++;
                              cov_2j9d41fbnl.s[154]++;
                              return color / 255;
                            });
                          cov_2j9d41fbnl.s[155]++;
                          results[3] = 1;
                          cov_2j9d41fbnl.s[156]++;
                          return results;
                        } else {
                          cov_2j9d41fbnl.b[39][1]++;
                          cov_2j9d41fbnl.s[157]++;
                          if (colorPatterns.RGB_PERCENT.test(str)) {
                            cov_2j9d41fbnl.b[40][0]++;
                            cov_2j9d41fbnl.s[158]++;
                            // rgb(R%,G%,B%)
                            results = colorPatterns.RGB_PERCENT.exec(str)
                              .slice(1)
                              .map(function(color) {
                                cov_2j9d41fbnl.f[24]++;
                                cov_2j9d41fbnl.s[159]++;
                                return parseFloat(color) / 100;
                              });
                            cov_2j9d41fbnl.s[160]++;
                            results[3] = 1;
                            cov_2j9d41fbnl.s[161]++;
                            return results;
                          } else {
                            cov_2j9d41fbnl.b[40][1]++;
                            cov_2j9d41fbnl.s[162]++;
                            if (colorPatterns.RGBA.test(str)) {
                              cov_2j9d41fbnl.b[41][0]++;
                              cov_2j9d41fbnl.s[163]++;
                              // rgba(R,G,B,A)
                              results = colorPatterns.RGBA.exec(str)
                                .slice(1)
                                .map(function(color, idx) {
                                  cov_2j9d41fbnl.f[25]++;
                                  cov_2j9d41fbnl.s[164]++;
                                  if (idx === 3) {
                                    cov_2j9d41fbnl.b[42][0]++;
                                    cov_2j9d41fbnl.s[165]++;
                                    return parseFloat(color);
                                  } else {
                                    cov_2j9d41fbnl.b[42][1]++;
                                  }
                                  cov_2j9d41fbnl.s[166]++;
                                  return color / 255;
                                });
                              cov_2j9d41fbnl.s[167]++;
                              return results;
                            } else {
                              cov_2j9d41fbnl.b[41][1]++;
                              cov_2j9d41fbnl.s[168]++;
                              if (colorPatterns.RGBA_PERCENT.test(str)) {
                                cov_2j9d41fbnl.b[43][0]++;
                                cov_2j9d41fbnl.s[169]++;
                                // rgba(R%,G%,B%,A%)
                                results = colorPatterns.RGBA_PERCENT.exec(str)
                                  .slice(1)
                                  .map(function(color, idx) {
                                    cov_2j9d41fbnl.f[26]++;
                                    cov_2j9d41fbnl.s[170]++;
                                    if (idx === 3) {
                                      cov_2j9d41fbnl.b[44][0]++;
                                      cov_2j9d41fbnl.s[171]++;
                                      return parseFloat(color);
                                    } else {
                                      cov_2j9d41fbnl.b[44][1]++;
                                    }
                                    cov_2j9d41fbnl.s[172]++;
                                    return parseFloat(color) / 100;
                                  });
                                cov_2j9d41fbnl.s[173]++;
                                return results;
                              } else {
                                cov_2j9d41fbnl.b[43][1]++;
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }

                // Try HSLA pattern matching.
                cov_2j9d41fbnl.s[174]++;
                if (colorPatterns.HSL.test(str)) {
                  cov_2j9d41fbnl.b[45][0]++;
                  cov_2j9d41fbnl.s[175]++;
                  // hsl(H,S,L)
                  results = colorPatterns.HSL.exec(str)
                    .slice(1)
                    .map(function(color, idx) {
                      cov_2j9d41fbnl.f[27]++;
                      cov_2j9d41fbnl.s[176]++;
                      if (idx === 0) {
                        cov_2j9d41fbnl.b[46][0]++;
                        cov_2j9d41fbnl.s[177]++;
                        return parseInt(color, 10) / 360;
                      } else {
                        cov_2j9d41fbnl.b[46][1]++;
                      }
                      cov_2j9d41fbnl.s[178]++;
                      return parseInt(color, 10) / 100;
                    });
                  cov_2j9d41fbnl.s[179]++;
                  results[3] = 1;
                } else {
                  cov_2j9d41fbnl.b[45][1]++;
                  cov_2j9d41fbnl.s[180]++;
                  if (colorPatterns.HSLA.test(str)) {
                    cov_2j9d41fbnl.b[47][0]++;
                    cov_2j9d41fbnl.s[181]++;
                    // hsla(H,S,L,A)
                    results = colorPatterns.HSLA.exec(str)
                      .slice(1)
                      .map(function(color, idx) {
                        cov_2j9d41fbnl.f[28]++;
                        cov_2j9d41fbnl.s[182]++;
                        if (idx === 0) {
                          cov_2j9d41fbnl.b[48][0]++;
                          cov_2j9d41fbnl.s[183]++;
                          return parseInt(color, 10) / 360;
                        } else {
                          cov_2j9d41fbnl.b[48][1]++;
                          cov_2j9d41fbnl.s[184]++;
                          if (idx === 3) {
                            cov_2j9d41fbnl.b[49][0]++;
                            cov_2j9d41fbnl.s[185]++;
                            return parseFloat(color);
                          } else {
                            cov_2j9d41fbnl.b[49][1]++;
                          }
                        }
                        cov_2j9d41fbnl.s[186]++;
                        return parseInt(color, 10) / 100;
                      });
                  } else {
                    cov_2j9d41fbnl.b[47][1]++;
                  }
                }
                cov_2j9d41fbnl.s[187]++;
                results = results.map(function(value) {
                  cov_2j9d41fbnl.f[29]++;
                  cov_2j9d41fbnl.s[188]++;
                  return Math.max(Math.min(value, 1), 0);
                });
                cov_2j9d41fbnl.s[189]++;
                if (results.length) {
                  cov_2j9d41fbnl.b[50][0]++;
                  cov_2j9d41fbnl.s[190]++;
                  return _color_conversion.default._hslaToRGBA(results);
                } else {
                  cov_2j9d41fbnl.b[50][1]++;
                }

                // Try HSBA pattern matching.
                cov_2j9d41fbnl.s[191]++;
                if (colorPatterns.HSB.test(str)) {
                  cov_2j9d41fbnl.b[51][0]++;
                  cov_2j9d41fbnl.s[192]++;
                  // hsb(H,S,B)
                  results = colorPatterns.HSB.exec(str)
                    .slice(1)
                    .map(function(color, idx) {
                      cov_2j9d41fbnl.f[30]++;
                      cov_2j9d41fbnl.s[193]++;
                      if (idx === 0) {
                        cov_2j9d41fbnl.b[52][0]++;
                        cov_2j9d41fbnl.s[194]++;
                        return parseInt(color, 10) / 360;
                      } else {
                        cov_2j9d41fbnl.b[52][1]++;
                      }
                      cov_2j9d41fbnl.s[195]++;
                      return parseInt(color, 10) / 100;
                    });
                  cov_2j9d41fbnl.s[196]++;
                  results[3] = 1;
                } else {
                  cov_2j9d41fbnl.b[51][1]++;
                  cov_2j9d41fbnl.s[197]++;
                  if (colorPatterns.HSBA.test(str)) {
                    cov_2j9d41fbnl.b[53][0]++;
                    cov_2j9d41fbnl.s[198]++;
                    // hsba(H,S,B,A)
                    results = colorPatterns.HSBA.exec(str)
                      .slice(1)
                      .map(function(color, idx) {
                        cov_2j9d41fbnl.f[31]++;
                        cov_2j9d41fbnl.s[199]++;
                        if (idx === 0) {
                          cov_2j9d41fbnl.b[54][0]++;
                          cov_2j9d41fbnl.s[200]++;
                          return parseInt(color, 10) / 360;
                        } else {
                          cov_2j9d41fbnl.b[54][1]++;
                          cov_2j9d41fbnl.s[201]++;
                          if (idx === 3) {
                            cov_2j9d41fbnl.b[55][0]++;
                            cov_2j9d41fbnl.s[202]++;
                            return parseFloat(color);
                          } else {
                            cov_2j9d41fbnl.b[55][1]++;
                          }
                        }
                        cov_2j9d41fbnl.s[203]++;
                        return parseInt(color, 10) / 100;
                      });
                  } else {
                    cov_2j9d41fbnl.b[53][1]++;
                  }
                }
                cov_2j9d41fbnl.s[204]++;

                if (results.length) {
                  cov_2j9d41fbnl.b[56][0]++;
                  cov_2j9d41fbnl.s[205]++;
                  // (loop backwards for performance)
                  for (i = results.length - 1; i >= 0; --i) {
                    cov_2j9d41fbnl.s[206]++;
                    results[i] = Math.max(Math.min(results[i], 1), 0);
                  }
                  cov_2j9d41fbnl.s[207]++;

                  return _color_conversion.default._hsbaToRGBA(results);
                } else {
                  cov_2j9d41fbnl.b[56][1]++;
                }

                // Input did not match any CSS color pattern: default to white.
                cov_2j9d41fbnl.s[208]++;
                results = [1, 1, 1, 1];
              } else {
                cov_2j9d41fbnl.b[32][1]++;
                cov_2j9d41fbnl.s[209]++;
                if (
                  ((cov_2j9d41fbnl.b[58][0]++, numArgs === 1) ||
                    (cov_2j9d41fbnl.b[58][1]++, numArgs === 2)) &&
                  (cov_2j9d41fbnl.b[58][2]++, typeof r === 'number')
                ) {
                  cov_2j9d41fbnl.b[57][0]++;
                  cov_2j9d41fbnl.s[210]++;
                  // 'Grayscale' mode.

                  /**
                   * For HSB and HSL, interpret the gray level as a brightness/lightness
                   * value (they are equivalent when chroma is zero). For RGB, normalize the
                   * gray level according to the blue maximum.
                   */
                  results[0] = r / maxes[2];
                  cov_2j9d41fbnl.s[211]++;
                  results[1] = r / maxes[2];
                  cov_2j9d41fbnl.s[212]++;
                  results[2] = r / maxes[2];

                  // Alpha may be undefined, so default it to 100%.
                  cov_2j9d41fbnl.s[213]++;
                  if (typeof g === 'number') {
                    cov_2j9d41fbnl.b[59][0]++;
                    cov_2j9d41fbnl.s[214]++;
                    results[3] = g / maxes[3];
                  } else {
                    cov_2j9d41fbnl.b[59][1]++;
                    cov_2j9d41fbnl.s[215]++;
                    results[3] = 1;
                  }

                  // Constrain components to the range [0,1].
                  cov_2j9d41fbnl.s[216]++;
                  results = results.map(function(value) {
                    cov_2j9d41fbnl.f[32]++;
                    cov_2j9d41fbnl.s[217]++;
                    return Math.max(Math.min(value, 1), 0);
                  });
                } else {
                  cov_2j9d41fbnl.b[57][1]++;
                  cov_2j9d41fbnl.s[218]++;
                  throw new Error(
                    ''.concat(arguments, 'is not a valid color representation.')
                  );
                }
              }
            }
            cov_2j9d41fbnl.s[219]++;

            return results;
          };
          var _default = _main.default.Color;
          exports.default = _default;
        },
        {
          '../core/constants': 272,
          '../core/main': 283,
          './color_conversion': 268,
          'core-js/modules/es.array.join': 175,
          'core-js/modules/es.array.map': 177,
          'core-js/modules/es.array.slice': 178,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.regexp.constructor': 195,
          'core-js/modules/es.regexp.exec': 196,
          'core-js/modules/es.regexp.to-string': 197,
          'core-js/modules/es.string.trim': 208
        }
      ],
      271: [
        function(_dereq_, module, exports) {
          'use strict';
          function _typeof(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof = function _typeof(obj) {
                return typeof obj;
              };
            } else {
              _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof(obj);
          }
          var cov_1ff5jdk8c6 = (function() {
            var path = '/Users/outofambit/src/p5.js/src/color/setting.js';
            var hash = '1c96fd547468a64f6c9bc9e572ba641dd9e0a04f';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/color/setting.js',
              statementMap: {
                '0': { start: { line: 175, column: 0 }, end: { line: 178, column: 2 } },
                '1': { start: { line: 176, column: 2 }, end: { line: 176, column: 37 } },
                '2': { start: { line: 177, column: 2 }, end: { line: 177, column: 14 } },
                '3': { start: { line: 209, column: 0 }, end: { line: 212, column: 2 } },
                '4': { start: { line: 210, column: 2 }, end: { line: 210, column: 25 } },
                '5': { start: { line: 211, column: 2 }, end: { line: 211, column: 14 } },
                '6': { start: { line: 301, column: 0 }, end: { line: 331, column: 2 } },
                '7': { start: { line: 302, column: 2 }, end: { line: 302, column: 49 } },
                '8': { start: { line: 303, column: 2 }, end: { line: 328, column: 3 } },
                '9': { start: { line: 309, column: 4 }, end: { line: 309, column: 27 } },
                '10': { start: { line: 312, column: 18 }, end: { line: 312, column: 40 } },
                '11': { start: { line: 313, column: 4 }, end: { line: 327, column: 5 } },
                '12': { start: { line: 314, column: 6 }, end: { line: 314, column: 22 } },
                '13': { start: { line: 315, column: 6 }, end: { line: 315, column: 22 } },
                '14': { start: { line: 316, column: 6 }, end: { line: 316, column: 22 } },
                '15': { start: { line: 317, column: 6 }, end: { line: 317, column: 22 } },
                '16': { start: { line: 318, column: 11 }, end: { line: 327, column: 5 } },
                '17': { start: { line: 319, column: 6 }, end: { line: 319, column: 22 } },
                '18': { start: { line: 320, column: 6 }, end: { line: 320, column: 22 } },
                '19': { start: { line: 321, column: 6 }, end: { line: 321, column: 22 } },
                '20': { start: { line: 322, column: 11 }, end: { line: 327, column: 5 } },
                '21': { start: { line: 323, column: 6 }, end: { line: 323, column: 22 } },
                '22': { start: { line: 324, column: 6 }, end: { line: 324, column: 22 } },
                '23': { start: { line: 325, column: 6 }, end: { line: 325, column: 22 } },
                '24': { start: { line: 326, column: 6 }, end: { line: 326, column: 22 } },
                '25': { start: { line: 330, column: 2 }, end: { line: 330, column: 14 } },
                '26': { start: { line: 485, column: 0 }, end: { line: 490, column: 2 } },
                '27': { start: { line: 486, column: 2 }, end: { line: 486, column: 48 } },
                '28': { start: { line: 487, column: 2 }, end: { line: 487, column: 47 } },
                '29': { start: { line: 488, column: 2 }, end: { line: 488, column: 31 } },
                '30': { start: { line: 489, column: 2 }, end: { line: 489, column: 14 } },
                '31': { start: { line: 528, column: 0 }, end: { line: 531, column: 2 } },
                '32': { start: { line: 529, column: 2 }, end: { line: 529, column: 48 } },
                '33': { start: { line: 530, column: 2 }, end: { line: 530, column: 14 } },
                '34': { start: { line: 568, column: 0 }, end: { line: 571, column: 2 } },
                '35': { start: { line: 569, column: 2 }, end: { line: 569, column: 50 } },
                '36': { start: { line: 570, column: 2 }, end: { line: 570, column: 14 } },
                '37': { start: { line: 738, column: 0 }, end: { line: 743, column: 2 } },
                '38': { start: { line: 739, column: 2 }, end: { line: 739, column: 50 } },
                '39': { start: { line: 740, column: 2 }, end: { line: 740, column: 49 } },
                '40': { start: { line: 741, column: 2 }, end: { line: 741, column: 33 } },
                '41': { start: { line: 742, column: 2 }, end: { line: 742, column: 14 } },
                '42': { start: { line: 819, column: 0 }, end: { line: 823, column: 2 } },
                '43': { start: { line: 820, column: 2 }, end: { line: 820, column: 51 } },
                '44': { start: { line: 822, column: 2 }, end: { line: 822, column: 14 } },
                '45': { start: { line: 851, column: 0 }, end: { line: 854, column: 2 } },
                '46': { start: { line: 852, column: 2 }, end: { line: 852, column: 27 } },
                '47': { start: { line: 853, column: 2 }, end: { line: 853, column: 14 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: {
                    start: { line: 175, column: 26 },
                    end: { line: 175, column: 27 }
                  },
                  loc: { start: { line: 175, column: 44 }, end: { line: 178, column: 1 } },
                  line: 175
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: {
                    start: { line: 209, column: 21 },
                    end: { line: 209, column: 22 }
                  },
                  loc: { start: { line: 209, column: 32 }, end: { line: 212, column: 1 } },
                  line: 209
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 301, column: 25 },
                    end: { line: 301, column: 26 }
                  },
                  loc: { start: { line: 301, column: 64 }, end: { line: 331, column: 1 } },
                  line: 301
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 485, column: 20 },
                    end: { line: 485, column: 21 }
                  },
                  loc: { start: { line: 485, column: 38 }, end: { line: 490, column: 1 } },
                  line: 485
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 528, column: 22 },
                    end: { line: 528, column: 23 }
                  },
                  loc: { start: { line: 528, column: 33 }, end: { line: 531, column: 1 } },
                  line: 528
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 568, column: 24 },
                    end: { line: 568, column: 25 }
                  },
                  loc: { start: { line: 568, column: 35 }, end: { line: 571, column: 1 } },
                  line: 568
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 738, column: 22 },
                    end: { line: 738, column: 23 }
                  },
                  loc: { start: { line: 738, column: 40 }, end: { line: 743, column: 1 } },
                  line: 738
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 819, column: 21 },
                    end: { line: 819, column: 22 }
                  },
                  loc: { start: { line: 819, column: 70 }, end: { line: 823, column: 1 } },
                  line: 819
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 851, column: 23 },
                    end: { line: 851, column: 24 }
                  },
                  loc: { start: { line: 851, column: 34 }, end: { line: 854, column: 1 } },
                  line: 851
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 303, column: 2 }, end: { line: 328, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 303, column: 2 }, end: { line: 328, column: 3 } },
                    { start: { line: 303, column: 2 }, end: { line: 328, column: 3 } }
                  ],
                  line: 303
                },
                '1': {
                  loc: { start: { line: 304, column: 4 }, end: { line: 306, column: 26 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 304, column: 4 }, end: { line: 304, column: 26 } },
                    { start: { line: 305, column: 4 }, end: { line: 305, column: 26 } },
                    { start: { line: 306, column: 4 }, end: { line: 306, column: 26 } }
                  ],
                  line: 304
                },
                '2': {
                  loc: { start: { line: 313, column: 4 }, end: { line: 327, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 313, column: 4 }, end: { line: 327, column: 5 } },
                    { start: { line: 313, column: 4 }, end: { line: 327, column: 5 } }
                  ],
                  line: 313
                },
                '3': {
                  loc: { start: { line: 318, column: 11 }, end: { line: 327, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 318, column: 11 }, end: { line: 327, column: 5 } },
                    { start: { line: 318, column: 11 }, end: { line: 327, column: 5 } }
                  ],
                  line: 318
                },
                '4': {
                  loc: { start: { line: 322, column: 11 }, end: { line: 327, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 322, column: 11 }, end: { line: 327, column: 5 } },
                    { start: { line: 322, column: 11 }, end: { line: 327, column: 5 } }
                  ],
                  line: 322
                },
                '5': {
                  loc: { start: { line: 819, column: 30 }, end: { line: 819, column: 47 } },
                  type: 'default-arg',
                  locations: [
                    { start: { line: 819, column: 44 }, end: { line: 819, column: 47 } }
                  ],
                  line: 819
                },
                '6': {
                  loc: { start: { line: 819, column: 49 }, end: { line: 819, column: 68 } },
                  type: 'default-arg',
                  locations: [
                    { start: { line: 819, column: 65 }, end: { line: 819, column: 68 } }
                  ],
                  line: 819
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0
              },
              f: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0, '8': 0 },
              b: {
                '0': [0, 0],
                '1': [0, 0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0],
                '6': [0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '1c96fd547468a64f6c9bc9e572ba641dd9e0a04f'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.fill');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          var constants = _interopRequireWildcard(_dereq_('../core/constants'));
          _dereq_('./p5.Color');
          function _getRequireWildcardCache() {
            if (typeof WeakMap !== 'function') return null;
            var cache = new WeakMap();
            _getRequireWildcardCache = function _getRequireWildcardCache() {
              return cache;
            };
            return cache;
          }
          function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
              return obj;
            }
            if (obj === null || (_typeof(obj) !== 'object' && typeof obj !== 'function')) {
              return { default: obj };
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
              return cache.get(obj);
            }
            var newObj = {};
            var hasPropertyDescriptor =
              Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
              if (Object.prototype.hasOwnProperty.call(obj, key)) {
                var desc = hasPropertyDescriptor
                  ? Object.getOwnPropertyDescriptor(obj, key)
                  : null;
                if (desc && (desc.get || desc.set)) {
                  Object.defineProperty(newObj, key, desc);
                } else {
                  newObj[key] = obj[key];
                }
              }
            }
            newObj.default = obj;
            if (cache) {
              cache.set(obj, newObj);
            }
            return newObj;
          }
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_1ff5jdk8c6.s[0]++;

          /**
           * The <a href="#/p5/background">background()</a> function sets the color used
           * for the background of the p5.js canvas. The default background is transparent.
           * This function is typically used within <a href="#/p5/draw">draw()</a> to clear
           * the display window at the beginning of each frame, but it can be used inside
           * <a href="#/p5/setup">setup()</a> to set the background on the first frame of
           * animation or if the background need only be set once.
           *
           * The color is either specified in terms of the RGB, HSB, or HSL color depending
           * on the current <a href="#/p5/colorMode">colorMode</a>. (The default color space
           * is RGB, with each value in the range from 0 to 255). The alpha range by default
           * is also 0 to 255.<br><br>
           *
           * If a single string argument is provided, RGB, RGBA and Hex CSS color strings
           * and all named color strings are supported. In this case, an alpha number
           * value as a second argument is not supported, the RGBA form should be used.
           *
           * A <a href="#/p5.Color">p5.Color</a> object can also be provided to set the background color.
           *
           * A <a href="#/p5.Image">p5.Image</a> can also be provided to set the background image.
           *
           * @method background
           * @param {p5.Color} color  any value created by the <a href="#/p5/color">color()</a> function
           * @chainable
           *
           * @example
           * <div>
           * <code>
           * // Grayscale integer value
           * background(51);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // R, G & B integer values
           * background(255, 204, 0);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // H, S & B integer values
           * colorMode(HSB);
           * background(255, 204, 100);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // Named SVG/CSS color string
           * background('red');
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // three-digit hexadecimal RGB notation
           * background('#fae');
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // six-digit hexadecimal RGB notation
           * background('#222222');
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // integer RGB notation
           * background('rgb(0,255,0)');
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // integer RGBA notation
           * background('rgba(0,255,0, 0.25)');
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // percentage RGB notation
           * background('rgb(100%,0%,10%)');
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // percentage RGBA notation
           * background('rgba(100%,0%,100%,0.5)');
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // p5 Color object
           * background(color(0, 0, 255));
           * </code>
           * </div>
           *
           * @alt
           * canvas with darkest charcoal grey background.
           * canvas with yellow background.
           * canvas with royal blue background.
           * canvas with red background.
           * canvas with pink background.
           * canvas with black background.
           * canvas with bright green background.
           * canvas with soft green background.
           * canvas with red background.
           * canvas with light purple background.
           * canvas with blue background.
           */

          /**
           * @method background
           * @param {String} colorstring color string, possible formats include: integer
           *                         rgb() or rgba(), percentage rgb() or rgba(),
           *                         3-digit hex, 6-digit hex
           * @param {Number} [a]         opacity of the background relative to current
           *                             color range (default is 0-255)
           * @chainable
           */

          /**
           * @method background
           * @param {Number} gray   specifies a value between white and black
           * @param {Number} [a]
           * @chainable
           */

          /**
           * @method background
           * @param {Number} v1     red or hue value (depending on the current color
           *                        mode)
           * @param {Number} v2     green or saturation value (depending on the current
           *                        color mode)
           * @param {Number} v3     blue or brightness value (depending on the current
           *                        color mode)
           * @param  {Number} [a]
           * @chainable
           */

          /**
           * @method background
           * @param  {Number[]}      values  an array containing the red, green, blue
           *                                 and alpha components of the color
           * @chainable
           */

          /**
           * @method background
           * @param {p5.Image} image     image created with <a href="#/p5/loadImage">loadImage()</a> or <a href="#/p5/createImage">createImage()</a>,
           *                             to set as background
           *                             (must be same size as the sketch window)
           * @param  {Number}  [a]
           * @chainable
           */
          _main.default.prototype.background = function() {
            var _this$_renderer;
            cov_1ff5jdk8c6.f[0]++;
            cov_1ff5jdk8c6.s[1]++;
            (_this$_renderer = this._renderer).background.apply(_this$_renderer, arguments);
            cov_1ff5jdk8c6.s[2]++;
            return this;
          };

          /**
           * Clears the pixels within a buffer. This function only clears the canvas.
           * It will not clear objects created by createX() methods such as
           * <a href="#/p5/createVideo">createVideo()</a> or <a href="#/p5/createDiv">createDiv()</a>.
           * Unlike the main graphics context, pixels in additional graphics areas created
           * with <a href="#/p5/createGraphics">createGraphics()</a> can be entirely
           * or partially transparent. This function clears everything to make all of
           * the pixels 100% transparent.
           *
           * @method clear
           * @chainable
           * @example
           * <div>
           * <code>
           * // Clear the screen on mouse press.
           * function draw() {
           *   ellipse(mouseX, mouseY, 20, 20);
           * }
           * function mousePressed() {
           *   clear();
           *   background(128);
           * }
           * </code>
           * </div>
           *
           * @alt
           * small white ellipses are continually drawn at mouse's x and y coordinates.
           */ cov_1ff5jdk8c6.s[3]++;

          _main.default.prototype.clear = function() {
            cov_1ff5jdk8c6.f[1]++;
            cov_1ff5jdk8c6.s[4]++;
            this._renderer.clear();
            cov_1ff5jdk8c6.s[5]++;
            return this;
          };

          /**
           * <a href="#/p5/colorMode">colorMode()</a> changes the way p5.js interprets
           * color data. By default, the parameters for <a href="#/p5/fill">fill()</a>,
           * <a href="#/p5/stroke">stroke()</a>, <a href="#/p5/background">background()</a>,
           * and <a href="#/p5/color">color()</a> are defined by values between 0 and 255
           * using the RGB color model. This is equivalent to setting colorMode(RGB, 255).
           * Setting colorMode(HSB) lets you use the HSB system instead. By default, this
           * is colorMode(HSB, 360, 100, 100, 1). You can also use HSL.
           *
           * Note: existing color objects remember the mode that they were created in,
           * so you can change modes as you like without affecting their appearance.
           *
           * @method colorMode
           * @param {Constant} mode   either RGB, HSB or HSL, corresponding to
           *                          Red/Green/Blue and Hue/Saturation/Brightness
           *                          (or Lightness)
           * @param {Number}  [max]  range for all values
           * @chainable
           *
           * @example
           * <div>
           * <code>
           * noStroke();
           * colorMode(RGB, 100);
           * for (let i = 0; i < 100; i++) {
           *   for (let j = 0; j < 100; j++) {
           *     stroke(i, j, 0);
           *     point(i, j);
           *   }
           * }
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * noStroke();
           * colorMode(HSB, 100);
           * for (let i = 0; i < 100; i++) {
           *   for (let j = 0; j < 100; j++) {
           *     stroke(i, j, 100);
           *     point(i, j);
           *   }
           * }
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * colorMode(RGB, 255);
           * let c = color(127, 255, 0);
           * colorMode(RGB, 1);
           * let myColor = c._getRed();
           * text(myColor, 10, 10, 80, 80);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * noFill();
           * colorMode(RGB, 255, 255, 255, 1);
           * background(255);
           * strokeWeight(4);
           * stroke(255, 0, 10, 0.3);
           * ellipse(40, 40, 50, 50);
           * ellipse(50, 50, 40, 40);
           * </code>
           * </div>
           *
           * @alt
           *Green to red gradient from bottom L to top R. shading originates from top left.
           *Rainbow gradient from left to right. Brightness increasing to white at top.
           *unknown image.
           *50x50 ellipse at middle L & 40x40 ellipse at center. Translucent pink outlines.
           */

          /**
           * @method colorMode
           * @param {Constant} mode
           * @param {Number} max1     range for the red or hue depending on the
           *                              current color mode
           * @param {Number} max2     range for the green or saturation depending
           *                              on the current color mode
           * @param {Number} max3     range for the blue or brightness/lightness
           *                              depending on the current color mode
           * @param {Number} [maxA]   range for the alpha
           * @chainable
           */ cov_1ff5jdk8c6.s[6]++;
          _main.default.prototype.colorMode = function(mode, max1, max2, max3, maxA) {
            cov_1ff5jdk8c6.f[2]++;
            cov_1ff5jdk8c6.s[7]++;
            _main.default._validateParameters('colorMode', arguments);
            cov_1ff5jdk8c6.s[8]++;
            if (
              (cov_1ff5jdk8c6.b[1][0]++, mode === constants.RGB) ||
              (cov_1ff5jdk8c6.b[1][1]++, mode === constants.HSB) ||
              (cov_1ff5jdk8c6.b[1][2]++, mode === constants.HSL)
            ) {
              cov_1ff5jdk8c6.b[0][0]++;
              cov_1ff5jdk8c6.s[9]++;
              // Set color mode.
              this._colorMode = mode;

              // Set color maxes.
              var maxes = (cov_1ff5jdk8c6.s[10]++, this._colorMaxes[mode]);
              cov_1ff5jdk8c6.s[11]++;
              if (arguments.length === 2) {
                cov_1ff5jdk8c6.b[2][0]++;
                cov_1ff5jdk8c6.s[12]++;
                maxes[0] = max1; // Red
                cov_1ff5jdk8c6.s[13]++;
                maxes[1] = max1; // Green
                cov_1ff5jdk8c6.s[14]++;
                maxes[2] = max1; // Blue
                cov_1ff5jdk8c6.s[15]++;
                maxes[3] = max1; // Alpha
              } else {
                cov_1ff5jdk8c6.b[2][1]++;
                cov_1ff5jdk8c6.s[16]++;
                if (arguments.length === 4) {
                  cov_1ff5jdk8c6.b[3][0]++;
                  cov_1ff5jdk8c6.s[17]++;
                  maxes[0] = max1; // Red
                  cov_1ff5jdk8c6.s[18]++;
                  maxes[1] = max2; // Green
                  cov_1ff5jdk8c6.s[19]++;
                  maxes[2] = max3; // Blue
                } else {
                  cov_1ff5jdk8c6.b[3][1]++;
                  cov_1ff5jdk8c6.s[20]++;
                  if (arguments.length === 5) {
                    cov_1ff5jdk8c6.b[4][0]++;
                    cov_1ff5jdk8c6.s[21]++;
                    maxes[0] = max1; // Red
                    cov_1ff5jdk8c6.s[22]++;
                    maxes[1] = max2; // Green
                    cov_1ff5jdk8c6.s[23]++;
                    maxes[2] = max3; // Blue
                    cov_1ff5jdk8c6.s[24]++;
                    maxes[3] = maxA; // Alpha
                  } else {
                    cov_1ff5jdk8c6.b[4][1]++;
                  }
                }
              }
            } else {
              cov_1ff5jdk8c6.b[0][1]++;
            }
            cov_1ff5jdk8c6.s[25]++;

            return this;
          };

          /**
           * Sets the color used to fill shapes. For example, if you run fill(204, 102, 0),
           * all shapes drawn after the fill command will be filled with the color orange.
           * This color is either specified in terms of the RGB or HSB color depending on
           * the current <a href="#/p5/colorMode">colorMode()</a>. (The default color space
           * is RGB, with each value in the range from 0 to 255). The alpha range by default
           * is also 0 to 255.
           *
           * If a single string argument is provided, RGB, RGBA and Hex CSS color strings
           * and all named color strings are supported. In this case, an alpha number
           * value as a second argument is not supported, the RGBA form should be used.
           *
           * A p5 <a href="#/p5.Color">Color</a> object can also be provided to set the fill color.
           *
           * @method fill
           * @param  {Number}        v1      red or hue value relative to
           *                                 the current color range
           * @param  {Number}        v2      green or saturation value
           *                                 relative to the current color range
           * @param  {Number}        v3      blue or brightness value
           *                                 relative to the current color range
           * @param  {Number}        [alpha]
           * @chainable
           * @example
           * <div>
           * <code>
           * // Grayscale integer value
           * fill(51);
           * rect(20, 20, 60, 60);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // R, G & B integer values
           * fill(255, 204, 0);
           * rect(20, 20, 60, 60);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // H, S & B integer values
           * colorMode(HSB);
           * fill(255, 204, 100);
           * rect(20, 20, 60, 60);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // Named SVG/CSS color string
           * fill('red');
           * rect(20, 20, 60, 60);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // three-digit hexadecimal RGB notation
           * fill('#fae');
           * rect(20, 20, 60, 60);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // six-digit hexadecimal RGB notation
           * fill('#222222');
           * rect(20, 20, 60, 60);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // integer RGB notation
           * fill('rgb(0,255,0)');
           * rect(20, 20, 60, 60);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // integer RGBA notation
           * fill('rgba(0,255,0, 0.25)');
           * rect(20, 20, 60, 60);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // percentage RGB notation
           * fill('rgb(100%,0%,10%)');
           * rect(20, 20, 60, 60);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // percentage RGBA notation
           * fill('rgba(100%,0%,100%,0.5)');
           * rect(20, 20, 60, 60);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // p5 Color object
           * fill(color(0, 0, 255));
           * rect(20, 20, 60, 60);
           * </code>
           * </div>
           *
           * @alt
           * 60x60 dark charcoal grey rect with black outline in center of canvas.
           * 60x60 yellow rect with black outline in center of canvas.
           * 60x60 royal blue rect with black outline in center of canvas.
           * 60x60 red rect with black outline in center of canvas.
           * 60x60 pink rect with black outline in center of canvas.
           * 60x60 black rect with black outline in center of canvas.
           * 60x60 light green rect with black outline in center of canvas.
           * 60x60 soft green rect with black outline in center of canvas.
           * 60x60 red rect with black outline in center of canvas.
           * 60x60 dark fuchsia rect with black outline in center of canvas.
           * 60x60 blue rect with black outline in center of canvas.
           */

          /**
           * @method fill
           * @param  {String}        value   a color string
           * @chainable
           */

          /**
           * @method fill
           * @param  {Number}        gray   a gray value
           * @param  {Number}        [alpha]
           * @chainable
           */

          /**
           * @method fill
           * @param  {Number[]}      values  an array containing the red,green,blue &
           *                                 and alpha components of the color
           * @chainable
           */

          /**
           * @method fill
           * @param  {p5.Color}      color   the fill color
           * @chainable
           */ cov_1ff5jdk8c6.s[26]++;
          _main.default.prototype.fill = function() {
            var _this$_renderer2;
            cov_1ff5jdk8c6.f[3]++;
            cov_1ff5jdk8c6.s[27]++;
            this._renderer._setProperty('_fillSet', true);
            cov_1ff5jdk8c6.s[28]++;
            this._renderer._setProperty('_doFill', true);
            cov_1ff5jdk8c6.s[29]++;
            (_this$_renderer2 = this._renderer).fill.apply(_this$_renderer2, arguments);
            cov_1ff5jdk8c6.s[30]++;
            return this;
          };

          /**
           * Disables filling geometry. If both <a href="#/p5/noStroke">noStroke()</a> and <a href="#/p5/noFill">noFill()</a> are called,
           * nothing will be drawn to the screen.
           *
           * @method noFill
           * @chainable
           * @example
           * <div>
           * <code>
           * rect(15, 10, 55, 55);
           * noFill();
           * rect(20, 20, 60, 60);
           * </code>
           * </div>
           *
           * <div modernizr='webgl'>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           *
           * function draw() {
           *   background(0);
           *   noFill();
           *   stroke(100, 100, 240);
           *   rotateX(frameCount * 0.01);
           *   rotateY(frameCount * 0.01);
           *   box(45, 45, 45);
           * }
           * </code>
           * </div>
           *
           * @alt
           * white rect top middle and noFill rect center. Both 60x60 with black outlines.
           * black canvas with purple cube wireframe spinning
           */ cov_1ff5jdk8c6.s[31]++;
          _main.default.prototype.noFill = function() {
            cov_1ff5jdk8c6.f[4]++;
            cov_1ff5jdk8c6.s[32]++;
            this._renderer._setProperty('_doFill', false);
            cov_1ff5jdk8c6.s[33]++;
            return this;
          };

          /**
           * Disables drawing the stroke (outline). If both <a href="#/p5/noStroke">noStroke()</a> and <a href="#/p5/noFill">noFill()</a>
           * are called, nothing will be drawn to the screen.
           *
           * @method noStroke
           * @chainable
           * @example
           * <div>
           * <code>
           * noStroke();
           * rect(20, 20, 60, 60);
           * </code>
           * </div>
           *
           * <div modernizr='webgl'>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           *
           * function draw() {
           *   background(0);
           *   noStroke();
           *   fill(240, 150, 150);
           *   rotateX(frameCount * 0.01);
           *   rotateY(frameCount * 0.01);
           *   box(45, 45, 45);
           * }
           * </code>
           * </div>
           *
           * @alt
           * 60x60 white rect at center. no outline.
           * black canvas with pink cube spinning
           */ cov_1ff5jdk8c6.s[34]++;
          _main.default.prototype.noStroke = function() {
            cov_1ff5jdk8c6.f[5]++;
            cov_1ff5jdk8c6.s[35]++;
            this._renderer._setProperty('_doStroke', false);
            cov_1ff5jdk8c6.s[36]++;
            return this;
          };

          /**
           * Sets the color used to draw lines and borders around shapes. This color
           * is either specified in terms of the RGB or HSB color depending on the
           * current <a href="#/p5/colorMode">colorMode()</a> (the default color space
           * is RGB, with each value in the range from 0 to 255). The alpha range by
           * default is also 0 to 255.
           *
           * If a single string argument is provided, RGB, RGBA and Hex CSS color
           * strings and all named color strings are supported. In this case, an alpha
           * number value as a second argument is not supported, the RGBA form should be
           * used.
           *
           * A p5 <a href="#/p5.Color">Color</a> object can also be provided to set the stroke color.
           *
           * @method stroke
           * @param  {Number}        v1      red or hue value relative to
           *                                 the current color range
           * @param  {Number}        v2      green or saturation value
           *                                 relative to the current color range
           * @param  {Number}        v3      blue or brightness value
           *                                 relative to the current color range
           * @param  {Number}        [alpha]
           * @chainable
           *
           * @example
           * <div>
           * <code>
           * // Grayscale integer value
           * strokeWeight(4);
           * stroke(51);
           * rect(20, 20, 60, 60);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // R, G & B integer values
           * stroke(255, 204, 0);
           * strokeWeight(4);
           * rect(20, 20, 60, 60);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // H, S & B integer values
           * colorMode(HSB);
           * strokeWeight(4);
           * stroke(255, 204, 100);
           * rect(20, 20, 60, 60);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // Named SVG/CSS color string
           * stroke('red');
           * strokeWeight(4);
           * rect(20, 20, 60, 60);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // three-digit hexadecimal RGB notation
           * stroke('#fae');
           * strokeWeight(4);
           * rect(20, 20, 60, 60);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // six-digit hexadecimal RGB notation
           * stroke('#222222');
           * strokeWeight(4);
           * rect(20, 20, 60, 60);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // integer RGB notation
           * stroke('rgb(0,255,0)');
           * strokeWeight(4);
           * rect(20, 20, 60, 60);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // integer RGBA notation
           * stroke('rgba(0,255,0,0.25)');
           * strokeWeight(4);
           * rect(20, 20, 60, 60);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // percentage RGB notation
           * stroke('rgb(100%,0%,10%)');
           * strokeWeight(4);
           * rect(20, 20, 60, 60);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // percentage RGBA notation
           * stroke('rgba(100%,0%,100%,0.5)');
           * strokeWeight(4);
           * rect(20, 20, 60, 60);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // p5 Color object
           * stroke(color(0, 0, 255));
           * strokeWeight(4);
           * rect(20, 20, 60, 60);
           * </code>
           * </div>
           *
           * @alt
           * 60x60 white rect at center. Dark charcoal grey outline.
           * 60x60 white rect at center. Yellow outline.
           * 60x60 white rect at center. Royal blue outline.
           * 60x60 white rect at center. Red outline.
           * 60x60 white rect at center. Pink outline.
           * 60x60 white rect at center. Black outline.
           * 60x60 white rect at center. Bright green outline.
           * 60x60 white rect at center. Soft green outline.
           * 60x60 white rect at center. Red outline.
           * 60x60 white rect at center. Dark fuchsia outline.
           * 60x60 white rect at center. Blue outline.
           */

          /**
           * @method stroke
           * @param  {String}        value   a color string
           * @chainable
           */

          /**
           * @method stroke
           * @param  {Number}        gray   a gray value
           * @param  {Number}        [alpha]
           * @chainable
           */

          /**
           * @method stroke
           * @param  {Number[]}      values  an array containing the red,green,blue &
           *                                 and alpha components of the color
           * @chainable
           */

          /**
           * @method stroke
           * @param  {p5.Color}      color   the stroke color
           * @chainable
           */ cov_1ff5jdk8c6.s[37]++;

          _main.default.prototype.stroke = function() {
            var _this$_renderer3;
            cov_1ff5jdk8c6.f[6]++;
            cov_1ff5jdk8c6.s[38]++;
            this._renderer._setProperty('_strokeSet', true);
            cov_1ff5jdk8c6.s[39]++;
            this._renderer._setProperty('_doStroke', true);
            cov_1ff5jdk8c6.s[40]++;
            (_this$_renderer3 = this._renderer).stroke.apply(_this$_renderer3, arguments);
            cov_1ff5jdk8c6.s[41]++;
            return this;
          };

          /**
           * All drawing that follows <a href="#/p5/erase">erase()</a> will subtract from
           * the canvas.Erased areas will reveal the web page underneath the canvas.Erasing
           * can be canceled with <a href="#/p5/noErase">noErase()</a>.
           *
           * Drawing done with <a href="#/p5/image">image()</a> and <a href="#/p5/background">
           * background()</a> in between <a href="#/p5/erase">erase()</a> and
           * <a href="#/p5/noErase">noErase()</a> will not erase the canvas but works as usual.
           *
           * @method erase
           * @param  {Number}   [strengthFill]      A number (0-255) for the strength of erasing for a shape's fill.
           *                                        This will default to 255 when no argument is given, which
           *                                        is full strength.
           * @param  {Number}   [strengthStroke]    A number (0-255) for the strength of erasing for a shape's stroke.
           *                                        This will default to 255 when no argument is given, which
           *                                        is full strength.
           *
           * @chainable
           * @example
           * <div>
           * <code>
           * background(100, 100, 250);
           * fill(250, 100, 100);
           * rect(20, 20, 60, 60);
           * erase();
           * ellipse(25, 30, 30);
           * noErase();
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * background(150, 250, 150);
           * fill(100, 100, 250);
           * rect(20, 20, 60, 60);
           * strokeWeight(5);
           * erase(150, 255);
           * triangle(50, 10, 70, 50, 90, 10);
           * noErase();
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * function setup() {
           *   smooth();
           *   createCanvas(100, 100, WEBGL);
           *   // Make a &lt;p&gt; element and put it behind the canvas
           *   let p = createP('I am a dom element');
           *   p.center();
           *   p.style('font-size', '20px');
           *   p.style('text-align', 'center');
           *   p.style('z-index', '-9999');
           * }
           *
           * function draw() {
           *   background(250, 250, 150);
           *   fill(15, 195, 185);
           *   noStroke();
           *   sphere(30);
           *   erase();
           *   rotateY(frameCount * 0.02);
           *   translate(0, 0, 40);
           *   torus(15, 5);
           *   noErase();
           * }
           * </code>
           * </div>
           *
           * @alt
           * 60x60 centered pink rect, purple background. Elliptical area in top-left of rect is erased white.
           * 60x60 centered purple rect, mint green background. Triangle in top-right is partially erased with fully erased outline.
           * 60x60 centered teal sphere, yellow background. Torus rotating around sphere erases to reveal black text underneath.
           */ cov_1ff5jdk8c6.s[42]++;
          _main.default.prototype.erase = function() {
            var opacityFill =
              arguments.length > 0 && arguments[0] !== undefined
                ? arguments[0]
                : (cov_1ff5jdk8c6.b[5][0]++, 255);
            var opacityStroke =
              arguments.length > 1 && arguments[1] !== undefined
                ? arguments[1]
                : (cov_1ff5jdk8c6.b[6][0]++, 255);
            cov_1ff5jdk8c6.f[7]++;
            cov_1ff5jdk8c6.s[43]++;
            this._renderer.erase(opacityFill, opacityStroke);
            cov_1ff5jdk8c6.s[44]++;

            return this;
          };

          /**
           * Ends erasing that was started with <a href="#/p5/erase">erase()</a>.
           * The <a href="#/p5/fill">fill()</a>, <a href="#/p5/stroke">stroke()</a>, and
           * <a href="#/p5/blendMode">blendMode()</a> settings will return to what they were
           * prior to calling <a href="#/p5/erase">erase()</a>.
           *
           * @method noErase
           * @chainable
           * @example
           * <div>
           * <code>
           * background(235, 145, 15);
           * noStroke();
           * fill(30, 45, 220);
           * rect(30, 10, 10, 80);
           * erase();
           * ellipse(50, 50, 60);
           * noErase();
           * rect(70, 10, 10, 80);
           * </code>
           * </div>
           *
           * @alt
           * Orange background, with two tall blue rectangles. A centered ellipse erased the first blue rect but not the second.
           */ cov_1ff5jdk8c6.s[45]++;

          _main.default.prototype.noErase = function() {
            cov_1ff5jdk8c6.f[8]++;
            cov_1ff5jdk8c6.s[46]++;
            this._renderer.noErase();
            cov_1ff5jdk8c6.s[47]++;
            return this;
          };
          var _default = _main.default;
          exports.default = _default;
        },
        {
          '../core/constants': 272,
          '../core/main': 283,
          './p5.Color': 270,
          'core-js/modules/es.array.fill': 168
        }
      ],
      272: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_d25oj07sr = (function() {
            var path = '/Users/outofambit/src/p5.js/src/core/constants.js';
            var hash = '1963f86fd557b08e39ce337f2e7385c7edda2b09';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/core/constants.js',
              statementMap: {
                '0': { start: { line: 7, column: 12 }, end: { line: 7, column: 19 } },
                '1': { start: { line: 15, column: 2 }, end: { line: 15, column: 62 } },
                '2': { start: { line: 23, column: 19 }, end: { line: 23, column: 24 } },
                '3': { start: { line: 30, column: 21 }, end: { line: 30, column: 28 } },
                '4': { start: { line: 37, column: 21 }, end: { line: 37, column: 30 } },
                '5': { start: { line: 42, column: 21 }, end: { line: 42, column: 32 } },
                '6': { start: { line: 47, column: 20 }, end: { line: 47, column: 29 } },
                '7': { start: { line: 52, column: 20 }, end: { line: 52, column: 26 } },
                '8': { start: { line: 57, column: 20 }, end: { line: 57, column: 26 } },
                '9': { start: { line: 62, column: 20 }, end: { line: 62, column: 26 } },
                '10': { start: { line: 83, column: 23 }, end: { line: 83, column: 30 } },
                '11': { start: { line: 101, column: 18 }, end: { line: 101, column: 21 } },
                '12': { start: { line: 119, column: 26 }, end: { line: 119, column: 33 } },
                '13': { start: { line: 137, column: 19 }, end: { line: 137, column: 26 } },
                '14': { start: { line: 155, column: 22 }, end: { line: 155, column: 29 } },
                '15': { start: { line: 169, column: 23 }, end: { line: 169, column: 32 } },
                '16': { start: { line: 183, column: 23 }, end: { line: 183, column: 32 } },
                '17': { start: { line: 184, column: 26 }, end: { line: 184, column: 37 } },
                '18': { start: { line: 185, column: 26 }, end: { line: 185, column: 37 } },
                '19': { start: { line: 192, column: 22 }, end: { line: 192, column: 30 } },
                '20': { start: { line: 197, column: 23 }, end: { line: 197, column: 32 } },
                '21': { start: { line: 202, column: 22 }, end: { line: 202, column: 30 } },
                '22': { start: { line: 207, column: 21 }, end: { line: 207, column: 28 } },
                '23': { start: { line: 212, column: 20 }, end: { line: 212, column: 26 } },
                '24': { start: { line: 217, column: 22 }, end: { line: 217, column: 30 } },
                '25': { start: { line: 222, column: 19 }, end: { line: 222, column: 24 } },
                '26': { start: { line: 227, column: 22 }, end: { line: 227, column: 30 } },
                '27': { start: { line: 233, column: 24 }, end: { line: 233, column: 36 } },
                '28': { start: { line: 239, column: 22 }, end: { line: 239, column: 28 } },
                '29': { start: { line: 245, column: 21 }, end: { line: 245, column: 27 } },
                '30': { start: { line: 251, column: 26 }, end: { line: 251, column: 32 } },
                '31': { start: { line: 257, column: 25 }, end: { line: 257, column: 31 } },
                '32': { start: { line: 263, column: 25 }, end: { line: 263, column: 31 } },
                '33': { start: { line: 269, column: 28 }, end: { line: 269, column: 34 } },
                '34': { start: { line: 275, column: 30 }, end: { line: 275, column: 36 } },
                '35': { start: { line: 280, column: 21 }, end: { line: 280, column: 28 } },
                '36': { start: { line: 286, column: 26 }, end: { line: 286, column: 38 } },
                '37': { start: { line: 292, column: 20 }, end: { line: 292, column: 26 } },
                '38': { start: { line: 297, column: 21 }, end: { line: 297, column: 28 } },
                '39': { start: { line: 302, column: 20 }, end: { line: 302, column: 26 } },
                '40': { start: { line: 307, column: 21 }, end: { line: 307, column: 28 } },
                '41': { start: { line: 312, column: 19 }, end: { line: 312, column: 24 } },
                '42': { start: { line: 318, column: 23 }, end: { line: 318, column: 31 } },
                '43': { start: { line: 324, column: 22 }, end: { line: 324, column: 28 } },
                '44': { start: { line: 329, column: 21 }, end: { line: 329, column: 28 } },
                '45': { start: { line: 334, column: 21 }, end: { line: 334, column: 28 } },
                '46': { start: { line: 339, column: 21 }, end: { line: 339, column: 28 } },
                '47': { start: { line: 346, column: 19 }, end: { line: 346, column: 24 } },
                '48': { start: { line: 355, column: 19 }, end: { line: 355, column: 24 } },
                '49': { start: { line: 360, column: 19 }, end: { line: 360, column: 24 } },
                '50': { start: { line: 371, column: 20 }, end: { line: 371, column: 26 } },
                '51': { start: { line: 378, column: 19 }, end: { line: 378, column: 21 } },
                '52': { start: { line: 383, column: 25 }, end: { line: 383, column: 26 } },
                '53': { start: { line: 388, column: 23 }, end: { line: 388, column: 25 } },
                '54': { start: { line: 393, column: 22 }, end: { line: 393, column: 24 } },
                '55': { start: { line: 398, column: 26 }, end: { line: 398, column: 28 } },
                '56': { start: { line: 403, column: 21 }, end: { line: 403, column: 23 } },
                '57': { start: { line: 408, column: 22 }, end: { line: 408, column: 24 } },
                '58': { start: { line: 413, column: 26 }, end: { line: 413, column: 28 } },
                '59': { start: { line: 418, column: 22 }, end: { line: 418, column: 24 } },
                '60': { start: { line: 423, column: 22 }, end: { line: 423, column: 24 } },
                '61': { start: { line: 428, column: 27 }, end: { line: 428, column: 29 } },
                '62': { start: { line: 433, column: 21 }, end: { line: 433, column: 23 } },
                '63': { start: { line: 438, column: 19 }, end: { line: 438, column: 20 } },
                '64': { start: { line: 443, column: 24 }, end: { line: 443, column: 26 } },
                '65': { start: { line: 451, column: 21 }, end: { line: 451, column: 34 } },
                '66': { start: { line: 457, column: 22 }, end: { line: 457, column: 39 } },
                '67': { start: { line: 463, column: 19 }, end: { line: 463, column: 28 } },
                '68': { start: { line: 470, column: 23 }, end: { line: 470, column: 31 } },
                '69': { start: { line: 476, column: 24 }, end: { line: 476, column: 33 } },
                '70': { start: { line: 481, column: 26 }, end: { line: 481, column: 38 } },
                '71': { start: { line: 486, column: 24 }, end: { line: 486, column: 34 } },
                '72': { start: { line: 491, column: 25 }, end: { line: 491, column: 36 } },
                '73': { start: { line: 496, column: 24 }, end: { line: 496, column: 34 } },
                '74': { start: { line: 501, column: 22 }, end: { line: 501, column: 30 } },
                '75': { start: { line: 507, column: 23 }, end: { line: 507, column: 29 } },
                '76': { start: { line: 512, column: 23 }, end: { line: 512, column: 32 } },
                '77': { start: { line: 517, column: 26 }, end: { line: 517, column: 38 } },
                '78': { start: { line: 522, column: 26 }, end: { line: 522, column: 38 } },
                '79': { start: { line: 528, column: 21 }, end: { line: 528, column: 34 } },
                '80': { start: { line: 534, column: 20 }, end: { line: 534, column: 32 } },
                '81': { start: { line: 541, column: 25 }, end: { line: 541, column: 36 } },
                '82': { start: { line: 546, column: 20 }, end: { line: 546, column: 26 } },
                '83': { start: { line: 551, column: 22 }, end: { line: 551, column: 30 } },
                '84': { start: { line: 556, column: 22 }, end: { line: 556, column: 30 } },
                '85': { start: { line: 561, column: 25 }, end: { line: 561, column: 36 } },
                '86': { start: { line: 566, column: 22 }, end: { line: 566, column: 30 } },
                '87': { start: { line: 571, column: 21 }, end: { line: 571, column: 28 } },
                '88': { start: { line: 576, column: 20 }, end: { line: 576, column: 26 } },
                '89': { start: { line: 583, column: 22 }, end: { line: 583, column: 30 } },
                '90': { start: { line: 588, column: 22 }, end: { line: 588, column: 30 } },
                '91': { start: { line: 593, column: 20 }, end: { line: 593, column: 26 } },
                '92': { start: { line: 598, column: 26 }, end: { line: 598, column: 39 } },
                '93': { start: { line: 603, column: 20 }, end: { line: 603, column: 26 } },
                '94': { start: { line: 608, column: 20 }, end: { line: 608, column: 26 } },
                '95': { start: { line: 611, column: 34 }, end: { line: 611, column: 43 } },
                '96': { start: { line: 612, column: 33 }, end: { line: 612, column: 37 } },
                '97': { start: { line: 613, column: 27 }, end: { line: 613, column: 35 } },
                '98': { start: { line: 620, column: 22 }, end: { line: 620, column: 30 } },
                '99': { start: { line: 625, column: 25 }, end: { line: 625, column: 36 } },
                '100': { start: { line: 630, column: 22 }, end: { line: 630, column: 30 } },
                '101': { start: { line: 635, column: 21 }, end: { line: 635, column: 28 } },
                '102': { start: { line: 642, column: 22 }, end: { line: 642, column: 30 } },
                '103': { start: { line: 647, column: 20 }, end: { line: 647, column: 26 } },
                '104': { start: { line: 652, column: 23 }, end: { line: 652, column: 32 } },
                '105': { start: { line: 657, column: 25 }, end: { line: 657, column: 36 } },
                '106': { start: { line: 665, column: 21 }, end: { line: 665, column: 28 } },
                '107': { start: { line: 673, column: 23 }, end: { line: 673, column: 32 } },
                '108': { start: { line: 678, column: 22 }, end: { line: 678, column: 30 } },
                '109': { start: { line: 683, column: 21 }, end: { line: 683, column: 28 } },
                '110': { start: { line: 688, column: 22 }, end: { line: 688, column: 30 } },
                '111': { start: { line: 695, column: 25 }, end: { line: 695, column: 36 } },
                '112': { start: { line: 700, column: 24 }, end: { line: 700, column: 34 } },
                '113': { start: { line: 703, column: 31 }, end: { line: 703, column: 40 } },
                '114': { start: { line: 704, column: 29 }, end: { line: 704, column: 38 } },
                '115': { start: { line: 710, column: 20 }, end: { line: 710, column: 26 } },
                '116': { start: { line: 716, column: 20 }, end: { line: 716, column: 26 } },
                '117': { start: { line: 722, column: 21 }, end: { line: 722, column: 28 } },
                '118': { start: { line: 727, column: 24 }, end: { line: 727, column: 34 } }
              },
              fnMap: {},
              branchMap: {},
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0,
                '118': 0
              },
              f: {},
              b: {},
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '1963f86fd557b08e39ce337f2e7385c7edda2b09'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.BEZIER = exports.QUADRATIC = exports.LINEAR = exports._CTX_MIDDLE = exports._DEFAULT_LEADMULT = exports._DEFAULT_TEXT_FILL = exports.WORD = exports.CHAR = exports.BOLDITALIC = exports.BOLD = exports.ITALIC = exports.NORMAL = exports.BLUR = exports.ERODE = exports.DILATE = exports.POSTERIZE = exports.INVERT = exports.OPAQUE = exports.GRAY = exports.THRESHOLD = exports.BURN = exports.DODGE = exports.SOFT_LIGHT = exports.HARD_LIGHT = exports.OVERLAY = exports.REPLACE = exports.SCREEN = exports.MULTIPLY = exports.EXCLUSION = exports.SUBTRACT = exports.DIFFERENCE = exports.LIGHTEST = exports.DARKEST = exports.ADD = exports.REMOVE = exports.BLEND = exports.UP_ARROW = exports.TAB = exports.SHIFT = exports.RIGHT_ARROW = exports.RETURN = exports.OPTION = exports.LEFT_ARROW = exports.ESCAPE = exports.ENTER = exports.DOWN_ARROW = exports.DELETE = exports.CONTROL = exports.BACKSPACE = exports.ALT = exports.AUTO = exports.HSL = exports.HSB = exports.RGB = exports.MITER = exports.BEVEL = exports.ROUND = exports.SQUARE = exports.PROJECT = exports.PIE = exports.CHORD = exports.OPEN = exports.CLOSE = exports.TESS = exports.QUAD_STRIP = exports.QUADS = exports.TRIANGLE_STRIP = exports.TRIANGLE_FAN = exports.TRIANGLES = exports.LINE_LOOP = exports.LINE_STRIP = exports.LINES = exports.POINTS = exports.BASELINE = exports.BOTTOM = exports.TOP = exports.CENTER = exports.LEFT = exports.RIGHT = exports.RADIUS = exports.CORNERS = exports.CORNER = exports.RAD_TO_DEG = exports.DEG_TO_RAD = exports.RADIANS = exports.DEGREES = exports.TWO_PI = exports.TAU = exports.QUARTER_PI = exports.PI = exports.HALF_PI = exports.WAIT = exports.TEXT = exports.MOVE = exports.HAND = exports.CROSS = exports.ARROW = exports.WEBGL = exports.P2D = exports.VERSION = void 0;
          exports.FALLBACK = exports.LABEL = exports.AXES = exports.GRID = exports._DEFAULT_FILL = exports._DEFAULT_STROKE = exports.PORTRAIT = exports.LANDSCAPE = exports.MIRROR = exports.CLAMP = exports.REPEAT = exports.NEAREST = exports.IMAGE = exports.IMMEDIATE = exports.TEXTURE = exports.FILL = exports.STROKE = exports.CURVE = void 0; /**
           * @module Constants
           * @submodule Constants
           * @for p5
           */

          var _PI = (cov_d25oj07sr.s[0]++, Math.PI);

          /**
           * Version of this p5.js.
           * @property {String} VERSION
           * @final
           */
          var VERSION = (cov_d25oj07sr.s[1]++, '1.4.0');

          // GRAPHICS RENDERER
          /**
           * The default, two-dimensional renderer.
           * @property {String} P2D
           * @final
           */ exports.VERSION = VERSION;
          var P2D = (cov_d25oj07sr.s[2]++, 'p2d');
          /**
           * One of the two render modes in p5.js: P2D (default renderer) and WEBGL
           * Enables 3D render by introducing the third dimension: Z
           * @property {String} WEBGL
           * @final
           */ exports.P2D = P2D;
          var WEBGL = (cov_d25oj07sr.s[3]++, 'webgl');

          // ENVIRONMENT
          /**
           * @property {String} ARROW
           * @final
           */ exports.WEBGL = WEBGL;
          var ARROW = (cov_d25oj07sr.s[4]++, 'default');
          /**
           * @property {String} CROSS
           * @final
           */ exports.ARROW = ARROW;
          var CROSS = (cov_d25oj07sr.s[5]++, 'crosshair');
          /**
           * @property {String} HAND
           * @final
           */ exports.CROSS = CROSS;
          var HAND = (cov_d25oj07sr.s[6]++, 'pointer');
          /**
           * @property {String} MOVE
           * @final
           */ exports.HAND = HAND;
          var MOVE = (cov_d25oj07sr.s[7]++, 'move');
          /**
           * @property {String} TEXT
           * @final
           */ exports.MOVE = MOVE;
          var TEXT = (cov_d25oj07sr.s[8]++, 'text');
          /**
           * @property {String} WAIT
           * @final
           */ exports.TEXT = TEXT;
          var WAIT = (cov_d25oj07sr.s[9]++, 'wait');

          // TRIGONOMETRY

          /**
           * HALF_PI is a mathematical constant with the value
           * 1.57079632679489661923. It is half the ratio of the
           * circumference of a circle to its diameter. It is useful in
           * combination with the trigonometric functions <a href="#/p5/sin">sin()</a> and <a href="#/p5/cos">cos()</a>.
           *
           * @property {Number} HALF_PI
           * @final
           *
           * @example
           * <div><code>
           * arc(50, 50, 80, 80, 0, HALF_PI);
           * </code></div>
           *
           * @alt
           * 80x80 white quarter-circle with curve toward bottom right of canvas.
           */ exports.WAIT = WAIT;
          var HALF_PI = (cov_d25oj07sr.s[10]++, _PI / 2);
          /**
           * PI is a mathematical constant with the value
           * 3.14159265358979323846. It is the ratio of the circumference
           * of a circle to its diameter. It is useful in combination with
           * the trigonometric functions <a href="#/p5/sin">sin()</a> and <a href="#/p5/cos">cos()</a>.
           *
           * @property {Number} PI
           * @final
           *
           * @example
           * <div><code>
           * arc(50, 50, 80, 80, 0, PI);
           * </code></div>
           *
           * @alt
           * white half-circle with curve toward bottom of canvas.
           */ exports.HALF_PI = HALF_PI;
          var PI = (cov_d25oj07sr.s[11]++, _PI);
          /**
           * QUARTER_PI is a mathematical constant with the value 0.7853982.
           * It is one quarter the ratio of the circumference of a circle to
           * its diameter. It is useful in combination with the trigonometric
           * functions <a href="#/p5/sin">sin()</a> and <a href="#/p5/cos">cos()</a>.
           *
           * @property {Number} QUARTER_PI
           * @final
           *
           * @example
           * <div><code>
           * arc(50, 50, 80, 80, 0, QUARTER_PI);
           * </code></div>
           *
           * @alt
           * white eighth-circle rotated about 40 degrees with curve bottom right canvas.
           */ exports.PI = PI;
          var QUARTER_PI = (cov_d25oj07sr.s[12]++, _PI / 4);
          /**
           * TAU is an alias for TWO_PI, a mathematical constant with the
           * value 6.28318530717958647693. It is twice the ratio of the
           * circumference of a circle to its diameter. It is useful in
           * combination with the trigonometric functions <a href="#/p5/sin">sin()</a> and <a href="#/p5/cos">cos()</a>.
           *
           * @property {Number} TAU
           * @final
           *
           * @example
           * <div><code>
           * arc(50, 50, 80, 80, 0, TAU);
           * </code></div>
           *
           * @alt
           * 80x80 white ellipse shape in center of canvas.
           */ exports.QUARTER_PI = QUARTER_PI;
          var TAU = (cov_d25oj07sr.s[13]++, _PI * 2);
          /**
           * TWO_PI is a mathematical constant with the value
           * 6.28318530717958647693. It is twice the ratio of the
           * circumference of a circle to its diameter. It is useful in
           * combination with the trigonometric functions <a href="#/p5/sin">sin()</a> and <a href="#/p5/cos">cos()</a>.
           *
           * @property {Number} TWO_PI
           * @final
           *
           * @example
           * <div><code>
           * arc(50, 50, 80, 80, 0, TWO_PI);
           * </code></div>
           *
           * @alt
           * 80x80 white ellipse shape in center of canvas.
           */ exports.TAU = TAU;
          var TWO_PI = (cov_d25oj07sr.s[14]++, _PI * 2);
          /**
           * Constant to be used with <a href="#/p5/angleMode">angleMode()</a> function, to set the mode which
           * p5.js interprets and calculates angles (either DEGREES or RADIANS).
           * @property {String} DEGREES
           * @final
           *
           * @example
           * <div class='norender'><code>
           * function setup() {
           *   angleMode(DEGREES);
           * }
           * </code></div>
           */ exports.TWO_PI = TWO_PI;
          var DEGREES = (cov_d25oj07sr.s[15]++, 'degrees');
          /**
           * Constant to be used with <a href="#/p5/angleMode">angleMode()</a> function, to set the mode which
           * p5.js interprets and calculates angles (either RADIANS or DEGREES).
           * @property {String} RADIANS
           * @final
           *
           * @example
           * <div class='norender'><code>
           * function setup() {
           *   angleMode(RADIANS);
           * }
           * </code></div>
           */ exports.DEGREES = DEGREES;
          var RADIANS = (cov_d25oj07sr.s[16]++, 'radians');
          exports.RADIANS = RADIANS;
          var DEG_TO_RAD = (cov_d25oj07sr.s[17]++, _PI / 180.0);
          exports.DEG_TO_RAD = DEG_TO_RAD;
          var RAD_TO_DEG = (cov_d25oj07sr.s[18]++, 180.0 / _PI);

          // SHAPE
          /**
           * @property {String} CORNER
           * @final
           */ exports.RAD_TO_DEG = RAD_TO_DEG;
          var CORNER = (cov_d25oj07sr.s[19]++, 'corner');
          /**
           * @property {String} CORNERS
           * @final
           */ exports.CORNER = CORNER;
          var CORNERS = (cov_d25oj07sr.s[20]++, 'corners');
          /**
           * @property {String} RADIUS
           * @final
           */ exports.CORNERS = CORNERS;
          var RADIUS = (cov_d25oj07sr.s[21]++, 'radius');
          /**
           * @property {String} RIGHT
           * @final
           */ exports.RADIUS = RADIUS;
          var RIGHT = (cov_d25oj07sr.s[22]++, 'right');
          /**
           * @property {String} LEFT
           * @final
           */ exports.RIGHT = RIGHT;
          var LEFT = (cov_d25oj07sr.s[23]++, 'left');
          /**
           * @property {String} CENTER
           * @final
           */ exports.LEFT = LEFT;
          var CENTER = (cov_d25oj07sr.s[24]++, 'center');
          /**
           * @property {String} TOP
           * @final
           */ exports.CENTER = CENTER;
          var TOP = (cov_d25oj07sr.s[25]++, 'top');
          /**
           * @property {String} BOTTOM
           * @final
           */ exports.TOP = TOP;
          var BOTTOM = (cov_d25oj07sr.s[26]++, 'bottom');
          /**
           * @property {String} BASELINE
           * @final
           * @default alphabetic
           */ exports.BOTTOM = BOTTOM;
          var BASELINE = (cov_d25oj07sr.s[27]++, 'alphabetic');
          /**
           * @property {Number} POINTS
           * @final
           * @default 0x0000
           */ exports.BASELINE = BASELINE;
          var POINTS = (cov_d25oj07sr.s[28]++, 0x0000);
          /**
           * @property {Number} LINES
           * @final
           * @default 0x0001
           */ exports.POINTS = POINTS;
          var LINES = (cov_d25oj07sr.s[29]++, 0x0001);
          /**
           * @property {Number} LINE_STRIP
           * @final
           * @default 0x0003
           */ exports.LINES = LINES;
          var LINE_STRIP = (cov_d25oj07sr.s[30]++, 0x0003);
          /**
           * @property {Number} LINE_LOOP
           * @final
           * @default 0x0002
           */ exports.LINE_STRIP = LINE_STRIP;
          var LINE_LOOP = (cov_d25oj07sr.s[31]++, 0x0002);
          /**
           * @property {Number} TRIANGLES
           * @final
           * @default 0x0004
           */ exports.LINE_LOOP = LINE_LOOP;
          var TRIANGLES = (cov_d25oj07sr.s[32]++, 0x0004);
          /**
           * @property {Number} TRIANGLE_FAN
           * @final
           * @default 0x0006
           */ exports.TRIANGLES = TRIANGLES;
          var TRIANGLE_FAN = (cov_d25oj07sr.s[33]++, 0x0006);
          /**
           * @property {Number} TRIANGLE_STRIP
           * @final
           * @default 0x0005
           */ exports.TRIANGLE_FAN = TRIANGLE_FAN;
          var TRIANGLE_STRIP = (cov_d25oj07sr.s[34]++, 0x0005);
          /**
           * @property {String} QUADS
           * @final
           */ exports.TRIANGLE_STRIP = TRIANGLE_STRIP;
          var QUADS = (cov_d25oj07sr.s[35]++, 'quads');
          /**
           * @property {String} QUAD_STRIP
           * @final
           * @default quad_strip
           */ exports.QUADS = QUADS;
          var QUAD_STRIP = (cov_d25oj07sr.s[36]++, 'quad_strip');
          /**
           * @property {String} TESS
           * @final
           * @default tess
           */ exports.QUAD_STRIP = QUAD_STRIP;
          var TESS = (cov_d25oj07sr.s[37]++, 'tess');
          /**
           * @property {String} CLOSE
           * @final
           */ exports.TESS = TESS;
          var CLOSE = (cov_d25oj07sr.s[38]++, 'close');
          /**
           * @property {String} OPEN
           * @final
           */ exports.CLOSE = CLOSE;
          var OPEN = (cov_d25oj07sr.s[39]++, 'open');
          /**
           * @property {String} CHORD
           * @final
           */ exports.OPEN = OPEN;
          var CHORD = (cov_d25oj07sr.s[40]++, 'chord');
          /**
           * @property {String} PIE
           * @final
           */ exports.CHORD = CHORD;
          var PIE = (cov_d25oj07sr.s[41]++, 'pie');
          /**
           * @property {String} PROJECT
           * @final
           * @default square
           */ exports.PIE = PIE;
          var PROJECT = (cov_d25oj07sr.s[42]++, 'square'); // PEND: careful this is counterintuitive
          /**
           * @property {String} SQUARE
           * @final
           * @default butt
           */ exports.PROJECT = PROJECT;
          var SQUARE = (cov_d25oj07sr.s[43]++, 'butt');
          /**
           * @property {String} ROUND
           * @final
           */ exports.SQUARE = SQUARE;
          var ROUND = (cov_d25oj07sr.s[44]++, 'round');
          /**
           * @property {String} BEVEL
           * @final
           */ exports.ROUND = ROUND;
          var BEVEL = (cov_d25oj07sr.s[45]++, 'bevel');
          /**
           * @property {String} MITER
           * @final
           */ exports.BEVEL = BEVEL;
          var MITER = (cov_d25oj07sr.s[46]++, 'miter');

          // COLOR
          /**
           * @property {String} RGB
           * @final
           */ exports.MITER = MITER;
          var RGB = (cov_d25oj07sr.s[47]++, 'rgb');
          /**
           * HSB (hue, saturation, brightness) is a type of color model.
           * You can learn more about it at
           * <a href="https://learnui.design/blog/the-hsb-color-system-practicioners-primer.html">HSB</a>.
           *
           * @property {String} HSB
           * @final
           */ exports.RGB = RGB;
          var HSB = (cov_d25oj07sr.s[48]++, 'hsb');
          /**
           * @property {String} HSL
           * @final
           */ exports.HSB = HSB;
          var HSL = (cov_d25oj07sr.s[49]++, 'hsl');

          // DOM EXTENSION
          /**
           * AUTO allows us to automatically set the width or height of an element (but not both),
           * based on the current height and width of the element. Only one parameter can
           * be passed to the <a href="/#/p5.Element/size">size</a> function as AUTO, at a time.
           *
           * @property {String} AUTO
           * @final
           */ exports.HSL = HSL;
          var AUTO = (cov_d25oj07sr.s[50]++, 'auto');

          /**
           * @property {Number} ALT
           * @final
           */
          // INPUT
          exports.AUTO = AUTO;
          var ALT = (cov_d25oj07sr.s[51]++, 18);
          /**
           * @property {Number} BACKSPACE
           * @final
           */ exports.ALT = ALT;
          var BACKSPACE = (cov_d25oj07sr.s[52]++, 8);
          /**
           * @property {Number} CONTROL
           * @final
           */ exports.BACKSPACE = BACKSPACE;
          var CONTROL = (cov_d25oj07sr.s[53]++, 17);
          /**
           * @property {Number} DELETE
           * @final
           */ exports.CONTROL = CONTROL;
          var DELETE = (cov_d25oj07sr.s[54]++, 46);
          /**
           * @property {Number} DOWN_ARROW
           * @final
           */ exports.DELETE = DELETE;
          var DOWN_ARROW = (cov_d25oj07sr.s[55]++, 40);
          /**
           * @property {Number} ENTER
           * @final
           */ exports.DOWN_ARROW = DOWN_ARROW;
          var ENTER = (cov_d25oj07sr.s[56]++, 13);
          /**
           * @property {Number} ESCAPE
           * @final
           */ exports.ENTER = ENTER;
          var ESCAPE = (cov_d25oj07sr.s[57]++, 27);
          /**
           * @property {Number} LEFT_ARROW
           * @final
           */ exports.ESCAPE = ESCAPE;
          var LEFT_ARROW = (cov_d25oj07sr.s[58]++, 37);
          /**
           * @property {Number} OPTION
           * @final
           */ exports.LEFT_ARROW = LEFT_ARROW;
          var OPTION = (cov_d25oj07sr.s[59]++, 18);
          /**
           * @property {Number} RETURN
           * @final
           */ exports.OPTION = OPTION;
          var RETURN = (cov_d25oj07sr.s[60]++, 13);
          /**
           * @property {Number} RIGHT_ARROW
           * @final
           */ exports.RETURN = RETURN;
          var RIGHT_ARROW = (cov_d25oj07sr.s[61]++, 39);
          /**
           * @property {Number} SHIFT
           * @final
           */ exports.RIGHT_ARROW = RIGHT_ARROW;
          var SHIFT = (cov_d25oj07sr.s[62]++, 16);
          /**
           * @property {Number} TAB
           * @final
           */ exports.SHIFT = SHIFT;
          var TAB = (cov_d25oj07sr.s[63]++, 9);
          /**
           * @property {Number} UP_ARROW
           * @final
           */ exports.TAB = TAB;
          var UP_ARROW = (cov_d25oj07sr.s[64]++, 38);

          // RENDERING
          /**
           * @property {String} BLEND
           * @final
           * @default source-over
           */ exports.UP_ARROW = UP_ARROW;
          var BLEND = (cov_d25oj07sr.s[65]++, 'source-over');
          /**
           * @property {String} REMOVE
           * @final
           * @default destination-out
           */ exports.BLEND = BLEND;
          var REMOVE = (cov_d25oj07sr.s[66]++, 'destination-out');
          /**
           * @property {String} ADD
           * @final
           * @default lighter
           */ exports.REMOVE = REMOVE;
          var ADD = (cov_d25oj07sr.s[67]++, 'lighter');
          //ADD: 'add', //
          //SUBTRACT: 'subtract', //
          /**
           * @property {String} DARKEST
           * @final
           */ exports.ADD = ADD;
          var DARKEST = (cov_d25oj07sr.s[68]++, 'darken');
          /**
           * @property {String} LIGHTEST
           * @final
           * @default lighten
           */ exports.DARKEST = DARKEST;
          var LIGHTEST = (cov_d25oj07sr.s[69]++, 'lighten');
          /**
           * @property {String} DIFFERENCE
           * @final
           */ exports.LIGHTEST = LIGHTEST;
          var DIFFERENCE = (cov_d25oj07sr.s[70]++, 'difference');
          /**
           * @property {String} SUBTRACT
           * @final
           */ exports.DIFFERENCE = DIFFERENCE;
          var SUBTRACT = (cov_d25oj07sr.s[71]++, 'subtract');
          /**
           * @property {String} EXCLUSION
           * @final
           */ exports.SUBTRACT = SUBTRACT;
          var EXCLUSION = (cov_d25oj07sr.s[72]++, 'exclusion');
          /**
           * @property {String} MULTIPLY
           * @final
           */ exports.EXCLUSION = EXCLUSION;
          var MULTIPLY = (cov_d25oj07sr.s[73]++, 'multiply');
          /**
           * @property {String} SCREEN
           * @final
           */ exports.MULTIPLY = MULTIPLY;
          var SCREEN = (cov_d25oj07sr.s[74]++, 'screen');
          /**
           * @property {String} REPLACE
           * @final
           * @default copy
           */ exports.SCREEN = SCREEN;
          var REPLACE = (cov_d25oj07sr.s[75]++, 'copy');
          /**
           * @property {String} OVERLAY
           * @final
           */ exports.REPLACE = REPLACE;
          var OVERLAY = (cov_d25oj07sr.s[76]++, 'overlay');
          /**
           * @property {String} HARD_LIGHT
           * @final
           */ exports.OVERLAY = OVERLAY;
          var HARD_LIGHT = (cov_d25oj07sr.s[77]++, 'hard-light');
          /**
           * @property {String} SOFT_LIGHT
           * @final
           */ exports.HARD_LIGHT = HARD_LIGHT;
          var SOFT_LIGHT = (cov_d25oj07sr.s[78]++, 'soft-light');
          /**
           * @property {String} DODGE
           * @final
           * @default color-dodge
           */ exports.SOFT_LIGHT = SOFT_LIGHT;
          var DODGE = (cov_d25oj07sr.s[79]++, 'color-dodge');
          /**
           * @property {String} BURN
           * @final
           * @default color-burn
           */ exports.DODGE = DODGE;
          var BURN = (cov_d25oj07sr.s[80]++, 'color-burn');

          // FILTERS
          /**
           * @property {String} THRESHOLD
           * @final
           */ exports.BURN = BURN;
          var THRESHOLD = (cov_d25oj07sr.s[81]++, 'threshold');
          /**
           * @property {String} GRAY
           * @final
           */ exports.THRESHOLD = THRESHOLD;
          var GRAY = (cov_d25oj07sr.s[82]++, 'gray');
          /**
           * @property {String} OPAQUE
           * @final
           */ exports.GRAY = GRAY;
          var OPAQUE = (cov_d25oj07sr.s[83]++, 'opaque');
          /**
           * @property {String} INVERT
           * @final
           */ exports.OPAQUE = OPAQUE;
          var INVERT = (cov_d25oj07sr.s[84]++, 'invert');
          /**
           * @property {String} POSTERIZE
           * @final
           */ exports.INVERT = INVERT;
          var POSTERIZE = (cov_d25oj07sr.s[85]++, 'posterize');
          /**
           * @property {String} DILATE
           * @final
           */ exports.POSTERIZE = POSTERIZE;
          var DILATE = (cov_d25oj07sr.s[86]++, 'dilate');
          /**
           * @property {String} ERODE
           * @final
           */ exports.DILATE = DILATE;
          var ERODE = (cov_d25oj07sr.s[87]++, 'erode');
          /**
           * @property {String} BLUR
           * @final
           */ exports.ERODE = ERODE;
          var BLUR = (cov_d25oj07sr.s[88]++, 'blur');

          // TYPOGRAPHY
          /**
           * @property {String} NORMAL
           * @final
           */ exports.BLUR = BLUR;
          var NORMAL = (cov_d25oj07sr.s[89]++, 'normal');
          /**
           * @property {String} ITALIC
           * @final
           */ exports.NORMAL = NORMAL;
          var ITALIC = (cov_d25oj07sr.s[90]++, 'italic');
          /**
           * @property {String} BOLD
           * @final
           */ exports.ITALIC = ITALIC;
          var BOLD = (cov_d25oj07sr.s[91]++, 'bold');
          /**
           * @property {String} BOLDITALIC
           * @final
           */ exports.BOLD = BOLD;
          var BOLDITALIC = (cov_d25oj07sr.s[92]++, 'bold italic');
          /**
           * @property {String} CHAR
           * @final
           */ exports.BOLDITALIC = BOLDITALIC;
          var CHAR = (cov_d25oj07sr.s[93]++, 'CHAR');
          /**
           * @property {String} WORD
           * @final
           */ exports.CHAR = CHAR;
          var WORD = (cov_d25oj07sr.s[94]++, 'WORD');

          // TYPOGRAPHY-INTERNAL
          exports.WORD = WORD;
          var _DEFAULT_TEXT_FILL = (cov_d25oj07sr.s[95]++, '#000000');
          exports._DEFAULT_TEXT_FILL = _DEFAULT_TEXT_FILL;
          var _DEFAULT_LEADMULT = (cov_d25oj07sr.s[96]++, 1.25);
          exports._DEFAULT_LEADMULT = _DEFAULT_LEADMULT;
          var _CTX_MIDDLE = (cov_d25oj07sr.s[97]++, 'middle');

          // VERTICES
          /**
           * @property {String} LINEAR
           * @final
           */ exports._CTX_MIDDLE = _CTX_MIDDLE;
          var LINEAR = (cov_d25oj07sr.s[98]++, 'linear');
          /**
           * @property {String} QUADRATIC
           * @final
           */ exports.LINEAR = LINEAR;
          var QUADRATIC = (cov_d25oj07sr.s[99]++, 'quadratic');
          /**
           * @property {String} BEZIER
           * @final
           */ exports.QUADRATIC = QUADRATIC;
          var BEZIER = (cov_d25oj07sr.s[100]++, 'bezier');
          /**
           * @property {String} CURVE
           * @final
           */ exports.BEZIER = BEZIER;
          var CURVE = (cov_d25oj07sr.s[101]++, 'curve');

          // WEBGL DRAWMODES
          /**
           * @property {String} STROKE
           * @final
           */ exports.CURVE = CURVE;
          var STROKE = (cov_d25oj07sr.s[102]++, 'stroke');
          /**
           * @property {String} FILL
           * @final
           */ exports.STROKE = STROKE;
          var FILL = (cov_d25oj07sr.s[103]++, 'fill');
          /**
           * @property {String} TEXTURE
           * @final
           */ exports.FILL = FILL;
          var TEXTURE = (cov_d25oj07sr.s[104]++, 'texture');
          /**
           * @property {String} IMMEDIATE
           * @final
           */ exports.TEXTURE = TEXTURE;
          var IMMEDIATE = (cov_d25oj07sr.s[105]++, 'immediate');

          // WEBGL TEXTURE MODE
          // NORMAL already exists for typography
          /**
           * @property {String} IMAGE
           * @final
           */ exports.IMMEDIATE = IMMEDIATE;
          var IMAGE = (cov_d25oj07sr.s[106]++, 'image');

          // WEBGL TEXTURE WRAP AND FILTERING
          // LINEAR already exists above
          /**
           * @property {String} NEAREST
           * @final
           */ exports.IMAGE = IMAGE;
          var NEAREST = (cov_d25oj07sr.s[107]++, 'nearest');
          /**
           * @property {String} REPEAT
           * @final
           */ exports.NEAREST = NEAREST;
          var REPEAT = (cov_d25oj07sr.s[108]++, 'repeat');
          /**
           * @property {String} CLAMP
           * @final
           */ exports.REPEAT = REPEAT;
          var CLAMP = (cov_d25oj07sr.s[109]++, 'clamp');
          /**
           * @property {String} MIRROR
           * @final
           */ exports.CLAMP = CLAMP;
          var MIRROR = (cov_d25oj07sr.s[110]++, 'mirror');

          // DEVICE-ORIENTATION
          /**
           * @property {String} LANDSCAPE
           * @final
           */ exports.MIRROR = MIRROR;
          var LANDSCAPE = (cov_d25oj07sr.s[111]++, 'landscape');
          /**
           * @property {String} PORTRAIT
           * @final
           */ exports.LANDSCAPE = LANDSCAPE;
          var PORTRAIT = (cov_d25oj07sr.s[112]++, 'portrait');

          // DEFAULTS
          exports.PORTRAIT = PORTRAIT;
          var _DEFAULT_STROKE = (cov_d25oj07sr.s[113]++, '#000000');
          exports._DEFAULT_STROKE = _DEFAULT_STROKE;
          var _DEFAULT_FILL = (cov_d25oj07sr.s[114]++, '#FFFFFF');

          /**
           * @property {String} GRID
           * @final
           */ exports._DEFAULT_FILL = _DEFAULT_FILL;
          var GRID = (cov_d25oj07sr.s[115]++, 'grid');

          /**
           * @property {String} AXES
           * @final
           */ exports.GRID = GRID;
          var AXES = (cov_d25oj07sr.s[116]++, 'axes');

          /**
           * @property {String} LABEL
           * @final
           */ exports.AXES = AXES;
          var LABEL = (cov_d25oj07sr.s[117]++, 'label');
          /**
           * @property {String} FALLBACK
           * @final
           */ exports.LABEL = LABEL;
          var FALLBACK = (cov_d25oj07sr.s[118]++, 'fallback');
          exports.FALLBACK = FALLBACK;
        },
        {}
      ],
      273: [
        function(_dereq_, module, exports) {
          'use strict';
          function _typeof(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof = function _typeof(obj) {
                return typeof obj;
              };
            } else {
              _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof(obj);
          }
          var cov_27yelfqs5d = (function() {
            var path = '/Users/outofambit/src/p5.js/src/core/environment.js';
            var hash = '3f770f328f58b4717aacd6f6dbed408e878f317a';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/core/environment.js',
              statementMap: {
                '0': { start: { line: 12, column: 24 }, end: { line: 12, column: 74 } },
                '1': { start: { line: 14, column: 0 }, end: { line: 14, column: 28 } },
                '2': { start: { line: 15, column: 0 }, end: { line: 15, column: 55 } },
                '3': { start: { line: 16, column: 0 }, end: { line: 16, column: 35 } },
                '4': { start: { line: 18, column: 21 }, end: { line: 18, column: 33 } },
                '5': { start: { line: 44, column: 0 }, end: { line: 50, column: 2 } },
                '6': { start: { line: 45, column: 2 }, end: { line: 49, column: 3 } },
                '7': { start: { line: 46, column: 4 }, end: { line: 46, column: 19 } },
                '8': { start: { line: 48, column: 4 }, end: { line: 48, column: 25 } },
                '9': { start: { line: 77, column: 0 }, end: { line: 77, column: 28 } },
                '10': { start: { line: 127, column: 0 }, end: { line: 127, column: 27 } },
                '11': { start: { line: 158, column: 0 }, end: { line: 158, column: 43 } },
                '12': { start: { line: 198, column: 0 }, end: { line: 226, column: 2 } },
                '13': { start: { line: 199, column: 15 }, end: { line: 199, column: 21 } },
                '14': { start: { line: 200, column: 17 }, end: { line: 200, column: 37 } },
                '15': { start: { line: 201, column: 2 }, end: { line: 224, column: 3 } },
                '16': { start: { line: 203, column: 4 }, end: { line: 203, column: 18 } },
                '17': { start: { line: 204, column: 9 }, end: { line: 224, column: 3 } },
                '18': { start: { line: 205, column: 17 }, end: { line: 205, column: 19 } },
                '19': { start: { line: 206, column: 4 }, end: { line: 210, column: 5 } },
                '20': { start: { line: 209, column: 6 }, end: { line: 209, column: 27 } },
                '21': { start: { line: 211, column: 4 }, end: { line: 223, column: 5 } },
                '22': { start: { line: 216, column: 6 }, end: { line: 216, column: 46 } },
                '23': { start: { line: 217, column: 11 }, end: { line: 223, column: 5 } },
                '24': { start: { line: 219, column: 6 }, end: { line: 219, column: 46 } },
                '25': { start: { line: 222, column: 6 }, end: { line: 222, column: 20 } },
                '26': { start: { line: 225, column: 2 }, end: { line: 225, column: 31 } },
                '27': { start: { line: 292, column: 0 }, end: { line: 303, column: 2 } },
                '28': { start: { line: 293, column: 2 }, end: { line: 293, column: 49 } },
                '29': { start: { line: 294, column: 2 }, end: { line: 302, column: 3 } },
                '30': { start: { line: 295, column: 4 }, end: { line: 295, column: 27 } },
                '31': { start: { line: 297, column: 4 }, end: { line: 297, column: 47 } },
                '32': { start: { line: 298, column: 4 }, end: { line: 300, column: 5 } },
                '33': { start: { line: 299, column: 6 }, end: { line: 299, column: 43 } },
                '34': { start: { line: 301, column: 4 }, end: { line: 301, column: 16 } },
                '35': { start: { line: 311, column: 0 }, end: { line: 313, column: 2 } },
                '36': { start: { line: 312, column: 2 }, end: { line: 312, column: 26 } },
                '37': { start: { line: 327, column: 0 }, end: { line: 329, column: 2 } },
                '38': { start: { line: 328, column: 2 }, end: { line: 328, column: 29 } },
                '39': { start: { line: 350, column: 0 }, end: { line: 352, column: 2 } },
                '40': { start: { line: 351, column: 2 }, end: { line: 351, column: 45 } },
                '41': { start: { line: 370, column: 0 }, end: { line: 370, column: 41 } },
                '42': { start: { line: 388, column: 0 }, end: { line: 388, column: 43 } },
                '43': { start: { line: 404, column: 0 }, end: { line: 404, column: 44 } },
                '44': { start: { line: 419, column: 0 }, end: { line: 419, column: 46 } },
                '45': { start: { line: 445, column: 0 }, end: { line: 456, column: 2 } },
                '46': { start: { line: 446, column: 2 }, end: { line: 446, column: 53 } },
                '47': { start: { line: 447, column: 2 }, end: { line: 447, column: 55 } },
                '48': { start: { line: 448, column: 18 }, end: { line: 448, column: 48 } },
                '49': { start: { line: 450, column: 2 }, end: { line: 455, column: 3 } },
                '50': { start: { line: 451, column: 4 }, end: { line: 451, column: 46 } },
                '51': { start: { line: 452, column: 4 }, end: { line: 454, column: 5 } },
                '52': { start: { line: 453, column: 6 }, end: { line: 453, column: 25 } },
                '53': { start: { line: 459, column: 2 }, end: { line: 464, column: 4 } },
                '54': { start: { line: 468, column: 2 }, end: { line: 473, column: 4 } },
                '55': { start: { line: 486, column: 0 }, end: { line: 486, column: 23 } },
                '56': { start: { line: 498, column: 0 }, end: { line: 498, column: 24 } },
                '57': { start: { line: 530, column: 0 }, end: { line: 548, column: 2 } },
                '58': { start: { line: 531, column: 2 }, end: { line: 531, column: 50 } },
                '59': { start: { line: 533, column: 2 }, end: { line: 547, column: 3 } },
                '60': { start: { line: 534, column: 4 }, end: { line: 539, column: 6 } },
                '61': { start: { line: 542, column: 4 }, end: { line: 546, column: 5 } },
                '62': { start: { line: 543, column: 6 }, end: { line: 543, column: 49 } },
                '63': { start: { line: 545, column: 6 }, end: { line: 545, column: 23 } },
                '64': { start: { line: 590, column: 0 }, end: { line: 603, column: 2 } },
                '65': { start: { line: 591, column: 2 }, end: { line: 591, column: 52 } },
                '66': { start: { line: 593, column: 2 }, end: { line: 601, column: 3 } },
                '67': { start: { line: 594, column: 4 }, end: { line: 596, column: 5 } },
                '68': { start: { line: 595, column: 6 }, end: { line: 595, column: 31 } },
                '69': { start: { line: 597, column: 4 }, end: { line: 597, column: 23 } },
                '70': { start: { line: 598, column: 4 }, end: { line: 598, column: 53 } },
                '71': { start: { line: 600, column: 4 }, end: { line: 600, column: 37 } },
                '72': { start: { line: 602, column: 2 }, end: { line: 602, column: 21 } },
                '73': { start: { line: 626, column: 0 }, end: { line: 626, column: 60 } },
                '74': { start: { line: 626, column: 36 }, end: { line: 626, column: 59 } },
                '75': { start: { line: 630, column: 4 }, end: { line: 633, column: 32 } },
                '76': { start: { line: 634, column: 2 }, end: { line: 636, column: 3 } },
                '77': { start: { line: 635, column: 4 }, end: { line: 635, column: 63 } },
                '78': { start: { line: 637, column: 2 }, end: { line: 645, column: 3 } },
                '79': { start: { line: 638, column: 4 }, end: { line: 638, column: 32 } },
                '80': { start: { line: 639, column: 9 }, end: { line: 645, column: 3 } },
                '81': { start: { line: 640, column: 4 }, end: { line: 640, column: 35 } },
                '82': { start: { line: 641, column: 9 }, end: { line: 645, column: 3 } },
                '83': { start: { line: 642, column: 4 }, end: { line: 642, column: 38 } },
                '84': { start: { line: 643, column: 9 }, end: { line: 645, column: 3 } },
                '85': { start: { line: 644, column: 4 }, end: { line: 644, column: 34 } },
                '86': { start: { line: 649, column: 2 }, end: { line: 657, column: 3 } },
                '87': { start: { line: 650, column: 4 }, end: { line: 650, column: 30 } },
                '88': { start: { line: 651, column: 9 }, end: { line: 657, column: 3 } },
                '89': { start: { line: 652, column: 4 }, end: { line: 652, column: 35 } },
                '90': { start: { line: 653, column: 9 }, end: { line: 657, column: 3 } },
                '91': { start: { line: 654, column: 4 }, end: { line: 654, column: 36 } },
                '92': { start: { line: 655, column: 9 }, end: { line: 657, column: 3 } },
                '93': { start: { line: 656, column: 4 }, end: { line: 656, column: 32 } },
                '94': { start: { line: 690, column: 0 }, end: { line: 690, column: 42 } },
                '95': { start: { line: 690, column: 28 }, end: { line: 690, column: 41 } },
                '96': { start: { line: 711, column: 0 }, end: { line: 712, column: 53 } },
                '97': { start: { line: 712, column: 2 }, end: { line: 712, column: 52 } },
                '98': { start: { line: 712, column: 43 }, end: { line: 712, column: 51 } },
                '99': { start: { line: 737, column: 0 }, end: { line: 748, column: 2 } },
                '100': { start: { line: 738, column: 13 }, end: { line: 738, column: 46 } },
                '101': { start: { line: 740, column: 12 }, end: { line: 740, column: 14 } },
                '102': { start: { line: 741, column: 2 }, end: { line: 746, column: 3 } },
                '103': { start: { line: 742, column: 4 }, end: { line: 744, column: 5 } },
                '104': { start: { line: 743, column: 6 }, end: { line: 743, column: 21 } },
                '105': { start: { line: 745, column: 4 }, end: { line: 745, column: 19 } },
                '106': { start: { line: 747, column: 2 }, end: { line: 747, column: 11 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 44, column: 21 }, end: { line: 44, column: 22 } },
                  loc: { start: { line: 44, column: 39 }, end: { line: 50, column: 1 } },
                  line: 44
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: {
                    start: { line: 198, column: 22 },
                    end: { line: 198, column: 23 }
                  },
                  loc: { start: { line: 198, column: 43 }, end: { line: 226, column: 1 } },
                  line: 198
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 292, column: 25 },
                    end: { line: 292, column: 26 }
                  },
                  loc: { start: { line: 292, column: 39 }, end: { line: 303, column: 1 } },
                  line: 292
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 311, column: 28 },
                    end: { line: 311, column: 29 }
                  },
                  loc: { start: { line: 311, column: 39 }, end: { line: 313, column: 1 } },
                  line: 311
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 327, column: 28 },
                    end: { line: 327, column: 29 }
                  },
                  loc: { start: { line: 327, column: 42 }, end: { line: 329, column: 1 } },
                  line: 327
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 350, column: 24 },
                    end: { line: 350, column: 25 }
                  },
                  loc: { start: { line: 350, column: 35 }, end: { line: 352, column: 1 } },
                  line: 350
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 445, column: 25 },
                    end: { line: 445, column: 26 }
                  },
                  loc: { start: { line: 445, column: 37 }, end: { line: 456, column: 1 } },
                  line: 445
                },
                '7': {
                  name: 'getWindowWidth',
                  decl: { start: { line: 458, column: 9 }, end: { line: 458, column: 23 } },
                  loc: { start: { line: 458, column: 26 }, end: { line: 465, column: 1 } },
                  line: 458
                },
                '8': {
                  name: 'getWindowHeight',
                  decl: { start: { line: 467, column: 9 }, end: { line: 467, column: 24 } },
                  loc: { start: { line: 467, column: 27 }, end: { line: 474, column: 1 } },
                  line: 467
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 530, column: 26 },
                    end: { line: 530, column: 27 }
                  },
                  loc: { start: { line: 530, column: 40 }, end: { line: 548, column: 1 } },
                  line: 530
                },
                '10': {
                  name: '(anonymous_10)',
                  decl: {
                    start: { line: 590, column: 28 },
                    end: { line: 590, column: 29 }
                  },
                  loc: { start: { line: 590, column: 42 }, end: { line: 603, column: 1 } },
                  line: 590
                },
                '11': {
                  name: '(anonymous_11)',
                  decl: {
                    start: { line: 626, column: 30 },
                    end: { line: 626, column: 31 }
                  },
                  loc: { start: { line: 626, column: 36 }, end: { line: 626, column: 59 } },
                  line: 626
                },
                '12': {
                  name: 'launchFullscreen',
                  decl: { start: { line: 628, column: 9 }, end: { line: 628, column: 25 } },
                  loc: { start: { line: 628, column: 35 }, end: { line: 646, column: 1 } },
                  line: 628
                },
                '13': {
                  name: 'exitFullscreen',
                  decl: { start: { line: 648, column: 9 }, end: { line: 648, column: 23 } },
                  loc: { start: { line: 648, column: 26 }, end: { line: 658, column: 1 } },
                  line: 648
                },
                '14': {
                  name: '(anonymous_14)',
                  decl: {
                    start: { line: 690, column: 22 },
                    end: { line: 690, column: 23 }
                  },
                  loc: { start: { line: 690, column: 28 }, end: { line: 690, column: 41 } },
                  line: 690
                },
                '15': {
                  name: '(anonymous_15)',
                  decl: {
                    start: { line: 711, column: 26 },
                    end: { line: 711, column: 27 }
                  },
                  loc: { start: { line: 712, column: 2 }, end: { line: 712, column: 52 } },
                  line: 712
                },
                '16': {
                  name: '(anonymous_16)',
                  decl: {
                    start: { line: 712, column: 38 },
                    end: { line: 712, column: 39 }
                  },
                  loc: { start: { line: 712, column: 43 }, end: { line: 712, column: 51 } },
                  line: 712
                },
                '17': {
                  name: '(anonymous_17)',
                  decl: {
                    start: { line: 737, column: 28 },
                    end: { line: 737, column: 29 }
                  },
                  loc: { start: { line: 737, column: 39 }, end: { line: 748, column: 1 } },
                  line: 737
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 45, column: 2 }, end: { line: 49, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 45, column: 2 }, end: { line: 49, column: 3 } },
                    { start: { line: 45, column: 2 }, end: { line: 49, column: 3 } }
                  ],
                  line: 45
                },
                '1': {
                  loc: { start: { line: 201, column: 2 }, end: { line: 224, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 201, column: 2 }, end: { line: 224, column: 3 } },
                    { start: { line: 201, column: 2 }, end: { line: 224, column: 3 } }
                  ],
                  line: 201
                },
                '2': {
                  loc: { start: { line: 204, column: 9 }, end: { line: 224, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 204, column: 9 }, end: { line: 224, column: 3 } },
                    { start: { line: 204, column: 9 }, end: { line: 224, column: 3 } }
                  ],
                  line: 204
                },
                '3': {
                  loc: { start: { line: 206, column: 4 }, end: { line: 210, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 206, column: 4 }, end: { line: 210, column: 5 } },
                    { start: { line: 206, column: 4 }, end: { line: 210, column: 5 } }
                  ],
                  line: 206
                },
                '4': {
                  loc: { start: { line: 206, column: 8 }, end: { line: 206, column: 66 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 206, column: 8 }, end: { line: 206, column: 9 } },
                    { start: { line: 206, column: 13 }, end: { line: 206, column: 14 } },
                    { start: { line: 206, column: 19 }, end: { line: 206, column: 40 } },
                    { start: { line: 206, column: 44 }, end: { line: 206, column: 65 } }
                  ],
                  line: 206
                },
                '5': {
                  loc: { start: { line: 211, column: 4 }, end: { line: 223, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 211, column: 4 }, end: { line: 223, column: 5 } },
                    { start: { line: 211, column: 4 }, end: { line: 223, column: 5 } }
                  ],
                  line: 211
                },
                '6': {
                  loc: { start: { line: 212, column: 6 }, end: { line: 213, column: 41 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 212, column: 6 }, end: { line: 212, column: 40 } },
                    { start: { line: 213, column: 6 }, end: { line: 213, column: 41 } }
                  ],
                  line: 212
                },
                '7': {
                  loc: { start: { line: 217, column: 11 }, end: { line: 223, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 217, column: 11 }, end: { line: 223, column: 5 } },
                    { start: { line: 217, column: 11 }, end: { line: 223, column: 5 } }
                  ],
                  line: 217
                },
                '8': {
                  loc: { start: { line: 294, column: 2 }, end: { line: 302, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 294, column: 2 }, end: { line: 302, column: 3 } },
                    { start: { line: 294, column: 2 }, end: { line: 302, column: 3 } }
                  ],
                  line: 294
                },
                '9': {
                  loc: { start: { line: 294, column: 6 }, end: { line: 294, column: 40 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 294, column: 6 }, end: { line: 294, column: 29 } },
                    { start: { line: 294, column: 33 }, end: { line: 294, column: 40 } }
                  ],
                  line: 294
                },
                '10': {
                  loc: { start: { line: 298, column: 4 }, end: { line: 300, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 298, column: 4 }, end: { line: 300, column: 5 } },
                    { start: { line: 298, column: 4 }, end: { line: 300, column: 5 } }
                  ],
                  line: 298
                },
                '11': {
                  loc: { start: { line: 448, column: 18 }, end: { line: 448, column: 48 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 448, column: 35 }, end: { line: 448, column: 41 } },
                    { start: { line: 448, column: 44 }, end: { line: 448, column: 48 } }
                  ],
                  line: 448
                },
                '12': {
                  loc: { start: { line: 450, column: 2 }, end: { line: 455, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 450, column: 2 }, end: { line: 455, column: 3 } },
                    { start: { line: 450, column: 2 }, end: { line: 455, column: 3 } }
                  ],
                  line: 450
                },
                '13': {
                  loc: { start: { line: 452, column: 4 }, end: { line: 454, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 452, column: 4 }, end: { line: 454, column: 5 } },
                    { start: { line: 452, column: 4 }, end: { line: 454, column: 5 } }
                  ],
                  line: 452
                },
                '14': {
                  loc: { start: { line: 452, column: 8 }, end: { line: 452, column: 55 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 452, column: 8 }, end: { line: 452, column: 36 } },
                    { start: { line: 452, column: 40 }, end: { line: 452, column: 55 } }
                  ],
                  line: 452
                },
                '15': {
                  loc: { start: { line: 460, column: 4 }, end: { line: 463, column: 5 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 460, column: 4 }, end: { line: 460, column: 21 } },
                    { start: { line: 461, column: 5 }, end: { line: 461, column: 29 } },
                    { start: { line: 461, column: 33 }, end: { line: 461, column: 69 } },
                    { start: { line: 462, column: 5 }, end: { line: 462, column: 18 } },
                    { start: { line: 462, column: 22 }, end: { line: 462, column: 47 } },
                    { start: { line: 463, column: 4 }, end: { line: 463, column: 5 } }
                  ],
                  line: 460
                },
                '16': {
                  loc: { start: { line: 469, column: 4 }, end: { line: 472, column: 5 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 469, column: 4 }, end: { line: 469, column: 22 } },
                    { start: { line: 470, column: 5 }, end: { line: 470, column: 29 } },
                    { start: { line: 470, column: 33 }, end: { line: 470, column: 70 } },
                    { start: { line: 471, column: 5 }, end: { line: 471, column: 18 } },
                    { start: { line: 471, column: 22 }, end: { line: 471, column: 48 } },
                    { start: { line: 472, column: 4 }, end: { line: 472, column: 5 } }
                  ],
                  line: 469
                },
                '17': {
                  loc: { start: { line: 533, column: 2 }, end: { line: 547, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 533, column: 2 }, end: { line: 547, column: 3 } },
                    { start: { line: 533, column: 2 }, end: { line: 547, column: 3 } }
                  ],
                  line: 533
                },
                '18': {
                  loc: { start: { line: 535, column: 6 }, end: { line: 538, column: 34 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 535, column: 6 }, end: { line: 535, column: 32 } },
                    { start: { line: 536, column: 6 }, end: { line: 536, column: 38 } },
                    { start: { line: 537, column: 6 }, end: { line: 537, column: 35 } },
                    { start: { line: 538, column: 6 }, end: { line: 538, column: 34 } }
                  ],
                  line: 535
                },
                '19': {
                  loc: { start: { line: 542, column: 4 }, end: { line: 546, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 542, column: 4 }, end: { line: 546, column: 5 } },
                    { start: { line: 542, column: 4 }, end: { line: 546, column: 5 } }
                  ],
                  line: 542
                },
                '20': {
                  loc: { start: { line: 593, column: 2 }, end: { line: 601, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 593, column: 2 }, end: { line: 601, column: 3 } },
                    { start: { line: 593, column: 2 }, end: { line: 601, column: 3 } }
                  ],
                  line: 593
                },
                '21': {
                  loc: { start: { line: 594, column: 4 }, end: { line: 596, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 594, column: 4 }, end: { line: 596, column: 5 } },
                    { start: { line: 594, column: 4 }, end: { line: 596, column: 5 } }
                  ],
                  line: 594
                },
                '22': {
                  loc: { start: { line: 630, column: 4 }, end: { line: 633, column: 32 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 630, column: 4 }, end: { line: 630, column: 30 } },
                    { start: { line: 631, column: 4 }, end: { line: 631, column: 36 } },
                    { start: { line: 632, column: 4 }, end: { line: 632, column: 33 } },
                    { start: { line: 633, column: 4 }, end: { line: 633, column: 32 } }
                  ],
                  line: 630
                },
                '23': {
                  loc: { start: { line: 634, column: 2 }, end: { line: 636, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 634, column: 2 }, end: { line: 636, column: 3 } },
                    { start: { line: 634, column: 2 }, end: { line: 636, column: 3 } }
                  ],
                  line: 634
                },
                '24': {
                  loc: { start: { line: 637, column: 2 }, end: { line: 645, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 637, column: 2 }, end: { line: 645, column: 3 } },
                    { start: { line: 637, column: 2 }, end: { line: 645, column: 3 } }
                  ],
                  line: 637
                },
                '25': {
                  loc: { start: { line: 639, column: 9 }, end: { line: 645, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 639, column: 9 }, end: { line: 645, column: 3 } },
                    { start: { line: 639, column: 9 }, end: { line: 645, column: 3 } }
                  ],
                  line: 639
                },
                '26': {
                  loc: { start: { line: 641, column: 9 }, end: { line: 645, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 641, column: 9 }, end: { line: 645, column: 3 } },
                    { start: { line: 641, column: 9 }, end: { line: 645, column: 3 } }
                  ],
                  line: 641
                },
                '27': {
                  loc: { start: { line: 643, column: 9 }, end: { line: 645, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 643, column: 9 }, end: { line: 645, column: 3 } },
                    { start: { line: 643, column: 9 }, end: { line: 645, column: 3 } }
                  ],
                  line: 643
                },
                '28': {
                  loc: { start: { line: 649, column: 2 }, end: { line: 657, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 649, column: 2 }, end: { line: 657, column: 3 } },
                    { start: { line: 649, column: 2 }, end: { line: 657, column: 3 } }
                  ],
                  line: 649
                },
                '29': {
                  loc: { start: { line: 651, column: 9 }, end: { line: 657, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 651, column: 9 }, end: { line: 657, column: 3 } },
                    { start: { line: 651, column: 9 }, end: { line: 657, column: 3 } }
                  ],
                  line: 651
                },
                '30': {
                  loc: { start: { line: 653, column: 9 }, end: { line: 657, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 653, column: 9 }, end: { line: 657, column: 3 } },
                    { start: { line: 653, column: 9 }, end: { line: 657, column: 3 } }
                  ],
                  line: 653
                },
                '31': {
                  loc: { start: { line: 655, column: 9 }, end: { line: 657, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 655, column: 9 }, end: { line: 657, column: 3 } },
                    { start: { line: 655, column: 9 }, end: { line: 657, column: 3 } }
                  ],
                  line: 655
                },
                '32': {
                  loc: { start: { line: 742, column: 4 }, end: { line: 744, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 742, column: 4 }, end: { line: 744, column: 5 } },
                    { start: { line: 742, column: 4 }, end: { line: 744, column: 5 } }
                  ],
                  line: 742
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0, 0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0, 0, 0, 0, 0],
                '16': [0, 0, 0, 0, 0, 0],
                '17': [0, 0],
                '18': [0, 0, 0, 0],
                '19': [0, 0],
                '20': [0, 0],
                '21': [0, 0],
                '22': [0, 0, 0, 0],
                '23': [0, 0],
                '24': [0, 0],
                '25': [0, 0],
                '26': [0, 0],
                '27': [0, 0],
                '28': [0, 0],
                '29': [0, 0],
                '30': [0, 0],
                '31': [0, 0],
                '32': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '3f770f328f58b4717aacd6f6dbed408e878f317a'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.concat');
          _dereq_('core-js/modules/es.array.filter');
          _dereq_('core-js/modules/es.array.includes');
          _dereq_('core-js/modules/es.regexp.exec');
          _dereq_('core-js/modules/es.string.includes');
          _dereq_('core-js/modules/es.string.search');
          _dereq_('core-js/modules/es.string.split');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('./main'));
          var C = _interopRequireWildcard(_dereq_('./constants'));
          function _getRequireWildcardCache() {
            if (typeof WeakMap !== 'function') return null;
            var cache = new WeakMap();
            _getRequireWildcardCache = function _getRequireWildcardCache() {
              return cache;
            };
            return cache;
          }
          function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
              return obj;
            }
            if (obj === null || (_typeof(obj) !== 'object' && typeof obj !== 'function')) {
              return { default: obj };
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
              return cache.get(obj);
            }
            var newObj = {};
            var hasPropertyDescriptor =
              Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
              if (Object.prototype.hasOwnProperty.call(obj, key)) {
                var desc = hasPropertyDescriptor
                  ? Object.getOwnPropertyDescriptor(obj, key)
                  : null;
                if (desc && (desc.get || desc.set)) {
                  Object.defineProperty(newObj, key, desc);
                } else {
                  newObj[key] = obj[key];
                }
              }
            }
            newObj.default = obj;
            if (cache) {
              cache.set(obj, newObj);
            }
            return newObj;
          }
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }

          var standardCursors = (cov_27yelfqs5d.s[0]++,
          [C.ARROW, C.CROSS, C.HAND, C.MOVE, C.TEXT, C.WAIT]);
          cov_27yelfqs5d.s[1]++;

          _main.default.prototype._frameRate = 0;
          cov_27yelfqs5d.s[2]++;
          _main.default.prototype._lastFrameTime = window.performance.now();
          cov_27yelfqs5d.s[3]++;
          _main.default.prototype._targetFrameRate = 60;

          var _windowPrint = (cov_27yelfqs5d.s[4]++, window.print);

          /**
           * The <a href="#/p5/print">print()</a> function writes to the console area of
           * your browser. This function is often helpful for looking at the data a program
           * is producing. This function creates a new line of text for each call to
           * the function. Individual elements can be separated with quotes ("") and joined
           * with the addition operator (+).
           *
           * Note that calling print() without any arguments invokes the window.print()
           * function which opens the browser's print dialog. To print a blank line
           * to console you can write print('\n').
           *
           * @method print
           * @param {Any} contents any combination of Number, String, Object, Boolean,
           *                       Array to print
           * @example
           * <div><code class='norender'>
           * let x = 10;
           * print('The value of x is ' + x);
           * // prints "The value of x is 10"
           * </code></div>
           *
           * @alt
           * default grey canvas
           */ cov_27yelfqs5d.s[5]++;
          _main.default.prototype.print = function() {
            cov_27yelfqs5d.f[0]++;
            cov_27yelfqs5d.s[6]++;
            if (!arguments.length) {
              cov_27yelfqs5d.b[0][0]++;
              cov_27yelfqs5d.s[7]++;
              _windowPrint();
            } else {
              var _console;
              cov_27yelfqs5d.b[0][1]++;
              cov_27yelfqs5d.s[8]++;
              (_console = console).log.apply(_console, arguments);
            }
          };

          /**
           * The system variable <a href="#/p5/frameCount">frameCount</a> contains the
           * number of frames that have been displayed since the program started. Inside
           * <a href="#/p5/setup">setup()</a> the value is 0, after the first iteration
           * of draw it is 1, etc.
           *
           * @property {Integer} frameCount
           * @readOnly
           * @example
           * <div><code>
           * function setup() {
           *   frameRate(30);
           *   textSize(30);
           *   textAlign(CENTER);
           * }
           *
           * function draw() {
           *   background(200);
           *   text(frameCount, width / 2, height / 2);
           * }
           * </code></div>
           *
           * @alt
           * numbers rapidly counting upward with frame count set to 30.
           */ cov_27yelfqs5d.s[9]++;
          _main.default.prototype.frameCount = 0;

          /**
           * The system variable <a href="#/p5/deltaTime">deltaTime</a> contains the time
           * difference between the beginning of the previous frame and the beginning
           * of the current frame in milliseconds.
           *
           * This variable is useful for creating time sensitive animation or physics
           * calculation that should stay constant regardless of frame rate.
           *
           * @property {Integer} deltaTime
           * @readOnly
           * @example
           * <div><code>
           * let rectX = 0;
           * let fr = 30; //starting FPS
           * let clr;
           *
           * function setup() {
           *   background(200);
           *   frameRate(fr); // Attempt to refresh at starting FPS
           *   clr = color(255, 0, 0);
           * }
           *
           * function draw() {
           *   background(200);
           *   rectX = rectX + 1 * (deltaTime / 50); // Move Rectangle in relation to deltaTime
           *
           *   if (rectX >= width) {
           *     // If you go off screen.
           *     if (fr === 30) {
           *       clr = color(0, 0, 255);
           *       fr = 10;
           *       frameRate(fr); // make frameRate 10 FPS
           *     } else {
           *       clr = color(255, 0, 0);
           *       fr = 30;
           *       frameRate(fr); // make frameRate 30 FPS
           *     }
           *     rectX = 0;
           *   }
           *   fill(clr);
           *   rect(rectX, 40, 20, 20);
           * }
           * </code></div>
           *
           * @alt
           * red rect moves left to right, followed by blue rect moving at the same speed
           * with a lower frame rate. Loops.
           */ cov_27yelfqs5d.s[10]++;
          _main.default.prototype.deltaTime = 0;

          /**
                                        * Confirms if the window a p5.js program is in is "focused," meaning that
                                        * the sketch will accept mouse or keyboard input. This variable is
                                        * "true" if the window is focused and "false" if not.
                                        *
                                        * @property {Boolean} focused
                                        * @readOnly
                                        * @example
                                        * <div><code>
                                        * // To demonstrate, put two windows side by side.
                                        * // Click on the window that the p5 sketch isn't in!
                                        * function draw() {
                                        *   background(200);
                                        *   noStroke();
                                        *   fill(0, 200, 0);
                                        *   ellipse(25, 25, 50, 50);
                                        *
                                        *   if (!focused) {
                                           // or "if (focused === false)"
                                        *     stroke(200, 0, 0);
                                        *     line(0, 0, 100, 100);
                                        *     line(100, 0, 0, 100);
                                        *   }
                                        * }
                                        * </code></div>
                                        *
                                        * @alt
                                        * green 50x50 ellipse at top left. Red X covers canvas when page focus changes
                                        */ cov_27yelfqs5d
            .s[11]++;
          _main.default.prototype.focused = document.hasFocus();

          /**
           * Sets the cursor to a predefined symbol or an image, or makes it visible
           * if already hidden. If you are trying to set an image as the cursor, the
           * recommended size is 16x16 or 32x32 pixels. The values for parameters x and y
           * must be less than the dimensions of the image.
           *
           * @method cursor
           * @param {String|Constant} type Built-In: either ARROW, CROSS, HAND, MOVE, TEXT and WAIT
           *                               Native CSS properties: 'grab', 'progress', 'cell' etc.
           *                               External: path for cursor's images
           *                               (Allowed File extensions: .cur, .gif, .jpg, .jpeg, .png)
           *                               For more information on Native CSS cursors and url visit:
           *                               https://developer.mozilla.org/en-US/docs/Web/CSS/cursor
           * @param {Number}          [x]  the horizontal active spot of the cursor (must be less than 32)
           * @param {Number}          [y]  the vertical active spot of the cursor (must be less than 32)
           * @example
           * <div><code>
           * // Move the mouse across the quadrants
           * // to see the cursor change
           * function draw() {
           *   line(width / 2, 0, width / 2, height);
           *   line(0, height / 2, width, height / 2);
           *   if (mouseX < 50 && mouseY < 50) {
           *     cursor(CROSS);
           *   } else if (mouseX > 50 && mouseY < 50) {
           *     cursor('progress');
           *   } else if (mouseX > 50 && mouseY > 50) {
           *     cursor('https://avatars0.githubusercontent.com/u/1617169?s=16');
           *   } else {
           *     cursor('grab');
           *   }
           * }
           * </code></div>
           *
           * @alt
           * canvas is divided into four quadrants. cursor on first is a cross, second is a progress,
           * third is a custom cursor using path to the cursor and fourth is a grab.
           */ cov_27yelfqs5d.s[12]++;
          _main.default.prototype.cursor = function(type, x, y) {
            cov_27yelfqs5d.f[1]++;
            var cursor = (cov_27yelfqs5d.s[13]++, 'auto');
            var canvas = (cov_27yelfqs5d.s[14]++, this._curElement.elt);
            cov_27yelfqs5d.s[15]++;
            if (standardCursors.includes(type)) {
              cov_27yelfqs5d.b[1][0]++;
              cov_27yelfqs5d.s[16]++;
              // Standard css cursor
              cursor = type;
            } else {
              cov_27yelfqs5d.b[1][1]++;
              cov_27yelfqs5d.s[17]++;
              if (typeof type === 'string') {
                cov_27yelfqs5d.b[2][0]++;
                var coords = (cov_27yelfqs5d.s[18]++, '');
                cov_27yelfqs5d.s[19]++;
                if (
                  (cov_27yelfqs5d.b[4][0]++, x) &&
                  (cov_27yelfqs5d.b[4][1]++, y) &&
                  (cov_27yelfqs5d.b[4][2]++, typeof x === 'number') &&
                  (cov_27yelfqs5d.b[4][3]++, typeof y === 'number')
                ) {
                  cov_27yelfqs5d.b[3][0]++;
                  cov_27yelfqs5d.s[20]++;
                  // Note that x and y values must be unit-less positive integers < 32
                  // https://developer.mozilla.org/en-US/docs/Web/CSS/cursor
                  coords = ''.concat(x, ' ').concat(y);
                } else {
                  cov_27yelfqs5d.b[3][1]++;
                }
                cov_27yelfqs5d.s[21]++;
                if (
                  (cov_27yelfqs5d.b[6][0]++, type.substring(0, 7) === 'http://') ||
                  (cov_27yelfqs5d.b[6][1]++, type.substring(0, 8) === 'https://')
                ) {
                  cov_27yelfqs5d.b[5][0]++;
                  cov_27yelfqs5d.s[22]++;
                  // Image (absolute url)
                  cursor = 'url('.concat(type, ') ').concat(coords, ', auto');
                } else {
                  cov_27yelfqs5d.b[5][1]++;
                  cov_27yelfqs5d.s[23]++;
                  if (/\.(cur|jpg|jpeg|gif|png|CUR|JPG|JPEG|GIF|PNG)$/.test(type)) {
                    cov_27yelfqs5d.b[7][0]++;
                    cov_27yelfqs5d.s[24]++;
                    // Image file (relative path) - Separated for performance reasons
                    cursor = 'url('.concat(type, ') ').concat(coords, ', auto');
                  } else {
                    cov_27yelfqs5d.b[7][1]++;
                    cov_27yelfqs5d.s[25]++;
                    // Any valid string for the css cursor property
                    cursor = type;
                  }
                }
              } else {
                cov_27yelfqs5d.b[2][1]++;
              }
            }
            cov_27yelfqs5d.s[26]++;
            canvas.style.cursor = cursor;
          };

          /**
    * Specifies the number of frames to be displayed every second. For example,
    * the function call frameRate(30) will attempt to refresh 30 times a second.
    * If the processor is not fast enough to maintain the specified rate, the
    * frame rate will not be achieved. Setting the frame rate within 
    * <a href="#/p5/setup">setup()</a> is recommended. The default frame rate is
    * based on the frame rate of the display (here also called "refresh rate"), 
    * which is set to 60 frames per second on most computers. A frame rate of 24
    * frames per second (usual for movies) or above will be enough for smooth 
    * animations. This is the same as setFrameRate(val).
    * 
    * Calling <a href="#/p5/frameRate">frameRate()</a> with no arguments returns
    * the current framerate. The draw function must run at least once before it will
    * return a value. This is the same as <a href="#/p5/getFrameRate">getFrameRate()</a>.
    *
    * Calling <a href="#/p5/frameRate">frameRate()</a> with arguments that are not
    * of the type numbers or are non positive also returns current framerate.
    *
    * @method frameRate
    * @param  {Number} fps number of frames to be displayed every second
    * @chainable
    *
    * @example
    *
    * <div><code>
    * let rectX = 0;
    * let fr = 30; //starting FPS
    * let clr;
    *
    * function setup() {
    *   background(200);
    *   frameRate(fr); // Attempt to refresh at starting FPS
    *   clr = color(255, 0, 0);
    * }
    *
    * function draw() {
    *   background(200);
    *   rectX = rectX += 1; // Move Rectangle
    *
    *   if (rectX >= width) {
       // If you go off screen.
    *     if (fr === 30) {
    *       clr = color(0, 0, 255);
    *       fr = 10;
    *       frameRate(fr); // make frameRate 10 FPS
    *     } else {
    *       clr = color(255, 0, 0);
    *       fr = 30;
    *       frameRate(fr); // make frameRate 30 FPS
    *     }
    *     rectX = 0;
    *   }
    *   fill(clr);
    *   rect(rectX, 40, 20, 20);
    * }
    * </code></div>
    *
    * @alt
    * blue rect moves left to right, followed by red rect moving faster. Loops.
    */
          /**
           * @method frameRate
           * @return {Number}       current frameRate
           */ cov_27yelfqs5d.s[27]++;
          _main.default.prototype.frameRate = function(fps) {
            cov_27yelfqs5d.f[2]++;
            cov_27yelfqs5d.s[28]++;
            _main.default._validateParameters('frameRate', arguments);
            cov_27yelfqs5d.s[29]++;
            if (
              (cov_27yelfqs5d.b[9][0]++, typeof fps !== 'number') ||
              (cov_27yelfqs5d.b[9][1]++, fps < 0)
            ) {
              cov_27yelfqs5d.b[8][0]++;
              cov_27yelfqs5d.s[30]++;
              return this._frameRate;
            } else {
              cov_27yelfqs5d.b[8][1]++;
              cov_27yelfqs5d.s[31]++;
              this._setProperty('_targetFrameRate', fps);
              cov_27yelfqs5d.s[32]++;
              if (fps === 0) {
                cov_27yelfqs5d.b[10][0]++;
                cov_27yelfqs5d.s[33]++;
                this._setProperty('_frameRate', fps);
              } else {
                cov_27yelfqs5d.b[10][1]++;
              }
              cov_27yelfqs5d.s[34]++;
              return this;
            }
          };

          /**
           * Returns the current framerate.
           *
           * @private
           * @return {Number} current frameRate
           */ cov_27yelfqs5d.s[35]++;
          _main.default.prototype.getFrameRate = function() {
            cov_27yelfqs5d.f[3]++;
            cov_27yelfqs5d.s[36]++;
            return this.frameRate();
          };

          /**
           * Specifies the number of frames to be displayed every second. For example,
           * the function call frameRate(30) will attempt to refresh 30 times a second.
           * If the processor is not fast enough to maintain the specified rate, the
           * frame rate will not be achieved. Setting the frame rate within <a href="#/p5/setup">setup()</a> is
           * recommended. The default rate is 60 frames per second.
           *
           * Calling <a href="#/p5/frameRate">frameRate()</a> with no arguments returns the current framerate.
           *
           * @private
           * @param {Number} [fps] number of frames to be displayed every second
           */ cov_27yelfqs5d.s[37]++;
          _main.default.prototype.setFrameRate = function(fps) {
            cov_27yelfqs5d.f[4]++;
            cov_27yelfqs5d.s[38]++;
            return this.frameRate(fps);
          };

          /**
           * Hides the cursor from view.
           *
           * @method noCursor
           * @example
           * <div><code>
           * function setup() {
           *   noCursor();
           * }
           *
           * function draw() {
           *   background(200);
           *   ellipse(mouseX, mouseY, 10, 10);
           * }
           * </code></div>
           *
           * @alt
           * cursor becomes 10x 10 white ellipse the moves with mouse x and y.
           */ cov_27yelfqs5d.s[39]++;
          _main.default.prototype.noCursor = function() {
            cov_27yelfqs5d.f[5]++;
            cov_27yelfqs5d.s[40]++;
            this._curElement.elt.style.cursor = 'none';
          };

          /**
           * System variable that stores the width of the screen display according to The
           * default <a href="#/p5/pixelDensity">pixelDensity</a>. This is used to run a
           * full-screen program on any display size. To return actual screen size,
           * multiply this by pixelDensity.
           *
           * @property {Number} displayWidth
           * @readOnly
           * @example
           * <div class="norender"><code>
           * createCanvas(displayWidth, displayHeight);
           * </code></div>
           *
           * @alt
           * This example does not render anything.
           */ cov_27yelfqs5d.s[41]++;
          _main.default.prototype.displayWidth = screen.width;

          /**
           * System variable that stores the height of the screen display according to The
           * default <a href="#/p5/pixelDensity">pixelDensity</a>. This is used to run a
           * full-screen program on any display size. To return actual screen size,
           * multiply this by pixelDensity.
           *
           * @property {Number} displayHeight
           * @readOnly
           * @example
           * <div class="norender"><code>
           * createCanvas(displayWidth, displayHeight);
           * </code></div>
           *
           * @alt
           * This example does not render anything.
           */ cov_27yelfqs5d.s[42]++;
          _main.default.prototype.displayHeight = screen.height;

          /**
           * System variable that stores the width of the inner window, it maps to
           * window.innerWidth.
           *
           * @property {Number} windowWidth
           * @readOnly
           * @example
           * <div class="norender"><code>
           * createCanvas(windowWidth, windowHeight);
           * </code></div>
           *
           * @alt
           * This example does not render anything.
           */ cov_27yelfqs5d.s[43]++;
          _main.default.prototype.windowWidth = getWindowWidth();
          /**
           * System variable that stores the height of the inner window, it maps to
           * window.innerHeight.
           *
           * @property {Number} windowHeight
           * @readOnly
           * @example
           * <div class="norender"><code>
           * createCanvas(windowWidth, windowHeight);
           * </code></div>
           *
           * @alt
           * This example does not render anything.
           */ cov_27yelfqs5d.s[44]++;
          _main.default.prototype.windowHeight = getWindowHeight();

          /**
           * The <a href="#/p5/windowResized">windowResized()</a> function is called once
           * every time the browser window is resized. This is a good place to resize the
           * canvas or do any other adjustments to accommodate the new window size.
           *
           * @method windowResized
           * @param {Object} [event] optional Event callback argument.
           * @example
           * <div class="norender"><code>
           * function setup() {
           *   createCanvas(windowWidth, windowHeight);
           * }
           *
           * function draw() {
           *   background(0, 100, 200);
           * }
           *
           * function windowResized() {
           *   resizeCanvas(windowWidth, windowHeight);
           * }
           * </code></div>
           * @alt
           * This example does not render anything.
           */ cov_27yelfqs5d.s[45]++;
          _main.default.prototype._onresize = function(e) {
            cov_27yelfqs5d.f[6]++;
            cov_27yelfqs5d.s[46]++;
            this._setProperty('windowWidth', getWindowWidth());
            cov_27yelfqs5d.s[47]++;
            this._setProperty('windowHeight', getWindowHeight());
            var context = (cov_27yelfqs5d.s[48]++,
            this._isGlobal
              ? (cov_27yelfqs5d.b[11][0]++, window)
              : (cov_27yelfqs5d.b[11][1]++, this));
            var executeDefault;
            cov_27yelfqs5d.s[49]++;
            if (typeof context.windowResized === 'function') {
              cov_27yelfqs5d.b[12][0]++;
              cov_27yelfqs5d.s[50]++;
              executeDefault = context.windowResized(e);
              cov_27yelfqs5d.s[51]++;
              if (
                (cov_27yelfqs5d.b[14][0]++, executeDefault !== undefined) &&
                (cov_27yelfqs5d.b[14][1]++, !executeDefault)
              ) {
                cov_27yelfqs5d.b[13][0]++;
                cov_27yelfqs5d.s[52]++;
                e.preventDefault();
              } else {
                cov_27yelfqs5d.b[13][1]++;
              }
            } else {
              cov_27yelfqs5d.b[12][1]++;
            }
          };

          function getWindowWidth() {
            cov_27yelfqs5d.f[7]++;
            cov_27yelfqs5d.s[53]++;
            return (
              (cov_27yelfqs5d.b[15][0]++, window.innerWidth) ||
              ((cov_27yelfqs5d.b[15][1]++, document.documentElement) &&
                (cov_27yelfqs5d.b[15][2]++, document.documentElement.clientWidth)) ||
              ((cov_27yelfqs5d.b[15][3]++, document.body) &&
                (cov_27yelfqs5d.b[15][4]++, document.body.clientWidth)) ||
              (cov_27yelfqs5d.b[15][5]++, 0)
            );
          }

          function getWindowHeight() {
            cov_27yelfqs5d.f[8]++;
            cov_27yelfqs5d.s[54]++;
            return (
              (cov_27yelfqs5d.b[16][0]++, window.innerHeight) ||
              ((cov_27yelfqs5d.b[16][1]++, document.documentElement) &&
                (cov_27yelfqs5d.b[16][2]++, document.documentElement.clientHeight)) ||
              ((cov_27yelfqs5d.b[16][3]++, document.body) &&
                (cov_27yelfqs5d.b[16][4]++, document.body.clientHeight)) ||
              (cov_27yelfqs5d.b[16][5]++, 0)
            );
          }

          /**
           * System variable that stores the width of the drawing canvas. This value
           * is set by the first parameter of the <a href="#/p5/createCanvas">createCanvas()</a> function.
           * For example, the function call createCanvas(320, 240) sets the width
           * variable to the value 320. The value of width defaults to 100 if
           * <a href="#/p5/createCanvas">createCanvas()</a> is not used in a program.
           *
           * @property {Number} width
           * @readOnly
           */ cov_27yelfqs5d.s[55]++;
          _main.default.prototype.width = 0;

          /**
           * System variable that stores the height of the drawing canvas. This value
           * is set by the second parameter of the <a href="#/p5/createCanvas">createCanvas()</a> function. For
           * example, the function call createCanvas(320, 240) sets the height
           * variable to the value 240. The value of height defaults to 100 if
           * <a href="#/p5/createCanvas">createCanvas()</a> is not used in a program.
           *
           * @property {Number} height
           * @readOnly
           */ cov_27yelfqs5d.s[56]++;
          _main.default.prototype.height = 0;

          /**
           * If argument is given, sets the sketch to fullscreen or not based on the
           * value of the argument. If no argument is given, returns the current
           * fullscreen state. Note that due to browser restrictions this can only
           * be called on user input, for example, on mouse press like the example
           * below.
           *
           * @method fullscreen
           * @param  {Boolean} [val] whether the sketch should be in fullscreen mode
           * or not
           * @return {Boolean} current fullscreen state
           * @example
           * <div>
           * <code>
           * // Clicking in the box toggles fullscreen on and off.
           * function setup() {
           *   background(200);
           * }
           * function mousePressed() {
           *   if (mouseX > 0 && mouseX < 100 && mouseY > 0 && mouseY < 100) {
           *     let fs = fullscreen();
           *     fullscreen(!fs);
           *   }
           * }
           * </code>
           * </div>
           *
           * @alt
           * This example does not render anything.
           */ cov_27yelfqs5d.s[57]++;
          _main.default.prototype.fullscreen = function(val) {
            cov_27yelfqs5d.f[9]++;
            cov_27yelfqs5d.s[58]++;
            _main.default._validateParameters('fullscreen', arguments);
            // no arguments, return fullscreen or not
            cov_27yelfqs5d.s[59]++;
            if (typeof val === 'undefined') {
              cov_27yelfqs5d.b[17][0]++;
              cov_27yelfqs5d.s[60]++;
              return (
                (cov_27yelfqs5d.b[18][0]++, document.fullscreenElement) ||
                (cov_27yelfqs5d.b[18][1]++, document.webkitFullscreenElement) ||
                (cov_27yelfqs5d.b[18][2]++, document.mozFullScreenElement) ||
                (cov_27yelfqs5d.b[18][3]++, document.msFullscreenElement)
              );
            } else {
              cov_27yelfqs5d.b[17][1]++;
              cov_27yelfqs5d.s[61]++;
              // otherwise set to fullscreen or not
              if (val) {
                cov_27yelfqs5d.b[19][0]++;
                cov_27yelfqs5d.s[62]++;
                launchFullscreen(document.documentElement);
              } else {
                cov_27yelfqs5d.b[19][1]++;
                cov_27yelfqs5d.s[63]++;
                exitFullscreen();
              }
            }
          };

          /**
           * Sets the pixel scaling for high pixel density displays. By default
           * pixel density is set to match display density, call pixelDensity(1)
           * to turn this off. Calling <a href="#/p5/pixelDensity">pixelDensity()</a> with no arguments returns
           * the current pixel density of the sketch.
           *
           * @method pixelDensity
           * @param  {Number} val whether or how much the sketch should scale
           * @chainable
           * @example
           * <div>
           * <code>
           * function setup() {
           *   pixelDensity(1);
           *   createCanvas(100, 100);
           *   background(200);
           *   ellipse(width / 2, height / 2, 50, 50);
           * }
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * function setup() {
           *   pixelDensity(3.0);
           *   createCanvas(100, 100);
           *   background(200);
           *   ellipse(width / 2, height / 2, 50, 50);
           * }
           * </code>
           * </div>
           *
           * @alt
           * fuzzy 50x50 white ellipse with black outline in center of canvas.
           * sharp 50x50 white ellipse with black outline in center of canvas.
           */
          /**
           * @method pixelDensity
           * @returns {Number} current pixel density of the sketch
           */ cov_27yelfqs5d.s[64]++;
          _main.default.prototype.pixelDensity = function(val) {
            cov_27yelfqs5d.f[10]++;
            cov_27yelfqs5d.s[65]++;
            _main.default._validateParameters('pixelDensity', arguments);
            var returnValue;
            cov_27yelfqs5d.s[66]++;
            if (typeof val === 'number') {
              cov_27yelfqs5d.b[20][0]++;
              cov_27yelfqs5d.s[67]++;
              if (val !== this._pixelDensity) {
                cov_27yelfqs5d.b[21][0]++;
                cov_27yelfqs5d.s[68]++;
                this._pixelDensity = val;
              } else {
                cov_27yelfqs5d.b[21][1]++;
              }
              cov_27yelfqs5d.s[69]++;
              returnValue = this;
              cov_27yelfqs5d.s[70]++;
              this.resizeCanvas(this.width, this.height, true); // as a side effect, it will clear the canvas
            } else {
              cov_27yelfqs5d.b[20][1]++;
              cov_27yelfqs5d.s[71]++;
              returnValue = this._pixelDensity;
            }
            cov_27yelfqs5d.s[72]++;
            return returnValue;
          };

          /**
           * Returns the pixel density of the current display the sketch is running on.
           *
           * @method displayDensity
           * @returns {Number} current pixel density of the display
           * @example
           * <div>
           * <code>
           * function setup() {
           *   let density = displayDensity();
           *   pixelDensity(density);
           *   createCanvas(100, 100);
           *   background(200);
           *   ellipse(width / 2, height / 2, 50, 50);
           * }
           * </code>
           * </div>
           *
           * @alt
           * 50x50 white ellipse with black outline in center of canvas.
           */ cov_27yelfqs5d.s[73]++;
          _main.default.prototype.displayDensity = function() {
            cov_27yelfqs5d.f[11]++;
            cov_27yelfqs5d.s[74]++;
            return window.devicePixelRatio;
          };

          function launchFullscreen(element) {
            cov_27yelfqs5d.f[12]++;
            var enabled = (cov_27yelfqs5d.s[75]++,
            (cov_27yelfqs5d.b[22][0]++, document.fullscreenEnabled) ||
              (cov_27yelfqs5d.b[22][1]++, document.webkitFullscreenEnabled) ||
              (cov_27yelfqs5d.b[22][2]++, document.mozFullScreenEnabled) ||
              (cov_27yelfqs5d.b[22][3]++, document.msFullscreenEnabled));
            cov_27yelfqs5d.s[76]++;
            if (!enabled) {
              cov_27yelfqs5d.b[23][0]++;
              cov_27yelfqs5d.s[77]++;
              throw new Error('Fullscreen not enabled in this browser.');
            } else {
              cov_27yelfqs5d.b[23][1]++;
            }
            cov_27yelfqs5d.s[78]++;
            if (element.requestFullscreen) {
              cov_27yelfqs5d.b[24][0]++;
              cov_27yelfqs5d.s[79]++;
              element.requestFullscreen();
            } else {
              cov_27yelfqs5d.b[24][1]++;
              cov_27yelfqs5d.s[80]++;
              if (element.mozRequestFullScreen) {
                cov_27yelfqs5d.b[25][0]++;
                cov_27yelfqs5d.s[81]++;
                element.mozRequestFullScreen();
              } else {
                cov_27yelfqs5d.b[25][1]++;
                cov_27yelfqs5d.s[82]++;
                if (element.webkitRequestFullscreen) {
                  cov_27yelfqs5d.b[26][0]++;
                  cov_27yelfqs5d.s[83]++;
                  element.webkitRequestFullscreen();
                } else {
                  cov_27yelfqs5d.b[26][1]++;
                  cov_27yelfqs5d.s[84]++;
                  if (element.msRequestFullscreen) {
                    cov_27yelfqs5d.b[27][0]++;
                    cov_27yelfqs5d.s[85]++;
                    element.msRequestFullscreen();
                  } else {
                    cov_27yelfqs5d.b[27][1]++;
                  }
                }
              }
            }
          }

          function exitFullscreen() {
            cov_27yelfqs5d.f[13]++;
            cov_27yelfqs5d.s[86]++;
            if (document.exitFullscreen) {
              cov_27yelfqs5d.b[28][0]++;
              cov_27yelfqs5d.s[87]++;
              document.exitFullscreen();
            } else {
              cov_27yelfqs5d.b[28][1]++;
              cov_27yelfqs5d.s[88]++;
              if (document.mozCancelFullScreen) {
                cov_27yelfqs5d.b[29][0]++;
                cov_27yelfqs5d.s[89]++;
                document.mozCancelFullScreen();
              } else {
                cov_27yelfqs5d.b[29][1]++;
                cov_27yelfqs5d.s[90]++;
                if (document.webkitExitFullscreen) {
                  cov_27yelfqs5d.b[30][0]++;
                  cov_27yelfqs5d.s[91]++;
                  document.webkitExitFullscreen();
                } else {
                  cov_27yelfqs5d.b[30][1]++;
                  cov_27yelfqs5d.s[92]++;
                  if (document.msExitFullscreen) {
                    cov_27yelfqs5d.b[31][0]++;
                    cov_27yelfqs5d.s[93]++;
                    document.msExitFullscreen();
                  } else {
                    cov_27yelfqs5d.b[31][1]++;
                  }
                }
              }
            }
          }

          /**
           * Gets the current URL. Note: when using the
           * p5 Editor, this will return an empty object because the sketch
           * is embedded in an iframe. It will work correctly if you view the
           * sketch using the editor's present or share URLs.
           * @method getURL
           * @return {String} url
           * @example
           * <div>
           * <code>
           * let url;
           * let x = 100;
           *
           * function setup() {
           *   fill(0);
           *   noStroke();
           *   url = getURL();
           * }
           *
           * function draw() {
           *   background(200);
           *   text(url, x, height / 2);
           *   x--;
           * }
           * </code>
           * </div>
           *
           * @alt
           * current url (http://p5js.org/reference/#/p5/getURL) moves right to left.
           */ cov_27yelfqs5d.s[94]++;
          _main.default.prototype.getURL = function() {
            cov_27yelfqs5d.f[14]++;
            cov_27yelfqs5d.s[95]++;
            return location.href;
          };
          /**
           * Gets the current URL path as an array. Note: when using the
           * p5 Editor, this will return an empty object because the sketch
           * is embedded in an iframe. It will work correctly if you view the
           * sketch using the editor's present or share URLs.
           * @method getURLPath
           * @return {String[]} path components
           * @example
           * <div class='norender'><code>
           * function setup() {
           *   let urlPath = getURLPath();
           *   for (let i = 0; i < urlPath.length; i++) {
           *     text(urlPath[i], 10, i * 20 + 20);
           *   }
           * }
           * </code></div>
           *
           * @alt
           * This example does not render anything.
           */ cov_27yelfqs5d.s[96]++;
          _main.default.prototype.getURLPath = function() {
            cov_27yelfqs5d.f[15]++;
            cov_27yelfqs5d.s[97]++;
            return location.pathname.split('/').filter(function(v) {
              cov_27yelfqs5d.f[16]++;
              cov_27yelfqs5d.s[98]++;
              return v !== '';
            });
          };
          /**
           * Gets the current URL params as an Object. Note: when using the
           * p5 Editor, this will return an empty object because the sketch
           * is embedded in an iframe. It will work correctly if you view the
           * sketch using the editor's present or share URLs.
           * @method getURLParams
           * @return {Object} URL params
           * @example
           * <div class='norender notest'>
           * <code>
           * // Example: http://p5js.org?year=2014&month=May&day=15
           *
           * function setup() {
           *   let params = getURLParams();
           *   text(params.day, 10, 20);
           *   text(params.month, 10, 40);
           *   text(params.year, 10, 60);
           * }
           * </code>
           * </div>
           *
           * @alt
           * This example does not render anything.
           */ cov_27yelfqs5d.s[99]++;
          _main.default.prototype.getURLParams = function() {
            cov_27yelfqs5d.f[17]++;
            var re = (cov_27yelfqs5d.s[100]++, /[?&]([^&=]+)(?:[&=])([^&=]+)/gim);
            var m;
            var v = (cov_27yelfqs5d.s[101]++, {});
            cov_27yelfqs5d.s[102]++;
            while ((m = re.exec(location.search)) != null) {
              cov_27yelfqs5d.s[103]++;
              if (m.index === re.lastIndex) {
                cov_27yelfqs5d.b[32][0]++;
                cov_27yelfqs5d.s[104]++;
                re.lastIndex++;
              } else {
                cov_27yelfqs5d.b[32][1]++;
              }
              cov_27yelfqs5d.s[105]++;
              v[m[1]] = m[2];
            }
            cov_27yelfqs5d.s[106]++;
            return v;
          };
          var _default = _main.default;
          exports.default = _default;
        },
        {
          './constants': 272,
          './main': 283,
          'core-js/modules/es.array.concat': 166,
          'core-js/modules/es.array.filter': 169,
          'core-js/modules/es.array.includes': 172,
          'core-js/modules/es.regexp.exec': 196,
          'core-js/modules/es.string.includes': 200,
          'core-js/modules/es.string.search': 205,
          'core-js/modules/es.string.split': 206
        }
      ],
      274: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_1891z6131p = (function() {
            var path =
              '/Users/outofambit/src/p5.js/src/core/friendly_errors/browser_errors.js';
            var hash = '1c88d94228252a1642dc8ab1bd88f686e701d172';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path:
                '/Users/outofambit/src/p5.js/src/core/friendly_errors/browser_errors.js',
              statementMap: {
                '0': { start: { line: 7, column: 16 }, end: { line: 54, column: 1 } }
              },
              fnMap: {},
              branchMap: {},
              s: { '0': 0 },
              f: {},
              b: {},
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '1c88d94228252a1642dc8ab1bd88f686e701d172'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0; // Different browsers may use different error strings for the same error.
          // Extracting info from them is much easier and cleaner if we have a predefined
          // lookup against which we try and match the errors obtained from the browser,
          // classify them into types and extract the required information. The contents
          // of this file serve as that lookup. The FES can use this to give a simplified
          // explanation for all kinds of errors.
          var strings = (cov_1891z6131p.s[0]++,
          {
            ReferenceError: [
              {
                msg: '{{}} is not defined',
                type: 'NOTDEFINED',
                browser: 'all'
              },

              {
                msg: "Can't find variable: {{}}",
                type: 'NOTDEFINED',
                browser: 'Safari'
              }
            ],

            SyntaxError: [
              {
                msg: 'illegal character',
                type: 'INVALIDTOKEN',
                browser: 'Firefox'
              },

              {
                msg: 'Invalid character',
                type: 'INVALIDTOKEN',
                browser: 'Safari'
              },

              {
                msg: 'Invalid or unexpected token',
                type: 'INVALIDTOKEN',
                browser: 'Chrome'
              },

              {
                msg: "Unexpected token '{{.}}'",
                type: 'UNEXPECTEDTOKEN',
                browser: 'Chrome'
              },

              {
                msg: "expected {{.}}, got '{{.}}'",
                type: 'UNEXPECTEDTOKEN',
                browser: 'Chrome'
              }
            ],

            TypeError: [
              {
                msg: '{{.}} is not a function',
                type: 'NOTFUNC',
                browser: 'all'
              }
            ]
          });
          var _default = strings;
          exports.default = _default;
        },
        {}
      ],
      275: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_homui9azn = (function() {
            var path = '/Users/outofambit/src/p5.js/src/core/friendly_errors/fes_core.js';
            var hash = 'a478cd3e82ace784bcb113e4f62c514ffc3aea2c';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/core/friendly_errors/fes_core.js',
              statementMap: {
                '0': { start: { line: 83, column: 19 }, end: { line: 83, column: 63 } },
                '1': { start: { line: 84, column: 28 }, end: { line: 84, column: 32 } },
                '2': { start: { line: 85, column: 34 }, end: { line: 85, column: 38 } },
                '3': { start: { line: 89, column: 28 }, end: { line: 89, column: 29 } },
                '4': { start: { line: 92, column: 27 }, end: { line: 92, column: 32 } },
                '5': { start: { line: 94, column: 0 }, end: { line: 842, column: 1 } },
                '6': { start: { line: 95, column: 2 }, end: { line: 95, column: 88 } },
                '7': { start: { line: 97, column: 26 }, end: { line: 97, column: 31 } },
                '8': { start: { line: 99, column: 21 }, end: { line: 99, column: 56 } },
                '9': { start: { line: 102, column: 21 }, end: { line: 102, column: 23 } },
                '10': { start: { line: 103, column: 19 }, end: { line: 103, column: 38 } },
                '11': { start: { line: 104, column: 16 }, end: { line: 114, column: 3 } },
                '12': { start: { line: 115, column: 2 }, end: { line: 117, column: 3 } },
                '13': { start: { line: 115, column: 15 }, end: { line: 115, column: 16 } },
                '14': { start: { line: 116, column: 4 }, end: { line: 116, column: 64 } },
                '15': { start: { line: 118, column: 18 }, end: { line: 125, column: 3 } },
                '16': { start: { line: 119, column: 4 }, end: { line: 121, column: 5 } },
                '17': { start: { line: 120, column: 6 }, end: { line: 120, column: 22 } },
                '18': { start: { line: 122, column: 4 }, end: { line: 124, column: 19 } },
                '19': { start: { line: 130, column: 22 }, end: { line: 151, column: 3 } },
                '20': { start: { line: 153, column: 26 }, end: { line: 171, column: 3 } },
                '21': { start: { line: 159, column: 27 }, end: { line: 161, column: 6 } },
                '22': { start: { line: 162, column: 4 }, end: { line: 170, column: 6 } },
                '23': { start: { line: 184, column: 25 }, end: { line: 198, column: 3 } },
                '24': { start: { line: 185, column: 27 }, end: { line: 185, column: 29 } },
                '25': { start: { line: 186, column: 4 }, end: { line: 196, column: 5 } },
                '26': { start: { line: 187, column: 6 }, end: { line: 187, column: 33 } },
                '27': { start: { line: 189, column: 26 }, end: { line: 189, column: 41 } },
                '28': { start: { line: 191, column: 8 }, end: { line: 191, column: 77 } },
                '29': { start: { line: 194, column: 8 }, end: { line: 194, column: 72 } },
                '30': { start: { line: 195, column: 6 }, end: { line: 195, column: 100 } },
                '31': { start: { line: 197, column: 4 }, end: { line: 197, column: 28 } },
                '32': { start: { line: 211, column: 2 }, end: { line: 238, column: 4 } },
                '33': { start: { line: 215, column: 6 }, end: { line: 215, column: 71 } },
                '34': { start: { line: 217, column: 4 }, end: { line: 220, column: 5 } },
                '35': { start: { line: 218, column: 6 }, end: { line: 218, column: 24 } },
                '36': { start: { line: 219, column: 6 }, end: { line: 219, column: 32 } },
                '37': { start: { line: 221, column: 4 }, end: { line: 226, column: 5 } },
                '38': { start: { line: 222, column: 6 }, end: { line: 222, column: 24 } },
                '39': { start: { line: 223, column: 11 }, end: { line: 226, column: 5 } },
                '40': { start: { line: 225, column: 6 }, end: { line: 225, column: 32 } },
                '41': { start: { line: 229, column: 4 }, end: { line: 229, column: 44 } },
                '42': { start: { line: 230, column: 16 }, end: { line: 230, column: 78 } },
                '43': { start: { line: 231, column: 24 }, end: { line: 231, column: 58 } },
                '44': { start: { line: 233, column: 4 }, end: { line: 237, column: 5 } },
                '45': { start: { line: 234, column: 6 }, end: { line: 234, column: 47 } },
                '46': { start: { line: 236, column: 6 }, end: { line: 236, column: 23 } },
                '47': { start: { line: 249, column: 2 }, end: { line: 251, column: 4 } },
                '48': { start: { line: 250, column: 4 }, end: { line: 250, column: 39 } },
                '49': { start: { line: 259, column: 2 }, end: { line: 265, column: 4 } },
                '50': { start: { line: 260, column: 20 }, end: { line: 263, column: 6 } },
                '51': { start: { line: 264, column: 4 }, end: { line: 264, column: 52 } },
                '52': { start: { line: 281, column: 30 }, end: { line: 316, column: 3 } },
                '53': { start: { line: 282, column: 15 }, end: { line: 282, column: 24 } },
                '54': { start: { line: 283, column: 11 }, end: { line: 283, column: 20 } },
                '55': { start: { line: 284, column: 4 }, end: { line: 284, column: 28 } },
                '56': { start: { line: 284, column: 18 }, end: { line: 284, column: 28 } },
                '57': { start: { line: 285, column: 4 }, end: { line: 285, column: 28 } },
                '58': { start: { line: 285, column: 18 }, end: { line: 285, column: 28 } },
                '59': { start: { line: 287, column: 15 }, end: { line: 287, column: 17 } },
                '60': { start: { line: 288, column: 14 }, end: { line: 288, column: 16 } },
                '61': { start: { line: 290, column: 4 }, end: { line: 292, column: 5 } },
                '62': { start: { line: 290, column: 17 }, end: { line: 290, column: 18 } },
                '63': { start: { line: 291, column: 6 }, end: { line: 291, column: 17 } },
                '64': { start: { line: 294, column: 4 }, end: { line: 294, column: 15 } },
                '65': { start: { line: 296, column: 4 }, end: { line: 313, column: 5 } },
                '66': { start: { line: 296, column: 17 }, end: { line: 296, column: 18 } },
                '67': { start: { line: 297, column: 6 }, end: { line: 297, column: 15 } },
                '68': { start: { line: 298, column: 6 }, end: { line: 311, column: 7 } },
                '69': { start: { line: 298, column: 19 }, end: { line: 298, column: 20 } },
                '70': { start: { line: 299, column: 8 }, end: { line: 310, column: 9 } },
                '71': { start: { line: 300, column: 10 }, end: { line: 300, column: 21 } },
                '72': { start: { line: 302, column: 19 }, end: { line: 302, column: 28 } },
                '73': { start: { line: 303, column: 17 }, end: { line: 303, column: 26 } },
                '74': { start: { line: 304, column: 21 }, end: { line: 304, column: 27 } },
                '75': { start: { line: 305, column: 21 }, end: { line: 305, column: 66 } },
                '76': { start: { line: 306, column: 10 }, end: { line: 306, column: 71 } },
                '77': { start: { line: 307, column: 10 }, end: { line: 307, column: 63 } },
                '78': { start: { line: 308, column: 10 }, end: { line: 308, column: 57 } },
                '79': { start: { line: 309, column: 10 }, end: { line: 309, column: 24 } },
                '80': { start: { line: 312, column: 6 }, end: { line: 312, column: 17 } },
                '81': { start: { line: 315, column: 4 }, end: { line: 315, column: 19 } },
                '82': { start: { line: 326, column: 39 }, end: { line: 360, column: 3 } },
                '83': { start: { line: 327, column: 4 }, end: { line: 327, column: 41 } },
                '84': { start: { line: 327, column: 34 }, end: { line: 327, column: 41 } },
                '85': { start: { line: 331, column: 25 }, end: { line: 331, column: 46 } },
                '86': { start: { line: 332, column: 4 }, end: { line: 332, column: 46 } },
                '87': { start: { line: 333, column: 20 }, end: { line: 333, column: 31 } },
                '88': { start: { line: 335, column: 17 }, end: { line: 335, column: 19 } },
                '89': { start: { line: 337, column: 4 }, end: { line: 339, column: 7 } },
                '90': { start: { line: 338, column: 6 }, end: { line: 338, column: 42 } },
                '91': { start: { line: 341, column: 4 }, end: { line: 359, column: 5 } },
                '92': { start: { line: 342, column: 24 }, end: { line: 342, column: 42 } },
                '93': { start: { line: 347, column: 6 }, end: { line: 358, column: 7 } },
                '94': { start: { line: 352, column: 20 }, end: { line: 355, column: 10 } },
                '95': { start: { line: 357, column: 8 }, end: { line: 357, column: 48 } },
                '96': { start: { line: 377, column: 28 }, end: { line: 464, column: 3 } },
                '97': { start: { line: 378, column: 4 }, end: { line: 380, column: 5 } },
                '98': { start: { line: 379, column: 6 }, end: { line: 379, column: 36 } },
                '99': { start: { line: 382, column: 24 }, end: { line: 382, column: 26 } },
                '100': { start: { line: 383, column: 14 }, end: { line: 383, column: 20 } },
                '101': { start: { line: 386, column: 4 }, end: { line: 392, column: 7 } },
                '102': { start: { line: 387, column: 17 }, end: { line: 387, column: 57 } },
                '103': { start: { line: 388, column: 6 }, end: { line: 389, column: 40 } },
                '104': { start: { line: 388, column: 29 }, end: { line: 388, column: 60 } },
                '105': { start: { line: 389, column: 11 }, end: { line: 389, column: 40 } },
                '106': { start: { line: 391, column: 6 }, end: { line: 391, column: 33 } },
                '107': { start: { line: 391, column: 22 }, end: { line: 391, column: 33 } },
                '108': { start: { line: 395, column: 4 }, end: { line: 395, column: 73 } },
                '109': { start: { line: 395, column: 60 }, end: { line: 395, column: 73 } },
                '110': { start: { line: 399, column: 27 }, end: { line: 401, column: 5 } },
                '111': { start: { line: 400, column: 16 }, end: { line: 400, column: 38 } },
                '112': { start: { line: 402, column: 4 }, end: { line: 462, column: 5 } },
                '113': { start: { line: 403, column: 21 }, end: { line: 403, column: 59 } },
                '114': { start: { line: 405, column: 6 }, end: { line: 419, column: 7 } },
                '115': { start: { line: 412, column: 8 }, end: { line: 418, column: 10 } },
                '116': { start: { line: 422, column: 6 }, end: { line: 451, column: 7 } },
                '117': { start: { line: 426, column: 8 }, end: { line: 432, column: 11 } },
                '118': { start: { line: 437, column: 28 }, end: { line: 443, column: 21 } },
                '119': { start: { line: 440, column: 14 }, end: { line: 440, column: 76 } },
                '120': { start: { line: 441, column: 12 }, end: { line: 441, column: 56 } },
                '121': { start: { line: 445, column: 8 }, end: { line: 450, column: 11 } },
                '122': { start: { line: 457, column: 6 }, end: { line: 460, column: 8 } },
                '123': { start: { line: 461, column: 6 }, end: { line: 461, column: 18 } },
                '124': { start: { line: 463, column: 4 }, end: { line: 463, column: 17 } },
                '125': { start: { line: 473, column: 29 }, end: { line: 500, column: 3 } },
                '126': { start: { line: 475, column: 6 }, end: { line: 477, column: 35 } },
                '127': { start: { line: 478, column: 4 }, end: { line: 499, column: 5 } },
                '128': { start: { line: 479, column: 26 }, end: { line: 479, column: 28 } },
                '129': { start: { line: 480, column: 6 }, end: { line: 497, column: 9 } },
                '130': { start: { line: 481, column: 25 }, end: { line: 483, column: 10 } },
                '131': { start: { line: 485, column: 27 }, end: { line: 490, column: 11 } },
                '132': { start: { line: 491, column: 8 }, end: { line: 495, column: 9 } },
                '133': { start: { line: 492, column: 10 }, end: { line: 492, column: 77 } },
                '134': { start: { line: 494, column: 10 }, end: { line: 494, column: 80 } },
                '135': { start: { line: 496, column: 8 }, end: { line: 496, column: 34 } },
                '136': { start: { line: 498, column: 6 }, end: { line: 498, column: 25 } },
                '137': { start: { line: 520, column: 23 }, end: { line: 635, column: 3 } },
                '138': { start: { line: 522, column: 4 }, end: { line: 522, column: 42 } },
                '139': { start: { line: 522, column: 21 }, end: { line: 522, column: 42 } },
                '140': { start: { line: 524, column: 4 }, end: { line: 526, column: 7 } },
                '141': { start: { line: 525, column: 6 }, end: { line: 525, column: 52 } },
                '142': { start: { line: 529, column: 21 }, end: { line: 529, column: 26 } },
                '143': { start: { line: 531, column: 4 }, end: { line: 550, column: 5 } },
                '144': { start: { line: 531, column: 17 }, end: { line: 531, column: 38 } },
                '145': { start: { line: 532, column: 21 }, end: { line: 532, column: 58 } },
                '146': { start: { line: 533, column: 6 }, end: { line: 549, column: 7 } },
                '147': { start: { line: 536, column: 8 }, end: { line: 536, column: 51 } },
                '148': { start: { line: 537, column: 8 }, end: { line: 537, column: 58 } },
                '149': { start: { line: 538, column: 8 }, end: { line: 547, column: 9 } },
                '150': { start: { line: 538, column: 21 }, end: { line: 538, column: 22 } },
                '151': { start: { line: 542, column: 10 }, end: { line: 546, column: 11 } },
                '152': { start: { line: 543, column: 12 }, end: { line: 543, column: 30 } },
                '153': { start: { line: 544, column: 12 }, end: { line: 544, column: 48 } },
                '154': { start: { line: 545, column: 12 }, end: { line: 545, column: 18 } },
                '155': { start: { line: 548, column: 8 }, end: { line: 548, column: 14 } },
                '156': { start: { line: 555, column: 4 }, end: { line: 555, column: 51 } },
                '157': { start: { line: 555, column: 24 }, end: { line: 555, column: 51 } },
                '158': { start: { line: 557, column: 4 }, end: { line: 633, column: 5 } },
                '159': { start: { line: 562, column: 6 }, end: { line: 567, column: 56 } },
                '160': { start: { line: 564, column: 10 }, end: { line: 564, column: 35 } },
                '161': { start: { line: 565, column: 10 }, end: { line: 565, column: 23 } },
                '162': { start: { line: 567, column: 25 }, end: { line: 567, column: 54 } },
                '163': { start: { line: 571, column: 6 }, end: { line: 571, column: 58 } },
                '164': { start: { line: 571, column: 38 }, end: { line: 571, column: 58 } },
                '165': { start: { line: 575, column: 19 }, end: { line: 577, column: 21 } },
                '166': { start: { line: 581, column: 6 }, end: { line: 596, column: 7 } },
                '167': { start: { line: 586, column: 8 }, end: { line: 592, column: 10 } },
                '168': { start: { line: 595, column: 8 }, end: { line: 595, column: 71 } },
                '169': { start: { line: 595, column: 51 }, end: { line: 595, column: 71 } },
                '170': { start: { line: 600, column: 6 }, end: { line: 626, column: 7 } },
                '171': { start: { line: 604, column: 8 }, end: { line: 613, column: 10 } },
                '172': { start: { line: 616, column: 8 }, end: { line: 625, column: 10 } },
                '173': { start: { line: 630, column: 6 }, end: { line: 632, column: 7 } },
                '174': { start: { line: 631, column: 8 }, end: { line: 631, column: 42 } },
                '175': { start: { line: 634, column: 4 }, end: { line: 634, column: 39 } },
                '176': { start: { line: 646, column: 26 }, end: { line: 806, column: 3 } },
                '177': { start: { line: 647, column: 4 }, end: { line: 647, column: 41 } },
                '178': { start: { line: 647, column: 34 }, end: { line: 647, column: 41 } },
                '179': { start: { line: 650, column: 4 }, end: { line: 657, column: 5 } },
                '180': { start: { line: 651, column: 6 }, end: { line: 651, column: 16 } },
                '181': { start: { line: 652, column: 11 }, end: { line: 657, column: 5 } },
                '182': { start: { line: 653, column: 6 }, end: { line: 653, column: 22 } },
                '183': { start: { line: 654, column: 11 }, end: { line: 657, column: 5 } },
                '184': { start: { line: 655, column: 6 }, end: { line: 655, column: 23 } },
                '185': { start: { line: 656, column: 6 }, end: { line: 656, column: 44 } },
                '186': { start: { line: 656, column: 37 }, end: { line: 656, column: 44 } },
                '187': { start: { line: 658, column: 4 }, end: { line: 658, column: 23 } },
                '188': { start: { line: 658, column: 16 }, end: { line: 658, column: 23 } },
                '189': { start: { line: 660, column: 21 }, end: { line: 660, column: 59 } },
                '190': { start: { line: 663, column: 38 }, end: { line: 663, column: 69 } },
                '191': { start: { line: 667, column: 4 }, end: { line: 669, column: 5 } },
                '192': { start: { line: 668, column: 6 }, end: { line: 668, column: 13 } },
                '193': { start: { line: 671, column: 20 }, end: { line: 671, column: 42 } },
                '194': { start: { line: 672, column: 4 }, end: { line: 672, column: 25 } },
                '195': { start: { line: 672, column: 18 }, end: { line: 672, column: 25 } },
                '196': { start: { line: 674, column: 4 }, end: { line: 687, column: 5 } },
                '197': { start: { line: 675, column: 19 }, end: { line: 675, column: 26 } },
                '198': { start: { line: 677, column: 6 }, end: { line: 677, column: 74 } },
                '199': { start: { line: 678, column: 6 }, end: { line: 678, column: 64 } },
                '200': { start: { line: 679, column: 6 }, end: { line: 679, column: 74 } },
                '201': { start: { line: 680, column: 20 }, end: { line: 680, column: 47 } },
                '202': { start: { line: 682, column: 6 }, end: { line: 686, column: 7 } },
                '203': { start: { line: 683, column: 8 }, end: { line: 683, column: 46 } },
                '204': { start: { line: 684, column: 8 }, end: { line: 684, column: 37 } },
                '205': { start: { line: 685, column: 8 }, end: { line: 685, column: 14 } },
                '206': { start: { line: 689, column: 4 }, end: { line: 689, column: 30 } },
                '207': { start: { line: 689, column: 23 }, end: { line: 689, column: 30 } },
                '208': { start: { line: 693, column: 4 }, end: { line: 706, column: 5 } },
                '209': { start: { line: 699, column: 6 }, end: { line: 705, column: 8 } },
                '210': { start: { line: 708, column: 4 }, end: { line: 805, column: 5 } },
                '211': { start: { line: 713, column: 8 }, end: { line: 734, column: 9 } },
                '212': {
                  start: { line: 716, column: 14 },
                  end: { line: 716, column: 116 }
                },
                '213': { start: { line: 717, column: 12 }, end: { line: 721, column: 14 } },
                '214': { start: { line: 722, column: 12 }, end: { line: 722, column: 18 } },
                '215': {
                  start: { line: 726, column: 14 },
                  end: { line: 726, column: 115 }
                },
                '216': { start: { line: 727, column: 12 }, end: { line: 731, column: 14 } },
                '217': { start: { line: 732, column: 12 }, end: { line: 732, column: 18 } },
                '218': { start: { line: 735, column: 8 }, end: { line: 735, column: 14 } },
                '219': { start: { line: 738, column: 8 }, end: { line: 765, column: 9 } },
                '220': { start: { line: 740, column: 25 }, end: { line: 740, column: 46 } },
                '221': { start: { line: 742, column: 12 }, end: { line: 744, column: 13 } },
                '222': { start: { line: 743, column: 14 }, end: { line: 743, column: 20 } },
                '223': { start: { line: 748, column: 23 }, end: { line: 748, column: 75 } },
                '224': {
                  start: { line: 750, column: 14 },
                  end: { line: 750, column: 110 }
                },
                '225': { start: { line: 751, column: 12 }, end: { line: 760, column: 14 } },
                '226': { start: { line: 762, column: 12 }, end: { line: 762, column: 65 } },
                '227': { start: { line: 762, column: 31 }, end: { line: 762, column: 65 } },
                '228': { start: { line: 763, column: 12 }, end: { line: 763, column: 18 } },
                '229': { start: { line: 766, column: 8 }, end: { line: 766, column: 14 } },
                '230': { start: { line: 770, column: 8 }, end: { line: 803, column: 9 } },
                '231': { start: { line: 772, column: 25 }, end: { line: 772, column: 46 } },
                '232': { start: { line: 773, column: 27 }, end: { line: 773, column: 44 } },
                '233': {
                  start: { line: 775, column: 14 },
                  end: { line: 775, column: 113 }
                },
                '234': { start: { line: 778, column: 33 }, end: { line: 785, column: 13 } },
                '235': { start: { line: 790, column: 12 }, end: { line: 798, column: 13 } },
                '236': { start: { line: 791, column: 14 }, end: { line: 793, column: 16 } },
                '237': { start: { line: 795, column: 14 }, end: { line: 797, column: 16 } },
                '238': { start: { line: 800, column: 12 }, end: { line: 800, column: 65 } },
                '239': { start: { line: 800, column: 31 }, end: { line: 800, column: 65 } },
                '240': { start: { line: 801, column: 12 }, end: { line: 801, column: 18 } },
                '241': { start: { line: 808, column: 2 }, end: { line: 808, column: 40 } },
                '242': { start: { line: 809, column: 2 }, end: { line: 809, column: 66 } },
                '243': { start: { line: 812, column: 2 }, end: { line: 812, column: 23 } },
                '244': { start: { line: 813, column: 2 }, end: { line: 813, column: 23 } },
                '245': { start: { line: 815, column: 2 }, end: { line: 815, column: 71 } },
                '246': { start: { line: 816, column: 2 }, end: { line: 816, column: 63 } },
                '247': { start: { line: 817, column: 2 }, end: { line: 817, column: 76 } },
                '248': { start: { line: 850, column: 0 }, end: { line: 850, column: 29 } },
                '249': { start: { line: 852, column: 2 }, end: { line: 852, column: 133 } },
                '250': { start: { line: 854, column: 0 }, end: { line: 897, column: 2 } },
                '251': { start: { line: 855, column: 27 }, end: { line: 855, column: 29 } },
                '252': { start: { line: 857, column: 21 }, end: { line: 883, column: 8 } },
                '253': { start: { line: 858, column: 4 }, end: { line: 883, column: 8 } },
                '254': { start: { line: 860, column: 8 }, end: { line: 862, column: 9 } },
                '255': { start: { line: 861, column: 10 }, end: { line: 861, column: 23 } },
                '256': { start: { line: 863, column: 8 }, end: { line: 865, column: 9 } },
                '257': { start: { line: 864, column: 10 }, end: { line: 864, column: 23 } },
                '258': { start: { line: 867, column: 8 }, end: { line: 867, column: 38 } },
                '259': { start: { line: 869, column: 8 }, end: { line: 869, column: 20 } },
                '260': { start: { line: 874, column: 8 }, end: { line: 880, column: 9 } },
                '261': { start: { line: 875, column: 10 }, end: { line: 875, column: 28 } },
                '262': { start: { line: 876, column: 15 }, end: { line: 880, column: 9 } },
                '263': { start: { line: 877, column: 10 }, end: { line: 877, column: 28 } },
                '264': { start: { line: 879, column: 10 }, end: { line: 879, column: 28 } },
                '265': { start: { line: 882, column: 8 }, end: { line: 882, column: 30 } },
                '266': { start: { line: 885, column: 2 }, end: { line: 891, column: 4 } },
                '267': { start: { line: 896, column: 2 }, end: { line: 896, column: 70 } },
                '268': { start: { line: 896, column: 39 }, end: { line: 896, column: 68 } },
                '269': { start: { line: 899, column: 37 }, end: { line: 952, column: 1 } },
                '270': { start: { line: 900, column: 2 }, end: { line: 902, column: 3 } },
                '271': { start: { line: 901, column: 4 }, end: { line: 901, column: 36 } },
                '272': { start: { line: 904, column: 2 }, end: { line: 906, column: 3 } },
                '273': { start: { line: 905, column: 4 }, end: { line: 905, column: 34 } },
                '274': { start: { line: 917, column: 2 }, end: { line: 951, column: 5 } },
                '275': { start: { line: 931, column: 4 }, end: { line: 950, column: 5 } },
                '276': { start: { line: 933, column: 8 }, end: { line: 933, column: 69 } },
                '277': { start: { line: 934, column: 6 }, end: { line: 948, column: 7 } },
                '278': { start: { line: 935, column: 8 }, end: { line: 939, column: 10 } },
                '279': { start: { line: 941, column: 8 }, end: { line: 947, column: 10 } },
                '280': { start: { line: 949, column: 6 }, end: { line: 949, column: 18 } },
                '281': { start: { line: 955, column: 0 }, end: { line: 955, column: 74 } },
                '282': { start: { line: 957, column: 0 }, end: { line: 967, column: 1 } },
                '283': { start: { line: 958, column: 2 }, end: { line: 958, column: 72 } },
                '284': { start: { line: 964, column: 2 }, end: { line: 966, column: 5 } },
                '285': { start: { line: 965, column: 4 }, end: { line: 965, column: 77 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 95, column: 79 }, end: { line: 95, column: 80 } },
                  loc: { start: { line: 95, column: 85 }, end: { line: 95, column: 87 } },
                  line: 95
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: {
                    start: { line: 118, column: 18 },
                    end: { line: 118, column: 19 }
                  },
                  loc: { start: { line: 118, column: 25 }, end: { line: 125, column: 3 } },
                  line: 118
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 153, column: 26 },
                    end: { line: 153, column: 27 }
                  },
                  loc: { start: { line: 153, column: 32 }, end: { line: 171, column: 3 } },
                  line: 153
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 184, column: 25 },
                    end: { line: 184, column: 26 }
                  },
                  loc: { start: { line: 184, column: 44 }, end: { line: 198, column: 3 } },
                  line: 184
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 211, column: 15 },
                    end: { line: 211, column: 16 }
                  },
                  loc: { start: { line: 211, column: 41 }, end: { line: 238, column: 3 } },
                  line: 211
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 249, column: 22 },
                    end: { line: 249, column: 23 }
                  },
                  loc: { start: { line: 249, column: 55 }, end: { line: 251, column: 3 } },
                  line: 249
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 259, column: 30 },
                    end: { line: 259, column: 31 }
                  },
                  loc: { start: { line: 259, column: 44 }, end: { line: 265, column: 3 } },
                  line: 259
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 281, column: 30 },
                    end: { line: 281, column: 31 }
                  },
                  loc: { start: { line: 281, column: 42 }, end: { line: 316, column: 3 } },
                  line: 281
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 326, column: 39 },
                    end: { line: 326, column: 40 }
                  },
                  loc: { start: { line: 326, column: 50 }, end: { line: 360, column: 3 } },
                  line: 326
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 337, column: 20 },
                    end: { line: 337, column: 21 }
                  },
                  loc: { start: { line: 337, column: 30 }, end: { line: 339, column: 5 } },
                  line: 337
                },
                '10': {
                  name: '(anonymous_10)',
                  decl: {
                    start: { line: 377, column: 28 },
                    end: { line: 377, column: 29 }
                  },
                  loc: { start: { line: 377, column: 47 }, end: { line: 464, column: 3 } },
                  line: 377
                },
                '11': {
                  name: '(anonymous_11)',
                  decl: {
                    start: { line: 386, column: 34 },
                    end: { line: 386, column: 35 }
                  },
                  loc: { start: { line: 386, column: 44 }, end: { line: 392, column: 5 } },
                  line: 386
                },
                '12': {
                  name: '(anonymous_12)',
                  decl: { start: { line: 400, column: 6 }, end: { line: 400, column: 7 } },
                  loc: { start: { line: 400, column: 16 }, end: { line: 400, column: 38 } },
                  line: 400
                },
                '13': {
                  name: '(anonymous_13)',
                  decl: {
                    start: { line: 438, column: 15 },
                    end: { line: 438, column: 16 }
                  },
                  loc: { start: { line: 438, column: 25 }, end: { line: 442, column: 11 } },
                  line: 438
                },
                '14': {
                  name: '(anonymous_14)',
                  decl: {
                    start: { line: 473, column: 29 },
                    end: { line: 473, column: 30 }
                  },
                  loc: { start: { line: 473, column: 46 }, end: { line: 500, column: 3 } },
                  line: 473
                },
                '15': {
                  name: '(anonymous_15)',
                  decl: {
                    start: { line: 480, column: 28 },
                    end: { line: 480, column: 29 }
                  },
                  loc: { start: { line: 480, column: 44 }, end: { line: 497, column: 7 } },
                  line: 480
                },
                '16': {
                  name: '(anonymous_16)',
                  decl: {
                    start: { line: 520, column: 23 },
                    end: { line: 520, column: 24 }
                  },
                  loc: { start: { line: 520, column: 46 }, end: { line: 635, column: 3 } },
                  line: 520
                },
                '17': {
                  name: '(anonymous_17)',
                  decl: {
                    start: { line: 524, column: 23 },
                    end: { line: 524, column: 24 }
                  },
                  loc: { start: { line: 524, column: 32 }, end: { line: 526, column: 5 } },
                  line: 524
                },
                '18': {
                  name: '(anonymous_18)',
                  decl: {
                    start: { line: 563, column: 13 },
                    end: { line: 563, column: 14 }
                  },
                  loc: { start: { line: 563, column: 31 }, end: { line: 566, column: 9 } },
                  line: 563
                },
                '19': {
                  name: '(anonymous_19)',
                  decl: {
                    start: { line: 567, column: 16 },
                    end: { line: 567, column: 17 }
                  },
                  loc: { start: { line: 567, column: 25 }, end: { line: 567, column: 54 } },
                  line: 567
                },
                '20': {
                  name: '(anonymous_20)',
                  decl: {
                    start: { line: 646, column: 26 },
                    end: { line: 646, column: 27 }
                  },
                  loc: { start: { line: 646, column: 31 }, end: { line: 806, column: 3 } },
                  line: 646
                },
                '21': {
                  name: '(anonymous_21)',
                  decl: {
                    start: { line: 854, column: 30 },
                    end: { line: 854, column: 31 }
                  },
                  loc: { start: { line: 854, column: 36 }, end: { line: 897, column: 1 } },
                  line: 854
                },
                '22': {
                  name: '(anonymous_22)',
                  decl: {
                    start: { line: 857, column: 21 },
                    end: { line: 857, column: 22 }
                  },
                  loc: { start: { line: 858, column: 4 }, end: { line: 883, column: 8 } },
                  line: 858
                },
                '23': {
                  name: '(anonymous_23)',
                  decl: {
                    start: { line: 859, column: 14 },
                    end: { line: 859, column: 15 }
                  },
                  loc: { start: { line: 859, column: 22 }, end: { line: 870, column: 7 } },
                  line: 859
                },
                '24': {
                  name: '(anonymous_24)',
                  decl: {
                    start: { line: 871, column: 11 },
                    end: { line: 871, column: 12 }
                  },
                  loc: { start: { line: 871, column: 19 }, end: { line: 883, column: 7 } },
                  line: 871
                },
                '25': {
                  name: '(anonymous_25)',
                  decl: {
                    start: { line: 896, column: 29 },
                    end: { line: 896, column: 30 }
                  },
                  loc: { start: { line: 896, column: 39 }, end: { line: 896, column: 68 } },
                  line: 896
                },
                '26': {
                  name: '(anonymous_26)',
                  decl: {
                    start: { line: 899, column: 37 },
                    end: { line: 899, column: 38 }
                  },
                  loc: { start: { line: 899, column: 49 }, end: { line: 952, column: 1 } },
                  line: 899
                },
                '27': {
                  name: '(anonymous_27)',
                  decl: {
                    start: { line: 917, column: 29 },
                    end: { line: 917, column: 30 }
                  },
                  loc: { start: { line: 917, column: 39 }, end: { line: 951, column: 3 } },
                  line: 917
                },
                '28': {
                  name: '(anonymous_28)',
                  decl: {
                    start: { line: 964, column: 34 },
                    end: { line: 964, column: 35 }
                  },
                  loc: { start: { line: 964, column: 40 }, end: { line: 966, column: 3 } },
                  line: 964
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 94, column: 0 }, end: { line: 842, column: 1 } },
                  type: 'if',
                  locations: [
                    { start: { line: 94, column: 0 }, end: { line: 842, column: 1 } },
                    { start: { line: 94, column: 0 }, end: { line: 842, column: 1 } }
                  ],
                  line: 94
                },
                '1': {
                  loc: { start: { line: 119, column: 4 }, end: { line: 121, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 119, column: 4 }, end: { line: 121, column: 5 } },
                    { start: { line: 119, column: 4 }, end: { line: 121, column: 5 } }
                  ],
                  line: 119
                },
                '2': {
                  loc: { start: { line: 122, column: 11 }, end: { line: 124, column: 18 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 123, column: 8 }, end: { line: 123, column: 50 } },
                    { start: { line: 124, column: 8 }, end: { line: 124, column: 18 } }
                  ],
                  line: 122
                },
                '3': {
                  loc: { start: { line: 122, column: 11 }, end: { line: 122, column: 63 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 122, column: 11 }, end: { line: 122, column: 34 } },
                    { start: { line: 122, column: 38 }, end: { line: 122, column: 63 } }
                  ],
                  line: 122
                },
                '4': {
                  loc: { start: { line: 123, column: 8 }, end: { line: 123, column: 50 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 123, column: 8 }, end: { line: 123, column: 38 } },
                    { start: { line: 123, column: 42 }, end: { line: 123, column: 50 } }
                  ],
                  line: 123
                },
                '5': {
                  loc: { start: { line: 186, column: 4 }, end: { line: 196, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 186, column: 4 }, end: { line: 196, column: 5 } },
                    { start: { line: 186, column: 4 }, end: { line: 196, column: 5 } }
                  ],
                  line: 186
                },
                '6': {
                  loc: { start: { line: 186, column: 8 }, end: { line: 186, column: 55 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 186, column: 8 }, end: { line: 186, column: 20 } },
                    { start: { line: 186, column: 24 }, end: { line: 186, column: 55 } }
                  ],
                  line: 186
                },
                '7': {
                  loc: { start: { line: 191, column: 8 }, end: { line: 191, column: 77 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 191, column: 33 }, end: { line: 191, column: 70 } },
                    { start: { line: 191, column: 73 }, end: { line: 191, column: 77 } }
                  ],
                  line: 191
                },
                '8': {
                  loc: { start: { line: 194, column: 8 }, end: { line: 194, column: 72 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 194, column: 35 }, end: { line: 194, column: 39 } },
                    { start: { line: 194, column: 42 }, end: { line: 194, column: 72 } }
                  ],
                  line: 194
                },
                '9': {
                  loc: { start: { line: 215, column: 6 }, end: { line: 215, column: 71 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 215, column: 30 }, end: { line: 215, column: 55 } },
                    { start: { line: 215, column: 58 }, end: { line: 215, column: 71 } }
                  ],
                  line: 215
                },
                '10': {
                  loc: { start: { line: 217, column: 4 }, end: { line: 220, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 217, column: 4 }, end: { line: 220, column: 5 } },
                    { start: { line: 217, column: 4 }, end: { line: 220, column: 5 } }
                  ],
                  line: 217
                },
                '11': {
                  loc: { start: { line: 221, column: 4 }, end: { line: 226, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 221, column: 4 }, end: { line: 226, column: 5 } },
                    { start: { line: 221, column: 4 }, end: { line: 226, column: 5 } }
                  ],
                  line: 221
                },
                '12': {
                  loc: { start: { line: 223, column: 11 }, end: { line: 226, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 223, column: 11 }, end: { line: 226, column: 5 } },
                    { start: { line: 223, column: 11 }, end: { line: 226, column: 5 } }
                  ],
                  line: 223
                },
                '13': {
                  loc: { start: { line: 233, column: 4 }, end: { line: 237, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 233, column: 4 }, end: { line: 237, column: 5 } },
                    { start: { line: 233, column: 4 }, end: { line: 237, column: 5 } }
                  ],
                  line: 233
                },
                '14': {
                  loc: { start: { line: 284, column: 4 }, end: { line: 284, column: 28 } },
                  type: 'if',
                  locations: [
                    { start: { line: 284, column: 4 }, end: { line: 284, column: 28 } },
                    { start: { line: 284, column: 4 }, end: { line: 284, column: 28 } }
                  ],
                  line: 284
                },
                '15': {
                  loc: { start: { line: 285, column: 4 }, end: { line: 285, column: 28 } },
                  type: 'if',
                  locations: [
                    { start: { line: 285, column: 4 }, end: { line: 285, column: 28 } },
                    { start: { line: 285, column: 4 }, end: { line: 285, column: 28 } }
                  ],
                  line: 285
                },
                '16': {
                  loc: { start: { line: 299, column: 8 }, end: { line: 310, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 299, column: 8 }, end: { line: 310, column: 9 } },
                    { start: { line: 299, column: 8 }, end: { line: 310, column: 9 } }
                  ],
                  line: 299
                },
                '17': {
                  loc: { start: { line: 305, column: 21 }, end: { line: 305, column: 66 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 305, column: 61 }, end: { line: 305, column: 62 } },
                    { start: { line: 305, column: 65 }, end: { line: 305, column: 66 } }
                  ],
                  line: 305
                },
                '18': {
                  loc: { start: { line: 306, column: 17 }, end: { line: 306, column: 70 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 306, column: 45 }, end: { line: 306, column: 63 } },
                    { start: { line: 306, column: 66 }, end: { line: 306, column: 70 } }
                  ],
                  line: 306
                },
                '19': {
                  loc: { start: { line: 307, column: 17 }, end: { line: 307, column: 62 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 307, column: 41 }, end: { line: 307, column: 55 } },
                    { start: { line: 307, column: 58 }, end: { line: 307, column: 62 } }
                  ],
                  line: 307
                },
                '20': {
                  loc: { start: { line: 308, column: 17 }, end: { line: 308, column: 56 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 308, column: 38 }, end: { line: 308, column: 49 } },
                    { start: { line: 308, column: 52 }, end: { line: 308, column: 56 } }
                  ],
                  line: 308
                },
                '21': {
                  loc: { start: { line: 327, column: 4 }, end: { line: 327, column: 41 } },
                  type: 'if',
                  locations: [
                    { start: { line: 327, column: 4 }, end: { line: 327, column: 41 } },
                    { start: { line: 327, column: 4 }, end: { line: 327, column: 41 } }
                  ],
                  line: 327
                },
                '22': {
                  loc: { start: { line: 332, column: 14 }, end: { line: 332, column: 45 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 332, column: 29 }, end: { line: 332, column: 36 } },
                    { start: { line: 332, column: 39 }, end: { line: 332, column: 45 } }
                  ],
                  line: 332
                },
                '23': {
                  loc: { start: { line: 347, column: 6 }, end: { line: 358, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 347, column: 6 }, end: { line: 358, column: 7 } },
                    { start: { line: 347, column: 6 }, end: { line: 358, column: 7 } }
                  ],
                  line: 347
                },
                '24': {
                  loc: { start: { line: 348, column: 8 }, end: { line: 350, column: 43 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 348, column: 8 }, end: { line: 348, column: 23 } },
                    { start: { line: 349, column: 8 }, end: { line: 349, column: 33 } },
                    { start: { line: 350, column: 8 }, end: { line: 350, column: 43 } }
                  ],
                  line: 348
                },
                '25': {
                  loc: { start: { line: 378, column: 4 }, end: { line: 380, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 378, column: 4 }, end: { line: 380, column: 5 } },
                    { start: { line: 378, column: 4 }, end: { line: 380, column: 5 } }
                  ],
                  line: 378
                },
                '26': {
                  loc: { start: { line: 388, column: 6 }, end: { line: 389, column: 40 } },
                  type: 'if',
                  locations: [
                    { start: { line: 388, column: 6 }, end: { line: 389, column: 40 } },
                    { start: { line: 388, column: 6 }, end: { line: 389, column: 40 } }
                  ],
                  line: 388
                },
                '27': {
                  loc: { start: { line: 391, column: 6 }, end: { line: 391, column: 33 } },
                  type: 'if',
                  locations: [
                    { start: { line: 391, column: 6 }, end: { line: 391, column: 33 } },
                    { start: { line: 391, column: 6 }, end: { line: 391, column: 33 } }
                  ],
                  line: 391
                },
                '28': {
                  loc: { start: { line: 395, column: 4 }, end: { line: 395, column: 73 } },
                  type: 'if',
                  locations: [
                    { start: { line: 395, column: 4 }, end: { line: 395, column: 73 } },
                    { start: { line: 395, column: 4 }, end: { line: 395, column: 73 } }
                  ],
                  line: 395
                },
                '29': {
                  loc: { start: { line: 402, column: 4 }, end: { line: 462, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 402, column: 4 }, end: { line: 462, column: 5 } },
                    { start: { line: 402, column: 4 }, end: { line: 462, column: 5 } }
                  ],
                  line: 402
                },
                '30': {
                  loc: { start: { line: 405, column: 6 }, end: { line: 419, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 405, column: 6 }, end: { line: 419, column: 7 } },
                    { start: { line: 405, column: 6 }, end: { line: 419, column: 7 } }
                  ],
                  line: 405
                },
                '31': {
                  loc: { start: { line: 406, column: 8 }, end: { line: 410, column: 30 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 406, column: 8 }, end: { line: 406, column: 14 } },
                    { start: { line: 407, column: 8 }, end: { line: 407, column: 17 } },
                    { start: { line: 408, column: 8 }, end: { line: 408, column: 26 } },
                    { start: { line: 409, column: 8 }, end: { line: 409, column: 28 } },
                    { start: { line: 410, column: 8 }, end: { line: 410, column: 30 } }
                  ],
                  line: 406
                },
                '32': {
                  loc: { start: { line: 422, column: 6 }, end: { line: 451, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 422, column: 6 }, end: { line: 451, column: 7 } },
                    { start: { line: 422, column: 6 }, end: { line: 451, column: 7 } }
                  ],
                  line: 422
                },
                '33': {
                  loc: { start: { line: 430, column: 20 }, end: { line: 430, column: 78 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 430, column: 34 }, end: { line: 430, column: 73 } },
                    { start: { line: 430, column: 76 }, end: { line: 430, column: 78 } }
                  ],
                  line: 430
                },
                '34': {
                  loc: { start: { line: 440, column: 37 }, end: { line: 440, column: 75 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 440, column: 66 }, end: { line: 440, column: 70 } },
                    { start: { line: 440, column: 73 }, end: { line: 440, column: 75 } }
                  ],
                  line: 440
                },
                '35': {
                  loc: { start: { line: 448, column: 20 }, end: { line: 448, column: 78 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 448, column: 34 }, end: { line: 448, column: 73 } },
                    { start: { line: 448, column: 76 }, end: { line: 448, column: 78 } }
                  ],
                  line: 448
                },
                '36': {
                  loc: { start: { line: 459, column: 8 }, end: { line: 459, column: 72 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 459, column: 38 }, end: { line: 459, column: 60 } },
                    { start: { line: 459, column: 63 }, end: { line: 459, column: 72 } }
                  ],
                  line: 459
                },
                '37': {
                  loc: { start: { line: 475, column: 6 }, end: { line: 477, column: 35 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 476, column: 10 }, end: { line: 476, column: 23 } },
                    { start: { line: 477, column: 10 }, end: { line: 477, column: 35 } }
                  ],
                  line: 475
                },
                '38': {
                  loc: { start: { line: 475, column: 6 }, end: { line: 475, column: 58 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 475, column: 6 }, end: { line: 475, column: 19 } },
                    { start: { line: 475, column: 23 }, end: { line: 475, column: 58 } }
                  ],
                  line: 475
                },
                '39': {
                  loc: { start: { line: 478, column: 4 }, end: { line: 499, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 478, column: 4 }, end: { line: 499, column: 5 } },
                    { start: { line: 478, column: 4 }, end: { line: 499, column: 5 } }
                  ],
                  line: 478
                },
                '40': {
                  loc: { start: { line: 491, column: 8 }, end: { line: 495, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 491, column: 8 }, end: { line: 495, column: 9 } },
                    { start: { line: 491, column: 8 }, end: { line: 495, column: 9 } }
                  ],
                  line: 491
                },
                '41': {
                  loc: { start: { line: 522, column: 4 }, end: { line: 522, column: 42 } },
                  type: 'if',
                  locations: [
                    { start: { line: 522, column: 4 }, end: { line: 522, column: 42 } },
                    { start: { line: 522, column: 4 }, end: { line: 522, column: 42 } }
                  ],
                  line: 522
                },
                '42': {
                  loc: { start: { line: 525, column: 27 }, end: { line: 525, column: 51 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 525, column: 27 }, end: { line: 525, column: 45 } },
                    { start: { line: 525, column: 49 }, end: { line: 525, column: 51 } }
                  ],
                  line: 525
                },
                '43': {
                  loc: { start: { line: 533, column: 6 }, end: { line: 549, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 533, column: 6 }, end: { line: 549, column: 7 } },
                    { start: { line: 533, column: 6 }, end: { line: 549, column: 7 } }
                  ],
                  line: 533
                },
                '44': {
                  loc: { start: { line: 542, column: 10 }, end: { line: 546, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 542, column: 10 }, end: { line: 546, column: 11 } },
                    { start: { line: 542, column: 10 }, end: { line: 546, column: 11 } }
                  ],
                  line: 542
                },
                '45': {
                  loc: { start: { line: 555, column: 4 }, end: { line: 555, column: 51 } },
                  type: 'if',
                  locations: [
                    { start: { line: 555, column: 4 }, end: { line: 555, column: 51 } },
                    { start: { line: 555, column: 4 }, end: { line: 555, column: 51 } }
                  ],
                  line: 555
                },
                '46': {
                  loc: { start: { line: 557, column: 4 }, end: { line: 633, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 557, column: 4 }, end: { line: 633, column: 5 } },
                    { start: { line: 557, column: 4 }, end: { line: 633, column: 5 } }
                  ],
                  line: 557
                },
                '47': {
                  loc: { start: { line: 571, column: 6 }, end: { line: 571, column: 58 } },
                  type: 'if',
                  locations: [
                    { start: { line: 571, column: 6 }, end: { line: 571, column: 58 } },
                    { start: { line: 571, column: 6 }, end: { line: 571, column: 58 } }
                  ],
                  line: 571
                },
                '48': {
                  loc: { start: { line: 581, column: 6 }, end: { line: 596, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 581, column: 6 }, end: { line: 596, column: 7 } },
                    { start: { line: 581, column: 6 }, end: { line: 596, column: 7 } }
                  ],
                  line: 581
                },
                '49': {
                  loc: { start: { line: 582, column: 8 }, end: { line: 584, column: 37 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 582, column: 8 }, end: { line: 582, column: 33 } },
                    { start: { line: 583, column: 8 }, end: { line: 583, column: 35 } },
                    { start: { line: 584, column: 8 }, end: { line: 584, column: 37 } }
                  ],
                  line: 582
                },
                '50': {
                  loc: { start: { line: 595, column: 8 }, end: { line: 595, column: 71 } },
                  type: 'if',
                  locations: [
                    { start: { line: 595, column: 8 }, end: { line: 595, column: 71 } },
                    { start: { line: 595, column: 8 }, end: { line: 595, column: 71 } }
                  ],
                  line: 595
                },
                '51': {
                  loc: { start: { line: 600, column: 6 }, end: { line: 626, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 600, column: 6 }, end: { line: 626, column: 7 } },
                    { start: { line: 600, column: 6 }, end: { line: 626, column: 7 } }
                  ],
                  line: 600
                },
                '52': {
                  loc: { start: { line: 601, column: 8 }, end: { line: 602, column: 50 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 601, column: 8 }, end: { line: 601, column: 39 } },
                    { start: { line: 602, column: 8 }, end: { line: 602, column: 50 } }
                  ],
                  line: 601
                },
                '53': {
                  loc: { start: { line: 607, column: 22 }, end: { line: 609, column: 18 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 608, column: 16 }, end: { line: 608, column: 55 } },
                    { start: { line: 609, column: 16 }, end: { line: 609, column: 18 } }
                  ],
                  line: 607
                },
                '54': {
                  loc: { start: { line: 619, column: 22 }, end: { line: 621, column: 18 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 620, column: 16 }, end: { line: 620, column: 55 } },
                    { start: { line: 621, column: 16 }, end: { line: 621, column: 18 } }
                  ],
                  line: 619
                },
                '55': {
                  loc: { start: { line: 630, column: 6 }, end: { line: 632, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 630, column: 6 }, end: { line: 632, column: 7 } },
                    { start: { line: 630, column: 6 }, end: { line: 632, column: 7 } }
                  ],
                  line: 630
                },
                '56': {
                  loc: { start: { line: 630, column: 10 }, end: { line: 630, column: 47 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 630, column: 10 }, end: { line: 630, column: 23 } },
                    { start: { line: 630, column: 27 }, end: { line: 630, column: 47 } }
                  ],
                  line: 630
                },
                '57': {
                  loc: { start: { line: 647, column: 4 }, end: { line: 647, column: 41 } },
                  type: 'if',
                  locations: [
                    { start: { line: 647, column: 4 }, end: { line: 647, column: 41 } },
                    { start: { line: 647, column: 4 }, end: { line: 647, column: 41 } }
                  ],
                  line: 647
                },
                '58': {
                  loc: { start: { line: 650, column: 4 }, end: { line: 657, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 650, column: 4 }, end: { line: 657, column: 5 } },
                    { start: { line: 650, column: 4 }, end: { line: 657, column: 5 } }
                  ],
                  line: 650
                },
                '59': {
                  loc: { start: { line: 652, column: 11 }, end: { line: 657, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 652, column: 11 }, end: { line: 657, column: 5 } },
                    { start: { line: 652, column: 11 }, end: { line: 657, column: 5 } }
                  ],
                  line: 652
                },
                '60': {
                  loc: { start: { line: 654, column: 11 }, end: { line: 657, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 654, column: 11 }, end: { line: 657, column: 5 } },
                    { start: { line: 654, column: 11 }, end: { line: 657, column: 5 } }
                  ],
                  line: 654
                },
                '61': {
                  loc: { start: { line: 656, column: 6 }, end: { line: 656, column: 44 } },
                  type: 'if',
                  locations: [
                    { start: { line: 656, column: 6 }, end: { line: 656, column: 44 } },
                    { start: { line: 656, column: 6 }, end: { line: 656, column: 44 } }
                  ],
                  line: 656
                },
                '62': {
                  loc: { start: { line: 658, column: 4 }, end: { line: 658, column: 23 } },
                  type: 'if',
                  locations: [
                    { start: { line: 658, column: 4 }, end: { line: 658, column: 23 } },
                    { start: { line: 658, column: 4 }, end: { line: 658, column: 23 } }
                  ],
                  line: 658
                },
                '63': {
                  loc: { start: { line: 667, column: 4 }, end: { line: 669, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 667, column: 4 }, end: { line: 669, column: 5 } },
                    { start: { line: 667, column: 4 }, end: { line: 669, column: 5 } }
                  ],
                  line: 667
                },
                '64': {
                  loc: { start: { line: 672, column: 4 }, end: { line: 672, column: 25 } },
                  type: 'if',
                  locations: [
                    { start: { line: 672, column: 4 }, end: { line: 672, column: 25 } },
                    { start: { line: 672, column: 4 }, end: { line: 672, column: 25 } }
                  ],
                  line: 672
                },
                '65': {
                  loc: { start: { line: 682, column: 6 }, end: { line: 686, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 682, column: 6 }, end: { line: 686, column: 7 } },
                    { start: { line: 682, column: 6 }, end: { line: 686, column: 7 } }
                  ],
                  line: 682
                },
                '66': {
                  loc: { start: { line: 689, column: 4 }, end: { line: 689, column: 30 } },
                  type: 'if',
                  locations: [
                    { start: { line: 689, column: 4 }, end: { line: 689, column: 30 } },
                    { start: { line: 689, column: 4 }, end: { line: 689, column: 30 } }
                  ],
                  line: 689
                },
                '67': {
                  loc: { start: { line: 693, column: 4 }, end: { line: 706, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 693, column: 4 }, end: { line: 706, column: 5 } },
                    { start: { line: 693, column: 4 }, end: { line: 706, column: 5 } }
                  ],
                  line: 693
                },
                '68': {
                  loc: { start: { line: 694, column: 6 }, end: { line: 697, column: 32 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 694, column: 6 }, end: { line: 694, column: 16 } },
                    { start: { line: 695, column: 6 }, end: { line: 695, column: 28 } },
                    { start: { line: 696, column: 6 }, end: { line: 696, column: 30 } },
                    { start: { line: 697, column: 6 }, end: { line: 697, column: 32 } }
                  ],
                  line: 694
                },
                '69': {
                  loc: { start: { line: 708, column: 4 }, end: { line: 805, column: 5 } },
                  type: 'switch',
                  locations: [
                    { start: { line: 709, column: 6 }, end: { line: 736, column: 7 } },
                    { start: { line: 737, column: 6 }, end: { line: 767, column: 7 } },
                    { start: { line: 769, column: 6 }, end: { line: 804, column: 7 } }
                  ],
                  line: 708
                },
                '70': {
                  loc: { start: { line: 713, column: 8 }, end: { line: 734, column: 9 } },
                  type: 'switch',
                  locations: [
                    { start: { line: 714, column: 10 }, end: { line: 723, column: 11 } },
                    { start: { line: 724, column: 10 }, end: { line: 733, column: 11 } }
                  ],
                  line: 713
                },
                '71': {
                  loc: { start: { line: 738, column: 8 }, end: { line: 765, column: 9 } },
                  type: 'switch',
                  locations: [
                    { start: { line: 739, column: 10 }, end: { line: 764, column: 11 } }
                  ],
                  line: 738
                },
                '72': {
                  loc: { start: { line: 742, column: 12 }, end: { line: 744, column: 13 } },
                  type: 'if',
                  locations: [
                    { start: { line: 742, column: 12 }, end: { line: 744, column: 13 } },
                    { start: { line: 742, column: 12 }, end: { line: 744, column: 13 } }
                  ],
                  line: 742
                },
                '73': {
                  loc: { start: { line: 742, column: 16 }, end: { line: 742, column: 58 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 742, column: 16 }, end: { line: 742, column: 22 } },
                    { start: { line: 742, column: 26 }, end: { line: 742, column: 58 } }
                  ],
                  line: 742
                },
                '74': {
                  loc: { start: { line: 756, column: 26 }, end: { line: 758, column: 22 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 757, column: 20 }, end: { line: 757, column: 59 } },
                    { start: { line: 758, column: 20 }, end: { line: 758, column: 22 } }
                  ],
                  line: 756
                },
                '75': {
                  loc: { start: { line: 762, column: 12 }, end: { line: 762, column: 65 } },
                  type: 'if',
                  locations: [
                    { start: { line: 762, column: 12 }, end: { line: 762, column: 65 } },
                    { start: { line: 762, column: 12 }, end: { line: 762, column: 65 } }
                  ],
                  line: 762
                },
                '76': {
                  loc: { start: { line: 770, column: 8 }, end: { line: 803, column: 9 } },
                  type: 'switch',
                  locations: [
                    { start: { line: 771, column: 10 }, end: { line: 802, column: 11 } }
                  ],
                  line: 770
                },
                '77': {
                  loc: { start: { line: 782, column: 24 }, end: { line: 784, column: 20 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 783, column: 18 }, end: { line: 783, column: 57 } },
                    { start: { line: 784, column: 18 }, end: { line: 784, column: 20 } }
                  ],
                  line: 782
                },
                '78': {
                  loc: { start: { line: 790, column: 12 }, end: { line: 798, column: 13 } },
                  type: 'if',
                  locations: [
                    { start: { line: 790, column: 12 }, end: { line: 798, column: 13 } },
                    { start: { line: 790, column: 12 }, end: { line: 798, column: 13 } }
                  ],
                  line: 790
                },
                '79': {
                  loc: { start: { line: 800, column: 12 }, end: { line: 800, column: 65 } },
                  type: 'if',
                  locations: [
                    { start: { line: 800, column: 12 }, end: { line: 800, column: 65 } },
                    { start: { line: 800, column: 12 }, end: { line: 800, column: 65 } }
                  ],
                  line: 800
                },
                '80': {
                  loc: { start: { line: 860, column: 8 }, end: { line: 862, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 860, column: 8 }, end: { line: 862, column: 9 } },
                    { start: { line: 860, column: 8 }, end: { line: 862, column: 9 } }
                  ],
                  line: 860
                },
                '81': {
                  loc: { start: { line: 863, column: 8 }, end: { line: 865, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 863, column: 8 }, end: { line: 865, column: 9 } },
                    { start: { line: 863, column: 8 }, end: { line: 865, column: 9 } }
                  ],
                  line: 863
                },
                '82': {
                  loc: { start: { line: 874, column: 8 }, end: { line: 880, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 874, column: 8 }, end: { line: 880, column: 9 } },
                    { start: { line: 874, column: 8 }, end: { line: 880, column: 9 } }
                  ],
                  line: 874
                },
                '83': {
                  loc: { start: { line: 876, column: 15 }, end: { line: 880, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 876, column: 15 }, end: { line: 880, column: 9 } },
                    { start: { line: 876, column: 15 }, end: { line: 880, column: 9 } }
                  ],
                  line: 876
                },
                '84': {
                  loc: { start: { line: 900, column: 2 }, end: { line: 902, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 900, column: 2 }, end: { line: 902, column: 3 } },
                    { start: { line: 900, column: 2 }, end: { line: 902, column: 3 } }
                  ],
                  line: 900
                },
                '85': {
                  loc: { start: { line: 904, column: 2 }, end: { line: 906, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 904, column: 2 }, end: { line: 906, column: 3 } },
                    { start: { line: 904, column: 2 }, end: { line: 906, column: 3 } }
                  ],
                  line: 904
                },
                '86': {
                  loc: { start: { line: 931, column: 4 }, end: { line: 950, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 931, column: 4 }, end: { line: 950, column: 5 } },
                    { start: { line: 931, column: 4 }, end: { line: 950, column: 5 } }
                  ],
                  line: 931
                },
                '87': {
                  loc: { start: { line: 931, column: 8 }, end: { line: 931, column: 70 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 931, column: 8 }, end: { line: 931, column: 17 } },
                    { start: { line: 931, column: 21 }, end: { line: 931, column: 70 } }
                  ],
                  line: 931
                },
                '88': {
                  loc: { start: { line: 933, column: 8 }, end: { line: 933, column: 69 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 933, column: 37 }, end: { line: 933, column: 55 } },
                    { start: { line: 933, column: 58 }, end: { line: 933, column: 69 } }
                  ],
                  line: 933
                },
                '89': {
                  loc: { start: { line: 934, column: 6 }, end: { line: 948, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 934, column: 6 }, end: { line: 948, column: 7 } },
                    { start: { line: 934, column: 6 }, end: { line: 948, column: 7 } }
                  ],
                  line: 934
                },
                '90': {
                  loc: { start: { line: 957, column: 0 }, end: { line: 967, column: 1 } },
                  type: 'if',
                  locations: [
                    { start: { line: 957, column: 0 }, end: { line: 967, column: 1 } },
                    { start: { line: 957, column: 0 }, end: { line: 967, column: 1 } }
                  ],
                  line: 957
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0,
                '118': 0,
                '119': 0,
                '120': 0,
                '121': 0,
                '122': 0,
                '123': 0,
                '124': 0,
                '125': 0,
                '126': 0,
                '127': 0,
                '128': 0,
                '129': 0,
                '130': 0,
                '131': 0,
                '132': 0,
                '133': 0,
                '134': 0,
                '135': 0,
                '136': 0,
                '137': 0,
                '138': 0,
                '139': 0,
                '140': 0,
                '141': 0,
                '142': 0,
                '143': 0,
                '144': 0,
                '145': 0,
                '146': 0,
                '147': 0,
                '148': 0,
                '149': 0,
                '150': 0,
                '151': 0,
                '152': 0,
                '153': 0,
                '154': 0,
                '155': 0,
                '156': 0,
                '157': 0,
                '158': 0,
                '159': 0,
                '160': 0,
                '161': 0,
                '162': 0,
                '163': 0,
                '164': 0,
                '165': 0,
                '166': 0,
                '167': 0,
                '168': 0,
                '169': 0,
                '170': 0,
                '171': 0,
                '172': 0,
                '173': 0,
                '174': 0,
                '175': 0,
                '176': 0,
                '177': 0,
                '178': 0,
                '179': 0,
                '180': 0,
                '181': 0,
                '182': 0,
                '183': 0,
                '184': 0,
                '185': 0,
                '186': 0,
                '187': 0,
                '188': 0,
                '189': 0,
                '190': 0,
                '191': 0,
                '192': 0,
                '193': 0,
                '194': 0,
                '195': 0,
                '196': 0,
                '197': 0,
                '198': 0,
                '199': 0,
                '200': 0,
                '201': 0,
                '202': 0,
                '203': 0,
                '204': 0,
                '205': 0,
                '206': 0,
                '207': 0,
                '208': 0,
                '209': 0,
                '210': 0,
                '211': 0,
                '212': 0,
                '213': 0,
                '214': 0,
                '215': 0,
                '216': 0,
                '217': 0,
                '218': 0,
                '219': 0,
                '220': 0,
                '221': 0,
                '222': 0,
                '223': 0,
                '224': 0,
                '225': 0,
                '226': 0,
                '227': 0,
                '228': 0,
                '229': 0,
                '230': 0,
                '231': 0,
                '232': 0,
                '233': 0,
                '234': 0,
                '235': 0,
                '236': 0,
                '237': 0,
                '238': 0,
                '239': 0,
                '240': 0,
                '241': 0,
                '242': 0,
                '243': 0,
                '244': 0,
                '245': 0,
                '246': 0,
                '247': 0,
                '248': 0,
                '249': 0,
                '250': 0,
                '251': 0,
                '252': 0,
                '253': 0,
                '254': 0,
                '255': 0,
                '256': 0,
                '257': 0,
                '258': 0,
                '259': 0,
                '260': 0,
                '261': 0,
                '262': 0,
                '263': 0,
                '264': 0,
                '265': 0,
                '266': 0,
                '267': 0,
                '268': 0,
                '269': 0,
                '270': 0,
                '271': 0,
                '272': 0,
                '273': 0,
                '274': 0,
                '275': 0,
                '276': 0,
                '277': 0,
                '278': 0,
                '279': 0,
                '280': 0,
                '281': 0,
                '282': 0,
                '283': 0,
                '284': 0,
                '285': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0],
                '20': [0, 0],
                '21': [0, 0],
                '22': [0, 0],
                '23': [0, 0],
                '24': [0, 0, 0],
                '25': [0, 0],
                '26': [0, 0],
                '27': [0, 0],
                '28': [0, 0],
                '29': [0, 0],
                '30': [0, 0],
                '31': [0, 0, 0, 0, 0],
                '32': [0, 0],
                '33': [0, 0],
                '34': [0, 0],
                '35': [0, 0],
                '36': [0, 0],
                '37': [0, 0],
                '38': [0, 0],
                '39': [0, 0],
                '40': [0, 0],
                '41': [0, 0],
                '42': [0, 0],
                '43': [0, 0],
                '44': [0, 0],
                '45': [0, 0],
                '46': [0, 0],
                '47': [0, 0],
                '48': [0, 0],
                '49': [0, 0, 0],
                '50': [0, 0],
                '51': [0, 0],
                '52': [0, 0],
                '53': [0, 0],
                '54': [0, 0],
                '55': [0, 0],
                '56': [0, 0],
                '57': [0, 0],
                '58': [0, 0],
                '59': [0, 0],
                '60': [0, 0],
                '61': [0, 0],
                '62': [0, 0],
                '63': [0, 0],
                '64': [0, 0],
                '65': [0, 0],
                '66': [0, 0],
                '67': [0, 0],
                '68': [0, 0, 0, 0],
                '69': [0, 0, 0],
                '70': [0, 0],
                '71': [0],
                '72': [0, 0],
                '73': [0, 0],
                '74': [0, 0],
                '75': [0, 0],
                '76': [0],
                '77': [0, 0],
                '78': [0, 0],
                '79': [0, 0],
                '80': [0, 0],
                '81': [0, 0],
                '82': [0, 0],
                '83': [0, 0],
                '84': [0, 0],
                '85': [0, 0],
                '86': [0, 0],
                '87': [0, 0],
                '88': [0, 0],
                '89': [0, 0],
                '90': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: 'a478cd3e82ace784bcb113e4f62c514ffc3aea2c'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.symbol');
          _dereq_('core-js/modules/es.symbol.description');
          _dereq_('core-js/modules/es.symbol.iterator');
          _dereq_('core-js/modules/es.array.concat');
          _dereq_('core-js/modules/es.array.filter');
          _dereq_('core-js/modules/es.array.for-each');
          _dereq_('core-js/modules/es.array.includes');
          _dereq_('core-js/modules/es.array.iterator');
          _dereq_('core-js/modules/es.array.join');
          _dereq_('core-js/modules/es.array.map');
          _dereq_('core-js/modules/es.array.slice');
          _dereq_('core-js/modules/es.array.some');
          _dereq_('core-js/modules/es.function.name');
          _dereq_('core-js/modules/es.object.assign');
          _dereq_('core-js/modules/es.object.get-own-property-names');
          _dereq_('core-js/modules/es.object.keys');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.regexp.constructor');
          _dereq_('core-js/modules/es.regexp.exec');
          _dereq_('core-js/modules/es.regexp.to-string');
          _dereq_('core-js/modules/es.string.iterator');
          _dereq_('core-js/modules/es.string.match');
          _dereq_('core-js/modules/es.string.replace');
          _dereq_('core-js/modules/es.string.search');
          _dereq_('core-js/modules/es.string.split');
          _dereq_('core-js/modules/web.dom-collections.for-each');
          _dereq_('core-js/modules/web.dom-collections.iterator');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../main'));
          var _internationalization = _dereq_('../internationalization');
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          function _slicedToArray(arr, i) {
            return (
              _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest()
            );
          }
          function _nonIterableRest() {
            throw new TypeError('Invalid attempt to destructure non-iterable instance');
          }
          function _iterableToArrayLimit(arr, i) {
            if (
              !(
                Symbol.iterator in Object(arr) ||
                Object.prototype.toString.call(arr) === '[object Arguments]'
              )
            ) {
              return;
            }
            var _arr = [];
            var _n = true;
            var _d = false;
            var _e = undefined;
            try {
              for (
                var _i = arr[Symbol.iterator](), _s;
                !(_n = (_s = _i.next()).done);
                _n = true
              ) {
                _arr.push(_s.value);
                if (i && _arr.length === i) break;
              }
            } catch (err) {
              _d = true;
              _e = err;
            } finally {
              try {
                if (!_n && _i['return'] != null) _i['return']();
              } finally {
                if (_d) throw _e;
              }
            }
            return _arr;
          }
          function _arrayWithHoles(arr) {
            if (Array.isArray(arr)) return arr;
          }
          function _typeof(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof = function _typeof(obj) {
                return typeof obj;
              };
            } else {
              _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof(obj);
          }

          // p5.js blue, p5.js orange, auto dark green; fallback p5.js darkened magenta
          // See testColors below for all the color codes and names
          var typeColors = (cov_homui9azn.s[0]++,
          ['#2D7BB6', '#EE9900', '#4DB200', '#C83C00']);
          var misusedAtTopLevelCode = (cov_homui9azn.s[1]++, null);
          var defineMisusedAtTopLevelCode = (cov_homui9azn.s[2]++, null);

          // the threshold for the maximum allowed levenshtein distance
          // used in misspelling detection
          var EDIT_DIST_THRESHOLD = (cov_homui9azn.s[3]++, 2);

          // to enable or disable styling (color, font-size, etc. ) for fes messages
          var ENABLE_FES_STYLING = (cov_homui9azn.s[4]++, false);
          cov_homui9azn.s[5]++;

          if (typeof IS_MINIFIED !== 'undefined') {
            cov_homui9azn.b[0][0]++;
            cov_homui9azn.s[6]++;
            _main.default._friendlyError = _main.default._checkForUserDefinedFunctions = _main.default._fesErrorMonitor = function() {
              cov_homui9azn.f[0]++;
            };
          } else {
            cov_homui9azn.b[0][1]++;
            var doFriendlyWelcome = (cov_homui9azn.s[7]++, false); // TEMP until we get it all working LM

            var errorTable = (cov_homui9azn.s[8]++, _dereq_('./browser_errors').default);

            // -- Borrowed from jQuery 1.11.3 --
            var class2type = (cov_homui9azn.s[9]++, {});
            var _toString = (cov_homui9azn.s[10]++, class2type.toString);
            var names = (cov_homui9azn.s[11]++,
            [
              'Boolean',
              'Number',
              'String',
              'Function',
              'Array',
              'Date',
              'RegExp',
              'Object',
              'Error'
            ]);
            cov_homui9azn.s[12]++;

            for (var n = (cov_homui9azn.s[13]++, 0); n < names.length; n++) {
              cov_homui9azn.s[14]++;
              class2type['[object '.concat(names[n], ']')] = names[n].toLowerCase();
            }
            cov_homui9azn.s[15]++;
            var getType = function getType(obj) {
              cov_homui9azn.f[1]++;
              cov_homui9azn.s[16]++;
              if (obj == null) {
                cov_homui9azn.b[1][0]++;
                cov_homui9azn.s[17]++;
                return ''.concat(obj);
              } else {
                cov_homui9azn.b[1][1]++;
              }
              cov_homui9azn.s[18]++;
              return (cov_homui9azn.b[3][0]++, _typeof(obj) === 'object') ||
                (cov_homui9azn.b[3][1]++, typeof obj === 'function')
                ? (cov_homui9azn.b[2][0]++,
                  (cov_homui9azn.b[4][0]++, class2type[_toString.call(obj)]) ||
                    (cov_homui9azn.b[4][1]++, 'object'))
                : (cov_homui9azn.b[2][1]++, _typeof(obj));
            };

            // -- End borrow --

            // entry points into user-defined code
            var entryPoints = (cov_homui9azn.s[19]++,
            [
              'setup',
              'draw',
              'preload',
              'deviceMoved',
              'deviceTurned',
              'deviceShaken',
              'doubleClicked',
              'mousePressed',
              'mouseReleased',
              'mouseMoved',
              'mouseDragged',
              'mouseClicked',
              'mouseWheel',
              'touchStarted',
              'touchMoved',
              'touchEnded',
              'keyPressed',
              'keyReleased',
              'keyTyped',
              'windowResized'
            ]);
            cov_homui9azn.s[20]++;

            var friendlyWelcome = function friendlyWelcome() {
              cov_homui9azn.f[2]++;
              // p5.js brand - magenta: #ED225D
              //const astrixBgColor = 'transparent';
              //const astrixTxtColor = '#ED225D';
              //const welcomeBgColor = '#ED225D';
              //const welcomeTextColor = 'white';
              var welcomeMessage = (cov_homui9azn.s[21]++,
              (0, _internationalization.translator)('fes.pre', {
                message: (0, _internationalization.translator)('fes.welcome')
              }));
              cov_homui9azn.s[22]++;

              console.log(
                '    _ \n' +
                  ' /\\| |/\\ \n' +
                  " \\ ` ' /  \n" +
                  ' / , . \\  \n' +
                  ' \\/|_|\\/ ' +
                  '\n\n' +
                  welcomeMessage
              );
            };

            /**
             * Takes a message and a p5 function func, and adds a link pointing to
             * the reference documentation of func at the end of the message
             *
             * @method mapToReference
             * @private
             * @param {String} message the words to be said
             * @param {String} [func]    the name of the function to link
             *
             * @returns {String}
             */ cov_homui9azn.s[23]++;
            var mapToReference = function mapToReference(message, func) {
              cov_homui9azn.f[3]++;
              var msgWithReference = (cov_homui9azn.s[24]++, '');
              cov_homui9azn.s[25]++;
              if (
                (cov_homui9azn.b[6][0]++, func == null) ||
                (cov_homui9azn.b[6][1]++, func.substring(0, 4) === 'load')
              ) {
                cov_homui9azn.b[5][0]++;
                cov_homui9azn.s[26]++;
                msgWithReference = message;
              } else {
                cov_homui9azn.b[5][1]++;
                var methodParts = (cov_homui9azn.s[27]++, func.split('.'));
                var referenceSection = (cov_homui9azn.s[28]++,
                methodParts.length > 1
                  ? (cov_homui9azn.b[7][0]++,
                    ''.concat(methodParts[0], '.').concat(methodParts[1]))
                  : (cov_homui9azn.b[7][1]++, 'p5'));

                var funcName = (cov_homui9azn.s[29]++,
                methodParts.length === 1
                  ? (cov_homui9azn.b[8][0]++, func)
                  : (cov_homui9azn.b[8][1]++, methodParts.slice(2).join('/')));
                cov_homui9azn.s[30]++;
                msgWithReference = ''
                  .concat(message, ' (http://p5js.org/reference/#/')
                  .concat(referenceSection, '/')
                  .concat(funcName, ')');
              }
              cov_homui9azn.s[31]++;
              return msgWithReference;
            };

            /**
             * Prints out a fancy, colorful message to the console log
             *
             * @method _report
             * @private
             * @param  {String}               message the words to be said
             * @param  {String}               [func]  the name of the function to link
             * @param  {Number|String}        [color] CSS color string or error type
             *
             * @return console logs
             */ cov_homui9azn.s[32]++;
            _main.default._report = function(message, func, color) {
              cov_homui9azn.f[4]++;
              // if p5._fesLogger is set ( i.e we are running tests ), use that
              // instead of console.log
              var log = (cov_homui9azn.s[33]++,
              _main.default._fesLogger == null
                ? (cov_homui9azn.b[9][0]++, console.log.bind(console))
                : (cov_homui9azn.b[9][1]++, _main.default._fesLogger));
              cov_homui9azn.s[34]++;

              if (doFriendlyWelcome) {
                cov_homui9azn.b[10][0]++;
                cov_homui9azn.s[35]++;
                friendlyWelcome();
                cov_homui9azn.s[36]++;
                doFriendlyWelcome = false;
              } else {
                cov_homui9azn.b[10][1]++;
              }
              cov_homui9azn.s[37]++;
              if ('undefined' === getType(color)) {
                cov_homui9azn.b[11][0]++;
                cov_homui9azn.s[38]++;
                color = '#B40033'; // dark magenta
              } else {
                cov_homui9azn.b[11][1]++;
                cov_homui9azn.s[39]++;
                if (getType(color) === 'number') {
                  cov_homui9azn.b[12][0]++;
                  cov_homui9azn.s[40]++;
                  // Type to color
                  color = typeColors[color];
                } else {
                  cov_homui9azn.b[12][1]++;
                }
              }

              // Add a link to the reference docs of func at the end of the message
              cov_homui9azn.s[41]++;
              message = mapToReference(message, func);
              var style = (cov_homui9azn.s[42]++,
              ['color: '.concat(color), 'font-family: Arial', 'font-size: larger']);
              var prefixedMsg = (cov_homui9azn.s[43]++,
              (0, _internationalization.translator)('fes.pre', { message: message }));
              cov_homui9azn.s[44]++;

              if (ENABLE_FES_STYLING) {
                cov_homui9azn.b[13][0]++;
                cov_homui9azn.s[45]++;
                log('%c' + prefixedMsg, style.join(';'));
              } else {
                cov_homui9azn.b[13][1]++;
                cov_homui9azn.s[46]++;
                log(prefixedMsg);
              }
            };
            /**
             * This is a generic method that can be called from anywhere in the p5
             * library to alert users to a common error.
             *
             * @method _friendlyError
             * @private
             * @param  {Number} message message to be printed
             * @param  {String} [method] name of method
             * @param  {Number|String} [color]   CSS color string or error type
             */ cov_homui9azn.s[47]++;
            _main.default._friendlyError = function(message, method, color) {
              cov_homui9azn.f[5]++;
              cov_homui9azn.s[48]++;
              _main.default._report(message, method, color);
            };

            /**
             * This is called internally if there is a error with autoplay.
             *
             * @method _friendlyAutoplayError
             * @private
             */ cov_homui9azn.s[49]++;
            _main.default._friendlyAutoplayError = function(src) {
              cov_homui9azn.f[6]++;
              var message = (cov_homui9azn.s[50]++,
              (0, _internationalization.translator)('fes.autoplay', {
                src: src,
                link: 'https://developer.mozilla.org/docs/Web/Media/Autoplay_guide'
              }));
              cov_homui9azn.s[51]++;

              console.log(
                (0, _internationalization.translator)('fes.pre', { message: message })
              );
            };

            /**
             * An implementation of
             * https://en.wikipedia.org/wiki/Wagner%E2%80%93Fischer_algorithm to
             * compute the Levenshtein distance. It gives a measure of how dissimilar
             * two strings are. If the "distance" between them is small enough, it is
             * reasonable to think that one is the misspelled version of the other.
             * @method computeEditDistance
             * @private
             * @param {String} w1 the first word
             * @param {String} w2 the second word
             *
             * @returns {Number} the "distance" between the two words, a smaller value
             *                   indicates that the words are similar
             */ cov_homui9azn.s[52]++;
            var computeEditDistance = function computeEditDistance(w1, w2) {
              cov_homui9azn.f[7]++;
              var l1 = (cov_homui9azn.s[53]++, w1.length),
                l2 = (cov_homui9azn.s[54]++, w2.length);
              cov_homui9azn.s[55]++;
              if (l1 === 0) {
                cov_homui9azn.b[14][0]++;
                cov_homui9azn.s[56]++;
                return w2;
              } else {
                cov_homui9azn.b[14][1]++;
              }
              cov_homui9azn.s[57]++;
              if (l2 === 0) {
                cov_homui9azn.b[15][0]++;
                cov_homui9azn.s[58]++;
                return w1;
              } else {
                cov_homui9azn.b[15][1]++;
              }

              var prev = (cov_homui9azn.s[59]++, []);
              var cur = (cov_homui9azn.s[60]++, []);
              cov_homui9azn.s[61]++;

              for (var j = (cov_homui9azn.s[62]++, 0); j < l2 + 1; j++) {
                cov_homui9azn.s[63]++;
                cur[j] = j;
              }
              cov_homui9azn.s[64]++;

              prev = cur;
              cov_homui9azn.s[65]++;

              for (var i = (cov_homui9azn.s[66]++, 1); i < l1 + 1; i++) {
                cov_homui9azn.s[67]++;
                cur = [];
                cov_homui9azn.s[68]++;
                for (var _j = (cov_homui9azn.s[69]++, 0); _j < l2 + 1; _j++) {
                  cov_homui9azn.s[70]++;
                  if (_j === 0) {
                    cov_homui9azn.b[16][0]++;
                    cov_homui9azn.s[71]++;
                    cur[_j] = i;
                  } else {
                    cov_homui9azn.b[16][1]++;
                    var a1 = (cov_homui9azn.s[72]++, w1[i - 1]),
                      a2 = (cov_homui9azn.s[73]++, w2[_j - 1]);
                    var temp = (cov_homui9azn.s[74]++, 999999);
                    var cost = (cov_homui9azn.s[75]++,
                    a1.toLowerCase() === a2.toLowerCase()
                      ? (cov_homui9azn.b[17][0]++, 0)
                      : (cov_homui9azn.b[17][1]++, 1));
                    cov_homui9azn.s[76]++;
                    temp =
                      temp > cost + prev[_j - 1]
                        ? (cov_homui9azn.b[18][0]++, cost + prev[_j - 1])
                        : (cov_homui9azn.b[18][1]++, temp);
                    cov_homui9azn.s[77]++;
                    temp =
                      temp > 1 + cur[_j - 1]
                        ? (cov_homui9azn.b[19][0]++, 1 + cur[_j - 1])
                        : (cov_homui9azn.b[19][1]++, temp);
                    cov_homui9azn.s[78]++;
                    temp =
                      temp > 1 + prev[_j]
                        ? (cov_homui9azn.b[20][0]++, 1 + prev[_j])
                        : (cov_homui9azn.b[20][1]++, temp);
                    cov_homui9azn.s[79]++;
                    cur[_j] = temp;
                  }
                }
                cov_homui9azn.s[80]++;
                prev = cur;
              }
              cov_homui9azn.s[81]++;

              return cur[l2];
            };

            /**
             * checks if the various functions such as setup, draw, preload have been
             * defined with capitalization mistakes
             * @method checkForUserDefinedFunctions
             * @private
             * @param {*} context The current default context. It's set to window in
             * "global mode" and to a p5 instance in "instance mode"
             */ cov_homui9azn.s[82]++;
            var checkForUserDefinedFunctions = function checkForUserDefinedFunctions(
              context
            ) {
              cov_homui9azn.f[8]++;
              cov_homui9azn.s[83]++;
              if (_main.default.disableFriendlyErrors) {
                cov_homui9azn.b[21][0]++;
                cov_homui9azn.s[84]++;
                return;
              } else {
                cov_homui9azn.b[21][1]++;
              }

              // if using instance mode, this function would be called with the current
              // instance as context
              var instanceMode = (cov_homui9azn.s[85]++, context instanceof _main.default);
              cov_homui9azn.s[86]++;
              context = instanceMode
                ? (cov_homui9azn.b[22][0]++, context)
                : (cov_homui9azn.b[22][1]++, window);
              var fnNames = (cov_homui9azn.s[87]++, entryPoints);

              var fxns = (cov_homui9azn.s[88]++, {});
              // lowercasename -> actualName mapping
              cov_homui9azn.s[89]++;
              fnNames.forEach(function(symbol) {
                cov_homui9azn.f[9]++;
                cov_homui9azn.s[90]++;
                fxns[symbol.toLowerCase()] = symbol;
              });
              cov_homui9azn.s[91]++;

              for (
                var _i = 0, _Object$keys = Object.keys(context);
                _i < _Object$keys.length;
                _i++
              ) {
                var prop = _Object$keys[_i];
                var lowercase = (cov_homui9azn.s[92]++, prop.toLowerCase());

                // check if the lowercase property name has an entry in fxns, if the
                // actual name with correct capitalization doesnt exist in context,
                // and if the user-defined symbol is of the type function
                cov_homui9azn.s[93]++;
                if (
                  (cov_homui9azn.b[24][0]++, fxns[lowercase]) &&
                  (cov_homui9azn.b[24][1]++, !context[fxns[lowercase]]) &&
                  (cov_homui9azn.b[24][2]++, typeof context[prop] === 'function')
                ) {
                  cov_homui9azn.b[23][0]++;
                  var msg = (cov_homui9azn.s[94]++,
                  (0, _internationalization.translator)('fes.checkUserDefinedFns', {
                    name: prop,
                    actualName: fxns[lowercase]
                  }));
                  cov_homui9azn.s[95]++;

                  _main.default._friendlyError(msg, fxns[lowercase]);
                } else {
                  cov_homui9azn.b[23][1]++;
                }
              }
            };

            /**
             * compares the the symbol caught in the ReferenceErrror to everything
             * in misusedAtTopLevel ( all public p5 properties ). The use of
             * misusedAtTopLevel here is for convenience as it was an array that was
             * already defined when spelling check was implemented. For this particular
             * use-case, it's a misnomer.
             *
             * @method handleMisspelling
             * @private
             * @param {String} errSym the symbol to whose spelling to check
             * @param {Error} error the ReferenceError object
             *
             * @returns {Boolean} a boolean value indicating if this error was likely due
             * to a mis-spelling
             */ cov_homui9azn.s[96]++;
            var handleMisspelling = function handleMisspelling(errSym, error) {
              cov_homui9azn.f[10]++;
              cov_homui9azn.s[97]++;
              if (!misusedAtTopLevelCode) {
                cov_homui9azn.b[25][0]++;
                cov_homui9azn.s[98]++;
                defineMisusedAtTopLevelCode();
              } else {
                cov_homui9azn.b[25][1]++;
              }

              var distanceMap = (cov_homui9azn.s[99]++, {});
              var min = (cov_homui9azn.s[100]++, 999999);
              // compute the levenshtein distance for the symbol against all known
              // public p5 properties. Find the property with the minimum distance
              cov_homui9azn.s[101]++;
              misusedAtTopLevelCode.forEach(function(symbol) {
                cov_homui9azn.f[11]++;
                var dist = (cov_homui9azn.s[102]++,
                computeEditDistance(errSym, symbol.name));
                cov_homui9azn.s[103]++;
                if (distanceMap[dist]) {
                  cov_homui9azn.b[26][0]++;
                  cov_homui9azn.s[104]++;
                  distanceMap[dist].push(symbol);
                } else {
                  cov_homui9azn.b[26][1]++;
                  cov_homui9azn.s[105]++;
                  distanceMap[dist] = [symbol];
                }
                cov_homui9azn.s[106]++;

                if (dist < min) {
                  cov_homui9azn.b[27][0]++;
                  cov_homui9azn.s[107]++;
                  min = dist;
                } else {
                  cov_homui9azn.b[27][1]++;
                }
              });

              // if the closest match has more "distance" than the max allowed threshold
              cov_homui9azn.s[108]++;
              if (min > Math.min(EDIT_DIST_THRESHOLD, errSym.length)) {
                cov_homui9azn.b[28][0]++;
                cov_homui9azn.s[109]++;
                return false;
              } else {
                cov_homui9azn.b[28][1]++;
              }

              // Show a message only if the caught symbol and the matched property name
              // differ in their name ( either letter difference or difference of case )
              var matchedSymbols = (cov_homui9azn.s[110]++,
              distanceMap[min].filter(function(symbol) {
                cov_homui9azn.f[12]++;
                cov_homui9azn.s[111]++;
                return symbol.name !== errSym;
              }));
              cov_homui9azn.s[112]++;

              if (matchedSymbols.length !== 0) {
                cov_homui9azn.b[29][0]++;
                var parsed = (cov_homui9azn.s[113]++,
                _main.default._getErrorStackParser().parse(error));
                var locationObj;
                cov_homui9azn.s[114]++;
                if (
                  (cov_homui9azn.b[31][0]++, parsed) &&
                  (cov_homui9azn.b[31][1]++, parsed[0]) &&
                  (cov_homui9azn.b[31][2]++, parsed[0].fileName) &&
                  (cov_homui9azn.b[31][3]++, parsed[0].lineNumber) &&
                  (cov_homui9azn.b[31][4]++, parsed[0].columnNumber)
                ) {
                  cov_homui9azn.b[30][0]++;
                  cov_homui9azn.s[115]++;
                  locationObj = {
                    location: ''
                      .concat(parsed[0].fileName, ':')
                      .concat(parsed[0].lineNumber, ':')
                      .concat(parsed[0].columnNumber),

                    file: parsed[0].fileName.split('/').slice(-1),
                    line: parsed[0].lineNumber
                  };
                } else {
                  cov_homui9azn.b[30][1]++;
                }

                var msg;
                cov_homui9azn.s[116]++;
                if (matchedSymbols.length === 1) {
                  cov_homui9azn.b[32][0]++;
                  cov_homui9azn.s[117]++;
                  // To be used when there is only one closest match. The count parameter
                  // allows i18n to pick between the keys "fes.misspelling" and
                  // "fes.misspelling__plural"
                  msg = (0, _internationalization.translator)('fes.misspelling', {
                    name: errSym,
                    actualName: matchedSymbols[0].name,
                    type: matchedSymbols[0].type,
                    location: locationObj
                      ? (cov_homui9azn.b[33][0]++,
                        (0, _internationalization.translator)('fes.location', locationObj))
                      : (cov_homui9azn.b[33][1]++, ''),
                    count: matchedSymbols.length
                  });
                } else {
                  cov_homui9azn.b[32][1]++;
                  // To be used when there are multiple closest matches. Gives each
                  // suggestion on its own line, the function name followed by a link to
                  // reference documentation
                  var suggestions = (cov_homui9azn.s[118]++,
                  matchedSymbols
                    .map(function(symbol) {
                      cov_homui9azn.f[13]++;
                      var message = (cov_homui9azn.s[119]++,
                      '▶️ ' +
                        symbol.name +
                        (symbol.type === 'function'
                          ? (cov_homui9azn.b[34][0]++, '()')
                          : (cov_homui9azn.b[34][1]++, '')));
                      cov_homui9azn.s[120]++;
                      return mapToReference(message, symbol.name);
                    })
                    .join('\n'));
                  cov_homui9azn.s[121]++;

                  msg = (0, _internationalization.translator)('fes.misspelling', {
                    name: errSym,
                    suggestions: suggestions,
                    location: locationObj
                      ? (cov_homui9azn.b[35][0]++,
                        (0, _internationalization.translator)('fes.location', locationObj))
                      : (cov_homui9azn.b[35][1]++, ''),
                    count: matchedSymbols.length
                  });
                }

                // If there is only one closest match, tell _friendlyError to also add
                // a link to the reference documentation. In case of multiple matches,
                // this is already done in the suggestions variable, one link for each
                // suggestion.
                cov_homui9azn.s[122]++;
                _main.default._friendlyError(
                  msg,
                  matchedSymbols.length === 1
                    ? (cov_homui9azn.b[36][0]++, matchedSymbols[0].name)
                    : (cov_homui9azn.b[36][1]++, undefined)
                );
                cov_homui9azn.s[123]++;

                return true;
              } else {
                cov_homui9azn.b[29][1]++;
              }
              cov_homui9azn.s[124]++;
              return false;
            };

            /**
             * prints a friendly stacktrace which only includes user-written functions
             * and is easier for newcomers to understand
             * @method printFriendlyStack
             * @private
             * @param {Array} friendlyStack
             */ cov_homui9azn.s[125]++;
            var printFriendlyStack = function printFriendlyStack(friendlyStack) {
              cov_homui9azn.f[14]++;
              var log = (cov_homui9azn.s[126]++,
              (cov_homui9azn.b[38][0]++, _main.default._fesLogger) &&
              (cov_homui9azn.b[38][1]++, typeof _main.default._fesLogger === 'function')
                ? (cov_homui9azn.b[37][0]++, _main.default._fesLogger)
                : (cov_homui9azn.b[37][1]++, console.log.bind(console)));
              cov_homui9azn.s[127]++;
              if (friendlyStack.length > 1) {
                cov_homui9azn.b[39][0]++;
                var stacktraceMsg = (cov_homui9azn.s[128]++, '');
                cov_homui9azn.s[129]++;
                friendlyStack.forEach(function(frame, idx) {
                  cov_homui9azn.f[15]++;
                  var location = (cov_homui9azn.s[130]++,
                  ''
                    .concat(frame.fileName, ':')
                    .concat(frame.lineNumber, ':')
                    .concat(frame.columnNumber));

                  var frameMsg,
                    translationObj = (cov_homui9azn.s[131]++,
                    {
                      func: frame.functionName,
                      line: frame.lineNumber,
                      location: location,
                      file: frame.fileName.split('/').slice(-1)
                    });
                  cov_homui9azn.s[132]++;

                  if (idx === 0) {
                    cov_homui9azn.b[40][0]++;
                    cov_homui9azn.s[133]++;
                    frameMsg = (0, _internationalization.translator)(
                      'fes.globalErrors.stackTop',
                      translationObj
                    );
                  } else {
                    cov_homui9azn.b[40][1]++;
                    cov_homui9azn.s[134]++;
                    frameMsg = (0, _internationalization.translator)(
                      'fes.globalErrors.stackSubseq',
                      translationObj
                    );
                  }
                  cov_homui9azn.s[135]++;
                  stacktraceMsg += frameMsg;
                });
                cov_homui9azn.s[136]++;
                log(stacktraceMsg);
              } else {
                cov_homui9azn.b[39][1]++;
              }
            };

            /**
             * Takes a stacktrace array and filters out all frames that show internal p5
             * details. It also uses this processed stack to figure out if the error
             * error happened internally within the library, and if the error was due to
             * a non-loadX() method being used in preload
             * "Internally" here means that the error exact location of the error (the
             * top of the stack) is a piece of code write in the p5.js library (which may
             * or may not have been called from the user's sketch)
             *
             * @method processStack
             * @private
             * @param {Error} error
             * @param {Array} stacktrace
             *
             * @returns {Array} An array with two elements, [isInternal, friendlyStack]
             * isInternal: a boolean indicating if the error happened internally
             * friendlyStack: the simplified stacktrace, with internal details filtered
             */ cov_homui9azn.s[137]++;
            var processStack = function processStack(error, stacktrace) {
              cov_homui9azn.f[16]++;
              cov_homui9azn.s[138]++;
              // cannot process a stacktrace that doesn't exist
              if (!stacktrace) {
                cov_homui9azn.b[41][0]++;
                cov_homui9azn.s[139]++;
                return [false, null];
              } else {
                cov_homui9azn.b[41][1]++;
              }
              cov_homui9azn.s[140]++;

              stacktrace.forEach(function(frame) {
                cov_homui9azn.f[17]++;
                cov_homui9azn.s[141]++;
                frame.functionName =
                  (cov_homui9azn.b[42][0]++, frame.functionName) ||
                  (cov_homui9azn.b[42][1]++, '');
              });

              // isInternal - Did this error happen inside the library
              var isInternal = (cov_homui9azn.s[142]++, false);
              var p5FileName, friendlyStack, currentEntryPoint;
              cov_homui9azn.s[143]++;
              for (var i = (cov_homui9azn.s[144]++, stacktrace.length - 1); i >= 0; i--) {
                var splitted = (cov_homui9azn.s[145]++,
                stacktrace[i].functionName.split('.'));
                cov_homui9azn.s[146]++;
                if (entryPoints.includes(splitted[splitted.length - 1])) {
                  cov_homui9azn.b[43][0]++;
                  cov_homui9azn.s[147]++;
                  // remove everything below an entry point function (setup, draw, etc).
                  // (it's usually the internal initialization calls)
                  friendlyStack = stacktrace.slice(0, i + 1);
                  cov_homui9azn.s[148]++;
                  currentEntryPoint = splitted[splitted.length - 1];
                  cov_homui9azn.s[149]++;
                  for (var j = (cov_homui9azn.s[150]++, 0); j < i; j++) {
                    cov_homui9azn.s[151]++;
                    // Due to the current build process, all p5 functions have
                    // _main.default in their names in the final build. This is the
                    // easiest way to check if a function is inside the p5 library
                    if (stacktrace[j].functionName.search('_main.default') !== -1) {
                      cov_homui9azn.b[44][0]++;
                      cov_homui9azn.s[152]++;
                      isInternal = true;
                      cov_homui9azn.s[153]++;
                      p5FileName = stacktrace[j].fileName;
                      cov_homui9azn.s[154]++;
                      break;
                    } else {
                      cov_homui9azn.b[44][1]++;
                    }
                  }
                  cov_homui9azn.s[155]++;
                  break;
                } else {
                  cov_homui9azn.b[43][1]++;
                }
              }

              // in some cases ( errors in promises, callbacks, etc), no entry-point
              // function may be found in the stacktrace. In that case just use the
              // entire stacktrace for friendlyStack
              cov_homui9azn.s[156]++;
              if (!friendlyStack) {
                cov_homui9azn.b[45][0]++;
                cov_homui9azn.s[157]++;
                friendlyStack = stacktrace;
              } else {
                cov_homui9azn.b[45][1]++;
              }
              cov_homui9azn.s[158]++;

              if (isInternal) {
                cov_homui9azn.b[46][0]++;
                cov_homui9azn.s[159]++;
                // the frameIndex property is added before the filter, so frameIndex
                // corresponds to the index of a frame in the original stacktrace.
                // Then we filter out all frames which belong to the file that contains
                // the p5 library
                friendlyStack = friendlyStack
                  .map(function(frame, index) {
                    cov_homui9azn.f[18]++;
                    cov_homui9azn.s[160]++;
                    frame.frameIndex = index;
                    cov_homui9azn.s[161]++;
                    return frame;
                  })
                  .filter(function(frame) {
                    cov_homui9azn.f[19]++;
                    cov_homui9azn.s[162]++;
                    return frame.fileName !== p5FileName;
                  });

                // a weird case, if for some reason we can't identify the function called
                // from user's code
                cov_homui9azn.s[163]++;
                if (friendlyStack.length === 0) {
                  cov_homui9azn.b[47][0]++;
                  cov_homui9azn.s[164]++;
                  return [true, null];
                } else {
                  cov_homui9azn.b[47][1]++;
                }

                // get the function just above the topmost frame in the friendlyStack.
                // i.e the name of the library function called from user's code
                var func = (cov_homui9azn.s[165]++,
                stacktrace[friendlyStack[0].frameIndex - 1].functionName
                  .split('.')
                  .slice(-1)[0]);

                // Try and get the location (line no.) from the top element of the stack
                var locationObj;
                cov_homui9azn.s[166]++;
                if (
                  (cov_homui9azn.b[49][0]++, friendlyStack[0].fileName) &&
                  (cov_homui9azn.b[49][1]++, friendlyStack[0].lineNumber) &&
                  (cov_homui9azn.b[49][2]++, friendlyStack[0].columnNumber)
                ) {
                  cov_homui9azn.b[48][0]++;
                  cov_homui9azn.s[167]++;
                  locationObj = {
                    location: ''
                      .concat(friendlyStack[0].fileName, ':')
                      .concat(friendlyStack[0].lineNumber, ':')
                      .concat(friendlyStack[0].columnNumber),
                    file: friendlyStack[0].fileName.split('/').slice(-1),
                    line: friendlyStack[0].lineNumber
                  };

                  // if already handled by another part of the FES, don't handle again
                  cov_homui9azn.s[168]++;
                  if (_main.default._fesLogCache[locationObj.location]) {
                    cov_homui9azn.b[50][0]++;
                    cov_homui9azn.s[169]++;
                    return [true, null];
                  } else {
                    cov_homui9azn.b[50][1]++;
                  }
                } else {
                  cov_homui9azn.b[48][1]++;
                }

                // Check if the error is due to a non loadX method being used incorrectly
                // in preload
                cov_homui9azn.s[170]++;
                if (
                  (cov_homui9azn.b[52][0]++, currentEntryPoint === 'preload') &&
                  (cov_homui9azn.b[52][1]++,
                  _main.default.prototype._preloadMethods[func] == null)
                ) {
                  cov_homui9azn.b[51][0]++;
                  cov_homui9azn.s[171]++;
                  _main.default._friendlyError(
                    (0, _internationalization.translator)('fes.wrongPreload', {
                      func: func,
                      location: locationObj
                        ? (cov_homui9azn.b[53][0]++,
                          (0, _internationalization.translator)(
                            'fes.location',
                            locationObj
                          ))
                        : (cov_homui9azn.b[53][1]++, ''),
                      error: error.message
                    }),

                    'preload'
                  );
                } else {
                  cov_homui9azn.b[51][1]++;
                  cov_homui9azn.s[172]++;
                  // Library error
                  _main.default._friendlyError(
                    (0, _internationalization.translator)('fes.libraryError', {
                      func: func,
                      location: locationObj
                        ? (cov_homui9azn.b[54][0]++,
                          (0, _internationalization.translator)(
                            'fes.location',
                            locationObj
                          ))
                        : (cov_homui9azn.b[54][1]++, ''),
                      error: error.message
                    }),

                    func
                  );
                }

                // Finally, if it's an internal error, print the friendlyStack
                // ( fesErrorMonitor won't handle this error )
                cov_homui9azn.s[173]++;
                if (
                  (cov_homui9azn.b[56][0]++, friendlyStack) &&
                  (cov_homui9azn.b[56][1]++, friendlyStack.length)
                ) {
                  cov_homui9azn.b[55][0]++;
                  cov_homui9azn.s[174]++;
                  printFriendlyStack(friendlyStack);
                } else {
                  cov_homui9azn.b[55][1]++;
                }
              } else {
                cov_homui9azn.b[46][1]++;
              }
              cov_homui9azn.s[175]++;
              return [isInternal, friendlyStack];
            };

            /**
             * The main function for handling global errors. Called when an error
             * happens and is responsible for detecting the type of error that
             * has happened and showing the appropriate message
             *
             * @method fesErrorMonitor
             * @private
             * @param {*} e The object to extract error details from
             */ cov_homui9azn.s[176]++;
            var fesErrorMonitor = function fesErrorMonitor(e) {
              cov_homui9azn.f[20]++;
              cov_homui9azn.s[177]++;
              if (_main.default.disableFriendlyErrors) {
                cov_homui9azn.b[57][0]++;
                cov_homui9azn.s[178]++;
                return;
              } else {
                cov_homui9azn.b[57][1]++;
              }
              // Try to get the error object from e
              var error;
              cov_homui9azn.s[179]++;
              if (e instanceof Error) {
                cov_homui9azn.b[58][0]++;
                cov_homui9azn.s[180]++;
                error = e;
              } else {
                cov_homui9azn.b[58][1]++;
                cov_homui9azn.s[181]++;
                if (e instanceof ErrorEvent) {
                  cov_homui9azn.b[59][0]++;
                  cov_homui9azn.s[182]++;
                  error = e.error;
                } else {
                  cov_homui9azn.b[59][1]++;
                  cov_homui9azn.s[183]++;
                  if (e instanceof PromiseRejectionEvent) {
                    cov_homui9azn.b[60][0]++;
                    cov_homui9azn.s[184]++;
                    error = e.reason;
                    cov_homui9azn.s[185]++;
                    if (!(error instanceof Error)) {
                      cov_homui9azn.b[61][0]++;
                      cov_homui9azn.s[186]++;
                      return;
                    } else {
                      cov_homui9azn.b[61][1]++;
                    }
                  } else {
                    cov_homui9azn.b[60][1]++;
                  }
                }
              }
              cov_homui9azn.s[187]++;
              if (!error) {
                cov_homui9azn.b[62][0]++;
                cov_homui9azn.s[188]++;
                return;
              } else {
                cov_homui9azn.b[62][1]++;
              }

              var stacktrace = (cov_homui9azn.s[189]++,
              _main.default._getErrorStackParser().parse(error));
              // process the stacktrace from the browser and simplify it to give
              // friendlyStack.
              var _ref = (cov_homui9azn.s[190]++, processStack(error, stacktrace)),
                _ref2 = _slicedToArray(_ref, 2),
                isInternal = _ref2[0],
                friendlyStack = _ref2[1];

              // if this is an internal library error, the type of the error is not relevant,
              // only the user code that lead to it is.
              cov_homui9azn.s[191]++;
              if (isInternal) {
                cov_homui9azn.b[63][0]++;
                cov_homui9azn.s[192]++;
                return;
              } else {
                cov_homui9azn.b[63][1]++;
              }

              var errList = (cov_homui9azn.s[193]++, errorTable[error.name]);
              cov_homui9azn.s[194]++;
              if (!errList) {
                cov_homui9azn.b[64][0]++;
                cov_homui9azn.s[195]++;
                return;
              } else {
                cov_homui9azn.b[64][1]++;
              } // this type of error can't be handled yet
              var matchedError;
              cov_homui9azn.s[196]++;
              var _iteratorNormalCompletion = true;
              var _didIteratorError = false;
              var _iteratorError = undefined;
              try {
                for (
                  var _iterator = errList[Symbol.iterator](), _step;
                  !(_iteratorNormalCompletion = (_step = _iterator.next()).done);
                  _iteratorNormalCompletion = true
                ) {
                  var obj = _step.value;
                  var string = (cov_homui9azn.s[197]++, obj.msg);
                  // capture the primary symbol mentioned in the error
                  cov_homui9azn.s[198]++;
                  string = string.replace(new RegExp('{{}}', 'g'), '([a-zA-Z0-9_]+)');
                  cov_homui9azn.s[199]++;
                  string = string.replace(new RegExp('{{.}}', 'g'), '(.+)');
                  cov_homui9azn.s[200]++;
                  string = string.replace(new RegExp('{}', 'g'), '(?:[a-zA-Z0-9_]+)');
                  var matched = (cov_homui9azn.s[201]++, error.message.match(string));
                  cov_homui9azn.s[202]++;

                  if (matched) {
                    cov_homui9azn.b[65][0]++;
                    cov_homui9azn.s[203]++;
                    matchedError = Object.assign({}, obj);
                    cov_homui9azn.s[204]++;
                    matchedError.match = matched;
                    cov_homui9azn.s[205]++;
                    break;
                  } else {
                    cov_homui9azn.b[65][1]++;
                  }
                }
              } catch (err) {
                _didIteratorError = true;
                _iteratorError = err;
              } finally {
                try {
                  if (!_iteratorNormalCompletion && _iterator.return != null) {
                    _iterator.return();
                  }
                } finally {
                  if (_didIteratorError) {
                    throw _iteratorError;
                  }
                }
              }
              cov_homui9azn.s[206]++;

              if (!matchedError) {
                cov_homui9azn.b[66][0]++;
                cov_homui9azn.s[207]++;
                return;
              } else {
                cov_homui9azn.b[66][1]++;
              }

              // Try and get the location from the top element of the stack
              var locationObj;
              cov_homui9azn.s[208]++;
              if (
                (cov_homui9azn.b[68][0]++, stacktrace) &&
                (cov_homui9azn.b[68][1]++, stacktrace[0].fileName) &&
                (cov_homui9azn.b[68][2]++, stacktrace[0].lineNumber) &&
                (cov_homui9azn.b[68][3]++, stacktrace[0].columnNumber)
              ) {
                cov_homui9azn.b[67][0]++;
                cov_homui9azn.s[209]++;
                locationObj = {
                  location: ''
                    .concat(stacktrace[0].fileName, ':')
                    .concat(stacktrace[0].lineNumber, ':')
                    .concat(stacktrace[0].columnNumber),

                  file: stacktrace[0].fileName.split('/').slice(-1),
                  line: friendlyStack[0].lineNumber
                };
              } else {
                cov_homui9azn.b[67][1]++;
              }
              cov_homui9azn.s[210]++;

              switch (error.name) {
                case 'SyntaxError':
                  cov_homui9azn.b[69][0]++;
                  {
                    cov_homui9azn.s[211]++;
                    // We can't really do much with syntax errors other than try to use
                    // a simpler framing of the error message. The stack isn't available
                    // for syntax errors
                    switch (matchedError.type) {
                      case 'INVALIDTOKEN':
                        cov_homui9azn.b[70][0]++;
                        {
                          var url = (cov_homui9azn.s[212]++,
                          'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Errors/Illegal_character#What_went_wrong');
                          cov_homui9azn.s[213]++;
                          _main.default._friendlyError(
                            (0, _internationalization.translator)(
                              'fes.globalErrors.syntax.invalidToken',
                              {
                                url: url
                              }
                            )
                          );
                          cov_homui9azn.s[214]++;

                          break;
                        }
                      case 'UNEXPECTEDTOKEN':
                        cov_homui9azn.b[70][1]++;
                        {
                          var _url = (cov_homui9azn.s[215]++,
                          'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Errors/Unexpected_token#What_went_wrong');
                          cov_homui9azn.s[216]++;
                          _main.default._friendlyError(
                            (0, _internationalization.translator)(
                              'fes.globalErrors.syntax.unexpectedToken',
                              {
                                url: _url
                              }
                            )
                          );
                          cov_homui9azn.s[217]++;

                          break;
                        }
                    }
                    cov_homui9azn.s[218]++;

                    break;
                  }
                case 'ReferenceError':
                  cov_homui9azn.b[69][1]++;
                  {
                    cov_homui9azn.s[219]++;
                    switch (matchedError.type) {
                      case 'NOTDEFINED':
                        cov_homui9azn.b[71][0]++;
                        {
                          var errSym = (cov_homui9azn.s[220]++, matchedError.match[1]);
                          cov_homui9azn.s[221]++;

                          if (
                            (cov_homui9azn.b[73][0]++, errSym) &&
                            (cov_homui9azn.b[73][1]++, handleMisspelling(errSym, error))
                          ) {
                            cov_homui9azn.b[72][0]++;
                            cov_homui9azn.s[222]++;
                            break;
                          } else {
                            cov_homui9azn.b[72][1]++;
                          }

                          // if the flow gets this far, this is likely not a misspelling
                          // of a p5 property/function
                          var url1 = (cov_homui9azn.s[223]++,
                          'https://p5js.org/examples/data-variable-scope.html');
                          var url2 = (cov_homui9azn.s[224]++,
                          'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Errors/Not_Defined#What_went_wrong');
                          cov_homui9azn.s[225]++;
                          _main.default._friendlyError(
                            (0, _internationalization.translator)(
                              'fes.globalErrors.reference.notDefined',
                              {
                                url1: url1,
                                url2: url2,
                                symbol: errSym,
                                location: locationObj
                                  ? (cov_homui9azn.b[74][0]++,
                                    (0, _internationalization.translator)(
                                      'fes.location',
                                      locationObj
                                    ))
                                  : (cov_homui9azn.b[74][1]++, '')
                              }
                            )
                          );
                          cov_homui9azn.s[226]++;

                          if (friendlyStack) {
                            cov_homui9azn.b[75][0]++;
                            cov_homui9azn.s[227]++;
                            printFriendlyStack(friendlyStack);
                          } else {
                            cov_homui9azn.b[75][1]++;
                          }
                          cov_homui9azn.s[228]++;
                          break;
                        }
                    }
                    cov_homui9azn.s[229]++;

                    break;
                  }

                case 'TypeError':
                  cov_homui9azn.b[69][2]++;
                  {
                    cov_homui9azn.s[230]++;
                    switch (matchedError.type) {
                      case 'NOTFUNC':
                        cov_homui9azn.b[76][0]++;
                        {
                          var _errSym = (cov_homui9azn.s[231]++, matchedError.match[1]);
                          var splitSym = (cov_homui9azn.s[232]++, _errSym.split('.'));
                          var _url2 = (cov_homui9azn.s[233]++,
                          'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Errors/Not_a_function#What_went_wrong');

                          // if errSym is aa.bb.cc , symbol would be cc and obj would aa.bb
                          var translationObj = (cov_homui9azn.s[234]++,
                          {
                            url: _url2,
                            symbol: splitSym[splitSym.length - 1],
                            obj: splitSym.slice(0, splitSym.length - 1).join('.'),
                            location: locationObj
                              ? (cov_homui9azn.b[77][0]++,
                                (0, _internationalization.translator)(
                                  'fes.location',
                                  locationObj
                                ))
                              : (cov_homui9azn.b[77][1]++, '')
                          });

                          // There are two cases to handle here. When the function is called
                          // as a property of an object and when it's called independently.
                          // Both have different explanations.
                          cov_homui9azn.s[235]++;
                          if (splitSym.length > 1) {
                            cov_homui9azn.b[78][0]++;
                            cov_homui9azn.s[236]++;
                            _main.default._friendlyError(
                              (0, _internationalization.translator)(
                                'fes.globalErrors.type.notfuncObj',
                                translationObj
                              )
                            );
                          } else {
                            cov_homui9azn.b[78][1]++;
                            cov_homui9azn.s[237]++;
                            _main.default._friendlyError(
                              (0, _internationalization.translator)(
                                'fes.globalErrors.type.notfunc',
                                translationObj
                              )
                            );
                          }
                          cov_homui9azn.s[238]++;

                          if (friendlyStack) {
                            cov_homui9azn.b[79][0]++;
                            cov_homui9azn.s[239]++;
                            printFriendlyStack(friendlyStack);
                          } else {
                            cov_homui9azn.b[79][1]++;
                          }
                          cov_homui9azn.s[240]++;
                          break;
                        }
                    }
                  }
              }
            };
            cov_homui9azn.s[241]++;

            _main.default._fesErrorMonitor = fesErrorMonitor;
            cov_homui9azn.s[242]++;
            _main.default._checkForUserDefinedFunctions = checkForUserDefinedFunctions;

            // logger for testing purposes.
            cov_homui9azn.s[243]++;
            _main.default._fesLogger = null;
            cov_homui9azn.s[244]++;
            _main.default._fesLogCache = {};
            cov_homui9azn.s[245]++;

            window.addEventListener('load', checkForUserDefinedFunctions, false);
            cov_homui9azn.s[246]++;
            window.addEventListener('error', _main.default._fesErrorMonitor, false);
            cov_homui9azn.s[247]++;
            window.addEventListener(
              'unhandledrejection',
              _main.default._fesErrorMonitor,
              false
            );

            /**
             * Prints out all the colors in the color pallete with white text.
             * For color blindness testing.
             */
            /* function testColors() {
                                                                                              const str = 'A box of biscuits, a box of mixed biscuits and a biscuit mixer';
                                                                                              p5._friendlyError(str, 'print', '#ED225D'); // p5.js magenta
                                                                                              p5._friendlyError(str, 'print', '#2D7BB6'); // p5.js blue
                                                                                              p5._friendlyError(str, 'print', '#EE9900'); // p5.js orange
                                                                                              p5._friendlyError(str, 'print', '#A67F59'); // p5.js light brown
                                                                                              p5._friendlyError(str, 'print', '#704F21'); // p5.js gold
                                                                                              p5._friendlyError(str, 'print', '#1CC581'); // auto cyan
                                                                                              p5._friendlyError(str, 'print', '#FF6625'); // auto orange
                                                                                              p5._friendlyError(str, 'print', '#79EB22'); // auto green
                                                                                              p5._friendlyError(str, 'print', '#B40033'); // p5.js darkened magenta
                                                                                              p5._friendlyError(str, 'print', '#084B7F'); // p5.js darkened blue
                                                                                              p5._friendlyError(str, 'print', '#945F00'); // p5.js darkened orange
                                                                                              p5._friendlyError(str, 'print', '#6B441D'); // p5.js darkened brown
                                                                                              p5._friendlyError(str, 'print', '#2E1B00'); // p5.js darkened gold
                                                                                              p5._friendlyError(str, 'print', '#008851'); // auto dark cyan
                                                                                              p5._friendlyError(str, 'print', '#C83C00'); // auto dark orange
                                                                                              p5._friendlyError(str, 'print', '#4DB200'); // auto dark green
                                                                                            } */
          }

          // This is a lazily-defined list of p5 symbols that may be
          // misused by beginners at top-level code, outside of setup/draw. We'd like
          // to detect these errors and help the user by suggesting they move them
          // into setup/draw.
          //
          // For more details, see https://github.com/processing/p5.js/issues/1121.
          cov_homui9azn.s[248]++;
          misusedAtTopLevelCode = null;
          var FAQ_URL = (cov_homui9azn.s[249]++,
          'https://github.com/processing/p5.js/wiki/p5.js-overview#why-cant-i-assign-variables-using-p5-functions-and-variables-before-setup');
          cov_homui9azn.s[250]++;

          defineMisusedAtTopLevelCode = function defineMisusedAtTopLevelCode() {
            cov_homui9azn.f[21]++;
            var uniqueNamesFound = (cov_homui9azn.s[251]++, {});
            cov_homui9azn.s[252]++;

            var getSymbols = function getSymbols(obj) {
              cov_homui9azn.f[22]++;
              cov_homui9azn.s[253]++;
              return Object.getOwnPropertyNames(obj)
                .filter(function(name) {
                  cov_homui9azn.f[23]++;
                  cov_homui9azn.s[254]++;
                  if (name[0] === '_') {
                    cov_homui9azn.b[80][0]++;
                    cov_homui9azn.s[255]++;
                    return false;
                  } else {
                    cov_homui9azn.b[80][1]++;
                  }
                  cov_homui9azn.s[256]++;
                  if (name in uniqueNamesFound) {
                    cov_homui9azn.b[81][0]++;
                    cov_homui9azn.s[257]++;
                    return false;
                  } else {
                    cov_homui9azn.b[81][1]++;
                  }
                  cov_homui9azn.s[258]++;

                  uniqueNamesFound[name] = true;
                  cov_homui9azn.s[259]++;

                  return true;
                })
                .map(function(name) {
                  cov_homui9azn.f[24]++;
                  var type;
                  cov_homui9azn.s[260]++;

                  if (typeof obj[name] === 'function') {
                    cov_homui9azn.b[82][0]++;
                    cov_homui9azn.s[261]++;
                    type = 'function';
                  } else {
                    cov_homui9azn.b[82][1]++;
                    cov_homui9azn.s[262]++;
                    if (name === name.toUpperCase()) {
                      cov_homui9azn.b[83][0]++;
                      cov_homui9azn.s[263]++;
                      type = 'constant';
                    } else {
                      cov_homui9azn.b[83][1]++;
                      cov_homui9azn.s[264]++;
                      type = 'variable';
                    }
                  }
                  cov_homui9azn.s[265]++;

                  return { name: name, type: type };
                });
            };
            cov_homui9azn.s[266]++;

            misusedAtTopLevelCode = [].concat(
              getSymbols(_main.default.prototype),
              // At present, p5 only adds its constants to p5.prototype during
              // construction, which may not have happened at the time a
              // ReferenceError is thrown, so we'll manually add them to our list.
              getSymbols(_dereq_('../constants'))
            );

            // This will ultimately ensure that we report the most specific error
            // possible to the user, e.g. advising them about HALF_PI instead of PI
            // when their code misuses the former.
            cov_homui9azn.s[267]++;
            misusedAtTopLevelCode.sort(function(a, b) {
              cov_homui9azn.f[25]++;
              cov_homui9azn.s[268]++;
              return b.name.length - a.name.length;
            });
          };
          cov_homui9azn.s[269]++;

          var helpForMisusedAtTopLevelCode = function helpForMisusedAtTopLevelCode(e, log) {
            cov_homui9azn.f[26]++;
            cov_homui9azn.s[270]++;
            if (!log) {
              cov_homui9azn.b[84][0]++;
              cov_homui9azn.s[271]++;
              log = console.log.bind(console);
            } else {
              cov_homui9azn.b[84][1]++;
            }
            cov_homui9azn.s[272]++;

            if (!misusedAtTopLevelCode) {
              cov_homui9azn.b[85][0]++;
              cov_homui9azn.s[273]++;
              defineMisusedAtTopLevelCode();
            } else {
              cov_homui9azn.b[85][1]++;
            }

            // If we find that we're logging lots of false positives, we can
            // uncomment the following code to avoid displaying anything if the
            // user's code isn't likely to be using p5's global mode. (Note that
            // setup/draw are more likely to be defined due to JS function hoisting.)
            //
            //if (!('setup' in window || 'draw' in window)) {
            //  return;
            //}
            cov_homui9azn.s[274]++;
            misusedAtTopLevelCode.some(function(symbol) {
              cov_homui9azn.f[27]++;
              cov_homui9azn.s[275]++;
              // Note that while just checking for the occurrence of the
              // symbol name in the error message could result in false positives,
              // a more rigorous test is difficult because different browsers
              // log different messages, and the format of those messages may
              // change over time.
              //
              // For example, if the user uses 'PI' in their code, it may result
              // in any one of the following messages:
              //
              //   * 'PI' is undefined                           (Microsoft Edge)
              //   * ReferenceError: PI is undefined             (Firefox)
              //   * Uncaught ReferenceError: PI is not defined  (Chrome)

              if (
                (cov_homui9azn.b[87][0]++, e.message) &&
                (cov_homui9azn.b[87][1]++,
                e.message.match('\\W?'.concat(symbol.name, '\\W')) !== null)
              ) {
                cov_homui9azn.b[86][0]++;
                var symbolName = (cov_homui9azn.s[276]++,
                symbol.type === 'function'
                  ? (cov_homui9azn.b[88][0]++, ''.concat(symbol.name, '()'))
                  : (cov_homui9azn.b[88][1]++, symbol.name));
                cov_homui9azn.s[277]++;
                if (typeof IS_MINIFIED !== 'undefined') {
                  cov_homui9azn.b[89][0]++;
                  cov_homui9azn.s[278]++;
                  log(
                    "Did you just try to use p5.js's "
                      .concat(symbolName, ' ')
                      .concat(
                        symbol.type,
                        "? If so, you may want to move it into your sketch's setup() function.\n\nFor more details, see: "
                      )
                      .concat(FAQ_URL)
                  );
                } else {
                  cov_homui9azn.b[89][1]++;
                  cov_homui9azn.s[279]++;
                  log(
                    (0, _internationalization.translator)('fes.misusedTopLevel', {
                      symbolName: symbolName,
                      symbolType: symbol.type,
                      link: FAQ_URL
                    })
                  );
                }
                cov_homui9azn.s[280]++;
                return true;
              } else {
                cov_homui9azn.b[86][1]++;
              }
            });
          };

          // Exposing this primarily for unit testing.
          cov_homui9azn.s[281]++;
          _main.default.prototype._helpForMisusedAtTopLevelCode = helpForMisusedAtTopLevelCode;
          cov_homui9azn.s[282]++;

          if (document.readyState !== 'complete') {
            cov_homui9azn.b[90][0]++;
            cov_homui9azn.s[283]++;
            window.addEventListener('error', helpForMisusedAtTopLevelCode, false);

            // Our job is only to catch ReferenceErrors that are thrown when
            // global (non-instance mode) p5 APIs are used at the top-level
            // scope of a file, so we'll unbind our error listener now to make
            // sure we don't log false positives later.
            cov_homui9azn.s[284]++;
            window.addEventListener('load', function() {
              cov_homui9azn.f[28]++;
              cov_homui9azn.s[285]++;
              window.removeEventListener('error', helpForMisusedAtTopLevelCode, false);
            });
          } else {
            cov_homui9azn.b[90][1]++;
          }
          var _default = _main.default;
          exports.default = _default;
        },
        {
          '../constants': 272,
          '../internationalization': 281,
          '../main': 283,
          './browser_errors': 274,
          'core-js/modules/es.array.concat': 166,
          'core-js/modules/es.array.filter': 169,
          'core-js/modules/es.array.for-each': 170,
          'core-js/modules/es.array.includes': 172,
          'core-js/modules/es.array.iterator': 174,
          'core-js/modules/es.array.join': 175,
          'core-js/modules/es.array.map': 177,
          'core-js/modules/es.array.slice': 178,
          'core-js/modules/es.array.some': 179,
          'core-js/modules/es.function.name': 181,
          'core-js/modules/es.object.assign': 188,
          'core-js/modules/es.object.get-own-property-names': 189,
          'core-js/modules/es.object.keys': 191,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.regexp.constructor': 195,
          'core-js/modules/es.regexp.exec': 196,
          'core-js/modules/es.regexp.to-string': 197,
          'core-js/modules/es.string.iterator': 201,
          'core-js/modules/es.string.match': 202,
          'core-js/modules/es.string.replace': 204,
          'core-js/modules/es.string.search': 205,
          'core-js/modules/es.string.split': 206,
          'core-js/modules/es.symbol': 211,
          'core-js/modules/es.symbol.description': 209,
          'core-js/modules/es.symbol.iterator': 210,
          'core-js/modules/web.dom-collections.for-each': 243,
          'core-js/modules/web.dom-collections.iterator': 244
        }
      ],
      276: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_17v3dwbjcf = (function() {
            var path =
              '/Users/outofambit/src/p5.js/src/core/friendly_errors/file_errors.js';
            var hash = 'c407643fd3a18a9e464b9ff67cbce0612ed3700e';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/core/friendly_errors/file_errors.js',
              statementMap: {
                '0': { start: { line: 11, column: 0 }, end: { line: 95, column: 1 } },
                '1': { start: { line: 12, column: 2 }, end: { line: 12, column: 39 } },
                '2': { start: { line: 15, column: 29 }, end: { line: 81, column: 3 } },
                '3': { start: { line: 16, column: 23 }, end: { line: 19, column: 6 } },
                '4': { start: { line: 20, column: 4 }, end: { line: 80, column: 5 } },
                '5': { start: { line: 22, column: 8 }, end: { line: 27, column: 10 } },
                '6': { start: { line: 29, column: 8 }, end: { line: 34, column: 10 } },
                '7': { start: { line: 36, column: 8 }, end: { line: 41, column: 10 } },
                '8': { start: { line: 43, column: 8 }, end: { line: 48, column: 10 } },
                '9': { start: { line: 50, column: 8 }, end: { line: 55, column: 10 } },
                '10': { start: { line: 57, column: 8 }, end: { line: 62, column: 10 } },
                '11': { start: { line: 64, column: 8 }, end: { line: 69, column: 10 } },
                '12': { start: { line: 71, column: 8 }, end: { line: 74, column: 10 } },
                '13': { start: { line: 76, column: 8 }, end: { line: 79, column: 10 } },
                '14': { start: { line: 91, column: 2 }, end: { line: 94, column: 4 } },
                '15': { start: { line: 92, column: 32 }, end: { line: 92, column: 71 } },
                '16': { start: { line: 93, column: 4 }, end: { line: 93, column: 42 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 12, column: 30 }, end: { line: 12, column: 31 } },
                  loc: { start: { line: 12, column: 36 }, end: { line: 12, column: 38 } },
                  line: 12
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 15, column: 29 }, end: { line: 15, column: 30 } },
                  loc: { start: { line: 15, column: 48 }, end: { line: 81, column: 3 } },
                  line: 15
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: { start: { line: 91, column: 30 }, end: { line: 91, column: 31 } },
                  loc: { start: { line: 91, column: 60 }, end: { line: 94, column: 3 } },
                  line: 91
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 11, column: 0 }, end: { line: 95, column: 1 } },
                  type: 'if',
                  locations: [
                    { start: { line: 11, column: 0 }, end: { line: 95, column: 1 } },
                    { start: { line: 11, column: 0 }, end: { line: 95, column: 1 } }
                  ],
                  line: 11
                },
                '1': {
                  loc: { start: { line: 20, column: 4 }, end: { line: 80, column: 5 } },
                  type: 'switch',
                  locations: [
                    { start: { line: 21, column: 6 }, end: { line: 27, column: 10 } },
                    { start: { line: 28, column: 6 }, end: { line: 34, column: 10 } },
                    { start: { line: 35, column: 6 }, end: { line: 41, column: 10 } },
                    { start: { line: 42, column: 6 }, end: { line: 48, column: 10 } },
                    { start: { line: 49, column: 6 }, end: { line: 55, column: 10 } },
                    { start: { line: 56, column: 6 }, end: { line: 62, column: 10 } },
                    { start: { line: 63, column: 6 }, end: { line: 69, column: 10 } },
                    { start: { line: 70, column: 6 }, end: { line: 74, column: 10 } },
                    { start: { line: 75, column: 6 }, end: { line: 79, column: 10 } }
                  ],
                  line: 20
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0
              },
              f: { '0': 0, '1': 0, '2': 0 },
              b: { '0': [0, 0], '1': [0, 0, 0, 0, 0, 0, 0, 0, 0] },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: 'c407643fd3a18a9e464b9ff67cbce0612ed3700e'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../main'));
          var _internationalization = _dereq_('../internationalization');
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_17v3dwbjcf.s[0]++;

          if (typeof IS_MINIFIED !== 'undefined') {
            cov_17v3dwbjcf.b[0][0]++;
            cov_17v3dwbjcf.s[1]++;
            _main.default._friendlyFileLoadError = function() {
              cov_17v3dwbjcf.f[0]++;
            };
          } else {
            cov_17v3dwbjcf.b[0][1]++;
            cov_17v3dwbjcf.s[2]++;
            // mapping used by `_friendlyFileLoadError`
            var fileLoadErrorCases = function fileLoadErrorCases(num, filePath) {
              cov_17v3dwbjcf.f[1]++;
              var suggestion = (cov_17v3dwbjcf.s[3]++,
              (0, _internationalization.translator)('fes.fileLoadError.suggestion', {
                filePath: filePath,
                link: 'https://github.com/processing/p5.js/wiki/Local-server'
              }));
              cov_17v3dwbjcf.s[4]++;

              switch (num) {
                case 0:
                  cov_17v3dwbjcf.b[1][0]++;
                  cov_17v3dwbjcf.s[5]++;
                  return {
                    message: (0, _internationalization.translator)(
                      'fes.fileLoadError.image',
                      {
                        suggestion: suggestion
                      }
                    ),

                    method: 'loadImage'
                  };

                case 1:
                  cov_17v3dwbjcf.b[1][1]++;
                  cov_17v3dwbjcf.s[6]++;
                  return {
                    message: (0, _internationalization.translator)(
                      'fes.fileLoadError.xml',
                      {
                        suggestion: suggestion
                      }
                    ),

                    method: 'loadXML'
                  };

                case 2:
                  cov_17v3dwbjcf.b[1][2]++;
                  cov_17v3dwbjcf.s[7]++;
                  return {
                    message: (0, _internationalization.translator)(
                      'fes.fileLoadError.table',
                      {
                        suggestion: suggestion
                      }
                    ),

                    method: 'loadTable'
                  };

                case 3:
                  cov_17v3dwbjcf.b[1][3]++;
                  cov_17v3dwbjcf.s[8]++;
                  return {
                    message: (0, _internationalization.translator)(
                      'fes.fileLoadError.strings',
                      {
                        suggestion: suggestion
                      }
                    ),

                    method: 'loadStrings'
                  };

                case 4:
                  cov_17v3dwbjcf.b[1][4]++;
                  cov_17v3dwbjcf.s[9]++;
                  return {
                    message: (0, _internationalization.translator)(
                      'fes.fileLoadError.font',
                      {
                        suggestion: suggestion
                      }
                    ),

                    method: 'loadFont'
                  };

                case 5:
                  cov_17v3dwbjcf.b[1][5]++;
                  cov_17v3dwbjcf.s[10]++;
                  return {
                    message: (0, _internationalization.translator)(
                      'fes.fileLoadError.json',
                      {
                        suggestion: suggestion
                      }
                    ),

                    method: 'loadJSON'
                  };

                case 6:
                  cov_17v3dwbjcf.b[1][6]++;
                  cov_17v3dwbjcf.s[11]++;
                  return {
                    message: (0, _internationalization.translator)(
                      'fes.fileLoadError.bytes',
                      {
                        suggestion: suggestion
                      }
                    ),

                    method: 'loadBytes'
                  };

                case 7:
                  cov_17v3dwbjcf.b[1][7]++;
                  cov_17v3dwbjcf.s[12]++;
                  return {
                    message: (0, _internationalization.translator)(
                      'fes.fileLoadError.large'
                    ),
                    method: 'loadX'
                  };

                case 8:
                  cov_17v3dwbjcf.b[1][8]++;
                  cov_17v3dwbjcf.s[13]++;
                  return {
                    message: (0, _internationalization.translator)('fes.fileLoadError.gif'),
                    method: 'loadImage'
                  };
              }
            };

            /**
             * This is called internally if there is a error during file loading.
             *
             * @method _friendlyFileLoadError
             * @private
             * @param  {Number} errorType
             * @param  {String} filePath
             */ cov_17v3dwbjcf.s[14]++;
            _main.default._friendlyFileLoadError = function(errorType, filePath) {
              cov_17v3dwbjcf.f[2]++;
              var _ref = (cov_17v3dwbjcf.s[15]++, fileLoadErrorCases(errorType, filePath)),
                message = _ref.message,
                method = _ref.method;
              cov_17v3dwbjcf.s[16]++;
              _main.default._friendlyError(message, method, 3);
            };
          }
          var _default = _main.default;
          exports.default = _default;
        },
        { '../internationalization': 281, '../main': 283 }
      ],
      277: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_lw7u7j63b = (function() {
            var path = '/Users/outofambit/src/p5.js/src/core/friendly_errors/stacktrace.js';
            var hash = 'e2c03df6b09dd6fd2e8f2448c21f16ddad8559c0';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/core/friendly_errors/stacktrace.js',
              statementMap: {
                '0': { start: { line: 29, column: 36 }, end: { line: 29, column: 50 } },
                '1': { start: { line: 30, column: 31 }, end: { line: 30, column: 63 } },
                '2': { start: { line: 31, column: 34 }, end: { line: 31, column: 63 } },
                '3': { start: { line: 33, column: 2 }, end: { line: 240, column: 4 } },
                '4': { start: { line: 41, column: 6 }, end: { line: 52, column: 7 } },
                '5': { start: { line: 45, column: 8 }, end: { line: 45, column: 38 } },
                '6': { start: { line: 46, column: 13 }, end: { line: 52, column: 7 } },
                '7': { start: { line: 47, column: 8 }, end: { line: 47, column: 39 } },
                '8': { start: { line: 48, column: 13 }, end: { line: 52, column: 7 } },
                '9': { start: { line: 49, column: 8 }, end: { line: 49, column: 43 } },
                '10': { start: { line: 58, column: 6 }, end: { line: 60, column: 7 } },
                '11': { start: { line: 59, column: 8 }, end: { line: 59, column: 25 } },
                '12': { start: { line: 62, column: 19 }, end: { line: 62, column: 49 } },
                '13': { start: { line: 63, column: 18 }, end: { line: 63, column: 59 } },
                '14': { start: { line: 64, column: 6 }, end: { line: 64, column: 70 } },
                '15': { start: { line: 68, column: 21 }, end: { line: 70, column: 14 } },
                '16': { start: { line: 69, column: 8 }, end: { line: 69, column: 52 } },
                '17': { start: { line: 72, column: 6 }, end: { line: 110, column: 15 } },
                '18': { start: { line: 73, column: 8 }, end: { line: 78, column: 9 } },
                '19': { start: { line: 75, column: 10 }, end: { line: 77, column: 57 } },
                '20': { start: { line: 79, column: 28 }, end: { line: 81, column: 39 } },
                '21': { start: { line: 85, column: 23 }, end: { line: 85, column: 70 } },
                '22': { start: { line: 88, column: 8 }, end: { line: 90, column: 26 } },
                '23': { start: { line: 92, column: 21 }, end: { line: 92, column: 56 } },
                '24': { start: { line: 94, column: 28 }, end: { line: 96, column: 9 } },
                '25': { start: { line: 97, column: 27 }, end: { line: 97, column: 56 } },
                '26': { start: { line: 99, column: 10 }, end: { line: 101, column: 30 } },
                '27': { start: { line: 103, column: 8 }, end: { line: 109, column: 10 } },
                '28': { start: { line: 114, column: 21 }, end: { line: 116, column: 14 } },
                '29': { start: { line: 115, column: 8 }, end: { line: 115, column: 54 } },
                '30': { start: { line: 118, column: 6 }, end: { line: 148, column: 15 } },
                '31': { start: { line: 120, column: 8 }, end: { line: 125, column: 9 } },
                '32': { start: { line: 121, column: 10 }, end: { line: 124, column: 12 } },
                '33': { start: { line: 127, column: 8 }, end: { line: 147, column: 9 } },
                '34': { start: { line: 129, column: 10 }, end: { line: 131, column: 12 } },
                '35': { start: { line: 133, column: 34 }, end: { line: 133, column: 62 } },
                '36': { start: { line: 134, column: 24 }, end: { line: 134, column: 53 } },
                '37': { start: { line: 135, column: 29 }, end: { line: 135, column: 75 } },
                '38': { start: { line: 136, column: 30 }, end: { line: 138, column: 11 } },
                '39': { start: { line: 140, column: 10 }, end: { line: 146, column: 12 } },
                '40': { start: { line: 152, column: 6 }, end: { line: 162, column: 7 } },
                '41': { start: { line: 157, column: 8 }, end: { line: 157, column: 35 } },
                '42': { start: { line: 158, column: 13 }, end: { line: 162, column: 7 } },
                '43': { start: { line: 159, column: 8 }, end: { line: 159, column: 36 } },
                '44': { start: { line: 161, column: 8 }, end: { line: 161, column: 36 } },
                '45': { start: { line: 166, column: 19 }, end: { line: 166, column: 54 } },
                '46': { start: { line: 167, column: 18 }, end: { line: 167, column: 39 } },
                '47': { start: { line: 168, column: 19 }, end: { line: 168, column: 21 } },
                '48': { start: { line: 170, column: 6 }, end: { line: 179, column: 7 } },
                '49': { start: { line: 170, column: 19 }, end: { line: 170, column: 20 } },
                '50': { start: { line: 170, column: 28 }, end: { line: 170, column: 40 } },
                '51': { start: { line: 171, column: 20 }, end: { line: 171, column: 41 } },
                '52': { start: { line: 172, column: 8 }, end: { line: 178, column: 9 } },
                '53': { start: { line: 173, column: 10 }, end: { line: 177, column: 13 } },
                '54': { start: { line: 181, column: 6 }, end: { line: 181, column: 20 } },
                '55': { start: { line: 185, column: 19 }, end: { line: 185, column: 79 } },
                '56': { start: { line: 186, column: 18 }, end: { line: 186, column: 42 } },
                '57': { start: { line: 187, column: 19 }, end: { line: 187, column: 21 } },
                '58': { start: { line: 189, column: 6 }, end: { line: 199, column: 7 } },
                '59': { start: { line: 189, column: 19 }, end: { line: 189, column: 20 } },
                '60': { start: { line: 189, column: 28 }, end: { line: 189, column: 40 } },
                '61': { start: { line: 190, column: 20 }, end: { line: 190, column: 41 } },
                '62': { start: { line: 191, column: 8 }, end: { line: 198, column: 9 } },
                '63': { start: { line: 192, column: 10 }, end: { line: 197, column: 13 } },
                '64': { start: { line: 201, column: 6 }, end: { line: 201, column: 20 } },
                '65': { start: { line: 206, column: 21 }, end: { line: 211, column: 14 } },
                '66': { start: { line: 207, column: 8 }, end: { line: 210, column: 10 } },
                '67': { start: { line: 213, column: 6 }, end: { line: 238, column: 15 } },
                '68': { start: { line: 214, column: 21 }, end: { line: 214, column: 36 } },
                '69': { start: { line: 215, column: 28 }, end: { line: 215, column: 62 } },
                '70': { start: { line: 216, column: 27 }, end: { line: 216, column: 47 } },
                '71': { start: { line: 218, column: 10 }, end: { line: 220, column: 51 } },
                '72': { start: { line: 222, column: 8 }, end: { line: 224, column: 9 } },
                '73': { start: { line: 223, column: 10 }, end: { line: 223, column: 69 } },
                '74': { start: { line: 226, column: 10 }, end: { line: 228, column: 32 } },
                '75': { start: { line: 230, column: 8 }, end: { line: 237, column: 10 } },
                '76': { start: { line: 246, column: 0 }, end: { line: 248, column: 2 } },
                '77': { start: { line: 247, column: 2 }, end: { line: 247, column: 32 } }
              },
              fnMap: {
                '0': {
                  name: 'ErrorStackParser',
                  decl: { start: { line: 26, column: 9 }, end: { line: 26, column: 25 } },
                  loc: { start: { line: 26, column: 28 }, end: { line: 241, column: 1 } },
                  line: 26
                },
                '1': {
                  name: 'ErrorStackParser$$parse',
                  decl: { start: { line: 40, column: 20 }, end: { line: 40, column: 43 } },
                  loc: { start: { line: 40, column: 51 }, end: { line: 53, column: 5 } },
                  line: 40
                },
                '2': {
                  name: 'ErrorStackParser$$extractLocation',
                  decl: { start: { line: 56, column: 30 }, end: { line: 56, column: 63 } },
                  loc: { start: { line: 56, column: 73 }, end: { line: 65, column: 5 } },
                  line: 56
                },
                '3': {
                  name: 'ErrorStackParser$$parseV8OrIE',
                  decl: { start: { line: 67, column: 26 }, end: { line: 67, column: 55 } },
                  loc: { start: { line: 67, column: 63 }, end: { line: 111, column: 5 } },
                  line: 67
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: { start: { line: 68, column: 52 }, end: { line: 68, column: 53 } },
                  loc: { start: { line: 68, column: 67 }, end: { line: 70, column: 7 } },
                  line: 68
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: { start: { line: 72, column: 26 }, end: { line: 72, column: 27 } },
                  loc: { start: { line: 72, column: 41 }, end: { line: 110, column: 7 } },
                  line: 72
                },
                '6': {
                  name: 'ErrorStackParser$$parseFFOrSafari',
                  decl: {
                    start: { line: 113, column: 30 },
                    end: { line: 113, column: 63 }
                  },
                  loc: { start: { line: 113, column: 71 }, end: { line: 149, column: 5 } },
                  line: 113
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 114, column: 52 },
                    end: { line: 114, column: 53 }
                  },
                  loc: { start: { line: 114, column: 67 }, end: { line: 116, column: 7 } },
                  line: 114
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 118, column: 26 },
                    end: { line: 118, column: 27 }
                  },
                  loc: { start: { line: 118, column: 41 }, end: { line: 148, column: 7 } },
                  line: 118
                },
                '9': {
                  name: 'ErrorStackParser$$parseOpera',
                  decl: {
                    start: { line: 151, column: 25 },
                    end: { line: 151, column: 53 }
                  },
                  loc: { start: { line: 151, column: 57 }, end: { line: 163, column: 5 } },
                  line: 151
                },
                '10': {
                  name: 'ErrorStackParser$$parseOpera9',
                  decl: {
                    start: { line: 165, column: 26 },
                    end: { line: 165, column: 55 }
                  },
                  loc: { start: { line: 165, column: 59 }, end: { line: 182, column: 5 } },
                  line: 165
                },
                '11': {
                  name: 'ErrorStackParser$$parseOpera10',
                  decl: {
                    start: { line: 184, column: 27 },
                    end: { line: 184, column: 57 }
                  },
                  loc: { start: { line: 184, column: 61 }, end: { line: 202, column: 5 } },
                  line: 184
                },
                '12': {
                  name: 'ErrorStackParser$$parseOpera11',
                  decl: {
                    start: { line: 205, column: 27 },
                    end: { line: 205, column: 57 }
                  },
                  loc: { start: { line: 205, column: 65 }, end: { line: 239, column: 5 } },
                  line: 205
                },
                '13': {
                  name: '(anonymous_13)',
                  decl: {
                    start: { line: 206, column: 52 },
                    end: { line: 206, column: 53 }
                  },
                  loc: { start: { line: 206, column: 67 }, end: { line: 211, column: 7 } },
                  line: 206
                },
                '14': {
                  name: '(anonymous_14)',
                  decl: {
                    start: { line: 213, column: 26 },
                    end: { line: 213, column: 27 }
                  },
                  loc: { start: { line: 213, column: 41 }, end: { line: 238, column: 7 } },
                  line: 213
                },
                '15': {
                  name: 'getErrorStackParser',
                  decl: {
                    start: { line: 246, column: 35 },
                    end: { line: 246, column: 54 }
                  },
                  loc: { start: { line: 246, column: 57 }, end: { line: 248, column: 1 } },
                  line: 246
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 41, column: 6 }, end: { line: 52, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 41, column: 6 }, end: { line: 52, column: 7 } },
                    { start: { line: 41, column: 6 }, end: { line: 52, column: 7 } }
                  ],
                  line: 41
                },
                '1': {
                  loc: { start: { line: 42, column: 8 }, end: { line: 43, column: 55 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 42, column: 8 }, end: { line: 42, column: 47 } },
                    { start: { line: 43, column: 8 }, end: { line: 43, column: 55 } }
                  ],
                  line: 42
                },
                '2': {
                  loc: { start: { line: 46, column: 13 }, end: { line: 52, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 46, column: 13 }, end: { line: 52, column: 7 } },
                    { start: { line: 46, column: 13 }, end: { line: 52, column: 7 } }
                  ],
                  line: 46
                },
                '3': {
                  loc: { start: { line: 46, column: 17 }, end: { line: 46, column: 73 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 46, column: 17 }, end: { line: 46, column: 28 } },
                    { start: { line: 46, column: 32 }, end: { line: 46, column: 73 } }
                  ],
                  line: 46
                },
                '4': {
                  loc: { start: { line: 48, column: 13 }, end: { line: 52, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 48, column: 13 }, end: { line: 52, column: 7 } },
                    { start: { line: 48, column: 13 }, end: { line: 52, column: 7 } }
                  ],
                  line: 48
                },
                '5': {
                  loc: { start: { line: 58, column: 6 }, end: { line: 60, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 58, column: 6 }, end: { line: 60, column: 7 } },
                    { start: { line: 58, column: 6 }, end: { line: 60, column: 7 } }
                  ],
                  line: 58
                },
                '6': {
                  loc: { start: { line: 64, column: 24 }, end: { line: 64, column: 45 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 64, column: 24 }, end: { line: 64, column: 32 } },
                    { start: { line: 64, column: 36 }, end: { line: 64, column: 45 } }
                  ],
                  line: 64
                },
                '7': {
                  loc: { start: { line: 64, column: 47 }, end: { line: 64, column: 68 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 64, column: 47 }, end: { line: 64, column: 55 } },
                    { start: { line: 64, column: 59 }, end: { line: 64, column: 68 } }
                  ],
                  line: 64
                },
                '8': {
                  loc: { start: { line: 73, column: 8 }, end: { line: 78, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 73, column: 8 }, end: { line: 78, column: 9 } },
                    { start: { line: 73, column: 8 }, end: { line: 78, column: 9 } }
                  ],
                  line: 73
                },
                '9': {
                  loc: { start: { line: 88, column: 24 }, end: { line: 90, column: 25 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 89, column: 12 }, end: { line: 89, column: 50 } },
                    { start: { line: 90, column: 12 }, end: { line: 90, column: 25 } }
                  ],
                  line: 88
                },
                '10': {
                  loc: { start: { line: 95, column: 10 }, end: { line: 95, column: 47 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 95, column: 21 }, end: { line: 95, column: 32 } },
                    { start: { line: 95, column: 35 }, end: { line: 95, column: 47 } }
                  ],
                  line: 95
                },
                '11': {
                  loc: { start: { line: 97, column: 27 }, end: { line: 97, column: 56 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 97, column: 27 }, end: { line: 97, column: 43 } },
                    { start: { line: 97, column: 47 }, end: { line: 97, column: 56 } }
                  ],
                  line: 97
                },
                '12': {
                  loc: { start: { line: 99, column: 10 }, end: { line: 101, column: 30 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 100, column: 14 }, end: { line: 100, column: 23 } },
                    { start: { line: 101, column: 14 }, end: { line: 101, column: 30 } }
                  ],
                  line: 99
                },
                '13': {
                  loc: { start: { line: 120, column: 8 }, end: { line: 125, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 120, column: 8 }, end: { line: 125, column: 9 } },
                    { start: { line: 120, column: 8 }, end: { line: 125, column: 9 } }
                  ],
                  line: 120
                },
                '14': {
                  loc: { start: { line: 127, column: 8 }, end: { line: 147, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 127, column: 8 }, end: { line: 147, column: 9 } },
                    { start: { line: 127, column: 8 }, end: { line: 147, column: 9 } }
                  ],
                  line: 127
                },
                '15': {
                  loc: { start: { line: 127, column: 12 }, end: { line: 127, column: 64 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 127, column: 12 }, end: { line: 127, column: 36 } },
                    { start: { line: 127, column: 40 }, end: { line: 127, column: 64 } }
                  ],
                  line: 127
                },
                '16': {
                  loc: { start: { line: 135, column: 29 }, end: { line: 135, column: 75 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 135, column: 53 }, end: { line: 135, column: 63 } },
                    { start: { line: 135, column: 66 }, end: { line: 135, column: 75 } }
                  ],
                  line: 135
                },
                '17': {
                  loc: { start: { line: 135, column: 29 }, end: { line: 135, column: 50 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 135, column: 29 }, end: { line: 135, column: 36 } },
                    { start: { line: 135, column: 40 }, end: { line: 135, column: 50 } }
                  ],
                  line: 135
                },
                '18': {
                  loc: { start: { line: 152, column: 6 }, end: { line: 162, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 152, column: 6 }, end: { line: 162, column: 7 } },
                    { start: { line: 152, column: 6 }, end: { line: 162, column: 7 } }
                  ],
                  line: 152
                },
                '19': {
                  loc: { start: { line: 153, column: 8 }, end: { line: 155, column: 73 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 153, column: 8 }, end: { line: 153, column: 21 } },
                    { start: { line: 154, column: 9 }, end: { line: 154, column: 37 } },
                    { start: { line: 155, column: 10 }, end: { line: 155, column: 72 } }
                  ],
                  line: 153
                },
                '20': {
                  loc: { start: { line: 158, column: 13 }, end: { line: 162, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 158, column: 13 }, end: { line: 162, column: 7 } },
                    { start: { line: 158, column: 13 }, end: { line: 162, column: 7 } }
                  ],
                  line: 158
                },
                '21': {
                  loc: { start: { line: 172, column: 8 }, end: { line: 178, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 172, column: 8 }, end: { line: 178, column: 9 } },
                    { start: { line: 172, column: 8 }, end: { line: 178, column: 9 } }
                  ],
                  line: 172
                },
                '22': {
                  loc: { start: { line: 191, column: 8 }, end: { line: 198, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 191, column: 8 }, end: { line: 198, column: 9 } },
                    { start: { line: 191, column: 8 }, end: { line: 198, column: 9 } }
                  ],
                  line: 191
                },
                '23': {
                  loc: { start: { line: 193, column: 26 }, end: { line: 193, column: 47 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 193, column: 26 }, end: { line: 193, column: 34 } },
                    { start: { line: 193, column: 38 }, end: { line: 193, column: 47 } }
                  ],
                  line: 193
                },
                '24': {
                  loc: { start: { line: 208, column: 10 }, end: { line: 209, column: 42 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 208, column: 10 }, end: { line: 208, column: 51 } },
                    { start: { line: 209, column: 10 }, end: { line: 209, column: 42 } }
                  ],
                  line: 208
                },
                '25': {
                  loc: { start: { line: 216, column: 27 }, end: { line: 216, column: 47 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 216, column: 27 }, end: { line: 216, column: 41 } },
                    { start: { line: 216, column: 45 }, end: { line: 216, column: 47 } }
                  ],
                  line: 216
                },
                '26': {
                  loc: { start: { line: 218, column: 10 }, end: { line: 220, column: 51 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 218, column: 10 }, end: { line: 220, column: 38 } },
                    { start: { line: 220, column: 42 }, end: { line: 220, column: 51 } }
                  ],
                  line: 218
                },
                '27': {
                  loc: { start: { line: 222, column: 8 }, end: { line: 224, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 222, column: 8 }, end: { line: 224, column: 9 } },
                    { start: { line: 222, column: 8 }, end: { line: 224, column: 9 } }
                  ],
                  line: 222
                },
                '28': {
                  loc: { start: { line: 226, column: 10 }, end: { line: 228, column: 32 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 227, column: 14 }, end: { line: 227, column: 23 } },
                    { start: { line: 228, column: 14 }, end: { line: 228, column: 32 } }
                  ],
                  line: 226
                },
                '29': {
                  loc: { start: { line: 226, column: 10 }, end: { line: 226, column: 74 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 226, column: 10 }, end: { line: 226, column: 31 } },
                    { start: { line: 226, column: 35 }, end: { line: 226, column: 74 } }
                  ],
                  line: 226
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0, 0],
                '20': [0, 0],
                '21': [0, 0],
                '22': [0, 0],
                '23': [0, 0],
                '24': [0, 0],
                '25': [0, 0],
                '26': [0, 0],
                '27': [0, 0],
                '28': [0, 0],
                '29': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: 'e2c03df6b09dd6fd2e8f2448c21f16ddad8559c0'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.filter');
          _dereq_('core-js/modules/es.array.index-of');
          _dereq_('core-js/modules/es.array.join');
          _dereq_('core-js/modules/es.array.map');
          _dereq_('core-js/modules/es.array.slice');
          _dereq_('core-js/modules/es.regexp.exec');
          _dereq_('core-js/modules/es.string.match');
          _dereq_('core-js/modules/es.string.replace');
          _dereq_('core-js/modules/es.string.split');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../main'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }

          // Borrow from stacktracejs https://github.com/stacktracejs/stacktrace.js with
          // minor modifications. The license for the same and the code is included below

          // Copyright (c) 2017 Eric Wendelin and other contributors
          // Permission is hereby granted, free of charge, to any person obtaining a copy of
          // this software and associated documentation files (the "Software"), to deal in
          // the Software without restriction, including without limitation the rights to
          // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
          // of the Software, and to permit persons to whom the Software is furnished to do
          // so, subject to the following conditions:
          // The above copyright notice and this permission notice shall be included in all
          // copies or substantial portions of the Software.
          // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
          // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
          // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
          // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
          // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
          // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
          // SOFTWARE.
          function ErrorStackParser() {
            'use strict';
            cov_lw7u7j63b.f[0]++;

            var FIREFOX_SAFARI_STACK_REGEXP = (cov_lw7u7j63b.s[0]++, /(^|@)\S+:\d+/);
            var CHROME_IE_STACK_REGEXP = (cov_lw7u7j63b.s[1]++,
            /^\s*at .*(\S+:\d+|\(native\))/m);
            var SAFARI_NATIVE_CODE_REGEXP = (cov_lw7u7j63b.s[2]++,
            /^(eval@)?(\[native code])?$/);
            cov_lw7u7j63b.s[3]++;

            return {
              /**
               * Given an Error object, extract the most information from it.
               * @private
               * @param {Error} error object
               * @return {Array} of stack frames
               */
              parse: function ErrorStackParser$$parse(error) {
                cov_lw7u7j63b.f[1]++;
                cov_lw7u7j63b.s[4]++;
                if (
                  (cov_lw7u7j63b.b[1][0]++, typeof error.stacktrace !== 'undefined') ||
                  (cov_lw7u7j63b.b[1][1]++, typeof error['opera#sourceloc'] !== 'undefined')
                ) {
                  cov_lw7u7j63b.b[0][0]++;
                  cov_lw7u7j63b.s[5]++;
                  return this.parseOpera(error);
                } else {
                  cov_lw7u7j63b.b[0][1]++;
                  cov_lw7u7j63b.s[6]++;
                  if (
                    (cov_lw7u7j63b.b[3][0]++, error.stack) &&
                    (cov_lw7u7j63b.b[3][1]++, error.stack.match(CHROME_IE_STACK_REGEXP))
                  ) {
                    cov_lw7u7j63b.b[2][0]++;
                    cov_lw7u7j63b.s[7]++;
                    return this.parseV8OrIE(error);
                  } else {
                    cov_lw7u7j63b.b[2][1]++;
                    cov_lw7u7j63b.s[8]++;
                    if (error.stack) {
                      cov_lw7u7j63b.b[4][0]++;
                      cov_lw7u7j63b.s[9]++;
                      return this.parseFFOrSafari(error);
                    } else {
                      // throw new Error('Cannot parse given Error object');
                      cov_lw7u7j63b.b[4][1]++;
                    }
                  }
                }
              },

              // Separate line and column numbers from a string of the form: (URI:Line:Column)
              extractLocation: function ErrorStackParser$$extractLocation(urlLike) {
                cov_lw7u7j63b.f[2]++;
                cov_lw7u7j63b.s[10]++;
                // Fail-fast but return locations like "(native)"
                if (urlLike.indexOf(':') === -1) {
                  cov_lw7u7j63b.b[5][0]++;
                  cov_lw7u7j63b.s[11]++;
                  return [urlLike];
                } else {
                  cov_lw7u7j63b.b[5][1]++;
                }

                var regExp = (cov_lw7u7j63b.s[12]++, /(.+?)(?::(\d+))?(?::(\d+))?$/);
                var parts = (cov_lw7u7j63b.s[13]++,
                regExp.exec(urlLike.replace(/[()]/g, '')));
                cov_lw7u7j63b.s[14]++;
                return [
                  parts[1],
                  (cov_lw7u7j63b.b[6][0]++, parts[2]) ||
                    (cov_lw7u7j63b.b[6][1]++, undefined),
                  (cov_lw7u7j63b.b[7][0]++, parts[3]) ||
                    (cov_lw7u7j63b.b[7][1]++, undefined)
                ];
              },

              parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {
                cov_lw7u7j63b.f[3]++;
                var filtered = (cov_lw7u7j63b.s[15]++,
                error.stack.split('\n').filter(function(line) {
                  cov_lw7u7j63b.f[4]++;
                  cov_lw7u7j63b.s[16]++;
                  return !!line.match(CHROME_IE_STACK_REGEXP);
                }, this));
                cov_lw7u7j63b.s[17]++;

                return filtered.map(function(line) {
                  cov_lw7u7j63b.f[5]++;
                  cov_lw7u7j63b.s[18]++;
                  if (line.indexOf('(eval ') > -1) {
                    cov_lw7u7j63b.b[8][0]++;
                    cov_lw7u7j63b.s[19]++;
                    // Throw away eval information until we implement stacktrace.js/stackframe#8
                    line = line
                      .replace(/eval code/g, 'eval')
                      .replace(/(\(eval at [^()]*)|(\),.*$)/g, '');
                  } else {
                    cov_lw7u7j63b.b[8][1]++;
                  }
                  var sanitizedLine = (cov_lw7u7j63b.s[20]++,
                  line.replace(/^\s+/, '').replace(/\(eval code/g, '('));

                  // capture and preseve the parenthesized location "(/foo/my bar.js:12:87)" in
                  // case it has spaces in it, as the string is split on \s+ later on
                  var location = (cov_lw7u7j63b.s[21]++,
                  sanitizedLine.match(/ (\((.+):(\d+):(\d+)\)$)/));

                  // remove the parenthesized location from the line, if it was matched
                  cov_lw7u7j63b.s[22]++;
                  sanitizedLine = location
                    ? (cov_lw7u7j63b.b[9][0]++, sanitizedLine.replace(location[0], ''))
                    : (cov_lw7u7j63b.b[9][1]++, sanitizedLine);

                  var tokens = (cov_lw7u7j63b.s[23]++, sanitizedLine.split(/\s+/).slice(1));
                  // if a location was matched, pass it to extractLocation() otherwise pop the last token
                  var locationParts = (cov_lw7u7j63b.s[24]++,
                  this.extractLocation(
                    location
                      ? (cov_lw7u7j63b.b[10][0]++, location[1])
                      : (cov_lw7u7j63b.b[10][1]++, tokens.pop())
                  ));

                  var functionName = (cov_lw7u7j63b.s[25]++,
                  (cov_lw7u7j63b.b[11][0]++, tokens.join(' ')) ||
                    (cov_lw7u7j63b.b[11][1]++, undefined));
                  var fileName = (cov_lw7u7j63b.s[26]++,
                  ['eval', '<anonymous>'].indexOf(locationParts[0]) > -1
                    ? (cov_lw7u7j63b.b[12][0]++, undefined)
                    : (cov_lw7u7j63b.b[12][1]++, locationParts[0]));
                  cov_lw7u7j63b.s[27]++;

                  return {
                    functionName: functionName,
                    fileName: fileName,
                    lineNumber: locationParts[1],
                    columnNumber: locationParts[2],
                    source: line
                  };
                }, this);
              },

              parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {
                cov_lw7u7j63b.f[6]++;
                var filtered = (cov_lw7u7j63b.s[28]++,
                error.stack.split('\n').filter(function(line) {
                  cov_lw7u7j63b.f[7]++;
                  cov_lw7u7j63b.s[29]++;
                  return !line.match(SAFARI_NATIVE_CODE_REGEXP);
                }, this));
                cov_lw7u7j63b.s[30]++;

                return filtered.map(function(line) {
                  cov_lw7u7j63b.f[8]++;
                  cov_lw7u7j63b.s[31]++;
                  // Throw away eval information until we implement stacktrace.js/stackframe#8
                  if (line.indexOf(' > eval') > -1) {
                    cov_lw7u7j63b.b[13][0]++;
                    cov_lw7u7j63b.s[32]++;
                    line = line.replace(
                      / line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,
                      ':$1'
                    );
                  } else {
                    cov_lw7u7j63b.b[13][1]++;
                  }
                  cov_lw7u7j63b.s[33]++;

                  if (
                    (cov_lw7u7j63b.b[15][0]++, line.indexOf('@') === -1) &&
                    (cov_lw7u7j63b.b[15][1]++, line.indexOf(':') === -1)
                  ) {
                    cov_lw7u7j63b.b[14][0]++;
                    cov_lw7u7j63b.s[34]++;
                    // Safari eval frames only have function names and nothing else
                    return {
                      functionName: line
                    };
                  } else {
                    cov_lw7u7j63b.b[14][1]++;
                    var functionNameRegex = (cov_lw7u7j63b.s[35]++,
                    /((.*".+"[^@]*)?[^@]*)(?:@)/);
                    var matches = (cov_lw7u7j63b.s[36]++, line.match(functionNameRegex));
                    var functionName = (cov_lw7u7j63b.s[37]++,
                    (cov_lw7u7j63b.b[17][0]++, matches) &&
                    (cov_lw7u7j63b.b[17][1]++, matches[1])
                      ? (cov_lw7u7j63b.b[16][0]++, matches[1])
                      : (cov_lw7u7j63b.b[16][1]++, undefined));
                    var locationParts = (cov_lw7u7j63b.s[38]++,
                    this.extractLocation(line.replace(functionNameRegex, '')));
                    cov_lw7u7j63b.s[39]++;

                    return {
                      functionName: functionName,
                      fileName: locationParts[0],
                      lineNumber: locationParts[1],
                      columnNumber: locationParts[2],
                      source: line
                    };
                  }
                }, this);
              },

              parseOpera: function ErrorStackParser$$parseOpera(e) {
                cov_lw7u7j63b.f[9]++;
                cov_lw7u7j63b.s[40]++;
                if (
                  (cov_lw7u7j63b.b[19][0]++, !e.stacktrace) ||
                  ((cov_lw7u7j63b.b[19][1]++, e.message.indexOf('\n') > -1) &&
                    (cov_lw7u7j63b.b[19][2]++,
                    e.message.split('\n').length > e.stacktrace.split('\n').length))
                ) {
                  cov_lw7u7j63b.b[18][0]++;
                  cov_lw7u7j63b.s[41]++;
                  return this.parseOpera9(e);
                } else {
                  cov_lw7u7j63b.b[18][1]++;
                  cov_lw7u7j63b.s[42]++;
                  if (!e.stack) {
                    cov_lw7u7j63b.b[20][0]++;
                    cov_lw7u7j63b.s[43]++;
                    return this.parseOpera10(e);
                  } else {
                    cov_lw7u7j63b.b[20][1]++;
                    cov_lw7u7j63b.s[44]++;
                    return this.parseOpera11(e);
                  }
                }
              },

              parseOpera9: function ErrorStackParser$$parseOpera9(e) {
                cov_lw7u7j63b.f[10]++;
                var lineRE = (cov_lw7u7j63b.s[45]++, /Line (\d+).*script (?:in )?(\S+)/i);
                var lines = (cov_lw7u7j63b.s[46]++, e.message.split('\n'));
                var result = (cov_lw7u7j63b.s[47]++, []);
                cov_lw7u7j63b.s[48]++;

                for (
                  var i = (cov_lw7u7j63b.s[49]++, 2),
                    len = (cov_lw7u7j63b.s[50]++, lines.length);
                  i < len;
                  i += 2
                ) {
                  var match = (cov_lw7u7j63b.s[51]++, lineRE.exec(lines[i]));
                  cov_lw7u7j63b.s[52]++;
                  if (match) {
                    cov_lw7u7j63b.b[21][0]++;
                    cov_lw7u7j63b.s[53]++;
                    result.push({
                      fileName: match[2],
                      lineNumber: match[1],
                      source: lines[i]
                    });
                  } else {
                    cov_lw7u7j63b.b[21][1]++;
                  }
                }
                cov_lw7u7j63b.s[54]++;

                return result;
              },

              parseOpera10: function ErrorStackParser$$parseOpera10(e) {
                cov_lw7u7j63b.f[11]++;
                var lineRE = (cov_lw7u7j63b.s[55]++,
                /Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i);
                var lines = (cov_lw7u7j63b.s[56]++, e.stacktrace.split('\n'));
                var result = (cov_lw7u7j63b.s[57]++, []);
                cov_lw7u7j63b.s[58]++;

                for (
                  var i = (cov_lw7u7j63b.s[59]++, 0),
                    len = (cov_lw7u7j63b.s[60]++, lines.length);
                  i < len;
                  i += 2
                ) {
                  var match = (cov_lw7u7j63b.s[61]++, lineRE.exec(lines[i]));
                  cov_lw7u7j63b.s[62]++;
                  if (match) {
                    cov_lw7u7j63b.b[22][0]++;
                    cov_lw7u7j63b.s[63]++;
                    result.push({
                      functionName:
                        (cov_lw7u7j63b.b[23][0]++, match[3]) ||
                        (cov_lw7u7j63b.b[23][1]++, undefined),
                      fileName: match[2],
                      lineNumber: match[1],
                      source: lines[i]
                    });
                  } else {
                    cov_lw7u7j63b.b[22][1]++;
                  }
                }
                cov_lw7u7j63b.s[64]++;

                return result;
              },

              // Opera 10.65+ Error.stack very similar to FF/Safari
              parseOpera11: function ErrorStackParser$$parseOpera11(error) {
                cov_lw7u7j63b.f[12]++;
                var filtered = (cov_lw7u7j63b.s[65]++,
                error.stack.split('\n').filter(function(line) {
                  cov_lw7u7j63b.f[13]++;
                  cov_lw7u7j63b.s[66]++;
                  return (
                    (cov_lw7u7j63b.b[24][0]++, !!line.match(FIREFOX_SAFARI_STACK_REGEXP)) &&
                    (cov_lw7u7j63b.b[24][1]++, !line.match(/^Error created at/))
                  );
                }, this));
                cov_lw7u7j63b.s[67]++;

                return filtered.map(function(line) {
                  cov_lw7u7j63b.f[14]++;
                  var tokens = (cov_lw7u7j63b.s[68]++, line.split('@'));
                  var locationParts = (cov_lw7u7j63b.s[69]++,
                  this.extractLocation(tokens.pop()));
                  var functionCall = (cov_lw7u7j63b.s[70]++,
                  (cov_lw7u7j63b.b[25][0]++, tokens.shift()) ||
                    (cov_lw7u7j63b.b[25][1]++, ''));
                  var functionName = (cov_lw7u7j63b.s[71]++,
                  (cov_lw7u7j63b.b[26][0]++,
                  functionCall
                    .replace(/<anonymous function(: (\w+))?>/, '$2')
                    .replace(/\([^)]*\)/g, '')) || (cov_lw7u7j63b.b[26][1]++, undefined));
                  var argsRaw;
                  cov_lw7u7j63b.s[72]++;
                  if (functionCall.match(/\(([^)]*)\)/)) {
                    cov_lw7u7j63b.b[27][0]++;
                    cov_lw7u7j63b.s[73]++;
                    argsRaw = functionCall.replace(/^[^(]+\(([^)]*)\)$/, '$1');
                  } else {
                    cov_lw7u7j63b.b[27][1]++;
                  }
                  var args = (cov_lw7u7j63b.s[74]++,
                  (cov_lw7u7j63b.b[29][0]++, argsRaw === undefined) ||
                  (cov_lw7u7j63b.b[29][1]++, argsRaw === '[arguments not available]')
                    ? (cov_lw7u7j63b.b[28][0]++, undefined)
                    : (cov_lw7u7j63b.b[28][1]++, argsRaw.split(',')));
                  cov_lw7u7j63b.s[75]++;

                  return {
                    functionName: functionName,
                    args: args,
                    fileName: locationParts[0],
                    lineNumber: locationParts[1],
                    columnNumber: locationParts[2],
                    source: line
                  };
                }, this);
              }
            };
          }

          // End borrow

          // wrapper exposing ErrorStackParser
          cov_lw7u7j63b.s[76]++;
          _main.default._getErrorStackParser = function getErrorStackParser() {
            cov_lw7u7j63b.f[15]++;
            cov_lw7u7j63b.s[77]++;
            return new ErrorStackParser();
          };
          var _default = _main.default;
          exports.default = _default;
        },
        {
          '../main': 283,
          'core-js/modules/es.array.filter': 169,
          'core-js/modules/es.array.index-of': 173,
          'core-js/modules/es.array.join': 175,
          'core-js/modules/es.array.map': 177,
          'core-js/modules/es.array.slice': 178,
          'core-js/modules/es.regexp.exec': 196,
          'core-js/modules/es.string.match': 202,
          'core-js/modules/es.string.replace': 204,
          'core-js/modules/es.string.split': 206
        }
      ],
      278: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_1m41fbe05k = (function() {
            var path =
              '/Users/outofambit/src/p5.js/src/core/friendly_errors/validate_params.js';
            var hash = 'cfe2d8a796bfa73fd4a04512156456080d32a91f';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path:
                '/Users/outofambit/src/p5.js/src/core/friendly_errors/validate_params.js',
              statementMap: {
                '0': { start: { line: 12, column: 0 }, end: { line: 697, column: 1 } },
                '1': { start: { line: 13, column: 2 }, end: { line: 13, column: 67 } },
                '2': { start: { line: 16, column: 18 }, end: { line: 16, column: 61 } },
                '3': { start: { line: 17, column: 17 }, end: { line: 17, column: 52 } },
                '4': { start: { line: 19, column: 19 }, end: { line: 19, column: 21 } },
                '5': { start: { line: 20, column: 23 }, end: { line: 29, column: 4 } },
                '6': { start: { line: 31, column: 21 }, end: { line: 37, column: 3 } },
                '7': { start: { line: 40, column: 30 }, end: { line: 40, column: 32 } },
                '8': { start: { line: 41, column: 2 }, end: { line: 43, column: 3 } },
                '9': { start: { line: 42, column: 4 }, end: { line: 42, column: 46 } },
                '10': { start: { line: 51, column: 25 }, end: { line: 51, column: 27 } },
                '11': { start: { line: 55, column: 35 }, end: { line: 55, column: 37 } },
                '12': { start: { line: 56, column: 2 }, end: { line: 67, column: 5 } },
                '13': { start: { line: 60, column: 4 }, end: { line: 66, column: 5 } },
                '14': { start: { line: 63, column: 6 }, end: { line: 65, column: 7 } },
                '15': { start: { line: 64, column: 8 }, end: { line: 64, column: 38 } },
                '16': { start: { line: 69, column: 23 }, end: { line: 69, column: 25 } },
                '17': { start: { line: 99, column: 18 }, end: { line: 159, column: 3 } },
                '18': { start: { line: 100, column: 15 }, end: { line: 100, column: 27 } },
                '19': { start: { line: 101, column: 4 }, end: { line: 156, column: 5 } },
                '20': { start: { line: 102, column: 6 }, end: { line: 108, column: 7 } },
                '21': { start: { line: 105, column: 8 }, end: { line: 105, column: 46 } },
                '22': { start: { line: 107, column: 8 }, end: { line: 107, column: 44 } },
                '23': { start: { line: 109, column: 11 }, end: { line: 156, column: 5 } },
                '24': { start: { line: 111, column: 6 }, end: { line: 111, column: 46 } },
                '25': { start: { line: 117, column: 6 }, end: { line: 120, column: 7 } },
                '26': { start: { line: 118, column: 8 }, end: { line: 118, column: 80 } },
                '27': { start: { line: 119, column: 8 }, end: { line: 119, column: 19 } },
                '28': { start: { line: 127, column: 16 }, end: { line: 127, column: 46 } },
                '29': { start: { line: 131, column: 6 }, end: { line: 135, column: 7 } },
                '30': { start: { line: 134, column: 8 }, end: { line: 134, column: 50 } },
                '31': { start: { line: 137, column: 6 }, end: { line: 143, column: 7 } },
                '32': { start: { line: 139, column: 8 }, end: { line: 142, column: 9 } },
                '33': { start: { line: 140, column: 10 }, end: { line: 140, column: 44 } },
                '34': { start: { line: 141, column: 10 }, end: { line: 141, column: 21 } },
                '35': { start: { line: 145, column: 6 }, end: { line: 153, column: 7 } },
                '36': { start: { line: 147, column: 8 }, end: { line: 152, column: 9 } },
                '37': { start: { line: 148, column: 10 }, end: { line: 148, column: 44 } },
                '38': { start: { line: 150, column: 10 }, end: { line: 150, column: 41 } },
                '39': { start: { line: 151, column: 10 }, end: { line: 151, column: 21 } },
                '40': { start: { line: 155, column: 6 }, end: { line: 155, column: 42 } },
                '41': { start: { line: 158, column: 4 }, end: { line: 158, column: 15 } },
                '42': { start: { line: 160, column: 28 }, end: { line: 184, column: 3 } },
                '43': { start: { line: 162, column: 14 }, end: { line: 162, column: 32 } },
                '44': { start: { line: 163, column: 4 }, end: { line: 166, column: 5 } },
                '45': { start: { line: 165, column: 6 }, end: { line: 165, column: 36 } },
                '46': { start: { line: 168, column: 4 }, end: { line: 182, column: 5 } },
                '47': { start: { line: 168, column: 17 }, end: { line: 168, column: 18 } },
                '48': { start: { line: 168, column: 26 }, end: { line: 168, column: 36 } },
                '49': { start: { line: 169, column: 18 }, end: { line: 169, column: 24 } },
                '50': { start: { line: 170, column: 6 }, end: { line: 181, column: 7 } },
                '51': { start: { line: 175, column: 8 }, end: { line: 175, column: 44 } },
                '52': { start: { line: 176, column: 8 }, end: { line: 178, column: 9 } },
                '53': { start: { line: 176, column: 21 }, end: { line: 176, column: 22 } },
                '54': { start: { line: 176, column: 31 }, end: { line: 176, column: 43 } },
                '55': { start: { line: 177, column: 10 }, end: { line: 177, column: 45 } },
                '56': { start: { line: 180, column: 8 }, end: { line: 180, column: 40 } },
                '57': { start: { line: 183, column: 4 }, end: { line: 183, column: 15 } },
                '58': { start: { line: 188, column: 25 }, end: { line: 319, column: 3 } },
                '59': { start: { line: 191, column: 19 }, end: { line: 191, column: 40 } },
                '60': { start: { line: 192, column: 21 }, end: { line: 192, column: 44 } },
                '61': { start: { line: 193, column: 22 }, end: { line: 193, column: 52 } },
                '62': { start: { line: 195, column: 23 }, end: { line: 195, column: 29 } },
                '63': { start: { line: 196, column: 22 }, end: { line: 196, column: 53 } },
                '64': { start: { line: 199, column: 22 }, end: { line: 199, column: 24 } },
                '65': { start: { line: 200, column: 4 }, end: { line: 208, column: 5 } },
                '66': { start: { line: 202, column: 6 }, end: { line: 204, column: 7 } },
                '67': { start: { line: 202, column: 19 }, end: { line: 202, column: 20 } },
                '68': { start: { line: 203, column: 8 }, end: { line: 203, column: 69 } },
                '69': { start: { line: 207, column: 6 }, end: { line: 207, column: 60 } },
                '70': { start: { line: 211, column: 25 }, end: { line: 211, column: 27 } },
                '71': { start: { line: 212, column: 20 }, end: { line: 212, column: 21 } },
                '72': { start: { line: 213, column: 4 }, end: { line: 314, column: 7 } },
                '73': { start: { line: 214, column: 22 }, end: { line: 214, column: 38 } },
                '74': { start: { line: 218, column: 6 }, end: { line: 220, column: 7 } },
                '75': { start: { line: 219, column: 8 }, end: { line: 219, column: 35 } },
                '76': { start: { line: 224, column: 22 }, end: { line: 224, column: 36 } },
                '77': { start: { line: 225, column: 6 }, end: { line: 227, column: 7 } },
                '78': { start: { line: 226, column: 8 }, end: { line: 226, column: 20 } },
                '79': { start: { line: 228, column: 6 }, end: { line: 228, column: 37 } },
                '80': { start: { line: 231, column: 6 }, end: { line: 313, column: 9 } },
                '81': { start: { line: 233, column: 8 }, end: { line: 312, column: 11 } },
                '82': { start: { line: 235, column: 10 }, end: { line: 240, column: 11 } },
                '83': { start: { line: 236, column: 12 }, end: { line: 239, column: 14 } },
                '84': { start: { line: 242, column: 26 }, end: { line: 242, column: 44 } },
                '85': { start: { line: 245, column: 10 }, end: { line: 283, column: 11 } },
                '86': { start: { line: 247, column: 12 }, end: { line: 276, column: 13 } },
                '87': { start: { line: 248, column: 14 }, end: { line: 248, column: 51 } },
                '88': { start: { line: 251, column: 27 }, end: { line: 251, column: 72 } },
                '89': { start: { line: 252, column: 29 }, end: { line: 252, column: 31 } },
                '90': { start: { line: 253, column: 28 }, end: { line: 253, column: 30 } },
                '91': { start: { line: 255, column: 14 }, end: { line: 258, column: 16 } },
                '92': { start: { line: 260, column: 30 }, end: { line: 260, column: 59 } },
                '93': { start: { line: 261, column: 14 }, end: { line: 275, column: 15 } },
                '94': { start: { line: 262, column: 16 }, end: { line: 262, column: 47 } },
                '95': { start: { line: 263, column: 16 }, end: { line: 263, column: 36 } },
                '96': { start: { line: 265, column: 30 }, end: { line: 265, column: 40 } },
                '97': { start: { line: 266, column: 32 }, end: { line: 266, column: 45 } },
                '98': { start: { line: 268, column: 16 }, end: { line: 274, column: 17 } },
                '99': { start: { line: 269, column: 31 }, end: { line: 269, column: 44 } },
                '100': { start: { line: 270, column: 18 }, end: { line: 273, column: 19 } },
                '101': { start: { line: 271, column: 20 }, end: { line: 271, column: 51 } },
                '102': { start: { line: 272, column: 20 }, end: { line: 272, column: 37 } },
                '103': { start: { line: 277, column: 12 }, end: { line: 282, column: 14 } },
                '104': { start: { line: 286, column: 10 }, end: { line: 288, column: 11 } },
                '105': { start: { line: 287, column: 12 }, end: { line: 287, column: 35 } },
                '106': { start: { line: 290, column: 10 }, end: { line: 292, column: 11 } },
                '107': { start: { line: 291, column: 12 }, end: { line: 291, column: 54 } },
                '108': { start: { line: 295, column: 18 }, end: { line: 295, column: 24 } },
                '109': { start: { line: 296, column: 28 }, end: { line: 296, column: 43 } },
                '110': { start: { line: 299, column: 10 }, end: { line: 302, column: 11 } },
                '111': { start: { line: 300, column: 12 }, end: { line: 300, column: 19 } },
                '112': { start: { line: 301, column: 12 }, end: { line: 301, column: 30 } },
                '113': { start: { line: 304, column: 10 }, end: { line: 306, column: 13 } },
                '114': { start: { line: 305, column: 12 }, end: { line: 305, column: 26 } },
                '115': { start: { line: 307, column: 10 }, end: { line: 309, column: 11 } },
                '116': { start: { line: 308, column: 12 }, end: { line: 308, column: 48 } },
                '117': { start: { line: 311, column: 10 }, end: { line: 311, column: 49 } },
                '118': { start: { line: 315, column: 4 }, end: { line: 318, column: 6 } },
                '119': { start: { line: 321, column: 19 }, end: { line: 330, column: 3 } },
                '120': { start: { line: 322, column: 4 }, end: { line: 329, column: 5 } },
                '121': { start: { line: 324, column: 8 }, end: { line: 324, column: 20 } },
                '122': { start: { line: 326, column: 8 }, end: { line: 326, column: 29 } },
                '123': { start: { line: 328, column: 8 }, end: { line: 328, column: 21 } },
                '124': { start: { line: 332, column: 24 }, end: { line: 374, column: 3 } },
                '125': { start: { line: 333, column: 20 }, end: { line: 333, column: 42 } },
                '126': { start: { line: 334, column: 18 }, end: { line: 334, column: 22 } },
                '127': { start: { line: 335, column: 4 }, end: { line: 372, column: 5 } },
                '128': { start: { line: 336, column: 6 }, end: { line: 339, column: 7 } },
                '129': { start: { line: 336, column: 19 }, end: { line: 336, column: 20 } },
                '130': { start: { line: 337, column: 22 }, end: { line: 337, column: 57 } },
                '131': { start: { line: 338, column: 8 }, end: { line: 338, column: 36 } },
                '132': { start: { line: 338, column: 19 }, end: { line: 338, column: 36 } },
                '133': { start: { line: 340, column: 11 }, end: { line: 372, column: 5 } },
                '134': { start: { line: 341, column: 6 }, end: { line: 341, column: 48 } },
                '135': { start: { line: 342, column: 11 }, end: { line: 372, column: 5 } },
                '136': { start: { line: 343, column: 6 }, end: { line: 369, column: 7 } },
                '137': { start: { line: 345, column: 10 }, end: { line: 345, column: 36 } },
                '138': { start: { line: 346, column: 10 }, end: { line: 346, column: 16 } },
                '139': { start: { line: 348, column: 10 }, end: { line: 348, column: 75 } },
                '140': { start: { line: 349, column: 10 }, end: { line: 349, column: 16 } },
                '141': { start: { line: 352, column: 10 }, end: { line: 352, column: 25 } },
                '142': { start: { line: 353, column: 10 }, end: { line: 353, column: 16 } },
                '143': { start: { line: 355, column: 10 }, end: { line: 355, column: 28 } },
                '144': { start: { line: 356, column: 10 }, end: { line: 356, column: 16 } },
                '145': { start: { line: 358, column: 10 }, end: { line: 358, column: 79 } },
                '146': { start: { line: 359, column: 10 }, end: { line: 359, column: 16 } },
                '147': { start: { line: 361, column: 10 }, end: { line: 361, column: 54 } },
                '148': { start: { line: 362, column: 10 }, end: { line: 362, column: 16 } },
                '149': { start: { line: 364, column: 10 }, end: { line: 364, column: 46 } },
                '150': { start: { line: 365, column: 10 }, end: { line: 365, column: 16 } },
                '151': { start: { line: 367, column: 10 }, end: { line: 367, column: 35 } },
                '152': { start: { line: 368, column: 10 }, end: { line: 368, column: 16 } },
                '153': { start: { line: 371, column: 6 }, end: { line: 371, column: 40 } },
                '154': { start: { line: 373, column: 4 }, end: { line: 373, column: 27 } },
                '155': { start: { line: 377, column: 25 }, end: { line: 384, column: 3 } },
                '156': { start: { line: 378, column: 19 }, end: { line: 378, column: 23 } },
                '157': { start: { line: 379, column: 4 }, end: { line: 382, column: 5 } },
                '158': { start: { line: 379, column: 17 }, end: { line: 379, column: 18 } },
                '159': { start: { line: 380, column: 20 }, end: { line: 380, column: 50 } },
                '160': { start: { line: 381, column: 6 }, end: { line: 381, column: 45 } },
                '161': { start: { line: 381, column: 28 }, end: { line: 381, column: 45 } },
                '162': { start: { line: 383, column: 4 }, end: { line: 383, column: 20 } },
                '163': { start: { line: 388, column: 24 }, end: { line: 417, column: 3 } },
                '164': { start: { line: 389, column: 16 }, end: { line: 389, column: 17 } },
                '165': { start: { line: 390, column: 20 }, end: { line: 390, column: 36 } },
                '166': { start: { line: 391, column: 22 }, end: { line: 391, column: 40 } },
                '167': { start: { line: 395, column: 4 }, end: { line: 399, column: 5 } },
                '168': { start: { line: 396, column: 6 }, end: { line: 396, column: 41 } },
                '169': { start: { line: 397, column: 11 }, end: { line: 399, column: 5 } },
                '170': { start: { line: 398, column: 6 }, end: { line: 398, column: 46 } },
                '171': { start: { line: 403, column: 4 }, end: { line: 415, column: 5 } },
                '172': { start: { line: 403, column: 17 }, end: { line: 403, column: 18 } },
                '173': { start: { line: 404, column: 18 }, end: { line: 404, column: 25 } },
                '174': { start: { line: 405, column: 21 }, end: { line: 405, column: 31 } },
                '175': { start: { line: 407, column: 6 }, end: { line: 414, column: 7 } },
                '176': { start: { line: 409, column: 8 }, end: { line: 411, column: 9 } },
                '177': { start: { line: 410, column: 10 }, end: { line: 410, column: 21 } },
                '178': { start: { line: 413, column: 8 }, end: { line: 413, column: 51 } },
                '179': { start: { line: 416, column: 4 }, end: { line: 416, column: 17 } },
                '180': { start: { line: 420, column: 28 }, end: { line: 468, column: 3 } },
                '181': { start: { line: 421, column: 20 }, end: { line: 421, column: 36 } },
                '182': { start: { line: 422, column: 22 }, end: { line: 422, column: 40 } },
                '183': { start: { line: 425, column: 4 }, end: { line: 441, column: 5 } },
                '184': { start: { line: 426, column: 6 }, end: { line: 432, column: 8 } },
                '185': { start: { line: 433, column: 11 }, end: { line: 441, column: 5 } },
                '186': { start: { line: 434, column: 6 }, end: { line: 440, column: 8 } },
                '187': { start: { line: 443, column: 23 }, end: { line: 443, column: 25 } },
                '188': { start: { line: 444, column: 4 }, end: { line: 465, column: 5 } },
                '189': { start: { line: 444, column: 17 }, end: { line: 444, column: 18 } },
                '190': { start: { line: 445, column: 18 }, end: { line: 445, column: 25 } },
                '191': { start: { line: 446, column: 21 }, end: { line: 446, column: 31 } },
                '192': { start: { line: 448, column: 6 }, end: { line: 464, column: 7 } },
                '193': { start: { line: 450, column: 8 }, end: { line: 456, column: 9 } },
                '194': { start: { line: 451, column: 10 }, end: { line: 455, column: 13 } },
                '195': { start: { line: 457, column: 13 }, end: { line: 464, column: 7 } },
                '196': { start: { line: 458, column: 8 }, end: { line: 463, column: 11 } },
                '197': { start: { line: 467, column: 4 }, end: { line: 467, column: 22 } },
                '198': { start: { line: 472, column: 2 }, end: { line: 486, column: 24 } },
                '199': { start: { line: 475, column: 8 }, end: { line: 475, column: 16 } },
                '200': { start: { line: 476, column: 8 }, end: { line: 476, column: 31 } },
                '201': { start: { line: 477, column: 8 }, end: { line: 477, column: 25 } },
                '202': { start: { line: 478, column: 8 }, end: { line: 478, column: 25 } },
                '203': { start: { line: 479, column: 8 }, end: { line: 480, column: 44 } },
                '204': { start: { line: 479, column: 42 }, end: { line: 479, column: 77 } },
                '205': { start: { line: 480, column: 13 }, end: { line: 480, column: 44 } },
                '206': { start: { line: 484, column: 4 }, end: { line: 484, column: 30 } },
                '207': { start: { line: 485, column: 4 }, end: { line: 485, column: 15 } },
                '208': { start: { line: 489, column: 2 }, end: { line: 609, column: 4 } },
                '209': { start: { line: 494, column: 21 }, end: { line: 494, column: 36 } },
                '210': { start: { line: 495, column: 6 }, end: { line: 497, column: 19 } },
                '211': { start: { line: 496, column: 22 }, end: { line: 496, column: 67 } },
                '212': { start: { line: 500, column: 4 }, end: { line: 556, column: 5 } },
                '213': { start: { line: 502, column: 8 }, end: { line: 514, column: 10 } },
                '214': { start: { line: 516, column: 8 }, end: { line: 516, column: 14 } },
                '215': { start: { line: 519, column: 20 }, end: { line: 519, column: 32 } },
                '216': { start: { line: 521, column: 10 }, end: { line: 523, column: 60 } },
                '217': { start: { line: 525, column: 8 }, end: { line: 534, column: 10 } },
                '218': { start: { line: 536, column: 8 }, end: { line: 536, column: 14 } },
                '219': { start: { line: 539, column: 8 }, end: { line: 543, column: 10 } },
                '220': { start: { line: 545, column: 8 }, end: { line: 545, column: 14 } },
                '221': { start: { line: 548, column: 8 }, end: { line: 552, column: 10 } },
                '222': { start: { line: 554, column: 8 }, end: { line: 554, column: 14 } },
                '223': { start: { line: 558, column: 4 }, end: { line: 608, column: 5 } },
                '224': { start: { line: 559, column: 6 }, end: { line: 601, column: 7 } },
                '225': { start: { line: 561, column: 24 }, end: { line: 561, column: 35 } },
                '226': { start: { line: 562, column: 21 }, end: { line: 562, column: 61 } },
                '227': { start: { line: 563, column: 8 }, end: { line: 570, column: 9 } },
                '228': { start: { line: 569, column: 10 }, end: { line: 569, column: 17 } },
                '229': { start: { line: 571, column: 8 }, end: { line: 573, column: 9 } },
                '230': { start: { line: 572, column: 10 }, end: { line: 572, column: 69 } },
                '231': { start: { line: 576, column: 8 }, end: { line: 596, column: 9 } },
                '232': { start: { line: 582, column: 25 }, end: { line: 584, column: 12 } },
                '233': { start: { line: 586, column: 10 }, end: { line: 591, column: 13 } },
                '234': { start: { line: 595, column: 10 }, end: { line: 595, column: 43 } },
                '235': { start: { line: 598, column: 8 }, end: { line: 600, column: 9 } },
                '236': { start: { line: 599, column: 10 }, end: { line: 599, column: 20 } },
                '237': { start: { line: 603, column: 6 }, end: { line: 603, column: 45 } },
                '238': { start: { line: 605, column: 6 }, end: { line: 605, column: 74 } },
                '239': { start: { line: 607, column: 6 }, end: { line: 607, column: 48 } },
                '240': { start: { line: 615, column: 2 }, end: { line: 619, column: 4 } },
                '241': { start: { line: 616, column: 4 }, end: { line: 618, column: 5 } },
                '242': { start: { line: 617, column: 6 }, end: { line: 617, column: 31 } },
                '243': { start: { line: 622, column: 2 }, end: { line: 624, column: 4 } },
                '244': { start: { line: 623, column: 4 }, end: { line: 623, column: 24 } },
                '245': { start: { line: 643, column: 2 }, end: { line: 695, column: 4 } },
                '246': { start: { line: 644, column: 4 }, end: { line: 646, column: 5 } },
                '247': { start: { line: 645, column: 6 }, end: { line: 645, column: 13 } },
                '248': { start: { line: 650, column: 14 }, end: { line: 650, column: 43 } },
                '249': { start: { line: 651, column: 4 }, end: { line: 653, column: 5 } },
                '250': { start: { line: 652, column: 6 }, end: { line: 652, column: 13 } },
                '251': { start: { line: 655, column: 4 }, end: { line: 655, column: 20 } },
                '252': { start: { line: 657, column: 17 }, end: { line: 657, column: 74 } },
                '253': { start: { line: 658, column: 22 }, end: { line: 658, column: 36 } },
                '254': { start: { line: 660, column: 19 }, end: { line: 660, column: 30 } },
                '255': { start: { line: 668, column: 19 }, end: { line: 668, column: 24 } },
                '256': { start: { line: 670, column: 4 }, end: { line: 679, column: 5 } },
                '257': { start: { line: 670, column: 17 }, end: { line: 670, column: 18 } },
                '258': { start: { line: 671, column: 20 }, end: { line: 671, column: 73 } },
                '259': { start: { line: 672, column: 6 }, end: { line: 678, column: 7 } },
                '260': { start: { line: 673, column: 8 }, end: { line: 673, column: 15 } },
                '261': { start: { line: 674, column: 13 }, end: { line: 678, column: 7 } },
                '262': { start: { line: 676, column: 8 }, end: { line: 676, column: 25 } },
                '263': { start: { line: 677, column: 8 }, end: { line: 677, column: 24 } },
                '264': { start: { line: 682, column: 4 }, end: { line: 694, column: 5 } },
                '265': { start: { line: 684, column: 25 }, end: { line: 688, column: 7 } },
                '266': { start: { line: 691, column: 6 }, end: { line: 693, column: 7 } },
                '267': { start: { line: 691, column: 19 }, end: { line: 691, column: 20 } },
                '268': { start: { line: 692, column: 8 }, end: { line: 692, column: 52 } },
                '269': { start: { line: 696, column: 2 }, end: { line: 696, column: 59 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 13, column: 58 }, end: { line: 13, column: 59 } },
                  loc: { start: { line: 13, column: 64 }, end: { line: 13, column: 66 } },
                  line: 13
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 56, column: 34 }, end: { line: 56, column: 35 } },
                  loc: { start: { line: 56, column: 40 }, end: { line: 67, column: 3 } },
                  line: 56
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: { start: { line: 99, column: 18 }, end: { line: 99, column: 19 } },
                  loc: { start: { line: 99, column: 40 }, end: { line: 159, column: 3 } },
                  line: 99
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 160, column: 28 },
                    end: { line: 160, column: 29 }
                  },
                  loc: { start: { line: 160, column: 43 }, end: { line: 184, column: 3 } },
                  line: 160
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 188, column: 25 },
                    end: { line: 188, column: 26 }
                  },
                  loc: { start: { line: 188, column: 33 }, end: { line: 319, column: 3 } },
                  line: 188
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 213, column: 22 },
                    end: { line: 213, column: 23 }
                  },
                  loc: { start: { line: 213, column: 34 }, end: { line: 314, column: 5 } },
                  line: 213
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 231, column: 22 },
                    end: { line: 231, column: 23 }
                  },
                  loc: { start: { line: 231, column: 32 }, end: { line: 313, column: 7 } },
                  line: 231
                },
                '7': {
                  name: 'ct',
                  decl: {
                    start: { line: 233, column: 59 },
                    end: { line: 233, column: 61 }
                  },
                  loc: { start: { line: 233, column: 68 }, end: { line: 312, column: 9 } },
                  line: 233
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 304, column: 28 },
                    end: { line: 304, column: 29 }
                  },
                  loc: { start: { line: 304, column: 33 }, end: { line: 306, column: 11 } },
                  line: 304
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 321, column: 19 },
                    end: { line: 321, column: 20 }
                  },
                  loc: { start: { line: 321, column: 28 }, end: { line: 330, column: 3 } },
                  line: 321
                },
                '10': {
                  name: '(anonymous_10)',
                  decl: {
                    start: { line: 332, column: 24 },
                    end: { line: 332, column: 25 }
                  },
                  loc: { start: { line: 332, column: 41 }, end: { line: 374, column: 3 } },
                  line: 332
                },
                '11': {
                  name: '(anonymous_11)',
                  decl: {
                    start: { line: 377, column: 25 },
                    end: { line: 377, column: 26 }
                  },
                  loc: { start: { line: 377, column: 43 }, end: { line: 384, column: 3 } },
                  line: 377
                },
                '12': {
                  name: '(anonymous_12)',
                  decl: {
                    start: { line: 388, column: 24 },
                    end: { line: 388, column: 25 }
                  },
                  loc: { start: { line: 388, column: 64 }, end: { line: 417, column: 3 } },
                  line: 388
                },
                '13': {
                  name: '(anonymous_13)',
                  decl: {
                    start: { line: 420, column: 28 },
                    end: { line: 420, column: 29 }
                  },
                  loc: { start: { line: 420, column: 58 }, end: { line: 468, column: 3 } },
                  line: 420
                },
                '14': {
                  name: '(anonymous_14)',
                  decl: {
                    start: { line: 472, column: 24 },
                    end: { line: 472, column: 25 }
                  },
                  loc: { start: { line: 472, column: 32 }, end: { line: 486, column: 3 } },
                  line: 472
                },
                '15': {
                  name: '(anonymous_15)',
                  decl: { start: { line: 474, column: 6 }, end: { line: 474, column: 7 } },
                  loc: { start: { line: 474, column: 39 }, end: { line: 481, column: 7 } },
                  line: 474
                },
                '16': {
                  name: '(anonymous_16)',
                  decl: {
                    start: { line: 489, column: 27 },
                    end: { line: 489, column: 28 }
                  },
                  loc: { start: { line: 489, column: 52 }, end: { line: 609, column: 3 } },
                  line: 489
                },
                '17': {
                  name: 'formatType',
                  decl: {
                    start: { line: 493, column: 13 },
                    end: { line: 493, column: 23 }
                  },
                  loc: { start: { line: 493, column: 26 }, end: { line: 498, column: 5 } },
                  line: 493
                },
                '18': {
                  name: '(anonymous_18)',
                  decl: {
                    start: { line: 496, column: 13 },
                    end: { line: 496, column: 14 }
                  },
                  loc: { start: { line: 496, column: 22 }, end: { line: 496, column: 67 } },
                  line: 496
                },
                '19': {
                  name: 'clearValidateParamsCache',
                  decl: {
                    start: { line: 615, column: 42 },
                    end: { line: 615, column: 66 }
                  },
                  loc: { start: { line: 615, column: 69 }, end: { line: 619, column: 3 } },
                  line: 615
                },
                '20': {
                  name: 'getValidateParamsArgTree',
                  decl: {
                    start: { line: 622, column: 42 },
                    end: { line: 622, column: 66 }
                  },
                  loc: { start: { line: 622, column: 69 }, end: { line: 624, column: 3 } },
                  line: 622
                },
                '21': {
                  name: 'validateParameters',
                  decl: {
                    start: { line: 643, column: 36 },
                    end: { line: 643, column: 54 }
                  },
                  loc: { start: { line: 643, column: 67 }, end: { line: 695, column: 3 } },
                  line: 643
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 12, column: 0 }, end: { line: 697, column: 1 } },
                  type: 'if',
                  locations: [
                    { start: { line: 12, column: 0 }, end: { line: 697, column: 1 } },
                    { start: { line: 12, column: 0 }, end: { line: 697, column: 1 } }
                  ],
                  line: 12
                },
                '1': {
                  loc: { start: { line: 63, column: 6 }, end: { line: 65, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 63, column: 6 }, end: { line: 65, column: 7 } },
                    { start: { line: 63, column: 6 }, end: { line: 65, column: 7 } }
                  ],
                  line: 63
                },
                '2': {
                  loc: { start: { line: 63, column: 10 }, end: { line: 63, column: 74 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 63, column: 10 }, end: { line: 63, column: 39 } },
                    { start: { line: 63, column: 43 }, end: { line: 63, column: 74 } }
                  ],
                  line: 63
                },
                '3': {
                  loc: { start: { line: 101, column: 4 }, end: { line: 156, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 101, column: 4 }, end: { line: 156, column: 5 } },
                    { start: { line: 101, column: 4 }, end: { line: 156, column: 5 } }
                  ],
                  line: 101
                },
                '4': {
                  loc: { start: { line: 102, column: 6 }, end: { line: 108, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 102, column: 6 }, end: { line: 108, column: 7 } },
                    { start: { line: 102, column: 6 }, end: { line: 108, column: 7 } }
                  ],
                  line: 102
                },
                '5': {
                  loc: { start: { line: 105, column: 14 }, end: { line: 105, column: 45 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 105, column: 14 }, end: { line: 105, column: 24 } },
                    { start: { line: 105, column: 29 }, end: { line: 105, column: 44 } }
                  ],
                  line: 105
                },
                '6': {
                  loc: { start: { line: 107, column: 14 }, end: { line: 107, column: 43 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 107, column: 14 }, end: { line: 107, column: 23 } },
                    { start: { line: 107, column: 28 }, end: { line: 107, column: 42 } }
                  ],
                  line: 107
                },
                '7': {
                  loc: { start: { line: 109, column: 11 }, end: { line: 156, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 109, column: 11 }, end: { line: 156, column: 5 } },
                    { start: { line: 109, column: 11 }, end: { line: 156, column: 5 } }
                  ],
                  line: 109
                },
                '8': {
                  loc: { start: { line: 111, column: 12 }, end: { line: 111, column: 45 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 111, column: 12 }, end: { line: 111, column: 23 } },
                    { start: { line: 111, column: 28 }, end: { line: 111, column: 44 } }
                  ],
                  line: 111
                },
                '9': {
                  loc: { start: { line: 117, column: 6 }, end: { line: 120, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 117, column: 6 }, end: { line: 120, column: 7 } },
                    { start: { line: 117, column: 6 }, end: { line: 120, column: 7 } }
                  ],
                  line: 117
                },
                '10': {
                  loc: { start: { line: 117, column: 10 }, end: { line: 117, column: 53 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 117, column: 10 }, end: { line: 117, column: 27 } },
                    { start: { line: 117, column: 31 }, end: { line: 117, column: 53 } }
                  ],
                  line: 117
                },
                '11': {
                  loc: { start: { line: 118, column: 14 }, end: { line: 118, column: 79 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 118, column: 14 }, end: { line: 118, column: 41 } },
                    { start: { line: 118, column: 46 }, end: { line: 118, column: 78 } }
                  ],
                  line: 118
                },
                '12': {
                  loc: { start: { line: 131, column: 6 }, end: { line: 135, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 131, column: 6 }, end: { line: 135, column: 7 } },
                    { start: { line: 131, column: 6 }, end: { line: 135, column: 7 } }
                  ],
                  line: 131
                },
                '13': {
                  loc: { start: { line: 139, column: 8 }, end: { line: 142, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 139, column: 8 }, end: { line: 142, column: 9 } },
                    { start: { line: 139, column: 8 }, end: { line: 142, column: 9 } }
                  ],
                  line: 139
                },
                '14': {
                  loc: { start: { line: 140, column: 16 }, end: { line: 140, column: 43 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 140, column: 16 }, end: { line: 140, column: 24 } },
                    { start: { line: 140, column: 29 }, end: { line: 140, column: 42 } }
                  ],
                  line: 140
                },
                '15': {
                  loc: { start: { line: 147, column: 8 }, end: { line: 152, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 147, column: 8 }, end: { line: 152, column: 9 } },
                    { start: { line: 147, column: 8 }, end: { line: 152, column: 9 } }
                  ],
                  line: 147
                },
                '16': {
                  loc: { start: { line: 148, column: 16 }, end: { line: 148, column: 43 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 148, column: 16 }, end: { line: 148, column: 24 } },
                    { start: { line: 148, column: 29 }, end: { line: 148, column: 42 } }
                  ],
                  line: 148
                },
                '17': {
                  loc: { start: { line: 155, column: 12 }, end: { line: 155, column: 41 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 155, column: 12 }, end: { line: 155, column: 21 } },
                    { start: { line: 155, column: 26 }, end: { line: 155, column: 40 } }
                  ],
                  line: 155
                },
                '18': {
                  loc: { start: { line: 163, column: 4 }, end: { line: 166, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 163, column: 4 }, end: { line: 166, column: 5 } },
                    { start: { line: 163, column: 4 }, end: { line: 166, column: 5 } }
                  ],
                  line: 163
                },
                '19': {
                  loc: { start: { line: 170, column: 6 }, end: { line: 181, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 170, column: 6 }, end: { line: 181, column: 7 } },
                    { start: { line: 170, column: 6 }, end: { line: 181, column: 7 } }
                  ],
                  line: 170
                },
                '20': {
                  loc: { start: { line: 175, column: 14 }, end: { line: 175, column: 43 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 175, column: 14 }, end: { line: 175, column: 23 } },
                    { start: { line: 175, column: 28 }, end: { line: 175, column: 42 } }
                  ],
                  line: 175
                },
                '21': {
                  loc: { start: { line: 193, column: 22 }, end: { line: 193, column: 52 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 193, column: 22 }, end: { line: 193, column: 44 } },
                    { start: { line: 193, column: 48 }, end: { line: 193, column: 52 } }
                  ],
                  line: 193
                },
                '22': {
                  loc: { start: { line: 200, column: 4 }, end: { line: 208, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 200, column: 4 }, end: { line: 208, column: 5 } },
                    { start: { line: 200, column: 4 }, end: { line: 208, column: 5 } }
                  ],
                  line: 200
                },
                '23': {
                  loc: { start: { line: 207, column: 32 }, end: { line: 207, column: 56 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 207, column: 32 }, end: { line: 207, column: 50 } },
                    { start: { line: 207, column: 54 }, end: { line: 207, column: 56 } }
                  ],
                  line: 207
                },
                '24': {
                  loc: { start: { line: 218, column: 6 }, end: { line: 220, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 218, column: 6 }, end: { line: 220, column: 7 } },
                    { start: { line: 218, column: 6 }, end: { line: 220, column: 7 } }
                  ],
                  line: 218
                },
                '25': {
                  loc: { start: { line: 225, column: 13 }, end: { line: 225, column: 61 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 225, column: 13 }, end: { line: 225, column: 26 } },
                    { start: { line: 225, column: 30 }, end: { line: 225, column: 61 } }
                  ],
                  line: 225
                },
                '26': {
                  loc: { start: { line: 235, column: 10 }, end: { line: 240, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 235, column: 10 }, end: { line: 240, column: 11 } },
                    { start: { line: 235, column: 10 }, end: { line: 240, column: 11 } }
                  ],
                  line: 235
                },
                '27': {
                  loc: { start: { line: 245, column: 10 }, end: { line: 283, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 245, column: 10 }, end: { line: 283, column: 11 } },
                    { start: { line: 245, column: 10 }, end: { line: 283, column: 11 } }
                  ],
                  line: 245
                },
                '28': {
                  loc: { start: { line: 247, column: 12 }, end: { line: 276, column: 13 } },
                  type: 'if',
                  locations: [
                    { start: { line: 247, column: 12 }, end: { line: 276, column: 13 } },
                    { start: { line: 247, column: 12 }, end: { line: 276, column: 13 } }
                  ],
                  line: 247
                },
                '29': {
                  loc: { start: { line: 261, column: 14 }, end: { line: 275, column: 15 } },
                  type: 'if',
                  locations: [
                    { start: { line: 261, column: 14 }, end: { line: 275, column: 15 } },
                    { start: { line: 261, column: 14 }, end: { line: 275, column: 15 } }
                  ],
                  line: 261
                },
                '30': {
                  loc: { start: { line: 261, column: 18 }, end: { line: 261, column: 63 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 261, column: 18 }, end: { line: 261, column: 37 } },
                    { start: { line: 261, column: 41 }, end: { line: 261, column: 63 } }
                  ],
                  line: 261
                },
                '31': {
                  loc: { start: { line: 270, column: 18 }, end: { line: 273, column: 19 } },
                  type: 'if',
                  locations: [
                    { start: { line: 270, column: 18 }, end: { line: 273, column: 19 } },
                    { start: { line: 270, column: 18 }, end: { line: 273, column: 19 } }
                  ],
                  line: 270
                },
                '32': {
                  loc: { start: { line: 286, column: 10 }, end: { line: 288, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 286, column: 10 }, end: { line: 288, column: 11 } },
                    { start: { line: 286, column: 10 }, end: { line: 288, column: 11 } }
                  ],
                  line: 286
                },
                '33': {
                  loc: { start: { line: 290, column: 10 }, end: { line: 292, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 290, column: 10 }, end: { line: 292, column: 11 } },
                    { start: { line: 290, column: 10 }, end: { line: 292, column: 11 } }
                  ],
                  line: 290
                },
                '34': {
                  loc: { start: { line: 299, column: 10 }, end: { line: 302, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 299, column: 10 }, end: { line: 302, column: 11 } },
                    { start: { line: 299, column: 10 }, end: { line: 302, column: 11 } }
                  ],
                  line: 299
                },
                '35': {
                  loc: { start: { line: 305, column: 16 }, end: { line: 305, column: 25 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 305, column: 16 }, end: { line: 305, column: 17 } },
                    { start: { line: 305, column: 21 }, end: { line: 305, column: 25 } }
                  ],
                  line: 305
                },
                '36': {
                  loc: { start: { line: 307, column: 10 }, end: { line: 309, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 307, column: 10 }, end: { line: 309, column: 11 } },
                    { start: { line: 307, column: 10 }, end: { line: 309, column: 11 } }
                  ],
                  line: 307
                },
                '37': {
                  loc: { start: { line: 322, column: 4 }, end: { line: 329, column: 5 } },
                  type: 'switch',
                  locations: [
                    { start: { line: 323, column: 6 }, end: { line: 324, column: 20 } },
                    { start: { line: 325, column: 6 }, end: { line: 326, column: 29 } },
                    { start: { line: 327, column: 6 }, end: { line: 328, column: 21 } }
                  ],
                  line: 322
                },
                '38': {
                  loc: { start: { line: 335, column: 4 }, end: { line: 372, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 335, column: 4 }, end: { line: 372, column: 5 } },
                    { start: { line: 335, column: 4 }, end: { line: 372, column: 5 } }
                  ],
                  line: 335
                },
                '39': {
                  loc: { start: { line: 335, column: 8 }, end: { line: 335, column: 29 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 335, column: 8 }, end: { line: 335, column: 18 } },
                    { start: { line: 335, column: 22 }, end: { line: 335, column: 29 } }
                  ],
                  line: 335
                },
                '40': {
                  loc: { start: { line: 338, column: 8 }, end: { line: 338, column: 36 } },
                  type: 'if',
                  locations: [
                    { start: { line: 338, column: 8 }, end: { line: 338, column: 36 } },
                    { start: { line: 338, column: 8 }, end: { line: 338, column: 36 } }
                  ],
                  line: 338
                },
                '41': {
                  loc: { start: { line: 340, column: 11 }, end: { line: 372, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 340, column: 11 }, end: { line: 372, column: 5 } },
                    { start: { line: 340, column: 11 }, end: { line: 372, column: 5 } }
                  ],
                  line: 340
                },
                '42': {
                  loc: { start: { line: 342, column: 11 }, end: { line: 372, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 342, column: 11 }, end: { line: 372, column: 5 } },
                    { start: { line: 342, column: 11 }, end: { line: 372, column: 5 } }
                  ],
                  line: 342
                },
                '43': {
                  loc: { start: { line: 343, column: 6 }, end: { line: 369, column: 7 } },
                  type: 'switch',
                  locations: [
                    { start: { line: 344, column: 8 }, end: { line: 346, column: 16 } },
                    { start: { line: 347, column: 8 }, end: { line: 349, column: 16 } },
                    { start: { line: 350, column: 8 }, end: { line: 350, column: 23 } },
                    { start: { line: 351, column: 8 }, end: { line: 353, column: 16 } },
                    { start: { line: 354, column: 8 }, end: { line: 356, column: 16 } },
                    { start: { line: 357, column: 8 }, end: { line: 359, column: 16 } },
                    { start: { line: 360, column: 8 }, end: { line: 362, column: 16 } },
                    { start: { line: 363, column: 8 }, end: { line: 365, column: 16 } },
                    { start: { line: 366, column: 8 }, end: { line: 368, column: 16 } }
                  ],
                  line: 343
                },
                '44': {
                  loc: { start: { line: 348, column: 20 }, end: { line: 348, column: 74 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 348, column: 20 }, end: { line: 348, column: 35 } },
                    { start: { line: 348, column: 39 }, end: { line: 348, column: 74 } }
                  ],
                  line: 348
                },
                '45': {
                  loc: { start: { line: 373, column: 11 }, end: { line: 373, column: 26 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 373, column: 21 }, end: { line: 373, column: 22 } },
                    { start: { line: 373, column: 25 }, end: { line: 373, column: 26 } }
                  ],
                  line: 373
                },
                '46': {
                  loc: { start: { line: 379, column: 20 }, end: { line: 379, column: 52 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 379, column: 20 }, end: { line: 379, column: 32 } },
                    { start: { line: 379, column: 36 }, end: { line: 379, column: 52 } }
                  ],
                  line: 379
                },
                '47': {
                  loc: { start: { line: 381, column: 6 }, end: { line: 381, column: 45 } },
                  type: 'if',
                  locations: [
                    { start: { line: 381, column: 6 }, end: { line: 381, column: 45 } },
                    { start: { line: 381, column: 6 }, end: { line: 381, column: 45 } }
                  ],
                  line: 381
                },
                '48': {
                  loc: { start: { line: 395, column: 4 }, end: { line: 399, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 395, column: 4 }, end: { line: 399, column: 5 } },
                    { start: { line: 395, column: 4 }, end: { line: 399, column: 5 } }
                  ],
                  line: 395
                },
                '49': {
                  loc: { start: { line: 397, column: 11 }, end: { line: 399, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 397, column: 11 }, end: { line: 399, column: 5 } },
                    { start: { line: 397, column: 11 }, end: { line: 399, column: 5 } }
                  ],
                  line: 397
                },
                '50': {
                  loc: { start: { line: 403, column: 20 }, end: { line: 403, column: 59 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 403, column: 20 }, end: { line: 403, column: 37 } },
                    { start: { line: 403, column: 41 }, end: { line: 403, column: 59 } }
                  ],
                  line: 403
                },
                '51': {
                  loc: { start: { line: 407, column: 6 }, end: { line: 414, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 407, column: 6 }, end: { line: 414, column: 7 } },
                    { start: { line: 407, column: 6 }, end: { line: 414, column: 7 } }
                  ],
                  line: 407
                },
                '52': {
                  loc: { start: { line: 409, column: 8 }, end: { line: 411, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 409, column: 8 }, end: { line: 411, column: 9 } },
                    { start: { line: 409, column: 8 }, end: { line: 411, column: 9 } }
                  ],
                  line: 409
                },
                '53': {
                  loc: { start: { line: 409, column: 12 }, end: { line: 409, column: 61 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 409, column: 12 }, end: { line: 409, column: 28 } },
                    { start: { line: 409, column: 32 }, end: { line: 409, column: 45 } },
                    { start: { line: 409, column: 49 }, end: { line: 409, column: 61 } }
                  ],
                  line: 409
                },
                '54': {
                  loc: { start: { line: 425, column: 4 }, end: { line: 441, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 425, column: 4 }, end: { line: 441, column: 5 } },
                    { start: { line: 425, column: 4 }, end: { line: 441, column: 5 } }
                  ],
                  line: 425
                },
                '55': {
                  loc: { start: { line: 433, column: 11 }, end: { line: 441, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 433, column: 11 }, end: { line: 441, column: 5 } },
                    { start: { line: 433, column: 11 }, end: { line: 441, column: 5 } }
                  ],
                  line: 433
                },
                '56': {
                  loc: { start: { line: 448, column: 6 }, end: { line: 464, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 448, column: 6 }, end: { line: 464, column: 7 } },
                    { start: { line: 448, column: 6 }, end: { line: 464, column: 7 } }
                  ],
                  line: 448
                },
                '57': {
                  loc: { start: { line: 450, column: 8 }, end: { line: 456, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 450, column: 8 }, end: { line: 456, column: 9 } },
                    { start: { line: 450, column: 8 }, end: { line: 456, column: 9 } }
                  ],
                  line: 450
                },
                '58': {
                  loc: { start: { line: 450, column: 12 }, end: { line: 450, column: 61 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 450, column: 12 }, end: { line: 450, column: 28 } },
                    { start: { line: 450, column: 32 }, end: { line: 450, column: 45 } },
                    { start: { line: 450, column: 49 }, end: { line: 450, column: 61 } }
                  ],
                  line: 450
                },
                '59': {
                  loc: { start: { line: 457, column: 13 }, end: { line: 464, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 457, column: 13 }, end: { line: 464, column: 7 } },
                    { start: { line: 457, column: 13 }, end: { line: 464, column: 7 } }
                  ],
                  line: 457
                },
                '60': {
                  loc: { start: { line: 479, column: 8 }, end: { line: 480, column: 44 } },
                  type: 'if',
                  locations: [
                    { start: { line: 479, column: 8 }, end: { line: 480, column: 44 } },
                    { start: { line: 479, column: 8 }, end: { line: 480, column: 44 } }
                  ],
                  line: 479
                },
                '61': {
                  loc: { start: { line: 496, column: 22 }, end: { line: 496, column: 67 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 496, column: 35 }, end: { line: 496, column: 55 } },
                    { start: { line: 496, column: 58 }, end: { line: 496, column: 67 } }
                  ],
                  line: 496
                },
                '62': {
                  loc: { start: { line: 500, column: 4 }, end: { line: 556, column: 5 } },
                  type: 'switch',
                  locations: [
                    { start: { line: 501, column: 6 }, end: { line: 517, column: 7 } },
                    { start: { line: 518, column: 6 }, end: { line: 537, column: 7 } },
                    { start: { line: 538, column: 6 }, end: { line: 546, column: 7 } },
                    { start: { line: 547, column: 6 }, end: { line: 555, column: 7 } }
                  ],
                  line: 500
                },
                '63': {
                  loc: { start: { line: 521, column: 10 }, end: { line: 523, column: 60 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 522, column: 14 }, end: { line: 522, column: 21 } },
                    { start: { line: 523, column: 14 }, end: { line: 523, column: 60 } }
                  ],
                  line: 521
                },
                '64': {
                  loc: { start: { line: 523, column: 14 }, end: { line: 523, column: 60 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 523, column: 29 }, end: { line: 523, column: 35 } },
                    { start: { line: 523, column: 38 }, end: { line: 523, column: 60 } }
                  ],
                  line: 523
                },
                '65': {
                  loc: { start: { line: 523, column: 38 }, end: { line: 523, column: 60 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 523, column: 38 }, end: { line: 523, column: 46 } },
                    { start: { line: 523, column: 50 }, end: { line: 523, column: 60 } }
                  ],
                  line: 523
                },
                '66': {
                  loc: { start: { line: 558, column: 4 }, end: { line: 608, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 558, column: 4 }, end: { line: 608, column: 5 } },
                    { start: { line: 558, column: 4 }, end: { line: 608, column: 5 } }
                  ],
                  line: 558
                },
                '67': {
                  loc: { start: { line: 563, column: 8 }, end: { line: 570, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 563, column: 8 }, end: { line: 570, column: 9 } },
                    { start: { line: 563, column: 8 }, end: { line: 570, column: 9 } }
                  ],
                  line: 563
                },
                '68': {
                  loc: { start: { line: 564, column: 10 }, end: { line: 567, column: 70 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 564, column: 10 }, end: { line: 564, column: 19 } },
                    { start: { line: 565, column: 10 }, end: { line: 565, column: 32 } },
                    { start: { line: 566, column: 10 }, end: { line: 566, column: 46 } },
                    { start: { line: 567, column: 10 }, end: { line: 567, column: 70 } }
                  ],
                  line: 564
                },
                '69': {
                  loc: { start: { line: 571, column: 8 }, end: { line: 573, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 571, column: 8 }, end: { line: 573, column: 9 } },
                    { start: { line: 571, column: 8 }, end: { line: 573, column: 9 } }
                  ],
                  line: 571
                },
                '70': {
                  loc: { start: { line: 576, column: 8 }, end: { line: 596, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 576, column: 8 }, end: { line: 596, column: 9 } },
                    { start: { line: 576, column: 8 }, end: { line: 596, column: 9 } }
                  ],
                  line: 576
                },
                '71': {
                  loc: { start: { line: 577, column: 10 }, end: { line: 580, column: 32 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 577, column: 10 }, end: { line: 577, column: 19 } },
                    { start: { line: 578, column: 10 }, end: { line: 578, column: 28 } },
                    { start: { line: 579, column: 10 }, end: { line: 579, column: 30 } },
                    { start: { line: 580, column: 10 }, end: { line: 580, column: 32 } }
                  ],
                  line: 577
                },
                '72': {
                  loc: { start: { line: 598, column: 8 }, end: { line: 600, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 598, column: 8 }, end: { line: 600, column: 9 } },
                    { start: { line: 598, column: 8 }, end: { line: 600, column: 9 } }
                  ],
                  line: 598
                },
                '73': {
                  loc: { start: { line: 644, column: 4 }, end: { line: 646, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 644, column: 4 }, end: { line: 646, column: 5 } },
                    { start: { line: 644, column: 4 }, end: { line: 646, column: 5 } }
                  ],
                  line: 644
                },
                '74': {
                  loc: { start: { line: 651, column: 4 }, end: { line: 653, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 651, column: 4 }, end: { line: 653, column: 5 } },
                    { start: { line: 651, column: 4 }, end: { line: 653, column: 5 } }
                  ],
                  line: 651
                },
                '75': {
                  loc: { start: { line: 657, column: 17 }, end: { line: 657, column: 74 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 657, column: 17 }, end: { line: 657, column: 31 } },
                    { start: { line: 657, column: 36 }, end: { line: 657, column: 73 } }
                  ],
                  line: 657
                },
                '76': {
                  loc: { start: { line: 672, column: 6 }, end: { line: 678, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 672, column: 6 }, end: { line: 678, column: 7 } },
                    { start: { line: 672, column: 6 }, end: { line: 678, column: 7 } }
                  ],
                  line: 672
                },
                '77': {
                  loc: { start: { line: 674, column: 13 }, end: { line: 678, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 674, column: 13 }, end: { line: 678, column: 7 } },
                    { start: { line: 674, column: 13 }, end: { line: 678, column: 7 } }
                  ],
                  line: 674
                },
                '78': {
                  loc: { start: { line: 682, column: 4 }, end: { line: 694, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 682, column: 4 }, end: { line: 694, column: 5 } },
                    { start: { line: 682, column: 4 }, end: { line: 694, column: 5 } }
                  ],
                  line: 682
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0,
                '118': 0,
                '119': 0,
                '120': 0,
                '121': 0,
                '122': 0,
                '123': 0,
                '124': 0,
                '125': 0,
                '126': 0,
                '127': 0,
                '128': 0,
                '129': 0,
                '130': 0,
                '131': 0,
                '132': 0,
                '133': 0,
                '134': 0,
                '135': 0,
                '136': 0,
                '137': 0,
                '138': 0,
                '139': 0,
                '140': 0,
                '141': 0,
                '142': 0,
                '143': 0,
                '144': 0,
                '145': 0,
                '146': 0,
                '147': 0,
                '148': 0,
                '149': 0,
                '150': 0,
                '151': 0,
                '152': 0,
                '153': 0,
                '154': 0,
                '155': 0,
                '156': 0,
                '157': 0,
                '158': 0,
                '159': 0,
                '160': 0,
                '161': 0,
                '162': 0,
                '163': 0,
                '164': 0,
                '165': 0,
                '166': 0,
                '167': 0,
                '168': 0,
                '169': 0,
                '170': 0,
                '171': 0,
                '172': 0,
                '173': 0,
                '174': 0,
                '175': 0,
                '176': 0,
                '177': 0,
                '178': 0,
                '179': 0,
                '180': 0,
                '181': 0,
                '182': 0,
                '183': 0,
                '184': 0,
                '185': 0,
                '186': 0,
                '187': 0,
                '188': 0,
                '189': 0,
                '190': 0,
                '191': 0,
                '192': 0,
                '193': 0,
                '194': 0,
                '195': 0,
                '196': 0,
                '197': 0,
                '198': 0,
                '199': 0,
                '200': 0,
                '201': 0,
                '202': 0,
                '203': 0,
                '204': 0,
                '205': 0,
                '206': 0,
                '207': 0,
                '208': 0,
                '209': 0,
                '210': 0,
                '211': 0,
                '212': 0,
                '213': 0,
                '214': 0,
                '215': 0,
                '216': 0,
                '217': 0,
                '218': 0,
                '219': 0,
                '220': 0,
                '221': 0,
                '222': 0,
                '223': 0,
                '224': 0,
                '225': 0,
                '226': 0,
                '227': 0,
                '228': 0,
                '229': 0,
                '230': 0,
                '231': 0,
                '232': 0,
                '233': 0,
                '234': 0,
                '235': 0,
                '236': 0,
                '237': 0,
                '238': 0,
                '239': 0,
                '240': 0,
                '241': 0,
                '242': 0,
                '243': 0,
                '244': 0,
                '245': 0,
                '246': 0,
                '247': 0,
                '248': 0,
                '249': 0,
                '250': 0,
                '251': 0,
                '252': 0,
                '253': 0,
                '254': 0,
                '255': 0,
                '256': 0,
                '257': 0,
                '258': 0,
                '259': 0,
                '260': 0,
                '261': 0,
                '262': 0,
                '263': 0,
                '264': 0,
                '265': 0,
                '266': 0,
                '267': 0,
                '268': 0,
                '269': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0],
                '20': [0, 0],
                '21': [0, 0],
                '22': [0, 0],
                '23': [0, 0],
                '24': [0, 0],
                '25': [0, 0],
                '26': [0, 0],
                '27': [0, 0],
                '28': [0, 0],
                '29': [0, 0],
                '30': [0, 0],
                '31': [0, 0],
                '32': [0, 0],
                '33': [0, 0],
                '34': [0, 0],
                '35': [0, 0],
                '36': [0, 0],
                '37': [0, 0, 0],
                '38': [0, 0],
                '39': [0, 0],
                '40': [0, 0],
                '41': [0, 0],
                '42': [0, 0],
                '43': [0, 0, 0, 0, 0, 0, 0, 0, 0],
                '44': [0, 0],
                '45': [0, 0],
                '46': [0, 0],
                '47': [0, 0],
                '48': [0, 0],
                '49': [0, 0],
                '50': [0, 0],
                '51': [0, 0],
                '52': [0, 0],
                '53': [0, 0, 0],
                '54': [0, 0],
                '55': [0, 0],
                '56': [0, 0],
                '57': [0, 0],
                '58': [0, 0, 0],
                '59': [0, 0],
                '60': [0, 0],
                '61': [0, 0],
                '62': [0, 0, 0, 0],
                '63': [0, 0],
                '64': [0, 0],
                '65': [0, 0],
                '66': [0, 0],
                '67': [0, 0],
                '68': [0, 0, 0, 0],
                '69': [0, 0],
                '70': [0, 0],
                '71': [0, 0, 0, 0],
                '72': [0, 0],
                '73': [0, 0],
                '74': [0, 0],
                '75': [0, 0],
                '76': [0, 0],
                '77': [0, 0],
                '78': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: 'cfe2d8a796bfa73fd4a04512156456080d32a91f'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.symbol');
          _dereq_('core-js/modules/es.symbol.description');
          _dereq_('core-js/modules/es.symbol.iterator');
          _dereq_('core-js/modules/es.array.concat');
          _dereq_('core-js/modules/es.array.for-each');
          _dereq_('core-js/modules/es.array.includes');
          _dereq_('core-js/modules/es.array.index-of');
          _dereq_('core-js/modules/es.array.iterator');
          _dereq_('core-js/modules/es.array.join');
          _dereq_('core-js/modules/es.array.last-index-of');
          _dereq_('core-js/modules/es.array.map');
          _dereq_('core-js/modules/es.array.slice');
          _dereq_('core-js/modules/es.function.name');
          _dereq_('core-js/modules/es.map');
          _dereq_('core-js/modules/es.number.constructor');
          _dereq_('core-js/modules/es.object.get-prototype-of');
          _dereq_('core-js/modules/es.object.keys');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.reflect.construct');
          _dereq_('core-js/modules/es.regexp.exec');
          _dereq_('core-js/modules/es.regexp.to-string');
          _dereq_('core-js/modules/es.set');
          _dereq_('core-js/modules/es.string.includes');
          _dereq_('core-js/modules/es.string.iterator');
          _dereq_('core-js/modules/es.string.split');
          _dereq_('core-js/modules/web.dom-collections.for-each');
          _dereq_('core-js/modules/web.dom-collections.iterator');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../main'));
          var constants = _interopRequireWildcard(_dereq_('../constants'));
          var _internationalization = _dereq_('../internationalization');
          function _getRequireWildcardCache() {
            if (typeof WeakMap !== 'function') return null;
            var cache = new WeakMap();
            _getRequireWildcardCache = function _getRequireWildcardCache() {
              return cache;
            };
            return cache;
          }
          function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
              return obj;
            }
            if (obj === null || (_typeof(obj) !== 'object' && typeof obj !== 'function')) {
              return { default: obj };
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
              return cache.get(obj);
            }
            var newObj = {};
            var hasPropertyDescriptor =
              Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
              if (Object.prototype.hasOwnProperty.call(obj, key)) {
                var desc = hasPropertyDescriptor
                  ? Object.getOwnPropertyDescriptor(obj, key)
                  : null;
                if (desc && (desc.get || desc.set)) {
                  Object.defineProperty(newObj, key, desc);
                } else {
                  newObj[key] = obj[key];
                }
              }
            }
            newObj.default = obj;
            if (cache) {
              cache.set(obj, newObj);
            }
            return newObj;
          }
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          function _classCallCheck(instance, Constructor) {
            if (!(instance instanceof Constructor)) {
              throw new TypeError('Cannot call a class as a function');
            }
          }
          function _inherits(subClass, superClass) {
            if (typeof superClass !== 'function' && superClass !== null) {
              throw new TypeError('Super expression must either be null or a function');
            }
            subClass.prototype = Object.create(superClass && superClass.prototype, {
              constructor: { value: subClass, writable: true, configurable: true }
            });
            if (superClass) _setPrototypeOf(subClass, superClass);
          }
          function _createSuper(Derived) {
            function isNativeReflectConstruct() {
              if (typeof Reflect === 'undefined' || !Reflect.construct) return false;
              if (Reflect.construct.sham) return false;
              if (typeof Proxy === 'function') return true;
              try {
                Date.prototype.toString.call(Reflect.construct(Date, [], function() {}));
                return true;
              } catch (e) {
                return false;
              }
            }
            return function() {
              var Super = _getPrototypeOf(Derived),
                result;
              if (isNativeReflectConstruct()) {
                var NewTarget = _getPrototypeOf(this).constructor;
                result = Reflect.construct(Super, arguments, NewTarget);
              } else {
                result = Super.apply(this, arguments);
              }
              return _possibleConstructorReturn(this, result);
            };
          }
          function _possibleConstructorReturn(self, call) {
            if (call && (_typeof(call) === 'object' || typeof call === 'function')) {
              return call;
            }
            return _assertThisInitialized(self);
          }
          function _assertThisInitialized(self) {
            if (self === void 0) {
              throw new ReferenceError(
                "this hasn't been initialised - super() hasn't been called"
              );
            }
            return self;
          }
          function _wrapNativeSuper(Class) {
            var _cache = typeof Map === 'function' ? new Map() : undefined;
            _wrapNativeSuper = function _wrapNativeSuper(Class) {
              if (Class === null || !_isNativeFunction(Class)) return Class;
              if (typeof Class !== 'function') {
                throw new TypeError('Super expression must either be null or a function');
              }
              if (typeof _cache !== 'undefined') {
                if (_cache.has(Class)) return _cache.get(Class);
                _cache.set(Class, Wrapper);
              }
              function Wrapper() {
                return _construct(Class, arguments, _getPrototypeOf(this).constructor);
              }
              Wrapper.prototype = Object.create(Class.prototype, {
                constructor: {
                  value: Wrapper,
                  enumerable: false,
                  writable: true,
                  configurable: true
                }
              });
              return _setPrototypeOf(Wrapper, Class);
            };
            return _wrapNativeSuper(Class);
          }
          function isNativeReflectConstruct() {
            if (typeof Reflect === 'undefined' || !Reflect.construct) return false;
            if (Reflect.construct.sham) return false;
            if (typeof Proxy === 'function') return true;
            try {
              Date.prototype.toString.call(Reflect.construct(Date, [], function() {}));
              return true;
            } catch (e) {
              return false;
            }
          }
          function _construct(Parent, args, Class) {
            if (isNativeReflectConstruct()) {
              _construct = Reflect.construct;
            } else {
              _construct = function _construct(Parent, args, Class) {
                var a = [null];
                a.push.apply(a, args);
                var Constructor = Function.bind.apply(Parent, a);
                var instance = new Constructor();
                if (Class) _setPrototypeOf(instance, Class.prototype);
                return instance;
              };
            }
            return _construct.apply(null, arguments);
          }
          function _isNativeFunction(fn) {
            return Function.toString.call(fn).indexOf('[native code]') !== -1;
          }
          function _setPrototypeOf(o, p) {
            _setPrototypeOf =
              Object.setPrototypeOf ||
              function _setPrototypeOf(o, p) {
                o.__proto__ = p;
                return o;
              };
            return _setPrototypeOf(o, p);
          }
          function _getPrototypeOf(o) {
            _getPrototypeOf = Object.setPrototypeOf
              ? Object.getPrototypeOf
              : function _getPrototypeOf(o) {
                  return o.__proto__ || Object.getPrototypeOf(o);
                };
            return _getPrototypeOf(o);
          }
          function _typeof(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof = function _typeof(obj) {
                return typeof obj;
              };
            } else {
              _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof(obj);
          }
          cov_1m41fbe05k.s[0]++;

          if (typeof IS_MINIFIED !== 'undefined') {
            cov_1m41fbe05k.b[0][0]++;
            cov_1m41fbe05k.s[1]++;
            _main.default._validateParameters = _main.default._clearValidateParamsCache = function() {
              cov_1m41fbe05k.f[0]++;
            };
          } else {
            cov_1m41fbe05k.b[0][1]++;
            // for parameter validation
            var dataDoc = (cov_1m41fbe05k.s[2]++,
            _dereq_('../../../docs/parameterData.json'));
            var arrDoc = (cov_1m41fbe05k.s[3]++, JSON.parse(JSON.stringify(dataDoc)));

            var docCache = (cov_1m41fbe05k.s[4]++, {});
            var builtinTypes = (cov_1m41fbe05k.s[5]++,
            new Set([
              'null',
              'number',
              'string',
              'boolean',
              'constant',
              'function',
              'any',
              'integer'
            ]));

            var basicTypes = (cov_1m41fbe05k.s[6]++,
            {
              number: true,
              boolean: true,
              string: true,
              function: true,
              undefined: true
            });

            // reverse map of all constants
            var constantsReverseMap = (cov_1m41fbe05k.s[7]++, {});
            cov_1m41fbe05k.s[8]++;
            for (var key in constants) {
              cov_1m41fbe05k.s[9]++;
              constantsReverseMap[constants[key]] = key;
            }

            // mapping names of p5 types to their constructor function
            // p5Constructors:
            //    - Color: f()
            //    - Graphics: f()
            //    - Vector: f()
            // and so on
            var p5Constructors = (cov_1m41fbe05k.s[10]++, {});

            // For speedup over many runs. funcSpecificConstructors[func] only has the
            // constructors for types which were seen earlier as args of "func"
            var funcSpecificConstructors = (cov_1m41fbe05k.s[11]++, {});
            cov_1m41fbe05k.s[12]++;
            window.addEventListener('load', function() {
              cov_1m41fbe05k.f[1]++;
              cov_1m41fbe05k.s[13]++;
              // Make a list of all p5 classes to be used for argument validation
              // This must be done only when everything has loaded otherwise we get
              // an empty array
              for (
                var _i = 0, _Object$keys = Object.keys(_main.default);
                _i < _Object$keys.length;
                _i++
              ) {
                var _key = _Object$keys[_i];
                cov_1m41fbe05k.s[14]++;
                // Get a list of all constructors in p5. They are functions whose names
                // start with a capital letter
                if (
                  (cov_1m41fbe05k.b[2][0]++, typeof _main.default[_key] === 'function') &&
                  (cov_1m41fbe05k.b[2][1]++, _key[0] !== _key[0].toLowerCase())
                ) {
                  cov_1m41fbe05k.b[1][0]++;
                  cov_1m41fbe05k.s[15]++;
                  p5Constructors[_key] = _main.default[_key];
                } else {
                  cov_1m41fbe05k.b[1][1]++;
                }
              }
            });

            var argumentTree = (cov_1m41fbe05k.s[16]++, {});
            // The following two functions are responsible for querying and inserting
            // into the argument tree. It stores the types of arguments that each
            // function has seen so far. It is used to query if a sequence of
            // arguments seen in validate parameters was seen before.
            // Lets consider that the following segment of code runs repeatedly, perhaps
            // in a loop or in draw()
            //   color(10, 10, 10);
            //   color(10, 10);
            //   color('r', 'g', 'b');
            // After the first of run the code segment, the argument tree looks like
            // - color
            //     - number
            //        - number
            //            - number
            //                - seen: true
            //            - seen: true
            //     - string
            //        - string
            //            - string
            //                - seen: true
            // seen: true signifies that this argument was also seen as the last
            // argument in a call. Now in the second run of the sketch, it would traverse
            // the existing tree and see seen: true, i.e this sequence was seen
            // before and so scoring can be skipped. This also prevents logging multiple
            // validation messages for the same thing.

            // These two functions would be called repeatedly over and over again,
            // so they need to be as optimized for performance as possible
            cov_1m41fbe05k.s[17]++;
            var addType = function addType(value, obj, func) {
              cov_1m41fbe05k.f[2]++;
              var type = (cov_1m41fbe05k.s[18]++, _typeof(value));
              cov_1m41fbe05k.s[19]++;
              if (basicTypes[type]) {
                cov_1m41fbe05k.b[3][0]++;
                cov_1m41fbe05k.s[20]++;
                if (constantsReverseMap[value]) {
                  cov_1m41fbe05k.b[4][0]++;
                  cov_1m41fbe05k.s[21]++;
                  // check if the value is a p5 constant and if it is, we would want the
                  // value itself to be stored in the tree instead of the type
                  obj =
                    (cov_1m41fbe05k.b[5][0]++, obj[value]) ||
                    (cov_1m41fbe05k.b[5][1]++, (obj[value] = {}));
                } else {
                  cov_1m41fbe05k.b[4][1]++;
                  cov_1m41fbe05k.s[22]++;
                  obj =
                    (cov_1m41fbe05k.b[6][0]++, obj[type]) ||
                    (cov_1m41fbe05k.b[6][1]++, (obj[type] = {}));
                }
              } else {
                cov_1m41fbe05k.b[3][1]++;
                cov_1m41fbe05k.s[23]++;
                if (value === null) {
                  cov_1m41fbe05k.b[7][0]++;
                  cov_1m41fbe05k.s[24]++;
                  // typeof null -> "object". don't want that
                  obj =
                    (cov_1m41fbe05k.b[8][0]++, obj['null']) ||
                    (cov_1m41fbe05k.b[8][1]++, (obj['null'] = {}));
                } else {
                  cov_1m41fbe05k.b[7][1]++;
                  cov_1m41fbe05k.s[25]++;
                  // objects which are instances of p5 classes have nameless constructors.
                  // native objects have a constructor named "Object". This check
                  // differentiates between the two so that we dont waste time finding the
                  // p5 class if we just have a native object
                  if (
                    (cov_1m41fbe05k.b[10][0]++, value.constructor) &&
                    (cov_1m41fbe05k.b[10][1]++, value.constructor.name)
                  ) {
                    cov_1m41fbe05k.b[9][0]++;
                    cov_1m41fbe05k.s[26]++;
                    obj =
                      (cov_1m41fbe05k.b[11][0]++, obj[value.constructor.name]) ||
                      (cov_1m41fbe05k.b[11][1]++, (obj[value.constructor.name] = {}));
                    cov_1m41fbe05k.s[27]++;
                    return obj;
                  } else {
                    cov_1m41fbe05k.b[9][1]++;
                  }

                  // constructors for types defined in p5 do not have a name property.
                  // e.constructor.name gives "". Code in this segment is a workaround for it

                  // p5C will only have the name: constructor mapping for types
                  // which were already seen as args of "func"
                  var p5C = (cov_1m41fbe05k.s[28]++, funcSpecificConstructors[func]);
                  // p5C would contain much fewer items than p5Constructors. if we find our
                  // answer in p5C, we don't have to scan through p5Constructors
                  cov_1m41fbe05k.s[29]++;
                  if (p5C === undefined) {
                    cov_1m41fbe05k.b[12][0]++;
                    cov_1m41fbe05k.s[30]++;
                    // if there isn't an entry yet for func
                    // make an entry of empty object
                    p5C = funcSpecificConstructors[func] = {};
                  } else {
                    cov_1m41fbe05k.b[12][1]++;
                  }
                  cov_1m41fbe05k.s[31]++;

                  for (var _key2 in p5C) {
                    cov_1m41fbe05k.s[32]++;
                    // search on the constructors we have already seen (smaller search space)
                    if (value instanceof p5C[_key2]) {
                      cov_1m41fbe05k.b[13][0]++;
                      cov_1m41fbe05k.s[33]++;
                      obj =
                        (cov_1m41fbe05k.b[14][0]++, obj[_key2]) ||
                        (cov_1m41fbe05k.b[14][1]++, (obj[_key2] = {}));
                      cov_1m41fbe05k.s[34]++;
                      return obj;
                    } else {
                      cov_1m41fbe05k.b[13][1]++;
                    }
                  }
                  cov_1m41fbe05k.s[35]++;

                  for (var _key3 in p5Constructors) {
                    cov_1m41fbe05k.s[36]++;
                    // if the above search didn't work, search on all p5 constructors
                    if (value instanceof p5Constructors[_key3]) {
                      cov_1m41fbe05k.b[15][0]++;
                      cov_1m41fbe05k.s[37]++;
                      obj =
                        (cov_1m41fbe05k.b[16][0]++, obj[_key3]) ||
                        (cov_1m41fbe05k.b[16][1]++, (obj[_key3] = {}));
                      // if found, add to known constructors for this function
                      cov_1m41fbe05k.s[38]++;
                      p5C[_key3] = p5Constructors[_key3];
                      cov_1m41fbe05k.s[39]++;
                      return obj;
                    } else {
                      cov_1m41fbe05k.b[15][1]++;
                    }
                  }
                  // nothing worked, put the type as is
                  cov_1m41fbe05k.s[40]++;
                  obj =
                    (cov_1m41fbe05k.b[17][0]++, obj[type]) ||
                    (cov_1m41fbe05k.b[17][1]++, (obj[type] = {}));
                }
              }
              cov_1m41fbe05k.s[41]++;

              return obj;
            };
            cov_1m41fbe05k.s[42]++;
            var buildArgTypeCache = function buildArgTypeCache(func, arr) {
              cov_1m41fbe05k.f[3]++;
              // get the if an argument tree for current function already exists
              var obj = (cov_1m41fbe05k.s[43]++, argumentTree[func]);
              cov_1m41fbe05k.s[44]++;
              if (obj === undefined) {
                cov_1m41fbe05k.b[18][0]++;
                cov_1m41fbe05k.s[45]++;
                // if it doesn't, create an empty tree
                obj = argumentTree[func] = {};
              } else {
                cov_1m41fbe05k.b[18][1]++;
              }
              cov_1m41fbe05k.s[46]++;

              for (
                var i = (cov_1m41fbe05k.s[47]++, 0),
                  len = (cov_1m41fbe05k.s[48]++, arr.length);
                i < len;
                ++i
              ) {
                var value = (cov_1m41fbe05k.s[49]++, arr[i]);
                cov_1m41fbe05k.s[50]++;
                if (value instanceof Array) {
                  cov_1m41fbe05k.b[19][0]++;
                  cov_1m41fbe05k.s[51]++;
                  // an array is passed as an argument, expand it and get the type of
                  // each of its element. We distinguish the start of an array with 'as'
                  // or arraystart. This would help distinguish between the arguments
                  // (number, number, number) and (number, [number, number])
                  obj =
                    (cov_1m41fbe05k.b[20][0]++, obj['as']) ||
                    (cov_1m41fbe05k.b[20][1]++, (obj['as'] = {}));
                  cov_1m41fbe05k.s[52]++;
                  for (
                    var j = (cov_1m41fbe05k.s[53]++, 0),
                      lenA = (cov_1m41fbe05k.s[54]++, value.length);
                    j < lenA;
                    ++j
                  ) {
                    cov_1m41fbe05k.s[55]++;
                    obj = addType(value[j], obj, func);
                  }
                } else {
                  cov_1m41fbe05k.b[19][1]++;
                  cov_1m41fbe05k.s[56]++;
                  obj = addType(value, obj, func);
                }
              }
              cov_1m41fbe05k.s[57]++;
              return obj;
            };

            // validateParameters() helper functions:
            // lookupParamDoc() for querying data.json
            cov_1m41fbe05k.s[58]++;
            var lookupParamDoc = function lookupParamDoc(func) {
              cov_1m41fbe05k.f[4]++;
              // look for the docs in the `data.json` datastructure

              var ichDot = (cov_1m41fbe05k.s[59]++, func.lastIndexOf('.'));
              var funcName = (cov_1m41fbe05k.s[60]++, func.substr(ichDot + 1));
              var funcClass = (cov_1m41fbe05k.s[61]++,
              (cov_1m41fbe05k.b[21][0]++, func.substr(0, ichDot)) ||
                (cov_1m41fbe05k.b[21][1]++, 'p5'));

              var classitems = (cov_1m41fbe05k.s[62]++, arrDoc);
              var queryResult = (cov_1m41fbe05k.s[63]++, classitems[funcClass][funcName]);

              // different JSON structure for funct with multi-format
              var overloads = (cov_1m41fbe05k.s[64]++, []);
              cov_1m41fbe05k.s[65]++;
              if (queryResult.hasOwnProperty('overloads')) {
                cov_1m41fbe05k.b[22][0]++;
                cov_1m41fbe05k.s[66]++;
                // add all the overloads
                for (
                  var i = (cov_1m41fbe05k.s[67]++, 0);
                  i < queryResult.overloads.length;
                  i++
                ) {
                  cov_1m41fbe05k.s[68]++;
                  overloads.push({ formats: queryResult.overloads[i].params });
                }
              } else {
                cov_1m41fbe05k.b[22][1]++;
                cov_1m41fbe05k.s[69]++;
                // no overloads, just add the main method definition
                overloads.push({
                  formats:
                    (cov_1m41fbe05k.b[23][0]++, queryResult.params) ||
                    (cov_1m41fbe05k.b[23][1]++, [])
                });
              }

              // parse the parameter types for each overload
              var mapConstants = (cov_1m41fbe05k.s[70]++, {});
              var maxParams = (cov_1m41fbe05k.s[71]++, 0);
              cov_1m41fbe05k.s[72]++;
              overloads.forEach(function(overload) {
                cov_1m41fbe05k.f[5]++;
                var formats = (cov_1m41fbe05k.s[73]++, overload.formats);

                // keep a record of the maximum number of arguments
                // this method requires.
                cov_1m41fbe05k.s[74]++;
                if (maxParams < formats.length) {
                  cov_1m41fbe05k.b[24][0]++;
                  cov_1m41fbe05k.s[75]++;
                  maxParams = formats.length;
                } else {
                  cov_1m41fbe05k.b[24][1]++;
                }

                // calculate the minimum number of arguments
                // this overload requires.
                var minParams = (cov_1m41fbe05k.s[76]++, formats.length);
                cov_1m41fbe05k.s[77]++;
                while (
                  (cov_1m41fbe05k.b[25][0]++, minParams > 0) &&
                  (cov_1m41fbe05k.b[25][1]++, formats[minParams - 1].optional)
                ) {
                  cov_1m41fbe05k.s[78]++;
                  minParams--;
                }
                cov_1m41fbe05k.s[79]++;
                overload.minParams = minParams;

                // loop through each parameter position, and parse its types
                cov_1m41fbe05k.s[80]++;
                formats.forEach(function(format) {
                  cov_1m41fbe05k.f[6]++;
                  cov_1m41fbe05k.s[81]++;
                  // split this parameter's types
                  format.types = format.type.split('|').map(function ct(type) {
                    cov_1m41fbe05k.f[7]++;
                    cov_1m41fbe05k.s[82]++;
                    // array
                    if (type.substr(type.length - 2, 2) === '[]') {
                      cov_1m41fbe05k.b[26][0]++;
                      cov_1m41fbe05k.s[83]++;
                      return {
                        name: type,
                        array: ct(type.substr(0, type.length - 2))
                      };
                    } else {
                      cov_1m41fbe05k.b[26][1]++;
                    }

                    var lowerType = (cov_1m41fbe05k.s[84]++, type.toLowerCase());

                    // contant
                    cov_1m41fbe05k.s[85]++;
                    if (lowerType === 'constant') {
                      cov_1m41fbe05k.b[27][0]++;
                      var constant;
                      cov_1m41fbe05k.s[86]++;
                      if (mapConstants.hasOwnProperty(format.name)) {
                        cov_1m41fbe05k.b[28][0]++;
                        cov_1m41fbe05k.s[87]++;
                        constant = mapConstants[format.name];
                      } else {
                        cov_1m41fbe05k.b[28][1]++;
                        // parse possible constant values from description
                        var myRe = (cov_1m41fbe05k.s[88]++,
                        /either\s+(?:[A-Z0-9_]+\s*,?\s*(?:or)?\s*)+/g);
                        var values = (cov_1m41fbe05k.s[89]++, {});
                        var names = (cov_1m41fbe05k.s[90]++, []);
                        cov_1m41fbe05k.s[91]++;

                        constant = mapConstants[format.name] = {
                          values: values,
                          names: names
                        };

                        var myArray = (cov_1m41fbe05k.s[92]++,
                        myRe.exec(format.description));
                        cov_1m41fbe05k.s[93]++;
                        if (
                          (cov_1m41fbe05k.b[30][0]++, func === 'endShape') &&
                          (cov_1m41fbe05k.b[30][1]++, format.name === 'mode')
                        ) {
                          cov_1m41fbe05k.b[29][0]++;
                          cov_1m41fbe05k.s[94]++;
                          values[constants.CLOSE] = true;
                          cov_1m41fbe05k.s[95]++;
                          names.push('CLOSE');
                        } else {
                          cov_1m41fbe05k.b[29][1]++;
                          var match = (cov_1m41fbe05k.s[96]++, myArray[0]);
                          var reConst = (cov_1m41fbe05k.s[97]++, /[A-Z0-9_]+/g);
                          var matchConst;
                          cov_1m41fbe05k.s[98]++;
                          while ((matchConst = reConst.exec(match)) !== null) {
                            var name = (cov_1m41fbe05k.s[99]++, matchConst[0]);
                            cov_1m41fbe05k.s[100]++;
                            if (constants.hasOwnProperty(name)) {
                              cov_1m41fbe05k.b[31][0]++;
                              cov_1m41fbe05k.s[101]++;
                              values[constants[name]] = true;
                              cov_1m41fbe05k.s[102]++;
                              names.push(name);
                            } else {
                              cov_1m41fbe05k.b[31][1]++;
                            }
                          }
                        }
                      }
                      cov_1m41fbe05k.s[103]++;
                      return {
                        name: type,
                        builtin: lowerType,
                        names: constant.names,
                        values: constant.values
                      };
                    } else {
                      cov_1m41fbe05k.b[27][1]++;
                    }

                    // function
                    cov_1m41fbe05k.s[104]++;
                    if (lowerType.substr(0, 'function'.length) === 'function') {
                      cov_1m41fbe05k.b[32][0]++;
                      cov_1m41fbe05k.s[105]++;
                      lowerType = 'function';
                    } else {
                      cov_1m41fbe05k.b[32][1]++;
                    }
                    // builtin
                    cov_1m41fbe05k.s[106]++;
                    if (builtinTypes.has(lowerType)) {
                      cov_1m41fbe05k.b[33][0]++;
                      cov_1m41fbe05k.s[107]++;
                      return { name: type, builtin: lowerType };
                    } else {
                      cov_1m41fbe05k.b[33][1]++;
                    }

                    // find type's prototype
                    var t = (cov_1m41fbe05k.s[108]++, window);
                    var typeParts = (cov_1m41fbe05k.s[109]++, type.split('.'));

                    // special-case 'p5' since it may be non-global
                    cov_1m41fbe05k.s[110]++;
                    if (typeParts[0] === 'p5') {
                      cov_1m41fbe05k.b[34][0]++;
                      cov_1m41fbe05k.s[111]++;
                      t = _main.default;
                      cov_1m41fbe05k.s[112]++;
                      typeParts.shift();
                    } else {
                      cov_1m41fbe05k.b[34][1]++;
                    }
                    cov_1m41fbe05k.s[113]++;

                    typeParts.forEach(function(p) {
                      cov_1m41fbe05k.f[8]++;
                      cov_1m41fbe05k.s[114]++;
                      t =
                        (cov_1m41fbe05k.b[35][0]++, t) && (cov_1m41fbe05k.b[35][1]++, t[p]);
                    });
                    cov_1m41fbe05k.s[115]++;
                    if (t) {
                      cov_1m41fbe05k.b[36][0]++;
                      cov_1m41fbe05k.s[116]++;
                      return { name: type, prototype: t };
                    } else {
                      cov_1m41fbe05k.b[36][1]++;
                    }
                    cov_1m41fbe05k.s[117]++;

                    return { name: type, type: lowerType };
                  });
                });
              });
              cov_1m41fbe05k.s[118]++;
              return {
                overloads: overloads,
                maxParams: maxParams
              };
            };
            cov_1m41fbe05k.s[119]++;

            var isNumber = function isNumber(param) {
              cov_1m41fbe05k.f[9]++;
              cov_1m41fbe05k.s[120]++;
              switch (_typeof(param)) {
                case 'number':
                  cov_1m41fbe05k.b[37][0]++;
                  cov_1m41fbe05k.s[121]++;
                  return true;
                case 'string':
                  cov_1m41fbe05k.b[37][1]++;
                  cov_1m41fbe05k.s[122]++;
                  return !isNaN(param);
                default:
                  cov_1m41fbe05k.b[37][2]++;
                  cov_1m41fbe05k.s[123]++;
                  return false;
              }
            };
            cov_1m41fbe05k.s[124]++;

            var testParamType = function testParamType(param, type) {
              cov_1m41fbe05k.f[10]++;
              var isArray = (cov_1m41fbe05k.s[125]++, param instanceof Array);
              var matches = (cov_1m41fbe05k.s[126]++, true);
              cov_1m41fbe05k.s[127]++;
              if (
                (cov_1m41fbe05k.b[39][0]++, type.array) &&
                (cov_1m41fbe05k.b[39][1]++, isArray)
              ) {
                cov_1m41fbe05k.b[38][0]++;
                cov_1m41fbe05k.s[128]++;
                for (var i = (cov_1m41fbe05k.s[129]++, 0); i < param.length; i++) {
                  var error = (cov_1m41fbe05k.s[130]++,
                  testParamType(param[i], type.array));
                  cov_1m41fbe05k.s[131]++;
                  if (error) {
                    cov_1m41fbe05k.b[40][0]++;
                    cov_1m41fbe05k.s[132]++;
                    return error / 2;
                  } else {
                    cov_1m41fbe05k.b[40][1]++;
                  } // half error for elements
                }
              } else {
                cov_1m41fbe05k.b[38][1]++;
                cov_1m41fbe05k.s[133]++;
                if (type.prototype) {
                  cov_1m41fbe05k.b[41][0]++;
                  cov_1m41fbe05k.s[134]++;
                  matches = param instanceof type.prototype;
                } else {
                  cov_1m41fbe05k.b[41][1]++;
                  cov_1m41fbe05k.s[135]++;
                  if (type.builtin) {
                    cov_1m41fbe05k.b[42][0]++;
                    cov_1m41fbe05k.s[136]++;
                    switch (type.builtin) {
                      case 'number':
                        cov_1m41fbe05k.b[43][0]++;
                        cov_1m41fbe05k.s[137]++;
                        matches = isNumber(param);
                        cov_1m41fbe05k.s[138]++;
                        break;
                      case 'integer':
                        cov_1m41fbe05k.b[43][1]++;
                        cov_1m41fbe05k.s[139]++;
                        matches =
                          (cov_1m41fbe05k.b[44][0]++, isNumber(param)) &&
                          (cov_1m41fbe05k.b[44][1]++, Number(param) === Math.floor(param));
                        cov_1m41fbe05k.s[140]++;
                        break;
                      case 'boolean':
                        cov_1m41fbe05k.b[43][2]++;
                      case 'any':
                        cov_1m41fbe05k.b[43][3]++;
                        cov_1m41fbe05k.s[141]++;
                        matches = true;
                        cov_1m41fbe05k.s[142]++;
                        break;
                      case 'array':
                        cov_1m41fbe05k.b[43][4]++;
                        cov_1m41fbe05k.s[143]++;
                        matches = isArray;
                        cov_1m41fbe05k.s[144]++;
                        break;
                      case 'string':
                        cov_1m41fbe05k.b[43][5]++;
                        cov_1m41fbe05k.s[145]++;
                        matches =
                          /*typeof param === 'number' ||*/ typeof param === 'string';
                        cov_1m41fbe05k.s[146]++;
                        break;
                      case 'constant':
                        cov_1m41fbe05k.b[43][6]++;
                        cov_1m41fbe05k.s[147]++;
                        matches = type.values.hasOwnProperty(param);
                        cov_1m41fbe05k.s[148]++;
                        break;
                      case 'function':
                        cov_1m41fbe05k.b[43][7]++;
                        cov_1m41fbe05k.s[149]++;
                        matches = param instanceof Function;
                        cov_1m41fbe05k.s[150]++;
                        break;
                      case 'null':
                        cov_1m41fbe05k.b[43][8]++;
                        cov_1m41fbe05k.s[151]++;
                        matches = param === null;
                        cov_1m41fbe05k.s[152]++;
                        break;
                    }
                  } else {
                    cov_1m41fbe05k.b[42][1]++;
                    cov_1m41fbe05k.s[153]++;
                    matches = _typeof(param) === type.t;
                  }
                }
              }
              cov_1m41fbe05k.s[154]++;
              return matches
                ? (cov_1m41fbe05k.b[45][0]++, 0)
                : (cov_1m41fbe05k.b[45][1]++, 1);
            };

            // testType() for non-object type parameter validation
            cov_1m41fbe05k.s[155]++;
            var testParamTypes = function testParamTypes(param, types) {
              cov_1m41fbe05k.f[11]++;
              var minScore = (cov_1m41fbe05k.s[156]++, 9999);
              cov_1m41fbe05k.s[157]++;
              for (
                var i = (cov_1m41fbe05k.s[158]++, 0);
                (cov_1m41fbe05k.b[46][0]++, minScore > 0) &&
                (cov_1m41fbe05k.b[46][1]++, i < types.length);
                i++
              ) {
                var score = (cov_1m41fbe05k.s[159]++, testParamType(param, types[i]));
                cov_1m41fbe05k.s[160]++;
                if (minScore > score) {
                  cov_1m41fbe05k.b[47][0]++;
                  cov_1m41fbe05k.s[161]++;
                  minScore = score;
                } else {
                  cov_1m41fbe05k.b[47][1]++;
                }
              }
              cov_1m41fbe05k.s[162]++;
              return minScore;
            };

            // generate a score (higher is worse) for applying these args to
            // this overload.
            cov_1m41fbe05k.s[163]++;
            var scoreOverload = function scoreOverload(args, argCount, overload, minScore) {
              cov_1m41fbe05k.f[12]++;
              var score = (cov_1m41fbe05k.s[164]++, 0);
              var formats = (cov_1m41fbe05k.s[165]++, overload.formats);
              var minParams = (cov_1m41fbe05k.s[166]++, overload.minParams);

              // check for too few/many args
              // the score is double number of extra/missing args
              cov_1m41fbe05k.s[167]++;
              if (argCount < minParams) {
                cov_1m41fbe05k.b[48][0]++;
                cov_1m41fbe05k.s[168]++;
                score = (minParams - argCount) * 2;
              } else {
                cov_1m41fbe05k.b[48][1]++;
                cov_1m41fbe05k.s[169]++;
                if (argCount > formats.length) {
                  cov_1m41fbe05k.b[49][0]++;
                  cov_1m41fbe05k.s[170]++;
                  score = (argCount - formats.length) * 2;
                } else {
                  cov_1m41fbe05k.b[49][1]++;
                }
              }

              // loop through the formats, adding up the error score for each arg.
              // quit early if the score gets higher than the previous best overload.
              cov_1m41fbe05k.s[171]++;
              for (
                var p = (cov_1m41fbe05k.s[172]++, 0);
                (cov_1m41fbe05k.b[50][0]++, score <= minScore) &&
                (cov_1m41fbe05k.b[50][1]++, p < formats.length);
                p++
              ) {
                var arg = (cov_1m41fbe05k.s[173]++, args[p]);
                var format = (cov_1m41fbe05k.s[174]++, formats[p]);
                // '== null' checks for 'null' and typeof 'undefined'
                cov_1m41fbe05k.s[175]++;
                if (arg == null) {
                  cov_1m41fbe05k.b[51][0]++;
                  cov_1m41fbe05k.s[176]++;
                  // handle undefined args
                  if (
                    (cov_1m41fbe05k.b[53][0]++, !format.optional) ||
                    (cov_1m41fbe05k.b[53][1]++, p < minParams) ||
                    (cov_1m41fbe05k.b[53][2]++, p < argCount)
                  ) {
                    cov_1m41fbe05k.b[52][0]++;
                    cov_1m41fbe05k.s[177]++;
                    score += 1;
                  } else {
                    cov_1m41fbe05k.b[52][1]++;
                  }
                } else {
                  cov_1m41fbe05k.b[51][1]++;
                  cov_1m41fbe05k.s[178]++;
                  score += testParamTypes(arg, format.types);
                }
              }
              cov_1m41fbe05k.s[179]++;
              return score;
            };

            // gets a list of errors for this overload
            cov_1m41fbe05k.s[180]++;
            var getOverloadErrors = function getOverloadErrors(args, argCount, overload) {
              cov_1m41fbe05k.f[13]++;
              var formats = (cov_1m41fbe05k.s[181]++, overload.formats);
              var minParams = (cov_1m41fbe05k.s[182]++, overload.minParams);

              // check for too few/many args
              cov_1m41fbe05k.s[183]++;
              if (argCount < minParams) {
                cov_1m41fbe05k.b[54][0]++;
                cov_1m41fbe05k.s[184]++;
                return [
                  {
                    type: 'TOO_FEW_ARGUMENTS',
                    argCount: argCount,
                    minParams: minParams
                  }
                ];
              } else {
                cov_1m41fbe05k.b[54][1]++;
                cov_1m41fbe05k.s[185]++;
                if (argCount > formats.length) {
                  cov_1m41fbe05k.b[55][0]++;
                  cov_1m41fbe05k.s[186]++;
                  return [
                    {
                      type: 'TOO_MANY_ARGUMENTS',
                      argCount: argCount,
                      maxParams: formats.length
                    }
                  ];
                } else {
                  cov_1m41fbe05k.b[55][1]++;
                }
              }

              var errorArray = (cov_1m41fbe05k.s[187]++, []);
              cov_1m41fbe05k.s[188]++;
              for (var p = (cov_1m41fbe05k.s[189]++, 0); p < formats.length; p++) {
                var arg = (cov_1m41fbe05k.s[190]++, args[p]);
                var format = (cov_1m41fbe05k.s[191]++, formats[p]);
                // '== null' checks for 'null' and typeof 'undefined'
                cov_1m41fbe05k.s[192]++;
                if (arg == null) {
                  cov_1m41fbe05k.b[56][0]++;
                  cov_1m41fbe05k.s[193]++;
                  // handle undefined args
                  if (
                    (cov_1m41fbe05k.b[58][0]++, !format.optional) ||
                    (cov_1m41fbe05k.b[58][1]++, p < minParams) ||
                    (cov_1m41fbe05k.b[58][2]++, p < argCount)
                  ) {
                    cov_1m41fbe05k.b[57][0]++;
                    cov_1m41fbe05k.s[194]++;
                    errorArray.push({
                      type: 'EMPTY_VAR',
                      position: p,
                      format: format
                    });
                  } else {
                    cov_1m41fbe05k.b[57][1]++;
                  }
                } else {
                  cov_1m41fbe05k.b[56][1]++;
                  cov_1m41fbe05k.s[195]++;
                  if (testParamTypes(arg, format.types) > 0) {
                    cov_1m41fbe05k.b[59][0]++;
                    cov_1m41fbe05k.s[196]++;
                    errorArray.push({
                      type: 'WRONG_TYPE',
                      position: p,
                      format: format,
                      arg: arg
                    });
                  } else {
                    cov_1m41fbe05k.b[59][1]++;
                  }
                }
              }
              cov_1m41fbe05k.s[197]++;

              return errorArray;
            };

            // a custom error type, used by the mocha
            // tests when expecting validation errors
            cov_1m41fbe05k.s[198]++;
            _main.default.ValidationError = (function(name) {
              cov_1m41fbe05k.f[14]++;
              var err = /*#__PURE__*/ (function(_Error) {
                _inherits(err, _Error);
                var _super = _createSuper(err);
                function err(message, func, type) {
                  var _this;
                  _classCallCheck(this, err);
                  cov_1m41fbe05k.f[15]++;
                  cov_1m41fbe05k.s[199]++;
                  _this = _super.call(this);
                  cov_1m41fbe05k.s[200]++;
                  _this.message = message;
                  cov_1m41fbe05k.s[201]++;
                  _this.func = func;
                  cov_1m41fbe05k.s[202]++;
                  _this.type = type;
                  cov_1m41fbe05k.s[203]++;
                  if ('captureStackTrace' in Error) {
                    cov_1m41fbe05k.b[60][0]++;
                    cov_1m41fbe05k.s[204]++;
                    Error.captureStackTrace(_assertThisInitialized(_this), err);
                  } else {
                    cov_1m41fbe05k.b[60][1]++;
                    cov_1m41fbe05k.s[205]++;
                    _this.stack = new Error().stack;
                  }
                  return _this;
                }
                return err;
              })(/*#__PURE__*/ _wrapNativeSuper(Error));
              cov_1m41fbe05k.s[206]++;

              err.prototype.name = name;
              cov_1m41fbe05k.s[207]++;
              return err;
            })('ValidationError');

            // function for generating console.log() msg
            cov_1m41fbe05k.s[208]++;
            _main.default._friendlyParamError = function(errorObj, func) {
              cov_1m41fbe05k.f[16]++;
              var message;
              var translationObj;

              function formatType() {
                cov_1m41fbe05k.f[17]++;
                var format = (cov_1m41fbe05k.s[209]++, errorObj.format);
                cov_1m41fbe05k.s[210]++;
                return format.types
                  .map(function(type) {
                    cov_1m41fbe05k.f[18]++;
                    cov_1m41fbe05k.s[211]++;
                    return type.names
                      ? (cov_1m41fbe05k.b[61][0]++, type.names.join('|'))
                      : (cov_1m41fbe05k.b[61][1]++, type.name);
                  })
                  .join('|');
              }
              cov_1m41fbe05k.s[212]++;

              switch (errorObj.type) {
                case 'EMPTY_VAR':
                  cov_1m41fbe05k.b[62][0]++;
                  {
                    cov_1m41fbe05k.s[213]++;
                    translationObj = {
                      func: func,
                      formatType: formatType(),
                      // It needs to be this way for i18next-extract to work. The comment
                      // specifies the values that the context can take so that it can
                      // statically prepare the translation files with them.
                      /* i18next-extract-mark-context-next-line ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"] */
                      position: (0, _internationalization.translator)('fes.positions.p', {
                        context: (errorObj.position + 1).toString(),
                        defaultValue: (errorObj.position + 1).toString()
                      }),

                      link: '[https://p5js.org/examples/data-variable-scope.html]'
                    };
                    cov_1m41fbe05k.s[214]++;

                    break;
                  }
                case 'WRONG_TYPE':
                  cov_1m41fbe05k.b[62][1]++;
                  {
                    var arg = (cov_1m41fbe05k.s[215]++, errorObj.arg);
                    var argType = (cov_1m41fbe05k.s[216]++,
                    arg instanceof Array
                      ? (cov_1m41fbe05k.b[63][0]++, 'array')
                      : (cov_1m41fbe05k.b[63][1]++,
                        arg === null
                          ? (cov_1m41fbe05k.b[64][0]++, 'null')
                          : (cov_1m41fbe05k.b[64][1]++,
                            (cov_1m41fbe05k.b[65][0]++, arg.name) ||
                              (cov_1m41fbe05k.b[65][1]++, _typeof(arg)))));
                    cov_1m41fbe05k.s[217]++;

                    translationObj = {
                      func: func,
                      formatType: formatType(),
                      argType: argType,
                      /* i18next-extract-mark-context-next-line ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"] */
                      position: (0, _internationalization.translator)('fes.positions.p', {
                        context: (errorObj.position + 1).toString(),
                        defaultValue: (errorObj.position + 1).toString()
                      })
                    };
                    cov_1m41fbe05k.s[218]++;

                    break;
                  }
                case 'TOO_FEW_ARGUMENTS':
                  cov_1m41fbe05k.b[62][2]++;
                  {
                    cov_1m41fbe05k.s[219]++;
                    translationObj = {
                      func: func,
                      minParams: errorObj.minParams,
                      argCount: errorObj.argCount
                    };
                    cov_1m41fbe05k.s[220]++;

                    break;
                  }
                case 'TOO_MANY_ARGUMENTS':
                  cov_1m41fbe05k.b[62][3]++;
                  {
                    cov_1m41fbe05k.s[221]++;
                    translationObj = {
                      func: func,
                      maxParams: errorObj.maxParams,
                      argCount: errorObj.argCount
                    };
                    cov_1m41fbe05k.s[222]++;

                    break;
                  }
              }
              cov_1m41fbe05k.s[223]++;

              if (translationObj) {
                cov_1m41fbe05k.b[66][0]++;
                cov_1m41fbe05k.s[224]++;
                try {
                  // const re = /Function\.validateParameters.*[\r\n].*[\r\n].*\(([^)]*)/;
                  var myError = (cov_1m41fbe05k.s[225]++, new Error());
                  var parsed = (cov_1m41fbe05k.s[226]++,
                  _main.default._getErrorStackParser().parse(myError));
                  cov_1m41fbe05k.s[227]++;
                  if (
                    (cov_1m41fbe05k.b[68][0]++, parsed[3]) &&
                    (cov_1m41fbe05k.b[68][1]++, parsed[3].functionName) &&
                    (cov_1m41fbe05k.b[68][2]++, parsed[3].functionName.includes('.')) &&
                    (cov_1m41fbe05k.b[68][3]++,
                    _main.default.prototype[parsed[3].functionName.split('.').slice(-1)[0]])
                  ) {
                    cov_1m41fbe05k.b[67][0]++;
                    cov_1m41fbe05k.s[228]++;
                    return;
                  } else {
                    cov_1m41fbe05k.b[67][1]++;
                  }
                  cov_1m41fbe05k.s[229]++;
                  if (_main.default._throwValidationErrors) {
                    cov_1m41fbe05k.b[69][0]++;
                    cov_1m41fbe05k.s[230]++;
                    throw new _main.default.ValidationError(message, func, errorObj.type);
                  } else {
                    cov_1m41fbe05k.b[69][1]++;
                  }

                  // try to extract the location from where the function was called
                  cov_1m41fbe05k.s[231]++;
                  if (
                    (cov_1m41fbe05k.b[71][0]++, parsed[3]) &&
                    (cov_1m41fbe05k.b[71][1]++, parsed[3].fileName) &&
                    (cov_1m41fbe05k.b[71][2]++, parsed[3].lineNumber) &&
                    (cov_1m41fbe05k.b[71][3]++, parsed[3].columnNumber)
                  ) {
                    cov_1m41fbe05k.b[70][0]++;
                    var location = (cov_1m41fbe05k.s[232]++,
                    ''
                      .concat(parsed[3].fileName, ':')
                      .concat(parsed[3].lineNumber, ':')
                      .concat(parsed[3].columnNumber));
                    cov_1m41fbe05k.s[233]++;

                    translationObj.location = (0, _internationalization.translator)(
                      'fes.location',
                      {
                        location: location,
                        // for e.g. get "sketch.js" from "https://example.com/abc/sketch.js"
                        file: parsed[3].fileName.split('/').slice(-1),
                        line: parsed[3].lineNumber
                      }
                    );

                    // tell fesErrorMonitor that we have already given a friendly message
                    // for this line, so it need not to do the same in case of an error
                    cov_1m41fbe05k.s[234]++;
                    _main.default._fesLogCache[location] = true;
                  } else {
                    cov_1m41fbe05k.b[70][1]++;
                  }
                } catch (err) {
                  cov_1m41fbe05k.s[235]++;
                  if (err instanceof _main.default.ValidationError) {
                    cov_1m41fbe05k.b[72][0]++;
                    cov_1m41fbe05k.s[236]++;
                    throw err;
                  } else {
                    cov_1m41fbe05k.b[72][1]++;
                  }
                }
                cov_1m41fbe05k.s[237]++;

                translationObj.context = errorObj.type;
                // i18next-extract-mark-context-next-line ["EMPTY_VAR", "TOO_MANY_ARGUMENTS", "TOO_FEW_ARGUMENTS", "WRONG_TYPE"]
                cov_1m41fbe05k.s[238]++;
                message = (0, _internationalization.translator)(
                  'fes.friendlyParamError.type',
                  translationObj
                );
                cov_1m41fbe05k.s[239]++;

                _main.default._friendlyError(''.concat(message, '.'), func, 3);
              } else {
                cov_1m41fbe05k.b[66][1]++;
              }
            };

            // if a function is called with some set of wrong arguments, and then called
            // again with the same set of arguments, the messages due to the second call
            // will be supressed. If two tests test on the same wrong arguments, the
            // second test won't see the validationError. clearing argumentTree solves it
            cov_1m41fbe05k.s[240]++;
            _main.default._clearValidateParamsCache = function clearValidateParamsCache() {
              cov_1m41fbe05k.f[19]++;
              cov_1m41fbe05k.s[241]++;
              for (
                var _i2 = 0, _Object$keys2 = Object.keys(argumentTree);
                _i2 < _Object$keys2.length;
                _i2++
              ) {
                var _key4 = _Object$keys2[_i2];
                cov_1m41fbe05k.s[242]++;
                delete argumentTree[_key4];
              }
            };

            // allowing access to argumentTree for testing
            cov_1m41fbe05k.s[243]++;
            _main.default._getValidateParamsArgTree = function getValidateParamsArgTree() {
              cov_1m41fbe05k.f[20]++;
              cov_1m41fbe05k.s[244]++;
              return argumentTree;
            };

            /**
             * Validates parameters
             * param  {String}               func    the name of the function
             * param  {Array}                args    user input arguments
             *
             * example:
             *  const a;
             *  ellipse(10,10,a,5);
             * console ouput:
             *  "It looks like ellipse received an empty variable in spot #2."
             *
             * example:
             *  ellipse(10,"foo",5,5);
             * console output:
             *  "ellipse was expecting a number for parameter #1,
             *           received "foo" instead."
             */ cov_1m41fbe05k.s[245]++;
            _main.default._validateParameters = function validateParameters(func, args) {
              cov_1m41fbe05k.f[21]++;
              cov_1m41fbe05k.s[246]++;
              if (_main.default.disableFriendlyErrors) {
                cov_1m41fbe05k.b[73][0]++;
                cov_1m41fbe05k.s[247]++;
                return; // skip FES
              } else {
                cov_1m41fbe05k.b[73][1]++;
              }

              // query / build the argument type tree and check if this sequence
              // has already been seen before.
              var obj = (cov_1m41fbe05k.s[248]++, buildArgTypeCache(func, args));
              cov_1m41fbe05k.s[249]++;
              if (obj.seen) {
                cov_1m41fbe05k.b[74][0]++;
                cov_1m41fbe05k.s[250]++;
                return;
              } else {
                cov_1m41fbe05k.b[74][1]++;
              }
              // mark this sequence as seen
              cov_1m41fbe05k.s[251]++;
              obj.seen = true;
              // lookup the docs in the 'data.json' file
              var docs = (cov_1m41fbe05k.s[252]++,
              (cov_1m41fbe05k.b[75][0]++, docCache[func]) ||
                (cov_1m41fbe05k.b[75][1]++, (docCache[func] = lookupParamDoc(func))));
              var overloads = (cov_1m41fbe05k.s[253]++, docs.overloads);

              var argCount = (cov_1m41fbe05k.s[254]++, args.length);

              // the following line ignores trailing undefined arguments, commenting
              // it to resolve https://github.com/processing/p5.js/issues/4571
              // '== null' checks for 'null' and typeof 'undefined'
              // while (argCount > 0 && args[argCount - 1] == null) argCount--;

              // find the overload with the best score
              var minScore = (cov_1m41fbe05k.s[255]++, 99999);
              var minOverload;
              cov_1m41fbe05k.s[256]++;
              for (var i = (cov_1m41fbe05k.s[257]++, 0); i < overloads.length; i++) {
                var score = (cov_1m41fbe05k.s[258]++,
                scoreOverload(args, argCount, overloads[i], minScore));
                cov_1m41fbe05k.s[259]++;
                if (score === 0) {
                  cov_1m41fbe05k.b[76][0]++;
                  cov_1m41fbe05k.s[260]++;
                  return; // done!
                } else {
                  cov_1m41fbe05k.b[76][1]++;
                  cov_1m41fbe05k.s[261]++;
                  if (minScore > score) {
                    cov_1m41fbe05k.b[77][0]++;
                    cov_1m41fbe05k.s[262]++;
                    // this score is better that what we have so far...
                    minScore = score;
                    cov_1m41fbe05k.s[263]++;
                    minOverload = i;
                  } else {
                    cov_1m41fbe05k.b[77][1]++;
                  }
                }
              }

              // this should _always_ be true here...
              cov_1m41fbe05k.s[264]++;
              if (minScore > 0) {
                cov_1m41fbe05k.b[78][0]++;
                // get the errors for the best overload
                var errorArray = (cov_1m41fbe05k.s[265]++,
                getOverloadErrors(args, argCount, overloads[minOverload]));

                // generate err msg
                cov_1m41fbe05k.s[266]++;
                for (var n = (cov_1m41fbe05k.s[267]++, 0); n < errorArray.length; n++) {
                  cov_1m41fbe05k.s[268]++;
                  _main.default._friendlyParamError(errorArray[n], func);
                }
              } else {
                cov_1m41fbe05k.b[78][1]++;
              }
            };
            cov_1m41fbe05k.s[269]++;
            _main.default.prototype._validateParameters = _main.default.validateParameters;
          }
          var _default = _main.default;
          exports.default = _default;
        },
        {
          '../../../docs/parameterData.json': 1,
          '../constants': 272,
          '../internationalization': 281,
          '../main': 283,
          'core-js/modules/es.array.concat': 166,
          'core-js/modules/es.array.for-each': 170,
          'core-js/modules/es.array.includes': 172,
          'core-js/modules/es.array.index-of': 173,
          'core-js/modules/es.array.iterator': 174,
          'core-js/modules/es.array.join': 175,
          'core-js/modules/es.array.last-index-of': 176,
          'core-js/modules/es.array.map': 177,
          'core-js/modules/es.array.slice': 178,
          'core-js/modules/es.function.name': 181,
          'core-js/modules/es.map': 182,
          'core-js/modules/es.number.constructor': 185,
          'core-js/modules/es.object.get-prototype-of': 190,
          'core-js/modules/es.object.keys': 191,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.reflect.construct': 194,
          'core-js/modules/es.regexp.exec': 196,
          'core-js/modules/es.regexp.to-string': 197,
          'core-js/modules/es.set': 198,
          'core-js/modules/es.string.includes': 200,
          'core-js/modules/es.string.iterator': 201,
          'core-js/modules/es.string.split': 206,
          'core-js/modules/es.symbol': 211,
          'core-js/modules/es.symbol.description': 209,
          'core-js/modules/es.symbol.iterator': 210,
          'core-js/modules/web.dom-collections.for-each': 243,
          'core-js/modules/web.dom-collections.iterator': 244
        }
      ],
      279: [
        function(_dereq_, module, exports) {
          'use strict';
          function _typeof(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof = function _typeof(obj) {
                return typeof obj;
              };
            } else {
              _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof(obj);
          }
          var cov_10y29i7vnz = (function() {
            var path = '/Users/outofambit/src/p5.js/src/core/helpers.js';
            var hash = 'b4e0537f20223eff5f45ba43311aaa95381a40ca';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/core/helpers.js',
              statementMap: {
                '0': { start: { line: 8, column: 2 }, end: { line: 16, column: 3 } },
                '1': { start: { line: 9, column: 4 }, end: { line: 9, column: 38 } },
                '2': { start: { line: 10, column: 9 }, end: { line: 16, column: 3 } },
                '3': { start: { line: 11, column: 4 }, end: { line: 11, column: 46 } },
                '4': { start: { line: 12, column: 9 }, end: { line: 16, column: 3 } },
                '5': { start: { line: 13, column: 4 }, end: { line: 13, column: 54 } },
                '6': { start: { line: 14, column: 9 }, end: { line: 16, column: 3 } },
                '7': { start: { line: 15, column: 4 }, end: { line: 15, column: 58 } }
              },
              fnMap: {
                '0': {
                  name: 'modeAdjust',
                  decl: { start: { line: 7, column: 9 }, end: { line: 7, column: 19 } },
                  loc: { start: { line: 7, column: 38 }, end: { line: 17, column: 1 } },
                  line: 7
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 8, column: 2 }, end: { line: 16, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 8, column: 2 }, end: { line: 16, column: 3 } },
                    { start: { line: 8, column: 2 }, end: { line: 16, column: 3 } }
                  ],
                  line: 8
                },
                '1': {
                  loc: { start: { line: 10, column: 9 }, end: { line: 16, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 10, column: 9 }, end: { line: 16, column: 3 } },
                    { start: { line: 10, column: 9 }, end: { line: 16, column: 3 } }
                  ],
                  line: 10
                },
                '2': {
                  loc: { start: { line: 12, column: 9 }, end: { line: 16, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 12, column: 9 }, end: { line: 16, column: 3 } },
                    { start: { line: 12, column: 9 }, end: { line: 16, column: 3 } }
                  ],
                  line: 12
                },
                '3': {
                  loc: { start: { line: 14, column: 9 }, end: { line: 16, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 14, column: 9 }, end: { line: 16, column: 3 } },
                    { start: { line: 14, column: 9 }, end: { line: 16, column: 3 } }
                  ],
                  line: 14
                }
              },
              s: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0 },
              f: { '0': 0 },
              b: { '0': [0, 0], '1': [0, 0], '2': [0, 0], '3': [0, 0] },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: 'b4e0537f20223eff5f45ba43311aaa95381a40ca'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var constants = _interopRequireWildcard(_dereq_('./constants'));
          function _getRequireWildcardCache() {
            if (typeof WeakMap !== 'function') return null;
            var cache = new WeakMap();
            _getRequireWildcardCache = function _getRequireWildcardCache() {
              return cache;
            };
            return cache;
          }
          function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
              return obj;
            }
            if (obj === null || (_typeof(obj) !== 'object' && typeof obj !== 'function')) {
              return { default: obj };
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
              return cache.get(obj);
            }
            var newObj = {};
            var hasPropertyDescriptor =
              Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
              if (Object.prototype.hasOwnProperty.call(obj, key)) {
                var desc = hasPropertyDescriptor
                  ? Object.getOwnPropertyDescriptor(obj, key)
                  : null;
                if (desc && (desc.get || desc.set)) {
                  Object.defineProperty(newObj, key, desc);
                } else {
                  newObj[key] = obj[key];
                }
              }
            }
            newObj.default = obj;
            if (cache) {
              cache.set(obj, newObj);
            }
            return newObj;
          }

          function modeAdjust(a, b, c, d, mode) {
            cov_10y29i7vnz.f[0]++;
            cov_10y29i7vnz.s[0]++;
            if (mode === constants.CORNER) {
              cov_10y29i7vnz.b[0][0]++;
              cov_10y29i7vnz.s[1]++;
              return { x: a, y: b, w: c, h: d };
            } else {
              cov_10y29i7vnz.b[0][1]++;
              cov_10y29i7vnz.s[2]++;
              if (mode === constants.CORNERS) {
                cov_10y29i7vnz.b[1][0]++;
                cov_10y29i7vnz.s[3]++;
                return { x: a, y: b, w: c - a, h: d - b };
              } else {
                cov_10y29i7vnz.b[1][1]++;
                cov_10y29i7vnz.s[4]++;
                if (mode === constants.RADIUS) {
                  cov_10y29i7vnz.b[2][0]++;
                  cov_10y29i7vnz.s[5]++;
                  return { x: a - c, y: b - d, w: 2 * c, h: 2 * d };
                } else {
                  cov_10y29i7vnz.b[2][1]++;
                  cov_10y29i7vnz.s[6]++;
                  if (mode === constants.CENTER) {
                    cov_10y29i7vnz.b[3][0]++;
                    cov_10y29i7vnz.s[7]++;
                    return { x: a - c * 0.5, y: b - d * 0.5, w: c, h: d };
                  } else {
                    cov_10y29i7vnz.b[3][1]++;
                  }
                }
              }
            }
          }
          var _default = { modeAdjust: modeAdjust };
          exports.default = _default;
        },
        { './constants': 272 }
      ],
      280: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_1e1k5be5pr = (function() {
            var path = '/Users/outofambit/src/p5.js/src/core/init.js';
            var hash = 'e6bc3f1319e48141f827a89a19988163d1c3a6ae';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/core/init.js',
              statementMap: {
                '0': { start: { line: 16, column: 20 }, end: { line: 38, column: 1 } },
                '1': { start: { line: 20, column: 2 }, end: { line: 25, column: 3 } },
                '2': { start: { line: 21, column: 4 }, end: { line: 23, column: 6 } },
                '3': { start: { line: 24, column: 4 }, end: { line: 24, column: 11 } },
                '4': { start: { line: 27, column: 2 }, end: { line: 37, column: 3 } },
                '5': { start: { line: 30, column: 4 }, end: { line: 36, column: 5 } },
                '6': { start: { line: 35, column: 6 }, end: { line: 35, column: 15 } },
                '7': { start: { line: 41, column: 29 }, end: { line: 51, column: 4 } },
                '8': { start: { line: 42, column: 2 }, end: { line: 51, column: 4 } },
                '9': { start: { line: 44, column: 4 }, end: { line: 50, column: 5 } },
                '10': { start: { line: 45, column: 6 }, end: { line: 45, column: 16 } },
                '11': { start: { line: 49, column: 6 }, end: { line: 49, column: 54 } },
                '12': { start: { line: 55, column: 2 }, end: { line: 55, column: 75 } },
                '13': { start: { line: 57, column: 0 }, end: { line: 57, column: 78 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 16, column: 20 }, end: { line: 16, column: 21 } },
                  loc: { start: { line: 16, column: 26 }, end: { line: 38, column: 1 } },
                  line: 16
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 41, column: 29 }, end: { line: 41, column: 30 } },
                  loc: { start: { line: 42, column: 2 }, end: { line: 51, column: 4 } },
                  line: 42
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: { start: { line: 42, column: 14 }, end: { line: 42, column: 15 } },
                  loc: { start: { line: 42, column: 35 }, end: { line: 51, column: 3 } },
                  line: 42
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 20, column: 2 }, end: { line: 25, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 20, column: 2 }, end: { line: 25, column: 3 } },
                    { start: { line: 20, column: 2 }, end: { line: 25, column: 3 } }
                  ],
                  line: 20
                },
                '1': {
                  loc: { start: { line: 27, column: 2 }, end: { line: 37, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 27, column: 2 }, end: { line: 37, column: 3 } },
                    { start: { line: 27, column: 2 }, end: { line: 37, column: 3 } }
                  ],
                  line: 27
                },
                '2': {
                  loc: { start: { line: 30, column: 4 }, end: { line: 36, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 30, column: 4 }, end: { line: 36, column: 5 } },
                    { start: { line: 30, column: 4 }, end: { line: 36, column: 5 } }
                  ],
                  line: 30
                },
                '3': {
                  loc: { start: { line: 31, column: 6 }, end: { line: 33, column: 18 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 31, column: 8 }, end: { line: 31, column: 20 } },
                    { start: { line: 31, column: 24 }, end: { line: 31, column: 58 } },
                    { start: { line: 32, column: 9 }, end: { line: 32, column: 20 } },
                    { start: { line: 32, column: 24 }, end: { line: 32, column: 57 } },
                    { start: { line: 33, column: 6 }, end: { line: 33, column: 18 } }
                  ],
                  line: 31
                },
                '4': {
                  loc: { start: { line: 44, column: 4 }, end: { line: 50, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 44, column: 4 }, end: { line: 50, column: 5 } },
                    { start: { line: 44, column: 4 }, end: { line: 50, column: 5 } }
                  ],
                  line: 44
                },
                '5': {
                  loc: { start: { line: 55, column: 2 }, end: { line: 55, column: 75 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 55, column: 39 }, end: { line: 55, column: 55 } },
                    { start: { line: 55, column: 58 }, end: { line: 55, column: 75 } }
                  ],
                  line: 55
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0
              },
              f: { '0': 0, '1': 0, '2': 0 },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0, 0, 0, 0],
                '4': [0, 0],
                '5': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: 'e6bc3f1319e48141f827a89a19988163d1c3a6ae'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.iterator');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.promise');
          _dereq_('core-js/modules/es.string.iterator');
          _dereq_('core-js/modules/web.dom-collections.iterator');
          var _main = _interopRequireDefault(_dereq_('../core/main'));
          var _internationalization = _dereq_('./internationalization');
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_1e1k5be5pr.s[0]++;

          /**
           * _globalInit
           *
           * TODO: ???
           * if sketch is on window
           * assume "global" mode
           * and instantiate p5 automatically
           * otherwise do nothing
           *
           * @private
           * @return {Undefined}
           */
          var _globalInit = function _globalInit() {
            cov_1e1k5be5pr.f[0]++;
            cov_1e1k5be5pr.s[1]++;
            // Could have been any property defined within the p5 constructor.
            // If that property is already a part of the global object,
            // this code has already run before, likely due to a duplicate import
            if (typeof window._setupDone !== 'undefined') {
              cov_1e1k5be5pr.b[0][0]++;
              cov_1e1k5be5pr.s[2]++;
              console.warn(
                'p5.js seems to have been imported multiple times. Please remove the duplicate import'
              );
              cov_1e1k5be5pr.s[3]++;

              return;
            } else {
              cov_1e1k5be5pr.b[0][1]++;
            }
            cov_1e1k5be5pr.s[4]++;

            if (!window.mocha) {
              cov_1e1k5be5pr.b[1][0]++;
              cov_1e1k5be5pr.s[5]++;
              // If there is a setup or draw function on the window
              // then instantiate p5 in "global" mode
              if (
                (((cov_1e1k5be5pr.b[3][0]++, window.setup) &&
                  (cov_1e1k5be5pr.b[3][1]++, typeof window.setup === 'function')) ||
                  ((cov_1e1k5be5pr.b[3][2]++, window.draw) &&
                    (cov_1e1k5be5pr.b[3][3]++, typeof window.draw === 'function'))) &&
                (cov_1e1k5be5pr.b[3][4]++, !_main.default.instance)
              ) {
                cov_1e1k5be5pr.b[2][0]++;
                cov_1e1k5be5pr.s[6]++;
                new _main.default();
              } else {
                cov_1e1k5be5pr.b[2][1]++;
              }
            } else {
              cov_1e1k5be5pr.b[1][1]++;
            }
          };

          // make a promise that resolves when the document is ready
          cov_1e1k5be5pr.s[7]++;
          var waitForDocumentReady = function waitForDocumentReady() {
            cov_1e1k5be5pr.f[1]++;
            cov_1e1k5be5pr.s[8]++;
            return new Promise(function(resolve, reject) {
              cov_1e1k5be5pr.f[2]++;
              cov_1e1k5be5pr.s[9]++;
              // if the page is ready, initialize p5 immediately
              if (document.readyState === 'complete') {
                cov_1e1k5be5pr.b[4][0]++;
                cov_1e1k5be5pr.s[10]++;
                resolve();
                // if the page is still loading, add an event listener
                // and initialize p5 as soon as it finishes loading
              } else {
                cov_1e1k5be5pr.b[4][1]++;
                cov_1e1k5be5pr.s[11]++;
                window.addEventListener('load', resolve, false);
              }
            });
          };

          // only load translations if we're using the full, un-minified library
          var waitingForTranslator = (cov_1e1k5be5pr.s[12]++,
          typeof IS_MINIFIED === 'undefined'
            ? (cov_1e1k5be5pr.b[5][0]++, (0, _internationalization.initialize)())
            : (cov_1e1k5be5pr.b[5][1]++, Promise.resolve()));
          cov_1e1k5be5pr.s[13]++;

          Promise.all([waitForDocumentReady(), waitingForTranslator]).then(_globalInit);
        },
        {
          '../core/main': 283,
          './internationalization': 281,
          'core-js/modules/es.array.iterator': 174,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.promise': 193,
          'core-js/modules/es.string.iterator': 201,
          'core-js/modules/web.dom-collections.iterator': 244
        }
      ],
      281: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_1xrwswf9gu = (function() {
            var path = '/Users/outofambit/src/p5.js/src/core/internationalization.js';
            var hash = '3fd26821d45e3ee8ac77f94e3dee1a11501e83ac';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/core/internationalization.js',
              statementMap: {
                '0': { start: { line: 5, column: 0 }, end: { line: 28, column: 1 } },
                '1': { start: { line: 8, column: 29 }, end: { line: 8, column: 58 } },
                '2': { start: { line: 9, column: 2 }, end: { line: 9, column: 49 } },
                '3': { start: { line: 10, column: 2 }, end: { line: 10, column: 43 } },
                '4': { start: { line: 12, column: 2 }, end: { line: 27, column: 3 } },
                '5': { start: { line: 16, column: 28 }, end: { line: 16, column: 61 } },
                '6': { start: { line: 17, column: 4 }, end: { line: 26, column: 5 } },
                '7': { start: { line: 20, column: 20 }, end: { line: 20, column: 39 } },
                '8': { start: { line: 21, column: 18 }, end: { line: 21, column: 60 } },
                '9': { start: { line: 22, column: 17 }, end: { line: 22, column: 40 } },
                '10': { start: { line: 24, column: 6 }, end: { line: 24, column: 60 } },
                '11': { start: { line: 25, column: 6 }, end: { line: 25, column: 63 } },
                '12': { start: { line: 36, column: 4 }, end: { line: 36, column: 33 } },
                '13': { start: { line: 42, column: 4 }, end: { line: 47, column: 7 } },
                '14': { start: { line: 45, column: 8 }, end: { line: 45, column: 63 } },
                '15': { start: { line: 45, column: 25 }, end: { line: 45, column: 53 } },
                '16': { start: { line: 51, column: 4 }, end: { line: 51, column: 29 } },
                '17': { start: { line: 52, column: 4 }, end: { line: 52, column: 27 } },
                '18': { start: { line: 56, column: 21 }, end: { line: 56, column: 42 } },
                '19': { start: { line: 58, column: 4 }, end: { line: 77, column: 5 } },
                '20': { start: { line: 63, column: 6 }, end: { line: 63, column: 61 } },
                '21': { start: { line: 64, column: 11 }, end: { line: 77, column: 5 } },
                '22': { start: { line: 68, column: 18 }, end: { line: 71, column: 8 } },
                '23': { start: { line: 72, column: 6 }, end: { line: 72, column: 34 } },
                '24': { start: { line: 76, column: 6 }, end: { line: 76, column: 35 } },
                '25': { start: { line: 81, column: 4 }, end: { line: 100, column: 23 } },
                '26': { start: { line: 84, column: 21 }, end: { line: 84, column: 32 } },
                '27': { start: { line: 86, column: 10 }, end: { line: 89, column: 11 } },
                '28': { start: { line: 88, column: 12 }, end: { line: 88, column: 53 } },
                '29': { start: { line: 90, column: 10 }, end: { line: 90, column: 33 } },
                '30': { start: { line: 94, column: 10 }, end: { line: 94, column: 51 } },
                '31': { start: { line: 98, column: 8 }, end: { line: 98, column: 36 } },
                '32': { start: { line: 103, column: 0 }, end: { line: 103, column: 32 } },
                '33': { start: { line: 116, column: 24 }, end: { line: 123, column: 1 } },
                '34': { start: { line: 117, column: 2 }, end: { line: 117, column: 75 } },
                '35': { start: { line: 122, column: 2 }, end: { line: 122, column: 25 } },
                '36': { start: { line: 129, column: 26 }, end: { line: 169, column: 1 } },
                '37': { start: { line: 130, column: 16 }, end: { line: 163, column: 5 } },
                '38': { start: { line: 160, column: 8 }, end: { line: 160, column: 33 } },
                '39': { start: { line: 162, column: 11 }, end: { line: 162, column: 62 } },
                '40': { start: { line: 168, column: 2 }, end: { line: 168, column: 17 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 35, column: 2 }, end: { line: 35, column: 3 } },
                  loc: { start: { line: 35, column: 33 }, end: { line: 37, column: 3 } },
                  line: 35
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 41, column: 2 }, end: { line: 41, column: 3 } },
                  loc: { start: { line: 41, column: 49 }, end: { line: 48, column: 3 } },
                  line: 41
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: { start: { line: 44, column: 18 }, end: { line: 44, column: 19 } },
                  loc: { start: { line: 45, column: 8 }, end: { line: 45, column: 63 } },
                  line: 45
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: { start: { line: 45, column: 19 }, end: { line: 45, column: 20 } },
                  loc: { start: { line: 45, column: 25 }, end: { line: 45, column: 53 } },
                  line: 45
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: { start: { line: 50, column: 2 }, end: { line: 50, column: 3 } },
                  loc: { start: { line: 50, column: 31 }, end: { line: 53, column: 3 } },
                  line: 50
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: { start: { line: 55, column: 2 }, end: { line: 55, column: 3 } },
                  loc: { start: { line: 55, column: 38 }, end: { line: 78, column: 3 } },
                  line: 55
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: { start: { line: 80, column: 2 }, end: { line: 80, column: 3 } },
                  loc: { start: { line: 80, column: 25 }, end: { line: 101, column: 3 } },
                  line: 80
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: { start: { line: 83, column: 8 }, end: { line: 83, column: 9 } },
                  loc: { start: { line: 83, column: 20 }, end: { line: 91, column: 9 } },
                  line: 83
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: { start: { line: 92, column: 8 }, end: { line: 92, column: 9 } },
                  loc: { start: { line: 92, column: 14 }, end: { line: 95, column: 9 } },
                  line: 92
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: { start: { line: 97, column: 12 }, end: { line: 97, column: 13 } },
                  loc: { start: { line: 97, column: 20 }, end: { line: 99, column: 7 } },
                  line: 97
                },
                '10': {
                  name: '(anonymous_10)',
                  decl: {
                    start: { line: 116, column: 24 },
                    end: { line: 116, column: 25 }
                  },
                  loc: { start: { line: 116, column: 41 }, end: { line: 123, column: 1 } },
                  line: 116
                },
                '11': {
                  name: '(anonymous_11)',
                  decl: {
                    start: { line: 129, column: 26 },
                    end: { line: 129, column: 27 }
                  },
                  loc: { start: { line: 129, column: 32 }, end: { line: 169, column: 1 } },
                  line: 129
                },
                '12': {
                  name: '(anonymous_12)',
                  decl: { start: { line: 159, column: 6 }, end: { line: 159, column: 7 } },
                  loc: { start: { line: 159, column: 21 }, end: { line: 161, column: 7 } },
                  line: 159
                },
                '13': {
                  name: '(anonymous_13)',
                  decl: { start: { line: 162, column: 6 }, end: { line: 162, column: 7 } },
                  loc: { start: { line: 162, column: 11 }, end: { line: 162, column: 62 } },
                  line: 162
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 5, column: 0 }, end: { line: 28, column: 1 } },
                  type: 'if',
                  locations: [
                    { start: { line: 5, column: 0 }, end: { line: 28, column: 1 } },
                    { start: { line: 5, column: 0 }, end: { line: 28, column: 1 } }
                  ],
                  line: 5
                },
                '1': {
                  loc: { start: { line: 12, column: 2 }, end: { line: 27, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 12, column: 2 }, end: { line: 27, column: 3 } },
                    { start: { line: 12, column: 2 }, end: { line: 27, column: 3 } }
                  ],
                  line: 12
                },
                '2': {
                  loc: { start: { line: 24, column: 31 }, end: { line: 24, column: 59 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 24, column: 31 }, end: { line: 24, column: 53 } },
                    { start: { line: 24, column: 57 }, end: { line: 24, column: 59 } }
                  ],
                  line: 24
                },
                '3': {
                  loc: { start: { line: 41, column: 33 }, end: { line: 41, column: 47 } },
                  type: 'default-arg',
                  locations: [
                    { start: { line: 41, column: 43 }, end: { line: 41, column: 47 } }
                  ],
                  line: 41
                },
                '4': {
                  loc: { start: { line: 50, column: 17 }, end: { line: 50, column: 29 } },
                  type: 'default-arg',
                  locations: [
                    { start: { line: 50, column: 27 }, end: { line: 50, column: 29 } }
                  ],
                  line: 50
                },
                '5': {
                  loc: { start: { line: 58, column: 4 }, end: { line: 77, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 58, column: 4 }, end: { line: 77, column: 5 } },
                    { start: { line: 58, column: 4 }, end: { line: 77, column: 5 } }
                  ],
                  line: 58
                },
                '6': {
                  loc: { start: { line: 64, column: 11 }, end: { line: 77, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 64, column: 11 }, end: { line: 77, column: 5 } },
                    { start: { line: 64, column: 11 }, end: { line: 77, column: 5 } }
                  ],
                  line: 64
                },
                '7': {
                  loc: { start: { line: 86, column: 10 }, end: { line: 89, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 86, column: 10 }, end: { line: 89, column: 11 } },
                    { start: { line: 86, column: 10 }, end: { line: 89, column: 11 } }
                  ],
                  line: 86
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0],
                '4': [0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '3fd26821d45e3ee8ac77f94e3dee1a11501e83ac'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.includes');
          _dereq_('core-js/modules/es.array.iterator');
          _dereq_('core-js/modules/es.array.join');
          _dereq_('core-js/modules/es.array.slice');
          _dereq_('core-js/modules/es.object.keys');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.promise');
          _dereq_('core-js/modules/es.regexp.exec');
          _dereq_('core-js/modules/es.string.includes');
          _dereq_('core-js/modules/es.string.iterator');
          _dereq_('core-js/modules/es.string.split');
          _dereq_('core-js/modules/web.dom-collections.iterator');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.initialize = exports.translator = void 0;
          var _i18next = _interopRequireDefault(_dereq_('i18next'));
          var _i18nextBrowserLanguagedetector = _interopRequireDefault(
            _dereq_('i18next-browser-languagedetector')
          );
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          function _classCallCheck(instance, Constructor) {
            if (!(instance instanceof Constructor)) {
              throw new TypeError('Cannot call a class as a function');
            }
          }
          function _defineProperties(target, props) {
            for (var i = 0; i < props.length; i++) {
              var descriptor = props[i];
              descriptor.enumerable = descriptor.enumerable || false;
              descriptor.configurable = true;
              if ('value' in descriptor) descriptor.writable = true;
              Object.defineProperty(target, descriptor.key, descriptor);
            }
          }
          function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) _defineProperties(Constructor.prototype, protoProps);
            if (staticProps) _defineProperties(Constructor, staticProps);
            return Constructor;
          }

          var fallbackResources, languages;
          cov_1xrwswf9gu.s[0]++;
          if (typeof IS_MINIFIED === 'undefined') {
            cov_1xrwswf9gu.b[0][0]++;
            // internationalization is only for the unminified build

            var translationsModule = (cov_1xrwswf9gu.s[1]++, _dereq_('../../translations'));
            cov_1xrwswf9gu.s[2]++;
            fallbackResources = translationsModule.default;
            cov_1xrwswf9gu.s[3]++;
            languages = translationsModule.languages;
            cov_1xrwswf9gu.s[4]++;

            if (typeof P5_DEV_BUILD !== 'undefined') {
              cov_1xrwswf9gu.b[1][0]++;
              // When the library is built in development mode ( using npm run dev )
              // we want to use the current translation files on the disk, which may have
              // been updated but not yet pushed to the CDN.
              var completeResources = (cov_1xrwswf9gu.s[5]++,
              _dereq_('../../translations/dev'));
              cov_1xrwswf9gu.s[6]++;
              for (
                var _i = 0, _Object$keys = Object.keys(completeResources);
                _i < _Object$keys.length;
                _i++
              ) {
                var language = _Object$keys[_i];
                // In es_translation, language is es and namespace is translation
                // In es_MX_translation, language is es-MX and namespace is translation
                var parts = (cov_1xrwswf9gu.s[7]++, language.split('_'));
                var lng = (cov_1xrwswf9gu.s[8]++,
                parts.slice(0, parts.length - 1).join('-'));
                var ns = (cov_1xrwswf9gu.s[9]++, parts[parts.length - 1]);
                cov_1xrwswf9gu.s[10]++;

                fallbackResources[lng] =
                  (cov_1xrwswf9gu.b[2][0]++, fallbackResources[lng]) ||
                  (cov_1xrwswf9gu.b[2][1]++, {});
                cov_1xrwswf9gu.s[11]++;
                fallbackResources[lng][ns] = completeResources[language];
              }
            } else {
              cov_1xrwswf9gu.b[1][1]++;
            }
          } else {
            cov_1xrwswf9gu.b[0][1]++;
          }

          /**
           * This is our i18next "backend" plugin. It tries to fetch languages
           * from a CDN.
           */ var FetchResources = /*#__PURE__*/ (function() {
            function FetchResources(services, options) {
              _classCallCheck(this, FetchResources);
              cov_1xrwswf9gu.f[0]++;
              cov_1xrwswf9gu.s[12]++;
              this.init(services, options);
            }

            // run fetch with a timeout. Automatically rejects on timeout
            // default timeout = 2000 ms
            _createClass(FetchResources, [
              {
                key: 'fetchWithTimeout',
                value: function fetchWithTimeout(url, options) {
                  var timeout =
                    arguments.length > 2 && arguments[2] !== undefined
                      ? arguments[2]
                      : (cov_1xrwswf9gu.b[3][0]++, 2000);
                  cov_1xrwswf9gu.f[1]++;
                  cov_1xrwswf9gu.s[13]++;
                  return Promise.race([
                    fetch(url, options),
                    new Promise(function(_, reject) {
                      cov_1xrwswf9gu.f[2]++;
                      cov_1xrwswf9gu.s[14]++;
                      return setTimeout(function() {
                        cov_1xrwswf9gu.f[3]++;
                        cov_1xrwswf9gu.s[15]++;
                        return reject(new Error('timeout'));
                      }, timeout);
                    })
                  ]);
                }
              },
              {
                key: 'init',
                value: function init(services) {
                  var options =
                    arguments.length > 1 && arguments[1] !== undefined
                      ? arguments[1]
                      : (cov_1xrwswf9gu.b[4][0]++, {});
                  cov_1xrwswf9gu.f[4]++;
                  cov_1xrwswf9gu.s[16]++;
                  this.services = services;
                  cov_1xrwswf9gu.s[17]++;
                  this.options = options;
                }
              },
              {
                key: 'read',
                value: function read(language, namespace, callback) {
                  cov_1xrwswf9gu.f[5]++;
                  var loadPath = (cov_1xrwswf9gu.s[18]++, this.options.loadPath);
                  cov_1xrwswf9gu.s[19]++;

                  if (language === this.options.fallback) {
                    cov_1xrwswf9gu.b[5][0]++;
                    cov_1xrwswf9gu.s[20]++;
                    // if the default language of the user is the same as our inbuilt fallback,
                    // there's no need to fetch resources from the cdn. This won't actually
                    // need to run when we use "partialBundledLanguages" in the init
                    // function.
                    callback(null, fallbackResources[language][namespace]);
                  } else {
                    cov_1xrwswf9gu.b[5][1]++;
                    cov_1xrwswf9gu.s[21]++;
                    if (languages.includes(language)) {
                      cov_1xrwswf9gu.b[6][0]++;
                      // The user's language is included in the list of languages
                      // that we so far added translations for.

                      var url = (cov_1xrwswf9gu.s[22]++,
                      this.services.interpolator.interpolate(loadPath, {
                        lng: language,
                        ns: namespace
                      }));
                      cov_1xrwswf9gu.s[23]++;

                      this.loadUrl(url, callback);
                    } else {
                      cov_1xrwswf9gu.b[6][1]++;
                      cov_1xrwswf9gu.s[24]++;
                      // We don't have translations for this language. i18next will use
                      // the default language instead.
                      callback('Not found', false);
                    }
                  }
                }
              },
              {
                key: 'loadUrl',
                value: function loadUrl(url, callback) {
                  cov_1xrwswf9gu.f[6]++;
                  cov_1xrwswf9gu.s[25]++;
                  this.fetchWithTimeout(url)
                    .then(
                      function(response) {
                        cov_1xrwswf9gu.f[7]++;
                        var ok = (cov_1xrwswf9gu.s[26]++, response.ok);
                        cov_1xrwswf9gu.s[27]++;

                        if (!ok) {
                          cov_1xrwswf9gu.b[7][0]++;
                          cov_1xrwswf9gu.s[28]++;
                          // caught in the catch() below
                          throw new Error('failed loading '.concat(url));
                        } else {
                          cov_1xrwswf9gu.b[7][1]++;
                        }
                        cov_1xrwswf9gu.s[29]++;
                        return response.json();
                      },
                      function() {
                        cov_1xrwswf9gu.f[8]++;
                        cov_1xrwswf9gu.s[30]++;
                        // caught in the catch() below
                        throw new Error('failed loading '.concat(url));
                      }
                    )
                    .then(function(data) {
                      cov_1xrwswf9gu.f[9]++;
                      cov_1xrwswf9gu.s[31]++;
                      return callback(null, data);
                    })
                    .catch(callback);
                }
              }
            ]);
            return FetchResources;
          })();
          cov_1xrwswf9gu.s[32]++;

          FetchResources.type = 'backend';

          /**
           * This is our translation function. Give it a key and
           * it will retrieve the appropriate string
           * (within supported languages) according to the
           * user's browser's language settings.
           * @function translator
           * @param {String} key a key that corresponds to a message in our translation files
           * @param {Object} values values for use in the message under the given `key`
           * @returns {String} message (with values inserted) in the user's browser language
           * @private
           */ cov_1xrwswf9gu.s[33]++;
          var translator = function translator(key, values) {
            cov_1xrwswf9gu.f[10]++;
            cov_1xrwswf9gu.s[34]++;
            console.debug('p5.js translator called before translations were loaded');

            // Certain FES functionality may trigger before translations are downloaded.
            // Using "partialBundledLanguages" option during initialization, we can
            // still use our fallback language to display messages
            cov_1xrwswf9gu.s[35]++;
            _i18next.default.t(key, values); /* i18next-extract-disable-line */
          };
          // (We'll set this to a real value in the init function below!)

          /**
           * Set up our translation function, with loaded languages
           */ exports.translator = translator;
          cov_1xrwswf9gu.s[36]++;
          var initialize = function initialize() {
            cov_1xrwswf9gu.f[11]++;
            var i18init = (cov_1xrwswf9gu.s[37]++,
            _i18next.default
              .use(_i18nextBrowserLanguagedetector.default)
              .use(FetchResources)
              .init({
                fallbackLng: 'en',
                nestingPrefix: '$tr(',
                nestingSuffix: ')',
                defaultNS: 'translation',
                returnEmptyString: false,
                interpolation: {
                  escapeValue: false
                },

                detection: {
                  checkWhitelist: false,

                  // prevent storing or locating language from cookie or localStorage
                  // more info on https://github.com/processing/p5.js/issues/4862
                  order: ['querystring', 'navigator', 'htmlTag', 'path', 'subdomain'],
                  caches: []
                },

                backend: {
                  fallback: 'en',
                  loadPath:
                    'https://cdn.jsdelivr.net/npm/p5/translations/{{lng}}/{{ns}}.json'
                },

                partialBundledLanguages: true,
                resources: fallbackResources
              })
              .then(
                function(translateFn) {
                  cov_1xrwswf9gu.f[12]++;
                  cov_1xrwswf9gu.s[38]++;
                  exports.translator = translator = translateFn;
                },
                function(e) {
                  cov_1xrwswf9gu.f[13]++;
                  cov_1xrwswf9gu.s[39]++;
                  return console.debug('Translations failed to load ('.concat(e, ')'));
                }
              ));

            // i18next.init() returns a promise that resolves when the translations
            // are loaded. We use this in core/init.js to hold p5 initialization until
            // we have the translation files.
            cov_1xrwswf9gu.s[40]++;
            return i18init;
          };
          exports.initialize = initialize;
        },
        {
          '../../translations': 342,
          '../../translations/dev': undefined,
          'core-js/modules/es.array.includes': 172,
          'core-js/modules/es.array.iterator': 174,
          'core-js/modules/es.array.join': 175,
          'core-js/modules/es.array.slice': 178,
          'core-js/modules/es.object.keys': 191,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.promise': 193,
          'core-js/modules/es.regexp.exec': 196,
          'core-js/modules/es.string.includes': 200,
          'core-js/modules/es.string.iterator': 201,
          'core-js/modules/es.string.split': 206,
          'core-js/modules/web.dom-collections.iterator': 244,
          i18next: 254,
          'i18next-browser-languagedetector': 251
        }
      ],
      282: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_2cl6mqa954 = (function() {
            var path = '/Users/outofambit/src/p5.js/src/core/legacy.js';
            var hash = 'c54ac75907f803335d95234761896746a00a1546';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/core/legacy.js',
              statementMap: {
                '0': { start: { line: 13, column: 0 }, end: { line: 15, column: 2 } },
                '1': { start: { line: 14, column: 2 }, end: { line: 14, column: 54 } },
                '2': { start: { line: 17, column: 0 }, end: { line: 19, column: 2 } },
                '3': { start: { line: 18, column: 2 }, end: { line: 18, column: 52 } },
                '4': { start: { line: 21, column: 0 }, end: { line: 23, column: 2 } },
                '5': { start: { line: 22, column: 2 }, end: { line: 22, column: 53 } },
                '6': { start: { line: 25, column: 0 }, end: { line: 27, column: 2 } },
                '7': { start: { line: 26, column: 2 }, end: { line: 26, column: 55 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 13, column: 25 }, end: { line: 13, column: 26 } },
                  loc: { start: { line: 13, column: 36 }, end: { line: 15, column: 1 } },
                  line: 13
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 17, column: 24 }, end: { line: 17, column: 25 } },
                  loc: { start: { line: 17, column: 35 }, end: { line: 19, column: 1 } },
                  line: 17
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: { start: { line: 21, column: 25 }, end: { line: 21, column: 26 } },
                  loc: { start: { line: 21, column: 36 }, end: { line: 23, column: 1 } },
                  line: 21
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: { start: { line: 25, column: 26 }, end: { line: 25, column: 27 } },
                  loc: { start: { line: 25, column: 37 }, end: { line: 27, column: 1 } },
                  line: 25
                }
              },
              branchMap: {},
              s: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0 },
              f: { '0': 0, '1': 0, '2': 0, '3': 0 },
              b: {},
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: 'c54ac75907f803335d95234761896746a00a1546'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('./main'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_2cl6mqa954.s[0]++;

          _main.default.prototype.pushStyle = function() {
            cov_2cl6mqa954.f[0]++;
            cov_2cl6mqa954.s[1]++;
            throw new Error('pushStyle() not used, see push()');
          };
          cov_2cl6mqa954.s[2]++;

          _main.default.prototype.popStyle = function() {
            cov_2cl6mqa954.f[1]++;
            cov_2cl6mqa954.s[3]++;
            throw new Error('popStyle() not used, see pop()');
          };
          cov_2cl6mqa954.s[4]++;

          _main.default.prototype.popMatrix = function() {
            cov_2cl6mqa954.f[2]++;
            cov_2cl6mqa954.s[5]++;
            throw new Error('popMatrix() not used, see pop()');
          };
          cov_2cl6mqa954.s[6]++;

          _main.default.prototype.pushMatrix = function() {
            cov_2cl6mqa954.f[3]++;
            cov_2cl6mqa954.s[7]++;
            throw new Error('pushMatrix() not used, see push()');
          };
          var _default = _main.default;
          exports.default = _default;
        },
        { './main': 283 }
      ],
      283: [
        function(_dereq_, module, exports) {
          'use strict';
          function _typeof(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof = function _typeof(obj) {
                return typeof obj;
              };
            } else {
              _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof(obj);
          }
          var cov_1u3dqh78v9 = (function() {
            var path = '/Users/outofambit/src/p5.js/src/core/main.js';
            var hash = '41be6e955ff13f55352743cb2eef5e601e75b492';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/core/main.js',
              statementMap: {
                '0': { start: { line: 169, column: 4 }, end: { line: 169, column: 28 } },
                '1': { start: { line: 171, column: 4 }, end: { line: 171, column: 65 } },
                '2': { start: { line: 172, column: 4 }, end: { line: 172, column: 26 } },
                '3': { start: { line: 173, column: 4 }, end: { line: 173, column: 28 } },
                '4': { start: { line: 174, column: 4 }, end: { line: 174, column: 24 } },
                '5': { start: { line: 175, column: 4 }, end: { line: 175, column: 30 } },
                '6': { start: { line: 176, column: 4 }, end: { line: 176, column: 28 } },
                '7': { start: { line: 177, column: 4 }, end: { line: 177, column: 27 } },
                '8': { start: { line: 178, column: 4 }, end: { line: 178, column: 27 } },
                '9': { start: { line: 179, column: 4 }, end: { line: 179, column: 22 } },
                '10': { start: { line: 180, column: 4 }, end: { line: 180, column: 40 } },
                '11': { start: { line: 181, column: 4 }, end: { line: 184, column: 6 } },
                '12': { start: { line: 185, column: 4 }, end: { line: 204, column: 6 } },
                '13': { start: { line: 205, column: 4 }, end: { line: 205, column: 27 } },
                '14': { start: { line: 208, column: 4 }, end: { line: 208, column: 34 } },
                '15': { start: { line: 209, column: 4 }, end: { line: 209, column: 36 } },
                '16': { start: { line: 211, column: 4 }, end: { line: 211, column: 30 } },
                '17': { start: { line: 212, column: 4 }, end: { line: 212, column: 41 } },
                '18': { start: { line: 216, column: 4 }, end: { line: 216, column: 33 } },
                '19': { start: { line: 217, column: 20 }, end: { line: 217, column: 79 } },
                '20': { start: { line: 219, column: 4 }, end: { line: 223, column: 5 } },
                '21': { start: { line: 220, column: 6 }, end: { line: 222, column: 16 } },
                '22': { start: { line: 225, column: 4 }, end: { line: 227, column: 5 } },
                '23': { start: { line: 226, column: 6 }, end: { line: 226, column: 44 } },
                '24': { start: { line: 228, column: 4 }, end: { line: 230, column: 5 } },
                '25': { start: { line: 229, column: 6 }, end: { line: 229, column: 39 } },
                '26': { start: { line: 232, column: 4 }, end: { line: 276, column: 6 } },
                '27': { start: { line: 234, column: 6 }, end: { line: 238, column: 7 } },
                '28': { start: { line: 235, column: 8 }, end: { line: 237, column: 9 } },
                '29': { start: { line: 236, column: 10 }, end: { line: 236, column: 67 } },
                '30': { start: { line: 240, column: 22 }, end: { line: 240, column: 52 } },
                '31': { start: { line: 241, column: 6 }, end: { line: 275, column: 7 } },
                '32': { start: { line: 245, column: 28 }, end: { line: 245, column: 74 } },
                '33': { start: { line: 246, column: 8 }, end: { line: 253, column: 9 } },
                '34': { start: { line: 247, column: 10 }, end: { line: 247, column: 56 } },
                '35': { start: { line: 248, column: 10 }, end: { line: 248, column: 49 } },
                '36': { start: { line: 249, column: 10 }, end: { line: 249, column: 52 } },
                '37': { start: { line: 250, column: 10 }, end: { line: 250, column: 51 } },
                '38': { start: { line: 251, column: 23 }, end: { line: 251, column: 54 } },
                '39': { start: { line: 252, column: 10 }, end: { line: 252, column: 42 } },
                '40': { start: { line: 254, column: 24 }, end: { line: 254, column: 44 } },
                '41': { start: { line: 255, column: 8 }, end: { line: 268, column: 9 } },
                '42': { start: { line: 257, column: 10 }, end: { line: 257, column: 50 } },
                '43': { start: { line: 258, column: 20 }, end: { line: 258, column: 35 } },
                '44': { start: { line: 260, column: 10 }, end: { line: 265, column: 11 } },
                '45': { start: { line: 261, column: 12 }, end: { line: 263, column: 13 } },
                '46': { start: { line: 262, column: 14 }, end: { line: 262, column: 63 } },
                '47': { start: { line: 264, column: 12 }, end: { line: 264, column: 23 } },
                '48': { start: { line: 266, column: 10 }, end: { line: 266, column: 63 } },
                '49': { start: { line: 267, column: 10 }, end: { line: 267, column: 55 } },
                '50': { start: { line: 270, column: 8 }, end: { line: 270, column: 26 } },
                '51': { start: { line: 271, column: 8 }, end: { line: 271, column: 37 } },
                '52': { start: { line: 273, column: 8 }, end: { line: 273, column: 22 } },
                '53': { start: { line: 274, column: 8 }, end: { line: 274, column: 21 } },
                '54': { start: { line: 278, column: 4 }, end: { line: 291, column: 6 } },
                '55': { start: { line: 279, column: 22 }, end: { line: 279, column: 52 } },
                '56': { start: { line: 280, column: 6 }, end: { line: 290, column: 7 } },
                '57': { start: { line: 281, column: 30 }, end: { line: 281, column: 79 } },
                '58': { start: { line: 282, column: 8 }, end: { line: 284, column: 9 } },
                '59': { start: { line: 283, column: 10 }, end: { line: 283, column: 62 } },
                '60': { start: { line: 285, column: 8 }, end: { line: 289, column: 9 } },
                '61': { start: { line: 286, column: 10 }, end: { line: 286, column: 57 } },
                '62': { start: { line: 287, column: 10 }, end: { line: 287, column: 27 } },
                '63': { start: { line: 288, column: 10 }, end: { line: 288, column: 26 } },
                '64': { start: { line: 293, column: 4 }, end: { line: 299, column: 6 } },
                '65': { start: { line: 294, column: 22 }, end: { line: 294, column: 52 } },
                '66': { start: { line: 295, column: 6 }, end: { line: 298, column: 7 } },
                '67': { start: { line: 296, column: 8 }, end: { line: 296, column: 73 } },
                '68': { start: { line: 297, column: 8 }, end: { line: 297, column: 40 } },
                '69': { start: { line: 301, column: 4 }, end: { line: 308, column: 6 } },
                '70': { start: { line: 302, column: 6 }, end: { line: 307, column: 8 } },
                '71': { start: { line: 304, column: 8 }, end: { line: 304, column: 33 } },
                '72': { start: { line: 306, column: 8 }, end: { line: 306, column: 71 } },
                '73': { start: { line: 310, column: 4 }, end: { line: 313, column: 6 } },
                '74': { start: { line: 311, column: 22 }, end: { line: 311, column: 52 } },
                '75': { start: { line: 312, column: 6 }, end: { line: 312, column: 71 } },
                '76': { start: { line: 315, column: 4 }, end: { line: 360, column: 6 } },
                '77': { start: { line: 319, column: 6 }, end: { line: 323, column: 8 } },
                '78': { start: { line: 326, column: 22 }, end: { line: 326, column: 52 } },
                '79': { start: { line: 327, column: 6 }, end: { line: 334, column: 7 } },
                '80': { start: { line: 328, column: 8 }, end: { line: 333, column: 9 } },
                '81': { start: { line: 329, column: 10 }, end: { line: 329, column: 50 } },
                '82': { start: { line: 330, column: 10 }, end: { line: 332, column: 11 } },
                '83': { start: { line: 331, column: 12 }, end: { line: 331, column: 47 } },
                '84': { start: { line: 337, column: 6 }, end: { line: 337, column: 51 } },
                '85': { start: { line: 341, column: 6 }, end: { line: 343, column: 7 } },
                '86': { start: { line: 342, column: 8 }, end: { line: 342, column: 24 } },
                '87': { start: { line: 346, column: 23 }, end: { line: 346, column: 62 } },
                '88': { start: { line: 348, column: 6 }, end: { line: 353, column: 7 } },
                '89': { start: { line: 349, column: 8 }, end: { line: 352, column: 9 } },
                '90': { start: { line: 350, column: 10 }, end: { line: 350, column: 34 } },
                '91': { start: { line: 351, column: 10 }, end: { line: 351, column: 34 } },
                '92': { start: { line: 355, column: 6 }, end: { line: 355, column: 53 } },
                '93': { start: { line: 356, column: 6 }, end: { line: 356, column: 29 } },
                '94': { start: { line: 357, column: 6 }, end: { line: 359, column: 7 } },
                '95': { start: { line: 358, column: 8 }, end: { line: 358, column: 33 } },
                '96': { start: { line: 362, column: 4 }, end: { line: 406, column: 6 } },
                '97': { start: { line: 363, column: 18 }, end: { line: 363, column: 42 } },
                '98': { start: { line: 364, column: 30 }, end: { line: 364, column: 55 } },
                '99': { start: { line: 365, column: 41 }, end: { line: 365, column: 69 } },
                '100': { start: { line: 375, column: 22 }, end: { line: 375, column: 23 } },
                '101': { start: { line: 376, column: 6 }, end: { line: 399, column: 7 } },
                '102': { start: { line: 381, column: 8 }, end: { line: 381, column: 22 } },
                '103': { start: { line: 382, column: 8 }, end: { line: 382, column: 63 } },
                '104': { start: { line: 383, column: 8 }, end: { line: 383, column: 51 } },
                '105': { start: { line: 384, column: 8 }, end: { line: 384, column: 55 } },
                '106': { start: { line: 385, column: 8 }, end: { line: 385, column: 34 } },
                '107': { start: { line: 391, column: 8 }, end: { line: 398, column: 9 } },
                '108': { start: { line: 392, column: 10 }, end: { line: 392, column: 36 } },
                '109': { start: { line: 396, column: 10 }, end: { line: 396, column: 41 } },
                '110': { start: { line: 397, column: 10 }, end: { line: 397, column: 41 } },
                '111': { start: { line: 403, column: 6 }, end: { line: 405, column: 7 } },
                '112': { start: { line: 404, column: 8 }, end: { line: 404, column: 71 } },
                '113': { start: { line: 408, column: 4 }, end: { line: 413, column: 6 } },
                '114': { start: { line: 409, column: 6 }, end: { line: 409, column: 25 } },
                '115': { start: { line: 410, column: 6 }, end: { line: 412, column: 7 } },
                '116': { start: { line: 411, column: 8 }, end: { line: 411, column: 29 } },
                '117': { start: { line: 440, column: 4 }, end: { line: 497, column: 6 } },
                '118': { start: { line: 441, column: 28 }, end: { line: 441, column: 74 } },
                '119': { start: { line: 442, column: 6 }, end: { line: 446, column: 7 } },
                '120': { start: { line: 443, column: 8 }, end: { line: 443, column: 60 } },
                '121': { start: { line: 445, column: 8 }, end: { line: 445, column: 33 } },
                '122': { start: { line: 447, column: 6 }, end: { line: 476, column: 7 } },
                '123': { start: { line: 449, column: 8 }, end: { line: 449, column: 27 } },
                '124': { start: { line: 450, column: 8 }, end: { line: 452, column: 9 } },
                '125': { start: { line: 451, column: 10 }, end: { line: 451, column: 59 } },
                '126': { start: { line: 455, column: 8 }, end: { line: 457, column: 9 } },
                '127': { start: { line: 456, column: 10 }, end: { line: 456, column: 59 } },
                '128': { start: { line: 460, column: 8 }, end: { line: 467, column: 9 } },
                '129': { start: { line: 461, column: 10 }, end: { line: 463, column: 11 } },
                '130': { start: { line: 462, column: 12 }, end: { line: 462, column: 48 } },
                '131': { start: { line: 464, column: 10 }, end: { line: 466, column: 11 } },
                '132': { start: { line: 465, column: 12 }, end: { line: 465, column: 65 } },
                '133': { start: { line: 470, column: 21 }, end: { line: 470, column: 25 } },
                '134': { start: { line: 471, column: 8 }, end: { line: 475, column: 11 } },
                '135': { start: { line: 472, column: 10 }, end: { line: 474, column: 11 } },
                '136': { start: { line: 473, column: 12 }, end: { line: 473, column: 25 } },
                '137': { start: { line: 478, column: 6 }, end: { line: 496, column: 7 } },
                '138': { start: { line: 479, column: 8 }, end: { line: 485, column: 9 } },
                '139': { start: { line: 480, column: 10 }, end: { line: 484, column: 11 } },
                '140': { start: { line: 481, column: 12 }, end: { line: 481, column: 29 } },
                '141': { start: { line: 483, column: 12 }, end: { line: 483, column: 34 } },
                '142': { start: { line: 486, column: 8 }, end: { line: 494, column: 9 } },
                '143': { start: { line: 487, column: 10 }, end: { line: 493, column: 11 } },
                '144': { start: { line: 488, column: 12 }, end: { line: 492, column: 13 } },
                '145': { start: { line: 489, column: 14 }, end: { line: 489, column: 32 } },
                '146': { start: { line: 491, column: 14 }, end: { line: 491, column: 37 } },
                '147': { start: { line: 495, column: 8 }, end: { line: 495, column: 27 } },
                '148': { start: { line: 500, column: 4 }, end: { line: 504, column: 13 } },
                '149': { start: { line: 501, column: 6 }, end: { line: 503, column: 7 } },
                '150': { start: { line: 502, column: 8 }, end: { line: 502, column: 21 } },
                '151': { start: { line: 506, column: 4 }, end: { line: 506, column: 33 } },
                '152': { start: { line: 508, column: 31 }, end: { line: 508, column: 73 } },
                '153': { start: { line: 512, column: 4 }, end: { line: 546, column: 5 } },
                '154': { start: { line: 513, column: 6 }, end: { line: 513, column: 28 } },
                '155': { start: { line: 514, column: 6 }, end: { line: 514, column: 25 } },
                '156': { start: { line: 516, column: 6 }, end: { line: 531, column: 7 } },
                '157': { start: { line: 517, column: 8 }, end: { line: 530, column: 9 } },
                '158': { start: { line: 518, column: 21 }, end: { line: 518, column: 35 } },
                '159': { start: { line: 519, column: 10 }, end: { line: 527, column: 11 } },
                '160': { start: { line: 520, column: 12 }, end: { line: 526, column: 13 } },
                '161': { start: { line: 523, column: 14 }, end: { line: 523, column: 53 } },
                '162': { start: { line: 525, column: 14 }, end: { line: 525, column: 64 } },
                '163': { start: { line: 529, column: 10 }, end: { line: 529, column: 49 } },
                '164': { start: { line: 533, column: 6 }, end: { line: 537, column: 7 } },
                '165': { start: { line: 534, column: 8 }, end: { line: 536, column: 9 } },
                '166': { start: { line: 535, column: 10 }, end: { line: 535, column: 43 } },
                '167': { start: { line: 541, column: 6 }, end: { line: 541, column: 19 } },
                '168': { start: { line: 545, column: 6 }, end: { line: 545, column: 45 } },
                '169': { start: { line: 550, column: 4 }, end: { line: 557, column: 5 } },
                '170': { start: { line: 551, column: 16 }, end: { line: 551, column: 31 } },
                '171': { start: { line: 552, column: 6 }, end: { line: 556, column: 7 } },
                '172': { start: { line: 553, column: 18 }, end: { line: 553, column: 30 } },
                '173': { start: { line: 554, column: 8 }, end: { line: 554, column: 58 } },
                '174': { start: { line: 555, column: 8 }, end: { line: 555, column: 28 } },
                '175': { start: { line: 559, column: 25 }, end: { line: 561, column: 5 } },
                '176': { start: { line: 560, column: 6 }, end: { line: 560, column: 41 } },
                '177': { start: { line: 562, column: 24 }, end: { line: 564, column: 5 } },
                '178': { start: { line: 563, column: 6 }, end: { line: 563, column: 42 } },
                '179': { start: { line: 565, column: 4 }, end: { line: 565, column: 51 } },
                '180': { start: { line: 566, column: 4 }, end: { line: 566, column: 49 } },
                '181': { start: { line: 567, column: 4 }, end: { line: 570, column: 7 } },
                '182': { start: { line: 568, column: 6 }, end: { line: 568, column: 56 } },
                '183': { start: { line: 569, column: 6 }, end: { line: 569, column: 54 } },
                '184': { start: { line: 572, column: 4 }, end: { line: 576, column: 5 } },
                '185': { start: { line: 573, column: 6 }, end: { line: 573, column: 20 } },
                '186': { start: { line: 575, column: 6 }, end: { line: 575, column: 69 } },
                '187': { start: { line: 580, column: 4 }, end: { line: 585, column: 6 } },
                '188': { start: { line: 587, column: 4 }, end: { line: 587, column: 22 } },
                '189': { start: { line: 589, column: 4 }, end: { line: 589, column: 28 } },
                '190': { start: { line: 590, column: 4 }, end: { line: 590, column: 27 } },
                '191': { start: { line: 592, column: 4 }, end: { line: 592, column: 36 } },
                '192': { start: { line: 593, column: 4 }, end: { line: 597, column: 6 } },
                '193': { start: { line: 599, column: 4 }, end: { line: 599, column: 24 } },
                '194': { start: { line: 604, column: 4 }, end: { line: 606, column: 5 } },
                '195': { start: { line: 605, column: 6 }, end: { line: 605, column: 51 } },
                '196': { start: { line: 610, column: 19 }, end: { line: 610, column: 39 } },
                '197': { start: { line: 611, column: 4 }, end: { line: 613, column: 5 } },
                '198': { start: { line: 612, column: 6 }, end: { line: 612, column: 43 } },
                '199': { start: { line: 614, column: 4 }, end: { line: 614, column: 44 } },
                '200': { start: { line: 623, column: 25 }, end: { line: 623, column: 55 } },
                '201': { start: { line: 624, column: 16 }, end: { line: 624, column: 56 } },
                '202': { start: { line: 625, column: 37 }, end: { line: 631, column: 5 } },
                '203': { start: { line: 633, column: 4 }, end: { line: 685, column: 6 } },
                '204': { start: { line: 634, column: 6 }, end: { line: 684, column: 7 } },
                '205': { start: { line: 640, column: 8 }, end: { line: 681, column: 9 } },
                '206': { start: { line: 650, column: 10 }, end: { line: 652, column: 11 } },
                '207': { start: { line: 651, column: 12 }, end: { line: 651, column: 63 } },
                '208': { start: { line: 659, column: 10 }, end: { line: 676, column: 13 } },
                '209': { start: { line: 663, column: 14 }, end: { line: 663, column: 27 } },
                '210': { start: { line: 666, column: 14 }, end: { line: 671, column: 17 } },
                '211': { start: { line: 672, column: 14 }, end: { line: 674, column: 16 } },
                '212': {
                  start: { line: 678, column: 24 },
                  end: { line: 678, column: 206 }
                },
                '213': { start: { line: 679, column: 10 }, end: { line: 679, column: 43 } },
                '214': { start: { line: 680, column: 10 }, end: { line: 680, column: 37 } },
                '215': { start: { line: 683, column: 8 }, end: { line: 683, column: 35 } },
                '216': { start: { line: 691, column: 0 }, end: { line: 691, column: 19 } },
                '217': { start: { line: 709, column: 0 }, end: { line: 709, column: 33 } },
                '218': { start: { line: 712, column: 0 }, end: { line: 714, column: 1 } },
                '219': { start: { line: 713, column: 2 }, end: { line: 713, column: 33 } },
                '220': { start: { line: 718, column: 0 }, end: { line: 728, column: 2 } },
                '221': { start: { line: 730, column: 0 }, end: { line: 730, column: 78 } },
                '222': { start: { line: 732, column: 0 }, end: { line: 732, column: 44 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 37, column: 2 }, end: { line: 37, column: 3 } },
                  loc: { start: { line: 37, column: 34 }, end: { line: 577, column: 3 } },
                  line: 37
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: {
                    start: { line: 232, column: 18 },
                    end: { line: 232, column: 19 }
                  },
                  loc: { start: { line: 232, column: 24 }, end: { line: 276, column: 5 } },
                  line: 232
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 278, column: 33 },
                    end: { line: 278, column: 34 }
                  },
                  loc: { start: { line: 278, column: 44 }, end: { line: 291, column: 5 } },
                  line: 278
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 293, column: 29 },
                    end: { line: 293, column: 30 }
                  },
                  loc: { start: { line: 293, column: 40 }, end: { line: 299, column: 5 } },
                  line: 293
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 301, column: 24 },
                    end: { line: 301, column: 25 }
                  },
                  loc: { start: { line: 301, column: 46 }, end: { line: 308, column: 5 } },
                  line: 301
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 302, column: 13 },
                    end: { line: 302, column: 14 }
                  },
                  loc: { start: { line: 302, column: 26 }, end: { line: 307, column: 7 } },
                  line: 302
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 310, column: 29 },
                    end: { line: 310, column: 30 }
                  },
                  loc: { start: { line: 310, column: 40 }, end: { line: 313, column: 5 } },
                  line: 310
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 315, column: 18 },
                    end: { line: 315, column: 19 }
                  },
                  loc: { start: { line: 315, column: 24 }, end: { line: 360, column: 5 } },
                  line: 315
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 362, column: 17 },
                    end: { line: 362, column: 18 }
                  },
                  loc: { start: { line: 362, column: 23 }, end: { line: 406, column: 5 } },
                  line: 362
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 408, column: 24 },
                    end: { line: 408, column: 25 }
                  },
                  loc: { start: { line: 408, column: 41 }, end: { line: 413, column: 5 } },
                  line: 408
                },
                '10': {
                  name: '(anonymous_10)',
                  decl: {
                    start: { line: 440, column: 18 },
                    end: { line: 440, column: 19 }
                  },
                  loc: { start: { line: 440, column: 24 }, end: { line: 497, column: 5 } },
                  line: 440
                },
                '11': {
                  name: '(anonymous_11)',
                  decl: {
                    start: { line: 471, column: 47 },
                    end: { line: 471, column: 48 }
                  },
                  loc: { start: { line: 471, column: 52 }, end: { line: 475, column: 9 } },
                  line: 471
                },
                '12': {
                  name: '(anonymous_12)',
                  decl: {
                    start: { line: 500, column: 41 },
                    end: { line: 500, column: 42 }
                  },
                  loc: { start: { line: 500, column: 53 }, end: { line: 504, column: 5 } },
                  line: 500
                },
                '13': {
                  name: '(anonymous_13)',
                  decl: {
                    start: { line: 559, column: 25 },
                    end: { line: 559, column: 26 }
                  },
                  loc: { start: { line: 559, column: 31 }, end: { line: 561, column: 5 } },
                  line: 559
                },
                '14': {
                  name: '(anonymous_14)',
                  decl: {
                    start: { line: 562, column: 24 },
                    end: { line: 562, column: 25 }
                  },
                  loc: { start: { line: 562, column: 30 }, end: { line: 564, column: 5 } },
                  line: 562
                },
                '15': {
                  name: '(anonymous_15)',
                  decl: {
                    start: { line: 567, column: 34 },
                    end: { line: 567, column: 35 }
                  },
                  loc: { start: { line: 567, column: 40 }, end: { line: 570, column: 5 } },
                  line: 567
                },
                '16': {
                  name: '(anonymous_16)',
                  decl: { start: { line: 579, column: 2 }, end: { line: 579, column: 3 } },
                  loc: { start: { line: 579, column: 33 }, end: { line: 600, column: 3 } },
                  line: 579
                },
                '17': {
                  name: '(anonymous_17)',
                  decl: { start: { line: 602, column: 2 }, end: { line: 602, column: 3 } },
                  loc: { start: { line: 602, column: 39 }, end: { line: 607, column: 3 } },
                  line: 602
                },
                '18': {
                  name: '(anonymous_18)',
                  decl: { start: { line: 609, column: 2 }, end: { line: 609, column: 3 } },
                  loc: { start: { line: 609, column: 26 }, end: { line: 615, column: 3 } },
                  line: 609
                },
                '19': {
                  name: '(anonymous_19)',
                  decl: { start: { line: 622, column: 2 }, end: { line: 622, column: 3 } },
                  loc: { start: { line: 622, column: 52 }, end: { line: 686, column: 3 } },
                  line: 622
                },
                '20': {
                  name: '(anonymous_20)',
                  decl: {
                    start: { line: 633, column: 11 },
                    end: { line: 633, column: 12 }
                  },
                  loc: { start: { line: 633, column: 28 }, end: { line: 685, column: 5 } },
                  line: 633
                },
                '21': {
                  name: '(anonymous_21)',
                  decl: {
                    start: { line: 662, column: 12 },
                    end: { line: 662, column: 13 }
                  },
                  loc: { start: { line: 662, column: 18 }, end: { line: 664, column: 13 } },
                  line: 662
                },
                '22': {
                  name: '(anonymous_22)',
                  decl: {
                    start: { line: 665, column: 12 },
                    end: { line: 665, column: 13 }
                  },
                  loc: { start: { line: 665, column: 26 }, end: { line: 675, column: 13 } },
                  line: 665
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 171, column: 25 }, end: { line: 171, column: 64 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 171, column: 25 }, end: { line: 171, column: 59 } },
                    { start: { line: 171, column: 63 }, end: { line: 171, column: 64 } }
                  ],
                  line: 171
                },
                '1': {
                  loc: { start: { line: 225, column: 4 }, end: { line: 227, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 225, column: 4 }, end: { line: 227, column: 5 } },
                    { start: { line: 225, column: 4 }, end: { line: 227, column: 5 } }
                  ],
                  line: 225
                },
                '2': {
                  loc: { start: { line: 228, column: 4 }, end: { line: 230, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 228, column: 4 }, end: { line: 230, column: 5 } },
                    { start: { line: 228, column: 4 }, end: { line: 230, column: 5 } }
                  ],
                  line: 228
                },
                '3': {
                  loc: { start: { line: 228, column: 8 }, end: { line: 228, column: 57 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 228, column: 8 }, end: { line: 228, column: 32 } },
                    { start: { line: 228, column: 36 }, end: { line: 228, column: 57 } }
                  ],
                  line: 228
                },
                '4': {
                  loc: { start: { line: 234, column: 6 }, end: { line: 238, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 234, column: 6 }, end: { line: 238, column: 7 } },
                    { start: { line: 234, column: 6 }, end: { line: 238, column: 7 } }
                  ],
                  line: 234
                },
                '5': {
                  loc: { start: { line: 235, column: 8 }, end: { line: 237, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 235, column: 8 }, end: { line: 237, column: 9 } },
                    { start: { line: 235, column: 8 }, end: { line: 237, column: 9 } }
                  ],
                  line: 235
                },
                '6': {
                  loc: { start: { line: 240, column: 22 }, end: { line: 240, column: 52 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 240, column: 39 }, end: { line: 240, column: 45 } },
                    { start: { line: 240, column: 48 }, end: { line: 240, column: 52 } }
                  ],
                  line: 240
                },
                '7': {
                  loc: { start: { line: 241, column: 6 }, end: { line: 275, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 241, column: 6 }, end: { line: 275, column: 7 } },
                    { start: { line: 241, column: 6 }, end: { line: 275, column: 7 } }
                  ],
                  line: 241
                },
                '8': {
                  loc: { start: { line: 246, column: 8 }, end: { line: 253, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 246, column: 8 }, end: { line: 253, column: 9 } },
                    { start: { line: 246, column: 8 }, end: { line: 253, column: 9 } }
                  ],
                  line: 246
                },
                '9': {
                  loc: { start: { line: 251, column: 23 }, end: { line: 251, column: 54 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 251, column: 23 }, end: { line: 251, column: 37 } },
                    { start: { line: 251, column: 41 }, end: { line: 251, column: 54 } }
                  ],
                  line: 251
                },
                '10': {
                  loc: { start: { line: 257, column: 28 }, end: { line: 257, column: 49 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 257, column: 28 }, end: { line: 257, column: 43 } },
                    { start: { line: 257, column: 47 }, end: { line: 257, column: 49 } }
                  ],
                  line: 257
                },
                '11': {
                  loc: { start: { line: 260, column: 10 }, end: { line: 265, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 260, column: 10 }, end: { line: 265, column: 11 } },
                    { start: { line: 260, column: 10 }, end: { line: 265, column: 11 } }
                  ],
                  line: 260
                },
                '12': {
                  loc: { start: { line: 260, column: 14 }, end: { line: 260, column: 48 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 260, column: 14 }, end: { line: 260, column: 34 } },
                    { start: { line: 260, column: 38 }, end: { line: 260, column: 48 } }
                  ],
                  line: 260
                },
                '13': {
                  loc: { start: { line: 261, column: 12 }, end: { line: 263, column: 13 } },
                  type: 'if',
                  locations: [
                    { start: { line: 261, column: 12 }, end: { line: 263, column: 13 } },
                    { start: { line: 261, column: 12 }, end: { line: 263, column: 13 } }
                  ],
                  line: 261
                },
                '14': {
                  loc: { start: { line: 279, column: 22 }, end: { line: 279, column: 52 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 279, column: 39 }, end: { line: 279, column: 45 } },
                    { start: { line: 279, column: 48 }, end: { line: 279, column: 52 } }
                  ],
                  line: 279
                },
                '15': {
                  loc: { start: { line: 280, column: 6 }, end: { line: 290, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 280, column: 6 }, end: { line: 290, column: 7 } },
                    { start: { line: 280, column: 6 }, end: { line: 290, column: 7 } }
                  ],
                  line: 280
                },
                '16': {
                  loc: { start: { line: 282, column: 8 }, end: { line: 284, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 282, column: 8 }, end: { line: 284, column: 9 } },
                    { start: { line: 282, column: 8 }, end: { line: 284, column: 9 } }
                  ],
                  line: 282
                },
                '17': {
                  loc: { start: { line: 285, column: 8 }, end: { line: 289, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 285, column: 8 }, end: { line: 289, column: 9 } },
                    { start: { line: 285, column: 8 }, end: { line: 289, column: 9 } }
                  ],
                  line: 285
                },
                '18': {
                  loc: { start: { line: 294, column: 22 }, end: { line: 294, column: 52 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 294, column: 39 }, end: { line: 294, column: 45 } },
                    { start: { line: 294, column: 48 }, end: { line: 294, column: 52 } }
                  ],
                  line: 294
                },
                '19': {
                  loc: { start: { line: 295, column: 6 }, end: { line: 298, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 295, column: 6 }, end: { line: 298, column: 7 } },
                    { start: { line: 295, column: 6 }, end: { line: 298, column: 7 } }
                  ],
                  line: 295
                },
                '20': {
                  loc: { start: { line: 311, column: 22 }, end: { line: 311, column: 52 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 311, column: 39 }, end: { line: 311, column: 45 } },
                    { start: { line: 311, column: 48 }, end: { line: 311, column: 52 } }
                  ],
                  line: 311
                },
                '21': {
                  loc: { start: { line: 326, column: 22 }, end: { line: 326, column: 52 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 326, column: 39 }, end: { line: 326, column: 45 } },
                    { start: { line: 326, column: 48 }, end: { line: 326, column: 52 } }
                  ],
                  line: 326
                },
                '22': {
                  loc: { start: { line: 327, column: 6 }, end: { line: 334, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 327, column: 6 }, end: { line: 334, column: 7 } },
                    { start: { line: 327, column: 6 }, end: { line: 334, column: 7 } }
                  ],
                  line: 327
                },
                '23': {
                  loc: { start: { line: 330, column: 10 }, end: { line: 332, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 330, column: 10 }, end: { line: 332, column: 11 } },
                    { start: { line: 330, column: 10 }, end: { line: 332, column: 11 } }
                  ],
                  line: 330
                },
                '24': {
                  loc: { start: { line: 330, column: 14 }, end: { line: 330, column: 32 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 330, column: 14 }, end: { line: 330, column: 24 } },
                    { start: { line: 330, column: 28 }, end: { line: 330, column: 32 } }
                  ],
                  line: 330
                },
                '25': {
                  loc: { start: { line: 341, column: 6 }, end: { line: 343, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 341, column: 6 }, end: { line: 343, column: 7 } },
                    { start: { line: 341, column: 6 }, end: { line: 343, column: 7 } }
                  ],
                  line: 341
                },
                '26': {
                  loc: { start: { line: 349, column: 8 }, end: { line: 352, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 349, column: 8 }, end: { line: 352, column: 9 } },
                    { start: { line: 349, column: 8 }, end: { line: 352, column: 9 } }
                  ],
                  line: 349
                },
                '27': {
                  loc: { start: { line: 357, column: 6 }, end: { line: 359, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 357, column: 6 }, end: { line: 359, column: 7 } },
                    { start: { line: 357, column: 6 }, end: { line: 359, column: 7 } }
                  ],
                  line: 357
                },
                '28': {
                  loc: { start: { line: 357, column: 10 }, end: { line: 357, column: 70 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 357, column: 10 }, end: { line: 357, column: 38 } },
                    { start: { line: 357, column: 42 }, end: { line: 357, column: 70 } }
                  ],
                  line: 357
                },
                '29': {
                  loc: { start: { line: 376, column: 6 }, end: { line: 399, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 376, column: 6 }, end: { line: 399, column: 7 } },
                    { start: { line: 376, column: 6 }, end: { line: 399, column: 7 } }
                  ],
                  line: 376
                },
                '30': {
                  loc: { start: { line: 377, column: 8 }, end: { line: 378, column: 63 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 377, column: 8 }, end: { line: 377, column: 19 } },
                    { start: { line: 378, column: 8 }, end: { line: 378, column: 63 } }
                  ],
                  line: 377
                },
                '31': {
                  loc: { start: { line: 391, column: 8 }, end: { line: 398, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 391, column: 8 }, end: { line: 398, column: 9 } },
                    { start: { line: 391, column: 8 }, end: { line: 398, column: 9 } }
                  ],
                  line: 391
                },
                '32': {
                  loc: { start: { line: 403, column: 6 }, end: { line: 405, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 403, column: 6 }, end: { line: 405, column: 7 } },
                    { start: { line: 403, column: 6 }, end: { line: 405, column: 7 } }
                  ],
                  line: 403
                },
                '33': {
                  loc: { start: { line: 410, column: 6 }, end: { line: 412, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 410, column: 6 }, end: { line: 412, column: 7 } },
                    { start: { line: 410, column: 6 }, end: { line: 412, column: 7 } }
                  ],
                  line: 410
                },
                '34': {
                  loc: { start: { line: 442, column: 6 }, end: { line: 446, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 442, column: 6 }, end: { line: 446, column: 7 } },
                    { start: { line: 442, column: 6 }, end: { line: 446, column: 7 } }
                  ],
                  line: 442
                },
                '35': {
                  loc: { start: { line: 447, column: 6 }, end: { line: 476, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 447, column: 6 }, end: { line: 476, column: 7 } },
                    { start: { line: 447, column: 6 }, end: { line: 476, column: 7 } }
                  ],
                  line: 447
                },
                '36': {
                  loc: { start: { line: 450, column: 8 }, end: { line: 452, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 450, column: 8 }, end: { line: 452, column: 9 } },
                    { start: { line: 450, column: 8 }, end: { line: 452, column: 9 } }
                  ],
                  line: 450
                },
                '37': {
                  loc: { start: { line: 461, column: 10 }, end: { line: 463, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 461, column: 10 }, end: { line: 463, column: 11 } },
                    { start: { line: 461, column: 10 }, end: { line: 463, column: 11 } }
                  ],
                  line: 461
                },
                '38': {
                  loc: { start: { line: 461, column: 14 }, end: { line: 461, column: 39 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 461, column: 14 }, end: { line: 461, column: 19 } },
                    { start: { line: 461, column: 23 }, end: { line: 461, column: 39 } }
                  ],
                  line: 461
                },
                '39': {
                  loc: { start: { line: 472, column: 10 }, end: { line: 474, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 472, column: 10 }, end: { line: 474, column: 11 } },
                    { start: { line: 472, column: 10 }, end: { line: 474, column: 11 } }
                  ],
                  line: 472
                },
                '40': {
                  loc: { start: { line: 478, column: 6 }, end: { line: 496, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 478, column: 6 }, end: { line: 496, column: 7 } },
                    { start: { line: 478, column: 6 }, end: { line: 496, column: 7 } }
                  ],
                  line: 478
                },
                '41': {
                  loc: { start: { line: 487, column: 10 }, end: { line: 493, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 487, column: 10 }, end: { line: 493, column: 11 } },
                    { start: { line: 487, column: 10 }, end: { line: 493, column: 11 } }
                  ],
                  line: 487
                },
                '42': {
                  loc: { start: { line: 501, column: 6 }, end: { line: 503, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 501, column: 6 }, end: { line: 503, column: 7 } },
                    { start: { line: 501, column: 6 }, end: { line: 503, column: 7 } }
                  ],
                  line: 501
                },
                '43': {
                  loc: { start: { line: 512, column: 4 }, end: { line: 546, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 512, column: 4 }, end: { line: 546, column: 5 } },
                    { start: { line: 512, column: 4 }, end: { line: 546, column: 5 } }
                  ],
                  line: 512
                },
                '44': {
                  loc: { start: { line: 517, column: 8 }, end: { line: 530, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 517, column: 8 }, end: { line: 530, column: 9 } },
                    { start: { line: 517, column: 8 }, end: { line: 530, column: 9 } }
                  ],
                  line: 517
                },
                '45': {
                  loc: { start: { line: 519, column: 10 }, end: { line: 527, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 519, column: 10 }, end: { line: 527, column: 11 } },
                    { start: { line: 519, column: 10 }, end: { line: 527, column: 11 } }
                  ],
                  line: 519
                },
                '46': {
                  loc: { start: { line: 520, column: 12 }, end: { line: 526, column: 13 } },
                  type: 'if',
                  locations: [
                    { start: { line: 520, column: 12 }, end: { line: 526, column: 13 } },
                    { start: { line: 520, column: 12 }, end: { line: 526, column: 13 } }
                  ],
                  line: 520
                },
                '47': {
                  loc: { start: { line: 520, column: 16 }, end: { line: 520, column: 69 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 520, column: 16 }, end: { line: 520, column: 38 } },
                    { start: { line: 520, column: 42 }, end: { line: 520, column: 69 } }
                  ],
                  line: 520
                },
                '48': {
                  loc: { start: { line: 534, column: 8 }, end: { line: 536, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 534, column: 8 }, end: { line: 536, column: 9 } },
                    { start: { line: 534, column: 8 }, end: { line: 536, column: 9 } }
                  ],
                  line: 534
                },
                '49': {
                  loc: { start: { line: 552, column: 6 }, end: { line: 556, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 552, column: 6 }, end: { line: 556, column: 7 } },
                    { start: { line: 552, column: 6 }, end: { line: 556, column: 7 } }
                  ],
                  line: 552
                },
                '50': {
                  loc: { start: { line: 572, column: 4 }, end: { line: 576, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 572, column: 4 }, end: { line: 576, column: 5 } },
                    { start: { line: 572, column: 4 }, end: { line: 576, column: 5 } }
                  ],
                  line: 572
                },
                '51': {
                  loc: { start: { line: 604, column: 4 }, end: { line: 606, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 604, column: 4 }, end: { line: 606, column: 5 } },
                    { start: { line: 604, column: 4 }, end: { line: 606, column: 5 } }
                  ],
                  line: 604
                },
                '52': {
                  loc: { start: { line: 610, column: 19 }, end: { line: 610, column: 39 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 610, column: 19 }, end: { line: 610, column: 23 } },
                    { start: { line: 610, column: 27 }, end: { line: 610, column: 39 } }
                  ],
                  line: 610
                },
                '53': {
                  loc: { start: { line: 611, column: 4 }, end: { line: 613, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 611, column: 4 }, end: { line: 613, column: 5 } },
                    { start: { line: 611, column: 4 }, end: { line: 613, column: 5 } }
                  ],
                  line: 611
                },
                '54': {
                  loc: { start: { line: 622, column: 38 }, end: { line: 622, column: 50 } },
                  type: 'default-arg',
                  locations: [
                    { start: { line: 622, column: 48 }, end: { line: 622, column: 50 } }
                  ],
                  line: 622
                },
                '55': {
                  loc: { start: { line: 623, column: 25 }, end: { line: 623, column: 55 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 623, column: 25 }, end: { line: 623, column: 45 } },
                    { start: { line: 623, column: 49 }, end: { line: 623, column: 55 } }
                  ],
                  line: 623
                },
                '56': {
                  loc: { start: { line: 624, column: 16 }, end: { line: 624, column: 56 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 624, column: 16 }, end: { line: 624, column: 27 } },
                    { start: { line: 624, column: 31 }, end: { line: 624, column: 56 } }
                  ],
                  line: 624
                },
                '57': {
                  loc: { start: { line: 634, column: 6 }, end: { line: 684, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 634, column: 6 }, end: { line: 684, column: 7 } },
                    { start: { line: 634, column: 6 }, end: { line: 684, column: 7 } }
                  ],
                  line: 634
                },
                '58': {
                  loc: { start: { line: 635, column: 8 }, end: { line: 638, column: 47 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 635, column: 8 }, end: { line: 635, column: 33 } },
                    { start: { line: 636, column: 8 }, end: { line: 636, column: 42 } },
                    { start: { line: 637, column: 8 }, end: { line: 637, column: 35 } },
                    { start: { line: 638, column: 8 }, end: { line: 638, column: 47 } }
                  ],
                  line: 635
                },
                '59': {
                  loc: { start: { line: 650, column: 10 }, end: { line: 652, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 650, column: 10 }, end: { line: 652, column: 11 } },
                    { start: { line: 650, column: 10 }, end: { line: 652, column: 11 } }
                  ],
                  line: 650
                },
                '60': {
                  loc: { start: { line: 650, column: 14 }, end: { line: 650, column: 73 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 650, column: 14 }, end: { line: 650, column: 34 } },
                    { start: { line: 650, column: 38 }, end: { line: 650, column: 73 } }
                  ],
                  line: 650
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0,
                '118': 0,
                '119': 0,
                '120': 0,
                '121': 0,
                '122': 0,
                '123': 0,
                '124': 0,
                '125': 0,
                '126': 0,
                '127': 0,
                '128': 0,
                '129': 0,
                '130': 0,
                '131': 0,
                '132': 0,
                '133': 0,
                '134': 0,
                '135': 0,
                '136': 0,
                '137': 0,
                '138': 0,
                '139': 0,
                '140': 0,
                '141': 0,
                '142': 0,
                '143': 0,
                '144': 0,
                '145': 0,
                '146': 0,
                '147': 0,
                '148': 0,
                '149': 0,
                '150': 0,
                '151': 0,
                '152': 0,
                '153': 0,
                '154': 0,
                '155': 0,
                '156': 0,
                '157': 0,
                '158': 0,
                '159': 0,
                '160': 0,
                '161': 0,
                '162': 0,
                '163': 0,
                '164': 0,
                '165': 0,
                '166': 0,
                '167': 0,
                '168': 0,
                '169': 0,
                '170': 0,
                '171': 0,
                '172': 0,
                '173': 0,
                '174': 0,
                '175': 0,
                '176': 0,
                '177': 0,
                '178': 0,
                '179': 0,
                '180': 0,
                '181': 0,
                '182': 0,
                '183': 0,
                '184': 0,
                '185': 0,
                '186': 0,
                '187': 0,
                '188': 0,
                '189': 0,
                '190': 0,
                '191': 0,
                '192': 0,
                '193': 0,
                '194': 0,
                '195': 0,
                '196': 0,
                '197': 0,
                '198': 0,
                '199': 0,
                '200': 0,
                '201': 0,
                '202': 0,
                '203': 0,
                '204': 0,
                '205': 0,
                '206': 0,
                '207': 0,
                '208': 0,
                '209': 0,
                '210': 0,
                '211': 0,
                '212': 0,
                '213': 0,
                '214': 0,
                '215': 0,
                '216': 0,
                '217': 0,
                '218': 0,
                '219': 0,
                '220': 0,
                '221': 0,
                '222': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0],
                '20': [0, 0],
                '21': [0, 0],
                '22': [0, 0],
                '23': [0, 0],
                '24': [0, 0],
                '25': [0, 0],
                '26': [0, 0],
                '27': [0, 0],
                '28': [0, 0],
                '29': [0, 0],
                '30': [0, 0],
                '31': [0, 0],
                '32': [0, 0],
                '33': [0, 0],
                '34': [0, 0],
                '35': [0, 0],
                '36': [0, 0],
                '37': [0, 0],
                '38': [0, 0],
                '39': [0, 0],
                '40': [0, 0],
                '41': [0, 0],
                '42': [0, 0],
                '43': [0, 0],
                '44': [0, 0],
                '45': [0, 0],
                '46': [0, 0],
                '47': [0, 0],
                '48': [0, 0],
                '49': [0, 0],
                '50': [0, 0],
                '51': [0, 0],
                '52': [0, 0],
                '53': [0, 0],
                '54': [0],
                '55': [0, 0],
                '56': [0, 0],
                '57': [0, 0],
                '58': [0, 0, 0, 0],
                '59': [0, 0],
                '60': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '41be6e955ff13f55352743cb2eef5e601e75b492'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.symbol');
          _dereq_('core-js/modules/es.symbol.description');
          _dereq_('core-js/modules/es.symbol.iterator');
          _dereq_('core-js/modules/es.array.for-each');
          _dereq_('core-js/modules/es.array.iterator');
          _dereq_('core-js/modules/es.array.slice');
          _dereq_('core-js/modules/es.object.get-own-property-names');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.string.iterator');
          _dereq_('core-js/modules/web.dom-collections.for-each');
          _dereq_('core-js/modules/web.dom-collections.iterator');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          _dereq_('./shim');

          var constants = _interopRequireWildcard(_dereq_('./constants'));
          function _getRequireWildcardCache() {
            if (typeof WeakMap !== 'function') return null;
            var cache = new WeakMap();
            _getRequireWildcardCache = function _getRequireWildcardCache() {
              return cache;
            };
            return cache;
          }
          function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
              return obj;
            }
            if (obj === null || (_typeof(obj) !== 'object' && typeof obj !== 'function')) {
              return { default: obj };
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
              return cache.get(obj);
            }
            var newObj = {};
            var hasPropertyDescriptor =
              Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
              if (Object.prototype.hasOwnProperty.call(obj, key)) {
                var desc = hasPropertyDescriptor
                  ? Object.getOwnPropertyDescriptor(obj, key)
                  : null;
                if (desc && (desc.get || desc.set)) {
                  Object.defineProperty(newObj, key, desc);
                } else {
                  newObj[key] = obj[key];
                }
              }
            }
            newObj.default = obj;
            if (cache) {
              cache.set(obj, newObj);
            }
            return newObj;
          }
          function _classCallCheck(instance, Constructor) {
            if (!(instance instanceof Constructor)) {
              throw new TypeError('Cannot call a class as a function');
            }
          }
          function _defineProperties(target, props) {
            for (var i = 0; i < props.length; i++) {
              var descriptor = props[i];
              descriptor.enumerable = descriptor.enumerable || false;
              descriptor.configurable = true;
              if ('value' in descriptor) descriptor.writable = true;
              Object.defineProperty(target, descriptor.key, descriptor);
            }
          }
          function _createClass(Constructor, protoProps, staticProps) {
            if (protoProps) _defineProperties(Constructor.prototype, protoProps);
            if (staticProps) _defineProperties(Constructor, staticProps);
            return Constructor;
          }

          /**
           * This is the p5 instance constructor.
           *
           * A p5 instance holds all the properties and methods related to
           * a p5 sketch.  It expects an incoming sketch closure and it can also
           * take an optional node parameter for attaching the generated p5 canvas
           * to a node.  The sketch closure takes the newly created p5 instance as
           * its sole argument and may optionally set <a href="#/p5/preload">preload()</a>,
           * <a href="#/p5/setup">setup()</a>, and/or
           * <a href="#/p5/draw">draw()</a> properties on it for running a sketch.
           *
           * A p5 sketch can run in "global" or "instance" mode:
           * "global"   - all properties and methods are attached to the window
           * "instance" - all properties and methods are bound to this p5 object
           *
           * @class p5
           * @constructor
           * @param  {function}           sketch a closure that can set optional <a href="#/p5/preload">preload()</a>,
           *                              <a href="#/p5/setup">setup()</a>, and/or <a href="#/p5/draw">draw()</a> properties on the
           *                              given p5 instance
           * @param  {HTMLElement}        [node] element to attach canvas to
           * @return {p5}                 a p5 instance
           */ var p5 = /*#__PURE__*/ (function() {
            function p5(sketch, node, sync) {
              var _this = this;
              _classCallCheck(this, p5);
              cov_1u3dqh78v9.f[0]++;
              cov_1u3dqh78v9.s[0]++;
              //////////////////////////////////////////////
              // PUBLIC p5 PROPERTIES AND METHODS
              //////////////////////////////////////////////

              /**
               * Called directly before <a href="#/p5/setup">setup()</a>, the <a href="#/p5/preload">preload()</a> function is used to handle
               * asynchronous loading of external files in a blocking way. If a preload
               * function is defined, <a href="#/p5/setup">setup()</a> will wait until any load calls within have
               * finished. Nothing besides load calls (<a href="#/p5/loadImage">loadImage</a>, <a href="#/p5/loadJSON">loadJSON</a>, <a href="#/p5/loadFont">loadFont</a>,
               * <a href="#/p5/loadStrings">loadStrings</a>, etc.) should be inside the preload function. If asynchronous
               * loading is preferred, the load methods can instead be called in <a href="#/p5/setup">setup()</a>
               * or anywhere else with the use of a callback parameter.
               *
               * By default the text "loading..." will be displayed. To make your own
               * loading page, include an HTML element with id "p5_loading" in your
               * page. More information <a href="http://bit.ly/2kQ6Nio">here</a>.
               *
               * @method preload
               * @example
               * <div><code>
               * let img;
               * let c;
               * function preload() {
               *   // preload() runs once
               *   img = loadImage('assets/laDefense.jpg');
               * }
               *
               * function setup() {
               *   // setup() waits until preload() is done
               *   img.loadPixels();
               *   // get color of middle pixel
               *   c = img.get(img.width / 2, img.height / 2);
               * }
               *
               * function draw() {
               *   background(c);
               *   image(img, 25, 25, 50, 50);
               * }
               * </code></div>
               *
               * @alt
               * nothing displayed
               *
               */

              /**
               * The <a href="#/p5/setup">setup()</a> function is called once when the program starts. It's used to
               * define initial environment properties such as screen size and background
               * color and to load media such as images and fonts as the program starts.
               * There can only be one <a href="#/p5/setup">setup()</a> function for each program and it shouldn't
               * be called again after its initial execution.
               *
               * Note: Variables declared within <a href="#/p5/setup">setup()</a> are not accessible within other
               * functions, including <a href="#/p5/draw">draw()</a>.
               *
               * @method setup
               * @example
               * <div><code>
               * let a = 0;
               *
               * function setup() {
               *   background(0);
               *   noStroke();
               *   fill(102);
               * }
               *
               * function draw() {
               *   rect(a++ % width, 10, 2, 80);
               * }
               * </code></div>
               *
               * @alt
               * nothing displayed
               *
               */

              /**
               * Called directly after <a href="#/p5/setup">setup()</a>, the <a href="#/p5/draw">draw()</a> function continuously executes
               * the lines of code contained inside its block until the program is stopped
               * or <a href="#/p5/noLoop">noLoop()</a> is called. Note if <a href="#/p5/noLoop">noLoop()</a> is called in <a href="#/p5/setup">setup()</a>, <a href="#/p5/draw">draw()</a> will
               * still be executed once before stopping. <a href="#/p5/draw">draw()</a> is called automatically and
               * should never be called explicitly.
               *
               * It should always be controlled with <a href="#/p5/noLoop">noLoop()</a>, <a href="#/p5/redraw">redraw()</a> and <a href="#/p5/loop">loop()</a>. After
               * <a href="#/p5/noLoop">noLoop()</a> stops the code in <a href="#/p5/draw">draw()</a> from executing, <a href="#/p5/redraw">redraw()</a> causes the
               * code inside <a href="#/p5/draw">draw()</a> to execute once, and <a href="#/p5/loop">loop()</a> will cause the code
               * inside <a href="#/p5/draw">draw()</a> to resume executing continuously.
               *
               * The number of times <a href="#/p5/draw">draw()</a> executes in each second may be controlled with
               * the <a href="#/p5/frameRate">frameRate()</a> function.
               *
               * There can only be one <a href="#/p5/draw">draw()</a> function for each sketch, and <a href="#/p5/draw">draw()</a> must
               * exist if you want the code to run continuously, or to process events such
               * as <a href="#/p5/mousePressed">mousePressed()</a>. Sometimes, you might have an empty call to <a href="#/p5/draw">draw()</a> in
               * your program, as shown in the above example.
               *
               * It is important to note that the drawing coordinate system will be reset
               * at the beginning of each <a href="#/p5/draw">draw()</a> call. If any transformations are performed
               * within <a href="#/p5/draw">draw()</a> (ex: scale, rotate, translate), their effects will be
               * undone at the beginning of <a href="#/p5/draw">draw()</a>, so transformations will not accumulate
               * over time. On the other hand, styling applied (ex: fill, stroke, etc) will
               * remain in effect.
               *
               * @method draw
               * @example
               * <div><code>
               * let yPos = 0;
               * function setup() {
               *   // setup() runs once
               *   frameRate(30);
               * }
               * function draw() {
               *   // draw() loops forever, until stopped
               *   background(204);
               *   yPos = yPos - 1;
               *   if (yPos < 0) {
               *     yPos = height;
               *   }
               *   line(0, yPos, width, yPos);
               * }
               * </code></div>
               *
               * @alt
               * nothing displayed
               *
               */

              //////////////////////////////////////////////
              // PRIVATE p5 PROPERTIES AND METHODS
              //////////////////////////////////////////////

              this._setupDone = false;
              // for handling hidpi
              cov_1u3dqh78v9.s[1]++;
              this._pixelDensity =
                (cov_1u3dqh78v9.b[0][0]++, Math.ceil(window.devicePixelRatio)) ||
                (cov_1u3dqh78v9.b[0][1]++, 1);
              cov_1u3dqh78v9.s[2]++;
              this._userNode = node;
              cov_1u3dqh78v9.s[3]++;
              this._curElement = null;
              cov_1u3dqh78v9.s[4]++;
              this._elements = [];
              cov_1u3dqh78v9.s[5]++;
              this._glAttributes = null;
              cov_1u3dqh78v9.s[6]++;
              this._requestAnimId = 0;
              cov_1u3dqh78v9.s[7]++;
              this._preloadCount = 0;
              cov_1u3dqh78v9.s[8]++;
              this._isGlobal = false;
              cov_1u3dqh78v9.s[9]++;
              this._loop = true;
              cov_1u3dqh78v9.s[10]++;
              this._initializeInstanceVariables();
              cov_1u3dqh78v9.s[11]++;
              this._defaultCanvasSize = {
                width: 100,
                height: 100
              };
              cov_1u3dqh78v9.s[12]++;

              this._events = {
                // keep track of user-events for unregistering later
                mousemove: null,
                mousedown: null,
                mouseup: null,
                dragend: null,
                dragover: null,
                click: null,
                dblclick: null,
                mouseover: null,
                mouseout: null,
                keydown: null,
                keyup: null,
                keypress: null,
                touchstart: null,
                touchmove: null,
                touchend: null,
                resize: null,
                blur: null
              };
              cov_1u3dqh78v9.s[13]++;

              this._millisStart = -1;

              // States used in the custom random generators
              cov_1u3dqh78v9.s[14]++;
              this._lcg_random_state = null;
              cov_1u3dqh78v9.s[15]++;
              this._gaussian_previous = false;
              cov_1u3dqh78v9.s[16]++;

              this._events.wheel = null;
              cov_1u3dqh78v9.s[17]++;
              this._loadingScreenId = 'p5_loading';

              // Allows methods to be registered on an instance that
              // are instance-specific.
              cov_1u3dqh78v9.s[18]++;
              this._registeredMethods = {};
              var methods = (cov_1u3dqh78v9.s[19]++,
              Object.getOwnPropertyNames(p5.prototype._registeredMethods));
              cov_1u3dqh78v9.s[20]++;
              var _iteratorNormalCompletion = true;
              var _didIteratorError = false;
              var _iteratorError = undefined;
              try {
                for (
                  var _iterator = methods[Symbol.iterator](), _step;
                  !(_iteratorNormalCompletion = (_step = _iterator.next()).done);
                  _iteratorNormalCompletion = true
                ) {
                  var prop = _step.value;
                  cov_1u3dqh78v9.s[21]++;
                  this._registeredMethods[prop] = p5.prototype._registeredMethods[
                    prop
                  ].slice();
                }
              } catch (err) {
                _didIteratorError = true;
                _iteratorError = err;
              } finally {
                try {
                  if (!_iteratorNormalCompletion && _iterator.return != null) {
                    _iterator.return();
                  }
                } finally {
                  if (_didIteratorError) {
                    throw _iteratorError;
                  }
                }
              }
              cov_1u3dqh78v9.s[22]++;

              if (window.DeviceOrientationEvent) {
                cov_1u3dqh78v9.b[1][0]++;
                cov_1u3dqh78v9.s[23]++;
                this._events.deviceorientation = null;
              } else {
                cov_1u3dqh78v9.b[1][1]++;
              }
              cov_1u3dqh78v9.s[24]++;
              if (
                (cov_1u3dqh78v9.b[3][0]++, window.DeviceMotionEvent) &&
                (cov_1u3dqh78v9.b[3][1]++, !window._isNodeWebkit)
              ) {
                cov_1u3dqh78v9.b[2][0]++;
                cov_1u3dqh78v9.s[25]++;
                this._events.devicemotion = null;
              } else {
                cov_1u3dqh78v9.b[2][1]++;
              }
              cov_1u3dqh78v9.s[26]++;

              this._start = function() {
                cov_1u3dqh78v9.f[1]++;
                cov_1u3dqh78v9.s[27]++;
                // Find node if id given
                if (_this._userNode) {
                  cov_1u3dqh78v9.b[4][0]++;
                  cov_1u3dqh78v9.s[28]++;
                  if (typeof _this._userNode === 'string') {
                    cov_1u3dqh78v9.b[5][0]++;
                    cov_1u3dqh78v9.s[29]++;
                    _this._userNode = document.getElementById(_this._userNode);
                  } else {
                    cov_1u3dqh78v9.b[5][1]++;
                  }
                } else {
                  cov_1u3dqh78v9.b[4][1]++;
                }

                var context = (cov_1u3dqh78v9.s[30]++,
                _this._isGlobal
                  ? (cov_1u3dqh78v9.b[6][0]++, window)
                  : (cov_1u3dqh78v9.b[6][1]++, _this));
                cov_1u3dqh78v9.s[31]++;
                if (context.preload) {
                  cov_1u3dqh78v9.b[7][0]++;
                  // Setup loading screen
                  // Set loading screen into dom if not present
                  // Otherwise displays and removes user provided loading screen
                  var loadingScreen = (cov_1u3dqh78v9.s[32]++,
                  document.getElementById(_this._loadingScreenId));
                  cov_1u3dqh78v9.s[33]++;
                  if (!loadingScreen) {
                    cov_1u3dqh78v9.b[8][0]++;
                    cov_1u3dqh78v9.s[34]++;
                    loadingScreen = document.createElement('div');
                    cov_1u3dqh78v9.s[35]++;
                    loadingScreen.innerHTML = 'Loading...';
                    cov_1u3dqh78v9.s[36]++;
                    loadingScreen.style.position = 'absolute';
                    cov_1u3dqh78v9.s[37]++;
                    loadingScreen.id = _this._loadingScreenId;
                    var _node = (cov_1u3dqh78v9.s[38]++,
                    (cov_1u3dqh78v9.b[9][0]++, _this._userNode) ||
                      (cov_1u3dqh78v9.b[9][1]++, document.body));
                    cov_1u3dqh78v9.s[39]++;
                    _node.appendChild(loadingScreen);
                  } else {
                    cov_1u3dqh78v9.b[8][1]++;
                  }
                  var _methods = (cov_1u3dqh78v9.s[40]++, _this._preloadMethods);
                  cov_1u3dqh78v9.s[41]++;
                  for (var method in _methods) {
                    cov_1u3dqh78v9.s[42]++;
                    // default to p5 if no object defined
                    _methods[method] =
                      (cov_1u3dqh78v9.b[10][0]++, _methods[method]) ||
                      (cov_1u3dqh78v9.b[10][1]++, p5);
                    var obj = (cov_1u3dqh78v9.s[43]++, _methods[method]);
                    //it's p5, check if it's global or instance
                    cov_1u3dqh78v9.s[44]++;
                    if (
                      (cov_1u3dqh78v9.b[12][0]++, obj === p5.prototype) ||
                      (cov_1u3dqh78v9.b[12][1]++, obj === p5)
                    ) {
                      cov_1u3dqh78v9.b[11][0]++;
                      cov_1u3dqh78v9.s[45]++;
                      if (_this._isGlobal) {
                        cov_1u3dqh78v9.b[13][0]++;
                        cov_1u3dqh78v9.s[46]++;
                        window[method] = _this._wrapPreload(_this, method);
                      } else {
                        cov_1u3dqh78v9.b[13][1]++;
                      }
                      cov_1u3dqh78v9.s[47]++;
                      obj = _this;
                    } else {
                      cov_1u3dqh78v9.b[11][1]++;
                    }
                    cov_1u3dqh78v9.s[48]++;
                    _this._registeredPreloadMethods[method] = obj[method];
                    cov_1u3dqh78v9.s[49]++;
                    obj[method] = _this._wrapPreload(obj, method);
                  }
                  cov_1u3dqh78v9.s[50]++;

                  context.preload();
                  cov_1u3dqh78v9.s[51]++;
                  _this._runIfPreloadsAreDone();
                } else {
                  cov_1u3dqh78v9.b[7][1]++;
                  cov_1u3dqh78v9.s[52]++;
                  _this._setup();
                  cov_1u3dqh78v9.s[53]++;
                  _this._draw();
                }
              };
              cov_1u3dqh78v9.s[54]++;

              this._runIfPreloadsAreDone = function() {
                cov_1u3dqh78v9.f[2]++;
                var context = (cov_1u3dqh78v9.s[55]++,
                this._isGlobal
                  ? (cov_1u3dqh78v9.b[14][0]++, window)
                  : (cov_1u3dqh78v9.b[14][1]++, this));
                cov_1u3dqh78v9.s[56]++;
                if (context._preloadCount === 0) {
                  cov_1u3dqh78v9.b[15][0]++;
                  var loadingScreen = (cov_1u3dqh78v9.s[57]++,
                  document.getElementById(context._loadingScreenId));
                  cov_1u3dqh78v9.s[58]++;
                  if (loadingScreen) {
                    cov_1u3dqh78v9.b[16][0]++;
                    cov_1u3dqh78v9.s[59]++;
                    loadingScreen.parentNode.removeChild(loadingScreen);
                  } else {
                    cov_1u3dqh78v9.b[16][1]++;
                  }
                  cov_1u3dqh78v9.s[60]++;
                  if (!this._setupDone) {
                    cov_1u3dqh78v9.b[17][0]++;
                    cov_1u3dqh78v9.s[61]++;
                    this._lastFrameTime = window.performance.now();
                    cov_1u3dqh78v9.s[62]++;
                    context._setup();
                    cov_1u3dqh78v9.s[63]++;
                    context._draw();
                  } else {
                    cov_1u3dqh78v9.b[17][1]++;
                  }
                } else {
                  cov_1u3dqh78v9.b[15][1]++;
                }
              };
              cov_1u3dqh78v9.s[64]++;

              this._decrementPreload = function() {
                cov_1u3dqh78v9.f[3]++;
                var context = (cov_1u3dqh78v9.s[65]++,
                this._isGlobal
                  ? (cov_1u3dqh78v9.b[18][0]++, window)
                  : (cov_1u3dqh78v9.b[18][1]++, this));
                cov_1u3dqh78v9.s[66]++;
                if (typeof context.preload === 'function') {
                  cov_1u3dqh78v9.b[19][0]++;
                  cov_1u3dqh78v9.s[67]++;
                  context._setProperty('_preloadCount', context._preloadCount - 1);
                  cov_1u3dqh78v9.s[68]++;
                  context._runIfPreloadsAreDone();
                } else {
                  cov_1u3dqh78v9.b[19][1]++;
                }
              };
              cov_1u3dqh78v9.s[69]++;

              this._wrapPreload = function(obj, fnName) {
                var _this2 = this;
                cov_1u3dqh78v9.f[4]++;
                cov_1u3dqh78v9.s[70]++;
                return function() {
                  cov_1u3dqh78v9.f[5]++;
                  cov_1u3dqh78v9.s[71]++;
                  //increment counter
                  _this2._incrementPreload();
                  //call original function
                  cov_1u3dqh78v9.s[72]++;
                  for (
                    var _len = arguments.length, args = new Array(_len), _key = 0;
                    _key < _len;
                    _key++
                  ) {
                    args[_key] = arguments[_key];
                  }
                  return _this2._registeredPreloadMethods[fnName].apply(obj, args);
                };
              };
              cov_1u3dqh78v9.s[73]++;

              this._incrementPreload = function() {
                cov_1u3dqh78v9.f[6]++;
                var context = (cov_1u3dqh78v9.s[74]++,
                this._isGlobal
                  ? (cov_1u3dqh78v9.b[20][0]++, window)
                  : (cov_1u3dqh78v9.b[20][1]++, this));
                cov_1u3dqh78v9.s[75]++;
                context._setProperty('_preloadCount', context._preloadCount + 1);
              };
              cov_1u3dqh78v9.s[76]++;

              this._setup = function() {
                cov_1u3dqh78v9.f[7]++;
                cov_1u3dqh78v9.s[77]++;
                // Always create a default canvas.
                // Later on if the user calls createCanvas, this default one
                // will be replaced
                _this.createCanvas(
                  _this._defaultCanvasSize.width,
                  _this._defaultCanvasSize.height,
                  'p2d'
                );

                // return preload functions to their normal vals if switched by preload
                var context = (cov_1u3dqh78v9.s[78]++,
                _this._isGlobal
                  ? (cov_1u3dqh78v9.b[21][0]++, window)
                  : (cov_1u3dqh78v9.b[21][1]++, _this));
                cov_1u3dqh78v9.s[79]++;
                if (typeof context.preload === 'function') {
                  cov_1u3dqh78v9.b[22][0]++;
                  cov_1u3dqh78v9.s[80]++;
                  for (var f in _this._preloadMethods) {
                    cov_1u3dqh78v9.s[81]++;
                    context[f] = _this._preloadMethods[f][f];
                    cov_1u3dqh78v9.s[82]++;
                    if (
                      (cov_1u3dqh78v9.b[24][0]++, context[f]) &&
                      (cov_1u3dqh78v9.b[24][1]++, _this)
                    ) {
                      cov_1u3dqh78v9.b[23][0]++;
                      cov_1u3dqh78v9.s[83]++;
                      context[f] = context[f].bind(_this);
                    } else {
                      cov_1u3dqh78v9.b[23][1]++;
                    }
                  }
                } else {
                  cov_1u3dqh78v9.b[22][1]++;
                }

                // Record the time when sketch starts
                cov_1u3dqh78v9.s[84]++;
                _this._millisStart = window.performance.now();

                // Short-circuit on this, in case someone used the library in "global"
                // mode earlier
                cov_1u3dqh78v9.s[85]++;
                if (typeof context.setup === 'function') {
                  cov_1u3dqh78v9.b[25][0]++;
                  cov_1u3dqh78v9.s[86]++;
                  context.setup();
                } else {
                  cov_1u3dqh78v9.b[25][1]++;
                }

                // unhide any hidden canvases that were created
                var canvases = (cov_1u3dqh78v9.s[87]++,
                document.getElementsByTagName('canvas'));
                cov_1u3dqh78v9.s[88]++;
                var _iteratorNormalCompletion2 = true;
                var _didIteratorError2 = false;
                var _iteratorError2 = undefined;
                try {
                  for (
                    var _iterator2 = canvases[Symbol.iterator](), _step2;
                    !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done);
                    _iteratorNormalCompletion2 = true
                  ) {
                    var k = _step2.value;
                    cov_1u3dqh78v9.s[89]++;
                    if (k.dataset.hidden === 'true') {
                      cov_1u3dqh78v9.b[26][0]++;
                      cov_1u3dqh78v9.s[90]++;
                      k.style.visibility = '';
                      cov_1u3dqh78v9.s[91]++;
                      delete k.dataset.hidden;
                    } else {
                      cov_1u3dqh78v9.b[26][1]++;
                    }
                  }
                } catch (err) {
                  _didIteratorError2 = true;
                  _iteratorError2 = err;
                } finally {
                  try {
                    if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
                      _iterator2.return();
                    }
                  } finally {
                    if (_didIteratorError2) {
                      throw _iteratorError2;
                    }
                  }
                }
                cov_1u3dqh78v9.s[92]++;

                _this._lastFrameTime = window.performance.now();
                cov_1u3dqh78v9.s[93]++;
                _this._setupDone = true;
                cov_1u3dqh78v9.s[94]++;
                if (
                  (cov_1u3dqh78v9.b[28][0]++, _this._accessibleOutputs.grid) ||
                  (cov_1u3dqh78v9.b[28][1]++, _this._accessibleOutputs.text)
                ) {
                  cov_1u3dqh78v9.b[27][0]++;
                  cov_1u3dqh78v9.s[95]++;
                  _this._updateAccsOutput();
                } else {
                  cov_1u3dqh78v9.b[27][1]++;
                }
              };
              cov_1u3dqh78v9.s[96]++;

              this._draw = function() {
                cov_1u3dqh78v9.f[8]++;
                var now = (cov_1u3dqh78v9.s[97]++, window.performance.now());
                var time_since_last = (cov_1u3dqh78v9.s[98]++, now - _this._lastFrameTime);
                var target_time_between_frames = (cov_1u3dqh78v9.s[99]++,
                1000 / _this._targetFrameRate);

                // only draw if we really need to; don't overextend the browser.
                // draw if we're within 5ms of when our next frame should paint
                // (this will prevent us from giving up opportunities to draw
                // again when it's really about time for us to do so). fixes an
                // issue where the frameRate is too low if our refresh loop isn't
                // in sync with the browser. note that we have to draw once even
                // if looping is off, so we bypass the time delay if that
                // is the case.
                var epsilon = (cov_1u3dqh78v9.s[100]++, 5);
                cov_1u3dqh78v9.s[101]++;
                if (
                  (cov_1u3dqh78v9.b[30][0]++, !_this._loop) ||
                  (cov_1u3dqh78v9.b[30][1]++,
                  time_since_last >= target_time_between_frames - epsilon)
                ) {
                  cov_1u3dqh78v9.b[29][0]++;
                  cov_1u3dqh78v9.s[102]++;
                  //mandatory update values(matrixes and stack)
                  _this.redraw();
                  cov_1u3dqh78v9.s[103]++;
                  _this._frameRate = 1000.0 / (now - _this._lastFrameTime);
                  cov_1u3dqh78v9.s[104]++;
                  _this.deltaTime = now - _this._lastFrameTime;
                  cov_1u3dqh78v9.s[105]++;
                  _this._setProperty('deltaTime', _this.deltaTime);
                  cov_1u3dqh78v9.s[106]++;
                  _this._lastFrameTime = now;

                  // If the user is actually using mouse module, then update
                  // coordinates, otherwise skip. We can test this by simply
                  // checking if any of the mouse functions are available or not.
                  // NOTE : This reflects only in complete build or modular build.
                  cov_1u3dqh78v9.s[107]++;
                  if (typeof _this._updateMouseCoords !== 'undefined') {
                    cov_1u3dqh78v9.b[31][0]++;
                    cov_1u3dqh78v9.s[108]++;
                    _this._updateMouseCoords();

                    //reset delta values so they reset even if there is no mouse event to set them
                    // for example if the mouse is outside the screen
                    cov_1u3dqh78v9.s[109]++;
                    _this._setProperty('movedX', 0);
                    cov_1u3dqh78v9.s[110]++;
                    _this._setProperty('movedY', 0);
                  } else {
                    cov_1u3dqh78v9.b[31][1]++;
                  }
                } else {
                  cov_1u3dqh78v9.b[29][1]++;
                }

                // get notified the next time the browser gives us
                // an opportunity to draw.
                cov_1u3dqh78v9.s[111]++;
                if (_this._loop) {
                  cov_1u3dqh78v9.b[32][0]++;
                  cov_1u3dqh78v9.s[112]++;
                  _this._requestAnimId = window.requestAnimationFrame(_this._draw);
                } else {
                  cov_1u3dqh78v9.b[32][1]++;
                }
              };
              cov_1u3dqh78v9.s[113]++;

              this._setProperty = function(prop, value) {
                cov_1u3dqh78v9.f[9]++;
                cov_1u3dqh78v9.s[114]++;
                _this[prop] = value;
                cov_1u3dqh78v9.s[115]++;
                if (_this._isGlobal) {
                  cov_1u3dqh78v9.b[33][0]++;
                  cov_1u3dqh78v9.s[116]++;
                  window[prop] = value;
                } else {
                  cov_1u3dqh78v9.b[33][1]++;
                }
              };

              /**
               * Removes the entire p5 sketch. This will remove the canvas and any
               * elements created by p5.js. It will also stop the draw loop and unbind
               * any properties or methods from the window global scope. It will
               * leave a variable p5 in case you wanted to create a new p5 sketch.
               * If you like, you can set p5 = null to erase it. While all functions and
               * variables and objects created by the p5 library will be removed, any
               * other global variables created by your code will remain.
               *
               * @method remove
               * @example
               * <div class='norender'><code>
               * function draw() {
               *   ellipse(50, 50, 10, 10);
               * }
               *
               * function mousePressed() {
               *   remove(); // remove whole sketch on mouse press
               * }
               * </code></div>
               *
               * @alt
               * nothing displayed
               *
               */ cov_1u3dqh78v9.s[117]++;
              this.remove = function() {
                cov_1u3dqh78v9.f[10]++;
                var loadingScreen = (cov_1u3dqh78v9.s[118]++,
                document.getElementById(_this._loadingScreenId));
                cov_1u3dqh78v9.s[119]++;
                if (loadingScreen) {
                  cov_1u3dqh78v9.b[34][0]++;
                  cov_1u3dqh78v9.s[120]++;
                  loadingScreen.parentNode.removeChild(loadingScreen);
                  // Add 1 to preload counter to prevent the sketch ever executing setup()
                  cov_1u3dqh78v9.s[121]++;
                  _this._incrementPreload();
                } else {
                  cov_1u3dqh78v9.b[34][1]++;
                }
                cov_1u3dqh78v9.s[122]++;
                if (_this._curElement) {
                  cov_1u3dqh78v9.b[35][0]++;
                  cov_1u3dqh78v9.s[123]++;
                  // stop draw
                  _this._loop = false;
                  cov_1u3dqh78v9.s[124]++;
                  if (_this._requestAnimId) {
                    cov_1u3dqh78v9.b[36][0]++;
                    cov_1u3dqh78v9.s[125]++;
                    window.cancelAnimationFrame(_this._requestAnimId);
                  } else {
                    cov_1u3dqh78v9.b[36][1]++;
                  }

                  // unregister events sketch-wide
                  cov_1u3dqh78v9.s[126]++;
                  for (var ev in _this._events) {
                    cov_1u3dqh78v9.s[127]++;
                    window.removeEventListener(ev, _this._events[ev]);
                  }

                  // remove DOM elements created by p5, and listeners
                  cov_1u3dqh78v9.s[128]++;
                  var _iteratorNormalCompletion3 = true;
                  var _didIteratorError3 = false;
                  var _iteratorError3 = undefined;
                  try {
                    for (
                      var _iterator3 = _this._elements[Symbol.iterator](), _step3;
                      !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done);
                      _iteratorNormalCompletion3 = true
                    ) {
                      var e = _step3.value;
                      cov_1u3dqh78v9.s[129]++;
                      if (
                        (cov_1u3dqh78v9.b[38][0]++, e.elt) &&
                        (cov_1u3dqh78v9.b[38][1]++, e.elt.parentNode)
                      ) {
                        cov_1u3dqh78v9.b[37][0]++;
                        cov_1u3dqh78v9.s[130]++;
                        e.elt.parentNode.removeChild(e.elt);
                      } else {
                        cov_1u3dqh78v9.b[37][1]++;
                      }
                      cov_1u3dqh78v9.s[131]++;
                      for (var elt_ev in e._events) {
                        cov_1u3dqh78v9.s[132]++;
                        e.elt.removeEventListener(elt_ev, e._events[elt_ev]);
                      }
                    }

                    // call any registered remove functions
                  } catch (err) {
                    _didIteratorError3 = true;
                    _iteratorError3 = err;
                  } finally {
                    try {
                      if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
                        _iterator3.return();
                      }
                    } finally {
                      if (_didIteratorError3) {
                        throw _iteratorError3;
                      }
                    }
                  }
                  var self = (cov_1u3dqh78v9.s[133]++, _this);
                  cov_1u3dqh78v9.s[134]++;
                  _this._registeredMethods.remove.forEach(function(f) {
                    cov_1u3dqh78v9.f[11]++;
                    cov_1u3dqh78v9.s[135]++;
                    if (typeof f !== 'undefined') {
                      cov_1u3dqh78v9.b[39][0]++;
                      cov_1u3dqh78v9.s[136]++;
                      f.call(self);
                    } else {
                      cov_1u3dqh78v9.b[39][1]++;
                    }
                  });
                } else {
                  cov_1u3dqh78v9.b[35][1]++;
                }
                // remove window bound properties and methods
                cov_1u3dqh78v9.s[137]++;
                if (_this._isGlobal) {
                  cov_1u3dqh78v9.b[40][0]++;
                  cov_1u3dqh78v9.s[138]++;
                  for (var p in p5.prototype) {
                    cov_1u3dqh78v9.s[139]++;
                    try {
                      cov_1u3dqh78v9.s[140]++;
                      delete window[p];
                    } catch (x) {
                      cov_1u3dqh78v9.s[141]++;
                      window[p] = undefined;
                    }
                  }
                  cov_1u3dqh78v9.s[142]++;
                  for (var p2 in _this) {
                    cov_1u3dqh78v9.s[143]++;
                    if (_this.hasOwnProperty(p2)) {
                      cov_1u3dqh78v9.b[41][0]++;
                      cov_1u3dqh78v9.s[144]++;
                      try {
                        cov_1u3dqh78v9.s[145]++;
                        delete window[p2];
                      } catch (x) {
                        cov_1u3dqh78v9.s[146]++;
                        window[p2] = undefined;
                      }
                    } else {
                      cov_1u3dqh78v9.b[41][1]++;
                    }
                  }
                  cov_1u3dqh78v9.s[147]++;
                  p5.instance = null;
                } else {
                  cov_1u3dqh78v9.b[40][1]++;
                }
              };

              // call any registered init functions
              cov_1u3dqh78v9.s[148]++;
              this._registeredMethods.init.forEach(function(f) {
                cov_1u3dqh78v9.f[12]++;
                cov_1u3dqh78v9.s[149]++;
                if (typeof f !== 'undefined') {
                  cov_1u3dqh78v9.b[42][0]++;
                  cov_1u3dqh78v9.s[150]++;
                  f.call(this);
                } else {
                  cov_1u3dqh78v9.b[42][1]++;
                }
              }, this);
              // Set up promise preloads
              cov_1u3dqh78v9.s[151]++;
              this._setupPromisePreloads();

              var friendlyBindGlobal = (cov_1u3dqh78v9.s[152]++,
              this._createFriendlyGlobalFunctionBinder());

              // If the user has created a global setup or draw function,
              // assume "global" mode and make everything global (i.e. on the window)
              cov_1u3dqh78v9.s[153]++;
              if (!sketch) {
                cov_1u3dqh78v9.b[43][0]++;
                cov_1u3dqh78v9.s[154]++;
                this._isGlobal = true;
                cov_1u3dqh78v9.s[155]++;
                p5.instance = this;
                // Loop through methods on the prototype and attach them to the window
                cov_1u3dqh78v9.s[156]++;
                for (var p in p5.prototype) {
                  cov_1u3dqh78v9.s[157]++;
                  if (typeof p5.prototype[p] === 'function') {
                    cov_1u3dqh78v9.b[44][0]++;
                    var ev = (cov_1u3dqh78v9.s[158]++, p.substring(2));
                    cov_1u3dqh78v9.s[159]++;
                    if (!this._events.hasOwnProperty(ev)) {
                      cov_1u3dqh78v9.b[45][0]++;
                      cov_1u3dqh78v9.s[160]++;
                      if (
                        (cov_1u3dqh78v9.b[47][0]++, Math.hasOwnProperty(p)) &&
                        (cov_1u3dqh78v9.b[47][1]++, Math[p] === p5.prototype[p])
                      ) {
                        cov_1u3dqh78v9.b[46][0]++;
                        cov_1u3dqh78v9.s[161]++;
                        // Multiple p5 methods are just native Math functions. These can be
                        // called without any binding.
                        friendlyBindGlobal(p, p5.prototype[p]);
                      } else {
                        cov_1u3dqh78v9.b[46][1]++;
                        cov_1u3dqh78v9.s[162]++;
                        friendlyBindGlobal(p, p5.prototype[p].bind(this));
                      }
                    } else {
                      cov_1u3dqh78v9.b[45][1]++;
                    }
                  } else {
                    cov_1u3dqh78v9.b[44][1]++;
                    cov_1u3dqh78v9.s[163]++;
                    friendlyBindGlobal(p, p5.prototype[p]);
                  }
                }
                // Attach its properties to the window
                cov_1u3dqh78v9.s[164]++;
                for (var p2 in this) {
                  cov_1u3dqh78v9.s[165]++;
                  if (this.hasOwnProperty(p2)) {
                    cov_1u3dqh78v9.b[48][0]++;
                    cov_1u3dqh78v9.s[166]++;
                    friendlyBindGlobal(p2, this[p2]);
                  } else {
                    cov_1u3dqh78v9.b[48][1]++;
                  }
                }
              } else {
                cov_1u3dqh78v9.b[43][1]++;
                cov_1u3dqh78v9.s[167]++;
                // Else, the user has passed in a sketch closure that may set
                // user-provided 'setup', 'draw', etc. properties on this instance of p5
                sketch(this);

                // Run a check to see if the user has misspelled 'setup', 'draw', etc
                // detects capitalization mistakes only ( Setup, SETUP, MouseClicked, etc)
                cov_1u3dqh78v9.s[168]++;
                p5._checkForUserDefinedFunctions(this);
              }

              // Bind events to window (not using container div bc key events don't work)
              cov_1u3dqh78v9.s[169]++;
              for (var e in this._events) {
                var f = (cov_1u3dqh78v9.s[170]++, this['_on'.concat(e)]);
                cov_1u3dqh78v9.s[171]++;
                if (f) {
                  cov_1u3dqh78v9.b[49][0]++;
                  var m = (cov_1u3dqh78v9.s[172]++, f.bind(this));
                  cov_1u3dqh78v9.s[173]++;
                  window.addEventListener(e, m, { passive: false });
                  cov_1u3dqh78v9.s[174]++;
                  this._events[e] = m;
                } else {
                  cov_1u3dqh78v9.b[49][1]++;
                }
              }
              cov_1u3dqh78v9.s[175]++;

              var focusHandler = function focusHandler() {
                cov_1u3dqh78v9.f[13]++;
                cov_1u3dqh78v9.s[176]++;
                _this._setProperty('focused', true);
              };
              cov_1u3dqh78v9.s[177]++;
              var blurHandler = function blurHandler() {
                cov_1u3dqh78v9.f[14]++;
                cov_1u3dqh78v9.s[178]++;
                _this._setProperty('focused', false);
              };
              cov_1u3dqh78v9.s[179]++;
              window.addEventListener('focus', focusHandler);
              cov_1u3dqh78v9.s[180]++;
              window.addEventListener('blur', blurHandler);
              cov_1u3dqh78v9.s[181]++;
              this.registerMethod('remove', function() {
                cov_1u3dqh78v9.f[15]++;
                cov_1u3dqh78v9.s[182]++;
                window.removeEventListener('focus', focusHandler);
                cov_1u3dqh78v9.s[183]++;
                window.removeEventListener('blur', blurHandler);
              });
              cov_1u3dqh78v9.s[184]++;

              if (document.readyState === 'complete') {
                cov_1u3dqh78v9.b[50][0]++;
                cov_1u3dqh78v9.s[185]++;
                this._start();
              } else {
                cov_1u3dqh78v9.b[50][1]++;
                cov_1u3dqh78v9.s[186]++;
                window.addEventListener('load', this._start.bind(this), false);
              }
            }
            _createClass(p5, [
              {
                key: '_initializeInstanceVariables',
                value: function _initializeInstanceVariables() {
                  cov_1u3dqh78v9.f[16]++;
                  cov_1u3dqh78v9.s[187]++;
                  this._accessibleOutputs = {
                    text: false,
                    grid: false,
                    textLabel: false,
                    gridLabel: false
                  };
                  cov_1u3dqh78v9.s[188]++;

                  this._styles = [];
                  cov_1u3dqh78v9.s[189]++;

                  this._bezierDetail = 20;
                  cov_1u3dqh78v9.s[190]++;
                  this._curveDetail = 20;
                  cov_1u3dqh78v9.s[191]++;

                  this._colorMode = constants.RGB;
                  cov_1u3dqh78v9.s[192]++;
                  this._colorMaxes = {
                    rgb: [255, 255, 255, 255],
                    hsb: [360, 100, 100, 1],
                    hsl: [360, 100, 100, 1]
                  };
                  cov_1u3dqh78v9.s[193]++;

                  this._downKeys = {}; //Holds the key codes of currently pressed keys
                }
              },
              {
                key: 'registerPreloadMethod',
                value: function registerPreloadMethod(fnString, obj) {
                  cov_1u3dqh78v9.f[17]++;
                  cov_1u3dqh78v9.s[194]++;
                  // obj = obj || p5.prototype;
                  if (!p5.prototype._preloadMethods.hasOwnProperty(fnString)) {
                    cov_1u3dqh78v9.b[51][0]++;
                    cov_1u3dqh78v9.s[195]++;
                    p5.prototype._preloadMethods[fnString] = obj;
                  } else {
                    cov_1u3dqh78v9.b[51][1]++;
                  }
                }
              },
              {
                key: 'registerMethod',
                value: function registerMethod(name, m) {
                  cov_1u3dqh78v9.f[18]++;
                  var target = (cov_1u3dqh78v9.s[196]++,
                  (cov_1u3dqh78v9.b[52][0]++, this) ||
                    (cov_1u3dqh78v9.b[52][1]++, p5.prototype));
                  cov_1u3dqh78v9.s[197]++;
                  if (!target._registeredMethods.hasOwnProperty(name)) {
                    cov_1u3dqh78v9.b[53][0]++;
                    cov_1u3dqh78v9.s[198]++;
                    target._registeredMethods[name] = [];
                  } else {
                    cov_1u3dqh78v9.b[53][1]++;
                  }
                  cov_1u3dqh78v9.s[199]++;
                  target._registeredMethods[name].push(m);
                }

                // create a function which provides a standardized process for binding
                // globals; this is implemented as a factory primarily so that there's a
                // way to redefine what "global" means for the binding function so it
                // can be used in scenarios like unit testing where the window object
                // might not exist
              },
              {
                key: '_createFriendlyGlobalFunctionBinder',
                value: function _createFriendlyGlobalFunctionBinder() {
                  var options =
                    arguments.length > 0 && arguments[0] !== undefined
                      ? arguments[0]
                      : (cov_1u3dqh78v9.b[54][0]++, {});
                  cov_1u3dqh78v9.f[19]++;
                  var globalObject = (cov_1u3dqh78v9.s[200]++,
                  (cov_1u3dqh78v9.b[55][0]++, options.globalObject) ||
                    (cov_1u3dqh78v9.b[55][1]++, window));
                  var log = (cov_1u3dqh78v9.s[201]++,
                  (cov_1u3dqh78v9.b[56][0]++, options.log) ||
                    (cov_1u3dqh78v9.b[56][1]++, console.log.bind(console)));
                  var propsToForciblyOverwrite = (cov_1u3dqh78v9.s[202]++,
                  {
                    // p5.print actually always overwrites an existing global function,
                    // albeit one that is very unlikely to be used:
                    //
                    //   https://developer.mozilla.org/en-US/docs/Web/API/Window/print
                    print: true
                  });
                  cov_1u3dqh78v9.s[203]++;

                  return function(prop, value) {
                    cov_1u3dqh78v9.f[20]++;
                    cov_1u3dqh78v9.s[204]++;
                    if (
                      (cov_1u3dqh78v9.b[58][0]++, !p5.disableFriendlyErrors) &&
                      (cov_1u3dqh78v9.b[58][1]++, typeof IS_MINIFIED === 'undefined') &&
                      (cov_1u3dqh78v9.b[58][2]++, typeof value === 'function') &&
                      (cov_1u3dqh78v9.b[58][3]++, !(prop in p5.prototype._preloadMethods))
                    ) {
                      cov_1u3dqh78v9.b[57][0]++;
                      cov_1u3dqh78v9.s[205]++;
                      try {
                        cov_1u3dqh78v9.s[206]++;
                        // Because p5 has so many common function names, it's likely
                        // that users may accidentally overwrite global p5 functions with
                        // their own variables. Let's allow this but log a warning to
                        // help users who may be doing this unintentionally.
                        //
                        // For more information, see:
                        //
                        //   https://github.com/processing/p5.js/issues/1317

                        if (
                          (cov_1u3dqh78v9.b[60][0]++, prop in globalObject) &&
                          (cov_1u3dqh78v9.b[60][1]++, !(prop in propsToForciblyOverwrite))
                        ) {
                          cov_1u3dqh78v9.b[59][0]++;
                          cov_1u3dqh78v9.s[207]++;
                          throw new Error('global "'.concat(prop, '" already exists'));
                        } else {
                          cov_1u3dqh78v9.b[59][1]++;
                        }

                        // It's possible that this might throw an error because there
                        // are a lot of edge-cases in which `Object.defineProperty` might
                        // not succeed; since this functionality is only intended to
                        // help beginners anyways, we'll just catch such an exception
                        // if it occurs, and fall back to legacy behavior.
                        cov_1u3dqh78v9.s[208]++;
                        Object.defineProperty(globalObject, prop, {
                          configurable: true,
                          enumerable: true,
                          get: function get() {
                            cov_1u3dqh78v9.f[21]++;
                            cov_1u3dqh78v9.s[209]++;
                            return value;
                          },
                          set: function set(newValue) {
                            cov_1u3dqh78v9.f[22]++;
                            cov_1u3dqh78v9.s[210]++;
                            Object.defineProperty(globalObject, prop, {
                              configurable: true,
                              enumerable: true,
                              value: newValue,
                              writable: true
                            });
                            cov_1u3dqh78v9.s[211]++;

                            log(
                              'You just changed the value of "'.concat(
                                prop,
                                '", which was a p5 function. This could cause problems later if you\'re not careful.'
                              )
                            );
                          }
                        });
                      } catch (e) {
                        var message = (cov_1u3dqh78v9.s[212]++,
                        'p5 had problems creating the global function "'.concat(
                          prop,
                          '", possibly because your code is already using that name as a variable. You may want to rename your variable to something else.'
                        ));
                        cov_1u3dqh78v9.s[213]++;
                        p5._friendlyError(message, prop);
                        cov_1u3dqh78v9.s[214]++;
                        globalObject[prop] = value;
                      }
                    } else {
                      cov_1u3dqh78v9.b[57][1]++;
                      cov_1u3dqh78v9.s[215]++;
                      globalObject[prop] = value;
                    }
                  };
                }
              }
            ]);
            return p5;
          })();

          // This is a pointer to our global mode p5 instance, if we're in
          // global mode.
          cov_1u3dqh78v9.s[216]++;
          p5.instance = null;

          /**
           * Allows for the friendly error system (FES) to be turned off when creating a sketch,
           * which can give a significant boost to performance when needed.
           * See <a href='https://github.com/processing/p5.js/wiki/Optimizing-p5.js-Code-for-Performance#disable-the-friendly-error-system-fes'>
           * disabling the friendly error system</a>.
           *
           * @property {Boolean} disableFriendlyErrors
           * @example
           * <div class="norender notest"><code>
           * p5.disableFriendlyErrors = true;
           *
           * function setup() {
           *   createCanvas(100, 50);
           * }
           * </code></div>
           */ cov_1u3dqh78v9.s[217]++;
          p5.disableFriendlyErrors = false;

          // attach constants to p5 prototype
          cov_1u3dqh78v9.s[218]++;
          for (var k in constants) {
            cov_1u3dqh78v9.s[219]++;
            p5.prototype[k] = constants[k];
          }

          // functions that cause preload to wait
          // more can be added by using registerPreloadMethod(func)
          cov_1u3dqh78v9.s[220]++;
          p5.prototype._preloadMethods = {
            loadJSON: p5.prototype,
            loadImage: p5.prototype,
            loadStrings: p5.prototype,
            loadXML: p5.prototype,
            loadBytes: p5.prototype,
            loadTable: p5.prototype,
            loadFont: p5.prototype,
            loadModel: p5.prototype,
            loadShader: p5.prototype
          };
          cov_1u3dqh78v9.s[221]++;

          p5.prototype._registeredMethods = { init: [], pre: [], post: [], remove: [] };
          cov_1u3dqh78v9.s[222]++;

          p5.prototype._registeredPreloadMethods = {};
          var _default = p5;
          exports.default = _default;
        },
        {
          './constants': 272,
          './shim': 294,
          'core-js/modules/es.array.for-each': 170,
          'core-js/modules/es.array.iterator': 174,
          'core-js/modules/es.array.slice': 178,
          'core-js/modules/es.object.get-own-property-names': 189,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.string.iterator': 201,
          'core-js/modules/es.symbol': 211,
          'core-js/modules/es.symbol.description': 209,
          'core-js/modules/es.symbol.iterator': 210,
          'core-js/modules/web.dom-collections.for-each': 243,
          'core-js/modules/web.dom-collections.iterator': 244
        }
      ],
      284: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_1oivrkq345 = (function() {
            var path = '/Users/outofambit/src/p5.js/src/core/p5.Element.js';
            var hash = 'e3a23031efd2fced861017c4883ff4dc2a11f433';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/core/p5.Element.js',
              statementMap: {
                '0': { start: { line: 20, column: 0 }, end: { line: 45, column: 2 } },
                '1': { start: { line: 40, column: 2 }, end: { line: 40, column: 17 } },
                '2': { start: { line: 41, column: 2 }, end: { line: 41, column: 42 } },
                '3': { start: { line: 42, column: 2 }, end: { line: 42, column: 20 } },
                '4': { start: { line: 43, column: 2 }, end: { line: 43, column: 36 } },
                '5': { start: { line: 44, column: 2 }, end: { line: 44, column: 38 } },
                '6': { start: { line: 97, column: 0 }, end: { line: 112, column: 2 } },
                '7': { start: { line: 98, column: 2 }, end: { line: 100, column: 3 } },
                '8': { start: { line: 99, column: 4 }, end: { line: 99, column: 31 } },
                '9': { start: { line: 102, column: 2 }, end: { line: 109, column: 3 } },
                '10': { start: { line: 103, column: 4 }, end: { line: 105, column: 5 } },
                '11': { start: { line: 104, column: 6 }, end: { line: 104, column: 25 } },
                '12': { start: { line: 106, column: 4 }, end: { line: 106, column: 35 } },
                '13': { start: { line: 107, column: 9 }, end: { line: 109, column: 3 } },
                '14': { start: { line: 108, column: 4 }, end: { line: 108, column: 14 } },
                '15': { start: { line: 110, column: 2 }, end: { line: 110, column: 26 } },
                '16': { start: { line: 111, column: 2 }, end: { line: 111, column: 14 } },
                '17': { start: { line: 143, column: 0 }, end: { line: 152, column: 2 } },
                '18': { start: { line: 144, column: 2 }, end: { line: 146, column: 3 } },
                '19': { start: { line: 145, column: 4 }, end: { line: 145, column: 23 } },
                '20': { start: { line: 148, column: 2 }, end: { line: 148, column: 19 } },
                '21': { start: { line: 149, column: 2 }, end: { line: 149, column: 36 } },
                '22': { start: { line: 150, column: 2 }, end: { line: 150, column: 38 } },
                '23': { start: { line: 151, column: 2 }, end: { line: 151, column: 14 } },
                '24': { start: { line: 180, column: 0 }, end: { line: 187, column: 2 } },
                '25': { start: { line: 181, column: 2 }, end: { line: 183, column: 3 } },
                '26': { start: { line: 182, column: 4 }, end: { line: 182, column: 30 } },
                '27': { start: { line: 185, column: 2 }, end: { line: 185, column: 25 } },
                '28': { start: { line: 186, column: 2 }, end: { line: 186, column: 14 } },
                '29': { start: { line: 231, column: 0 }, end: { line: 244, column: 2 } },
                '30': { start: { line: 235, column: 28 }, end: { line: 240, column: 3 } },
                '31': { start: { line: 236, column: 4 }, end: { line: 236, column: 53 } },
                '32': { start: { line: 237, column: 4 }, end: { line: 237, column: 39 } },
                '33': { start: { line: 239, column: 4 }, end: { line: 239, column: 26 } },
                '34': { start: { line: 242, column: 2 }, end: { line: 242, column: 67 } },
                '35': { start: { line: 243, column: 2 }, end: { line: 243, column: 14 } },
                '36': { start: { line: 287, column: 0 }, end: { line: 290, column: 2 } },
                '37': { start: { line: 288, column: 2 }, end: { line: 288, column: 52 } },
                '38': { start: { line: 289, column: 2 }, end: { line: 289, column: 14 } },
                '39': { start: { line: 349, column: 0 }, end: { line: 352, column: 2 } },
                '40': { start: { line: 350, column: 2 }, end: { line: 350, column: 49 } },
                '41': { start: { line: 351, column: 2 }, end: { line: 351, column: 14 } },
                '42': { start: { line: 398, column: 0 }, end: { line: 401, column: 2 } },
                '43': { start: { line: 399, column: 2 }, end: { line: 399, column: 51 } },
                '44': { start: { line: 400, column: 2 }, end: { line: 400, column: 14 } },
                '45': { start: { line: 449, column: 0 }, end: { line: 452, column: 2 } },
                '46': { start: { line: 450, column: 2 }, end: { line: 450, column: 49 } },
                '47': { start: { line: 451, column: 2 }, end: { line: 451, column: 14 } },
                '48': { start: { line: 505, column: 0 }, end: { line: 508, column: 2 } },
                '49': { start: { line: 506, column: 2 }, end: { line: 506, column: 53 } },
                '50': { start: { line: 507, column: 2 }, end: { line: 507, column: 14 } },
                '51': { start: { line: 546, column: 0 }, end: { line: 549, column: 2 } },
                '52': { start: { line: 547, column: 2 }, end: { line: 547, column: 53 } },
                '53': { start: { line: 548, column: 2 }, end: { line: 548, column: 14 } },
                '54': { start: { line: 587, column: 0 }, end: { line: 590, column: 2 } },
                '55': { start: { line: 588, column: 2 }, end: { line: 588, column: 52 } },
                '56': { start: { line: 589, column: 2 }, end: { line: 589, column: 14 } },
                '57': { start: { line: 634, column: 0 }, end: { line: 637, column: 2 } },
                '58': { start: { line: 635, column: 2 }, end: { line: 635, column: 54 } },
                '59': { start: { line: 636, column: 2 }, end: { line: 636, column: 14 } },
                '60': { start: { line: 673, column: 0 }, end: { line: 676, column: 2 } },
                '61': { start: { line: 674, column: 2 }, end: { line: 674, column: 53 } },
                '62': { start: { line: 675, column: 2 }, end: { line: 675, column: 14 } },
                '63': { start: { line: 720, column: 0 }, end: { line: 723, column: 2 } },
                '64': { start: { line: 721, column: 2 }, end: { line: 721, column: 52 } },
                '65': { start: { line: 722, column: 2 }, end: { line: 722, column: 14 } },
                '66': { start: { line: 758, column: 0 }, end: { line: 761, column: 2 } },
                '67': { start: { line: 759, column: 2 }, end: { line: 759, column: 52 } },
                '68': { start: { line: 760, column: 2 }, end: { line: 760, column: 14 } },
                '69': { start: { line: 796, column: 0 }, end: { line: 799, column: 2 } },
                '70': { start: { line: 797, column: 2 }, end: { line: 797, column: 53 } },
                '71': { start: { line: 798, column: 2 }, end: { line: 798, column: 14 } },
                '72': { start: { line: 802, column: 0 }, end: { line: 809, column: 2 } },
                '73': { start: { line: 803, column: 2 }, end: { line: 807, column: 3 } },
                '74': { start: { line: 804, column: 4 }, end: { line: 804, column: 40 } },
                '75': { start: { line: 806, column: 4 }, end: { line: 806, column: 45 } },
                '76': { start: { line: 808, column: 2 }, end: { line: 808, column: 14 } },
                '77': { start: { line: 811, column: 0 }, end: { line: 819, column: 2 } },
                '78': { start: { line: 813, column: 2 }, end: { line: 815, column: 3 } },
                '79': { start: { line: 814, column: 4 }, end: { line: 814, column: 40 } },
                '80': { start: { line: 816, column: 12 }, end: { line: 816, column: 25 } },
                '81': { start: { line: 817, column: 2 }, end: { line: 817, column: 41 } },
                '82': { start: { line: 818, column: 2 }, end: { line: 818, column: 22 } },
                '83': { start: { line: 821, column: 0 }, end: { line: 825, column: 2 } },
                '84': { start: { line: 822, column: 12 }, end: { line: 822, column: 27 } },
                '85': { start: { line: 823, column: 2 }, end: { line: 823, column: 44 } },
                '86': { start: { line: 824, column: 2 }, end: { line: 824, column: 25 } },
                '87': { start: { line: 830, column: 0 }, end: { line: 832, column: 2 } },
                '88': { start: { line: 831, column: 2 }, end: { line: 831, column: 21 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 20, column: 13 }, end: { line: 20, column: 14 } },
                  loc: { start: { line: 20, column: 34 }, end: { line: 45, column: 1 } },
                  line: 20
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 97, column: 30 }, end: { line: 97, column: 31 } },
                  loc: { start: { line: 97, column: 42 }, end: { line: 112, column: 1 } },
                  line: 97
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 143, column: 26 },
                    end: { line: 143, column: 27 }
                  },
                  loc: { start: { line: 143, column: 39 }, end: { line: 152, column: 1 } },
                  line: 143
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 180, column: 29 },
                    end: { line: 180, column: 30 }
                  },
                  loc: { start: { line: 180, column: 41 }, end: { line: 187, column: 1 } },
                  line: 180
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 231, column: 36 },
                    end: { line: 231, column: 37 }
                  },
                  loc: { start: { line: 231, column: 50 }, end: { line: 244, column: 1 } },
                  line: 231
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 235, column: 28 },
                    end: { line: 235, column: 29 }
                  },
                  loc: { start: { line: 235, column: 44 }, end: { line: 240, column: 3 } },
                  line: 235
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 287, column: 37 },
                    end: { line: 287, column: 38 }
                  },
                  loc: { start: { line: 287, column: 51 }, end: { line: 290, column: 1 } },
                  line: 287
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 349, column: 34 },
                    end: { line: 349, column: 35 }
                  },
                  loc: { start: { line: 349, column: 48 }, end: { line: 352, column: 1 } },
                  line: 349
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 398, column: 37 },
                    end: { line: 398, column: 38 }
                  },
                  loc: { start: { line: 398, column: 51 }, end: { line: 401, column: 1 } },
                  line: 398
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 449, column: 36 },
                    end: { line: 449, column: 37 }
                  },
                  loc: { start: { line: 449, column: 50 }, end: { line: 452, column: 1 } },
                  line: 449
                },
                '10': {
                  name: '(anonymous_10)',
                  decl: {
                    start: { line: 505, column: 34 },
                    end: { line: 505, column: 35 }
                  },
                  loc: { start: { line: 505, column: 48 }, end: { line: 508, column: 1 } },
                  line: 505
                },
                '11': {
                  name: '(anonymous_11)',
                  decl: {
                    start: { line: 546, column: 33 },
                    end: { line: 546, column: 34 }
                  },
                  loc: { start: { line: 546, column: 47 }, end: { line: 549, column: 1 } },
                  line: 546
                },
                '12': {
                  name: '(anonymous_12)',
                  decl: {
                    start: { line: 587, column: 32 },
                    end: { line: 587, column: 33 }
                  },
                  loc: { start: { line: 587, column: 46 }, end: { line: 590, column: 1 } },
                  line: 587
                },
                '13': {
                  name: '(anonymous_13)',
                  decl: {
                    start: { line: 634, column: 36 },
                    end: { line: 634, column: 37 }
                  },
                  loc: { start: { line: 634, column: 50 }, end: { line: 637, column: 1 } },
                  line: 634
                },
                '14': {
                  name: '(anonymous_14)',
                  decl: {
                    start: { line: 673, column: 34 },
                    end: { line: 673, column: 35 }
                  },
                  loc: { start: { line: 673, column: 48 }, end: { line: 676, column: 1 } },
                  line: 673
                },
                '15': {
                  name: '(anonymous_15)',
                  decl: {
                    start: { line: 720, column: 34 },
                    end: { line: 720, column: 35 }
                  },
                  loc: { start: { line: 720, column: 48 }, end: { line: 723, column: 1 } },
                  line: 720
                },
                '16': {
                  name: '(anonymous_16)',
                  decl: {
                    start: { line: 758, column: 32 },
                    end: { line: 758, column: 33 }
                  },
                  loc: { start: { line: 758, column: 46 }, end: { line: 761, column: 1 } },
                  line: 758
                },
                '17': {
                  name: '(anonymous_17)',
                  decl: {
                    start: { line: 796, column: 33 },
                    end: { line: 796, column: 34 }
                  },
                  loc: { start: { line: 796, column: 47 }, end: { line: 799, column: 1 } },
                  line: 796
                },
                '18': {
                  name: '(anonymous_18)',
                  decl: {
                    start: { line: 802, column: 29 },
                    end: { line: 802, column: 30 }
                  },
                  loc: { start: { line: 802, column: 52 }, end: { line: 809, column: 1 } },
                  line: 802
                },
                '19': {
                  name: '(anonymous_19)',
                  decl: {
                    start: { line: 811, column: 29 },
                    end: { line: 811, column: 30 }
                  },
                  loc: { start: { line: 811, column: 52 }, end: { line: 819, column: 1 } },
                  line: 811
                },
                '20': {
                  name: '(anonymous_20)',
                  decl: {
                    start: { line: 821, column: 29 },
                    end: { line: 821, column: 30 }
                  },
                  loc: { start: { line: 821, column: 47 }, end: { line: 825, column: 1 } },
                  line: 821
                },
                '21': {
                  name: '(anonymous_21)',
                  decl: {
                    start: { line: 830, column: 36 },
                    end: { line: 830, column: 37 }
                  },
                  loc: { start: { line: 830, column: 58 }, end: { line: 832, column: 1 } },
                  line: 830
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 98, column: 2 }, end: { line: 100, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 98, column: 2 }, end: { line: 100, column: 3 } },
                    { start: { line: 98, column: 2 }, end: { line: 100, column: 3 } }
                  ],
                  line: 98
                },
                '1': {
                  loc: { start: { line: 102, column: 2 }, end: { line: 109, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 102, column: 2 }, end: { line: 109, column: 3 } },
                    { start: { line: 102, column: 2 }, end: { line: 109, column: 3 } }
                  ],
                  line: 102
                },
                '2': {
                  loc: { start: { line: 103, column: 4 }, end: { line: 105, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 103, column: 4 }, end: { line: 105, column: 5 } },
                    { start: { line: 103, column: 4 }, end: { line: 105, column: 5 } }
                  ],
                  line: 103
                },
                '3': {
                  loc: { start: { line: 107, column: 9 }, end: { line: 109, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 107, column: 9 }, end: { line: 109, column: 3 } },
                    { start: { line: 107, column: 9 }, end: { line: 109, column: 3 } }
                  ],
                  line: 107
                },
                '4': {
                  loc: { start: { line: 144, column: 2 }, end: { line: 146, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 144, column: 2 }, end: { line: 146, column: 3 } },
                    { start: { line: 144, column: 2 }, end: { line: 146, column: 3 } }
                  ],
                  line: 144
                },
                '5': {
                  loc: { start: { line: 181, column: 2 }, end: { line: 183, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 181, column: 2 }, end: { line: 183, column: 3 } },
                    { start: { line: 181, column: 2 }, end: { line: 183, column: 3 } }
                  ],
                  line: 181
                },
                '6': {
                  loc: { start: { line: 803, column: 2 }, end: { line: 807, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 803, column: 2 }, end: { line: 807, column: 3 } },
                    { start: { line: 803, column: 2 }, end: { line: 807, column: 3 } }
                  ],
                  line: 803
                },
                '7': {
                  loc: { start: { line: 813, column: 2 }, end: { line: 815, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 813, column: 2 }, end: { line: 815, column: 3 } },
                    { start: { line: 813, column: 2 }, end: { line: 815, column: 3 } }
                  ],
                  line: 813
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: 'e3a23031efd2fced861017c4883ff4dc2a11f433'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('./main'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_1oivrkq345.s[0]++;

          /**
           * Base class for all elements added to a sketch, including canvas,
           * graphics buffers, and other HTML elements. It is not called directly, but <a href="#/p5.Element">p5.Element</a>
           * objects are created by calling <a href="#/p5/createCanvas">createCanvas</a>, <a href="#/p5/createGraphics">createGraphics</a>,
           * <a href="#/p5/createDiv">createDiv</a>, <a href="#/p5/createImg">createImg</a>, <a href="#/p5/createInput">createInput</a>, etc.
           *
           * @class p5.Element
           * @constructor
           * @param {String} elt DOM node that is wrapped
           * @param {p5} [pInst] pointer to p5 instance
           */
          _main.default.Element = function(elt, pInst) {
            cov_1oivrkq345.f[0]++;
            cov_1oivrkq345.s[1]++;
            /**
             * Underlying HTML element. All normal HTML methods can be called on this.
             * @example
             * <div>
             * <code>
             * function setup() {
             *   let c = createCanvas(50, 50);
             *   c.elt.style.border = '5px solid red';
             * }
             *
             * function draw() {
             *   background(220);
             * }
             * </code>
             * </div>
             *
             * @property elt
             * @readOnly
             */
            this.elt = elt;
            cov_1oivrkq345.s[2]++;
            this._pInst = this._pixelsState = pInst;
            cov_1oivrkq345.s[3]++;
            this._events = {};
            cov_1oivrkq345.s[4]++;
            this.width = this.elt.offsetWidth;
            cov_1oivrkq345.s[5]++;
            this.height = this.elt.offsetHeight;
          };

          /**
           *
           * Attaches the element to the parent specified. A way of setting
           * the container for the element. Accepts either a string ID, DOM
           * node, or <a href="#/p5.Element">p5.Element</a>. If no arguments given, parent node is returned.
           * For more ways to position the canvas, see the
           * <a href='https://github.com/processing/p5.js/wiki/Positioning-your-canvas'>
           * positioning the canvas</a> wiki page.
           *
           * @method parent
           * @param  {String|p5.Element|Object} parent the ID, DOM node, or <a href="#/p5.Element">p5.Element</a>
           *                         of desired parent element
           * @chainable
           *
           * @example
           * <div class="norender notest"><code>
           * // Add the following comment to html file.
           * // &lt;div id="myContainer">&lt;/div>
           *
           * // The js code
           * let cnv = createCanvas(100, 100);
           * cnv.parent('myContainer');
           * </code></div>
           *
           * <div class='norender'><code>
           * let div0 = createDiv('this is the parent');
           * let div1 = createDiv('this is the child');
           * div1.parent(div0); // use p5.Element
           * </code></div>
           *
           * <div class='norender'><code>
           * let div0 = createDiv('this is the parent');
           * div0.id('apples');
           * let div1 = createDiv('this is the child');
           * div1.parent('apples'); // use id
           * </code></div>
           *
           * <div class='norender notest'><code>
           * let elt = document.getElementById('myParentDiv');
           * let div1 = createDiv('this is the child');
           * div1.parent(elt); // use element from page
           * </code></div>
           *
           * @alt
           * no display.
           */
          /**
           * @method parent
           * @return {p5.Element}
           */ cov_1oivrkq345.s[6]++;
          _main.default.Element.prototype.parent = function(p) {
            cov_1oivrkq345.f[1]++;
            cov_1oivrkq345.s[7]++;
            if (typeof p === 'undefined') {
              cov_1oivrkq345.b[0][0]++;
              cov_1oivrkq345.s[8]++;
              return this.elt.parentNode;
            } else {
              cov_1oivrkq345.b[0][1]++;
            }
            cov_1oivrkq345.s[9]++;

            if (typeof p === 'string') {
              cov_1oivrkq345.b[1][0]++;
              cov_1oivrkq345.s[10]++;
              if (p[0] === '#') {
                cov_1oivrkq345.b[2][0]++;
                cov_1oivrkq345.s[11]++;
                p = p.substring(1);
              } else {
                cov_1oivrkq345.b[2][1]++;
              }
              cov_1oivrkq345.s[12]++;
              p = document.getElementById(p);
            } else {
              cov_1oivrkq345.b[1][1]++;
              cov_1oivrkq345.s[13]++;
              if (p instanceof _main.default.Element) {
                cov_1oivrkq345.b[3][0]++;
                cov_1oivrkq345.s[14]++;
                p = p.elt;
              } else {
                cov_1oivrkq345.b[3][1]++;
              }
            }
            cov_1oivrkq345.s[15]++;
            p.appendChild(this.elt);
            cov_1oivrkq345.s[16]++;
            return this;
          };

          /**
           *
           * Sets the ID of the element. If no ID argument is passed in, it instead
           * returns the current ID of the element.
           * Note that only one element can have a particular id in a page.
           * The <a href="#/p5.Element/class">.class()</a> function can be used
           * to identify multiple elements with the same class name.
           *
           * @method id
           * @param  {String} id ID of the element
           * @chainable
           *
           * @example
           * <div class='norender'><code>
           * function setup() {
           *   let cnv = createCanvas(100, 100);
           *   // Assigns a CSS selector ID to
           *   // the canvas element.
           *   cnv.id('mycanvas');
           * }
           * </code></div>
           *
           * @alt
           * no display.
           */
          /**
           * @method id
           * @return {String} the id of the element
           */ cov_1oivrkq345.s[17]++;
          _main.default.Element.prototype.id = function(id) {
            cov_1oivrkq345.f[2]++;
            cov_1oivrkq345.s[18]++;
            if (typeof id === 'undefined') {
              cov_1oivrkq345.b[4][0]++;
              cov_1oivrkq345.s[19]++;
              return this.elt.id;
            } else {
              cov_1oivrkq345.b[4][1]++;
            }
            cov_1oivrkq345.s[20]++;

            this.elt.id = id;
            cov_1oivrkq345.s[21]++;
            this.width = this.elt.offsetWidth;
            cov_1oivrkq345.s[22]++;
            this.height = this.elt.offsetHeight;
            cov_1oivrkq345.s[23]++;
            return this;
          };

          /**
           *
           * Adds given class to the element. If no class argument is passed in, it
           * instead returns a string containing the current class(es) of the element.
           *
           * @method class
           * @param  {String} class class to add
           * @chainable
           *
           * @example
           * <div class='norender'><code>
           * function setup() {
           *   let cnv = createCanvas(100, 100);
           *   // Assigns a CSS selector class 'small'
           *   // to the canvas element.
           *   cnv.class('small');
           * }
           * </code></div>
           *
           * @alt
           * no display.
           */
          /**
           * @method class
           * @return {String} the class of the element
           */ cov_1oivrkq345.s[24]++;
          _main.default.Element.prototype.class = function(c) {
            cov_1oivrkq345.f[3]++;
            cov_1oivrkq345.s[25]++;
            if (typeof c === 'undefined') {
              cov_1oivrkq345.b[5][0]++;
              cov_1oivrkq345.s[26]++;
              return this.elt.className;
            } else {
              cov_1oivrkq345.b[5][1]++;
            }
            cov_1oivrkq345.s[27]++;

            this.elt.className = c;
            cov_1oivrkq345.s[28]++;
            return this;
          };

          /**
           * The .<a href="#/p5.Element/mousePressed">mousePressed()</a> function is called
           * once after every time a mouse button is pressed over the element. Some mobile
           * browsers may also trigger this event on a touch screen, if the user performs
           * a quick tap. This can be used to attach element specific event listeners.
           *
           * @method mousePressed
           * @param  {Function|Boolean} fxn function to be fired when mouse is
           *                                pressed over the element.
           *                                if `false` is passed instead, the previously
           *                                firing function will no longer fire.
           * @chainable
           * @example
           * <div class='norender'><code>
           * let cnv, d, g;
           * function setup() {
           *   cnv = createCanvas(100, 100);
           *   cnv.mousePressed(changeGray); // attach listener for
           *   // canvas click only
           *   d = 10;
           *   g = 100;
           * }
           *
           * function draw() {
           *   background(g);
           *   ellipse(width / 2, height / 2, d, d);
           * }
           *
           * // this function fires with any click anywhere
           * function mousePressed() {
           *   d = d + 10;
           * }
           *
           * // this function fires only when cnv is clicked
           * function changeGray() {
           *   g = random(0, 255);
           * }
           * </code></div>
           *
           * @alt
           * no display.
           */ cov_1oivrkq345.s[29]++;
          _main.default.Element.prototype.mousePressed = function(fxn) {
            cov_1oivrkq345.f[4]++;
            cov_1oivrkq345.s[30]++;
            // Prepend the mouse property setters to the event-listener.
            // This is required so that mouseButton is set correctly prior to calling the callback (fxn).
            // For details, see https://github.com/processing/p5.js/issues/3087.
            var eventPrependedFxn = function eventPrependedFxn(event) {
              cov_1oivrkq345.f[5]++;
              cov_1oivrkq345.s[31]++;
              this._pInst._setProperty('mouseIsPressed', true);
              cov_1oivrkq345.s[32]++;
              this._pInst._setMouseButton(event);
              // Pass along the return-value of the callback:
              cov_1oivrkq345.s[33]++;
              return fxn.call(this);
            };
            // Pass along the event-prepended form of the callback.
            cov_1oivrkq345.s[34]++;
            _main.default.Element._adjustListener('mousedown', eventPrependedFxn, this);
            cov_1oivrkq345.s[35]++;
            return this;
          };

          /**
           * The .<a href="#/p5.Element/doubleClicked">doubleClicked()</a> function is called once after every time a
           * mouse button is pressed twice over the element. This can be used to
           * attach element and action specific event listeners.
           *
           * @method doubleClicked
           * @param  {Function|Boolean} fxn function to be fired when mouse is
           *                                double clicked over the element.
           *                                if `false` is passed instead, the previously
           *                                firing function will no longer fire.
           * @return {p5.Element}
           * @example
           * <div class='norender'><code>
           * let cnv, d, g;
           * function setup() {
           *   cnv = createCanvas(100, 100);
           *   cnv.doubleClicked(changeGray); // attach listener for
           *   // canvas double click only
           *   d = 10;
           *   g = 100;
           * }
           *
           * function draw() {
           *   background(g);
           *   ellipse(width / 2, height / 2, d, d);
           * }
           *
           * // this function fires with any double click anywhere
           * function doubleClicked() {
           *   d = d + 10;
           * }
           *
           * // this function fires only when cnv is double clicked
           * function changeGray() {
           *   g = random(0, 255);
           * }
           * </code></div>
           *
           * @alt
           * no display.
           */ cov_1oivrkq345.s[36]++;
          _main.default.Element.prototype.doubleClicked = function(fxn) {
            cov_1oivrkq345.f[6]++;
            cov_1oivrkq345.s[37]++;
            _main.default.Element._adjustListener('dblclick', fxn, this);
            cov_1oivrkq345.s[38]++;
            return this;
          };

          /**
           * The <a href="#/p5.Element/mouseWheel">mouseWheel()</a> function is called
           * once after every time a mouse wheel is scrolled over the element. This can
           * be used to attach element specific event listeners.
           *
           * The function accepts a callback function as argument which will be executed
           * when the `wheel` event is triggered on the element, the callback function is
           * passed one argument `event`. The `event.deltaY` property returns negative
           * values if the mouse wheel is rotated up or away from the user and positive
           * in the other direction. The `event.deltaX` does the same as `event.deltaY`
           * except it reads the horizontal wheel scroll of the mouse wheel.
           *
           * On OS X with "natural" scrolling enabled, the `event.deltaY` values are
           * reversed.
           *
           * @method mouseWheel
           * @param  {Function|Boolean} fxn function to be fired when mouse is
           *                                scrolled over the element.
           *                                if `false` is passed instead, the previously
           *                                firing function will no longer fire.
           * @chainable
           * @example
           * <div class='norender'><code>
           * let cnv, d, g;
           * function setup() {
           *   cnv = createCanvas(100, 100);
           *   cnv.mouseWheel(changeSize); // attach listener for
           *   // activity on canvas only
           *   d = 10;
           *   g = 100;
           * }
           *
           * function draw() {
           *   background(g);
           *   ellipse(width / 2, height / 2, d, d);
           * }
           *
           * // this function fires with mousewheel movement
           * // anywhere on screen
           * function mouseWheel() {
           *   g = g + 10;
           * }
           *
           * // this function fires with mousewheel movement
           * // over canvas only
           * function changeSize(event) {
           *   if (event.deltaY > 0) {
           *     d = d + 10;
           *   } else {
           *     d = d - 10;
           *   }
           * }
           * </code></div>
           *
           * @alt
           * no display.
           */ cov_1oivrkq345.s[39]++;
          _main.default.Element.prototype.mouseWheel = function(fxn) {
            cov_1oivrkq345.f[7]++;
            cov_1oivrkq345.s[40]++;
            _main.default.Element._adjustListener('wheel', fxn, this);
            cov_1oivrkq345.s[41]++;
            return this;
          };

          /**
           * The <a href="#/p5.Element/mouseReleased">mouseReleased()</a> function is
           * called once after every time a mouse button is released over the element.
           * Some mobile browsers may also trigger this event on a touch screen, if the
           * user performs a quick tap. This can be used to attach element specific event listeners.
           *
           * @method mouseReleased
           * @param  {Function|Boolean} fxn function to be fired when mouse is
           *                                released over the element.
           *                                if `false` is passed instead, the previously
           *                                firing function will no longer fire.
           * @chainable
           * @example
           * <div class='norender'><code>
           * let cnv, d, g;
           * function setup() {
           *   cnv = createCanvas(100, 100);
           *   cnv.mouseReleased(changeGray); // attach listener for
           *   // activity on canvas only
           *   d = 10;
           *   g = 100;
           * }
           *
           * function draw() {
           *   background(g);
           *   ellipse(width / 2, height / 2, d, d);
           * }
           *
           * // this function fires after the mouse has been
           * // released
           * function mouseReleased() {
           *   d = d + 10;
           * }
           *
           * // this function fires after the mouse has been
           * // released while on canvas
           * function changeGray() {
           *   g = random(0, 255);
           * }
           * </code></div>
           *
           * @alt
           * no display.
           */ cov_1oivrkq345.s[42]++;
          _main.default.Element.prototype.mouseReleased = function(fxn) {
            cov_1oivrkq345.f[8]++;
            cov_1oivrkq345.s[43]++;
            _main.default.Element._adjustListener('mouseup', fxn, this);
            cov_1oivrkq345.s[44]++;
            return this;
          };

          /**
           * The .<a href="#/p5.Element/mouseClicked">mouseClicked()</a> function is
           * called once after a mouse button is pressed and released over the element.
           * Some mobile browsers may also trigger this event on a touch screen, if the
           * user performs a quick tap.This can be used to attach element specific event listeners.
           *
           * @method mouseClicked
           * @param  {Function|Boolean} fxn function to be fired when mouse is
           *                                clicked over the element.
           *                                if `false` is passed instead, the previously
           *                                firing function will no longer fire.
           * @chainable
           * @example
           * <div class="norender">
           * <code>
           * let cnv, d, g;
           * function setup() {
           *   cnv = createCanvas(100, 100);
           *   cnv.mouseClicked(changeGray); // attach listener for
           *   // activity on canvas only
           *   d = 10;
           *   g = 100;
           * }
           *
           * function draw() {
           *   background(g);
           *   ellipse(width / 2, height / 2, d, d);
           * }
           *
           * // this function fires after the mouse has been
           * // clicked anywhere
           * function mouseClicked() {
           *   d = d + 10;
           * }
           *
           * // this function fires after the mouse has been
           * // clicked on canvas
           * function changeGray() {
           *   g = random(0, 255);
           * }
           * </code>
           * </div>
           *
           * @alt
           * no display.
           */ cov_1oivrkq345.s[45]++;
          _main.default.Element.prototype.mouseClicked = function(fxn) {
            cov_1oivrkq345.f[9]++;
            cov_1oivrkq345.s[46]++;
            _main.default.Element._adjustListener('click', fxn, this);
            cov_1oivrkq345.s[47]++;
            return this;
          };

          /**
           * The .<a href="#/p5.Element/mouseMoved">mouseMoved()</a> function is called once every time a
           * mouse moves over the element. This can be used to attach an
           * element specific event listener.
           *
           * @method mouseMoved
           * @param  {Function|Boolean} fxn function to be fired when a mouse moves
           *                                over the element.
           *                                if `false` is passed instead, the previously
           *                                firing function will no longer fire.
           * @chainable
           * @example
           * <div class='norender'><code>
           * let cnv;
           * let d = 30;
           * let g;
           * function setup() {
           *   cnv = createCanvas(100, 100);
           *   cnv.mouseMoved(changeSize); // attach listener for
           *   // activity on canvas only
           *   d = 10;
           *   g = 100;
           * }
           *
           * function draw() {
           *   background(g);
           *   fill(200);
           *   ellipse(width / 2, height / 2, d, d);
           * }
           *
           * // this function fires when mouse moves anywhere on
           * // page
           * function mouseMoved() {
           *   g = g + 5;
           *   if (g > 255) {
           *     g = 0;
           *   }
           * }
           *
           * // this function fires when mouse moves over canvas
           * function changeSize() {
           *   d = d + 2;
           *   if (d > 100) {
           *     d = 0;
           *   }
           * }
           * </code></div>
           *
           * @alt
           * no display.
           */ cov_1oivrkq345.s[48]++;
          _main.default.Element.prototype.mouseMoved = function(fxn) {
            cov_1oivrkq345.f[10]++;
            cov_1oivrkq345.s[49]++;
            _main.default.Element._adjustListener('mousemove', fxn, this);
            cov_1oivrkq345.s[50]++;
            return this;
          };

          /**
           * The .<a href="#/p5.Element/mouseOver">mouseOver()</a> function is called once after every time a
           * mouse moves onto the element. This can be used to attach an
           * element specific event listener.
           *
           * @method mouseOver
           * @param  {Function|Boolean} fxn function to be fired when a mouse moves
           *                                onto the element.
           *                                if `false` is passed instead, the previously
           *                                firing function will no longer fire.
           * @chainable
           * @example
           * <div class='norender'><code>
           * let cnv;
           * let d;
           * function setup() {
           *   cnv = createCanvas(100, 100);
           *   cnv.mouseOver(changeGray);
           *   d = 10;
           * }
           *
           * function draw() {
           *   ellipse(width / 2, height / 2, d, d);
           * }
           *
           * function changeGray() {
           *   d = d + 10;
           *   if (d > 100) {
           *     d = 0;
           *   }
           * }
           * </code></div>
           *
           * @alt
           * no display.
           */ cov_1oivrkq345.s[51]++;
          _main.default.Element.prototype.mouseOver = function(fxn) {
            cov_1oivrkq345.f[11]++;
            cov_1oivrkq345.s[52]++;
            _main.default.Element._adjustListener('mouseover', fxn, this);
            cov_1oivrkq345.s[53]++;
            return this;
          };

          /**
           * The .<a href="#/p5.Element/mouseOut">mouseOut()</a> function is called once after every time a
           * mouse moves off the element. This can be used to attach an
           * element specific event listener.
           *
           * @method mouseOut
           * @param  {Function|Boolean} fxn function to be fired when a mouse
           *                                moves off of an element.
           *                                if `false` is passed instead, the previously
           *                                firing function will no longer fire.
           * @chainable
           * @example
           * <div class='norender'><code>
           * let cnv;
           * let d;
           * function setup() {
           *   cnv = createCanvas(100, 100);
           *   cnv.mouseOut(changeGray);
           *   d = 10;
           * }
           *
           * function draw() {
           *   ellipse(width / 2, height / 2, d, d);
           * }
           *
           * function changeGray() {
           *   d = d + 10;
           *   if (d > 100) {
           *     d = 0;
           *   }
           * }
           * </code></div>
           *
           * @alt
           * no display.
           */ cov_1oivrkq345.s[54]++;
          _main.default.Element.prototype.mouseOut = function(fxn) {
            cov_1oivrkq345.f[12]++;
            cov_1oivrkq345.s[55]++;
            _main.default.Element._adjustListener('mouseout', fxn, this);
            cov_1oivrkq345.s[56]++;
            return this;
          };

          /**
           * The .<a href="#/p5.Element/touchStarted">touchStarted()</a> function is called once after every time a touch is
           * registered. This can be used to attach element specific event listeners.
           *
           * @method touchStarted
           * @param  {Function|Boolean} fxn function to be fired when a touch
           *                                starts over the element.
           *                                if `false` is passed instead, the previously
           *                                firing function will no longer fire.
           * @chainable
           * @example
           * <div class='norender'><code>
           * let cnv;
           * let d;
           * let g;
           * function setup() {
           *   cnv = createCanvas(100, 100);
           *   cnv.touchStarted(changeGray); // attach listener for
           *   // canvas click only
           *   d = 10;
           *   g = 100;
           * }
           *
           * function draw() {
           *   background(g);
           *   ellipse(width / 2, height / 2, d, d);
           * }
           *
           * // this function fires with any touch anywhere
           * function touchStarted() {
           *   d = d + 10;
           * }
           *
           * // this function fires only when cnv is clicked
           * function changeGray() {
           *   g = random(0, 255);
           * }
           * </code></div>
           *
           * @alt
           * no display.
           */ cov_1oivrkq345.s[57]++;
          _main.default.Element.prototype.touchStarted = function(fxn) {
            cov_1oivrkq345.f[13]++;
            cov_1oivrkq345.s[58]++;
            _main.default.Element._adjustListener('touchstart', fxn, this);
            cov_1oivrkq345.s[59]++;
            return this;
          };

          /**
           * The .<a href="#/p5.Element/touchMoved">touchMoved()</a> function is called once after every time a touch move is
           * registered. This can be used to attach element specific event listeners.
           *
           * @method touchMoved
           * @param  {Function|Boolean} fxn function to be fired when a touch moves over
           *                                the element.
           *                                if `false` is passed instead, the previously
           *                                firing function will no longer fire.
           * @chainable
           * @example
           * <div class='norender'><code>
           * let cnv;
           * let g;
           * function setup() {
           *   cnv = createCanvas(100, 100);
           *   cnv.touchMoved(changeGray); // attach listener for
           *   // canvas click only
           *   g = 100;
           * }
           *
           * function draw() {
           *   background(g);
           * }
           *
           * // this function fires only when cnv is clicked
           * function changeGray() {
           *   g = random(0, 255);
           * }
           * </code></div>
           *
           * @alt
           * no display.
           */ cov_1oivrkq345.s[60]++;
          _main.default.Element.prototype.touchMoved = function(fxn) {
            cov_1oivrkq345.f[14]++;
            cov_1oivrkq345.s[61]++;
            _main.default.Element._adjustListener('touchmove', fxn, this);
            cov_1oivrkq345.s[62]++;
            return this;
          };

          /**
           * The .<a href="#/p5.Element/touchEnded">touchEnded()</a> function is called once after every time a touch is
           * registered. This can be used to attach element specific event listeners.
           *
           * @method touchEnded
           * @param  {Function|Boolean} fxn function to be fired when a touch ends
           *                                over the element.
           *                                if `false` is passed instead, the previously
           *                                firing function will no longer fire.
           * @chainable
           * @example
           * <div class='norender'><code>
           * let cnv;
           * let d;
           * let g;
           * function setup() {
           *   cnv = createCanvas(100, 100);
           *   cnv.touchEnded(changeGray); // attach listener for
           *   // canvas click only
           *   d = 10;
           *   g = 100;
           * }
           *
           * function draw() {
           *   background(g);
           *   ellipse(width / 2, height / 2, d, d);
           * }
           *
           * // this function fires with any touch anywhere
           * function touchEnded() {
           *   d = d + 10;
           * }
           *
           * // this function fires only when cnv is clicked
           * function changeGray() {
           *   g = random(0, 255);
           * }
           * </code></div>
           *
           * @alt
           * no display.
           */ cov_1oivrkq345.s[63]++;
          _main.default.Element.prototype.touchEnded = function(fxn) {
            cov_1oivrkq345.f[15]++;
            cov_1oivrkq345.s[64]++;
            _main.default.Element._adjustListener('touchend', fxn, this);
            cov_1oivrkq345.s[65]++;
            return this;
          };

          /**
           * The .<a href="#/p5.Element/dragOver">dragOver()</a> function is called once after every time a
           * file is dragged over the element. This can be used to attach an
           * element specific event listener.
           *
           * @method dragOver
           * @param  {Function|Boolean} fxn function to be fired when a file is
           *                                dragged over the element.
           *                                if `false` is passed instead, the previously
           *                                firing function will no longer fire.
           * @chainable
           * @example
           * <div><code>
           * // To test this sketch, simply drag a
           * // file over the canvas
           * function setup() {
           *   let c = createCanvas(100, 100);
           *   background(200);
           *   textAlign(CENTER);
           *   text('Drag file', width / 2, height / 2);
           *   c.dragOver(dragOverCallback);
           * }
           *
           * // This function will be called whenever
           * // a file is dragged over the canvas
           * function dragOverCallback() {
           *   background(240);
           *   text('Dragged over', width / 2, height / 2);
           * }
           * </code></div>
           * @alt
           * nothing displayed
           */ cov_1oivrkq345.s[66]++;
          _main.default.Element.prototype.dragOver = function(fxn) {
            cov_1oivrkq345.f[16]++;
            cov_1oivrkq345.s[67]++;
            _main.default.Element._adjustListener('dragover', fxn, this);
            cov_1oivrkq345.s[68]++;
            return this;
          };

          /**
           * The .dragLeave() function is called once after every time a
           * dragged file leaves the element area. This can be used to attach an
           * element specific event listener.
           *
           * @method dragLeave
           * @param  {Function|Boolean} fxn function to be fired when a file is
           *                                dragged off the element.
           *                                if `false` is passed instead, the previously
           *                                firing function will no longer fire.
           * @chainable
           * @example
           * <div><code>
           * // To test this sketch, simply drag a file
           * // over and then out of the canvas area
           * function setup() {
           *   let c = createCanvas(100, 100);
           *   background(200);
           *   textAlign(CENTER);
           *   text('Drag file', width / 2, height / 2);
           *   c.dragLeave(dragLeaveCallback);
           * }
           *
           * // This function will be called whenever
           * // a file is dragged out of the canvas
           * function dragLeaveCallback() {
           *   background(240);
           *   text('Dragged off', width / 2, height / 2);
           * }
           * </code></div>
           * @alt
           * nothing displayed
           */ cov_1oivrkq345.s[69]++;
          _main.default.Element.prototype.dragLeave = function(fxn) {
            cov_1oivrkq345.f[17]++;
            cov_1oivrkq345.s[70]++;
            _main.default.Element._adjustListener('dragleave', fxn, this);
            cov_1oivrkq345.s[71]++;
            return this;
          };

          // General handler for event attaching and detaching
          cov_1oivrkq345.s[72]++;
          _main.default.Element._adjustListener = function(ev, fxn, ctx) {
            cov_1oivrkq345.f[18]++;
            cov_1oivrkq345.s[73]++;
            if (fxn === false) {
              cov_1oivrkq345.b[6][0]++;
              cov_1oivrkq345.s[74]++;
              _main.default.Element._detachListener(ev, ctx);
            } else {
              cov_1oivrkq345.b[6][1]++;
              cov_1oivrkq345.s[75]++;
              _main.default.Element._attachListener(ev, fxn, ctx);
            }
            cov_1oivrkq345.s[76]++;
            return this;
          };
          cov_1oivrkq345.s[77]++;

          _main.default.Element._attachListener = function(ev, fxn, ctx) {
            cov_1oivrkq345.f[19]++;
            cov_1oivrkq345.s[78]++;
            // detach the old listener if there was one
            if (ctx._events[ev]) {
              cov_1oivrkq345.b[7][0]++;
              cov_1oivrkq345.s[79]++;
              _main.default.Element._detachListener(ev, ctx);
            } else {
              cov_1oivrkq345.b[7][1]++;
            }
            var f = (cov_1oivrkq345.s[80]++, fxn.bind(ctx));
            cov_1oivrkq345.s[81]++;
            ctx.elt.addEventListener(ev, f, false);
            cov_1oivrkq345.s[82]++;
            ctx._events[ev] = f;
          };
          cov_1oivrkq345.s[83]++;

          _main.default.Element._detachListener = function(ev, ctx) {
            cov_1oivrkq345.f[20]++;
            var f = (cov_1oivrkq345.s[84]++, ctx._events[ev]);
            cov_1oivrkq345.s[85]++;
            ctx.elt.removeEventListener(ev, f, false);
            cov_1oivrkq345.s[86]++;
            ctx._events[ev] = null;
          };

          /**
           * Helper fxn for sharing pixel methods
           */ cov_1oivrkq345.s[87]++;
          _main.default.Element.prototype._setProperty = function(prop, value) {
            cov_1oivrkq345.f[21]++;
            cov_1oivrkq345.s[88]++;
            this[prop] = value;
          };
          var _default = _main.default.Element;
          exports.default = _default;
        },
        { './main': 283 }
      ],
      285: [
        function(_dereq_, module, exports) {
          'use strict';
          function _typeof(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof = function _typeof(obj) {
                return typeof obj;
              };
            } else {
              _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof(obj);
          }
          var cov_bcv9fqsb0 = (function() {
            var path = '/Users/outofambit/src/p5.js/src/core/p5.Graphics.js';
            var hash = '02a05bec9faa468e78fc0113ac95a9557907409e';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/core/p5.Graphics.js',
              statementMap: {
                '0': { start: { line: 25, column: 0 }, end: { line: 66, column: 2 } },
                '1': { start: { line: 26, column: 12 }, end: { line: 26, column: 37 } },
                '2': { start: { line: 28, column: 2 }, end: { line: 28, column: 49 } },
                '3': { start: { line: 29, column: 15 }, end: { line: 29, column: 47 } },
                '4': { start: { line: 30, column: 2 }, end: { line: 30, column: 32 } },
                '5': { start: { line: 32, column: 2 }, end: { line: 32, column: 44 } },
                '6': { start: { line: 35, column: 2 }, end: { line: 43, column: 3 } },
                '7': { start: { line: 36, column: 4 }, end: { line: 42, column: 5 } },
                '8': { start: { line: 37, column: 6 }, end: { line: 41, column: 7 } },
                '9': { start: { line: 38, column: 8 }, end: { line: 38, column: 45 } },
                '10': { start: { line: 40, column: 8 }, end: { line: 40, column: 34 } },
                '11': { start: { line: 45, column: 2 }, end: { line: 45, column: 56 } },
                '12': { start: { line: 46, column: 2 }, end: { line: 46, column: 17 } },
                '13': { start: { line: 47, column: 2 }, end: { line: 47, column: 18 } },
                '14': { start: { line: 48, column: 2 }, end: { line: 48, column: 43 } },
                '15': { start: { line: 50, column: 2 }, end: { line: 54, column: 3 } },
                '16': { start: { line: 51, column: 4 }, end: { line: 51, column: 65 } },
                '17': { start: { line: 53, column: 4 }, end: { line: 53, column: 65 } },
                '18': { start: { line: 55, column: 2 }, end: { line: 55, column: 29 } },
                '19': { start: { line: 57, column: 2 }, end: { line: 61, column: 5 } },
                '20': { start: { line: 59, column: 6 }, end: { line: 59, column: 35 } },
                '21': { start: { line: 63, column: 2 }, end: { line: 63, column: 30 } },
                '22': { start: { line: 64, column: 2 }, end: { line: 64, column: 34 } },
                '23': { start: { line: 65, column: 2 }, end: { line: 65, column: 14 } },
                '24': { start: { line: 68, column: 0 }, end: { line: 68, column: 60 } },
                '25': { start: { line: 115, column: 0 }, end: { line: 120, column: 2 } },
                '26': { start: { line: 116, column: 2 }, end: { line: 116, column: 31 } },
                '27': { start: { line: 117, column: 2 }, end: { line: 119, column: 3 } },
                '28': { start: { line: 118, column: 4 }, end: { line: 118, column: 29 } },
                '29': { start: { line: 176, column: 0 }, end: { line: 187, column: 2 } },
                '30': { start: { line: 177, column: 2 }, end: { line: 179, column: 3 } },
                '31': { start: { line: 178, column: 4 }, end: { line: 178, column: 46 } },
                '32': { start: { line: 180, column: 14 }, end: { line: 180, column: 49 } },
                '33': { start: { line: 181, column: 2 }, end: { line: 183, column: 3 } },
                '34': { start: { line: 182, column: 4 }, end: { line: 182, column: 41 } },
                '35': { start: { line: 184, column: 2 }, end: { line: 186, column: 3 } },
                '36': { start: { line: 185, column: 4 }, end: { line: 185, column: 63 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 25, column: 14 }, end: { line: 25, column: 15 } },
                  loc: { start: { line: 25, column: 46 }, end: { line: 66, column: 1 } },
                  line: 25
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 58, column: 9 }, end: { line: 58, column: 10 } },
                  loc: { start: { line: 58, column: 20 }, end: { line: 60, column: 5 } },
                  line: 58
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 115, column: 30 },
                    end: { line: 115, column: 31 }
                  },
                  loc: { start: { line: 115, column: 41 }, end: { line: 120, column: 1 } },
                  line: 115
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 176, column: 31 },
                    end: { line: 176, column: 32 }
                  },
                  loc: { start: { line: 176, column: 42 }, end: { line: 187, column: 1 } },
                  line: 176
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 26, column: 12 }, end: { line: 26, column: 37 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 26, column: 12 }, end: { line: 26, column: 20 } },
                    { start: { line: 26, column: 24 }, end: { line: 26, column: 37 } }
                  ],
                  line: 26
                },
                '1': {
                  loc: { start: { line: 29, column: 15 }, end: { line: 29, column: 47 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 29, column: 15 }, end: { line: 29, column: 30 } },
                    { start: { line: 29, column: 34 }, end: { line: 29, column: 47 } }
                  ],
                  line: 29
                },
                '2': {
                  loc: { start: { line: 36, column: 4 }, end: { line: 42, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 36, column: 4 }, end: { line: 42, column: 5 } },
                    { start: { line: 36, column: 4 }, end: { line: 42, column: 5 } }
                  ],
                  line: 36
                },
                '3': {
                  loc: { start: { line: 37, column: 6 }, end: { line: 41, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 37, column: 6 }, end: { line: 41, column: 7 } },
                    { start: { line: 37, column: 6 }, end: { line: 41, column: 7 } }
                  ],
                  line: 37
                },
                '4': {
                  loc: { start: { line: 50, column: 2 }, end: { line: 54, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 50, column: 2 }, end: { line: 54, column: 3 } },
                    { start: { line: 50, column: 2 }, end: { line: 54, column: 3 } }
                  ],
                  line: 50
                },
                '5': {
                  loc: { start: { line: 117, column: 2 }, end: { line: 119, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 117, column: 2 }, end: { line: 119, column: 3 } },
                    { start: { line: 117, column: 2 }, end: { line: 119, column: 3 } }
                  ],
                  line: 117
                },
                '6': {
                  loc: { start: { line: 177, column: 2 }, end: { line: 179, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 177, column: 2 }, end: { line: 179, column: 3 } },
                    { start: { line: 177, column: 2 }, end: { line: 179, column: 3 } }
                  ],
                  line: 177
                },
                '7': {
                  loc: { start: { line: 181, column: 2 }, end: { line: 183, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 181, column: 2 }, end: { line: 183, column: 3 } },
                    { start: { line: 181, column: 2 }, end: { line: 183, column: 3 } }
                  ],
                  line: 181
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0
              },
              f: { '0': 0, '1': 0, '2': 0, '3': 0 },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '02a05bec9faa468e78fc0113ac95a9557907409e'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.index-of');
          _dereq_('core-js/modules/es.array.splice');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('./main'));
          var constants = _interopRequireWildcard(_dereq_('./constants'));
          function _getRequireWildcardCache() {
            if (typeof WeakMap !== 'function') return null;
            var cache = new WeakMap();
            _getRequireWildcardCache = function _getRequireWildcardCache() {
              return cache;
            };
            return cache;
          }
          function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
              return obj;
            }
            if (obj === null || (_typeof(obj) !== 'object' && typeof obj !== 'function')) {
              return { default: obj };
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
              return cache.get(obj);
            }
            var newObj = {};
            var hasPropertyDescriptor =
              Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
              if (Object.prototype.hasOwnProperty.call(obj, key)) {
                var desc = hasPropertyDescriptor
                  ? Object.getOwnPropertyDescriptor(obj, key)
                  : null;
                if (desc && (desc.get || desc.set)) {
                  Object.defineProperty(newObj, key, desc);
                } else {
                  newObj[key] = obj[key];
                }
              }
            }
            newObj.default = obj;
            if (cache) {
              cache.set(obj, newObj);
            }
            return newObj;
          }
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_bcv9fqsb0.s[0]++;

          /**
           * Thin wrapper around a renderer, to be used for creating a
           * graphics buffer object. Use this class if you need
           * to draw into an off-screen graphics buffer. The two parameters define the
           * width and height in pixels. The fields and methods for this class are
           * extensive, but mirror the normal drawing API for p5.
           *
           * @class p5.Graphics
           * @constructor
           * @extends p5.Element
           * @param {Number} w            width
           * @param {Number} h            height
           * @param {Constant} renderer   the renderer to use, either P2D or WEBGL
           * @param {p5} [pInst]          pointer to p5 instance
           */
          _main.default.Graphics = function(w, h, renderer, pInst) {
            cov_bcv9fqsb0.f[0]++;
            var r = (cov_bcv9fqsb0.s[1]++,
            (cov_bcv9fqsb0.b[0][0]++, renderer) ||
              (cov_bcv9fqsb0.b[0][1]++, constants.P2D));
            cov_bcv9fqsb0.s[2]++;

            this.canvas = document.createElement('canvas');
            var node = (cov_bcv9fqsb0.s[3]++,
            (cov_bcv9fqsb0.b[1][0]++, pInst._userNode) ||
              (cov_bcv9fqsb0.b[1][1]++, document.body));
            cov_bcv9fqsb0.s[4]++;
            node.appendChild(this.canvas);
            cov_bcv9fqsb0.s[5]++;

            _main.default.Element.call(this, this.canvas, pInst);

            // bind methods and props of p5 to the new object
            cov_bcv9fqsb0.s[6]++;
            for (var p in _main.default.prototype) {
              cov_bcv9fqsb0.s[7]++;
              if (!this[p]) {
                cov_bcv9fqsb0.b[2][0]++;
                cov_bcv9fqsb0.s[8]++;
                if (typeof _main.default.prototype[p] === 'function') {
                  cov_bcv9fqsb0.b[3][0]++;
                  cov_bcv9fqsb0.s[9]++;
                  this[p] = _main.default.prototype[p].bind(this);
                } else {
                  cov_bcv9fqsb0.b[3][1]++;
                  cov_bcv9fqsb0.s[10]++;
                  this[p] = _main.default.prototype[p];
                }
              } else {
                cov_bcv9fqsb0.b[2][1]++;
              }
            }
            cov_bcv9fqsb0.s[11]++;

            _main.default.prototype._initializeInstanceVariables.apply(this);
            cov_bcv9fqsb0.s[12]++;
            this.width = w;
            cov_bcv9fqsb0.s[13]++;
            this.height = h;
            cov_bcv9fqsb0.s[14]++;
            this._pixelDensity = pInst._pixelDensity;
            cov_bcv9fqsb0.s[15]++;

            if (r === constants.WEBGL) {
              cov_bcv9fqsb0.b[4][0]++;
              cov_bcv9fqsb0.s[16]++;
              this._renderer = new _main.default.RendererGL(this.canvas, this, false);
            } else {
              cov_bcv9fqsb0.b[4][1]++;
              cov_bcv9fqsb0.s[17]++;
              this._renderer = new _main.default.Renderer2D(this.canvas, this, false);
            }
            cov_bcv9fqsb0.s[18]++;
            pInst._elements.push(this);
            cov_bcv9fqsb0.s[19]++;

            Object.defineProperty(this, 'deltaTime', {
              get: function get() {
                cov_bcv9fqsb0.f[1]++;
                cov_bcv9fqsb0.s[20]++;
                return this._pInst.deltaTime;
              }
            });
            cov_bcv9fqsb0.s[21]++;

            this._renderer.resize(w, h);
            cov_bcv9fqsb0.s[22]++;
            this._renderer._applyDefaults();
            cov_bcv9fqsb0.s[23]++;
            return this;
          };
          cov_bcv9fqsb0.s[24]++;

          _main.default.Graphics.prototype = Object.create(_main.default.Element.prototype);

          /**
           * Resets certain values such as those modified by functions in the Transform category
           * and in the Lights category that are not automatically reset
           * with graphics buffer objects. Calling this in <a href='#/p5/draw'>draw()</a> will copy the behavior
           * of the standard canvas.
           *
           * @method reset
           * @example
           *
           * <div><code>
           * let pg;
           * function setup() {
           *   createCanvas(100, 100);
           *   background(0);
           *   pg = createGraphics(50, 100);
           *   pg.fill(0);
           *   frameRate(5);
           * }
           *
           * function draw() {
           *   image(pg, width / 2, 0);
           *   pg.background(255);
           *   // p5.Graphics object behave a bit differently in some cases
           *   // The normal canvas on the left resets the translate
           *   // with every loop through draw()
           *   // the graphics object on the right doesn't automatically reset
           *   // so translate() is additive and it moves down the screen
           *   rect(0, 0, width / 2, 5);
           *   pg.rect(0, 0, width / 2, 5);
           *   translate(0, 5, 0);
           *   pg.translate(0, 5, 0);
           * }
           * function mouseClicked() {
           *   // if you click you will see that
           *   // reset() resets the translate back to the initial state
           *   // of the Graphics object
           *   pg.reset();
           * }
           * </code></div>
           *
           * @alt
           * A white line on a black background stays still on the top-left half.
           * A black line animates from top to bottom on a white background on the right half.
           * When clicked, the black line starts back over at the top.
           */ cov_bcv9fqsb0.s[25]++;
          _main.default.Graphics.prototype.reset = function() {
            cov_bcv9fqsb0.f[2]++;
            cov_bcv9fqsb0.s[26]++;
            this._renderer.resetMatrix();
            cov_bcv9fqsb0.s[27]++;
            if (this._renderer.isP3D) {
              cov_bcv9fqsb0.b[5][0]++;
              cov_bcv9fqsb0.s[28]++;
              this._renderer._update();
            } else {
              cov_bcv9fqsb0.b[5][1]++;
            }
          };

          /**
           * Removes a Graphics object from the page and frees any resources
           * associated with it.
           *
           * @method remove
           *
           * @example
           * <div class='norender'><code>
           * let bg;
           * function setup() {
           *   bg = createCanvas(100, 100);
           *   bg.background(0);
           *   image(bg, 0, 0);
           *   bg.remove();
           * }
           * </code></div>
           *
           * <div><code>
           * let bg;
           * function setup() {
           *   pixelDensity(1);
           *   createCanvas(100, 100);
           *   stroke(255);
           *   fill(0);
           *
           *   // create and draw the background image
           *   bg = createGraphics(100, 100);
           *   bg.background(200);
           *   bg.ellipse(50, 50, 80, 80);
           * }
           * function draw() {
           *   let t = millis() / 1000;
           *   // draw the background
           *   if (bg) {
           *     image(bg, frameCount % 100, 0);
           *     image(bg, frameCount % 100 - 100, 0);
           *   }
           *   // draw the foreground
           *   let p = p5.Vector.fromAngle(t, 35).add(50, 50);
           *   ellipse(p.x, p.y, 30);
           * }
           * function mouseClicked() {
           *   // remove the background
           *   if (bg) {
           *     bg.remove();
           *     bg = null;
           *   }
           * }
           * </code></div>
           *
           * @alt
           * no image
           * a multi-colored circle moving back and forth over a scrolling background.
           */ cov_bcv9fqsb0.s[29]++;
          _main.default.Graphics.prototype.remove = function() {
            cov_bcv9fqsb0.f[3]++;
            cov_bcv9fqsb0.s[30]++;
            if (this.elt.parentNode) {
              cov_bcv9fqsb0.b[6][0]++;
              cov_bcv9fqsb0.s[31]++;
              this.elt.parentNode.removeChild(this.elt);
            } else {
              cov_bcv9fqsb0.b[6][1]++;
            }
            var idx = (cov_bcv9fqsb0.s[32]++, this._pInst._elements.indexOf(this));
            cov_bcv9fqsb0.s[33]++;
            if (idx !== -1) {
              cov_bcv9fqsb0.b[7][0]++;
              cov_bcv9fqsb0.s[34]++;
              this._pInst._elements.splice(idx, 1);
            } else {
              cov_bcv9fqsb0.b[7][1]++;
            }
            cov_bcv9fqsb0.s[35]++;
            for (var elt_ev in this._events) {
              cov_bcv9fqsb0.s[36]++;
              this.elt.removeEventListener(elt_ev, this._events[elt_ev]);
            }
          };
          var _default = _main.default.Graphics;
          exports.default = _default;
        },
        {
          './constants': 272,
          './main': 283,
          'core-js/modules/es.array.index-of': 173,
          'core-js/modules/es.array.splice': 180
        }
      ],
      286: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_1fcne63ktz = (function() {
            var path = '/Users/outofambit/src/p5.js/src/core/p5.Renderer.js';
            var hash = 'f97af0f042bcc18dd801736504d0a3f00a8ccfa9';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/core/p5.Renderer.js',
              statementMap: {
                '0': { start: { line: 22, column: 0 }, end: { line: 60, column: 2 } },
                '1': { start: { line: 23, column: 2 }, end: { line: 23, column: 36 } },
                '2': { start: { line: 24, column: 2 }, end: { line: 24, column: 20 } },
                '3': { start: { line: 25, column: 2 }, end: { line: 25, column: 28 } },
                '4': { start: { line: 26, column: 2 }, end: { line: 37, column: 3 } },
                '5': { start: { line: 27, column: 4 }, end: { line: 27, column: 30 } },
                '6': { start: { line: 29, column: 4 }, end: { line: 29, column: 50 } },
                '7': { start: { line: 30, column: 4 }, end: { line: 30, column: 52 } },
                '8': { start: { line: 31, column: 4 }, end: { line: 31, column: 50 } },
                '9': { start: { line: 32, column: 4 }, end: { line: 32, column: 52 } },
                '10': { start: { line: 35, column: 4 }, end: { line: 35, column: 39 } },
                '11': { start: { line: 36, column: 4 }, end: { line: 36, column: 22 } },
                '12': { start: { line: 39, column: 2 }, end: { line: 39, column: 22 } },
                '13': { start: { line: 40, column: 2 }, end: { line: 40, column: 25 } },
                '14': { start: { line: 41, column: 2 }, end: { line: 41, column: 32 } },
                '15': { start: { line: 42, column: 2 }, end: { line: 42, column: 37 } },
                '16': { start: { line: 43, column: 2 }, end: { line: 43, column: 26 } },
                '17': { start: { line: 44, column: 2 }, end: { line: 44, column: 27 } },
                '18': { start: { line: 45, column: 2 }, end: { line: 45, column: 35 } },
                '19': { start: { line: 46, column: 2 }, end: { line: 46, column: 42 } },
                '20': { start: { line: 47, column: 2 }, end: { line: 47, column: 34 } },
                '21': { start: { line: 49, column: 2 }, end: { line: 49, column: 36 } },
                '22': { start: { line: 50, column: 2 }, end: { line: 50, column: 39 } },
                '23': { start: { line: 51, column: 2 }, end: { line: 51, column: 27 } },
                '24': { start: { line: 52, column: 2 }, end: { line: 52, column: 37 } },
                '25': { start: { line: 54, column: 2 }, end: { line: 54, column: 20 } },
                '26': { start: { line: 55, column: 2 }, end: { line: 55, column: 24 } },
                '27': { start: { line: 56, column: 2 }, end: { line: 56, column: 22 } },
                '28': { start: { line: 57, column: 2 }, end: { line: 57, column: 26 } },
                '29': { start: { line: 58, column: 2 }, end: { line: 58, column: 24 } },
                '30': { start: { line: 59, column: 2 }, end: { line: 59, column: 27 } },
                '31': { start: { line: 62, column: 0 }, end: { line: 62, column: 60 } },
                '32': { start: { line: 66, column: 0 }, end: { line: 87, column: 2 } },
                '33': { start: { line: 67, column: 2 }, end: { line: 86, column: 4 } },
                '34': { start: { line: 92, column: 0 }, end: { line: 97, column: 2 } },
                '35': { start: { line: 93, column: 2 }, end: { line: 96, column: 3 } },
                '36': { start: { line: 95, column: 4 }, end: { line: 95, column: 42 } },
                '37': { start: { line: 102, column: 0 }, end: { line: 113, column: 2 } },
                '38': { start: { line: 103, column: 2 }, end: { line: 103, column: 17 } },
                '39': { start: { line: 104, column: 2 }, end: { line: 104, column: 18 } },
                '40': { start: { line: 105, column: 2 }, end: { line: 105, column: 49 } },
                '41': { start: { line: 106, column: 2 }, end: { line: 106, column: 50 } },
                '42': { start: { line: 107, column: 2 }, end: { line: 107, column: 34 } },
                '43': { start: { line: 108, column: 2 }, end: { line: 108, column: 35 } },
                '44': { start: { line: 109, column: 2 }, end: { line: 112, column: 3 } },
                '45': { start: { line: 110, column: 4 }, end: { line: 110, column: 50 } },
                '46': { start: { line: 111, column: 4 }, end: { line: 111, column: 52 } },
                '47': { start: { line: 115, column: 0 }, end: { line: 146, column: 2 } },
                '48': { start: { line: 116, column: 22 }, end: { line: 116, column: 39 } },
                '49': { start: { line: 117, column: 13 }, end: { line: 117, column: 38 } },
                '50': { start: { line: 118, column: 17 }, end: { line: 118, column: 28 } },
                '51': { start: { line: 120, column: 2 }, end: { line: 138, column: 3 } },
                '52': { start: { line: 122, column: 4 }, end: { line: 122, column: 14 } },
                '53': { start: { line: 123, column: 4 }, end: { line: 123, column: 26 } },
                '54': { start: { line: 124, column: 4 }, end: { line: 124, column: 27 } },
                '55': { start: { line: 126, column: 4 }, end: { line: 126, column: 12 } },
                '56': { start: { line: 127, column: 4 }, end: { line: 127, column: 12 } },
                '57': { start: { line: 129, column: 4 }, end: { line: 136, column: 5 } },
                '58': { start: { line: 131, column: 6 }, end: { line: 133, column: 7 } },
                '59': { start: { line: 132, column: 8 }, end: { line: 132, column: 28 } },
                '60': { start: { line: 135, column: 6 }, end: { line: 135, column: 34 } },
                '61': { start: { line: 140, column: 17 }, end: { line: 140, column: 35 } },
                '62': { start: { line: 141, column: 2 }, end: { line: 143, column: 57 } },
                '63': { start: { line: 145, column: 2 }, end: { line: 145, column: 16 } },
                '64': { start: { line: 148, column: 0 }, end: { line: 156, column: 2 } },
                '65': { start: { line: 149, column: 2 }, end: { line: 153, column: 3 } },
                '66': { start: { line: 150, column: 4 }, end: { line: 150, column: 43 } },
                '67': { start: { line: 151, column: 4 }, end: { line: 151, column: 41 } },
                '68': { start: { line: 152, column: 4 }, end: { line: 152, column: 23 } },
                '69': { start: { line: 155, column: 2 }, end: { line: 155, column: 27 } },
                '70': { start: { line: 158, column: 0 }, end: { line: 169, column: 2 } },
                '71': { start: { line: 159, column: 2 }, end: { line: 166, column: 3 } },
                '72': { start: { line: 160, column: 4 }, end: { line: 160, column: 38 } },
                '73': { start: { line: 161, column: 4 }, end: { line: 164, column: 5 } },
                '74': { start: { line: 163, column: 6 }, end: { line: 163, column: 73 } },
                '75': { start: { line: 165, column: 4 }, end: { line: 165, column: 39 } },
                '76': { start: { line: 168, column: 2 }, end: { line: 168, column: 24 } },
                '77': { start: { line: 171, column: 0 }, end: { line: 186, column: 2 } },
                '78': { start: { line: 172, column: 2 }, end: { line: 183, column: 3 } },
                '79': { start: { line: 173, column: 4 }, end: { line: 180, column: 5 } },
                '80': { start: { line: 179, column: 6 }, end: { line: 179, column: 41 } },
                '81': { start: { line: 182, column: 4 }, end: { line: 182, column: 39 } },
                '82': { start: { line: 185, column: 2 }, end: { line: 185, column: 25 } },
                '83': { start: { line: 188, column: 0 }, end: { line: 193, column: 2 } },
                '84': { start: { line: 189, column: 2 }, end: { line: 191, column: 3 } },
                '85': { start: { line: 190, column: 4 }, end: { line: 190, column: 30 } },
                '86': { start: { line: 192, column: 2 }, end: { line: 192, column: 26 } },
                '87': { start: { line: 195, column: 0 }, end: { line: 200, column: 2 } },
                '88': { start: { line: 196, column: 2 }, end: { line: 198, column: 3 } },
                '89': { start: { line: 197, column: 4 }, end: { line: 197, column: 30 } },
                '90': { start: { line: 199, column: 2 }, end: { line: 199, column: 27 } },
                '91': { start: { line: 202, column: 0 }, end: { line: 217, column: 2 } },
                '92': { start: { line: 203, column: 2 }, end: { line: 216, column: 3 } },
                '93': { start: { line: 204, column: 4 }, end: { line: 204, column: 39 } },
                '94': { start: { line: 206, column: 4 }, end: { line: 208, column: 5 } },
                '95': { start: { line: 207, column: 6 }, end: { line: 207, column: 44 } },
                '96': { start: { line: 210, column: 4 }, end: { line: 210, column: 39 } },
                '97': { start: { line: 212, column: 4 }, end: { line: 215, column: 6 } },
                '98': { start: { line: 219, column: 0 }, end: { line: 222, column: 2 } },
                '99': { start: { line: 220, column: 2 }, end: { line: 220, column: 44 } },
                '100': { start: { line: 221, column: 2 }, end: { line: 221, column: 24 } },
                '101': { start: { line: 224, column: 0 }, end: { line: 356, column: 2 } },
                '102': { start: { line: 225, column: 12 }, end: { line: 225, column: 23 } },
                '103': { start: { line: 226, column: 24 }, end: { line: 226, column: 38 } },
                '104': { start: { line: 234, column: 23 }, end: { line: 234, column: 39 } },
                '105': { start: { line: 236, column: 2 }, end: { line: 238, column: 3 } },
                '106': { start: { line: 237, column: 4 }, end: { line: 237, column: 11 } },
                '107': { start: { line: 240, column: 2 }, end: { line: 244, column: 3 } },
                '108': { start: { line: 241, column: 4 }, end: { line: 241, column: 11 } },
                '109': { start: { line: 242, column: 9 }, end: { line: 244, column: 3 } },
                '110': { start: { line: 243, column: 4 }, end: { line: 243, column: 25 } },
                '111': { start: { line: 247, column: 2 }, end: { line: 247, column: 35 } },
                '112': { start: { line: 248, column: 2 }, end: { line: 248, column: 26 } },
                '113': { start: { line: 250, column: 2 }, end: { line: 353, column: 3 } },
                '114': { start: { line: 251, column: 4 }, end: { line: 253, column: 5 } },
                '115': { start: { line: 252, column: 6 }, end: { line: 252, column: 24 } },
                '116': { start: { line: 255, column: 4 }, end: { line: 262, column: 5 } },
                '117': { start: { line: 257, column: 8 }, end: { line: 257, column: 26 } },
                '118': { start: { line: 258, column: 8 }, end: { line: 258, column: 14 } },
                '119': { start: { line: 260, column: 8 }, end: { line: 260, column: 22 } },
                '120': { start: { line: 261, column: 8 }, end: { line: 261, column: 14 } },
                '121': { start: { line: 264, column: 25 }, end: { line: 264, column: 30 } },
                '122': { start: { line: 265, column: 4 }, end: { line: 287, column: 5 } },
                '123': { start: { line: 266, column: 6 }, end: { line: 268, column: 7 } },
                '124': { start: { line: 267, column: 8 }, end: { line: 267, column: 27 } },
                '125': { start: { line: 270, column: 6 }, end: { line: 283, column: 7 } },
                '126': { start: { line: 272, column: 10 }, end: { line: 272, column: 51 } },
                '127': { start: { line: 273, column: 10 }, end: { line: 273, column: 36 } },
                '128': { start: { line: 274, column: 10 }, end: { line: 274, column: 16 } },
                '129': { start: { line: 276, column: 10 }, end: { line: 276, column: 55 } },
                '130': { start: { line: 277, column: 10 }, end: { line: 277, column: 36 } },
                '131': { start: { line: 278, column: 10 }, end: { line: 278, column: 16 } },
                '132': { start: { line: 280, column: 10 }, end: { line: 280, column: 32 } },
                '133': { start: { line: 281, column: 10 }, end: { line: 281, column: 45 } },
                '134': { start: { line: 282, column: 10 }, end: { line: 282, column: 16 } },
                '135': { start: { line: 286, column: 6 }, end: { line: 286, column: 54 } },
                '136': { start: { line: 291, column: 4 }, end: { line: 335, column: 5 } },
                '137': { start: { line: 292, column: 6 }, end: { line: 311, column: 7 } },
                '138': { start: { line: 292, column: 27 }, end: { line: 292, column: 28 } },
                '139': { start: { line: 293, column: 8 }, end: { line: 293, column: 18 } },
                '140': { start: { line: 294, column: 8 }, end: { line: 294, column: 44 } },
                '141': { start: { line: 295, column: 8 }, end: { line: 305, column: 9 } },
                '142': { start: { line: 295, column: 29 }, end: { line: 295, column: 30 } },
                '143': { start: { line: 296, column: 10 }, end: { line: 296, column: 56 } },
                '144': { start: { line: 297, column: 10 }, end: { line: 297, column: 47 } },
                '145': { start: { line: 298, column: 10 }, end: { line: 304, column: 11 } },
                '146': { start: { line: 299, column: 12 }, end: { line: 299, column: 60 } },
                '147': { start: { line: 300, column: 12 }, end: { line: 300, column: 47 } },
                '148': { start: { line: 301, column: 12 }, end: { line: 301, column: 33 } },
                '149': { start: { line: 303, column: 12 }, end: { line: 303, column: 28 } },
                '150': { start: { line: 306, column: 8 }, end: { line: 306, column: 56 } },
                '151': { start: { line: 307, column: 8 }, end: { line: 307, column: 29 } },
                '152': { start: { line: 308, column: 8 }, end: { line: 310, column: 9 } },
                '153': { start: { line: 309, column: 10 }, end: { line: 309, column: 50 } },
                '154': { start: { line: 314, column: 6 }, end: { line: 328, column: 7 } },
                '155': { start: { line: 314, column: 27 }, end: { line: 314, column: 28 } },
                '156': { start: { line: 315, column: 8 }, end: { line: 315, column: 18 } },
                '157': { start: { line: 316, column: 8 }, end: { line: 316, column: 43 } },
                '158': { start: { line: 317, column: 8 }, end: { line: 327, column: 9 } },
                '159': { start: { line: 317, column: 29 }, end: { line: 317, column: 30 } },
                '160': { start: { line: 318, column: 10 }, end: { line: 318, column: 50 } },
                '161': { start: { line: 319, column: 10 }, end: { line: 319, column: 47 } },
                '162': { start: { line: 320, column: 10 }, end: { line: 326, column: 11 } },
                '163': { start: { line: 321, column: 12 }, end: { line: 321, column: 37 } },
                '164': { start: { line: 322, column: 17 }, end: { line: 326, column: 11 } },
                '165': { start: { line: 323, column: 12 }, end: { line: 323, column: 60 } },
                '166': { start: { line: 324, column: 12 }, end: { line: 324, column: 33 } },
                '167': { start: { line: 325, column: 12 }, end: { line: 325, column: 41 } },
                '168': { start: { line: 329, column: 6 }, end: { line: 329, column: 54 } },
                '169': { start: { line: 330, column: 6 }, end: { line: 330, column: 27 } },
                '170': { start: { line: 332, column: 6 }, end: { line: 334, column: 7 } },
                '171': { start: { line: 333, column: 8 }, end: { line: 333, column: 48 } },
                '172': { start: { line: 339, column: 17 }, end: { line: 339, column: 18 } },
                '173': { start: { line: 341, column: 19 }, end: { line: 341, column: 41 } },
                '174': { start: { line: 342, column: 4 }, end: { line: 346, column: 5 } },
                '175': { start: { line: 343, column: 6 }, end: { line: 343, column: 56 } },
                '176': { start: { line: 344, column: 11 }, end: { line: 346, column: 5 } },
                '177': { start: { line: 345, column: 6 }, end: { line: 345, column: 52 } },
                '178': { start: { line: 349, column: 4 }, end: { line: 352, column: 5 } },
                '179': { start: { line: 349, column: 17 }, end: { line: 349, column: 18 } },
                '180': { start: { line: 350, column: 6 }, end: { line: 350, column: 67 } },
                '181': { start: { line: 351, column: 6 }, end: { line: 351, column: 27 } },
                '182': { start: { line: 355, column: 2 }, end: { line: 355, column: 11 } },
                '183': { start: { line: 358, column: 0 }, end: { line: 360, column: 2 } },
                '184': { start: { line: 359, column: 2 }, end: { line: 359, column: 14 } },
                '185': { start: { line: 365, column: 0 }, end: { line: 367, column: 2 } },
                '186': { start: { line: 366, column: 2 }, end: { line: 366, column: 61 } },
                '187': { start: { line: 369, column: 0 }, end: { line: 412, column: 2 } },
                '188': { start: { line: 370, column: 2 }, end: { line: 374, column: 3 } },
                '189': { start: { line: 371, column: 4 }, end: { line: 371, column: 67 } },
                '190': { start: { line: 372, column: 4 }, end: { line: 372, column: 69 } },
                '191': { start: { line: 373, column: 4 }, end: { line: 373, column: 16 } },
                '192': { start: { line: 377, column: 15 }, end: { line: 377, column: 45 } },
                '193': { start: { line: 378, column: 2 }, end: { line: 378, column: 41 } },
                '194': { start: { line: 379, column: 2 }, end: { line: 379, column: 46 } },
                '195': { start: { line: 380, column: 2 }, end: { line: 380, column: 29 } },
                '196': { start: { line: 382, column: 16 }, end: { line: 382, column: 45 } },
                '197': { start: { line: 383, column: 2 }, end: { line: 383, column: 39 } },
                '198': { start: { line: 384, column: 2 }, end: { line: 384, column: 28 } },
                '199': { start: { line: 385, column: 2 }, end: { line: 385, column: 29 } },
                '200': { start: { line: 387, column: 20 }, end: { line: 387, column: 49 } },
                '201': { start: { line: 388, column: 2 }, end: { line: 388, column: 30 } },
                '202': { start: { line: 389, column: 2 }, end: { line: 389, column: 31 } },
                '203': { start: { line: 391, column: 2 }, end: { line: 391, column: 33 } },
                '204': { start: { line: 392, column: 2 }, end: { line: 392, column: 38 } },
                '205': { start: { line: 393, column: 2 }, end: { line: 393, column: 39 } },
                '206': { start: { line: 395, column: 2 }, end: { line: 395, column: 41 } },
                '207': { start: { line: 396, column: 20 }, end: { line: 396, column: 42 } },
                '208': { start: { line: 397, column: 19 }, end: { line: 397, column: 40 } },
                '209': { start: { line: 398, column: 17 }, end: { line: 398, column: 47 } },
                '210': { start: { line: 400, column: 2 }, end: { line: 400, column: 39 } },
                '211': { start: { line: 401, column: 2 }, end: { line: 401, column: 39 } },
                '212': { start: { line: 402, column: 2 }, end: { line: 402, column: 37 } },
                '213': { start: { line: 403, column: 17 }, end: { line: 403, column: 47 } },
                '214': { start: { line: 404, column: 18 }, end: { line: 404, column: 33 } },
                '215': { start: { line: 406, column: 2 }, end: { line: 406, column: 39 } },
                '216': { start: { line: 408, column: 2 }, end: { line: 408, column: 43 } },
                '217': { start: { line: 409, column: 2 }, end: { line: 409, column: 45 } },
                '218': { start: { line: 411, column: 2 }, end: { line: 411, column: 14 } },
                '219': { start: { line: 419, column: 20 }, end: { line: 419, column: 21 } },
                '220': { start: { line: 420, column: 17 }, end: { line: 420, column: 18 } },
                '221': { start: { line: 421, column: 2 }, end: { line: 429, column: 3 } },
                '222': { start: { line: 422, column: 4 }, end: { line: 425, column: 45 } },
                '223': { start: { line: 423, column: 6 }, end: { line: 423, column: 39 } },
                '224': { start: { line: 424, column: 6 }, end: { line: 424, column: 37 } },
                '225': { start: { line: 427, column: 4 }, end: { line: 427, column: 37 } },
                '226': { start: { line: 428, column: 4 }, end: { line: 428, column: 35 } },
                '227': { start: { line: 430, column: 2 }, end: { line: 430, column: 35 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 22, column: 14 }, end: { line: 22, column: 15 } },
                  loc: { start: { line: 22, column: 49 }, end: { line: 60, column: 1 } },
                  line: 22
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 66, column: 29 }, end: { line: 66, column: 30 } },
                  loc: { start: { line: 66, column: 40 }, end: { line: 87, column: 1 } },
                  line: 66
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: { start: { line: 92, column: 28 }, end: { line: 92, column: 29 } },
                  loc: { start: { line: 92, column: 44 }, end: { line: 97, column: 1 } },
                  line: 92
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 102, column: 31 },
                    end: { line: 102, column: 32 }
                  },
                  loc: { start: { line: 102, column: 46 }, end: { line: 113, column: 1 } },
                  line: 102
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 115, column: 28 },
                    end: { line: 115, column: 29 }
                  },
                  loc: { start: { line: 115, column: 49 }, end: { line: 146, column: 1 } },
                  line: 115
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 148, column: 36 },
                    end: { line: 148, column: 37 }
                  },
                  loc: { start: { line: 148, column: 48 }, end: { line: 156, column: 1 } },
                  line: 148
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 158, column: 33 },
                    end: { line: 158, column: 34 }
                  },
                  loc: { start: { line: 158, column: 45 }, end: { line: 169, column: 1 } },
                  line: 158
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 171, column: 34 },
                    end: { line: 171, column: 35 }
                  },
                  loc: { start: { line: 171, column: 46 }, end: { line: 186, column: 1 } },
                  line: 171
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 188, column: 35 },
                    end: { line: 188, column: 36 }
                  },
                  loc: { start: { line: 188, column: 46 }, end: { line: 193, column: 1 } },
                  line: 188
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 195, column: 36 },
                    end: { line: 195, column: 37 }
                  },
                  loc: { start: { line: 195, column: 47 }, end: { line: 200, column: 1 } },
                  line: 195
                },
                '10': {
                  name: '(anonymous_10)',
                  decl: {
                    start: { line: 202, column: 34 },
                    end: { line: 202, column: 35 }
                  },
                  loc: { start: { line: 202, column: 49 }, end: { line: 217, column: 1 } },
                  line: 202
                },
                '11': {
                  name: '(anonymous_11)',
                  decl: {
                    start: { line: 219, column: 33 },
                    end: { line: 219, column: 34 }
                  },
                  loc: { start: { line: 219, column: 53 }, end: { line: 222, column: 1 } },
                  line: 219
                },
                '12': {
                  name: '(anonymous_12)',
                  decl: {
                    start: { line: 224, column: 29 },
                    end: { line: 224, column: 30 }
                  },
                  loc: { start: { line: 224, column: 70 }, end: { line: 356, column: 1 } },
                  line: 224
                },
                '13': {
                  name: '(anonymous_13)',
                  decl: {
                    start: { line: 358, column: 39 },
                    end: { line: 358, column: 40 }
                  },
                  loc: { start: { line: 358, column: 50 }, end: { line: 360, column: 1 } },
                  line: 358
                },
                '14': {
                  name: '(anonymous_14)',
                  decl: {
                    start: { line: 365, column: 36 },
                    end: { line: 365, column: 37 }
                  },
                  loc: { start: { line: 365, column: 65 }, end: { line: 367, column: 1 } },
                  line: 365
                },
                '15': {
                  name: '(anonymous_15)',
                  decl: {
                    start: { line: 369, column: 43 },
                    end: { line: 369, column: 44 }
                  },
                  loc: { start: { line: 369, column: 54 }, end: { line: 412, column: 1 } },
                  line: 369
                },
                '16': {
                  name: 'calculateOffset',
                  decl: { start: { line: 418, column: 9 }, end: { line: 418, column: 24 } },
                  loc: { start: { line: 418, column: 33 }, end: { line: 431, column: 1 } },
                  line: 418
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 26, column: 2 }, end: { line: 37, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 26, column: 2 }, end: { line: 37, column: 3 } },
                    { start: { line: 26, column: 2 }, end: { line: 37, column: 3 } }
                  ],
                  line: 26
                },
                '1': {
                  loc: { start: { line: 93, column: 2 }, end: { line: 96, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 93, column: 2 }, end: { line: 96, column: 3 } },
                    { start: { line: 93, column: 2 }, end: { line: 96, column: 3 } }
                  ],
                  line: 93
                },
                '2': {
                  loc: { start: { line: 109, column: 2 }, end: { line: 112, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 109, column: 2 }, end: { line: 112, column: 3 } },
                    { start: { line: 109, column: 2 }, end: { line: 112, column: 3 } }
                  ],
                  line: 109
                },
                '3': {
                  loc: { start: { line: 120, column: 2 }, end: { line: 138, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 120, column: 2 }, end: { line: 138, column: 3 } },
                    { start: { line: 120, column: 2 }, end: { line: 138, column: 3 } }
                  ],
                  line: 120
                },
                '4': {
                  loc: { start: { line: 120, column: 6 }, end: { line: 120, column: 58 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 120, column: 6 }, end: { line: 120, column: 30 } },
                    { start: { line: 120, column: 34 }, end: { line: 120, column: 58 } }
                  ],
                  line: 120
                },
                '5': {
                  loc: { start: { line: 129, column: 4 }, end: { line: 136, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 129, column: 4 }, end: { line: 136, column: 5 } },
                    { start: { line: 129, column: 4 }, end: { line: 136, column: 5 } }
                  ],
                  line: 129
                },
                '6': {
                  loc: { start: { line: 129, column: 8 }, end: { line: 129, column: 60 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 129, column: 8 }, end: { line: 129, column: 32 } },
                    { start: { line: 129, column: 36 }, end: { line: 129, column: 60 } }
                  ],
                  line: 129
                },
                '7': {
                  loc: { start: { line: 131, column: 6 }, end: { line: 133, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 131, column: 6 }, end: { line: 133, column: 7 } },
                    { start: { line: 131, column: 6 }, end: { line: 133, column: 7 } }
                  ],
                  line: 131
                },
                '8': {
                  loc: { start: { line: 131, column: 10 }, end: { line: 131, column: 67 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 131, column: 10 }, end: { line: 131, column: 15 } },
                    { start: { line: 131, column: 19 }, end: { line: 131, column: 24 } },
                    { start: { line: 131, column: 28 }, end: { line: 131, column: 45 } },
                    { start: { line: 131, column: 49 }, end: { line: 131, column: 67 } }
                  ],
                  line: 131
                },
                '9': {
                  loc: { start: { line: 149, column: 2 }, end: { line: 153, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 149, column: 2 }, end: { line: 153, column: 3 } },
                    { start: { line: 149, column: 2 }, end: { line: 153, column: 3 } }
                  ],
                  line: 149
                },
                '10': {
                  loc: { start: { line: 159, column: 2 }, end: { line: 166, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 159, column: 2 }, end: { line: 166, column: 3 } },
                    { start: { line: 159, column: 2 }, end: { line: 166, column: 3 } }
                  ],
                  line: 159
                },
                '11': {
                  loc: { start: { line: 161, column: 4 }, end: { line: 164, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 161, column: 4 }, end: { line: 164, column: 5 } },
                    { start: { line: 161, column: 4 }, end: { line: 164, column: 5 } }
                  ],
                  line: 161
                },
                '12': {
                  loc: { start: { line: 172, column: 2 }, end: { line: 183, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 172, column: 2 }, end: { line: 183, column: 3 } },
                    { start: { line: 172, column: 2 }, end: { line: 183, column: 3 } }
                  ],
                  line: 172
                },
                '13': {
                  loc: { start: { line: 173, column: 4 }, end: { line: 180, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 173, column: 4 }, end: { line: 180, column: 5 } },
                    { start: { line: 173, column: 4 }, end: { line: 180, column: 5 } }
                  ],
                  line: 173
                },
                '14': {
                  loc: { start: { line: 174, column: 6 }, end: { line: 177, column: 32 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 174, column: 6 }, end: { line: 174, column: 28 } },
                    { start: { line: 175, column: 6 }, end: { line: 175, column: 28 } },
                    { start: { line: 176, column: 6 }, end: { line: 176, column: 26 } },
                    { start: { line: 177, column: 6 }, end: { line: 177, column: 32 } }
                  ],
                  line: 174
                },
                '15': {
                  loc: { start: { line: 189, column: 2 }, end: { line: 191, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 189, column: 2 }, end: { line: 191, column: 3 } },
                    { start: { line: 189, column: 2 }, end: { line: 191, column: 3 } }
                  ],
                  line: 189
                },
                '16': {
                  loc: { start: { line: 196, column: 2 }, end: { line: 198, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 196, column: 2 }, end: { line: 198, column: 3 } },
                    { start: { line: 196, column: 2 }, end: { line: 198, column: 3 } }
                  ],
                  line: 196
                },
                '17': {
                  loc: { start: { line: 203, column: 2 }, end: { line: 216, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 203, column: 2 }, end: { line: 216, column: 3 } },
                    { start: { line: 203, column: 2 }, end: { line: 216, column: 3 } }
                  ],
                  line: 203
                },
                '18': {
                  loc: { start: { line: 206, column: 4 }, end: { line: 208, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 206, column: 4 }, end: { line: 208, column: 5 } },
                    { start: { line: 206, column: 4 }, end: { line: 208, column: 5 } }
                  ],
                  line: 206
                },
                '19': {
                  loc: { start: { line: 236, column: 2 }, end: { line: 238, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 236, column: 2 }, end: { line: 238, column: 3 } },
                    { start: { line: 236, column: 2 }, end: { line: 238, column: 3 } }
                  ],
                  line: 236
                },
                '20': {
                  loc: { start: { line: 236, column: 8 }, end: { line: 236, column: 38 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 236, column: 8 }, end: { line: 236, column: 20 } },
                    { start: { line: 236, column: 24 }, end: { line: 236, column: 38 } }
                  ],
                  line: 236
                },
                '21': {
                  loc: { start: { line: 240, column: 2 }, end: { line: 244, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 240, column: 2 }, end: { line: 244, column: 3 } },
                    { start: { line: 240, column: 2 }, end: { line: 244, column: 3 } }
                  ],
                  line: 240
                },
                '22': {
                  loc: { start: { line: 242, column: 9 }, end: { line: 244, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 242, column: 9 }, end: { line: 244, column: 3 } },
                    { start: { line: 242, column: 9 }, end: { line: 244, column: 3 } }
                  ],
                  line: 242
                },
                '23': {
                  loc: { start: { line: 250, column: 2 }, end: { line: 353, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 250, column: 2 }, end: { line: 353, column: 3 } },
                    { start: { line: 250, column: 2 }, end: { line: 353, column: 3 } }
                  ],
                  line: 250
                },
                '24': {
                  loc: { start: { line: 251, column: 4 }, end: { line: 253, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 251, column: 4 }, end: { line: 253, column: 5 } },
                    { start: { line: 251, column: 4 }, end: { line: 253, column: 5 } }
                  ],
                  line: 251
                },
                '25': {
                  loc: { start: { line: 255, column: 4 }, end: { line: 262, column: 5 } },
                  type: 'switch',
                  locations: [
                    { start: { line: 256, column: 6 }, end: { line: 258, column: 14 } },
                    { start: { line: 259, column: 6 }, end: { line: 261, column: 14 } }
                  ],
                  line: 255
                },
                '26': {
                  loc: { start: { line: 265, column: 4 }, end: { line: 287, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 265, column: 4 }, end: { line: 287, column: 5 } },
                    { start: { line: 265, column: 4 }, end: { line: 287, column: 5 } }
                  ],
                  line: 265
                },
                '27': {
                  loc: { start: { line: 266, column: 6 }, end: { line: 268, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 266, column: 6 }, end: { line: 268, column: 7 } },
                    { start: { line: 266, column: 6 }, end: { line: 268, column: 7 } }
                  ],
                  line: 266
                },
                '28': {
                  loc: { start: { line: 270, column: 6 }, end: { line: 283, column: 7 } },
                  type: 'switch',
                  locations: [
                    { start: { line: 271, column: 8 }, end: { line: 274, column: 16 } },
                    { start: { line: 275, column: 8 }, end: { line: 278, column: 16 } },
                    { start: { line: 279, column: 8 }, end: { line: 282, column: 16 } }
                  ],
                  line: 270
                },
                '29': {
                  loc: { start: { line: 291, column: 4 }, end: { line: 335, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 291, column: 4 }, end: { line: 335, column: 5 } },
                    { start: { line: 291, column: 4 }, end: { line: 335, column: 5 } }
                  ],
                  line: 291
                },
                '30': {
                  loc: { start: { line: 298, column: 10 }, end: { line: 304, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 298, column: 10 }, end: { line: 304, column: 11 } },
                    { start: { line: 298, column: 10 }, end: { line: 304, column: 11 } }
                  ],
                  line: 298
                },
                '31': {
                  loc: { start: { line: 298, column: 14 }, end: { line: 298, column: 53 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 298, column: 14 }, end: { line: 298, column: 34 } },
                    { start: { line: 298, column: 38 }, end: { line: 298, column: 53 } }
                  ],
                  line: 298
                },
                '32': {
                  loc: { start: { line: 308, column: 8 }, end: { line: 310, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 308, column: 8 }, end: { line: 310, column: 9 } },
                    { start: { line: 308, column: 8 }, end: { line: 310, column: 9 } }
                  ],
                  line: 308
                },
                '33': {
                  loc: { start: { line: 320, column: 10 }, end: { line: 326, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 320, column: 10 }, end: { line: 326, column: 11 } },
                    { start: { line: 320, column: 10 }, end: { line: 326, column: 11 } }
                  ],
                  line: 320
                },
                '34': {
                  loc: { start: { line: 322, column: 17 }, end: { line: 326, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 322, column: 17 }, end: { line: 326, column: 11 } },
                    { start: { line: 322, column: 17 }, end: { line: 326, column: 11 } }
                  ],
                  line: 322
                },
                '35': {
                  loc: { start: { line: 322, column: 21 }, end: { line: 322, column: 60 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 322, column: 21 }, end: { line: 322, column: 41 } },
                    { start: { line: 322, column: 45 }, end: { line: 322, column: 60 } }
                  ],
                  line: 322
                },
                '36': {
                  loc: { start: { line: 332, column: 6 }, end: { line: 334, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 332, column: 6 }, end: { line: 334, column: 7 } },
                    { start: { line: 332, column: 6 }, end: { line: 334, column: 7 } }
                  ],
                  line: 332
                },
                '37': {
                  loc: { start: { line: 342, column: 4 }, end: { line: 346, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 342, column: 4 }, end: { line: 346, column: 5 } },
                    { start: { line: 342, column: 4 }, end: { line: 346, column: 5 } }
                  ],
                  line: 342
                },
                '38': {
                  loc: { start: { line: 344, column: 11 }, end: { line: 346, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 344, column: 11 }, end: { line: 346, column: 5 } },
                    { start: { line: 344, column: 11 }, end: { line: 346, column: 5 } }
                  ],
                  line: 344
                },
                '39': {
                  loc: { start: { line: 365, column: 45 }, end: { line: 365, column: 63 } },
                  type: 'default-arg',
                  locations: [
                    { start: { line: 365, column: 49 }, end: { line: 365, column: 63 } }
                  ],
                  line: 365
                },
                '40': {
                  loc: { start: { line: 366, column: 9 }, end: { line: 366, column: 60 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 366, column: 9 }, end: { line: 366, column: 30 } },
                    { start: { line: 366, column: 34 }, end: { line: 366, column: 40 } },
                    { start: { line: 366, column: 44 }, end: { line: 366, column: 60 } }
                  ],
                  line: 366
                },
                '41': {
                  loc: { start: { line: 370, column: 2 }, end: { line: 374, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 370, column: 2 }, end: { line: 374, column: 3 } },
                    { start: { line: 370, column: 2 }, end: { line: 374, column: 3 } }
                  ],
                  line: 370
                },
                '42': {
                  loc: { start: { line: 421, column: 2 }, end: { line: 429, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 421, column: 2 }, end: { line: 429, column: 3 } },
                    { start: { line: 421, column: 2 }, end: { line: 429, column: 3 } }
                  ],
                  line: 421
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0,
                '118': 0,
                '119': 0,
                '120': 0,
                '121': 0,
                '122': 0,
                '123': 0,
                '124': 0,
                '125': 0,
                '126': 0,
                '127': 0,
                '128': 0,
                '129': 0,
                '130': 0,
                '131': 0,
                '132': 0,
                '133': 0,
                '134': 0,
                '135': 0,
                '136': 0,
                '137': 0,
                '138': 0,
                '139': 0,
                '140': 0,
                '141': 0,
                '142': 0,
                '143': 0,
                '144': 0,
                '145': 0,
                '146': 0,
                '147': 0,
                '148': 0,
                '149': 0,
                '150': 0,
                '151': 0,
                '152': 0,
                '153': 0,
                '154': 0,
                '155': 0,
                '156': 0,
                '157': 0,
                '158': 0,
                '159': 0,
                '160': 0,
                '161': 0,
                '162': 0,
                '163': 0,
                '164': 0,
                '165': 0,
                '166': 0,
                '167': 0,
                '168': 0,
                '169': 0,
                '170': 0,
                '171': 0,
                '172': 0,
                '173': 0,
                '174': 0,
                '175': 0,
                '176': 0,
                '177': 0,
                '178': 0,
                '179': 0,
                '180': 0,
                '181': 0,
                '182': 0,
                '183': 0,
                '184': 0,
                '185': 0,
                '186': 0,
                '187': 0,
                '188': 0,
                '189': 0,
                '190': 0,
                '191': 0,
                '192': 0,
                '193': 0,
                '194': 0,
                '195': 0,
                '196': 0,
                '197': 0,
                '198': 0,
                '199': 0,
                '200': 0,
                '201': 0,
                '202': 0,
                '203': 0,
                '204': 0,
                '205': 0,
                '206': 0,
                '207': 0,
                '208': 0,
                '209': 0,
                '210': 0,
                '211': 0,
                '212': 0,
                '213': 0,
                '214': 0,
                '215': 0,
                '216': 0,
                '217': 0,
                '218': 0,
                '219': 0,
                '220': 0,
                '221': 0,
                '222': 0,
                '223': 0,
                '224': 0,
                '225': 0,
                '226': 0,
                '227': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0, 0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0, 0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0],
                '20': [0, 0],
                '21': [0, 0],
                '22': [0, 0],
                '23': [0, 0],
                '24': [0, 0],
                '25': [0, 0],
                '26': [0, 0],
                '27': [0, 0],
                '28': [0, 0, 0],
                '29': [0, 0],
                '30': [0, 0],
                '31': [0, 0],
                '32': [0, 0],
                '33': [0, 0],
                '34': [0, 0],
                '35': [0, 0],
                '36': [0, 0],
                '37': [0, 0],
                '38': [0, 0],
                '39': [0],
                '40': [0, 0, 0],
                '41': [0, 0],
                '42': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: 'f97af0f042bcc18dd801736504d0a3f00a8ccfa9'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.symbol');
          _dereq_('core-js/modules/es.symbol.description');
          _dereq_('core-js/modules/es.symbol.iterator');
          _dereq_('core-js/modules/es.array.iterator');
          _dereq_('core-js/modules/es.number.constructor');
          _dereq_('core-js/modules/es.object.assign');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.regexp.exec');
          _dereq_('core-js/modules/es.regexp.to-string');
          _dereq_('core-js/modules/es.string.iterator');
          _dereq_('core-js/modules/es.string.replace');
          _dereq_('core-js/modules/es.string.split');
          _dereq_('core-js/modules/web.dom-collections.iterator');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('./main'));
          var constants = _interopRequireWildcard(_dereq_('../core/constants'));
          function _getRequireWildcardCache() {
            if (typeof WeakMap !== 'function') return null;
            var cache = new WeakMap();
            _getRequireWildcardCache = function _getRequireWildcardCache() {
              return cache;
            };
            return cache;
          }
          function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
              return obj;
            }
            if (obj === null || (_typeof(obj) !== 'object' && typeof obj !== 'function')) {
              return { default: obj };
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
              return cache.get(obj);
            }
            var newObj = {};
            var hasPropertyDescriptor =
              Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
              if (Object.prototype.hasOwnProperty.call(obj, key)) {
                var desc = hasPropertyDescriptor
                  ? Object.getOwnPropertyDescriptor(obj, key)
                  : null;
                if (desc && (desc.get || desc.set)) {
                  Object.defineProperty(newObj, key, desc);
                } else {
                  newObj[key] = obj[key];
                }
              }
            }
            newObj.default = obj;
            if (cache) {
              cache.set(obj, newObj);
            }
            return newObj;
          }
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          function _typeof(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof = function _typeof(obj) {
                return typeof obj;
              };
            } else {
              _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof(obj);
          }
          cov_1fcne63ktz.s[0]++;

          /**
           * Main graphics and rendering context, as well as the base API
           * implementation for p5.js "core". To be used as the superclass for
           * Renderer2D and Renderer3D classes, respectively.
           *
           * @class p5.Renderer
           * @constructor
           * @extends p5.Element
           * @param {String} elt DOM node that is wrapped
           * @param {p5} [pInst] pointer to p5 instance
           * @param {Boolean} [isMainCanvas] whether we're using it as main canvas
           */
          _main.default.Renderer = function(elt, pInst, isMainCanvas) {
            cov_1fcne63ktz.f[0]++;
            cov_1fcne63ktz.s[1]++;
            _main.default.Element.call(this, elt, pInst);
            cov_1fcne63ktz.s[2]++;
            this.canvas = elt;
            cov_1fcne63ktz.s[3]++;
            this._pixelsState = pInst;
            cov_1fcne63ktz.s[4]++;
            if (isMainCanvas) {
              cov_1fcne63ktz.b[0][0]++;
              cov_1fcne63ktz.s[5]++;
              this._isMainCanvas = true;
              // for pixel method sharing with pimage
              cov_1fcne63ktz.s[6]++;
              this._pInst._setProperty('_curElement', this);
              cov_1fcne63ktz.s[7]++;
              this._pInst._setProperty('canvas', this.canvas);
              cov_1fcne63ktz.s[8]++;
              this._pInst._setProperty('width', this.width);
              cov_1fcne63ktz.s[9]++;
              this._pInst._setProperty('height', this.height);
            } else {
              cov_1fcne63ktz.b[0][1]++;
              cov_1fcne63ktz.s[10]++;
              // hide if offscreen buffer by default
              this.canvas.style.display = 'none';
              cov_1fcne63ktz.s[11]++;
              this._styles = []; // non-main elt styles stored in p5.Renderer
            }
            cov_1fcne63ktz.s[12]++;

            this._textSize = 12;
            cov_1fcne63ktz.s[13]++;
            this._textLeading = 15;
            cov_1fcne63ktz.s[14]++;
            this._textFont = 'sans-serif';
            cov_1fcne63ktz.s[15]++;
            this._textStyle = constants.NORMAL;
            cov_1fcne63ktz.s[16]++;
            this._textAscent = null;
            cov_1fcne63ktz.s[17]++;
            this._textDescent = null;
            cov_1fcne63ktz.s[18]++;
            this._textAlign = constants.LEFT;
            cov_1fcne63ktz.s[19]++;
            this._textBaseline = constants.BASELINE;
            cov_1fcne63ktz.s[20]++;
            this._textWrap = constants.WORD;
            cov_1fcne63ktz.s[21]++;

            this._rectMode = constants.CORNER;
            cov_1fcne63ktz.s[22]++;
            this._ellipseMode = constants.CENTER;
            cov_1fcne63ktz.s[23]++;
            this._curveTightness = 0;
            cov_1fcne63ktz.s[24]++;
            this._imageMode = constants.CORNER;
            cov_1fcne63ktz.s[25]++;

            this._tint = null;
            cov_1fcne63ktz.s[26]++;
            this._doStroke = true;
            cov_1fcne63ktz.s[27]++;
            this._doFill = true;
            cov_1fcne63ktz.s[28]++;
            this._strokeSet = false;
            cov_1fcne63ktz.s[29]++;
            this._fillSet = false;
            cov_1fcne63ktz.s[30]++;
            this._leadingSet = false;
          };
          cov_1fcne63ktz.s[31]++;

          _main.default.Renderer.prototype = Object.create(_main.default.Element.prototype);

          // the renderer should return a 'style' object that it wishes to
          // store on the push stack.
          cov_1fcne63ktz.s[32]++;
          _main.default.Renderer.prototype.push = function() {
            cov_1fcne63ktz.f[1]++;
            cov_1fcne63ktz.s[33]++;
            return {
              properties: {
                _doStroke: this._doStroke,
                _strokeSet: this._strokeSet,
                _doFill: this._doFill,
                _fillSet: this._fillSet,
                _tint: this._tint,
                _imageMode: this._imageMode,
                _rectMode: this._rectMode,
                _ellipseMode: this._ellipseMode,
                _textFont: this._textFont,
                _textLeading: this._textLeading,
                _leadingSet: this._leadingSet,
                _textSize: this._textSize,
                _textAlign: this._textAlign,
                _textBaseline: this._textBaseline,
                _textStyle: this._textStyle,
                _textWrap: this._textWrap
              }
            };
          };

          // a pop() operation is in progress
          // the renderer is passed the 'style' object that it returned
          // from its push() method.
          cov_1fcne63ktz.s[34]++;
          _main.default.Renderer.prototype.pop = function(style) {
            cov_1fcne63ktz.f[2]++;
            cov_1fcne63ktz.s[35]++;
            if (style.properties) {
              cov_1fcne63ktz.b[1][0]++;
              cov_1fcne63ktz.s[36]++;
              // copy the style properties back into the renderer
              Object.assign(this, style.properties);
            } else {
              cov_1fcne63ktz.b[1][1]++;
            }
          };

          /**
           * Resize our canvas element.
           */ cov_1fcne63ktz.s[37]++;
          _main.default.Renderer.prototype.resize = function(w, h) {
            cov_1fcne63ktz.f[3]++;
            cov_1fcne63ktz.s[38]++;
            this.width = w;
            cov_1fcne63ktz.s[39]++;
            this.height = h;
            cov_1fcne63ktz.s[40]++;
            this.elt.width = w * this._pInst._pixelDensity;
            cov_1fcne63ktz.s[41]++;
            this.elt.height = h * this._pInst._pixelDensity;
            cov_1fcne63ktz.s[42]++;
            this.elt.style.width = ''.concat(w, 'px');
            cov_1fcne63ktz.s[43]++;
            this.elt.style.height = ''.concat(h, 'px');
            cov_1fcne63ktz.s[44]++;
            if (this._isMainCanvas) {
              cov_1fcne63ktz.b[2][0]++;
              cov_1fcne63ktz.s[45]++;
              this._pInst._setProperty('width', this.width);
              cov_1fcne63ktz.s[46]++;
              this._pInst._setProperty('height', this.height);
            } else {
              cov_1fcne63ktz.b[2][1]++;
            }
          };
          cov_1fcne63ktz.s[47]++;

          _main.default.Renderer.prototype.get = function(x, y, w, h) {
            cov_1fcne63ktz.f[4]++;
            var pixelsState = (cov_1fcne63ktz.s[48]++, this._pixelsState);
            var pd = (cov_1fcne63ktz.s[49]++, pixelsState._pixelDensity);
            var canvas = (cov_1fcne63ktz.s[50]++, this.canvas);
            cov_1fcne63ktz.s[51]++;

            if (
              (cov_1fcne63ktz.b[4][0]++, typeof x === 'undefined') &&
              (cov_1fcne63ktz.b[4][1]++, typeof y === 'undefined')
            ) {
              cov_1fcne63ktz.b[3][0]++;
              cov_1fcne63ktz.s[52]++;
              // get()
              x = y = 0;
              cov_1fcne63ktz.s[53]++;
              w = pixelsState.width;
              cov_1fcne63ktz.s[54]++;
              h = pixelsState.height;
            } else {
              cov_1fcne63ktz.b[3][1]++;
              cov_1fcne63ktz.s[55]++;
              x *= pd;
              cov_1fcne63ktz.s[56]++;
              y *= pd;
              cov_1fcne63ktz.s[57]++;

              if (
                (cov_1fcne63ktz.b[6][0]++, typeof w === 'undefined') &&
                (cov_1fcne63ktz.b[6][1]++, typeof h === 'undefined')
              ) {
                cov_1fcne63ktz.b[5][0]++;
                cov_1fcne63ktz.s[58]++;
                // get(x,y)
                if (
                  (cov_1fcne63ktz.b[8][0]++, x < 0) ||
                  (cov_1fcne63ktz.b[8][1]++, y < 0) ||
                  (cov_1fcne63ktz.b[8][2]++, x >= canvas.width) ||
                  (cov_1fcne63ktz.b[8][3]++, y >= canvas.height)
                ) {
                  cov_1fcne63ktz.b[7][0]++;
                  cov_1fcne63ktz.s[59]++;
                  return [0, 0, 0, 0];
                } else {
                  cov_1fcne63ktz.b[7][1]++;
                }
                cov_1fcne63ktz.s[60]++;

                return this._getPixel(x, y);
              } else {
                cov_1fcne63ktz.b[5][1]++;
              }
              // get(x,y,w,h)
            }

            var region = (cov_1fcne63ktz.s[61]++, new _main.default.Image(w, h));
            cov_1fcne63ktz.s[62]++;
            region.canvas
              .getContext('2d')
              .drawImage(canvas, x, y, w * pd, h * pd, 0, 0, w, h);
            cov_1fcne63ktz.s[63]++;

            return region;
          };
          cov_1fcne63ktz.s[64]++;

          _main.default.Renderer.prototype.textLeading = function(l) {
            cov_1fcne63ktz.f[5]++;
            cov_1fcne63ktz.s[65]++;
            if (typeof l === 'number') {
              cov_1fcne63ktz.b[9][0]++;
              cov_1fcne63ktz.s[66]++;
              this._setProperty('_leadingSet', true);
              cov_1fcne63ktz.s[67]++;
              this._setProperty('_textLeading', l);
              cov_1fcne63ktz.s[68]++;
              return this._pInst;
            } else {
              cov_1fcne63ktz.b[9][1]++;
            }
            cov_1fcne63ktz.s[69]++;

            return this._textLeading;
          };
          cov_1fcne63ktz.s[70]++;

          _main.default.Renderer.prototype.textSize = function(s) {
            cov_1fcne63ktz.f[6]++;
            cov_1fcne63ktz.s[71]++;
            if (typeof s === 'number') {
              cov_1fcne63ktz.b[10][0]++;
              cov_1fcne63ktz.s[72]++;
              this._setProperty('_textSize', s);
              cov_1fcne63ktz.s[73]++;
              if (!this._leadingSet) {
                cov_1fcne63ktz.b[11][0]++;
                cov_1fcne63ktz.s[74]++;
                // only use a default value if not previously set (#5181)
                this._setProperty('_textLeading', s * constants._DEFAULT_LEADMULT);
              } else {
                cov_1fcne63ktz.b[11][1]++;
              }
              cov_1fcne63ktz.s[75]++;
              return this._applyTextProperties();
            } else {
              cov_1fcne63ktz.b[10][1]++;
            }
            cov_1fcne63ktz.s[76]++;

            return this._textSize;
          };
          cov_1fcne63ktz.s[77]++;

          _main.default.Renderer.prototype.textStyle = function(s) {
            cov_1fcne63ktz.f[7]++;
            cov_1fcne63ktz.s[78]++;
            if (s) {
              cov_1fcne63ktz.b[12][0]++;
              cov_1fcne63ktz.s[79]++;
              if (
                (cov_1fcne63ktz.b[14][0]++, s === constants.NORMAL) ||
                (cov_1fcne63ktz.b[14][1]++, s === constants.ITALIC) ||
                (cov_1fcne63ktz.b[14][2]++, s === constants.BOLD) ||
                (cov_1fcne63ktz.b[14][3]++, s === constants.BOLDITALIC)
              ) {
                cov_1fcne63ktz.b[13][0]++;
                cov_1fcne63ktz.s[80]++;
                this._setProperty('_textStyle', s);
              } else {
                cov_1fcne63ktz.b[13][1]++;
              }
              cov_1fcne63ktz.s[81]++;

              return this._applyTextProperties();
            } else {
              cov_1fcne63ktz.b[12][1]++;
            }
            cov_1fcne63ktz.s[82]++;

            return this._textStyle;
          };
          cov_1fcne63ktz.s[83]++;

          _main.default.Renderer.prototype.textAscent = function() {
            cov_1fcne63ktz.f[8]++;
            cov_1fcne63ktz.s[84]++;
            if (this._textAscent === null) {
              cov_1fcne63ktz.b[15][0]++;
              cov_1fcne63ktz.s[85]++;
              this._updateTextMetrics();
            } else {
              cov_1fcne63ktz.b[15][1]++;
            }
            cov_1fcne63ktz.s[86]++;
            return this._textAscent;
          };
          cov_1fcne63ktz.s[87]++;

          _main.default.Renderer.prototype.textDescent = function() {
            cov_1fcne63ktz.f[9]++;
            cov_1fcne63ktz.s[88]++;
            if (this._textDescent === null) {
              cov_1fcne63ktz.b[16][0]++;
              cov_1fcne63ktz.s[89]++;
              this._updateTextMetrics();
            } else {
              cov_1fcne63ktz.b[16][1]++;
            }
            cov_1fcne63ktz.s[90]++;
            return this._textDescent;
          };
          cov_1fcne63ktz.s[91]++;

          _main.default.Renderer.prototype.textAlign = function(h, v) {
            cov_1fcne63ktz.f[10]++;
            cov_1fcne63ktz.s[92]++;
            if (typeof h !== 'undefined') {
              cov_1fcne63ktz.b[17][0]++;
              cov_1fcne63ktz.s[93]++;
              this._setProperty('_textAlign', h);
              cov_1fcne63ktz.s[94]++;

              if (typeof v !== 'undefined') {
                cov_1fcne63ktz.b[18][0]++;
                cov_1fcne63ktz.s[95]++;
                this._setProperty('_textBaseline', v);
              } else {
                cov_1fcne63ktz.b[18][1]++;
              }
              cov_1fcne63ktz.s[96]++;

              return this._applyTextProperties();
            } else {
              cov_1fcne63ktz.b[17][1]++;
              cov_1fcne63ktz.s[97]++;
              return {
                horizontal: this._textAlign,
                vertical: this._textBaseline
              };
            }
          };
          cov_1fcne63ktz.s[98]++;

          _main.default.Renderer.prototype.textWrap = function(wrapStyle) {
            cov_1fcne63ktz.f[11]++;
            cov_1fcne63ktz.s[99]++;
            this._setProperty('_textWrap', wrapStyle);
            cov_1fcne63ktz.s[100]++;
            return this._textWrap;
          };
          cov_1fcne63ktz.s[101]++;

          _main.default.Renderer.prototype.text = function(str, x, y, maxWidth, maxHeight) {
            cov_1fcne63ktz.f[12]++;
            var p = (cov_1fcne63ktz.s[102]++, this._pInst);
            var textWrapStyle = (cov_1fcne63ktz.s[103]++, this._textWrap);
            var lines;
            var line;
            var testLine;
            var testWidth;
            var words;
            var chars;
            var shiftedY;
            var finalMaxHeight = (cov_1fcne63ktz.s[104]++, Number.MAX_VALUE);
            cov_1fcne63ktz.s[105]++;

            if (
              !(
                (cov_1fcne63ktz.b[20][0]++, this._doFill) ||
                (cov_1fcne63ktz.b[20][1]++, this._doStroke)
              )
            ) {
              cov_1fcne63ktz.b[19][0]++;
              cov_1fcne63ktz.s[106]++;
              return;
            } else {
              cov_1fcne63ktz.b[19][1]++;
            }
            cov_1fcne63ktz.s[107]++;

            if (typeof str === 'undefined') {
              cov_1fcne63ktz.b[21][0]++;
              cov_1fcne63ktz.s[108]++;
              return;
            } else {
              cov_1fcne63ktz.b[21][1]++;
              cov_1fcne63ktz.s[109]++;
              if (typeof str !== 'string') {
                cov_1fcne63ktz.b[22][0]++;
                cov_1fcne63ktz.s[110]++;
                str = str.toString();
              } else {
                cov_1fcne63ktz.b[22][1]++;
              }
            }

            // Replaces tabs with double-spaces and splits string at any line breaks present in the original string
            cov_1fcne63ktz.s[111]++;
            str = str.replace(/(\t)/g, '  ');
            cov_1fcne63ktz.s[112]++;
            lines = str.split('\n');
            cov_1fcne63ktz.s[113]++;

            if (typeof maxWidth !== 'undefined') {
              cov_1fcne63ktz.b[23][0]++;
              cov_1fcne63ktz.s[114]++;
              if (this._rectMode === constants.CENTER) {
                cov_1fcne63ktz.b[24][0]++;
                cov_1fcne63ktz.s[115]++;
                x -= maxWidth / 2;
              } else {
                cov_1fcne63ktz.b[24][1]++;
              }
              cov_1fcne63ktz.s[116]++;

              switch (this._textAlign) {
                case constants.CENTER:
                  cov_1fcne63ktz.b[25][0]++;
                  cov_1fcne63ktz.s[117]++;
                  x += maxWidth / 2;
                  cov_1fcne63ktz.s[118]++;
                  break;
                case constants.RIGHT:
                  cov_1fcne63ktz.b[25][1]++;
                  cov_1fcne63ktz.s[119]++;
                  x += maxWidth;
                  cov_1fcne63ktz.s[120]++;
                  break;
              }

              var baselineHacked = (cov_1fcne63ktz.s[121]++, false);
              cov_1fcne63ktz.s[122]++;
              if (typeof maxHeight !== 'undefined') {
                cov_1fcne63ktz.b[26][0]++;
                cov_1fcne63ktz.s[123]++;
                if (this._rectMode === constants.CENTER) {
                  cov_1fcne63ktz.b[27][0]++;
                  cov_1fcne63ktz.s[124]++;
                  y -= maxHeight / 2;
                } else {
                  cov_1fcne63ktz.b[27][1]++;
                }
                cov_1fcne63ktz.s[125]++;

                switch (this._textBaseline) {
                  case constants.BOTTOM:
                    cov_1fcne63ktz.b[28][0]++;
                    cov_1fcne63ktz.s[126]++;
                    shiftedY = y + (maxHeight - totalHeight);
                    cov_1fcne63ktz.s[127]++;
                    y = Math.max(shiftedY, y);
                    cov_1fcne63ktz.s[128]++;
                    break;
                  case constants.CENTER:
                    cov_1fcne63ktz.b[28][1]++;
                    cov_1fcne63ktz.s[129]++;
                    shiftedY = y + (maxHeight - totalHeight) / 2;
                    cov_1fcne63ktz.s[130]++;
                    y = Math.max(shiftedY, y);
                    cov_1fcne63ktz.s[131]++;
                    break;
                  case constants.BASELINE:
                    cov_1fcne63ktz.b[28][2]++;
                    cov_1fcne63ktz.s[132]++;
                    baselineHacked = true;
                    cov_1fcne63ktz.s[133]++;
                    this._textBaseline = constants.TOP;
                    cov_1fcne63ktz.s[134]++;
                    break;
                }

                // remember the max-allowed y-position for any line (fix to #928)
                cov_1fcne63ktz.s[135]++;
                finalMaxHeight = y + maxHeight - p.textAscent();
              } else {
                cov_1fcne63ktz.b[26][1]++;
              }

              // Render lines of text according to settings of textWrap
              // Splits lines at spaces, for loop adds one word + space at a time and tests length with next word added
              cov_1fcne63ktz.s[136]++;
              if (textWrapStyle === constants.WORD) {
                cov_1fcne63ktz.b[29][0]++;
                cov_1fcne63ktz.s[137]++;
                for (
                  var lineIndex = (cov_1fcne63ktz.s[138]++, 0);
                  lineIndex < lines.length;
                  lineIndex++
                ) {
                  cov_1fcne63ktz.s[139]++;
                  line = '';
                  cov_1fcne63ktz.s[140]++;
                  words = lines[lineIndex].split(' ');
                  cov_1fcne63ktz.s[141]++;
                  for (
                    var wordIndex = (cov_1fcne63ktz.s[142]++, 0);
                    wordIndex < words.length;
                    wordIndex++
                  ) {
                    cov_1fcne63ktz.s[143]++;
                    testLine = ''.concat(line + words[wordIndex]) + ' ';
                    cov_1fcne63ktz.s[144]++;
                    testWidth = this.textWidth(testLine);
                    cov_1fcne63ktz.s[145]++;
                    if (
                      (cov_1fcne63ktz.b[31][0]++, testWidth > maxWidth) &&
                      (cov_1fcne63ktz.b[31][1]++, line.length > 0)
                    ) {
                      cov_1fcne63ktz.b[30][0]++;
                      cov_1fcne63ktz.s[146]++;
                      this._renderText(p, line, x, y, finalMaxHeight);
                      cov_1fcne63ktz.s[147]++;
                      line = ''.concat(words[wordIndex]) + ' ';
                      cov_1fcne63ktz.s[148]++;
                      y += p.textLeading();
                    } else {
                      cov_1fcne63ktz.b[30][1]++;
                      cov_1fcne63ktz.s[149]++;
                      line = testLine;
                    }
                  }
                  cov_1fcne63ktz.s[150]++;
                  this._renderText(p, line, x, y, finalMaxHeight);
                  cov_1fcne63ktz.s[151]++;
                  y += p.textLeading();
                  cov_1fcne63ktz.s[152]++;
                  if (baselineHacked) {
                    cov_1fcne63ktz.b[32][0]++;
                    cov_1fcne63ktz.s[153]++;
                    this._textBaseline = constants.BASELINE;
                  } else {
                    cov_1fcne63ktz.b[32][1]++;
                  }
                }
              } else {
                cov_1fcne63ktz.b[29][1]++;
                cov_1fcne63ktz.s[154]++;
                // Splits lines at characters, for loop adds one char at a time and tests length with next char added
                for (
                  var _lineIndex = (cov_1fcne63ktz.s[155]++, 0);
                  _lineIndex < lines.length;
                  _lineIndex++
                ) {
                  cov_1fcne63ktz.s[156]++;
                  line = '';
                  cov_1fcne63ktz.s[157]++;
                  chars = lines[_lineIndex].split('');
                  cov_1fcne63ktz.s[158]++;
                  for (
                    var charIndex = (cov_1fcne63ktz.s[159]++, 0);
                    charIndex < chars.length;
                    charIndex++
                  ) {
                    cov_1fcne63ktz.s[160]++;
                    testLine = ''.concat(line + chars[charIndex]);
                    cov_1fcne63ktz.s[161]++;
                    testWidth = this.textWidth(testLine);
                    cov_1fcne63ktz.s[162]++;
                    if (testWidth <= maxWidth) {
                      cov_1fcne63ktz.b[33][0]++;
                      cov_1fcne63ktz.s[163]++;
                      line += chars[charIndex];
                    } else {
                      cov_1fcne63ktz.b[33][1]++;
                      cov_1fcne63ktz.s[164]++;
                      if (
                        (cov_1fcne63ktz.b[35][0]++, testWidth > maxWidth) &&
                        (cov_1fcne63ktz.b[35][1]++, line.length > 0)
                      ) {
                        cov_1fcne63ktz.b[34][0]++;
                        cov_1fcne63ktz.s[165]++;
                        this._renderText(p, line, x, y, finalMaxHeight);
                        cov_1fcne63ktz.s[166]++;
                        y += p.textLeading();
                        cov_1fcne63ktz.s[167]++;
                        line = ''.concat(chars[charIndex]);
                      } else {
                        cov_1fcne63ktz.b[34][1]++;
                      }
                    }
                  }
                }
                cov_1fcne63ktz.s[168]++;
                this._renderText(p, line, x, y, finalMaxHeight);
                cov_1fcne63ktz.s[169]++;
                y += p.textLeading();
                cov_1fcne63ktz.s[170]++;

                if (baselineHacked) {
                  cov_1fcne63ktz.b[36][0]++;
                  cov_1fcne63ktz.s[171]++;
                  this._textBaseline = constants.BASELINE;
                } else {
                  cov_1fcne63ktz.b[36][1]++;
                }
              }
            } else {
              cov_1fcne63ktz.b[23][1]++;
              // Offset to account for vertically centering multiple lines of text - no
              // need to adjust anything for vertical align top or baseline
              var offset = (cov_1fcne63ktz.s[172]++, 0);

              var vAlign = (cov_1fcne63ktz.s[173]++, p.textAlign().vertical);
              cov_1fcne63ktz.s[174]++;
              if (vAlign === constants.CENTER) {
                cov_1fcne63ktz.b[37][0]++;
                cov_1fcne63ktz.s[175]++;
                offset = (lines.length - 1) * p.textLeading() / 2;
              } else {
                cov_1fcne63ktz.b[37][1]++;
                cov_1fcne63ktz.s[176]++;
                if (vAlign === constants.BOTTOM) {
                  cov_1fcne63ktz.b[38][0]++;
                  cov_1fcne63ktz.s[177]++;
                  offset = (lines.length - 1) * p.textLeading();
                } else {
                  cov_1fcne63ktz.b[38][1]++;
                }
              }

              // Renders lines of text at any line breaks present in the original string
              cov_1fcne63ktz.s[178]++;
              for (var i = (cov_1fcne63ktz.s[179]++, 0); i < lines.length; i++) {
                cov_1fcne63ktz.s[180]++;
                this._renderText(p, lines[i], x, y - offset, finalMaxHeight);
                cov_1fcne63ktz.s[181]++;
                y += p.textLeading();
              }
            }
            cov_1fcne63ktz.s[182]++;

            return p;
          };
          cov_1fcne63ktz.s[183]++;

          _main.default.Renderer.prototype._applyDefaults = function() {
            cov_1fcne63ktz.f[13]++;
            cov_1fcne63ktz.s[184]++;
            return this;
          };

          /**
           * Helper fxn to check font type (system or otf)
           */ cov_1fcne63ktz.s[185]++;
          _main.default.Renderer.prototype._isOpenType = function() {
            var f =
              arguments.length > 0 && arguments[0] !== undefined
                ? arguments[0]
                : (cov_1fcne63ktz.b[39][0]++, this._textFont);
            cov_1fcne63ktz.f[14]++;
            cov_1fcne63ktz.s[186]++;
            return (
              (cov_1fcne63ktz.b[40][0]++, _typeof(f) === 'object') &&
              (cov_1fcne63ktz.b[40][1]++, f.font) &&
              (cov_1fcne63ktz.b[40][2]++, f.font.supported)
            );
          };
          cov_1fcne63ktz.s[187]++;

          _main.default.Renderer.prototype._updateTextMetrics = function() {
            cov_1fcne63ktz.f[15]++;
            cov_1fcne63ktz.s[188]++;
            if (this._isOpenType()) {
              cov_1fcne63ktz.b[41][0]++;
              cov_1fcne63ktz.s[189]++;
              this._setProperty('_textAscent', this._textFont._textAscent());
              cov_1fcne63ktz.s[190]++;
              this._setProperty('_textDescent', this._textFont._textDescent());
              cov_1fcne63ktz.s[191]++;
              return this;
            } else {
              cov_1fcne63ktz.b[41][1]++;
            }

            // Adapted from http://stackoverflow.com/a/25355178
            var text = (cov_1fcne63ktz.s[192]++, document.createElement('span'));
            cov_1fcne63ktz.s[193]++;
            text.style.fontFamily = this._textFont;
            cov_1fcne63ktz.s[194]++;
            text.style.fontSize = ''.concat(this._textSize, 'px');
            cov_1fcne63ktz.s[195]++;
            text.innerHTML = 'ABCjgq|';

            var block = (cov_1fcne63ktz.s[196]++, document.createElement('div'));
            cov_1fcne63ktz.s[197]++;
            block.style.display = 'inline-block';
            cov_1fcne63ktz.s[198]++;
            block.style.width = '1px';
            cov_1fcne63ktz.s[199]++;
            block.style.height = '0px';

            var container = (cov_1fcne63ktz.s[200]++, document.createElement('div'));
            cov_1fcne63ktz.s[201]++;
            container.appendChild(text);
            cov_1fcne63ktz.s[202]++;
            container.appendChild(block);
            cov_1fcne63ktz.s[203]++;

            container.style.height = '0px';
            cov_1fcne63ktz.s[204]++;
            container.style.overflow = 'hidden';
            cov_1fcne63ktz.s[205]++;
            document.body.appendChild(container);
            cov_1fcne63ktz.s[206]++;

            block.style.verticalAlign = 'baseline';
            var blockOffset = (cov_1fcne63ktz.s[207]++, calculateOffset(block));
            var textOffset = (cov_1fcne63ktz.s[208]++, calculateOffset(text));
            var ascent = (cov_1fcne63ktz.s[209]++, blockOffset[1] - textOffset[1]);
            cov_1fcne63ktz.s[210]++;

            block.style.verticalAlign = 'bottom';
            cov_1fcne63ktz.s[211]++;
            blockOffset = calculateOffset(block);
            cov_1fcne63ktz.s[212]++;
            textOffset = calculateOffset(text);
            var height = (cov_1fcne63ktz.s[213]++, blockOffset[1] - textOffset[1]);
            var descent = (cov_1fcne63ktz.s[214]++, height - ascent);
            cov_1fcne63ktz.s[215]++;

            document.body.removeChild(container);
            cov_1fcne63ktz.s[216]++;

            this._setProperty('_textAscent', ascent);
            cov_1fcne63ktz.s[217]++;
            this._setProperty('_textDescent', descent);
            cov_1fcne63ktz.s[218]++;

            return this;
          };

          /**
           * Helper fxn to measure ascent and descent.
           * Adapted from http://stackoverflow.com/a/25355178
           */
          function calculateOffset(object) {
            cov_1fcne63ktz.f[16]++;
            var currentLeft = (cov_1fcne63ktz.s[219]++, 0),
              currentTop = (cov_1fcne63ktz.s[220]++, 0);
            cov_1fcne63ktz.s[221]++;
            if (object.offsetParent) {
              cov_1fcne63ktz.b[42][0]++;
              cov_1fcne63ktz.s[222]++;
              do {
                cov_1fcne63ktz.s[223]++;
                currentLeft += object.offsetLeft;
                cov_1fcne63ktz.s[224]++;
                currentTop += object.offsetTop;
              } while ((object = object.offsetParent));
            } else {
              cov_1fcne63ktz.b[42][1]++;
              cov_1fcne63ktz.s[225]++;
              currentLeft += object.offsetLeft;
              cov_1fcne63ktz.s[226]++;
              currentTop += object.offsetTop;
            }
            cov_1fcne63ktz.s[227]++;
            return [currentLeft, currentTop];
          }
          var _default = _main.default.Renderer;
          exports.default = _default;
        },
        {
          '../core/constants': 272,
          './main': 283,
          'core-js/modules/es.array.iterator': 174,
          'core-js/modules/es.number.constructor': 185,
          'core-js/modules/es.object.assign': 188,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.regexp.exec': 196,
          'core-js/modules/es.regexp.to-string': 197,
          'core-js/modules/es.string.iterator': 201,
          'core-js/modules/es.string.replace': 204,
          'core-js/modules/es.string.split': 206,
          'core-js/modules/es.symbol': 211,
          'core-js/modules/es.symbol.description': 209,
          'core-js/modules/es.symbol.iterator': 210,
          'core-js/modules/web.dom-collections.iterator': 244
        }
      ],
      287: [
        function(_dereq_, module, exports) {
          'use strict';
          function _typeof(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof = function _typeof(obj) {
                return typeof obj;
              };
            } else {
              _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof(obj);
          }
          var cov_2gaz5zp7zh = (function() {
            var path = '/Users/outofambit/src/p5.js/src/core/p5.Renderer2D.js';
            var hash = '131cbc7fe1c7284a3f586d6764f35001e9c100ae';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/core/p5.Renderer2D.js',
              statementMap: {
                '0': { start: { line: 12, column: 19 }, end: { line: 12, column: 34 } },
                '1': { start: { line: 15, column: 0 }, end: { line: 20, column: 2 } },
                '2': { start: { line: 16, column: 2 }, end: { line: 16, column: 51 } },
                '3': { start: { line: 17, column: 2 }, end: { line: 17, column: 53 } },
                '4': { start: { line: 18, column: 2 }, end: { line: 18, column: 66 } },
                '5': { start: { line: 19, column: 2 }, end: { line: 19, column: 14 } },
                '6': { start: { line: 22, column: 0 }, end: { line: 22, column: 63 } },
                '7': { start: { line: 24, column: 0 }, end: { line: 31, column: 2 } },
                '8': { start: { line: 25, column: 2 }, end: { line: 25, column: 62 } },
                '9': { start: { line: 26, column: 2 }, end: { line: 26, column: 42 } },
                '10': { start: { line: 27, column: 2 }, end: { line: 27, column: 41 } },
                '11': { start: { line: 28, column: 2 }, end: { line: 28, column: 45 } },
                '12': { start: { line: 29, column: 2 }, end: { line: 29, column: 48 } },
                '13': { start: { line: 30, column: 2 }, end: { line: 30, column: 54 } },
                '14': { start: { line: 33, column: 0 }, end: { line: 39, column: 2 } },
                '15': { start: { line: 34, column: 2 }, end: { line: 34, column: 48 } },
                '16': { start: { line: 35, column: 2 }, end: { line: 38, column: 4 } },
                '17': { start: { line: 45, column: 0 }, end: { line: 77, column: 2 } },
                '18': { start: { line: 46, column: 2 }, end: { line: 46, column: 29 } },
                '19': { start: { line: 47, column: 2 }, end: { line: 47, column: 21 } },
                '20': { start: { line: 49, column: 2 }, end: { line: 75, column: 3 } },
                '21': { start: { line: 50, column: 4 }, end: { line: 50, column: 62 } },
                '22': { start: { line: 52, column: 20 }, end: { line: 52, column: 35 } },
                '23': { start: { line: 54, column: 18 }, end: { line: 54, column: 44 } },
                '24': { start: { line: 57, column: 4 }, end: { line: 59, column: 5 } },
                '25': { start: { line: 58, column: 6 }, end: { line: 58, column: 48 } },
                '26': { start: { line: 61, column: 20 }, end: { line: 61, column: 36 } },
                '27': { start: { line: 62, column: 4 }, end: { line: 62, column: 27 } },
                '28': { start: { line: 64, column: 4 }, end: { line: 66, column: 5 } },
                '29': { start: { line: 65, column: 6 }, end: { line: 65, column: 44 } },
                '30': { start: { line: 68, column: 4 }, end: { line: 68, column: 64 } },
                '31': { start: { line: 70, column: 4 }, end: { line: 70, column: 27 } },
                '32': { start: { line: 72, column: 4 }, end: { line: 74, column: 5 } },
                '33': { start: { line: 73, column: 6 }, end: { line: 73, column: 26 } },
                '34': { start: { line: 76, column: 2 }, end: { line: 76, column: 32 } },
                '35': { start: { line: 79, column: 0 }, end: { line: 84, column: 2 } },
                '36': { start: { line: 80, column: 2 }, end: { line: 80, column: 29 } },
                '37': { start: { line: 81, column: 2 }, end: { line: 81, column: 21 } },
                '38': { start: { line: 82, column: 2 }, end: { line: 82, column: 63 } },
                '39': { start: { line: 83, column: 2 }, end: { line: 83, column: 32 } },
                '40': { start: { line: 86, column: 0 }, end: { line: 94, column: 2 } },
                '41': { start: { line: 87, column: 16 }, end: { line: 87, column: 42 } },
                '42': { start: { line: 88, column: 2 }, end: { line: 88, column: 34 } },
                '43': { start: { line: 91, column: 2 }, end: { line: 93, column: 3 } },
                '44': { start: { line: 92, column: 4 }, end: { line: 92, column: 56 } },
                '45': { start: { line: 96, column: 0 }, end: { line: 104, column: 2 } },
                '46': { start: { line: 97, column: 16 }, end: { line: 97, column: 42 } },
                '47': { start: { line: 98, column: 2 }, end: { line: 98, column: 36 } },
                '48': { start: { line: 101, column: 2 }, end: { line: 103, column: 3 } },
                '49': { start: { line: 102, column: 4 }, end: { line: 102, column: 58 } },
                '50': { start: { line: 106, column: 0 }, end: { line: 125, column: 2 } },
                '51': { start: { line: 107, column: 2 }, end: { line: 124, column: 3 } },
                '52': { start: { line: 109, column: 4 }, end: { line: 109, column: 58 } },
                '53': { start: { line: 110, column: 20 }, end: { line: 110, column: 66 } },
                '54': { start: { line: 111, column: 4 }, end: { line: 111, column: 44 } },
                '55': { start: { line: 114, column: 4 }, end: { line: 114, column: 62 } },
                '56': { start: { line: 115, column: 22 }, end: { line: 115, column: 70 } },
                '57': { start: { line: 116, column: 4 }, end: { line: 116, column: 48 } },
                '58': { start: { line: 119, column: 26 }, end: { line: 119, column: 47 } },
                '59': { start: { line: 120, column: 4 }, end: { line: 120, column: 37 } },
                '60': { start: { line: 121, column: 4 }, end: { line: 121, column: 42 } },
                '61': { start: { line: 123, column: 4 }, end: { line: 123, column: 27 } },
                '62': { start: { line: 127, column: 0 }, end: { line: 135, column: 2 } },
                '63': { start: { line: 128, column: 2 }, end: { line: 134, column: 3 } },
                '64': { start: { line: 129, column: 4 }, end: { line: 129, column: 58 } },
                '65': { start: { line: 130, column: 4 }, end: { line: 130, column: 62 } },
                '66': { start: { line: 132, column: 4 }, end: { line: 132, column: 42 } },
                '67': { start: { line: 133, column: 4 }, end: { line: 133, column: 28 } },
                '68': { start: { line: 141, column: 0 }, end: { line: 195, column: 2 } },
                '69': { start: { line: 153, column: 2 }, end: { line: 155, column: 3 } },
                '70': { start: { line: 154, column: 4 }, end: { line: 154, column: 33 } },
                '71': { start: { line: 157, column: 2 }, end: { line: 194, column: 3 } },
                '72': { start: { line: 158, column: 4 }, end: { line: 165, column: 5 } },
                '73': { start: { line: 159, column: 6 }, end: { line: 161, column: 7 } },
                '74': { start: { line: 160, column: 8 }, end: { line: 160, column: 25 } },
                '75': { start: { line: 162, column: 6 }, end: { line: 164, column: 7 } },
                '76': { start: { line: 163, column: 8 }, end: { line: 163, column: 46 } },
                '77': { start: { line: 166, column: 4 }, end: { line: 168, column: 5 } },
                '78': { start: { line: 167, column: 6 }, end: { line: 167, column: 34 } },
                '79': { start: { line: 169, column: 12 }, end: { line: 169, column: 13 } },
                '80': { start: { line: 170, column: 4 }, end: { line: 172, column: 5 } },
                '81': { start: { line: 171, column: 6 }, end: { line: 171, column: 32 } },
                '82': { start: { line: 173, column: 4 }, end: { line: 175, column: 5 } },
                '83': { start: { line: 174, column: 6 }, end: { line: 174, column: 44 } },
                '84': { start: { line: 176, column: 4 }, end: { line: 186, column: 6 } },
                '85': { start: { line: 187, column: 4 }, end: { line: 189, column: 5 } },
                '86': { start: { line: 188, column: 6 }, end: { line: 188, column: 26 } },
                '87': { start: { line: 191, column: 4 }, end: { line: 193, column: 5 } },
                '88': { start: { line: 192, column: 6 }, end: { line: 192, column: 14 } },
                '89': { start: { line: 197, column: 0 }, end: { line: 220, column: 2 } },
                '90': { start: { line: 198, column: 2 }, end: { line: 200, column: 3 } },
                '91': { start: { line: 199, column: 4 }, end: { line: 199, column: 15 } },
                '92': { start: { line: 201, column: 17 }, end: { line: 201, column: 46 } },
                '93': { start: { line: 202, column: 20 }, end: { line: 202, column: 52 } },
                '94': { start: { line: 203, column: 2 }, end: { line: 203, column: 37 } },
                '95': { start: { line: 204, column: 2 }, end: { line: 204, column: 39 } },
                '96': { start: { line: 205, column: 17 }, end: { line: 205, column: 43 } },
                '97': { start: { line: 206, column: 13 }, end: { line: 206, column: 72 } },
                '98': { start: { line: 207, column: 20 }, end: { line: 207, column: 27 } },
                '99': { start: { line: 208, column: 2 }, end: { line: 217, column: 3 } },
                '100': { start: { line: 208, column: 15 }, end: { line: 208, column: 16 } },
                '101': { start: { line: 209, column: 14 }, end: { line: 209, column: 23 } },
                '102': { start: { line: 210, column: 14 }, end: { line: 210, column: 27 } },
                '103': { start: { line: 211, column: 14 }, end: { line: 211, column: 27 } },
                '104': { start: { line: 212, column: 14 }, end: { line: 212, column: 27 } },
                '105': { start: { line: 213, column: 4 }, end: { line: 213, column: 43 } },
                '106': { start: { line: 214, column: 4 }, end: { line: 214, column: 47 } },
                '107': { start: { line: 215, column: 4 }, end: { line: 215, column: 47 } },
                '108': { start: { line: 216, column: 4 }, end: { line: 216, column: 47 } },
                '109': { start: { line: 218, column: 2 }, end: { line: 218, column: 32 } },
                '110': { start: { line: 219, column: 2 }, end: { line: 219, column: 19 } },
                '111': { start: { line: 226, column: 0 }, end: { line: 251, column: 2 } },
                '112': { start: { line: 227, column: 2 }, end: { line: 250, column: 3 } },
                '113': { start: { line: 228, column: 4 }, end: { line: 228, column: 66 } },
                '114': { start: { line: 229, column: 9 }, end: { line: 250, column: 3 } },
                '115': { start: { line: 246, column: 4 }, end: { line: 246, column: 33 } },
                '116': { start: { line: 247, column: 4 }, end: { line: 247, column: 56 } },
                '117': { start: { line: 249, column: 4 }, end: { line: 249, column: 52 } },
                '118': { start: { line: 253, column: 0 }, end: { line: 264, column: 2 } },
                '119': { start: { line: 254, column: 20 }, end: { line: 254, column: 64 } },
                '120': { start: { line: 255, column: 20 }, end: { line: 255, column: 41 } },
                '121': { start: { line: 257, column: 19 }, end: { line: 257, column: 71 } },
                '122': { start: { line: 259, column: 2 }, end: { line: 259, column: 59 } },
                '123': { start: { line: 261, column: 2 }, end: { line: 261, column: 42 } },
                '124': { start: { line: 263, column: 2 }, end: { line: 263, column: 59 } },
                '125': { start: { line: 270, column: 0 }, end: { line: 280, column: 2 } },
                '126': { start: { line: 272, column: 2 }, end: { line: 272, column: 64 } },
                '127': { start: { line: 273, column: 2 }, end: { line: 273, column: 12 } },
                '128': { start: { line: 274, column: 2 }, end: { line: 279, column: 4 } },
                '129': { start: { line: 282, column: 0 }, end: { line: 293, column: 2 } },
                '130': { start: { line: 283, column: 22 }, end: { line: 283, column: 39 } },
                '131': { start: { line: 285, column: 13 }, end: { line: 285, column: 38 } },
                '132': { start: { line: 286, column: 12 }, end: { line: 286, column: 27 } },
                '133': { start: { line: 287, column: 12 }, end: { line: 287, column: 28 } },
                '134': { start: { line: 288, column: 20 }, end: { line: 288, column: 64 } },
                '135': { start: { line: 291, column: 2 }, end: { line: 291, column: 51 } },
                '136': { start: { line: 292, column: 2 }, end: { line: 292, column: 53 } },
                '137': { start: { line: 295, column: 0 }, end: { line: 369, column: 2 } },
                '138': { start: { line: 297, column: 2 }, end: { line: 297, column: 20 } },
                '139': { start: { line: 298, column: 2 }, end: { line: 298, column: 20 } },
                '140': { start: { line: 299, column: 22 }, end: { line: 299, column: 39 } },
                '141': { start: { line: 300, column: 2 }, end: { line: 368, column: 3 } },
                '142': { start: { line: 301, column: 4 }, end: { line: 301, column: 31 } },
                '143': { start: { line: 302, column: 4 }, end: { line: 302, column: 55 } },
                '144': { start: { line: 303, column: 4 }, end: { line: 306, column: 6 } },
                '145': { start: { line: 307, column: 4 }, end: { line: 307, column: 73 } },
                '146': { start: { line: 308, column: 4 }, end: { line: 308, column: 57 } },
                '147': { start: { line: 309, column: 4 }, end: { line: 309, column: 34 } },
                '148': { start: { line: 311, column: 12 }, end: { line: 311, column: 13 } },
                '149': { start: { line: 312, column: 10 }, end: { line: 312, column: 11 } },
                '150': { start: { line: 313, column: 10 }, end: { line: 313, column: 11 } },
                '151': { start: { line: 314, column: 10 }, end: { line: 314, column: 11 } },
                '152': { start: { line: 316, column: 6 }, end: { line: 320, column: 38 } },
                '153': { start: { line: 321, column: 4 }, end: { line: 323, column: 5 } },
                '154': { start: { line: 322, column: 6 }, end: { line: 322, column: 47 } },
                '155': { start: { line: 324, column: 4 }, end: { line: 351, column: 5 } },
                '156': { start: { line: 325, column: 6 }, end: { line: 331, column: 7 } },
                '157': { start: { line: 326, column: 8 }, end: { line: 326, column: 21 } },
                '158': { start: { line: 327, column: 8 }, end: { line: 327, column: 21 } },
                '159': { start: { line: 328, column: 8 }, end: { line: 328, column: 21 } },
                '160': { start: { line: 329, column: 8 }, end: { line: 329, column: 16 } },
                '161': { start: { line: 332, column: 11 }, end: { line: 351, column: 5 } },
                '162': { start: { line: 333, column: 6 }, end: { line: 335, column: 7 } },
                '163': { start: { line: 334, column: 8 }, end: { line: 334, column: 72 } },
                '164': { start: { line: 336, column: 6 }, end: { line: 342, column: 7 } },
                '165': { start: { line: 337, column: 8 }, end: { line: 337, column: 24 } },
                '166': { start: { line: 338, column: 8 }, end: { line: 338, column: 24 } },
                '167': { start: { line: 339, column: 8 }, end: { line: 339, column: 24 } },
                '168': { start: { line: 340, column: 8 }, end: { line: 340, column: 24 } },
                '169': { start: { line: 343, column: 11 }, end: { line: 351, column: 5 } },
                '170': { start: { line: 344, column: 6 }, end: { line: 350, column: 7 } },
                '171': { start: { line: 345, column: 8 }, end: { line: 345, column: 31 } },
                '172': { start: { line: 346, column: 8 }, end: { line: 346, column: 31 } },
                '173': { start: { line: 347, column: 8 }, end: { line: 347, column: 31 } },
                '174': { start: { line: 348, column: 8 }, end: { line: 348, column: 31 } },
                '175': { start: { line: 353, column: 4 }, end: { line: 367, column: 5 } },
                '176': { start: { line: 353, column: 17 }, end: { line: 353, column: 18 } },
                '177': { start: { line: 354, column: 6 }, end: { line: 366, column: 7 } },
                '178': { start: { line: 354, column: 19 }, end: { line: 354, column: 20 } },
                '179': { start: { line: 356, column: 8 }, end: { line: 361, column: 49 } },
                '180': { start: { line: 362, column: 8 }, end: { line: 362, column: 36 } },
                '181': { start: { line: 363, column: 8 }, end: { line: 363, column: 40 } },
                '182': { start: { line: 364, column: 8 }, end: { line: 364, column: 40 } },
                '183': { start: { line: 365, column: 8 }, end: { line: 365, column: 40 } },
                '184': { start: { line: 371, column: 0 }, end: { line: 396, column: 2 } },
                '185': { start: { line: 372, column: 22 }, end: { line: 372, column: 39 } },
                '186': { start: { line: 373, column: 13 }, end: { line: 373, column: 38 } },
                '187': { start: { line: 374, column: 2 }, end: { line: 384, column: 3 } },
                '188': { start: { line: 380, column: 4 }, end: { line: 380, column: 10 } },
                '189': { start: { line: 381, column: 4 }, end: { line: 381, column: 10 } },
                '190': { start: { line: 382, column: 4 }, end: { line: 382, column: 19 } },
                '191': { start: { line: 383, column: 4 }, end: { line: 383, column: 20 } },
                '192': { start: { line: 385, column: 2 }, end: { line: 385, column: 10 } },
                '193': { start: { line: 386, column: 2 }, end: { line: 386, column: 10 } },
                '194': { start: { line: 387, column: 2 }, end: { line: 387, column: 10 } },
                '195': { start: { line: 388, column: 2 }, end: { line: 388, column: 10 } },
                '196': { start: { line: 390, column: 2 }, end: { line: 393, column: 3 } },
                '197': { start: { line: 391, column: 4 }, end: { line: 392, column: 28 } },
                '198': { start: { line: 395, column: 2 }, end: { line: 395, column: 76 } },
                '199': { start: { line: 409, column: 0 }, end: { line: 436, column: 2 } },
                '200': { start: { line: 414, column: 16 }, end: { line: 414, column: 26 } },
                '201': { start: { line: 415, column: 16 }, end: { line: 415, column: 31 } },
                '202': { start: { line: 416, column: 16 }, end: { line: 416, column: 31 } },
                '203': { start: { line: 417, column: 16 }, end: { line: 417, column: 37 } },
                '204': { start: { line: 419, column: 10 }, end: { line: 419, column: 23 } },
                '205': { start: { line: 420, column: 14 }, end: { line: 420, column: 27 } },
                '206': { start: { line: 421, column: 14 }, end: { line: 421, column: 27 } },
                '207': { start: { line: 422, column: 13 }, end: { line: 422, column: 36 } },
                '208': { start: { line: 423, column: 9 }, end: { line: 423, column: 53 } },
                '209': { start: { line: 426, column: 2 }, end: { line: 435, column: 4 } },
                '210': { start: { line: 445, column: 0 }, end: { line: 503, column: 2 } },
                '211': { start: { line: 446, column: 14 }, end: { line: 446, column: 33 } },
                '212': { start: { line: 447, column: 13 }, end: { line: 447, column: 20 } },
                '213': { start: { line: 448, column: 13 }, end: { line: 448, column: 20 } },
                '214': { start: { line: 449, column: 18 }, end: { line: 449, column: 25 } },
                '215': { start: { line: 450, column: 18 }, end: { line: 450, column: 19 } },
                '216': { start: { line: 451, column: 17 }, end: { line: 451, column: 19 } },
                '217': { start: { line: 453, column: 2 }, end: { line: 453, column: 10 } },
                '218': { start: { line: 454, column: 2 }, end: { line: 454, column: 10 } },
                '219': { start: { line: 457, column: 2 }, end: { line: 461, column: 3 } },
                '220': { start: { line: 458, column: 4 }, end: { line: 458, column: 58 } },
                '221': { start: { line: 459, column: 4 }, end: { line: 459, column: 58 } },
                '222': { start: { line: 460, column: 4 }, end: { line: 460, column: 23 } },
                '223': { start: { line: 464, column: 2 }, end: { line: 480, column: 3 } },
                '224': { start: { line: 465, column: 4 }, end: { line: 465, column: 20 } },
                '225': { start: { line: 466, column: 4 }, end: { line: 474, column: 7 } },
                '226': { start: { line: 467, column: 6 }, end: { line: 469, column: 7 } },
                '227': { start: { line: 468, column: 8 }, end: { line: 468, column: 57 } },
                '228': { start: { line: 471, column: 6 }, end: { line: 473, column: 64 } },
                '229': { start: { line: 475, column: 4 }, end: { line: 477, column: 5 } },
                '230': { start: { line: 476, column: 6 }, end: { line: 476, column: 23 } },
                '231': { start: { line: 478, column: 4 }, end: { line: 478, column: 20 } },
                '232': { start: { line: 479, column: 4 }, end: { line: 479, column: 15 } },
                '233': { start: { line: 483, column: 2 }, end: { line: 501, column: 3 } },
                '234': { start: { line: 484, column: 4 }, end: { line: 484, column: 20 } },
                '235': { start: { line: 485, column: 4 }, end: { line: 493, column: 7 } },
                '236': { start: { line: 486, column: 6 }, end: { line: 488, column: 7 } },
                '237': { start: { line: 487, column: 8 }, end: { line: 487, column: 57 } },
                '238': { start: { line: 490, column: 6 }, end: { line: 492, column: 64 } },
                '239': { start: { line: 494, column: 4 }, end: { line: 499, column: 5 } },
                '240': { start: { line: 495, column: 6 }, end: { line: 495, column: 23 } },
                '241': { start: { line: 496, column: 6 }, end: { line: 496, column: 22 } },
                '242': { start: { line: 497, column: 11 }, end: { line: 499, column: 5 } },
                '243': { start: { line: 498, column: 6 }, end: { line: 498, column: 22 } },
                '244': { start: { line: 500, column: 4 }, end: { line: 500, column: 17 } },
                '245': { start: { line: 502, column: 2 }, end: { line: 502, column: 14 } },
                '246': { start: { line: 505, column: 0 }, end: { line: 546, column: 2 } },
                '247': { start: { line: 506, column: 14 }, end: { line: 506, column: 33 } },
                '248': { start: { line: 507, column: 17 }, end: { line: 507, column: 29 } },
                '249': { start: { line: 508, column: 15 }, end: { line: 508, column: 29 } },
                '250': { start: { line: 509, column: 12 }, end: { line: 509, column: 31 } },
                '251': { start: { line: 510, column: 8 }, end: { line: 510, column: 27 } },
                '252': { start: { line: 511, column: 8 }, end: { line: 511, column: 27 } },
                '253': { start: { line: 512, column: 8 }, end: { line: 512, column: 27 } },
                '254': { start: { line: 513, column: 2 }, end: { line: 521, column: 3 } },
                '255': { start: { line: 514, column: 4 }, end: { line: 516, column: 5 } },
                '256': { start: { line: 515, column: 6 }, end: { line: 515, column: 18 } },
                '257': { start: { line: 517, column: 9 }, end: { line: 521, column: 3 } },
                '258': { start: { line: 518, column: 4 }, end: { line: 520, column: 5 } },
                '259': { start: { line: 519, column: 6 }, end: { line: 519, column: 18 } },
                '260': { start: { line: 522, column: 16 }, end: { line: 522, column: 28 } },
                '261': { start: { line: 524, column: 9 }, end: { line: 524, column: 22 } },
                '262': { start: { line: 526, column: 9 }, end: { line: 526, column: 22 } },
                '263': { start: { line: 528, column: 9 }, end: { line: 528, column: 14 } },
                '264': { start: { line: 530, column: 9 }, end: { line: 530, column: 14 } },
                '265': { start: { line: 532, column: 9 }, end: { line: 532, column: 18 } },
                '266': { start: { line: 533, column: 9 }, end: { line: 533, column: 18 } },
                '267': { start: { line: 534, column: 2 }, end: { line: 534, column: 18 } },
                '268': { start: { line: 535, column: 2 }, end: { line: 535, column: 20 } },
                '269': { start: { line: 536, column: 2 }, end: { line: 536, column: 51 } },
                '270': { start: { line: 537, column: 2 }, end: { line: 537, column: 53 } },
                '271': { start: { line: 538, column: 2 }, end: { line: 538, column: 54 } },
                '272': { start: { line: 539, column: 2 }, end: { line: 539, column: 52 } },
                '273': { start: { line: 540, column: 2 }, end: { line: 542, column: 3 } },
                '274': { start: { line: 541, column: 4 }, end: { line: 541, column: 15 } },
                '275': { start: { line: 543, column: 2 }, end: { line: 545, column: 3 } },
                '276': { start: { line: 544, column: 4 }, end: { line: 544, column: 17 } },
                '277': { start: { line: 548, column: 0 }, end: { line: 560, column: 2 } },
                '278': { start: { line: 549, column: 14 }, end: { line: 549, column: 33 } },
                '279': { start: { line: 550, column: 2 }, end: { line: 554, column: 3 } },
                '280': { start: { line: 551, column: 4 }, end: { line: 551, column: 16 } },
                '281': { start: { line: 552, column: 9 }, end: { line: 554, column: 3 } },
                '282': { start: { line: 553, column: 4 }, end: { line: 553, column: 16 } },
                '283': { start: { line: 555, column: 2 }, end: { line: 555, column: 18 } },
                '284': { start: { line: 556, column: 2 }, end: { line: 556, column: 21 } },
                '285': { start: { line: 557, column: 2 }, end: { line: 557, column: 21 } },
                '286': { start: { line: 558, column: 2 }, end: { line: 558, column: 15 } },
                '287': { start: { line: 559, column: 2 }, end: { line: 559, column: 14 } },
                '288': { start: { line: 562, column: 0 }, end: { line: 577, column: 2 } },
                '289': { start: { line: 563, column: 14 }, end: { line: 563, column: 33 } },
                '290': { start: { line: 564, column: 2 }, end: { line: 568, column: 3 } },
                '291': { start: { line: 565, column: 4 }, end: { line: 565, column: 16 } },
                '292': { start: { line: 566, column: 9 }, end: { line: 568, column: 3 } },
                '293': { start: { line: 567, column: 4 }, end: { line: 567, column: 16 } },
                '294': { start: { line: 569, column: 12 }, end: { line: 569, column: 29 } },
                '295': { start: { line: 570, column: 12 }, end: { line: 570, column: 27 } },
                '296': { start: { line: 572, column: 2 }, end: { line: 572, column: 19 } },
                '297': { start: { line: 573, column: 2 }, end: { line: 573, column: 18 } },
                '298': { start: { line: 574, column: 2 }, end: { line: 574, column: 63 } },
                '299': { start: { line: 575, column: 2 }, end: { line: 575, column: 13 } },
                '300': { start: { line: 576, column: 2 }, end: { line: 576, column: 19 } },
                '301': { start: { line: 579, column: 0 }, end: { line: 605, column: 2 } },
                '302': { start: { line: 580, column: 14 }, end: { line: 580, column: 33 } },
                '303': { start: { line: 581, column: 17 }, end: { line: 581, column: 29 } },
                '304': { start: { line: 582, column: 15 }, end: { line: 582, column: 29 } },
                '305': { start: { line: 583, column: 2 }, end: { line: 591, column: 3 } },
                '306': { start: { line: 584, column: 4 }, end: { line: 586, column: 5 } },
                '307': { start: { line: 585, column: 6 }, end: { line: 585, column: 18 } },
                '308': { start: { line: 587, column: 9 }, end: { line: 591, column: 3 } },
                '309': { start: { line: 588, column: 4 }, end: { line: 590, column: 5 } },
                '310': { start: { line: 589, column: 6 }, end: { line: 589, column: 18 } },
                '311': { start: { line: 592, column: 2 }, end: { line: 592, column: 18 } },
                '312': { start: { line: 593, column: 2 }, end: { line: 593, column: 21 } },
                '313': { start: { line: 594, column: 2 }, end: { line: 594, column: 21 } },
                '314': { start: { line: 595, column: 2 }, end: { line: 595, column: 21 } },
                '315': { start: { line: 596, column: 2 }, end: { line: 596, column: 21 } },
                '316': { start: { line: 597, column: 2 }, end: { line: 597, column: 18 } },
                '317': { start: { line: 598, column: 2 }, end: { line: 600, column: 3 } },
                '318': { start: { line: 599, column: 4 }, end: { line: 599, column: 15 } },
                '319': { start: { line: 601, column: 2 }, end: { line: 603, column: 3 } },
                '320': { start: { line: 602, column: 4 }, end: { line: 602, column: 17 } },
                '321': { start: { line: 604, column: 2 }, end: { line: 604, column: 14 } },
                '322': { start: { line: 607, column: 0 }, end: { line: 694, column: 2 } },
                '323': { start: { line: 608, column: 12 }, end: { line: 608, column: 19 } },
                '324': { start: { line: 609, column: 12 }, end: { line: 609, column: 19 } },
                '325': { start: { line: 610, column: 12 }, end: { line: 610, column: 19 } },
                '326': { start: { line: 611, column: 12 }, end: { line: 611, column: 19 } },
                '327': { start: { line: 612, column: 11 }, end: { line: 612, column: 18 } },
                '328': { start: { line: 613, column: 11 }, end: { line: 613, column: 18 } },
                '329': { start: { line: 614, column: 11 }, end: { line: 614, column: 18 } },
                '330': { start: { line: 615, column: 11 }, end: { line: 615, column: 18 } },
                '331': { start: { line: 616, column: 14 }, end: { line: 616, column: 33 } },
                '332': { start: { line: 617, column: 17 }, end: { line: 617, column: 29 } },
                '333': { start: { line: 618, column: 15 }, end: { line: 618, column: 29 } },
                '334': { start: { line: 619, column: 2 }, end: { line: 627, column: 3 } },
                '335': { start: { line: 620, column: 4 }, end: { line: 622, column: 5 } },
                '336': { start: { line: 621, column: 6 }, end: { line: 621, column: 18 } },
                '337': { start: { line: 623, column: 9 }, end: { line: 627, column: 3 } },
                '338': { start: { line: 624, column: 4 }, end: { line: 626, column: 5 } },
                '339': { start: { line: 625, column: 6 }, end: { line: 625, column: 18 } },
                '340': { start: { line: 628, column: 2 }, end: { line: 628, column: 18 } },
                '341': { start: { line: 630, column: 2 }, end: { line: 686, column: 3 } },
                '342': { start: { line: 632, column: 4 }, end: { line: 632, column: 25 } },
                '343': { start: { line: 636, column: 4 }, end: { line: 638, column: 5 } },
                '344': { start: { line: 637, column: 6 }, end: { line: 637, column: 14 } },
                '345': { start: { line: 639, column: 4 }, end: { line: 641, column: 5 } },
                '346': { start: { line: 640, column: 6 }, end: { line: 640, column: 14 } },
                '347': { start: { line: 642, column: 4 }, end: { line: 644, column: 5 } },
                '348': { start: { line: 643, column: 6 }, end: { line: 643, column: 14 } },
                '349': { start: { line: 647, column: 17 }, end: { line: 647, column: 28 } },
                '350': { start: { line: 648, column: 17 }, end: { line: 648, column: 28 } },
                '351': { start: { line: 649, column: 15 }, end: { line: 649, column: 23 } },
                '352': { start: { line: 650, column: 15 }, end: { line: 650, column: 23 } },
                '353': { start: { line: 653, column: 4 }, end: { line: 655, column: 5 } },
                '354': { start: { line: 654, column: 6 }, end: { line: 654, column: 14 } },
                '355': { start: { line: 656, column: 4 }, end: { line: 658, column: 5 } },
                '356': { start: { line: 657, column: 6 }, end: { line: 657, column: 14 } },
                '357': { start: { line: 659, column: 4 }, end: { line: 661, column: 5 } },
                '358': { start: { line: 660, column: 6 }, end: { line: 660, column: 14 } },
                '359': { start: { line: 662, column: 4 }, end: { line: 664, column: 5 } },
                '360': { start: { line: 663, column: 6 }, end: { line: 663, column: 14 } },
                '361': { start: { line: 665, column: 4 }, end: { line: 667, column: 5 } },
                '362': { start: { line: 666, column: 6 }, end: { line: 666, column: 14 } },
                '363': { start: { line: 668, column: 4 }, end: { line: 670, column: 5 } },
                '364': { start: { line: 669, column: 6 }, end: { line: 669, column: 14 } },
                '365': { start: { line: 671, column: 4 }, end: { line: 673, column: 5 } },
                '366': { start: { line: 672, column: 6 }, end: { line: 672, column: 14 } },
                '367': { start: { line: 674, column: 4 }, end: { line: 676, column: 5 } },
                '368': { start: { line: 675, column: 6 }, end: { line: 675, column: 14 } },
                '369': { start: { line: 679, column: 4 }, end: { line: 679, column: 20 } },
                '370': { start: { line: 680, column: 4 }, end: { line: 680, column: 26 } },
                '371': { start: { line: 681, column: 4 }, end: { line: 681, column: 42 } },
                '372': { start: { line: 682, column: 4 }, end: { line: 682, column: 42 } },
                '373': { start: { line: 683, column: 4 }, end: { line: 683, column: 34 } },
                '374': { start: { line: 684, column: 4 }, end: { line: 684, column: 34 } },
                '375': { start: { line: 685, column: 4 }, end: { line: 685, column: 20 } },
                '376': { start: { line: 687, column: 2 }, end: { line: 689, column: 3 } },
                '377': { start: { line: 688, column: 4 }, end: { line: 688, column: 15 } },
                '378': { start: { line: 690, column: 2 }, end: { line: 692, column: 3 } },
                '379': { start: { line: 691, column: 4 }, end: { line: 691, column: 17 } },
                '380': { start: { line: 693, column: 2 }, end: { line: 693, column: 14 } },
                '381': { start: { line: 696, column: 0 }, end: { line: 726, column: 2 } },
                '382': { start: { line: 697, column: 14 }, end: { line: 697, column: 33 } },
                '383': { start: { line: 698, column: 17 }, end: { line: 698, column: 29 } },
                '384': { start: { line: 699, column: 15 }, end: { line: 699, column: 29 } },
                '385': { start: { line: 700, column: 13 }, end: { line: 700, column: 20 } },
                '386': { start: { line: 701, column: 9 }, end: { line: 701, column: 16 } },
                '387': { start: { line: 702, column: 13 }, end: { line: 702, column: 20 } },
                '388': { start: { line: 703, column: 9 }, end: { line: 703, column: 16 } },
                '389': { start: { line: 704, column: 13 }, end: { line: 704, column: 20 } },
                '390': { start: { line: 705, column: 9 }, end: { line: 705, column: 16 } },
                '391': { start: { line: 706, column: 2 }, end: { line: 714, column: 3 } },
                '392': { start: { line: 707, column: 4 }, end: { line: 709, column: 5 } },
                '393': { start: { line: 708, column: 6 }, end: { line: 708, column: 18 } },
                '394': { start: { line: 710, column: 9 }, end: { line: 714, column: 3 } },
                '395': { start: { line: 711, column: 4 }, end: { line: 713, column: 5 } },
                '396': { start: { line: 712, column: 6 }, end: { line: 712, column: 18 } },
                '397': { start: { line: 715, column: 2 }, end: { line: 715, column: 18 } },
                '398': { start: { line: 716, column: 2 }, end: { line: 716, column: 21 } },
                '399': { start: { line: 717, column: 2 }, end: { line: 717, column: 21 } },
                '400': { start: { line: 718, column: 2 }, end: { line: 718, column: 21 } },
                '401': { start: { line: 719, column: 2 }, end: { line: 719, column: 18 } },
                '402': { start: { line: 720, column: 2 }, end: { line: 722, column: 3 } },
                '403': { start: { line: 721, column: 4 }, end: { line: 721, column: 15 } },
                '404': { start: { line: 723, column: 2 }, end: { line: 725, column: 3 } },
                '405': { start: { line: 724, column: 4 }, end: { line: 724, column: 17 } },
                '406': { start: { line: 728, column: 0 }, end: { line: 985, column: 2 } },
                '407': { start: { line: 737, column: 2 }, end: { line: 739, column: 3 } },
                '408': { start: { line: 738, column: 4 }, end: { line: 738, column: 16 } },
                '409': { start: { line: 740, column: 2 }, end: { line: 742, column: 3 } },
                '410': { start: { line: 741, column: 4 }, end: { line: 741, column: 16 } },
                '411': { start: { line: 743, column: 21 }, end: { line: 743, column: 45 } },
                '412': { start: { line: 745, column: 2 }, end: { line: 747, column: 3 } },
                '413': { start: { line: 746, column: 4 }, end: { line: 746, column: 31 } },
                '414': { start: { line: 749, column: 19 }, end: { line: 749, column: 34 } },
                '415': { start: { line: 750, column: 2 }, end: { line: 975, column: 3 } },
                '416': { start: { line: 751, column: 4 }, end: { line: 782, column: 5 } },
                '417': { start: { line: 752, column: 16 }, end: { line: 752, column: 18 } },
                '418': { start: { line: 753, column: 12 }, end: { line: 753, column: 36 } },
                '419': { start: { line: 754, column: 6 }, end: { line: 754, column: 38 } },
                '420': { start: { line: 755, column: 6 }, end: { line: 755, column: 65 } },
                '421': { start: { line: 756, column: 6 }, end: { line: 777, column: 7 } },
                '422': { start: { line: 757, column: 8 }, end: { line: 757, column: 24 } },
                '423': { start: { line: 758, column: 8 }, end: { line: 758, column: 28 } },
                '424': { start: { line: 759, column: 8 }, end: { line: 762, column: 10 } },
                '425': { start: { line: 763, column: 8 }, end: { line: 767, column: 10 } },
                '426': { start: { line: 768, column: 8 }, end: { line: 768, column: 56 } },
                '427': { start: { line: 769, column: 8 }, end: { line: 776, column: 10 } },
                '428': { start: { line: 778, column: 6 }, end: { line: 780, column: 7 } },
                '429': { start: { line: 779, column: 8 }, end: { line: 779, column: 75 } },
                '430': { start: { line: 781, column: 6 }, end: { line: 781, column: 42 } },
                '431': { start: { line: 783, column: 9 }, end: { line: 975, column: 3 } },
                '432': { start: { line: 787, column: 4 }, end: { line: 787, column: 36 } },
                '433': { start: { line: 788, column: 4 }, end: { line: 805, column: 5 } },
                '434': { start: { line: 789, column: 6 }, end: { line: 804, column: 7 } },
                '435': { start: { line: 790, column: 8 }, end: { line: 794, column: 9 } },
                '436': { start: { line: 791, column: 10 }, end: { line: 791, column: 69 } },
                '437': { start: { line: 793, column: 10 }, end: { line: 793, column: 69 } },
                '438': { start: { line: 796, column: 8 }, end: { line: 803, column: 10 } },
                '439': { start: { line: 806, column: 4 }, end: { line: 806, column: 40 } },
                '440': { start: { line: 807, column: 9 }, end: { line: 975, column: 3 } },
                '441': { start: { line: 811, column: 4 }, end: { line: 811, column: 36 } },
                '442': { start: { line: 812, column: 4 }, end: { line: 827, column: 5 } },
                '443': { start: { line: 813, column: 6 }, end: { line: 826, column: 7 } },
                '444': { start: { line: 814, column: 8 }, end: { line: 818, column: 9 } },
                '445': { start: { line: 815, column: 10 }, end: { line: 815, column: 69 } },
                '446': { start: { line: 817, column: 10 }, end: { line: 817, column: 69 } },
                '447': { start: { line: 820, column: 8 }, end: { line: 825, column: 10 } },
                '448': { start: { line: 828, column: 4 }, end: { line: 828, column: 40 } },
                '449': { start: { line: 830, column: 4 }, end: { line: 974, column: 5 } },
                '450': { start: { line: 831, column: 6 }, end: { line: 837, column: 7 } },
                '451': { start: { line: 832, column: 8 }, end: { line: 832, column: 24 } },
                '452': { start: { line: 833, column: 8 }, end: { line: 835, column: 9 } },
                '453': { start: { line: 834, column: 10 }, end: { line: 834, column: 35 } },
                '454': { start: { line: 836, column: 8 }, end: { line: 836, column: 38 } },
                '455': { start: { line: 838, column: 11 }, end: { line: 974, column: 5 } },
                '456': { start: { line: 839, column: 6 }, end: { line: 845, column: 7 } },
                '457': { start: { line: 840, column: 8 }, end: { line: 840, column: 24 } },
                '458': { start: { line: 841, column: 8 }, end: { line: 843, column: 9 } },
                '459': { start: { line: 842, column: 10 }, end: { line: 842, column: 49 } },
                '460': { start: { line: 844, column: 8 }, end: { line: 844, column: 77 } },
                '461': { start: { line: 846, column: 11 }, end: { line: 974, column: 5 } },
                '462': { start: { line: 847, column: 6 }, end: { line: 862, column: 7 } },
                '463': { start: { line: 848, column: 8 }, end: { line: 848, column: 24 } },
                '464': { start: { line: 849, column: 8 }, end: { line: 849, column: 40 } },
                '465': { start: { line: 850, column: 8 }, end: { line: 850, column: 47 } },
                '466': { start: { line: 851, column: 8 }, end: { line: 851, column: 75 } },
                '467': { start: { line: 852, column: 8 }, end: { line: 852, column: 75 } },
                '468': { start: { line: 853, column: 8 }, end: { line: 853, column: 40 } },
                '469': { start: { line: 854, column: 8 }, end: { line: 857, column: 9 } },
                '470': { start: { line: 855, column: 10 }, end: { line: 855, column: 47 } },
                '471': { start: { line: 856, column: 10 }, end: { line: 856, column: 37 } },
                '472': { start: { line: 858, column: 8 }, end: { line: 861, column: 9 } },
                '473': { start: { line: 859, column: 10 }, end: { line: 859, column: 49 } },
                '474': { start: { line: 860, column: 10 }, end: { line: 860, column: 39 } },
                '475': { start: { line: 863, column: 11 }, end: { line: 974, column: 5 } },
                '476': { start: { line: 864, column: 6 }, end: { line: 885, column: 7 } },
                '477': { start: { line: 865, column: 8 }, end: { line: 865, column: 24 } },
                '478': { start: { line: 866, column: 8 }, end: { line: 866, column: 40 } },
                '479': { start: { line: 867, column: 8 }, end: { line: 867, column: 75 } },
                '480': { start: { line: 868, column: 8 }, end: { line: 868, column: 47 } },
                '481': { start: { line: 869, column: 8 }, end: { line: 871, column: 9 } },
                '482': { start: { line: 870, column: 10 }, end: { line: 870, column: 49 } },
                '483': { start: { line: 872, column: 8 }, end: { line: 874, column: 9 } },
                '484': { start: { line: 873, column: 10 }, end: { line: 873, column: 47 } },
                '485': { start: { line: 875, column: 8 }, end: { line: 883, column: 9 } },
                '486': { start: { line: 876, column: 10 }, end: { line: 876, column: 77 } },
                '487': { start: { line: 877, column: 10 }, end: { line: 879, column: 11 } },
                '488': { start: { line: 878, column: 12 }, end: { line: 878, column: 51 } },
                '489': { start: { line: 880, column: 10 }, end: { line: 882, column: 11 } },
                '490': { start: { line: 881, column: 12 }, end: { line: 881, column: 49 } },
                '491': { start: { line: 884, column: 8 }, end: { line: 884, column: 44 } },
                '492': { start: { line: 886, column: 11 }, end: { line: 974, column: 5 } },
                '493': { start: { line: 887, column: 6 }, end: { line: 919, column: 7 } },
                '494': { start: { line: 890, column: 8 }, end: { line: 890, column: 40 } },
                '495': { start: { line: 891, column: 8 }, end: { line: 917, column: 9 } },
                '496': { start: { line: 892, column: 10 }, end: { line: 892, column: 26 } },
                '497': { start: { line: 893, column: 10 }, end: { line: 893, column: 69 } },
                '498': { start: { line: 894, column: 10 }, end: { line: 894, column: 77 } },
                '499': { start: { line: 895, column: 10 }, end: { line: 895, column: 49 } },
                '500': { start: { line: 896, column: 10 }, end: { line: 896, column: 69 } },
                '501': { start: { line: 898, column: 10 }, end: { line: 916, column: 11 } },
                '502': { start: { line: 899, column: 12 }, end: { line: 915, column: 13 } },
                '503': { start: { line: 903, column: 14 }, end: { line: 907, column: 15 } },
                '504': { start: { line: 904, column: 16 }, end: { line: 904, column: 39 } },
                '505': { start: { line: 905, column: 16 }, end: { line: 905, column: 43 } },
                '506': { start: { line: 906, column: 16 }, end: { line: 906, column: 53 } },
                '507': { start: { line: 908, column: 14 }, end: { line: 912, column: 15 } },
                '508': { start: { line: 909, column: 16 }, end: { line: 909, column: 41 } },
                '509': { start: { line: 910, column: 16 }, end: { line: 910, column: 45 } },
                '510': { start: { line: 911, column: 16 }, end: { line: 911, column: 55 } },
                '511': { start: { line: 913, column: 14 }, end: { line: 913, column: 46 } },
                '512': { start: { line: 914, column: 14 }, end: { line: 914, column: 46 } },
                '513': { start: { line: 918, column: 8 }, end: { line: 918, column: 44 } },
                '514': { start: { line: 920, column: 11 }, end: { line: 974, column: 5 } },
                '515': { start: { line: 921, column: 6 }, end: { line: 936, column: 7 } },
                '516': { start: { line: 922, column: 8 }, end: { line: 922, column: 24 } },
                '517': { start: { line: 923, column: 8 }, end: { line: 923, column: 40 } },
                '518': { start: { line: 924, column: 8 }, end: { line: 924, column: 47 } },
                '519': { start: { line: 925, column: 8 }, end: { line: 927, column: 9 } },
                '520': { start: { line: 926, column: 10 }, end: { line: 926, column: 77 } },
                '521': { start: { line: 928, column: 8 }, end: { line: 928, column: 47 } },
                '522': { start: { line: 929, column: 8 }, end: { line: 931, column: 9 } },
                '523': { start: { line: 930, column: 10 }, end: { line: 930, column: 47 } },
                '524': { start: { line: 932, column: 8 }, end: { line: 934, column: 9 } },
                '525': { start: { line: 933, column: 10 }, end: { line: 933, column: 49 } },
                '526': { start: { line: 935, column: 8 }, end: { line: 935, column: 44 } },
                '527': { start: { line: 937, column: 11 }, end: { line: 974, column: 5 } },
                '528': { start: { line: 938, column: 6 }, end: { line: 959, column: 7 } },
                '529': { start: { line: 939, column: 8 }, end: { line: 958, column: 9 } },
                '530': { start: { line: 940, column: 10 }, end: { line: 940, column: 26 } },
                '531': { start: { line: 941, column: 10 }, end: { line: 941, column: 42 } },
                '532': { start: { line: 942, column: 10 }, end: { line: 956, column: 11 } },
                '533': { start: { line: 943, column: 12 }, end: { line: 943, column: 79 } },
                '534': { start: { line: 944, column: 12 }, end: { line: 944, column: 51 } },
                '535': { start: { line: 945, column: 12 }, end: { line: 945, column: 79 } },
                '536': { start: { line: 946, column: 12 }, end: { line: 946, column: 79 } },
                '537': { start: { line: 947, column: 12 }, end: { line: 949, column: 13 } },
                '538': { start: { line: 948, column: 14 }, end: { line: 948, column: 51 } },
                '539': { start: { line: 950, column: 12 }, end: { line: 952, column: 13 } },
                '540': { start: { line: 951, column: 14 }, end: { line: 951, column: 53 } },
                '541': { start: { line: 954, column: 12 }, end: { line: 954, column: 51 } },
                '542': { start: { line: 955, column: 12 }, end: { line: 955, column: 79 } },
                '543': { start: { line: 957, column: 10 }, end: { line: 957, column: 46 } },
                '544': { start: { line: 961, column: 6 }, end: { line: 961, column: 38 } },
                '545': { start: { line: 962, column: 6 }, end: { line: 962, column: 65 } },
                '546': { start: { line: 963, column: 6 }, end: { line: 972, column: 7 } },
                '547': { start: { line: 964, column: 8 }, end: { line: 964, column: 24 } },
                '548': { start: { line: 965, column: 8 }, end: { line: 971, column: 9 } },
                '549': { start: { line: 966, column: 10 }, end: { line: 970, column: 11 } },
                '550': { start: { line: 967, column: 12 }, end: { line: 967, column: 51 } },
                '551': { start: { line: 969, column: 12 }, end: { line: 969, column: 51 } },
                '552': { start: { line: 973, column: 6 }, end: { line: 973, column: 42 } },
                '553': { start: { line: 976, column: 2 }, end: { line: 976, column: 18 } },
                '554': { start: { line: 977, column: 2 }, end: { line: 977, column: 19 } },
                '555': { start: { line: 978, column: 2 }, end: { line: 978, column: 22 } },
                '556': { start: { line: 979, column: 2 }, end: { line: 979, column: 20 } },
                '557': { start: { line: 980, column: 2 }, end: { line: 982, column: 3 } },
                '558': { start: { line: 981, column: 4 }, end: { line: 981, column: 19 } },
                '559': { start: { line: 984, column: 2 }, end: { line: 984, column: 14 } },
                '560': { start: { line: 990, column: 0 }, end: { line: 999, column: 2 } },
                '561': { start: { line: 991, column: 2 }, end: { line: 997, column: 3 } },
                '562': { start: { line: 996, column: 4 }, end: { line: 996, column: 38 } },
                '563': { start: { line: 998, column: 2 }, end: { line: 998, column: 14 } },
                '564': { start: { line: 1001, column: 0 }, end: { line: 1010, column: 2 } },
                '565': { start: { line: 1002, column: 2 }, end: { line: 1008, column: 3 } },
                '566': {
                  start: { line: 1007, column: 4 },
                  end: { line: 1007, column: 40 }
                },
                '567': {
                  start: { line: 1009, column: 2 },
                  end: { line: 1009, column: 14 }
                },
                '568': { start: { line: 1012, column: 0 }, end: { line: 1020, column: 2 } },
                '569': { start: { line: 1013, column: 2 }, end: { line: 1018, column: 3 } },
                '570': {
                  start: { line: 1015, column: 4 },
                  end: { line: 1015, column: 43 }
                },
                '571': {
                  start: { line: 1017, column: 4 },
                  end: { line: 1017, column: 38 }
                },
                '572': {
                  start: { line: 1019, column: 2 },
                  end: { line: 1019, column: 14 }
                },
                '573': { start: { line: 1022, column: 0 }, end: { line: 1027, column: 2 } },
                '574': { start: { line: 1023, column: 2 }, end: { line: 1025, column: 3 } },
                '575': {
                  start: { line: 1024, column: 4 },
                  end: { line: 1024, column: 58 }
                },
                '576': {
                  start: { line: 1026, column: 2 },
                  end: { line: 1026, column: 31 }
                },
                '577': { start: { line: 1029, column: 0 }, end: { line: 1034, column: 2 } },
                '578': { start: { line: 1030, column: 2 }, end: { line: 1033, column: 3 } },
                '579': {
                  start: { line: 1031, column: 4 },
                  end: { line: 1031, column: 46 }
                },
                '580': {
                  start: { line: 1032, column: 4 },
                  end: { line: 1032, column: 38 }
                },
                '581': { start: { line: 1036, column: 0 }, end: { line: 1041, column: 2 } },
                '582': { start: { line: 1037, column: 2 }, end: { line: 1039, column: 3 } },
                '583': {
                  start: { line: 1038, column: 4 },
                  end: { line: 1038, column: 62 }
                },
                '584': {
                  start: { line: 1040, column: 2 },
                  end: { line: 1040, column: 33 }
                },
                '585': { start: { line: 1043, column: 0 }, end: { line: 1048, column: 2 } },
                '586': { start: { line: 1044, column: 2 }, end: { line: 1047, column: 3 } },
                '587': {
                  start: { line: 1045, column: 4 },
                  end: { line: 1045, column: 50 }
                },
                '588': {
                  start: { line: 1046, column: 4 },
                  end: { line: 1046, column: 42 }
                },
                '589': { start: { line: 1053, column: 0 }, end: { line: 1059, column: 2 } },
                '590': {
                  start: { line: 1054, column: 2 },
                  end: { line: 1054, column: 27 }
                },
                '591': {
                  start: { line: 1055, column: 2 },
                  end: { line: 1055, column: 29 }
                },
                '592': {
                  start: { line: 1056, column: 2 },
                  end: { line: 1056, column: 51 }
                },
                '593': {
                  start: { line: 1057, column: 2 },
                  end: { line: 1057, column: 25 }
                },
                '594': {
                  start: { line: 1058, column: 2 },
                  end: { line: 1058, column: 14 }
                },
                '595': { start: { line: 1061, column: 0 }, end: { line: 1069, column: 2 } },
                '596': {
                  start: { line: 1062, column: 2 },
                  end: { line: 1062, column: 27 }
                },
                '597': {
                  start: { line: 1063, column: 2 },
                  end: { line: 1063, column: 34 }
                },
                '598': {
                  start: { line: 1064, column: 2 },
                  end: { line: 1064, column: 34 }
                },
                '599': {
                  start: { line: 1065, column: 2 },
                  end: { line: 1065, column: 34 }
                },
                '600': {
                  start: { line: 1066, column: 2 },
                  end: { line: 1066, column: 34 }
                },
                '601': {
                  start: { line: 1067, column: 2 },
                  end: { line: 1067, column: 25 }
                },
                '602': {
                  start: { line: 1068, column: 2 },
                  end: { line: 1068, column: 14 }
                },
                '603': { start: { line: 1075, column: 0 }, end: { line: 1085, column: 2 } },
                '604': { start: { line: 1076, column: 2 }, end: { line: 1078, column: 3 } },
                '605': {
                  start: { line: 1077, column: 4 },
                  end: { line: 1077, column: 36 }
                },
                '606': { start: { line: 1079, column: 2 }, end: { line: 1081, column: 3 } },
                '607': {
                  start: { line: 1080, column: 4 },
                  end: { line: 1080, column: 31 }
                },
                '608': { start: { line: 1082, column: 2 }, end: { line: 1084, column: 3 } },
                '609': {
                  start: { line: 1083, column: 4 },
                  end: { line: 1083, column: 33 }
                },
                '610': { start: { line: 1091, column: 0 }, end: { line: 1093, column: 2 } },
                '611': {
                  start: { line: 1092, column: 2 },
                  end: { line: 1092, column: 50 }
                },
                '612': { start: { line: 1095, column: 0 }, end: { line: 1102, column: 2 } },
                '613': {
                  start: { line: 1096, column: 2 },
                  end: { line: 1096, column: 53 }
                },
                '614': { start: { line: 1097, column: 2 }, end: { line: 1100, column: 4 } },
                '615': {
                  start: { line: 1101, column: 2 },
                  end: { line: 1101, column: 14 }
                },
                '616': { start: { line: 1104, column: 0 }, end: { line: 1106, column: 2 } },
                '617': {
                  start: { line: 1105, column: 2 },
                  end: { line: 1105, column: 34 }
                },
                '618': { start: { line: 1108, column: 0 }, end: { line: 1111, column: 2 } },
                '619': {
                  start: { line: 1109, column: 2 },
                  end: { line: 1109, column: 34 }
                },
                '620': {
                  start: { line: 1110, column: 2 },
                  end: { line: 1110, column: 14 }
                },
                '621': { start: { line: 1113, column: 0 }, end: { line: 1121, column: 2 } },
                '622': { start: { line: 1115, column: 2 }, end: { line: 1118, column: 3 } },
                '623': {
                  start: { line: 1116, column: 4 },
                  end: { line: 1116, column: 12 }
                },
                '624': {
                  start: { line: 1117, column: 4 },
                  end: { line: 1117, column: 12 }
                },
                '625': {
                  start: { line: 1119, column: 2 },
                  end: { line: 1119, column: 38 }
                },
                '626': {
                  start: { line: 1120, column: 2 },
                  end: { line: 1120, column: 14 }
                },
                '627': { start: { line: 1128, column: 0 }, end: { line: 1149, column: 2 } },
                '628': { start: { line: 1135, column: 2 }, end: { line: 1140, column: 3 } },
                '629': { start: { line: 1136, column: 4 }, end: { line: 1139, column: 5 } },
                '630': {
                  start: { line: 1137, column: 6 },
                  end: { line: 1137, column: 28 }
                },
                '631': {
                  start: { line: 1138, column: 6 },
                  end: { line: 1138, column: 55 }
                },
                '632': {
                  start: { line: 1142, column: 12 },
                  end: { line: 1142, column: 61 }
                },
                '633': { start: { line: 1144, column: 2 }, end: { line: 1146, column: 3 } },
                '634': {
                  start: { line: 1145, column: 4 },
                  end: { line: 1145, column: 58 }
                },
                '635': {
                  start: { line: 1148, column: 2 },
                  end: { line: 1148, column: 11 }
                },
                '636': { start: { line: 1151, column: 0 }, end: { line: 1182, column: 2 } },
                '637': { start: { line: 1152, column: 2 }, end: { line: 1154, column: 3 } },
                '638': {
                  start: { line: 1153, column: 4 },
                  end: { line: 1153, column: 11 }
                },
                '639': {
                  start: { line: 1156, column: 2 },
                  end: { line: 1156, column: 11 }
                },
                '640': { start: { line: 1158, column: 2 }, end: { line: 1178, column: 3 } },
                '641': { start: { line: 1162, column: 4 }, end: { line: 1164, column: 5 } },
                '642': {
                  start: { line: 1163, column: 6 },
                  end: { line: 1163, column: 49 }
                },
                '643': { start: { line: 1166, column: 4 }, end: { line: 1173, column: 5 } },
                '644': { start: { line: 1168, column: 6 }, end: { line: 1170, column: 7 } },
                '645': {
                  start: { line: 1169, column: 8 },
                  end: { line: 1169, column: 52 }
                },
                '646': {
                  start: { line: 1172, column: 6 },
                  end: { line: 1172, column: 47 }
                },
                '647': {
                  start: { line: 1177, column: 4 },
                  end: { line: 1177, column: 63 }
                },
                '648': {
                  start: { line: 1180, column: 2 },
                  end: { line: 1180, column: 10 }
                },
                '649': {
                  start: { line: 1181, column: 2 },
                  end: { line: 1181, column: 11 }
                },
                '650': { start: { line: 1184, column: 0 }, end: { line: 1190, column: 2 } },
                '651': { start: { line: 1185, column: 2 }, end: { line: 1187, column: 3 } },
                '652': {
                  start: { line: 1186, column: 4 },
                  end: { line: 1186, column: 56 }
                },
                '653': {
                  start: { line: 1189, column: 2 },
                  end: { line: 1189, column: 50 }
                },
                '654': { start: { line: 1192, column: 0 }, end: { line: 1217, column: 2 } },
                '655': {
                  start: { line: 1194, column: 12 },
                  end: { line: 1194, column: 23 }
                },
                '656': {
                  start: { line: 1196, column: 2 },
                  end: { line: 1196, column: 41 }
                },
                '657': {
                  start: { line: 1197, column: 2 },
                  end: { line: 1197, column: 42 }
                },
                '658': {
                  start: { line: 1199, column: 2 },
                  end: { line: 1199, column: 24 }
                },
                '659': { start: { line: 1201, column: 2 }, end: { line: 1204, column: 3 } },
                '660': {
                  start: { line: 1202, column: 4 },
                  end: { line: 1202, column: 42 }
                },
                '661': {
                  start: { line: 1203, column: 4 },
                  end: { line: 1203, column: 67 }
                },
                '662': {
                  start: { line: 1206, column: 2 },
                  end: { line: 1207, column: 35 }
                },
                '663': {
                  start: { line: 1209, column: 2 },
                  end: { line: 1209, column: 50 }
                },
                '664': { start: { line: 1210, column: 2 }, end: { line: 1214, column: 3 } },
                '665': {
                  start: { line: 1211, column: 4 },
                  end: { line: 1211, column: 61 }
                },
                '666': {
                  start: { line: 1213, column: 4 },
                  end: { line: 1213, column: 58 }
                },
                '667': {
                  start: { line: 1216, column: 2 },
                  end: { line: 1216, column: 11 }
                },
                '668': { start: { line: 1228, column: 0 }, end: { line: 1233, column: 2 } },
                '669': {
                  start: { line: 1229, column: 2 },
                  end: { line: 1229, column: 29 }
                },
                '670': {
                  start: { line: 1232, column: 2 },
                  end: { line: 1232, column: 48 }
                },
                '671': { start: { line: 1240, column: 0 }, end: { line: 1247, column: 2 } },
                '672': {
                  start: { line: 1241, column: 2 },
                  end: { line: 1241, column: 32 }
                },
                '673': {
                  start: { line: 1243, column: 2 },
                  end: { line: 1243, column: 56 }
                },
                '674': {
                  start: { line: 1244, column: 2 },
                  end: { line: 1244, column: 60 }
                },
                '675': { start: { line: 1246, column: 2 }, end: { line: 1246, column: 46 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 15, column: 16 }, end: { line: 15, column: 17 } },
                  loc: { start: { line: 15, column: 51 }, end: { line: 20, column: 1 } },
                  line: 15
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 24, column: 41 }, end: { line: 24, column: 42 } },
                  loc: { start: { line: 24, column: 52 }, end: { line: 31, column: 1 } },
                  line: 24
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: { start: { line: 33, column: 33 }, end: { line: 33, column: 34 } },
                  loc: { start: { line: 33, column: 48 }, end: { line: 39, column: 1 } },
                  line: 33
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: { start: { line: 45, column: 37 }, end: { line: 45, column: 38 } },
                  loc: { start: { line: 45, column: 55 }, end: { line: 77, column: 1 } },
                  line: 45
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: { start: { line: 79, column: 32 }, end: { line: 79, column: 33 } },
                  loc: { start: { line: 79, column: 43 }, end: { line: 84, column: 1 } },
                  line: 79
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: { start: { line: 86, column: 31 }, end: { line: 86, column: 32 } },
                  loc: { start: { line: 86, column: 49 }, end: { line: 94, column: 1 } },
                  line: 86
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: { start: { line: 96, column: 33 }, end: { line: 96, column: 34 } },
                  loc: { start: { line: 96, column: 51 }, end: { line: 104, column: 1 } },
                  line: 96
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 106, column: 32 },
                    end: { line: 106, column: 33 }
                  },
                  loc: { start: { line: 106, column: 69 }, end: { line: 125, column: 1 } },
                  line: 106
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 127, column: 34 },
                    end: { line: 127, column: 35 }
                  },
                  loc: { start: { line: 127, column: 45 }, end: { line: 135, column: 1 } },
                  line: 127
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 141, column: 32 },
                    end: { line: 141, column: 33 }
                  },
                  loc: { start: { line: 151, column: 2 }, end: { line: 195, column: 1 } },
                  line: 151
                },
                '10': {
                  name: '(anonymous_10)',
                  decl: {
                    start: { line: 197, column: 48 },
                    end: { line: 197, column: 49 }
                  },
                  loc: { start: { line: 197, column: 62 }, end: { line: 220, column: 1 } },
                  line: 197
                },
                '11': {
                  name: '(anonymous_11)',
                  decl: {
                    start: { line: 226, column: 36 },
                    end: { line: 226, column: 37 }
                  },
                  loc: { start: { line: 226, column: 51 }, end: { line: 251, column: 1 } },
                  line: 226
                },
                '12': {
                  name: '(anonymous_12)',
                  decl: {
                    start: { line: 253, column: 32 },
                    end: { line: 253, column: 33 }
                  },
                  loc: { start: { line: 253, column: 50 }, end: { line: 264, column: 1 } },
                  line: 253
                },
                '13': {
                  name: '(anonymous_13)',
                  decl: {
                    start: { line: 270, column: 36 },
                    end: { line: 270, column: 37 }
                  },
                  loc: { start: { line: 270, column: 51 }, end: { line: 280, column: 1 } },
                  line: 270
                },
                '14': {
                  name: '(anonymous_14)',
                  decl: {
                    start: { line: 282, column: 37 },
                    end: { line: 282, column: 38 }
                  },
                  loc: { start: { line: 282, column: 48 }, end: { line: 293, column: 1 } },
                  line: 282
                },
                '15': {
                  name: '(anonymous_15)',
                  decl: {
                    start: { line: 295, column: 30 },
                    end: { line: 295, column: 31 }
                  },
                  loc: { start: { line: 295, column: 55 }, end: { line: 369, column: 1 } },
                  line: 295
                },
                '16': {
                  name: '(anonymous_16)',
                  decl: {
                    start: { line: 371, column: 39 },
                    end: { line: 371, column: 40 }
                  },
                  loc: { start: { line: 371, column: 60 }, end: { line: 396, column: 1 } },
                  line: 371
                },
                '17': {
                  name: '_acuteArcToBezier',
                  decl: {
                    start: { line: 409, column: 53 },
                    end: { line: 409, column: 70 }
                  },
                  loc: { start: { line: 412, column: 2 }, end: { line: 436, column: 1 } },
                  line: 412
                },
                '18': {
                  name: '(anonymous_18)',
                  decl: {
                    start: { line: 445, column: 30 },
                    end: { line: 445, column: 31 }
                  },
                  loc: { start: { line: 445, column: 70 }, end: { line: 503, column: 1 } },
                  line: 445
                },
                '19': {
                  name: '(anonymous_19)',
                  decl: {
                    start: { line: 466, column: 19 },
                    end: { line: 466, column: 20 }
                  },
                  loc: { start: { line: 466, column: 37 }, end: { line: 474, column: 5 } },
                  line: 466
                },
                '20': {
                  name: '(anonymous_20)',
                  decl: {
                    start: { line: 485, column: 19 },
                    end: { line: 485, column: 20 }
                  },
                  loc: { start: { line: 485, column: 37 }, end: { line: 493, column: 5 } },
                  line: 485
                },
                '21': {
                  name: '(anonymous_21)',
                  decl: {
                    start: { line: 505, column: 34 },
                    end: { line: 505, column: 35 }
                  },
                  loc: { start: { line: 505, column: 49 }, end: { line: 546, column: 1 } },
                  line: 505
                },
                '22': {
                  name: '(anonymous_22)',
                  decl: {
                    start: { line: 548, column: 31 },
                    end: { line: 548, column: 32 }
                  },
                  loc: { start: { line: 548, column: 56 }, end: { line: 560, column: 1 } },
                  line: 548
                },
                '23': {
                  name: '(anonymous_23)',
                  decl: {
                    start: { line: 562, column: 32 },
                    end: { line: 562, column: 33 }
                  },
                  loc: { start: { line: 562, column: 47 }, end: { line: 577, column: 1 } },
                  line: 562
                },
                '24': {
                  name: '(anonymous_24)',
                  decl: {
                    start: { line: 579, column: 31 },
                    end: { line: 579, column: 32 }
                  },
                  loc: { start: { line: 579, column: 72 }, end: { line: 605, column: 1 } },
                  line: 579
                },
                '25': {
                  name: '(anonymous_25)',
                  decl: {
                    start: { line: 607, column: 31 },
                    end: { line: 607, column: 32 }
                  },
                  loc: { start: { line: 607, column: 46 }, end: { line: 694, column: 1 } },
                  line: 607
                },
                '26': {
                  name: '(anonymous_26)',
                  decl: {
                    start: { line: 696, column: 35 },
                    end: { line: 696, column: 36 }
                  },
                  loc: { start: { line: 696, column: 50 }, end: { line: 726, column: 1 } },
                  line: 696
                },
                '27': {
                  name: '(anonymous_27)',
                  decl: {
                    start: { line: 728, column: 35 },
                    end: { line: 728, column: 36 }
                  },
                  loc: { start: { line: 736, column: 2 }, end: { line: 985, column: 1 } },
                  line: 736
                },
                '28': {
                  name: '(anonymous_28)',
                  decl: {
                    start: { line: 990, column: 36 },
                    end: { line: 990, column: 37 }
                  },
                  loc: { start: { line: 990, column: 50 }, end: { line: 999, column: 1 } },
                  line: 990
                },
                '29': {
                  name: '(anonymous_29)',
                  decl: {
                    start: { line: 1001, column: 37 },
                    end: { line: 1001, column: 38 }
                  },
                  loc: {
                    start: { line: 1001, column: 52 },
                    end: { line: 1010, column: 1 }
                  },
                  line: 1001
                },
                '30': {
                  name: '(anonymous_30)',
                  decl: {
                    start: { line: 1012, column: 39 },
                    end: { line: 1012, column: 40 }
                  },
                  loc: {
                    start: { line: 1012, column: 51 },
                    end: { line: 1020, column: 1 }
                  },
                  line: 1012
                },
                '31': {
                  name: '(anonymous_31)',
                  decl: {
                    start: { line: 1022, column: 35 },
                    end: { line: 1022, column: 36 }
                  },
                  loc: {
                    start: { line: 1022, column: 46 },
                    end: { line: 1027, column: 1 }
                  },
                  line: 1022
                },
                '32': {
                  name: '(anonymous_32)',
                  decl: {
                    start: { line: 1029, column: 35 },
                    end: { line: 1029, column: 36 }
                  },
                  loc: {
                    start: { line: 1029, column: 55 },
                    end: { line: 1034, column: 1 }
                  },
                  line: 1029
                },
                '33': {
                  name: '(anonymous_33)',
                  decl: {
                    start: { line: 1036, column: 37 },
                    end: { line: 1036, column: 38 }
                  },
                  loc: {
                    start: { line: 1036, column: 48 },
                    end: { line: 1041, column: 1 }
                  },
                  line: 1036
                },
                '34': {
                  name: '(anonymous_34)',
                  decl: {
                    start: { line: 1043, column: 37 },
                    end: { line: 1043, column: 38 }
                  },
                  loc: {
                    start: { line: 1043, column: 59 },
                    end: { line: 1048, column: 1 }
                  },
                  line: 1043
                },
                '35': {
                  name: '(anonymous_35)',
                  decl: {
                    start: { line: 1053, column: 33 },
                    end: { line: 1053, column: 34 }
                  },
                  loc: {
                    start: { line: 1053, column: 74 },
                    end: { line: 1059, column: 1 }
                  },
                  line: 1053
                },
                '36': {
                  name: '(anonymous_36)',
                  decl: {
                    start: { line: 1061, column: 32 },
                    end: { line: 1061, column: 33 }
                  },
                  loc: {
                    start: { line: 1061, column: 73 },
                    end: { line: 1069, column: 1 }
                  },
                  line: 1061
                },
                '37': {
                  name: '(anonymous_37)',
                  decl: {
                    start: { line: 1075, column: 45 },
                    end: { line: 1075, column: 46 }
                  },
                  loc: {
                    start: { line: 1075, column: 66 },
                    end: { line: 1085, column: 1 }
                  },
                  line: 1075
                },
                '38': {
                  name: '(anonymous_38)',
                  decl: {
                    start: { line: 1091, column: 38 },
                    end: { line: 1091, column: 39 }
                  },
                  loc: {
                    start: { line: 1091, column: 65 },
                    end: { line: 1093, column: 1 }
                  },
                  line: 1091
                },
                '39': {
                  name: '(anonymous_39)',
                  decl: {
                    start: { line: 1095, column: 38 },
                    end: { line: 1095, column: 39 }
                  },
                  loc: {
                    start: { line: 1095, column: 49 },
                    end: { line: 1102, column: 1 }
                  },
                  line: 1095
                },
                '40': {
                  name: '(anonymous_40)',
                  decl: {
                    start: { line: 1104, column: 33 },
                    end: { line: 1104, column: 34 }
                  },
                  loc: {
                    start: { line: 1104, column: 47 },
                    end: { line: 1106, column: 1 }
                  },
                  line: 1104
                },
                '41': {
                  name: '(anonymous_41)',
                  decl: {
                    start: { line: 1108, column: 32 },
                    end: { line: 1108, column: 33 }
                  },
                  loc: {
                    start: { line: 1108, column: 47 },
                    end: { line: 1111, column: 1 }
                  },
                  line: 1108
                },
                '42': {
                  name: '(anonymous_42)',
                  decl: {
                    start: { line: 1113, column: 36 },
                    end: { line: 1113, column: 37 }
                  },
                  loc: {
                    start: { line: 1113, column: 51 },
                    end: { line: 1121, column: 1 }
                  },
                  line: 1113
                },
                '43': {
                  name: '(anonymous_43)',
                  decl: {
                    start: { line: 1128, column: 31 },
                    end: { line: 1128, column: 32 }
                  },
                  loc: {
                    start: { line: 1128, column: 72 },
                    end: { line: 1149, column: 1 }
                  },
                  line: 1128
                },
                '44': {
                  name: '(anonymous_44)',
                  decl: {
                    start: { line: 1151, column: 38 },
                    end: { line: 1151, column: 39 }
                  },
                  loc: {
                    start: { line: 1151, column: 68 },
                    end: { line: 1182, column: 1 }
                  },
                  line: 1151
                },
                '45': {
                  name: '(anonymous_45)',
                  decl: {
                    start: { line: 1184, column: 36 },
                    end: { line: 1184, column: 37 }
                  },
                  loc: {
                    start: { line: 1184, column: 48 },
                    end: { line: 1190, column: 1 }
                  },
                  line: 1184
                },
                '46': {
                  name: '(anonymous_46)',
                  decl: {
                    start: { line: 1192, column: 47 },
                    end: { line: 1192, column: 48 }
                  },
                  loc: {
                    start: { line: 1192, column: 58 },
                    end: { line: 1217, column: 1 }
                  },
                  line: 1192
                },
                '47': {
                  name: '(anonymous_47)',
                  decl: {
                    start: { line: 1228, column: 31 },
                    end: { line: 1228, column: 32 }
                  },
                  loc: {
                    start: { line: 1228, column: 42 },
                    end: { line: 1233, column: 1 }
                  },
                  line: 1228
                },
                '48': {
                  name: '(anonymous_48)',
                  decl: {
                    start: { line: 1240, column: 30 },
                    end: { line: 1240, column: 31 }
                  },
                  loc: {
                    start: { line: 1240, column: 46 },
                    end: { line: 1247, column: 1 }
                  },
                  line: 1240
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 49, column: 2 }, end: { line: 75, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 49, column: 2 }, end: { line: 75, column: 3 } },
                    { start: { line: 49, column: 2 }, end: { line: 75, column: 3 } }
                  ],
                  line: 49
                },
                '1': {
                  loc: { start: { line: 57, column: 4 }, end: { line: 59, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 57, column: 4 }, end: { line: 59, column: 5 } },
                    { start: { line: 57, column: 4 }, end: { line: 59, column: 5 } }
                  ],
                  line: 57
                },
                '2': {
                  loc: { start: { line: 64, column: 4 }, end: { line: 66, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 64, column: 4 }, end: { line: 66, column: 5 } },
                    { start: { line: 64, column: 4 }, end: { line: 66, column: 5 } }
                  ],
                  line: 64
                },
                '3': {
                  loc: { start: { line: 72, column: 4 }, end: { line: 74, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 72, column: 4 }, end: { line: 74, column: 5 } },
                    { start: { line: 72, column: 4 }, end: { line: 74, column: 5 } }
                  ],
                  line: 72
                },
                '4': {
                  loc: { start: { line: 91, column: 2 }, end: { line: 93, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 91, column: 2 }, end: { line: 93, column: 3 } },
                    { start: { line: 91, column: 2 }, end: { line: 93, column: 3 } }
                  ],
                  line: 91
                },
                '5': {
                  loc: { start: { line: 101, column: 2 }, end: { line: 103, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 101, column: 2 }, end: { line: 103, column: 3 } },
                    { start: { line: 101, column: 2 }, end: { line: 103, column: 3 } }
                  ],
                  line: 101
                },
                '6': {
                  loc: { start: { line: 107, column: 2 }, end: { line: 124, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 107, column: 2 }, end: { line: 124, column: 3 } },
                    { start: { line: 107, column: 2 }, end: { line: 124, column: 3 } }
                  ],
                  line: 107
                },
                '7': {
                  loc: { start: { line: 128, column: 2 }, end: { line: 134, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 128, column: 2 }, end: { line: 134, column: 3 } },
                    { start: { line: 128, column: 2 }, end: { line: 134, column: 3 } }
                  ],
                  line: 128
                },
                '8': {
                  loc: { start: { line: 153, column: 2 }, end: { line: 155, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 153, column: 2 }, end: { line: 155, column: 3 } },
                    { start: { line: 153, column: 2 }, end: { line: 155, column: 3 } }
                  ],
                  line: 153
                },
                '9': {
                  loc: { start: { line: 158, column: 4 }, end: { line: 165, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 158, column: 4 }, end: { line: 165, column: 5 } },
                    { start: { line: 158, column: 4 }, end: { line: 165, column: 5 } }
                  ],
                  line: 158
                },
                '10': {
                  loc: { start: { line: 159, column: 6 }, end: { line: 161, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 159, column: 6 }, end: { line: 161, column: 7 } },
                    { start: { line: 159, column: 6 }, end: { line: 161, column: 7 } }
                  ],
                  line: 159
                },
                '11': {
                  loc: { start: { line: 159, column: 10 }, end: { line: 159, column: 59 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 159, column: 10 }, end: { line: 159, column: 25 } },
                    { start: { line: 159, column: 29 }, end: { line: 159, column: 59 } }
                  ],
                  line: 159
                },
                '12': {
                  loc: { start: { line: 162, column: 6 }, end: { line: 164, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 162, column: 6 }, end: { line: 164, column: 7 } },
                    { start: { line: 162, column: 6 }, end: { line: 164, column: 7 } }
                  ],
                  line: 162
                },
                '13': {
                  loc: { start: { line: 166, column: 4 }, end: { line: 168, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 166, column: 4 }, end: { line: 168, column: 5 } },
                    { start: { line: 166, column: 4 }, end: { line: 168, column: 5 } }
                  ],
                  line: 166
                },
                '14': {
                  loc: { start: { line: 167, column: 12 }, end: { line: 167, column: 33 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 167, column: 12 }, end: { line: 167, column: 22 } },
                    { start: { line: 167, column: 26 }, end: { line: 167, column: 33 } }
                  ],
                  line: 167
                },
                '15': {
                  loc: { start: { line: 170, column: 4 }, end: { line: 172, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 170, column: 4 }, end: { line: 172, column: 5 } },
                    { start: { line: 170, column: 4 }, end: { line: 172, column: 5 } }
                  ],
                  line: 170
                },
                '16': {
                  loc: { start: { line: 170, column: 8 }, end: { line: 170, column: 34 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 170, column: 8 }, end: { line: 170, column: 17 } },
                    { start: { line: 170, column: 21 }, end: { line: 170, column: 34 } }
                  ],
                  line: 170
                },
                '17': {
                  loc: { start: { line: 173, column: 4 }, end: { line: 175, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 173, column: 4 }, end: { line: 175, column: 5 } },
                    { start: { line: 173, column: 4 }, end: { line: 175, column: 5 } }
                  ],
                  line: 173
                },
                '18': {
                  loc: { start: { line: 187, column: 4 }, end: { line: 189, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 187, column: 4 }, end: { line: 189, column: 5 } },
                    { start: { line: 187, column: 4 }, end: { line: 189, column: 5 } }
                  ],
                  line: 187
                },
                '19': {
                  loc: { start: { line: 191, column: 4 }, end: { line: 193, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 191, column: 4 }, end: { line: 193, column: 5 } },
                    { start: { line: 191, column: 4 }, end: { line: 193, column: 5 } }
                  ],
                  line: 191
                },
                '20': {
                  loc: { start: { line: 198, column: 2 }, end: { line: 200, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 198, column: 2 }, end: { line: 200, column: 3 } },
                    { start: { line: 198, column: 2 }, end: { line: 200, column: 3 } }
                  ],
                  line: 198
                },
                '21': {
                  loc: { start: { line: 227, column: 2 }, end: { line: 250, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 227, column: 2 }, end: { line: 250, column: 3 } },
                    { start: { line: 227, column: 2 }, end: { line: 250, column: 3 } }
                  ],
                  line: 227
                },
                '22': {
                  loc: { start: { line: 229, column: 9 }, end: { line: 250, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 229, column: 9 }, end: { line: 250, column: 3 } },
                    { start: { line: 229, column: 9 }, end: { line: 250, column: 3 } }
                  ],
                  line: 229
                },
                '23': {
                  loc: { start: { line: 230, column: 4 }, end: { line: 244, column: 26 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 230, column: 4 }, end: { line: 230, column: 28 } },
                    { start: { line: 231, column: 4 }, end: { line: 231, column: 29 } },
                    { start: { line: 232, column: 4 }, end: { line: 232, column: 30 } },
                    { start: { line: 233, column: 4 }, end: { line: 233, column: 31 } },
                    { start: { line: 234, column: 4 }, end: { line: 234, column: 33 } },
                    { start: { line: 235, column: 4 }, end: { line: 235, column: 31 } },
                    { start: { line: 236, column: 4 }, end: { line: 236, column: 32 } },
                    { start: { line: 237, column: 4 }, end: { line: 237, column: 29 } },
                    { start: { line: 238, column: 4 }, end: { line: 238, column: 30 } },
                    { start: { line: 239, column: 4 }, end: { line: 239, column: 30 } },
                    { start: { line: 240, column: 4 }, end: { line: 240, column: 33 } },
                    { start: { line: 241, column: 4 }, end: { line: 241, column: 33 } },
                    { start: { line: 242, column: 4 }, end: { line: 242, column: 28 } },
                    { start: { line: 243, column: 4 }, end: { line: 243, column: 27 } },
                    { start: { line: 244, column: 4 }, end: { line: 244, column: 26 } }
                  ],
                  line: 230
                },
                '24': {
                  loc: { start: { line: 300, column: 2 }, end: { line: 368, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 300, column: 2 }, end: { line: 368, column: 3 } },
                    { start: { line: 300, column: 2 }, end: { line: 368, column: 3 } }
                  ],
                  line: 300
                },
                '25': {
                  loc: { start: { line: 321, column: 4 }, end: { line: 323, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 321, column: 4 }, end: { line: 323, column: 5 } },
                    { start: { line: 321, column: 4 }, end: { line: 323, column: 5 } }
                  ],
                  line: 321
                },
                '26': {
                  loc: { start: { line: 324, column: 4 }, end: { line: 351, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 324, column: 4 }, end: { line: 351, column: 5 } },
                    { start: { line: 324, column: 4 }, end: { line: 351, column: 5 } }
                  ],
                  line: 324
                },
                '27': {
                  loc: { start: { line: 325, column: 6 }, end: { line: 331, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 325, column: 6 }, end: { line: 331, column: 7 } },
                    { start: { line: 325, column: 6 }, end: { line: 331, column: 7 } }
                  ],
                  line: 325
                },
                '28': {
                  loc: { start: { line: 332, column: 11 }, end: { line: 351, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 332, column: 11 }, end: { line: 351, column: 5 } },
                    { start: { line: 332, column: 11 }, end: { line: 351, column: 5 } }
                  ],
                  line: 332
                },
                '29': {
                  loc: { start: { line: 333, column: 6 }, end: { line: 335, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 333, column: 6 }, end: { line: 335, column: 7 } },
                    { start: { line: 333, column: 6 }, end: { line: 335, column: 7 } }
                  ],
                  line: 333
                },
                '30': {
                  loc: { start: { line: 336, column: 6 }, end: { line: 342, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 336, column: 6 }, end: { line: 342, column: 7 } },
                    { start: { line: 336, column: 6 }, end: { line: 342, column: 7 } }
                  ],
                  line: 336
                },
                '31': {
                  loc: { start: { line: 343, column: 11 }, end: { line: 351, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 343, column: 11 }, end: { line: 351, column: 5 } },
                    { start: { line: 343, column: 11 }, end: { line: 351, column: 5 } }
                  ],
                  line: 343
                },
                '32': {
                  loc: { start: { line: 344, column: 6 }, end: { line: 350, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 344, column: 6 }, end: { line: 350, column: 7 } },
                    { start: { line: 344, column: 6 }, end: { line: 350, column: 7 } }
                  ],
                  line: 344
                },
                '33': {
                  loc: { start: { line: 374, column: 2 }, end: { line: 384, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 374, column: 2 }, end: { line: 384, column: 3 } },
                    { start: { line: 374, column: 2 }, end: { line: 384, column: 3 } }
                  ],
                  line: 374
                },
                '34': {
                  loc: { start: { line: 375, column: 4 }, end: { line: 378, column: 19 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 375, column: 4 }, end: { line: 375, column: 19 } },
                    { start: { line: 376, column: 4 }, end: { line: 376, column: 19 } },
                    { start: { line: 377, column: 4 }, end: { line: 377, column: 19 } },
                    { start: { line: 378, column: 4 }, end: { line: 378, column: 19 } }
                  ],
                  line: 375
                },
                '35': {
                  loc: { start: { line: 390, column: 2 }, end: { line: 393, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 390, column: 2 }, end: { line: 393, column: 3 } },
                    { start: { line: 390, column: 2 }, end: { line: 393, column: 3 } }
                  ],
                  line: 390
                },
                '36': {
                  loc: { start: { line: 464, column: 2 }, end: { line: 480, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 464, column: 2 }, end: { line: 480, column: 3 } },
                    { start: { line: 464, column: 2 }, end: { line: 480, column: 3 } }
                  ],
                  line: 464
                },
                '37': {
                  loc: { start: { line: 467, column: 6 }, end: { line: 469, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 467, column: 6 }, end: { line: 469, column: 7 } },
                    { start: { line: 467, column: 6 }, end: { line: 469, column: 7 } }
                  ],
                  line: 467
                },
                '38': {
                  loc: { start: { line: 475, column: 4 }, end: { line: 477, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 475, column: 4 }, end: { line: 477, column: 5 } },
                    { start: { line: 475, column: 4 }, end: { line: 477, column: 5 } }
                  ],
                  line: 475
                },
                '39': {
                  loc: { start: { line: 475, column: 8 }, end: { line: 475, column: 46 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 475, column: 8 }, end: { line: 475, column: 30 } },
                    { start: { line: 475, column: 34 }, end: { line: 475, column: 46 } }
                  ],
                  line: 475
                },
                '40': {
                  loc: { start: { line: 483, column: 2 }, end: { line: 501, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 483, column: 2 }, end: { line: 501, column: 3 } },
                    { start: { line: 483, column: 2 }, end: { line: 501, column: 3 } }
                  ],
                  line: 483
                },
                '41': {
                  loc: { start: { line: 486, column: 6 }, end: { line: 488, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 486, column: 6 }, end: { line: 488, column: 7 } },
                    { start: { line: 486, column: 6 }, end: { line: 488, column: 7 } }
                  ],
                  line: 486
                },
                '42': {
                  loc: { start: { line: 494, column: 4 }, end: { line: 499, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 494, column: 4 }, end: { line: 499, column: 5 } },
                    { start: { line: 494, column: 4 }, end: { line: 499, column: 5 } }
                  ],
                  line: 494
                },
                '43': {
                  loc: { start: { line: 497, column: 11 }, end: { line: 499, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 497, column: 11 }, end: { line: 499, column: 5 } },
                    { start: { line: 497, column: 11 }, end: { line: 499, column: 5 } }
                  ],
                  line: 497
                },
                '44': {
                  loc: { start: { line: 513, column: 2 }, end: { line: 521, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 513, column: 2 }, end: { line: 521, column: 3 } },
                    { start: { line: 513, column: 2 }, end: { line: 521, column: 3 } }
                  ],
                  line: 513
                },
                '45': {
                  loc: { start: { line: 513, column: 6 }, end: { line: 513, column: 25 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 513, column: 6 }, end: { line: 513, column: 12 } },
                    { start: { line: 513, column: 16 }, end: { line: 513, column: 25 } }
                  ],
                  line: 513
                },
                '46': {
                  loc: { start: { line: 514, column: 4 }, end: { line: 516, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 514, column: 4 }, end: { line: 516, column: 5 } },
                    { start: { line: 514, column: 4 }, end: { line: 516, column: 5 } }
                  ],
                  line: 514
                },
                '47': {
                  loc: { start: { line: 517, column: 9 }, end: { line: 521, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 517, column: 9 }, end: { line: 521, column: 3 } },
                    { start: { line: 517, column: 9 }, end: { line: 521, column: 3 } }
                  ],
                  line: 517
                },
                '48': {
                  loc: { start: { line: 517, column: 13 }, end: { line: 517, column: 32 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 517, column: 13 }, end: { line: 517, column: 20 } },
                    { start: { line: 517, column: 24 }, end: { line: 517, column: 32 } }
                  ],
                  line: 517
                },
                '49': {
                  loc: { start: { line: 518, column: 4 }, end: { line: 520, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 518, column: 4 }, end: { line: 520, column: 5 } },
                    { start: { line: 518, column: 4 }, end: { line: 520, column: 5 } }
                  ],
                  line: 518
                },
                '50': {
                  loc: { start: { line: 540, column: 2 }, end: { line: 542, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 540, column: 2 }, end: { line: 542, column: 3 } },
                    { start: { line: 540, column: 2 }, end: { line: 542, column: 3 } }
                  ],
                  line: 540
                },
                '51': {
                  loc: { start: { line: 543, column: 2 }, end: { line: 545, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 543, column: 2 }, end: { line: 545, column: 3 } },
                    { start: { line: 543, column: 2 }, end: { line: 545, column: 3 } }
                  ],
                  line: 543
                },
                '52': {
                  loc: { start: { line: 550, column: 2 }, end: { line: 554, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 550, column: 2 }, end: { line: 554, column: 3 } },
                    { start: { line: 550, column: 2 }, end: { line: 554, column: 3 } }
                  ],
                  line: 550
                },
                '53': {
                  loc: { start: { line: 552, column: 9 }, end: { line: 554, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 552, column: 9 }, end: { line: 554, column: 3 } },
                    { start: { line: 552, column: 9 }, end: { line: 554, column: 3 } }
                  ],
                  line: 552
                },
                '54': {
                  loc: { start: { line: 564, column: 2 }, end: { line: 568, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 564, column: 2 }, end: { line: 568, column: 3 } },
                    { start: { line: 564, column: 2 }, end: { line: 568, column: 3 } }
                  ],
                  line: 564
                },
                '55': {
                  loc: { start: { line: 566, column: 9 }, end: { line: 568, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 566, column: 9 }, end: { line: 568, column: 3 } },
                    { start: { line: 566, column: 9 }, end: { line: 568, column: 3 } }
                  ],
                  line: 566
                },
                '56': {
                  loc: { start: { line: 583, column: 2 }, end: { line: 591, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 583, column: 2 }, end: { line: 591, column: 3 } },
                    { start: { line: 583, column: 2 }, end: { line: 591, column: 3 } }
                  ],
                  line: 583
                },
                '57': {
                  loc: { start: { line: 583, column: 6 }, end: { line: 583, column: 25 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 583, column: 6 }, end: { line: 583, column: 12 } },
                    { start: { line: 583, column: 16 }, end: { line: 583, column: 25 } }
                  ],
                  line: 583
                },
                '58': {
                  loc: { start: { line: 584, column: 4 }, end: { line: 586, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 584, column: 4 }, end: { line: 586, column: 5 } },
                    { start: { line: 584, column: 4 }, end: { line: 586, column: 5 } }
                  ],
                  line: 584
                },
                '59': {
                  loc: { start: { line: 587, column: 9 }, end: { line: 591, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 587, column: 9 }, end: { line: 591, column: 3 } },
                    { start: { line: 587, column: 9 }, end: { line: 591, column: 3 } }
                  ],
                  line: 587
                },
                '60': {
                  loc: { start: { line: 587, column: 13 }, end: { line: 587, column: 32 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 587, column: 13 }, end: { line: 587, column: 20 } },
                    { start: { line: 587, column: 24 }, end: { line: 587, column: 32 } }
                  ],
                  line: 587
                },
                '61': {
                  loc: { start: { line: 588, column: 4 }, end: { line: 590, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 588, column: 4 }, end: { line: 590, column: 5 } },
                    { start: { line: 588, column: 4 }, end: { line: 590, column: 5 } }
                  ],
                  line: 588
                },
                '62': {
                  loc: { start: { line: 598, column: 2 }, end: { line: 600, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 598, column: 2 }, end: { line: 600, column: 3 } },
                    { start: { line: 598, column: 2 }, end: { line: 600, column: 3 } }
                  ],
                  line: 598
                },
                '63': {
                  loc: { start: { line: 601, column: 2 }, end: { line: 603, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 601, column: 2 }, end: { line: 603, column: 3 } },
                    { start: { line: 601, column: 2 }, end: { line: 603, column: 3 } }
                  ],
                  line: 601
                },
                '64': {
                  loc: { start: { line: 619, column: 2 }, end: { line: 627, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 619, column: 2 }, end: { line: 627, column: 3 } },
                    { start: { line: 619, column: 2 }, end: { line: 627, column: 3 } }
                  ],
                  line: 619
                },
                '65': {
                  loc: { start: { line: 619, column: 6 }, end: { line: 619, column: 25 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 619, column: 6 }, end: { line: 619, column: 12 } },
                    { start: { line: 619, column: 16 }, end: { line: 619, column: 25 } }
                  ],
                  line: 619
                },
                '66': {
                  loc: { start: { line: 620, column: 4 }, end: { line: 622, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 620, column: 4 }, end: { line: 622, column: 5 } },
                    { start: { line: 620, column: 4 }, end: { line: 622, column: 5 } }
                  ],
                  line: 620
                },
                '67': {
                  loc: { start: { line: 623, column: 9 }, end: { line: 627, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 623, column: 9 }, end: { line: 627, column: 3 } },
                    { start: { line: 623, column: 9 }, end: { line: 627, column: 3 } }
                  ],
                  line: 623
                },
                '68': {
                  loc: { start: { line: 623, column: 13 }, end: { line: 623, column: 32 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 623, column: 13 }, end: { line: 623, column: 20 } },
                    { start: { line: 623, column: 24 }, end: { line: 623, column: 32 } }
                  ],
                  line: 623
                },
                '69': {
                  loc: { start: { line: 624, column: 4 }, end: { line: 626, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 624, column: 4 }, end: { line: 626, column: 5 } },
                    { start: { line: 624, column: 4 }, end: { line: 626, column: 5 } }
                  ],
                  line: 624
                },
                '70': {
                  loc: { start: { line: 630, column: 2 }, end: { line: 686, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 630, column: 2 }, end: { line: 686, column: 3 } },
                    { start: { line: 630, column: 2 }, end: { line: 686, column: 3 } }
                  ],
                  line: 630
                },
                '71': {
                  loc: { start: { line: 636, column: 4 }, end: { line: 638, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 636, column: 4 }, end: { line: 638, column: 5 } },
                    { start: { line: 636, column: 4 }, end: { line: 638, column: 5 } }
                  ],
                  line: 636
                },
                '72': {
                  loc: { start: { line: 639, column: 4 }, end: { line: 641, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 639, column: 4 }, end: { line: 641, column: 5 } },
                    { start: { line: 639, column: 4 }, end: { line: 641, column: 5 } }
                  ],
                  line: 639
                },
                '73': {
                  loc: { start: { line: 642, column: 4 }, end: { line: 644, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 642, column: 4 }, end: { line: 644, column: 5 } },
                    { start: { line: 642, column: 4 }, end: { line: 644, column: 5 } }
                  ],
                  line: 642
                },
                '74': {
                  loc: { start: { line: 653, column: 4 }, end: { line: 655, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 653, column: 4 }, end: { line: 655, column: 5 } },
                    { start: { line: 653, column: 4 }, end: { line: 655, column: 5 } }
                  ],
                  line: 653
                },
                '75': {
                  loc: { start: { line: 656, column: 4 }, end: { line: 658, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 656, column: 4 }, end: { line: 658, column: 5 } },
                    { start: { line: 656, column: 4 }, end: { line: 658, column: 5 } }
                  ],
                  line: 656
                },
                '76': {
                  loc: { start: { line: 659, column: 4 }, end: { line: 661, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 659, column: 4 }, end: { line: 661, column: 5 } },
                    { start: { line: 659, column: 4 }, end: { line: 661, column: 5 } }
                  ],
                  line: 659
                },
                '77': {
                  loc: { start: { line: 662, column: 4 }, end: { line: 664, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 662, column: 4 }, end: { line: 664, column: 5 } },
                    { start: { line: 662, column: 4 }, end: { line: 664, column: 5 } }
                  ],
                  line: 662
                },
                '78': {
                  loc: { start: { line: 665, column: 4 }, end: { line: 667, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 665, column: 4 }, end: { line: 667, column: 5 } },
                    { start: { line: 665, column: 4 }, end: { line: 667, column: 5 } }
                  ],
                  line: 665
                },
                '79': {
                  loc: { start: { line: 668, column: 4 }, end: { line: 670, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 668, column: 4 }, end: { line: 670, column: 5 } },
                    { start: { line: 668, column: 4 }, end: { line: 670, column: 5 } }
                  ],
                  line: 668
                },
                '80': {
                  loc: { start: { line: 671, column: 4 }, end: { line: 673, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 671, column: 4 }, end: { line: 673, column: 5 } },
                    { start: { line: 671, column: 4 }, end: { line: 673, column: 5 } }
                  ],
                  line: 671
                },
                '81': {
                  loc: { start: { line: 674, column: 4 }, end: { line: 676, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 674, column: 4 }, end: { line: 676, column: 5 } },
                    { start: { line: 674, column: 4 }, end: { line: 676, column: 5 } }
                  ],
                  line: 674
                },
                '82': {
                  loc: { start: { line: 687, column: 2 }, end: { line: 689, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 687, column: 2 }, end: { line: 689, column: 3 } },
                    { start: { line: 687, column: 2 }, end: { line: 689, column: 3 } }
                  ],
                  line: 687
                },
                '83': {
                  loc: { start: { line: 690, column: 2 }, end: { line: 692, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 690, column: 2 }, end: { line: 692, column: 3 } },
                    { start: { line: 690, column: 2 }, end: { line: 692, column: 3 } }
                  ],
                  line: 690
                },
                '84': {
                  loc: { start: { line: 706, column: 2 }, end: { line: 714, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 706, column: 2 }, end: { line: 714, column: 3 } },
                    { start: { line: 706, column: 2 }, end: { line: 714, column: 3 } }
                  ],
                  line: 706
                },
                '85': {
                  loc: { start: { line: 706, column: 6 }, end: { line: 706, column: 25 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 706, column: 6 }, end: { line: 706, column: 12 } },
                    { start: { line: 706, column: 16 }, end: { line: 706, column: 25 } }
                  ],
                  line: 706
                },
                '86': {
                  loc: { start: { line: 707, column: 4 }, end: { line: 709, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 707, column: 4 }, end: { line: 709, column: 5 } },
                    { start: { line: 707, column: 4 }, end: { line: 709, column: 5 } }
                  ],
                  line: 707
                },
                '87': {
                  loc: { start: { line: 710, column: 9 }, end: { line: 714, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 710, column: 9 }, end: { line: 714, column: 3 } },
                    { start: { line: 710, column: 9 }, end: { line: 714, column: 3 } }
                  ],
                  line: 710
                },
                '88': {
                  loc: { start: { line: 710, column: 13 }, end: { line: 710, column: 32 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 710, column: 13 }, end: { line: 710, column: 20 } },
                    { start: { line: 710, column: 24 }, end: { line: 710, column: 32 } }
                  ],
                  line: 710
                },
                '89': {
                  loc: { start: { line: 711, column: 4 }, end: { line: 713, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 711, column: 4 }, end: { line: 713, column: 5 } },
                    { start: { line: 711, column: 4 }, end: { line: 713, column: 5 } }
                  ],
                  line: 711
                },
                '90': {
                  loc: { start: { line: 720, column: 2 }, end: { line: 722, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 720, column: 2 }, end: { line: 722, column: 3 } },
                    { start: { line: 720, column: 2 }, end: { line: 722, column: 3 } }
                  ],
                  line: 720
                },
                '91': {
                  loc: { start: { line: 723, column: 2 }, end: { line: 725, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 723, column: 2 }, end: { line: 725, column: 3 } },
                    { start: { line: 723, column: 2 }, end: { line: 725, column: 3 } }
                  ],
                  line: 723
                },
                '92': {
                  loc: { start: { line: 737, column: 2 }, end: { line: 739, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 737, column: 2 }, end: { line: 739, column: 3 } },
                    { start: { line: 737, column: 2 }, end: { line: 739, column: 3 } }
                  ],
                  line: 737
                },
                '93': {
                  loc: { start: { line: 740, column: 2 }, end: { line: 742, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 740, column: 2 }, end: { line: 742, column: 3 } },
                    { start: { line: 740, column: 2 }, end: { line: 742, column: 3 } }
                  ],
                  line: 740
                },
                '94': {
                  loc: { start: { line: 740, column: 6 }, end: { line: 740, column: 38 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 740, column: 6 }, end: { line: 740, column: 21 } },
                    { start: { line: 740, column: 25 }, end: { line: 740, column: 38 } }
                  ],
                  line: 740
                },
                '95': {
                  loc: { start: { line: 745, column: 2 }, end: { line: 747, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 745, column: 2 }, end: { line: 747, column: 3 } },
                    { start: { line: 745, column: 2 }, end: { line: 747, column: 3 } }
                  ],
                  line: 745
                },
                '96': {
                  loc: { start: { line: 745, column: 6 }, end: { line: 745, column: 30 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 745, column: 6 }, end: { line: 745, column: 16 } },
                    { start: { line: 745, column: 20 }, end: { line: 745, column: 30 } }
                  ],
                  line: 745
                },
                '97': {
                  loc: { start: { line: 750, column: 2 }, end: { line: 975, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 750, column: 2 }, end: { line: 975, column: 3 } },
                    { start: { line: 750, column: 2 }, end: { line: 975, column: 3 } }
                  ],
                  line: 750
                },
                '98': {
                  loc: { start: { line: 750, column: 6 }, end: { line: 750, column: 72 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 750, column: 6 }, end: { line: 750, column: 13 } },
                    { start: { line: 750, column: 18 }, end: { line: 750, column: 49 } },
                    { start: { line: 750, column: 53 }, end: { line: 750, column: 71 } }
                  ],
                  line: 750
                },
                '99': {
                  loc: { start: { line: 751, column: 4 }, end: { line: 782, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 751, column: 4 }, end: { line: 782, column: 5 } },
                    { start: { line: 751, column: 4 }, end: { line: 782, column: 5 } }
                  ],
                  line: 751
                },
                '100': {
                  loc: { start: { line: 778, column: 6 }, end: { line: 780, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 778, column: 6 }, end: { line: 780, column: 7 } },
                    { start: { line: 778, column: 6 }, end: { line: 780, column: 7 } }
                  ],
                  line: 778
                },
                '101': {
                  loc: { start: { line: 783, column: 9 }, end: { line: 975, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 783, column: 9 }, end: { line: 975, column: 3 } },
                    { start: { line: 783, column: 9 }, end: { line: 975, column: 3 } }
                  ],
                  line: 783
                },
                '102': {
                  loc: { start: { line: 784, column: 4 }, end: { line: 785, column: 59 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 784, column: 4 }, end: { line: 784, column: 12 } },
                    { start: { line: 785, column: 5 }, end: { line: 785, column: 36 } },
                    { start: { line: 785, column: 40 }, end: { line: 785, column: 58 } }
                  ],
                  line: 784
                },
                '103': {
                  loc: { start: { line: 789, column: 6 }, end: { line: 804, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 789, column: 6 }, end: { line: 804, column: 7 } },
                    { start: { line: 789, column: 6 }, end: { line: 804, column: 7 } }
                  ],
                  line: 789
                },
                '104': {
                  loc: { start: { line: 790, column: 8 }, end: { line: 794, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 790, column: 8 }, end: { line: 794, column: 9 } },
                    { start: { line: 790, column: 8 }, end: { line: 794, column: 9 } }
                  ],
                  line: 790
                },
                '105': {
                  loc: { start: { line: 807, column: 9 }, end: { line: 975, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 807, column: 9 }, end: { line: 975, column: 3 } },
                    { start: { line: 807, column: 9 }, end: { line: 975, column: 3 } }
                  ],
                  line: 807
                },
                '106': {
                  loc: { start: { line: 808, column: 4 }, end: { line: 809, column: 59 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 808, column: 4 }, end: { line: 808, column: 15 } },
                    { start: { line: 809, column: 5 }, end: { line: 809, column: 36 } },
                    { start: { line: 809, column: 40 }, end: { line: 809, column: 58 } }
                  ],
                  line: 808
                },
                '107': {
                  loc: { start: { line: 813, column: 6 }, end: { line: 826, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 813, column: 6 }, end: { line: 826, column: 7 } },
                    { start: { line: 813, column: 6 }, end: { line: 826, column: 7 } }
                  ],
                  line: 813
                },
                '108': {
                  loc: { start: { line: 814, column: 8 }, end: { line: 818, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 814, column: 8 }, end: { line: 818, column: 9 } },
                    { start: { line: 814, column: 8 }, end: { line: 818, column: 9 } }
                  ],
                  line: 814
                },
                '109': {
                  loc: { start: { line: 830, column: 4 }, end: { line: 974, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 830, column: 4 }, end: { line: 974, column: 5 } },
                    { start: { line: 830, column: 4 }, end: { line: 974, column: 5 } }
                  ],
                  line: 830
                },
                '110': {
                  loc: { start: { line: 833, column: 8 }, end: { line: 835, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 833, column: 8 }, end: { line: 835, column: 9 } },
                    { start: { line: 833, column: 8 }, end: { line: 835, column: 9 } }
                  ],
                  line: 833
                },
                '111': {
                  loc: { start: { line: 838, column: 11 }, end: { line: 974, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 838, column: 11 }, end: { line: 974, column: 5 } },
                    { start: { line: 838, column: 11 }, end: { line: 974, column: 5 } }
                  ],
                  line: 838
                },
                '112': {
                  loc: { start: { line: 841, column: 8 }, end: { line: 843, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 841, column: 8 }, end: { line: 843, column: 9 } },
                    { start: { line: 841, column: 8 }, end: { line: 843, column: 9 } }
                  ],
                  line: 841
                },
                '113': {
                  loc: { start: { line: 846, column: 11 }, end: { line: 974, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 846, column: 11 }, end: { line: 974, column: 5 } },
                    { start: { line: 846, column: 11 }, end: { line: 974, column: 5 } }
                  ],
                  line: 846
                },
                '114': {
                  loc: { start: { line: 854, column: 8 }, end: { line: 857, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 854, column: 8 }, end: { line: 857, column: 9 } },
                    { start: { line: 854, column: 8 }, end: { line: 857, column: 9 } }
                  ],
                  line: 854
                },
                '115': {
                  loc: { start: { line: 858, column: 8 }, end: { line: 861, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 858, column: 8 }, end: { line: 861, column: 9 } },
                    { start: { line: 858, column: 8 }, end: { line: 861, column: 9 } }
                  ],
                  line: 858
                },
                '116': {
                  loc: { start: { line: 863, column: 11 }, end: { line: 974, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 863, column: 11 }, end: { line: 974, column: 5 } },
                    { start: { line: 863, column: 11 }, end: { line: 974, column: 5 } }
                  ],
                  line: 863
                },
                '117': {
                  loc: { start: { line: 869, column: 8 }, end: { line: 871, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 869, column: 8 }, end: { line: 871, column: 9 } },
                    { start: { line: 869, column: 8 }, end: { line: 871, column: 9 } }
                  ],
                  line: 869
                },
                '118': {
                  loc: { start: { line: 872, column: 8 }, end: { line: 874, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 872, column: 8 }, end: { line: 874, column: 9 } },
                    { start: { line: 872, column: 8 }, end: { line: 874, column: 9 } }
                  ],
                  line: 872
                },
                '119': {
                  loc: { start: { line: 875, column: 8 }, end: { line: 883, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 875, column: 8 }, end: { line: 883, column: 9 } },
                    { start: { line: 875, column: 8 }, end: { line: 883, column: 9 } }
                  ],
                  line: 875
                },
                '120': {
                  loc: { start: { line: 877, column: 10 }, end: { line: 879, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 877, column: 10 }, end: { line: 879, column: 11 } },
                    { start: { line: 877, column: 10 }, end: { line: 879, column: 11 } }
                  ],
                  line: 877
                },
                '121': {
                  loc: { start: { line: 880, column: 10 }, end: { line: 882, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 880, column: 10 }, end: { line: 882, column: 11 } },
                    { start: { line: 880, column: 10 }, end: { line: 882, column: 11 } }
                  ],
                  line: 880
                },
                '122': {
                  loc: { start: { line: 886, column: 11 }, end: { line: 974, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 886, column: 11 }, end: { line: 974, column: 5 } },
                    { start: { line: 886, column: 11 }, end: { line: 974, column: 5 } }
                  ],
                  line: 886
                },
                '123': {
                  loc: { start: { line: 887, column: 6 }, end: { line: 919, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 887, column: 6 }, end: { line: 919, column: 7 } },
                    { start: { line: 887, column: 6 }, end: { line: 919, column: 7 } }
                  ],
                  line: 887
                },
                '124': {
                  loc: { start: { line: 898, column: 10 }, end: { line: 916, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 898, column: 10 }, end: { line: 916, column: 11 } },
                    { start: { line: 898, column: 10 }, end: { line: 916, column: 11 } }
                  ],
                  line: 898
                },
                '125': {
                  loc: { start: { line: 899, column: 12 }, end: { line: 915, column: 13 } },
                  type: 'if',
                  locations: [
                    { start: { line: 899, column: 12 }, end: { line: 915, column: 13 } },
                    { start: { line: 899, column: 12 }, end: { line: 915, column: 13 } }
                  ],
                  line: 899
                },
                '126': {
                  loc: { start: { line: 900, column: 14 }, end: { line: 901, column: 61 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 900, column: 15 }, end: { line: 900, column: 27 } },
                    { start: { line: 900, column: 31 }, end: { line: 900, column: 58 } },
                    { start: { line: 901, column: 15 }, end: { line: 901, column: 29 } },
                    { start: { line: 901, column: 33 }, end: { line: 901, column: 60 } }
                  ],
                  line: 900
                },
                '127': {
                  loc: { start: { line: 903, column: 14 }, end: { line: 907, column: 15 } },
                  type: 'if',
                  locations: [
                    { start: { line: 903, column: 14 }, end: { line: 907, column: 15 } },
                    { start: { line: 903, column: 14 }, end: { line: 907, column: 15 } }
                  ],
                  line: 903
                },
                '128': {
                  loc: { start: { line: 908, column: 14 }, end: { line: 912, column: 15 } },
                  type: 'if',
                  locations: [
                    { start: { line: 908, column: 14 }, end: { line: 912, column: 15 } },
                    { start: { line: 908, column: 14 }, end: { line: 912, column: 15 } }
                  ],
                  line: 908
                },
                '129': {
                  loc: { start: { line: 920, column: 11 }, end: { line: 974, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 920, column: 11 }, end: { line: 974, column: 5 } },
                    { start: { line: 920, column: 11 }, end: { line: 974, column: 5 } }
                  ],
                  line: 920
                },
                '130': {
                  loc: { start: { line: 929, column: 8 }, end: { line: 931, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 929, column: 8 }, end: { line: 931, column: 9 } },
                    { start: { line: 929, column: 8 }, end: { line: 931, column: 9 } }
                  ],
                  line: 929
                },
                '131': {
                  loc: { start: { line: 932, column: 8 }, end: { line: 934, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 932, column: 8 }, end: { line: 934, column: 9 } },
                    { start: { line: 932, column: 8 }, end: { line: 934, column: 9 } }
                  ],
                  line: 932
                },
                '132': {
                  loc: { start: { line: 937, column: 11 }, end: { line: 974, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 937, column: 11 }, end: { line: 974, column: 5 } },
                    { start: { line: 937, column: 11 }, end: { line: 974, column: 5 } }
                  ],
                  line: 937
                },
                '133': {
                  loc: { start: { line: 938, column: 6 }, end: { line: 959, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 938, column: 6 }, end: { line: 959, column: 7 } },
                    { start: { line: 938, column: 6 }, end: { line: 959, column: 7 } }
                  ],
                  line: 938
                },
                '134': {
                  loc: { start: { line: 942, column: 10 }, end: { line: 956, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 942, column: 10 }, end: { line: 956, column: 11 } },
                    { start: { line: 942, column: 10 }, end: { line: 956, column: 11 } }
                  ],
                  line: 942
                },
                '135': {
                  loc: { start: { line: 947, column: 12 }, end: { line: 949, column: 13 } },
                  type: 'if',
                  locations: [
                    { start: { line: 947, column: 12 }, end: { line: 949, column: 13 } },
                    { start: { line: 947, column: 12 }, end: { line: 949, column: 13 } }
                  ],
                  line: 947
                },
                '136': {
                  loc: { start: { line: 950, column: 12 }, end: { line: 952, column: 13 } },
                  type: 'if',
                  locations: [
                    { start: { line: 950, column: 12 }, end: { line: 952, column: 13 } },
                    { start: { line: 950, column: 12 }, end: { line: 952, column: 13 } }
                  ],
                  line: 950
                },
                '137': {
                  loc: { start: { line: 965, column: 8 }, end: { line: 971, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 965, column: 8 }, end: { line: 971, column: 9 } },
                    { start: { line: 965, column: 8 }, end: { line: 971, column: 9 } }
                  ],
                  line: 965
                },
                '138': {
                  loc: { start: { line: 966, column: 10 }, end: { line: 970, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 966, column: 10 }, end: { line: 970, column: 11 } },
                    { start: { line: 966, column: 10 }, end: { line: 970, column: 11 } }
                  ],
                  line: 966
                },
                '139': {
                  loc: { start: { line: 980, column: 2 }, end: { line: 982, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 980, column: 2 }, end: { line: 982, column: 3 } },
                    { start: { line: 980, column: 2 }, end: { line: 982, column: 3 } }
                  ],
                  line: 980
                },
                '140': {
                  loc: { start: { line: 991, column: 2 }, end: { line: 997, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 991, column: 2 }, end: { line: 997, column: 3 } },
                    { start: { line: 991, column: 2 }, end: { line: 997, column: 3 } }
                  ],
                  line: 991
                },
                '141': {
                  loc: { start: { line: 992, column: 4 }, end: { line: 994, column: 29 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 992, column: 4 }, end: { line: 992, column: 27 } },
                    { start: { line: 993, column: 4 }, end: { line: 993, column: 28 } },
                    { start: { line: 994, column: 4 }, end: { line: 994, column: 29 } }
                  ],
                  line: 992
                },
                '142': {
                  loc: { start: { line: 1002, column: 2 }, end: { line: 1008, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1002, column: 2 }, end: { line: 1008, column: 3 } },
                    { start: { line: 1002, column: 2 }, end: { line: 1008, column: 3 } }
                  ],
                  line: 1002
                },
                '143': {
                  loc: {
                    start: { line: 1003, column: 4 },
                    end: { line: 1005, column: 28 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1003, column: 4 }, end: { line: 1003, column: 28 } },
                    { start: { line: 1004, column: 4 }, end: { line: 1004, column: 28 } },
                    { start: { line: 1005, column: 4 }, end: { line: 1005, column: 28 } }
                  ],
                  line: 1003
                },
                '144': {
                  loc: { start: { line: 1013, column: 2 }, end: { line: 1018, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1013, column: 2 }, end: { line: 1018, column: 3 } },
                    { start: { line: 1013, column: 2 }, end: { line: 1018, column: 3 } }
                  ],
                  line: 1013
                },
                '145': {
                  loc: {
                    start: { line: 1013, column: 6 },
                    end: { line: 1013, column: 41 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1013, column: 6 }, end: { line: 1013, column: 30 } },
                    { start: { line: 1013, column: 34 }, end: { line: 1013, column: 41 } }
                  ],
                  line: 1013
                },
                '146': {
                  loc: { start: { line: 1023, column: 2 }, end: { line: 1025, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1023, column: 2 }, end: { line: 1025, column: 3 } },
                    { start: { line: 1023, column: 2 }, end: { line: 1025, column: 3 } }
                  ],
                  line: 1023
                },
                '147': {
                  loc: { start: { line: 1030, column: 2 }, end: { line: 1033, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1030, column: 2 }, end: { line: 1033, column: 3 } },
                    { start: { line: 1030, column: 2 }, end: { line: 1033, column: 3 } }
                  ],
                  line: 1030
                },
                '148': {
                  loc: { start: { line: 1037, column: 2 }, end: { line: 1039, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1037, column: 2 }, end: { line: 1039, column: 3 } },
                    { start: { line: 1037, column: 2 }, end: { line: 1039, column: 3 } }
                  ],
                  line: 1037
                },
                '149': {
                  loc: { start: { line: 1044, column: 2 }, end: { line: 1047, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1044, column: 2 }, end: { line: 1047, column: 3 } },
                    { start: { line: 1044, column: 2 }, end: { line: 1047, column: 3 } }
                  ],
                  line: 1044
                },
                '150': {
                  loc: { start: { line: 1076, column: 2 }, end: { line: 1078, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1076, column: 2 }, end: { line: 1078, column: 3 } },
                    { start: { line: 1076, column: 2 }, end: { line: 1078, column: 3 } }
                  ],
                  line: 1076
                },
                '151': {
                  loc: { start: { line: 1079, column: 2 }, end: { line: 1081, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1079, column: 2 }, end: { line: 1081, column: 3 } },
                    { start: { line: 1079, column: 2 }, end: { line: 1081, column: 3 } }
                  ],
                  line: 1079
                },
                '152': {
                  loc: { start: { line: 1082, column: 2 }, end: { line: 1084, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1082, column: 2 }, end: { line: 1084, column: 3 } },
                    { start: { line: 1082, column: 2 }, end: { line: 1084, column: 3 } }
                  ],
                  line: 1082
                },
                '153': {
                  loc: { start: { line: 1115, column: 2 }, end: { line: 1118, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1115, column: 2 }, end: { line: 1118, column: 3 } },
                    { start: { line: 1115, column: 2 }, end: { line: 1118, column: 3 } }
                  ],
                  line: 1115
                },
                '154': {
                  loc: { start: { line: 1135, column: 2 }, end: { line: 1140, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1135, column: 2 }, end: { line: 1140, column: 3 } },
                    { start: { line: 1135, column: 2 }, end: { line: 1140, column: 3 } }
                  ],
                  line: 1135
                },
                '155': {
                  loc: { start: { line: 1136, column: 4 }, end: { line: 1139, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1136, column: 4 }, end: { line: 1139, column: 5 } },
                    { start: { line: 1136, column: 4 }, end: { line: 1139, column: 5 } }
                  ],
                  line: 1136
                },
                '156': {
                  loc: { start: { line: 1144, column: 2 }, end: { line: 1146, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1144, column: 2 }, end: { line: 1146, column: 3 } },
                    { start: { line: 1144, column: 2 }, end: { line: 1146, column: 3 } }
                  ],
                  line: 1144
                },
                '157': {
                  loc: { start: { line: 1152, column: 2 }, end: { line: 1154, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1152, column: 2 }, end: { line: 1154, column: 3 } },
                    { start: { line: 1152, column: 2 }, end: { line: 1154, column: 3 } }
                  ],
                  line: 1152
                },
                '158': {
                  loc: { start: { line: 1158, column: 2 }, end: { line: 1178, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1158, column: 2 }, end: { line: 1178, column: 3 } },
                    { start: { line: 1158, column: 2 }, end: { line: 1178, column: 3 } }
                  ],
                  line: 1158
                },
                '159': {
                  loc: { start: { line: 1162, column: 4 }, end: { line: 1164, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1162, column: 4 }, end: { line: 1164, column: 5 } },
                    { start: { line: 1162, column: 4 }, end: { line: 1164, column: 5 } }
                  ],
                  line: 1162
                },
                '160': {
                  loc: {
                    start: { line: 1162, column: 8 },
                    end: { line: 1162, column: 41 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1162, column: 8 }, end: { line: 1162, column: 22 } },
                    { start: { line: 1162, column: 26 }, end: { line: 1162, column: 41 } }
                  ],
                  line: 1162
                },
                '161': {
                  loc: { start: { line: 1166, column: 4 }, end: { line: 1173, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1166, column: 4 }, end: { line: 1173, column: 5 } },
                    { start: { line: 1166, column: 4 }, end: { line: 1173, column: 5 } }
                  ],
                  line: 1166
                },
                '162': {
                  loc: { start: { line: 1168, column: 6 }, end: { line: 1170, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1168, column: 6 }, end: { line: 1170, column: 7 } },
                    { start: { line: 1168, column: 6 }, end: { line: 1170, column: 7 } }
                  ],
                  line: 1168
                },
                '163': {
                  loc: { start: { line: 1185, column: 2 }, end: { line: 1187, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1185, column: 2 }, end: { line: 1187, column: 3 } },
                    { start: { line: 1185, column: 2 }, end: { line: 1187, column: 3 } }
                  ],
                  line: 1185
                },
                '164': {
                  loc: { start: { line: 1201, column: 2 }, end: { line: 1204, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1201, column: 2 }, end: { line: 1204, column: 3 } },
                    { start: { line: 1201, column: 2 }, end: { line: 1204, column: 3 } }
                  ],
                  line: 1201
                },
                '165': {
                  loc: {
                    start: { line: 1206, column: 32 },
                    end: { line: 1206, column: 59 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1206, column: 32 }, end: { line: 1206, column: 47 } },
                    { start: { line: 1206, column: 51 }, end: { line: 1206, column: 59 } }
                  ],
                  line: 1206
                },
                '166': {
                  loc: {
                    start: { line: 1206, column: 63 },
                    end: { line: 1207, column: 6 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1206, column: 63 }, end: { line: 1206, column: 77 } },
                    { start: { line: 1207, column: 4 }, end: { line: 1207, column: 6 } }
                  ],
                  line: 1206
                },
                '167': {
                  loc: {
                    start: { line: 1207, column: 12 },
                    end: { line: 1207, column: 32 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1207, column: 12 }, end: { line: 1207, column: 16 } },
                    { start: { line: 1207, column: 20 }, end: { line: 1207, column: 32 } }
                  ],
                  line: 1207
                },
                '168': {
                  loc: { start: { line: 1210, column: 2 }, end: { line: 1214, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1210, column: 2 }, end: { line: 1214, column: 3 } },
                    { start: { line: 1210, column: 2 }, end: { line: 1214, column: 3 } }
                  ],
                  line: 1210
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0,
                '118': 0,
                '119': 0,
                '120': 0,
                '121': 0,
                '122': 0,
                '123': 0,
                '124': 0,
                '125': 0,
                '126': 0,
                '127': 0,
                '128': 0,
                '129': 0,
                '130': 0,
                '131': 0,
                '132': 0,
                '133': 0,
                '134': 0,
                '135': 0,
                '136': 0,
                '137': 0,
                '138': 0,
                '139': 0,
                '140': 0,
                '141': 0,
                '142': 0,
                '143': 0,
                '144': 0,
                '145': 0,
                '146': 0,
                '147': 0,
                '148': 0,
                '149': 0,
                '150': 0,
                '151': 0,
                '152': 0,
                '153': 0,
                '154': 0,
                '155': 0,
                '156': 0,
                '157': 0,
                '158': 0,
                '159': 0,
                '160': 0,
                '161': 0,
                '162': 0,
                '163': 0,
                '164': 0,
                '165': 0,
                '166': 0,
                '167': 0,
                '168': 0,
                '169': 0,
                '170': 0,
                '171': 0,
                '172': 0,
                '173': 0,
                '174': 0,
                '175': 0,
                '176': 0,
                '177': 0,
                '178': 0,
                '179': 0,
                '180': 0,
                '181': 0,
                '182': 0,
                '183': 0,
                '184': 0,
                '185': 0,
                '186': 0,
                '187': 0,
                '188': 0,
                '189': 0,
                '190': 0,
                '191': 0,
                '192': 0,
                '193': 0,
                '194': 0,
                '195': 0,
                '196': 0,
                '197': 0,
                '198': 0,
                '199': 0,
                '200': 0,
                '201': 0,
                '202': 0,
                '203': 0,
                '204': 0,
                '205': 0,
                '206': 0,
                '207': 0,
                '208': 0,
                '209': 0,
                '210': 0,
                '211': 0,
                '212': 0,
                '213': 0,
                '214': 0,
                '215': 0,
                '216': 0,
                '217': 0,
                '218': 0,
                '219': 0,
                '220': 0,
                '221': 0,
                '222': 0,
                '223': 0,
                '224': 0,
                '225': 0,
                '226': 0,
                '227': 0,
                '228': 0,
                '229': 0,
                '230': 0,
                '231': 0,
                '232': 0,
                '233': 0,
                '234': 0,
                '235': 0,
                '236': 0,
                '237': 0,
                '238': 0,
                '239': 0,
                '240': 0,
                '241': 0,
                '242': 0,
                '243': 0,
                '244': 0,
                '245': 0,
                '246': 0,
                '247': 0,
                '248': 0,
                '249': 0,
                '250': 0,
                '251': 0,
                '252': 0,
                '253': 0,
                '254': 0,
                '255': 0,
                '256': 0,
                '257': 0,
                '258': 0,
                '259': 0,
                '260': 0,
                '261': 0,
                '262': 0,
                '263': 0,
                '264': 0,
                '265': 0,
                '266': 0,
                '267': 0,
                '268': 0,
                '269': 0,
                '270': 0,
                '271': 0,
                '272': 0,
                '273': 0,
                '274': 0,
                '275': 0,
                '276': 0,
                '277': 0,
                '278': 0,
                '279': 0,
                '280': 0,
                '281': 0,
                '282': 0,
                '283': 0,
                '284': 0,
                '285': 0,
                '286': 0,
                '287': 0,
                '288': 0,
                '289': 0,
                '290': 0,
                '291': 0,
                '292': 0,
                '293': 0,
                '294': 0,
                '295': 0,
                '296': 0,
                '297': 0,
                '298': 0,
                '299': 0,
                '300': 0,
                '301': 0,
                '302': 0,
                '303': 0,
                '304': 0,
                '305': 0,
                '306': 0,
                '307': 0,
                '308': 0,
                '309': 0,
                '310': 0,
                '311': 0,
                '312': 0,
                '313': 0,
                '314': 0,
                '315': 0,
                '316': 0,
                '317': 0,
                '318': 0,
                '319': 0,
                '320': 0,
                '321': 0,
                '322': 0,
                '323': 0,
                '324': 0,
                '325': 0,
                '326': 0,
                '327': 0,
                '328': 0,
                '329': 0,
                '330': 0,
                '331': 0,
                '332': 0,
                '333': 0,
                '334': 0,
                '335': 0,
                '336': 0,
                '337': 0,
                '338': 0,
                '339': 0,
                '340': 0,
                '341': 0,
                '342': 0,
                '343': 0,
                '344': 0,
                '345': 0,
                '346': 0,
                '347': 0,
                '348': 0,
                '349': 0,
                '350': 0,
                '351': 0,
                '352': 0,
                '353': 0,
                '354': 0,
                '355': 0,
                '356': 0,
                '357': 0,
                '358': 0,
                '359': 0,
                '360': 0,
                '361': 0,
                '362': 0,
                '363': 0,
                '364': 0,
                '365': 0,
                '366': 0,
                '367': 0,
                '368': 0,
                '369': 0,
                '370': 0,
                '371': 0,
                '372': 0,
                '373': 0,
                '374': 0,
                '375': 0,
                '376': 0,
                '377': 0,
                '378': 0,
                '379': 0,
                '380': 0,
                '381': 0,
                '382': 0,
                '383': 0,
                '384': 0,
                '385': 0,
                '386': 0,
                '387': 0,
                '388': 0,
                '389': 0,
                '390': 0,
                '391': 0,
                '392': 0,
                '393': 0,
                '394': 0,
                '395': 0,
                '396': 0,
                '397': 0,
                '398': 0,
                '399': 0,
                '400': 0,
                '401': 0,
                '402': 0,
                '403': 0,
                '404': 0,
                '405': 0,
                '406': 0,
                '407': 0,
                '408': 0,
                '409': 0,
                '410': 0,
                '411': 0,
                '412': 0,
                '413': 0,
                '414': 0,
                '415': 0,
                '416': 0,
                '417': 0,
                '418': 0,
                '419': 0,
                '420': 0,
                '421': 0,
                '422': 0,
                '423': 0,
                '424': 0,
                '425': 0,
                '426': 0,
                '427': 0,
                '428': 0,
                '429': 0,
                '430': 0,
                '431': 0,
                '432': 0,
                '433': 0,
                '434': 0,
                '435': 0,
                '436': 0,
                '437': 0,
                '438': 0,
                '439': 0,
                '440': 0,
                '441': 0,
                '442': 0,
                '443': 0,
                '444': 0,
                '445': 0,
                '446': 0,
                '447': 0,
                '448': 0,
                '449': 0,
                '450': 0,
                '451': 0,
                '452': 0,
                '453': 0,
                '454': 0,
                '455': 0,
                '456': 0,
                '457': 0,
                '458': 0,
                '459': 0,
                '460': 0,
                '461': 0,
                '462': 0,
                '463': 0,
                '464': 0,
                '465': 0,
                '466': 0,
                '467': 0,
                '468': 0,
                '469': 0,
                '470': 0,
                '471': 0,
                '472': 0,
                '473': 0,
                '474': 0,
                '475': 0,
                '476': 0,
                '477': 0,
                '478': 0,
                '479': 0,
                '480': 0,
                '481': 0,
                '482': 0,
                '483': 0,
                '484': 0,
                '485': 0,
                '486': 0,
                '487': 0,
                '488': 0,
                '489': 0,
                '490': 0,
                '491': 0,
                '492': 0,
                '493': 0,
                '494': 0,
                '495': 0,
                '496': 0,
                '497': 0,
                '498': 0,
                '499': 0,
                '500': 0,
                '501': 0,
                '502': 0,
                '503': 0,
                '504': 0,
                '505': 0,
                '506': 0,
                '507': 0,
                '508': 0,
                '509': 0,
                '510': 0,
                '511': 0,
                '512': 0,
                '513': 0,
                '514': 0,
                '515': 0,
                '516': 0,
                '517': 0,
                '518': 0,
                '519': 0,
                '520': 0,
                '521': 0,
                '522': 0,
                '523': 0,
                '524': 0,
                '525': 0,
                '526': 0,
                '527': 0,
                '528': 0,
                '529': 0,
                '530': 0,
                '531': 0,
                '532': 0,
                '533': 0,
                '534': 0,
                '535': 0,
                '536': 0,
                '537': 0,
                '538': 0,
                '539': 0,
                '540': 0,
                '541': 0,
                '542': 0,
                '543': 0,
                '544': 0,
                '545': 0,
                '546': 0,
                '547': 0,
                '548': 0,
                '549': 0,
                '550': 0,
                '551': 0,
                '552': 0,
                '553': 0,
                '554': 0,
                '555': 0,
                '556': 0,
                '557': 0,
                '558': 0,
                '559': 0,
                '560': 0,
                '561': 0,
                '562': 0,
                '563': 0,
                '564': 0,
                '565': 0,
                '566': 0,
                '567': 0,
                '568': 0,
                '569': 0,
                '570': 0,
                '571': 0,
                '572': 0,
                '573': 0,
                '574': 0,
                '575': 0,
                '576': 0,
                '577': 0,
                '578': 0,
                '579': 0,
                '580': 0,
                '581': 0,
                '582': 0,
                '583': 0,
                '584': 0,
                '585': 0,
                '586': 0,
                '587': 0,
                '588': 0,
                '589': 0,
                '590': 0,
                '591': 0,
                '592': 0,
                '593': 0,
                '594': 0,
                '595': 0,
                '596': 0,
                '597': 0,
                '598': 0,
                '599': 0,
                '600': 0,
                '601': 0,
                '602': 0,
                '603': 0,
                '604': 0,
                '605': 0,
                '606': 0,
                '607': 0,
                '608': 0,
                '609': 0,
                '610': 0,
                '611': 0,
                '612': 0,
                '613': 0,
                '614': 0,
                '615': 0,
                '616': 0,
                '617': 0,
                '618': 0,
                '619': 0,
                '620': 0,
                '621': 0,
                '622': 0,
                '623': 0,
                '624': 0,
                '625': 0,
                '626': 0,
                '627': 0,
                '628': 0,
                '629': 0,
                '630': 0,
                '631': 0,
                '632': 0,
                '633': 0,
                '634': 0,
                '635': 0,
                '636': 0,
                '637': 0,
                '638': 0,
                '639': 0,
                '640': 0,
                '641': 0,
                '642': 0,
                '643': 0,
                '644': 0,
                '645': 0,
                '646': 0,
                '647': 0,
                '648': 0,
                '649': 0,
                '650': 0,
                '651': 0,
                '652': 0,
                '653': 0,
                '654': 0,
                '655': 0,
                '656': 0,
                '657': 0,
                '658': 0,
                '659': 0,
                '660': 0,
                '661': 0,
                '662': 0,
                '663': 0,
                '664': 0,
                '665': 0,
                '666': 0,
                '667': 0,
                '668': 0,
                '669': 0,
                '670': 0,
                '671': 0,
                '672': 0,
                '673': 0,
                '674': 0,
                '675': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0],
                '20': [0, 0],
                '21': [0, 0],
                '22': [0, 0],
                '23': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                '24': [0, 0],
                '25': [0, 0],
                '26': [0, 0],
                '27': [0, 0],
                '28': [0, 0],
                '29': [0, 0],
                '30': [0, 0],
                '31': [0, 0],
                '32': [0, 0],
                '33': [0, 0],
                '34': [0, 0, 0, 0],
                '35': [0, 0],
                '36': [0, 0],
                '37': [0, 0],
                '38': [0, 0],
                '39': [0, 0],
                '40': [0, 0],
                '41': [0, 0],
                '42': [0, 0],
                '43': [0, 0],
                '44': [0, 0],
                '45': [0, 0],
                '46': [0, 0],
                '47': [0, 0],
                '48': [0, 0],
                '49': [0, 0],
                '50': [0, 0],
                '51': [0, 0],
                '52': [0, 0],
                '53': [0, 0],
                '54': [0, 0],
                '55': [0, 0],
                '56': [0, 0],
                '57': [0, 0],
                '58': [0, 0],
                '59': [0, 0],
                '60': [0, 0],
                '61': [0, 0],
                '62': [0, 0],
                '63': [0, 0],
                '64': [0, 0],
                '65': [0, 0],
                '66': [0, 0],
                '67': [0, 0],
                '68': [0, 0],
                '69': [0, 0],
                '70': [0, 0],
                '71': [0, 0],
                '72': [0, 0],
                '73': [0, 0],
                '74': [0, 0],
                '75': [0, 0],
                '76': [0, 0],
                '77': [0, 0],
                '78': [0, 0],
                '79': [0, 0],
                '80': [0, 0],
                '81': [0, 0],
                '82': [0, 0],
                '83': [0, 0],
                '84': [0, 0],
                '85': [0, 0],
                '86': [0, 0],
                '87': [0, 0],
                '88': [0, 0],
                '89': [0, 0],
                '90': [0, 0],
                '91': [0, 0],
                '92': [0, 0],
                '93': [0, 0],
                '94': [0, 0],
                '95': [0, 0],
                '96': [0, 0],
                '97': [0, 0],
                '98': [0, 0, 0],
                '99': [0, 0],
                '100': [0, 0],
                '101': [0, 0],
                '102': [0, 0, 0],
                '103': [0, 0],
                '104': [0, 0],
                '105': [0, 0],
                '106': [0, 0, 0],
                '107': [0, 0],
                '108': [0, 0],
                '109': [0, 0],
                '110': [0, 0],
                '111': [0, 0],
                '112': [0, 0],
                '113': [0, 0],
                '114': [0, 0],
                '115': [0, 0],
                '116': [0, 0],
                '117': [0, 0],
                '118': [0, 0],
                '119': [0, 0],
                '120': [0, 0],
                '121': [0, 0],
                '122': [0, 0],
                '123': [0, 0],
                '124': [0, 0],
                '125': [0, 0],
                '126': [0, 0, 0, 0],
                '127': [0, 0],
                '128': [0, 0],
                '129': [0, 0],
                '130': [0, 0],
                '131': [0, 0],
                '132': [0, 0],
                '133': [0, 0],
                '134': [0, 0],
                '135': [0, 0],
                '136': [0, 0],
                '137': [0, 0],
                '138': [0, 0],
                '139': [0, 0],
                '140': [0, 0],
                '141': [0, 0, 0],
                '142': [0, 0],
                '143': [0, 0, 0],
                '144': [0, 0],
                '145': [0, 0],
                '146': [0, 0],
                '147': [0, 0],
                '148': [0, 0],
                '149': [0, 0],
                '150': [0, 0],
                '151': [0, 0],
                '152': [0, 0],
                '153': [0, 0],
                '154': [0, 0],
                '155': [0, 0],
                '156': [0, 0],
                '157': [0, 0],
                '158': [0, 0],
                '159': [0, 0],
                '160': [0, 0],
                '161': [0, 0],
                '162': [0, 0],
                '163': [0, 0],
                '164': [0, 0],
                '165': [0, 0],
                '166': [0, 0],
                '167': [0, 0],
                '168': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '131cbc7fe1c7284a3f586d6764f35001e9c100ae'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.concat');
          _dereq_('core-js/modules/es.array.fill');
          _dereq_('core-js/modules/es.array.for-each');
          _dereq_('core-js/modules/es.array.slice');
          _dereq_('core-js/modules/es.function.name');
          _dereq_('core-js/modules/es.number.to-fixed');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.regexp.to-string');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;
          var _main = _interopRequireDefault(_dereq_('./main'));
          var constants = _interopRequireWildcard(_dereq_('./constants'));
          var _filters = _interopRequireDefault(_dereq_('../image/filters'));

          _dereq_('./p5.Renderer');
          function _getRequireWildcardCache() {
            if (typeof WeakMap !== 'function') return null;
            var cache = new WeakMap();
            _getRequireWildcardCache = function _getRequireWildcardCache() {
              return cache;
            };
            return cache;
          }
          function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
              return obj;
            }
            if (obj === null || (_typeof(obj) !== 'object' && typeof obj !== 'function')) {
              return { default: obj };
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
              return cache.get(obj);
            }
            var newObj = {};
            var hasPropertyDescriptor =
              Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
              if (Object.prototype.hasOwnProperty.call(obj, key)) {
                var desc = hasPropertyDescriptor
                  ? Object.getOwnPropertyDescriptor(obj, key)
                  : null;
                if (desc && (desc.get || desc.set)) {
                  Object.defineProperty(newObj, key, desc);
                } else {
                  newObj[key] = obj[key];
                }
              }
            }
            newObj.default = obj;
            if (cache) {
              cache.set(obj, newObj);
            }
            return newObj;
          }
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }

          /**
           * p5.Renderer2D
           * The 2D graphics canvas renderer class.
           * extends p5.Renderer
           */
          var styleEmpty = (cov_2gaz5zp7zh.s[0]++, 'rgba(0,0,0,0)');
          // const alphaThreshold = 0.00125; // minimum visible
          cov_2gaz5zp7zh.s[1]++;
          _main.default.Renderer2D = function(elt, pInst, isMainCanvas) {
            cov_2gaz5zp7zh.f[0]++;
            cov_2gaz5zp7zh.s[2]++;
            _main.default.Renderer.call(this, elt, pInst, isMainCanvas);
            cov_2gaz5zp7zh.s[3]++;
            this.drawingContext = this.canvas.getContext('2d');
            cov_2gaz5zp7zh.s[4]++;
            this._pInst._setProperty('drawingContext', this.drawingContext);
            cov_2gaz5zp7zh.s[5]++;
            return this;
          };
          cov_2gaz5zp7zh.s[6]++;

          _main.default.Renderer2D.prototype = Object.create(
            _main.default.Renderer.prototype
          );
          cov_2gaz5zp7zh.s[7]++;

          _main.default.Renderer2D.prototype._applyDefaults = function() {
            cov_2gaz5zp7zh.f[1]++;
            cov_2gaz5zp7zh.s[8]++;
            this._cachedFillStyle = this._cachedStrokeStyle = undefined;
            cov_2gaz5zp7zh.s[9]++;
            this._cachedBlendMode = constants.BLEND;
            cov_2gaz5zp7zh.s[10]++;
            this._setFill(constants._DEFAULT_FILL);
            cov_2gaz5zp7zh.s[11]++;
            this._setStroke(constants._DEFAULT_STROKE);
            cov_2gaz5zp7zh.s[12]++;
            this.drawingContext.lineCap = constants.ROUND;
            cov_2gaz5zp7zh.s[13]++;
            this.drawingContext.font = 'normal 12px sans-serif';
          };
          cov_2gaz5zp7zh.s[14]++;

          _main.default.Renderer2D.prototype.resize = function(w, h) {
            cov_2gaz5zp7zh.f[2]++;
            cov_2gaz5zp7zh.s[15]++;
            _main.default.Renderer.prototype.resize.call(this, w, h);
            cov_2gaz5zp7zh.s[16]++;
            this.drawingContext.scale(this._pInst._pixelDensity, this._pInst._pixelDensity);
          };

          //////////////////////////////////////////////
          // COLOR | Setting
          //////////////////////////////////////////////
          cov_2gaz5zp7zh.s[17]++;
          _main.default.Renderer2D.prototype.background = function() {
            cov_2gaz5zp7zh.f[3]++;
            cov_2gaz5zp7zh.s[18]++;
            this.drawingContext.save();
            cov_2gaz5zp7zh.s[19]++;
            this.resetMatrix();
            cov_2gaz5zp7zh.s[20]++;

            if (
              (arguments.length <= 0 ? undefined : arguments[0]) instanceof
              _main.default.Image
            ) {
              cov_2gaz5zp7zh.b[0][0]++;
              cov_2gaz5zp7zh.s[21]++;
              this._pInst.image(
                arguments.length <= 0 ? undefined : arguments[0],
                0,
                0,
                this.width,
                this.height
              );
            } else {
              var _this$_pInst;
              cov_2gaz5zp7zh.b[0][1]++;
              var curFill = (cov_2gaz5zp7zh.s[22]++, this._getFill());
              // create background rect
              var color = (cov_2gaz5zp7zh.s[23]++,
              (_this$_pInst = this._pInst).color.apply(_this$_pInst, arguments));

              //accessible Outputs
              cov_2gaz5zp7zh.s[24]++;
              if (this._pInst._addAccsOutput()) {
                cov_2gaz5zp7zh.b[1][0]++;
                cov_2gaz5zp7zh.s[25]++;
                this._pInst._accsBackground(color.levels);
              } else {
                cov_2gaz5zp7zh.b[1][1]++;
              }

              var newFill = (cov_2gaz5zp7zh.s[26]++, color.toString());
              cov_2gaz5zp7zh.s[27]++;
              this._setFill(newFill);
              cov_2gaz5zp7zh.s[28]++;

              if (this._isErasing) {
                cov_2gaz5zp7zh.b[2][0]++;
                cov_2gaz5zp7zh.s[29]++;
                this.blendMode(this._cachedBlendMode);
              } else {
                cov_2gaz5zp7zh.b[2][1]++;
              }
              cov_2gaz5zp7zh.s[30]++;

              this.drawingContext.fillRect(0, 0, this.width, this.height);
              // reset fill
              cov_2gaz5zp7zh.s[31]++;
              this._setFill(curFill);
              cov_2gaz5zp7zh.s[32]++;

              if (this._isErasing) {
                cov_2gaz5zp7zh.b[3][0]++;
                cov_2gaz5zp7zh.s[33]++;
                this._pInst.erase();
              } else {
                cov_2gaz5zp7zh.b[3][1]++;
              }
            }
            cov_2gaz5zp7zh.s[34]++;
            this.drawingContext.restore();
          };
          cov_2gaz5zp7zh.s[35]++;

          _main.default.Renderer2D.prototype.clear = function() {
            cov_2gaz5zp7zh.f[4]++;
            cov_2gaz5zp7zh.s[36]++;
            this.drawingContext.save();
            cov_2gaz5zp7zh.s[37]++;
            this.resetMatrix();
            cov_2gaz5zp7zh.s[38]++;
            this.drawingContext.clearRect(0, 0, this.width, this.height);
            cov_2gaz5zp7zh.s[39]++;
            this.drawingContext.restore();
          };
          cov_2gaz5zp7zh.s[40]++;

          _main.default.Renderer2D.prototype.fill = function() {
            var _this$_pInst2;
            cov_2gaz5zp7zh.f[5]++;
            var color = (cov_2gaz5zp7zh.s[41]++,
            (_this$_pInst2 = this._pInst).color.apply(_this$_pInst2, arguments));
            cov_2gaz5zp7zh.s[42]++;
            this._setFill(color.toString());

            //accessible Outputs
            cov_2gaz5zp7zh.s[43]++;
            if (this._pInst._addAccsOutput()) {
              cov_2gaz5zp7zh.b[4][0]++;
              cov_2gaz5zp7zh.s[44]++;
              this._pInst._accsCanvasColors('fill', color.levels);
            } else {
              cov_2gaz5zp7zh.b[4][1]++;
            }
          };
          cov_2gaz5zp7zh.s[45]++;

          _main.default.Renderer2D.prototype.stroke = function() {
            var _this$_pInst3;
            cov_2gaz5zp7zh.f[6]++;
            var color = (cov_2gaz5zp7zh.s[46]++,
            (_this$_pInst3 = this._pInst).color.apply(_this$_pInst3, arguments));
            cov_2gaz5zp7zh.s[47]++;
            this._setStroke(color.toString());

            //accessible Outputs
            cov_2gaz5zp7zh.s[48]++;
            if (this._pInst._addAccsOutput()) {
              cov_2gaz5zp7zh.b[5][0]++;
              cov_2gaz5zp7zh.s[49]++;
              this._pInst._accsCanvasColors('stroke', color.levels);
            } else {
              cov_2gaz5zp7zh.b[5][1]++;
            }
          };
          cov_2gaz5zp7zh.s[50]++;

          _main.default.Renderer2D.prototype.erase = function(opacityFill, opacityStroke) {
            cov_2gaz5zp7zh.f[7]++;
            cov_2gaz5zp7zh.s[51]++;
            if (!this._isErasing) {
              cov_2gaz5zp7zh.b[6][0]++;
              cov_2gaz5zp7zh.s[52]++;
              // cache the fill style
              this._cachedFillStyle = this.drawingContext.fillStyle;
              var newFill = (cov_2gaz5zp7zh.s[53]++,
              this._pInst.color(255, opacityFill).toString());
              cov_2gaz5zp7zh.s[54]++;
              this.drawingContext.fillStyle = newFill;

              //cache the stroke style
              cov_2gaz5zp7zh.s[55]++;
              this._cachedStrokeStyle = this.drawingContext.strokeStyle;
              var newStroke = (cov_2gaz5zp7zh.s[56]++,
              this._pInst.color(255, opacityStroke).toString());
              cov_2gaz5zp7zh.s[57]++;
              this.drawingContext.strokeStyle = newStroke;

              //cache blendMode
              var tempBlendMode = (cov_2gaz5zp7zh.s[58]++, this._cachedBlendMode);
              cov_2gaz5zp7zh.s[59]++;
              this.blendMode(constants.REMOVE);
              cov_2gaz5zp7zh.s[60]++;
              this._cachedBlendMode = tempBlendMode;
              cov_2gaz5zp7zh.s[61]++;

              this._isErasing = true;
            } else {
              cov_2gaz5zp7zh.b[6][1]++;
            }
          };
          cov_2gaz5zp7zh.s[62]++;

          _main.default.Renderer2D.prototype.noErase = function() {
            cov_2gaz5zp7zh.f[8]++;
            cov_2gaz5zp7zh.s[63]++;
            if (this._isErasing) {
              cov_2gaz5zp7zh.b[7][0]++;
              cov_2gaz5zp7zh.s[64]++;
              this.drawingContext.fillStyle = this._cachedFillStyle;
              cov_2gaz5zp7zh.s[65]++;
              this.drawingContext.strokeStyle = this._cachedStrokeStyle;
              cov_2gaz5zp7zh.s[66]++;

              this.blendMode(this._cachedBlendMode);
              cov_2gaz5zp7zh.s[67]++;
              this._isErasing = false;
            } else {
              cov_2gaz5zp7zh.b[7][1]++;
            }
          };

          //////////////////////////////////////////////
          // IMAGE | Loading & Displaying
          //////////////////////////////////////////////
          cov_2gaz5zp7zh.s[68]++;
          _main.default.Renderer2D.prototype.image = function(
            img,
            sx,
            sy,
            sWidth,
            sHeight,
            dx,
            dy,
            dWidth,
            dHeight
          ) {
            cov_2gaz5zp7zh.f[9]++;
            var cnv;
            cov_2gaz5zp7zh.s[69]++;
            if (img.gifProperties) {
              cov_2gaz5zp7zh.b[8][0]++;
              cov_2gaz5zp7zh.s[70]++;
              img._animateGif(this._pInst);
            } else {
              cov_2gaz5zp7zh.b[8][1]++;
            }
            cov_2gaz5zp7zh.s[71]++;

            try {
              cov_2gaz5zp7zh.s[72]++;
              if (this._tint) {
                cov_2gaz5zp7zh.b[9][0]++;
                cov_2gaz5zp7zh.s[73]++;
                if (
                  (cov_2gaz5zp7zh.b[11][0]++, _main.default.MediaElement) &&
                  (cov_2gaz5zp7zh.b[11][1]++, img instanceof _main.default.MediaElement)
                ) {
                  cov_2gaz5zp7zh.b[10][0]++;
                  cov_2gaz5zp7zh.s[74]++;
                  img.loadPixels();
                } else {
                  cov_2gaz5zp7zh.b[10][1]++;
                }
                cov_2gaz5zp7zh.s[75]++;
                if (img.canvas) {
                  cov_2gaz5zp7zh.b[12][0]++;
                  cov_2gaz5zp7zh.s[76]++;
                  cnv = this._getTintedImageCanvas(img);
                } else {
                  cov_2gaz5zp7zh.b[12][1]++;
                }
              } else {
                cov_2gaz5zp7zh.b[9][1]++;
              }
              cov_2gaz5zp7zh.s[77]++;
              if (!cnv) {
                cov_2gaz5zp7zh.b[13][0]++;
                cov_2gaz5zp7zh.s[78]++;
                cnv =
                  (cov_2gaz5zp7zh.b[14][0]++, img.canvas) ||
                  (cov_2gaz5zp7zh.b[14][1]++, img.elt);
              } else {
                cov_2gaz5zp7zh.b[13][1]++;
              }
              var s = (cov_2gaz5zp7zh.s[79]++, 1);
              cov_2gaz5zp7zh.s[80]++;
              if (
                (cov_2gaz5zp7zh.b[16][0]++, img.width) &&
                (cov_2gaz5zp7zh.b[16][1]++, img.width > 0)
              ) {
                cov_2gaz5zp7zh.b[15][0]++;
                cov_2gaz5zp7zh.s[81]++;
                s = cnv.width / img.width;
              } else {
                cov_2gaz5zp7zh.b[15][1]++;
              }
              cov_2gaz5zp7zh.s[82]++;
              if (this._isErasing) {
                cov_2gaz5zp7zh.b[17][0]++;
                cov_2gaz5zp7zh.s[83]++;
                this.blendMode(this._cachedBlendMode);
              } else {
                cov_2gaz5zp7zh.b[17][1]++;
              }
              cov_2gaz5zp7zh.s[84]++;
              this.drawingContext.drawImage(
                cnv,
                s * sx,
                s * sy,
                s * sWidth,
                s * sHeight,
                dx,
                dy,
                dWidth,
                dHeight
              );
              cov_2gaz5zp7zh.s[85]++;

              if (this._isErasing) {
                cov_2gaz5zp7zh.b[18][0]++;
                cov_2gaz5zp7zh.s[86]++;
                this._pInst.erase();
              } else {
                cov_2gaz5zp7zh.b[18][1]++;
              }
            } catch (e) {
              cov_2gaz5zp7zh.s[87]++;
              if (e.name !== 'NS_ERROR_NOT_AVAILABLE') {
                cov_2gaz5zp7zh.b[19][0]++;
                cov_2gaz5zp7zh.s[88]++;
                throw e;
              } else {
                cov_2gaz5zp7zh.b[19][1]++;
              }
            }
          };
          cov_2gaz5zp7zh.s[89]++;

          _main.default.Renderer2D.prototype._getTintedImageCanvas = function(img) {
            cov_2gaz5zp7zh.f[10]++;
            cov_2gaz5zp7zh.s[90]++;
            if (!img.canvas) {
              cov_2gaz5zp7zh.b[20][0]++;
              cov_2gaz5zp7zh.s[91]++;
              return img;
            } else {
              cov_2gaz5zp7zh.b[20][1]++;
            }
            var pixels = (cov_2gaz5zp7zh.s[92]++, _filters.default._toPixels(img.canvas));
            var tmpCanvas = (cov_2gaz5zp7zh.s[93]++, document.createElement('canvas'));
            cov_2gaz5zp7zh.s[94]++;
            tmpCanvas.width = img.canvas.width;
            cov_2gaz5zp7zh.s[95]++;
            tmpCanvas.height = img.canvas.height;
            var tmpCtx = (cov_2gaz5zp7zh.s[96]++, tmpCanvas.getContext('2d'));
            var id = (cov_2gaz5zp7zh.s[97]++,
            tmpCtx.createImageData(img.canvas.width, img.canvas.height));
            var newPixels = (cov_2gaz5zp7zh.s[98]++, id.data);
            cov_2gaz5zp7zh.s[99]++;
            for (var i = (cov_2gaz5zp7zh.s[100]++, 0); i < pixels.length; i += 4) {
              var r = (cov_2gaz5zp7zh.s[101]++, pixels[i]);
              var g = (cov_2gaz5zp7zh.s[102]++, pixels[i + 1]);
              var b = (cov_2gaz5zp7zh.s[103]++, pixels[i + 2]);
              var a = (cov_2gaz5zp7zh.s[104]++, pixels[i + 3]);
              cov_2gaz5zp7zh.s[105]++;
              newPixels[i] = r * this._tint[0] / 255;
              cov_2gaz5zp7zh.s[106]++;
              newPixels[i + 1] = g * this._tint[1] / 255;
              cov_2gaz5zp7zh.s[107]++;
              newPixels[i + 2] = b * this._tint[2] / 255;
              cov_2gaz5zp7zh.s[108]++;
              newPixels[i + 3] = a * this._tint[3] / 255;
            }
            cov_2gaz5zp7zh.s[109]++;
            tmpCtx.putImageData(id, 0, 0);
            cov_2gaz5zp7zh.s[110]++;
            return tmpCanvas;
          };

          //////////////////////////////////////////////
          // IMAGE | Pixels
          //////////////////////////////////////////////
          cov_2gaz5zp7zh.s[111]++;
          _main.default.Renderer2D.prototype.blendMode = function(mode) {
            cov_2gaz5zp7zh.f[11]++;
            cov_2gaz5zp7zh.s[112]++;
            if (mode === constants.SUBTRACT) {
              cov_2gaz5zp7zh.b[21][0]++;
              cov_2gaz5zp7zh.s[113]++;
              console.warn('blendMode(SUBTRACT) only works in WEBGL mode.');
            } else {
              cov_2gaz5zp7zh.b[21][1]++;
              cov_2gaz5zp7zh.s[114]++;
              if (
                (cov_2gaz5zp7zh.b[23][0]++, mode === constants.BLEND) ||
                (cov_2gaz5zp7zh.b[23][1]++, mode === constants.REMOVE) ||
                (cov_2gaz5zp7zh.b[23][2]++, mode === constants.DARKEST) ||
                (cov_2gaz5zp7zh.b[23][3]++, mode === constants.LIGHTEST) ||
                (cov_2gaz5zp7zh.b[23][4]++, mode === constants.DIFFERENCE) ||
                (cov_2gaz5zp7zh.b[23][5]++, mode === constants.MULTIPLY) ||
                (cov_2gaz5zp7zh.b[23][6]++, mode === constants.EXCLUSION) ||
                (cov_2gaz5zp7zh.b[23][7]++, mode === constants.SCREEN) ||
                (cov_2gaz5zp7zh.b[23][8]++, mode === constants.REPLACE) ||
                (cov_2gaz5zp7zh.b[23][9]++, mode === constants.OVERLAY) ||
                (cov_2gaz5zp7zh.b[23][10]++, mode === constants.HARD_LIGHT) ||
                (cov_2gaz5zp7zh.b[23][11]++, mode === constants.SOFT_LIGHT) ||
                (cov_2gaz5zp7zh.b[23][12]++, mode === constants.DODGE) ||
                (cov_2gaz5zp7zh.b[23][13]++, mode === constants.BURN) ||
                (cov_2gaz5zp7zh.b[23][14]++, mode === constants.ADD)
              ) {
                cov_2gaz5zp7zh.b[22][0]++;
                cov_2gaz5zp7zh.s[115]++;
                this._cachedBlendMode = mode;
                cov_2gaz5zp7zh.s[116]++;
                this.drawingContext.globalCompositeOperation = mode;
              } else {
                cov_2gaz5zp7zh.b[22][1]++;
                cov_2gaz5zp7zh.s[117]++;
                throw new Error('Mode '.concat(mode, ' not recognized.'));
              }
            }
          };
          cov_2gaz5zp7zh.s[118]++;

          _main.default.Renderer2D.prototype.blend = function() {
            cov_2gaz5zp7zh.f[12]++;
            var currBlend = (cov_2gaz5zp7zh.s[119]++,
            this.drawingContext.globalCompositeOperation);
            for (
              var _len = arguments.length, args = new Array(_len), _key = 0;
              _key < _len;
              _key++
            ) {
              args[_key] = arguments[_key];
            }
            var blendMode = (cov_2gaz5zp7zh.s[120]++, args[args.length - 1]);

            var copyArgs = (cov_2gaz5zp7zh.s[121]++,
            Array.prototype.slice.call(args, 0, args.length - 1));
            cov_2gaz5zp7zh.s[122]++;

            this.drawingContext.globalCompositeOperation = blendMode;
            cov_2gaz5zp7zh.s[123]++;

            _main.default.prototype.copy.apply(this, copyArgs);
            cov_2gaz5zp7zh.s[124]++;

            this.drawingContext.globalCompositeOperation = currBlend;
          };

          // p5.Renderer2D.prototype.get = p5.Renderer.prototype.get;
          // .get() is not overridden

          // x,y are canvas-relative (pre-scaled by _pixelDensity)
          cov_2gaz5zp7zh.s[125]++;
          _main.default.Renderer2D.prototype._getPixel = function(x, y) {
            cov_2gaz5zp7zh.f[13]++;
            var imageData, index;
            cov_2gaz5zp7zh.s[126]++;
            imageData = this.drawingContext.getImageData(x, y, 1, 1).data;
            cov_2gaz5zp7zh.s[127]++;
            index = 0;
            cov_2gaz5zp7zh.s[128]++;
            return [
              imageData[index + 0],
              imageData[index + 1],
              imageData[index + 2],
              imageData[index + 3]
            ];
          };
          cov_2gaz5zp7zh.s[129]++;

          _main.default.Renderer2D.prototype.loadPixels = function() {
            cov_2gaz5zp7zh.f[14]++;
            var pixelsState = (cov_2gaz5zp7zh.s[130]++, this._pixelsState); // if called by p5.Image

            var pd = (cov_2gaz5zp7zh.s[131]++, pixelsState._pixelDensity);
            var w = (cov_2gaz5zp7zh.s[132]++, this.width * pd);
            var h = (cov_2gaz5zp7zh.s[133]++, this.height * pd);
            var imageData = (cov_2gaz5zp7zh.s[134]++,
            this.drawingContext.getImageData(0, 0, w, h));
            // @todo this should actually set pixels per object, so diff buffers can
            // have diff pixel arrays.
            cov_2gaz5zp7zh.s[135]++;
            pixelsState._setProperty('imageData', imageData);
            cov_2gaz5zp7zh.s[136]++;
            pixelsState._setProperty('pixels', imageData.data);
          };
          cov_2gaz5zp7zh.s[137]++;

          _main.default.Renderer2D.prototype.set = function(x, y, imgOrCol) {
            cov_2gaz5zp7zh.f[15]++;
            cov_2gaz5zp7zh.s[138]++;
            // round down to get integer numbers
            x = Math.floor(x);
            cov_2gaz5zp7zh.s[139]++;
            y = Math.floor(y);
            var pixelsState = (cov_2gaz5zp7zh.s[140]++, this._pixelsState);
            cov_2gaz5zp7zh.s[141]++;
            if (imgOrCol instanceof _main.default.Image) {
              cov_2gaz5zp7zh.b[24][0]++;
              cov_2gaz5zp7zh.s[142]++;
              this.drawingContext.save();
              cov_2gaz5zp7zh.s[143]++;
              this.drawingContext.setTransform(1, 0, 0, 1, 0, 0);
              cov_2gaz5zp7zh.s[144]++;
              this.drawingContext.scale(
                pixelsState._pixelDensity,
                pixelsState._pixelDensity
              );
              cov_2gaz5zp7zh.s[145]++;

              this.drawingContext.clearRect(x, y, imgOrCol.width, imgOrCol.height);
              cov_2gaz5zp7zh.s[146]++;
              this.drawingContext.drawImage(imgOrCol.canvas, x, y);
              cov_2gaz5zp7zh.s[147]++;
              this.drawingContext.restore();
            } else {
              cov_2gaz5zp7zh.b[24][1]++;
              var r = (cov_2gaz5zp7zh.s[148]++, 0),
                g = (cov_2gaz5zp7zh.s[149]++, 0),
                b = (cov_2gaz5zp7zh.s[150]++, 0),
                a = (cov_2gaz5zp7zh.s[151]++, 0);
              var idx = (cov_2gaz5zp7zh.s[152]++,
              4 *
                (y * pixelsState._pixelDensity * (this.width * pixelsState._pixelDensity) +
                  x * pixelsState._pixelDensity));
              cov_2gaz5zp7zh.s[153]++;
              if (!pixelsState.imageData) {
                cov_2gaz5zp7zh.b[25][0]++;
                cov_2gaz5zp7zh.s[154]++;
                pixelsState.loadPixels.call(pixelsState);
              } else {
                cov_2gaz5zp7zh.b[25][1]++;
              }
              cov_2gaz5zp7zh.s[155]++;
              if (typeof imgOrCol === 'number') {
                cov_2gaz5zp7zh.b[26][0]++;
                cov_2gaz5zp7zh.s[156]++;
                if (idx < pixelsState.pixels.length) {
                  cov_2gaz5zp7zh.b[27][0]++;
                  cov_2gaz5zp7zh.s[157]++;
                  r = imgOrCol;
                  cov_2gaz5zp7zh.s[158]++;
                  g = imgOrCol;
                  cov_2gaz5zp7zh.s[159]++;
                  b = imgOrCol;
                  cov_2gaz5zp7zh.s[160]++;
                  a = 255;
                  //this.updatePixels.call(this);
                } else {
                  cov_2gaz5zp7zh.b[27][1]++;
                }
              } else {
                cov_2gaz5zp7zh.b[26][1]++;
                cov_2gaz5zp7zh.s[161]++;
                if (imgOrCol instanceof Array) {
                  cov_2gaz5zp7zh.b[28][0]++;
                  cov_2gaz5zp7zh.s[162]++;
                  if (imgOrCol.length < 4) {
                    cov_2gaz5zp7zh.b[29][0]++;
                    cov_2gaz5zp7zh.s[163]++;
                    throw new Error('pixel array must be of the form [R, G, B, A]');
                  } else {
                    cov_2gaz5zp7zh.b[29][1]++;
                  }
                  cov_2gaz5zp7zh.s[164]++;
                  if (idx < pixelsState.pixels.length) {
                    cov_2gaz5zp7zh.b[30][0]++;
                    cov_2gaz5zp7zh.s[165]++;
                    r = imgOrCol[0];
                    cov_2gaz5zp7zh.s[166]++;
                    g = imgOrCol[1];
                    cov_2gaz5zp7zh.s[167]++;
                    b = imgOrCol[2];
                    cov_2gaz5zp7zh.s[168]++;
                    a = imgOrCol[3];
                    //this.updatePixels.call(this);
                  } else {
                    cov_2gaz5zp7zh.b[30][1]++;
                  }
                } else {
                  cov_2gaz5zp7zh.b[28][1]++;
                  cov_2gaz5zp7zh.s[169]++;
                  if (imgOrCol instanceof _main.default.Color) {
                    cov_2gaz5zp7zh.b[31][0]++;
                    cov_2gaz5zp7zh.s[170]++;
                    if (idx < pixelsState.pixels.length) {
                      cov_2gaz5zp7zh.b[32][0]++;
                      cov_2gaz5zp7zh.s[171]++;
                      r = imgOrCol.levels[0];
                      cov_2gaz5zp7zh.s[172]++;
                      g = imgOrCol.levels[1];
                      cov_2gaz5zp7zh.s[173]++;
                      b = imgOrCol.levels[2];
                      cov_2gaz5zp7zh.s[174]++;
                      a = imgOrCol.levels[3];
                      //this.updatePixels.call(this);
                    } else {
                      cov_2gaz5zp7zh.b[32][1]++;
                    }
                  } else {
                    cov_2gaz5zp7zh.b[31][1]++;
                  }
                }
              }
              // loop over pixelDensity * pixelDensity
              cov_2gaz5zp7zh.s[175]++;
              for (
                var i = (cov_2gaz5zp7zh.s[176]++, 0);
                i < pixelsState._pixelDensity;
                i++
              ) {
                cov_2gaz5zp7zh.s[177]++;
                for (
                  var j = (cov_2gaz5zp7zh.s[178]++, 0);
                  j < pixelsState._pixelDensity;
                  j++
                ) {
                  cov_2gaz5zp7zh.s[179]++;
                  // loop over
                  idx =
                    4 *
                    ((y * pixelsState._pixelDensity + j) *
                      this.width *
                      pixelsState._pixelDensity +
                      (x * pixelsState._pixelDensity + i));
                  cov_2gaz5zp7zh.s[180]++;
                  pixelsState.pixels[idx] = r;
                  cov_2gaz5zp7zh.s[181]++;
                  pixelsState.pixels[idx + 1] = g;
                  cov_2gaz5zp7zh.s[182]++;
                  pixelsState.pixels[idx + 2] = b;
                  cov_2gaz5zp7zh.s[183]++;
                  pixelsState.pixels[idx + 3] = a;
                }
              }
            }
          };
          cov_2gaz5zp7zh.s[184]++;

          _main.default.Renderer2D.prototype.updatePixels = function(x, y, w, h) {
            cov_2gaz5zp7zh.f[16]++;
            var pixelsState = (cov_2gaz5zp7zh.s[185]++, this._pixelsState);
            var pd = (cov_2gaz5zp7zh.s[186]++, pixelsState._pixelDensity);
            cov_2gaz5zp7zh.s[187]++;
            if (
              (cov_2gaz5zp7zh.b[34][0]++, x === undefined) &&
              (cov_2gaz5zp7zh.b[34][1]++, y === undefined) &&
              (cov_2gaz5zp7zh.b[34][2]++, w === undefined) &&
              (cov_2gaz5zp7zh.b[34][3]++, h === undefined)
            ) {
              cov_2gaz5zp7zh.b[33][0]++;
              cov_2gaz5zp7zh.s[188]++;
              x = 0;
              cov_2gaz5zp7zh.s[189]++;
              y = 0;
              cov_2gaz5zp7zh.s[190]++;
              w = this.width;
              cov_2gaz5zp7zh.s[191]++;
              h = this.height;
            } else {
              cov_2gaz5zp7zh.b[33][1]++;
            }
            cov_2gaz5zp7zh.s[192]++;
            x *= pd;
            cov_2gaz5zp7zh.s[193]++;
            y *= pd;
            cov_2gaz5zp7zh.s[194]++;
            w *= pd;
            cov_2gaz5zp7zh.s[195]++;
            h *= pd;
            cov_2gaz5zp7zh.s[196]++;

            if (this.gifProperties) {
              cov_2gaz5zp7zh.b[35][0]++;
              cov_2gaz5zp7zh.s[197]++;
              this.gifProperties.frames[this.gifProperties.displayIndex].image =
                pixelsState.imageData;
            } else {
              cov_2gaz5zp7zh.b[35][1]++;
            }
            cov_2gaz5zp7zh.s[198]++;

            this.drawingContext.putImageData(pixelsState.imageData, x, y, 0, 0, w, h);
          };

          //////////////////////////////////////////////
          // SHAPE | 2D Primitives
          //////////////////////////////////////////////

          /**
           * Generate a cubic Bezier representing an arc on the unit circle of total
           * angle `size` radians, beginning `start` radians above the x-axis. Up to
           * four of these curves are combined to make a full arc.
           *
           * See www.joecridge.me/bezier.pdf for an explanation of the method.
           */ cov_2gaz5zp7zh.s[199]++;
          _main.default.Renderer2D.prototype._acuteArcToBezier = function _acuteArcToBezier(
            start,
            size
          ) {
            cov_2gaz5zp7zh.f[17]++;
            // Evaluate constants.
            var alpha = (cov_2gaz5zp7zh.s[200]++, size / 2.0),
              cos_alpha = (cov_2gaz5zp7zh.s[201]++, Math.cos(alpha)),
              sin_alpha = (cov_2gaz5zp7zh.s[202]++, Math.sin(alpha)),
              cot_alpha = (cov_2gaz5zp7zh.s[203]++, 1.0 / Math.tan(alpha)),
              // This is how far the arc needs to be rotated.
              phi = (cov_2gaz5zp7zh.s[204]++, start + alpha),
              cos_phi = (cov_2gaz5zp7zh.s[205]++, Math.cos(phi)),
              sin_phi = (cov_2gaz5zp7zh.s[206]++, Math.sin(phi)),
              lambda = (cov_2gaz5zp7zh.s[207]++, (4.0 - cos_alpha) / 3.0),
              mu = (cov_2gaz5zp7zh.s[208]++, sin_alpha + (cos_alpha - lambda) * cot_alpha);

            // Return rotated waypoints.
            cov_2gaz5zp7zh.s[209]++;
            return {
              ax: Math.cos(start).toFixed(7),
              ay: Math.sin(start).toFixed(7),
              bx: (lambda * cos_phi + mu * sin_phi).toFixed(7),
              by: (lambda * sin_phi - mu * cos_phi).toFixed(7),
              cx: (lambda * cos_phi - mu * sin_phi).toFixed(7),
              cy: (lambda * sin_phi + mu * cos_phi).toFixed(7),
              dx: Math.cos(start + size).toFixed(7),
              dy: Math.sin(start + size).toFixed(7)
            };
          };

          /*
    * This function requires that:
    *
    *   0 <= start < TWO_PI
    *
    *   start <= stop < start + TWO_PI
    */ cov_2gaz5zp7zh
            .s[210]++;
          _main.default.Renderer2D.prototype.arc = function(x, y, w, h, start, stop, mode) {
            cov_2gaz5zp7zh.f[18]++;
            var ctx = (cov_2gaz5zp7zh.s[211]++, this.drawingContext);
            var rx = (cov_2gaz5zp7zh.s[212]++, w / 2.0);
            var ry = (cov_2gaz5zp7zh.s[213]++, h / 2.0);
            var epsilon = (cov_2gaz5zp7zh.s[214]++, 0.00001); // Smallest visible angle on displays up to 4K.
            var arcToDraw = (cov_2gaz5zp7zh.s[215]++, 0);
            var curves = (cov_2gaz5zp7zh.s[216]++, []);
            cov_2gaz5zp7zh.s[217]++;

            x += rx;
            cov_2gaz5zp7zh.s[218]++;
            y += ry;

            // Create curves
            cov_2gaz5zp7zh.s[219]++;
            while (stop - start >= epsilon) {
              cov_2gaz5zp7zh.s[220]++;
              arcToDraw = Math.min(stop - start, constants.HALF_PI);
              cov_2gaz5zp7zh.s[221]++;
              curves.push(this._acuteArcToBezier(start, arcToDraw));
              cov_2gaz5zp7zh.s[222]++;
              start += arcToDraw;
            }

            // Fill curves
            cov_2gaz5zp7zh.s[223]++;
            if (this._doFill) {
              cov_2gaz5zp7zh.b[36][0]++;
              cov_2gaz5zp7zh.s[224]++;
              ctx.beginPath();
              cov_2gaz5zp7zh.s[225]++;
              curves.forEach(function(curve, index) {
                cov_2gaz5zp7zh.f[19]++;
                cov_2gaz5zp7zh.s[226]++;
                if (index === 0) {
                  cov_2gaz5zp7zh.b[37][0]++;
                  cov_2gaz5zp7zh.s[227]++;
                  ctx.moveTo(x + curve.ax * rx, y + curve.ay * ry);
                } else {
                  cov_2gaz5zp7zh.b[37][1]++;
                }
                // prettier-ignore
                cov_2gaz5zp7zh.s[228]++;
                ctx.bezierCurveTo(
                  x + curve.bx * rx,
                  y + curve.by * ry,
                  x + curve.cx * rx,
                  y + curve.cy * ry,
                  x + curve.dx * rx,
                  y + curve.dy * ry
                );
              });
              cov_2gaz5zp7zh.s[229]++;
              if (
                (cov_2gaz5zp7zh.b[39][0]++, mode === constants.PIE) ||
                (cov_2gaz5zp7zh.b[39][1]++, mode == null)
              ) {
                cov_2gaz5zp7zh.b[38][0]++;
                cov_2gaz5zp7zh.s[230]++;
                ctx.lineTo(x, y);
              } else {
                cov_2gaz5zp7zh.b[38][1]++;
              }
              cov_2gaz5zp7zh.s[231]++;
              ctx.closePath();
              cov_2gaz5zp7zh.s[232]++;
              ctx.fill();
            } else {
              cov_2gaz5zp7zh.b[36][1]++;
            }

            // Stroke curves
            cov_2gaz5zp7zh.s[233]++;
            if (this._doStroke) {
              cov_2gaz5zp7zh.b[40][0]++;
              cov_2gaz5zp7zh.s[234]++;
              ctx.beginPath();
              cov_2gaz5zp7zh.s[235]++;
              curves.forEach(function(curve, index) {
                cov_2gaz5zp7zh.f[20]++;
                cov_2gaz5zp7zh.s[236]++;
                if (index === 0) {
                  cov_2gaz5zp7zh.b[41][0]++;
                  cov_2gaz5zp7zh.s[237]++;
                  ctx.moveTo(x + curve.ax * rx, y + curve.ay * ry);
                } else {
                  cov_2gaz5zp7zh.b[41][1]++;
                }
                // prettier-ignore
                cov_2gaz5zp7zh.s[238]++;
                ctx.bezierCurveTo(
                  x + curve.bx * rx,
                  y + curve.by * ry,
                  x + curve.cx * rx,
                  y + curve.cy * ry,
                  x + curve.dx * rx,
                  y + curve.dy * ry
                );
              });
              cov_2gaz5zp7zh.s[239]++;
              if (mode === constants.PIE) {
                cov_2gaz5zp7zh.b[42][0]++;
                cov_2gaz5zp7zh.s[240]++;
                ctx.lineTo(x, y);
                cov_2gaz5zp7zh.s[241]++;
                ctx.closePath();
              } else {
                cov_2gaz5zp7zh.b[42][1]++;
                cov_2gaz5zp7zh.s[242]++;
                if (mode === constants.CHORD) {
                  cov_2gaz5zp7zh.b[43][0]++;
                  cov_2gaz5zp7zh.s[243]++;
                  ctx.closePath();
                } else {
                  cov_2gaz5zp7zh.b[43][1]++;
                }
              }
              cov_2gaz5zp7zh.s[244]++;
              ctx.stroke();
            } else {
              cov_2gaz5zp7zh.b[40][1]++;
            }
            cov_2gaz5zp7zh.s[245]++;
            return this;
          };
          cov_2gaz5zp7zh.s[246]++;

          _main.default.Renderer2D.prototype.ellipse = function(args) {
            cov_2gaz5zp7zh.f[21]++;
            var ctx = (cov_2gaz5zp7zh.s[247]++, this.drawingContext);
            var doFill = (cov_2gaz5zp7zh.s[248]++, this._doFill),
              doStroke = (cov_2gaz5zp7zh.s[249]++, this._doStroke);
            var x = (cov_2gaz5zp7zh.s[250]++, parseFloat(args[0])),
              y = (cov_2gaz5zp7zh.s[251]++, parseFloat(args[1])),
              w = (cov_2gaz5zp7zh.s[252]++, parseFloat(args[2])),
              h = (cov_2gaz5zp7zh.s[253]++, parseFloat(args[3]));
            cov_2gaz5zp7zh.s[254]++;
            if (
              (cov_2gaz5zp7zh.b[45][0]++, doFill) &&
              (cov_2gaz5zp7zh.b[45][1]++, !doStroke)
            ) {
              cov_2gaz5zp7zh.b[44][0]++;
              cov_2gaz5zp7zh.s[255]++;
              if (this._getFill() === styleEmpty) {
                cov_2gaz5zp7zh.b[46][0]++;
                cov_2gaz5zp7zh.s[256]++;
                return this;
              } else {
                cov_2gaz5zp7zh.b[46][1]++;
              }
            } else {
              cov_2gaz5zp7zh.b[44][1]++;
              cov_2gaz5zp7zh.s[257]++;
              if (
                (cov_2gaz5zp7zh.b[48][0]++, !doFill) &&
                (cov_2gaz5zp7zh.b[48][1]++, doStroke)
              ) {
                cov_2gaz5zp7zh.b[47][0]++;
                cov_2gaz5zp7zh.s[258]++;
                if (this._getStroke() === styleEmpty) {
                  cov_2gaz5zp7zh.b[49][0]++;
                  cov_2gaz5zp7zh.s[259]++;
                  return this;
                } else {
                  cov_2gaz5zp7zh.b[49][1]++;
                }
              } else {
                cov_2gaz5zp7zh.b[47][1]++;
              }
            }
            var kappa = (cov_2gaz5zp7zh.s[260]++, 0.5522847498),
              // control point offset horizontal
              ox = (cov_2gaz5zp7zh.s[261]++, w / 2 * kappa),
              // control point offset vertical
              oy = (cov_2gaz5zp7zh.s[262]++, h / 2 * kappa),
              // x-end
              xe = (cov_2gaz5zp7zh.s[263]++, x + w),
              // y-end
              ye = (cov_2gaz5zp7zh.s[264]++, y + h),
              // x-middle
              xm = (cov_2gaz5zp7zh.s[265]++, x + w / 2),
              ym = (cov_2gaz5zp7zh.s[266]++, y + h / 2); // y-middle
            cov_2gaz5zp7zh.s[267]++;
            ctx.beginPath();
            cov_2gaz5zp7zh.s[268]++;
            ctx.moveTo(x, ym);
            cov_2gaz5zp7zh.s[269]++;
            ctx.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);
            cov_2gaz5zp7zh.s[270]++;
            ctx.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);
            cov_2gaz5zp7zh.s[271]++;
            ctx.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);
            cov_2gaz5zp7zh.s[272]++;
            ctx.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);
            cov_2gaz5zp7zh.s[273]++;
            if (doFill) {
              cov_2gaz5zp7zh.b[50][0]++;
              cov_2gaz5zp7zh.s[274]++;
              ctx.fill();
            } else {
              cov_2gaz5zp7zh.b[50][1]++;
            }
            cov_2gaz5zp7zh.s[275]++;
            if (doStroke) {
              cov_2gaz5zp7zh.b[51][0]++;
              cov_2gaz5zp7zh.s[276]++;
              ctx.stroke();
            } else {
              cov_2gaz5zp7zh.b[51][1]++;
            }
          };
          cov_2gaz5zp7zh.s[277]++;

          _main.default.Renderer2D.prototype.line = function(x1, y1, x2, y2) {
            cov_2gaz5zp7zh.f[22]++;
            var ctx = (cov_2gaz5zp7zh.s[278]++, this.drawingContext);
            cov_2gaz5zp7zh.s[279]++;
            if (!this._doStroke) {
              cov_2gaz5zp7zh.b[52][0]++;
              cov_2gaz5zp7zh.s[280]++;
              return this;
            } else {
              cov_2gaz5zp7zh.b[52][1]++;
              cov_2gaz5zp7zh.s[281]++;
              if (this._getStroke() === styleEmpty) {
                cov_2gaz5zp7zh.b[53][0]++;
                cov_2gaz5zp7zh.s[282]++;
                return this;
              } else {
                cov_2gaz5zp7zh.b[53][1]++;
              }
            }
            cov_2gaz5zp7zh.s[283]++;
            ctx.beginPath();
            cov_2gaz5zp7zh.s[284]++;
            ctx.moveTo(x1, y1);
            cov_2gaz5zp7zh.s[285]++;
            ctx.lineTo(x2, y2);
            cov_2gaz5zp7zh.s[286]++;
            ctx.stroke();
            cov_2gaz5zp7zh.s[287]++;
            return this;
          };
          cov_2gaz5zp7zh.s[288]++;

          _main.default.Renderer2D.prototype.point = function(x, y) {
            cov_2gaz5zp7zh.f[23]++;
            var ctx = (cov_2gaz5zp7zh.s[289]++, this.drawingContext);
            cov_2gaz5zp7zh.s[290]++;
            if (!this._doStroke) {
              cov_2gaz5zp7zh.b[54][0]++;
              cov_2gaz5zp7zh.s[291]++;
              return this;
            } else {
              cov_2gaz5zp7zh.b[54][1]++;
              cov_2gaz5zp7zh.s[292]++;
              if (this._getStroke() === styleEmpty) {
                cov_2gaz5zp7zh.b[55][0]++;
                cov_2gaz5zp7zh.s[293]++;
                return this;
              } else {
                cov_2gaz5zp7zh.b[55][1]++;
              }
            }
            var s = (cov_2gaz5zp7zh.s[294]++, this._getStroke());
            var f = (cov_2gaz5zp7zh.s[295]++, this._getFill());
            // swapping fill color to stroke and back after for correct point rendering
            cov_2gaz5zp7zh.s[296]++;
            this._setFill(s);
            cov_2gaz5zp7zh.s[297]++;
            ctx.beginPath();
            cov_2gaz5zp7zh.s[298]++;
            ctx.arc(x, y, ctx.lineWidth / 2, 0, constants.TWO_PI, false);
            cov_2gaz5zp7zh.s[299]++;
            ctx.fill();
            cov_2gaz5zp7zh.s[300]++;
            this._setFill(f);
          };
          cov_2gaz5zp7zh.s[301]++;

          _main.default.Renderer2D.prototype.quad = function(
            x1,
            y1,
            x2,
            y2,
            x3,
            y3,
            x4,
            y4
          ) {
            cov_2gaz5zp7zh.f[24]++;
            var ctx = (cov_2gaz5zp7zh.s[302]++, this.drawingContext);
            var doFill = (cov_2gaz5zp7zh.s[303]++, this._doFill),
              doStroke = (cov_2gaz5zp7zh.s[304]++, this._doStroke);
            cov_2gaz5zp7zh.s[305]++;
            if (
              (cov_2gaz5zp7zh.b[57][0]++, doFill) &&
              (cov_2gaz5zp7zh.b[57][1]++, !doStroke)
            ) {
              cov_2gaz5zp7zh.b[56][0]++;
              cov_2gaz5zp7zh.s[306]++;
              if (this._getFill() === styleEmpty) {
                cov_2gaz5zp7zh.b[58][0]++;
                cov_2gaz5zp7zh.s[307]++;
                return this;
              } else {
                cov_2gaz5zp7zh.b[58][1]++;
              }
            } else {
              cov_2gaz5zp7zh.b[56][1]++;
              cov_2gaz5zp7zh.s[308]++;
              if (
                (cov_2gaz5zp7zh.b[60][0]++, !doFill) &&
                (cov_2gaz5zp7zh.b[60][1]++, doStroke)
              ) {
                cov_2gaz5zp7zh.b[59][0]++;
                cov_2gaz5zp7zh.s[309]++;
                if (this._getStroke() === styleEmpty) {
                  cov_2gaz5zp7zh.b[61][0]++;
                  cov_2gaz5zp7zh.s[310]++;
                  return this;
                } else {
                  cov_2gaz5zp7zh.b[61][1]++;
                }
              } else {
                cov_2gaz5zp7zh.b[59][1]++;
              }
            }
            cov_2gaz5zp7zh.s[311]++;
            ctx.beginPath();
            cov_2gaz5zp7zh.s[312]++;
            ctx.moveTo(x1, y1);
            cov_2gaz5zp7zh.s[313]++;
            ctx.lineTo(x2, y2);
            cov_2gaz5zp7zh.s[314]++;
            ctx.lineTo(x3, y3);
            cov_2gaz5zp7zh.s[315]++;
            ctx.lineTo(x4, y4);
            cov_2gaz5zp7zh.s[316]++;
            ctx.closePath();
            cov_2gaz5zp7zh.s[317]++;
            if (doFill) {
              cov_2gaz5zp7zh.b[62][0]++;
              cov_2gaz5zp7zh.s[318]++;
              ctx.fill();
            } else {
              cov_2gaz5zp7zh.b[62][1]++;
            }
            cov_2gaz5zp7zh.s[319]++;
            if (doStroke) {
              cov_2gaz5zp7zh.b[63][0]++;
              cov_2gaz5zp7zh.s[320]++;
              ctx.stroke();
            } else {
              cov_2gaz5zp7zh.b[63][1]++;
            }
            cov_2gaz5zp7zh.s[321]++;
            return this;
          };
          cov_2gaz5zp7zh.s[322]++;

          _main.default.Renderer2D.prototype.rect = function(args) {
            cov_2gaz5zp7zh.f[25]++;
            var x = (cov_2gaz5zp7zh.s[323]++, args[0]);
            var y = (cov_2gaz5zp7zh.s[324]++, args[1]);
            var w = (cov_2gaz5zp7zh.s[325]++, args[2]);
            var h = (cov_2gaz5zp7zh.s[326]++, args[3]);
            var tl = (cov_2gaz5zp7zh.s[327]++, args[4]);
            var tr = (cov_2gaz5zp7zh.s[328]++, args[5]);
            var br = (cov_2gaz5zp7zh.s[329]++, args[6]);
            var bl = (cov_2gaz5zp7zh.s[330]++, args[7]);
            var ctx = (cov_2gaz5zp7zh.s[331]++, this.drawingContext);
            var doFill = (cov_2gaz5zp7zh.s[332]++, this._doFill),
              doStroke = (cov_2gaz5zp7zh.s[333]++, this._doStroke);
            cov_2gaz5zp7zh.s[334]++;
            if (
              (cov_2gaz5zp7zh.b[65][0]++, doFill) &&
              (cov_2gaz5zp7zh.b[65][1]++, !doStroke)
            ) {
              cov_2gaz5zp7zh.b[64][0]++;
              cov_2gaz5zp7zh.s[335]++;
              if (this._getFill() === styleEmpty) {
                cov_2gaz5zp7zh.b[66][0]++;
                cov_2gaz5zp7zh.s[336]++;
                return this;
              } else {
                cov_2gaz5zp7zh.b[66][1]++;
              }
            } else {
              cov_2gaz5zp7zh.b[64][1]++;
              cov_2gaz5zp7zh.s[337]++;
              if (
                (cov_2gaz5zp7zh.b[68][0]++, !doFill) &&
                (cov_2gaz5zp7zh.b[68][1]++, doStroke)
              ) {
                cov_2gaz5zp7zh.b[67][0]++;
                cov_2gaz5zp7zh.s[338]++;
                if (this._getStroke() === styleEmpty) {
                  cov_2gaz5zp7zh.b[69][0]++;
                  cov_2gaz5zp7zh.s[339]++;
                  return this;
                } else {
                  cov_2gaz5zp7zh.b[69][1]++;
                }
              } else {
                cov_2gaz5zp7zh.b[67][1]++;
              }
            }
            cov_2gaz5zp7zh.s[340]++;
            ctx.beginPath();
            cov_2gaz5zp7zh.s[341]++;

            if (typeof tl === 'undefined') {
              cov_2gaz5zp7zh.b[70][0]++;
              cov_2gaz5zp7zh.s[342]++;
              // No rounded corners
              ctx.rect(x, y, w, h);
            } else {
              cov_2gaz5zp7zh.b[70][1]++;
              cov_2gaz5zp7zh.s[343]++;
              // At least one rounded corner
              // Set defaults when not specified
              if (typeof tr === 'undefined') {
                cov_2gaz5zp7zh.b[71][0]++;
                cov_2gaz5zp7zh.s[344]++;
                tr = tl;
              } else {
                cov_2gaz5zp7zh.b[71][1]++;
              }
              cov_2gaz5zp7zh.s[345]++;
              if (typeof br === 'undefined') {
                cov_2gaz5zp7zh.b[72][0]++;
                cov_2gaz5zp7zh.s[346]++;
                br = tr;
              } else {
                cov_2gaz5zp7zh.b[72][1]++;
              }
              cov_2gaz5zp7zh.s[347]++;
              if (typeof bl === 'undefined') {
                cov_2gaz5zp7zh.b[73][0]++;
                cov_2gaz5zp7zh.s[348]++;
                bl = br;
              } else {
                cov_2gaz5zp7zh.b[73][1]++;
              }

              // corner rounding must always be positive
              var absW = (cov_2gaz5zp7zh.s[349]++, Math.abs(w));
              var absH = (cov_2gaz5zp7zh.s[350]++, Math.abs(h));
              var hw = (cov_2gaz5zp7zh.s[351]++, absW / 2);
              var hh = (cov_2gaz5zp7zh.s[352]++, absH / 2);

              // Clip radii
              cov_2gaz5zp7zh.s[353]++;
              if (absW < 2 * tl) {
                cov_2gaz5zp7zh.b[74][0]++;
                cov_2gaz5zp7zh.s[354]++;
                tl = hw;
              } else {
                cov_2gaz5zp7zh.b[74][1]++;
              }
              cov_2gaz5zp7zh.s[355]++;
              if (absH < 2 * tl) {
                cov_2gaz5zp7zh.b[75][0]++;
                cov_2gaz5zp7zh.s[356]++;
                tl = hh;
              } else {
                cov_2gaz5zp7zh.b[75][1]++;
              }
              cov_2gaz5zp7zh.s[357]++;
              if (absW < 2 * tr) {
                cov_2gaz5zp7zh.b[76][0]++;
                cov_2gaz5zp7zh.s[358]++;
                tr = hw;
              } else {
                cov_2gaz5zp7zh.b[76][1]++;
              }
              cov_2gaz5zp7zh.s[359]++;
              if (absH < 2 * tr) {
                cov_2gaz5zp7zh.b[77][0]++;
                cov_2gaz5zp7zh.s[360]++;
                tr = hh;
              } else {
                cov_2gaz5zp7zh.b[77][1]++;
              }
              cov_2gaz5zp7zh.s[361]++;
              if (absW < 2 * br) {
                cov_2gaz5zp7zh.b[78][0]++;
                cov_2gaz5zp7zh.s[362]++;
                br = hw;
              } else {
                cov_2gaz5zp7zh.b[78][1]++;
              }
              cov_2gaz5zp7zh.s[363]++;
              if (absH < 2 * br) {
                cov_2gaz5zp7zh.b[79][0]++;
                cov_2gaz5zp7zh.s[364]++;
                br = hh;
              } else {
                cov_2gaz5zp7zh.b[79][1]++;
              }
              cov_2gaz5zp7zh.s[365]++;
              if (absW < 2 * bl) {
                cov_2gaz5zp7zh.b[80][0]++;
                cov_2gaz5zp7zh.s[366]++;
                bl = hw;
              } else {
                cov_2gaz5zp7zh.b[80][1]++;
              }
              cov_2gaz5zp7zh.s[367]++;
              if (absH < 2 * bl) {
                cov_2gaz5zp7zh.b[81][0]++;
                cov_2gaz5zp7zh.s[368]++;
                bl = hh;
              } else {
                cov_2gaz5zp7zh.b[81][1]++;
              }

              // Draw shape
              cov_2gaz5zp7zh.s[369]++;
              ctx.beginPath();
              cov_2gaz5zp7zh.s[370]++;
              ctx.moveTo(x + tl, y);
              cov_2gaz5zp7zh.s[371]++;
              ctx.arcTo(x + w, y, x + w, y + h, tr);
              cov_2gaz5zp7zh.s[372]++;
              ctx.arcTo(x + w, y + h, x, y + h, br);
              cov_2gaz5zp7zh.s[373]++;
              ctx.arcTo(x, y + h, x, y, bl);
              cov_2gaz5zp7zh.s[374]++;
              ctx.arcTo(x, y, x + w, y, tl);
              cov_2gaz5zp7zh.s[375]++;
              ctx.closePath();
            }
            cov_2gaz5zp7zh.s[376]++;
            if (this._doFill) {
              cov_2gaz5zp7zh.b[82][0]++;
              cov_2gaz5zp7zh.s[377]++;
              ctx.fill();
            } else {
              cov_2gaz5zp7zh.b[82][1]++;
            }
            cov_2gaz5zp7zh.s[378]++;
            if (this._doStroke) {
              cov_2gaz5zp7zh.b[83][0]++;
              cov_2gaz5zp7zh.s[379]++;
              ctx.stroke();
            } else {
              cov_2gaz5zp7zh.b[83][1]++;
            }
            cov_2gaz5zp7zh.s[380]++;
            return this;
          };
          cov_2gaz5zp7zh.s[381]++;

          _main.default.Renderer2D.prototype.triangle = function(args) {
            cov_2gaz5zp7zh.f[26]++;
            var ctx = (cov_2gaz5zp7zh.s[382]++, this.drawingContext);
            var doFill = (cov_2gaz5zp7zh.s[383]++, this._doFill),
              doStroke = (cov_2gaz5zp7zh.s[384]++, this._doStroke);
            var x1 = (cov_2gaz5zp7zh.s[385]++, args[0]),
              y1 = (cov_2gaz5zp7zh.s[386]++, args[1]);
            var x2 = (cov_2gaz5zp7zh.s[387]++, args[2]),
              y2 = (cov_2gaz5zp7zh.s[388]++, args[3]);
            var x3 = (cov_2gaz5zp7zh.s[389]++, args[4]),
              y3 = (cov_2gaz5zp7zh.s[390]++, args[5]);
            cov_2gaz5zp7zh.s[391]++;
            if (
              (cov_2gaz5zp7zh.b[85][0]++, doFill) &&
              (cov_2gaz5zp7zh.b[85][1]++, !doStroke)
            ) {
              cov_2gaz5zp7zh.b[84][0]++;
              cov_2gaz5zp7zh.s[392]++;
              if (this._getFill() === styleEmpty) {
                cov_2gaz5zp7zh.b[86][0]++;
                cov_2gaz5zp7zh.s[393]++;
                return this;
              } else {
                cov_2gaz5zp7zh.b[86][1]++;
              }
            } else {
              cov_2gaz5zp7zh.b[84][1]++;
              cov_2gaz5zp7zh.s[394]++;
              if (
                (cov_2gaz5zp7zh.b[88][0]++, !doFill) &&
                (cov_2gaz5zp7zh.b[88][1]++, doStroke)
              ) {
                cov_2gaz5zp7zh.b[87][0]++;
                cov_2gaz5zp7zh.s[395]++;
                if (this._getStroke() === styleEmpty) {
                  cov_2gaz5zp7zh.b[89][0]++;
                  cov_2gaz5zp7zh.s[396]++;
                  return this;
                } else {
                  cov_2gaz5zp7zh.b[89][1]++;
                }
              } else {
                cov_2gaz5zp7zh.b[87][1]++;
              }
            }
            cov_2gaz5zp7zh.s[397]++;
            ctx.beginPath();
            cov_2gaz5zp7zh.s[398]++;
            ctx.moveTo(x1, y1);
            cov_2gaz5zp7zh.s[399]++;
            ctx.lineTo(x2, y2);
            cov_2gaz5zp7zh.s[400]++;
            ctx.lineTo(x3, y3);
            cov_2gaz5zp7zh.s[401]++;
            ctx.closePath();
            cov_2gaz5zp7zh.s[402]++;
            if (doFill) {
              cov_2gaz5zp7zh.b[90][0]++;
              cov_2gaz5zp7zh.s[403]++;
              ctx.fill();
            } else {
              cov_2gaz5zp7zh.b[90][1]++;
            }
            cov_2gaz5zp7zh.s[404]++;
            if (doStroke) {
              cov_2gaz5zp7zh.b[91][0]++;
              cov_2gaz5zp7zh.s[405]++;
              ctx.stroke();
            } else {
              cov_2gaz5zp7zh.b[91][1]++;
            }
          };
          cov_2gaz5zp7zh.s[406]++;

          _main.default.Renderer2D.prototype.endShape = function(
            mode,
            vertices,
            isCurve,
            isBezier,
            isQuadratic,
            isContour,
            shapeKind
          ) {
            cov_2gaz5zp7zh.f[27]++;
            cov_2gaz5zp7zh.s[407]++;
            if (vertices.length === 0) {
              cov_2gaz5zp7zh.b[92][0]++;
              cov_2gaz5zp7zh.s[408]++;
              return this;
            } else {
              cov_2gaz5zp7zh.b[92][1]++;
            }
            cov_2gaz5zp7zh.s[409]++;
            if (
              (cov_2gaz5zp7zh.b[94][0]++, !this._doStroke) &&
              (cov_2gaz5zp7zh.b[94][1]++, !this._doFill)
            ) {
              cov_2gaz5zp7zh.b[93][0]++;
              cov_2gaz5zp7zh.s[410]++;
              return this;
            } else {
              cov_2gaz5zp7zh.b[93][1]++;
            }
            var closeShape = (cov_2gaz5zp7zh.s[411]++, mode === constants.CLOSE);
            var v;
            cov_2gaz5zp7zh.s[412]++;
            if (
              (cov_2gaz5zp7zh.b[96][0]++, closeShape) &&
              (cov_2gaz5zp7zh.b[96][1]++, !isContour)
            ) {
              cov_2gaz5zp7zh.b[95][0]++;
              cov_2gaz5zp7zh.s[413]++;
              vertices.push(vertices[0]);
            } else {
              cov_2gaz5zp7zh.b[95][1]++;
            }
            var i, j;
            var numVerts = (cov_2gaz5zp7zh.s[414]++, vertices.length);
            cov_2gaz5zp7zh.s[415]++;
            if (
              (cov_2gaz5zp7zh.b[98][0]++, isCurve) &&
              ((cov_2gaz5zp7zh.b[98][1]++, shapeKind === constants.POLYGON) ||
                (cov_2gaz5zp7zh.b[98][2]++, shapeKind === null))
            ) {
              cov_2gaz5zp7zh.b[97][0]++;
              cov_2gaz5zp7zh.s[416]++;
              if (numVerts > 3) {
                cov_2gaz5zp7zh.b[99][0]++;
                var b = (cov_2gaz5zp7zh.s[417]++, []),
                  s = (cov_2gaz5zp7zh.s[418]++, 1 - this._curveTightness);
                cov_2gaz5zp7zh.s[419]++;
                this.drawingContext.beginPath();
                cov_2gaz5zp7zh.s[420]++;
                this.drawingContext.moveTo(vertices[1][0], vertices[1][1]);
                cov_2gaz5zp7zh.s[421]++;
                for (i = 1; i + 2 < numVerts; i++) {
                  cov_2gaz5zp7zh.s[422]++;
                  v = vertices[i];
                  cov_2gaz5zp7zh.s[423]++;
                  b[0] = [v[0], v[1]];
                  cov_2gaz5zp7zh.s[424]++;
                  b[1] = [
                    v[0] + (s * vertices[i + 1][0] - s * vertices[i - 1][0]) / 6,
                    v[1] + (s * vertices[i + 1][1] - s * vertices[i - 1][1]) / 6
                  ];
                  cov_2gaz5zp7zh.s[425]++;

                  b[2] = [
                    vertices[i + 1][0] + (s * vertices[i][0] - s * vertices[i + 2][0]) / 6,
                    vertices[i + 1][1] + (s * vertices[i][1] - s * vertices[i + 2][1]) / 6
                  ];
                  cov_2gaz5zp7zh.s[426]++;

                  b[3] = [vertices[i + 1][0], vertices[i + 1][1]];
                  cov_2gaz5zp7zh.s[427]++;
                  this.drawingContext.bezierCurveTo(
                    b[1][0],
                    b[1][1],
                    b[2][0],
                    b[2][1],
                    b[3][0],
                    b[3][1]
                  );
                }
                cov_2gaz5zp7zh.s[428]++;
                if (closeShape) {
                  cov_2gaz5zp7zh.b[100][0]++;
                  cov_2gaz5zp7zh.s[429]++;
                  this.drawingContext.lineTo(vertices[i + 1][0], vertices[i + 1][1]);
                } else {
                  cov_2gaz5zp7zh.b[100][1]++;
                }
                cov_2gaz5zp7zh.s[430]++;
                this._doFillStrokeClose(closeShape);
              } else {
                cov_2gaz5zp7zh.b[99][1]++;
              }
            } else {
              cov_2gaz5zp7zh.b[97][1]++;
              cov_2gaz5zp7zh.s[431]++;
              if (
                (cov_2gaz5zp7zh.b[102][0]++, isBezier) &&
                ((cov_2gaz5zp7zh.b[102][1]++, shapeKind === constants.POLYGON) ||
                  (cov_2gaz5zp7zh.b[102][2]++, shapeKind === null))
              ) {
                cov_2gaz5zp7zh.b[101][0]++;
                cov_2gaz5zp7zh.s[432]++;
                this.drawingContext.beginPath();
                cov_2gaz5zp7zh.s[433]++;
                for (i = 0; i < numVerts; i++) {
                  cov_2gaz5zp7zh.s[434]++;
                  if (vertices[i].isVert) {
                    cov_2gaz5zp7zh.b[103][0]++;
                    cov_2gaz5zp7zh.s[435]++;
                    if (vertices[i].moveTo) {
                      cov_2gaz5zp7zh.b[104][0]++;
                      cov_2gaz5zp7zh.s[436]++;
                      this.drawingContext.moveTo(vertices[i][0], vertices[i][1]);
                    } else {
                      cov_2gaz5zp7zh.b[104][1]++;
                      cov_2gaz5zp7zh.s[437]++;
                      this.drawingContext.lineTo(vertices[i][0], vertices[i][1]);
                    }
                  } else {
                    cov_2gaz5zp7zh.b[103][1]++;
                    cov_2gaz5zp7zh.s[438]++;
                    this.drawingContext.bezierCurveTo(
                      vertices[i][0],
                      vertices[i][1],
                      vertices[i][2],
                      vertices[i][3],
                      vertices[i][4],
                      vertices[i][5]
                    );
                  }
                }
                cov_2gaz5zp7zh.s[439]++;
                this._doFillStrokeClose(closeShape);
              } else {
                cov_2gaz5zp7zh.b[101][1]++;
                cov_2gaz5zp7zh.s[440]++;
                if (
                  (cov_2gaz5zp7zh.b[106][0]++, isQuadratic) &&
                  ((cov_2gaz5zp7zh.b[106][1]++, shapeKind === constants.POLYGON) ||
                    (cov_2gaz5zp7zh.b[106][2]++, shapeKind === null))
                ) {
                  cov_2gaz5zp7zh.b[105][0]++;
                  cov_2gaz5zp7zh.s[441]++;
                  this.drawingContext.beginPath();
                  cov_2gaz5zp7zh.s[442]++;
                  for (i = 0; i < numVerts; i++) {
                    cov_2gaz5zp7zh.s[443]++;
                    if (vertices[i].isVert) {
                      cov_2gaz5zp7zh.b[107][0]++;
                      cov_2gaz5zp7zh.s[444]++;
                      if (vertices[i].moveTo) {
                        cov_2gaz5zp7zh.b[108][0]++;
                        cov_2gaz5zp7zh.s[445]++;
                        this.drawingContext.moveTo(vertices[i][0], vertices[i][1]);
                      } else {
                        cov_2gaz5zp7zh.b[108][1]++;
                        cov_2gaz5zp7zh.s[446]++;
                        this.drawingContext.lineTo(vertices[i][0], vertices[i][1]);
                      }
                    } else {
                      cov_2gaz5zp7zh.b[107][1]++;
                      cov_2gaz5zp7zh.s[447]++;
                      this.drawingContext.quadraticCurveTo(
                        vertices[i][0],
                        vertices[i][1],
                        vertices[i][2],
                        vertices[i][3]
                      );
                    }
                  }
                  cov_2gaz5zp7zh.s[448]++;
                  this._doFillStrokeClose(closeShape);
                } else {
                  cov_2gaz5zp7zh.b[105][1]++;
                  cov_2gaz5zp7zh.s[449]++;
                  if (shapeKind === constants.POINTS) {
                    cov_2gaz5zp7zh.b[109][0]++;
                    cov_2gaz5zp7zh.s[450]++;
                    for (i = 0; i < numVerts; i++) {
                      cov_2gaz5zp7zh.s[451]++;
                      v = vertices[i];
                      cov_2gaz5zp7zh.s[452]++;
                      if (this._doStroke) {
                        cov_2gaz5zp7zh.b[110][0]++;
                        cov_2gaz5zp7zh.s[453]++;
                        this._pInst.stroke(v[6]);
                      } else {
                        cov_2gaz5zp7zh.b[110][1]++;
                      }
                      cov_2gaz5zp7zh.s[454]++;
                      this._pInst.point(v[0], v[1]);
                    }
                  } else {
                    cov_2gaz5zp7zh.b[109][1]++;
                    cov_2gaz5zp7zh.s[455]++;
                    if (shapeKind === constants.LINES) {
                      cov_2gaz5zp7zh.b[111][0]++;
                      cov_2gaz5zp7zh.s[456]++;
                      for (i = 0; i + 1 < numVerts; i += 2) {
                        cov_2gaz5zp7zh.s[457]++;
                        v = vertices[i];
                        cov_2gaz5zp7zh.s[458]++;
                        if (this._doStroke) {
                          cov_2gaz5zp7zh.b[112][0]++;
                          cov_2gaz5zp7zh.s[459]++;
                          this._pInst.stroke(vertices[i + 1][6]);
                        } else {
                          cov_2gaz5zp7zh.b[112][1]++;
                        }
                        cov_2gaz5zp7zh.s[460]++;
                        this._pInst.line(
                          v[0],
                          v[1],
                          vertices[i + 1][0],
                          vertices[i + 1][1]
                        );
                      }
                    } else {
                      cov_2gaz5zp7zh.b[111][1]++;
                      cov_2gaz5zp7zh.s[461]++;
                      if (shapeKind === constants.TRIANGLES) {
                        cov_2gaz5zp7zh.b[113][0]++;
                        cov_2gaz5zp7zh.s[462]++;
                        for (i = 0; i + 2 < numVerts; i += 3) {
                          cov_2gaz5zp7zh.s[463]++;
                          v = vertices[i];
                          cov_2gaz5zp7zh.s[464]++;
                          this.drawingContext.beginPath();
                          cov_2gaz5zp7zh.s[465]++;
                          this.drawingContext.moveTo(v[0], v[1]);
                          cov_2gaz5zp7zh.s[466]++;
                          this.drawingContext.lineTo(
                            vertices[i + 1][0],
                            vertices[i + 1][1]
                          );
                          cov_2gaz5zp7zh.s[467]++;
                          this.drawingContext.lineTo(
                            vertices[i + 2][0],
                            vertices[i + 2][1]
                          );
                          cov_2gaz5zp7zh.s[468]++;
                          this.drawingContext.closePath();
                          cov_2gaz5zp7zh.s[469]++;
                          if (this._doFill) {
                            cov_2gaz5zp7zh.b[114][0]++;
                            cov_2gaz5zp7zh.s[470]++;
                            this._pInst.fill(vertices[i + 2][5]);
                            cov_2gaz5zp7zh.s[471]++;
                            this.drawingContext.fill();
                          } else {
                            cov_2gaz5zp7zh.b[114][1]++;
                          }
                          cov_2gaz5zp7zh.s[472]++;
                          if (this._doStroke) {
                            cov_2gaz5zp7zh.b[115][0]++;
                            cov_2gaz5zp7zh.s[473]++;
                            this._pInst.stroke(vertices[i + 2][6]);
                            cov_2gaz5zp7zh.s[474]++;
                            this.drawingContext.stroke();
                          } else {
                            cov_2gaz5zp7zh.b[115][1]++;
                          }
                        }
                      } else {
                        cov_2gaz5zp7zh.b[113][1]++;
                        cov_2gaz5zp7zh.s[475]++;
                        if (shapeKind === constants.TRIANGLE_STRIP) {
                          cov_2gaz5zp7zh.b[116][0]++;
                          cov_2gaz5zp7zh.s[476]++;
                          for (i = 0; i + 1 < numVerts; i++) {
                            cov_2gaz5zp7zh.s[477]++;
                            v = vertices[i];
                            cov_2gaz5zp7zh.s[478]++;
                            this.drawingContext.beginPath();
                            cov_2gaz5zp7zh.s[479]++;
                            this.drawingContext.moveTo(
                              vertices[i + 1][0],
                              vertices[i + 1][1]
                            );
                            cov_2gaz5zp7zh.s[480]++;
                            this.drawingContext.lineTo(v[0], v[1]);
                            cov_2gaz5zp7zh.s[481]++;
                            if (this._doStroke) {
                              cov_2gaz5zp7zh.b[117][0]++;
                              cov_2gaz5zp7zh.s[482]++;
                              this._pInst.stroke(vertices[i + 1][6]);
                            } else {
                              cov_2gaz5zp7zh.b[117][1]++;
                            }
                            cov_2gaz5zp7zh.s[483]++;
                            if (this._doFill) {
                              cov_2gaz5zp7zh.b[118][0]++;
                              cov_2gaz5zp7zh.s[484]++;
                              this._pInst.fill(vertices[i + 1][5]);
                            } else {
                              cov_2gaz5zp7zh.b[118][1]++;
                            }
                            cov_2gaz5zp7zh.s[485]++;
                            if (i + 2 < numVerts) {
                              cov_2gaz5zp7zh.b[119][0]++;
                              cov_2gaz5zp7zh.s[486]++;
                              this.drawingContext.lineTo(
                                vertices[i + 2][0],
                                vertices[i + 2][1]
                              );
                              cov_2gaz5zp7zh.s[487]++;
                              if (this._doStroke) {
                                cov_2gaz5zp7zh.b[120][0]++;
                                cov_2gaz5zp7zh.s[488]++;
                                this._pInst.stroke(vertices[i + 2][6]);
                              } else {
                                cov_2gaz5zp7zh.b[120][1]++;
                              }
                              cov_2gaz5zp7zh.s[489]++;
                              if (this._doFill) {
                                cov_2gaz5zp7zh.b[121][0]++;
                                cov_2gaz5zp7zh.s[490]++;
                                this._pInst.fill(vertices[i + 2][5]);
                              } else {
                                cov_2gaz5zp7zh.b[121][1]++;
                              }
                            } else {
                              cov_2gaz5zp7zh.b[119][1]++;
                            }
                            cov_2gaz5zp7zh.s[491]++;
                            this._doFillStrokeClose(closeShape);
                          }
                        } else {
                          cov_2gaz5zp7zh.b[116][1]++;
                          cov_2gaz5zp7zh.s[492]++;
                          if (shapeKind === constants.TRIANGLE_FAN) {
                            cov_2gaz5zp7zh.b[122][0]++;
                            cov_2gaz5zp7zh.s[493]++;
                            if (numVerts > 2) {
                              cov_2gaz5zp7zh.b[123][0]++;
                              cov_2gaz5zp7zh.s[494]++;
                              // For performance reasons, try to batch as many of the
                              // fill and stroke calls as possible.
                              this.drawingContext.beginPath();
                              cov_2gaz5zp7zh.s[495]++;
                              for (i = 2; i < numVerts; i++) {
                                cov_2gaz5zp7zh.s[496]++;
                                v = vertices[i];
                                cov_2gaz5zp7zh.s[497]++;
                                this.drawingContext.moveTo(vertices[0][0], vertices[0][1]);
                                cov_2gaz5zp7zh.s[498]++;
                                this.drawingContext.lineTo(
                                  vertices[i - 1][0],
                                  vertices[i - 1][1]
                                );
                                cov_2gaz5zp7zh.s[499]++;
                                this.drawingContext.lineTo(v[0], v[1]);
                                cov_2gaz5zp7zh.s[500]++;
                                this.drawingContext.lineTo(vertices[0][0], vertices[0][1]);
                                // If the next colour is going to be different, stroke / fill now
                                cov_2gaz5zp7zh.s[501]++;
                                if (i < numVerts - 1) {
                                  cov_2gaz5zp7zh.b[124][0]++;
                                  cov_2gaz5zp7zh.s[502]++;
                                  if (
                                    ((cov_2gaz5zp7zh.b[126][0]++, this._doFill) &&
                                      (cov_2gaz5zp7zh.b[126][1]++,
                                      v[5] !== vertices[i + 1][5])) ||
                                    ((cov_2gaz5zp7zh.b[126][2]++, this._doStroke) &&
                                      (cov_2gaz5zp7zh.b[126][3]++,
                                      v[6] !== vertices[i + 1][6]))
                                  ) {
                                    cov_2gaz5zp7zh.b[125][0]++;
                                    cov_2gaz5zp7zh.s[503]++;
                                    if (this._doFill) {
                                      cov_2gaz5zp7zh.b[127][0]++;
                                      cov_2gaz5zp7zh.s[504]++;
                                      this._pInst.fill(v[5]);
                                      cov_2gaz5zp7zh.s[505]++;
                                      this.drawingContext.fill();
                                      cov_2gaz5zp7zh.s[506]++;
                                      this._pInst.fill(vertices[i + 1][5]);
                                    } else {
                                      cov_2gaz5zp7zh.b[127][1]++;
                                    }
                                    cov_2gaz5zp7zh.s[507]++;
                                    if (this._doStroke) {
                                      cov_2gaz5zp7zh.b[128][0]++;
                                      cov_2gaz5zp7zh.s[508]++;
                                      this._pInst.stroke(v[6]);
                                      cov_2gaz5zp7zh.s[509]++;
                                      this.drawingContext.stroke();
                                      cov_2gaz5zp7zh.s[510]++;
                                      this._pInst.stroke(vertices[i + 1][6]);
                                    } else {
                                      cov_2gaz5zp7zh.b[128][1]++;
                                    }
                                    cov_2gaz5zp7zh.s[511]++;
                                    this.drawingContext.closePath();
                                    cov_2gaz5zp7zh.s[512]++;
                                    this.drawingContext.beginPath(); // Begin the next one
                                  } else {
                                    cov_2gaz5zp7zh.b[125][1]++;
                                  }
                                } else {
                                  cov_2gaz5zp7zh.b[124][1]++;
                                }
                              }
                              cov_2gaz5zp7zh.s[513]++;
                              this._doFillStrokeClose(closeShape);
                            } else {
                              cov_2gaz5zp7zh.b[123][1]++;
                            }
                          } else {
                            cov_2gaz5zp7zh.b[122][1]++;
                            cov_2gaz5zp7zh.s[514]++;
                            if (shapeKind === constants.QUADS) {
                              cov_2gaz5zp7zh.b[129][0]++;
                              cov_2gaz5zp7zh.s[515]++;
                              for (i = 0; i + 3 < numVerts; i += 4) {
                                cov_2gaz5zp7zh.s[516]++;
                                v = vertices[i];
                                cov_2gaz5zp7zh.s[517]++;
                                this.drawingContext.beginPath();
                                cov_2gaz5zp7zh.s[518]++;
                                this.drawingContext.moveTo(v[0], v[1]);
                                cov_2gaz5zp7zh.s[519]++;
                                for (j = 1; j < 4; j++) {
                                  cov_2gaz5zp7zh.s[520]++;
                                  this.drawingContext.lineTo(
                                    vertices[i + j][0],
                                    vertices[i + j][1]
                                  );
                                }
                                cov_2gaz5zp7zh.s[521]++;
                                this.drawingContext.lineTo(v[0], v[1]);
                                cov_2gaz5zp7zh.s[522]++;
                                if (this._doFill) {
                                  cov_2gaz5zp7zh.b[130][0]++;
                                  cov_2gaz5zp7zh.s[523]++;
                                  this._pInst.fill(vertices[i + 3][5]);
                                } else {
                                  cov_2gaz5zp7zh.b[130][1]++;
                                }
                                cov_2gaz5zp7zh.s[524]++;
                                if (this._doStroke) {
                                  cov_2gaz5zp7zh.b[131][0]++;
                                  cov_2gaz5zp7zh.s[525]++;
                                  this._pInst.stroke(vertices[i + 3][6]);
                                } else {
                                  cov_2gaz5zp7zh.b[131][1]++;
                                }
                                cov_2gaz5zp7zh.s[526]++;
                                this._doFillStrokeClose(closeShape);
                              }
                            } else {
                              cov_2gaz5zp7zh.b[129][1]++;
                              cov_2gaz5zp7zh.s[527]++;
                              if (shapeKind === constants.QUAD_STRIP) {
                                cov_2gaz5zp7zh.b[132][0]++;
                                cov_2gaz5zp7zh.s[528]++;
                                if (numVerts > 3) {
                                  cov_2gaz5zp7zh.b[133][0]++;
                                  cov_2gaz5zp7zh.s[529]++;
                                  for (i = 0; i + 1 < numVerts; i += 2) {
                                    cov_2gaz5zp7zh.s[530]++;
                                    v = vertices[i];
                                    cov_2gaz5zp7zh.s[531]++;
                                    this.drawingContext.beginPath();
                                    cov_2gaz5zp7zh.s[532]++;
                                    if (i + 3 < numVerts) {
                                      cov_2gaz5zp7zh.b[134][0]++;
                                      cov_2gaz5zp7zh.s[533]++;
                                      this.drawingContext.moveTo(
                                        vertices[i + 2][0],
                                        vertices[i + 2][1]
                                      );
                                      cov_2gaz5zp7zh.s[534]++;
                                      this.drawingContext.lineTo(v[0], v[1]);
                                      cov_2gaz5zp7zh.s[535]++;
                                      this.drawingContext.lineTo(
                                        vertices[i + 1][0],
                                        vertices[i + 1][1]
                                      );
                                      cov_2gaz5zp7zh.s[536]++;
                                      this.drawingContext.lineTo(
                                        vertices[i + 3][0],
                                        vertices[i + 3][1]
                                      );
                                      cov_2gaz5zp7zh.s[537]++;
                                      if (this._doFill) {
                                        cov_2gaz5zp7zh.b[135][0]++;
                                        cov_2gaz5zp7zh.s[538]++;
                                        this._pInst.fill(vertices[i + 3][5]);
                                      } else {
                                        cov_2gaz5zp7zh.b[135][1]++;
                                      }
                                      cov_2gaz5zp7zh.s[539]++;
                                      if (this._doStroke) {
                                        cov_2gaz5zp7zh.b[136][0]++;
                                        cov_2gaz5zp7zh.s[540]++;
                                        this._pInst.stroke(vertices[i + 3][6]);
                                      } else {
                                        cov_2gaz5zp7zh.b[136][1]++;
                                      }
                                    } else {
                                      cov_2gaz5zp7zh.b[134][1]++;
                                      cov_2gaz5zp7zh.s[541]++;
                                      this.drawingContext.moveTo(v[0], v[1]);
                                      cov_2gaz5zp7zh.s[542]++;
                                      this.drawingContext.lineTo(
                                        vertices[i + 1][0],
                                        vertices[i + 1][1]
                                      );
                                    }
                                    cov_2gaz5zp7zh.s[543]++;
                                    this._doFillStrokeClose(closeShape);
                                  }
                                } else {
                                  cov_2gaz5zp7zh.b[133][1]++;
                                }
                              } else {
                                cov_2gaz5zp7zh.b[132][1]++;
                                cov_2gaz5zp7zh.s[544]++;
                                this.drawingContext.beginPath();
                                cov_2gaz5zp7zh.s[545]++;
                                this.drawingContext.moveTo(vertices[0][0], vertices[0][1]);
                                cov_2gaz5zp7zh.s[546]++;
                                for (i = 1; i < numVerts; i++) {
                                  cov_2gaz5zp7zh.s[547]++;
                                  v = vertices[i];
                                  cov_2gaz5zp7zh.s[548]++;
                                  if (v.isVert) {
                                    cov_2gaz5zp7zh.b[137][0]++;
                                    cov_2gaz5zp7zh.s[549]++;
                                    if (v.moveTo) {
                                      cov_2gaz5zp7zh.b[138][0]++;
                                      cov_2gaz5zp7zh.s[550]++;
                                      this.drawingContext.moveTo(v[0], v[1]);
                                    } else {
                                      cov_2gaz5zp7zh.b[138][1]++;
                                      cov_2gaz5zp7zh.s[551]++;
                                      this.drawingContext.lineTo(v[0], v[1]);
                                    }
                                  } else {
                                    cov_2gaz5zp7zh.b[137][1]++;
                                  }
                                }
                                cov_2gaz5zp7zh.s[552]++;
                                this._doFillStrokeClose(closeShape);
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
            cov_2gaz5zp7zh.s[553]++;
            isCurve = false;
            cov_2gaz5zp7zh.s[554]++;
            isBezier = false;
            cov_2gaz5zp7zh.s[555]++;
            isQuadratic = false;
            cov_2gaz5zp7zh.s[556]++;
            isContour = false;
            cov_2gaz5zp7zh.s[557]++;
            if (closeShape) {
              cov_2gaz5zp7zh.b[139][0]++;
              cov_2gaz5zp7zh.s[558]++;
              vertices.pop();
            } else {
              cov_2gaz5zp7zh.b[139][1]++;
            }
            cov_2gaz5zp7zh.s[559]++;

            return this;
          };
          //////////////////////////////////////////////
          // SHAPE | Attributes
          //////////////////////////////////////////////
          cov_2gaz5zp7zh.s[560]++;
          _main.default.Renderer2D.prototype.strokeCap = function(cap) {
            cov_2gaz5zp7zh.f[28]++;
            cov_2gaz5zp7zh.s[561]++;
            if (
              (cov_2gaz5zp7zh.b[141][0]++, cap === constants.ROUND) ||
              (cov_2gaz5zp7zh.b[141][1]++, cap === constants.SQUARE) ||
              (cov_2gaz5zp7zh.b[141][2]++, cap === constants.PROJECT)
            ) {
              cov_2gaz5zp7zh.b[140][0]++;
              cov_2gaz5zp7zh.s[562]++;
              this.drawingContext.lineCap = cap;
            } else {
              cov_2gaz5zp7zh.b[140][1]++;
            }
            cov_2gaz5zp7zh.s[563]++;
            return this;
          };
          cov_2gaz5zp7zh.s[564]++;

          _main.default.Renderer2D.prototype.strokeJoin = function(join) {
            cov_2gaz5zp7zh.f[29]++;
            cov_2gaz5zp7zh.s[565]++;
            if (
              (cov_2gaz5zp7zh.b[143][0]++, join === constants.ROUND) ||
              (cov_2gaz5zp7zh.b[143][1]++, join === constants.BEVEL) ||
              (cov_2gaz5zp7zh.b[143][2]++, join === constants.MITER)
            ) {
              cov_2gaz5zp7zh.b[142][0]++;
              cov_2gaz5zp7zh.s[566]++;
              this.drawingContext.lineJoin = join;
            } else {
              cov_2gaz5zp7zh.b[142][1]++;
            }
            cov_2gaz5zp7zh.s[567]++;
            return this;
          };
          cov_2gaz5zp7zh.s[568]++;

          _main.default.Renderer2D.prototype.strokeWeight = function(w) {
            cov_2gaz5zp7zh.f[30]++;
            cov_2gaz5zp7zh.s[569]++;
            if (
              (cov_2gaz5zp7zh.b[145][0]++, typeof w === 'undefined') ||
              (cov_2gaz5zp7zh.b[145][1]++, w === 0)
            ) {
              cov_2gaz5zp7zh.b[144][0]++;
              cov_2gaz5zp7zh.s[570]++;
              // hack because lineWidth 0 doesn't work
              this.drawingContext.lineWidth = 0.0001;
            } else {
              cov_2gaz5zp7zh.b[144][1]++;
              cov_2gaz5zp7zh.s[571]++;
              this.drawingContext.lineWidth = w;
            }
            cov_2gaz5zp7zh.s[572]++;
            return this;
          };
          cov_2gaz5zp7zh.s[573]++;

          _main.default.Renderer2D.prototype._getFill = function() {
            cov_2gaz5zp7zh.f[31]++;
            cov_2gaz5zp7zh.s[574]++;
            if (!this._cachedFillStyle) {
              cov_2gaz5zp7zh.b[146][0]++;
              cov_2gaz5zp7zh.s[575]++;
              this._cachedFillStyle = this.drawingContext.fillStyle;
            } else {
              cov_2gaz5zp7zh.b[146][1]++;
            }
            cov_2gaz5zp7zh.s[576]++;
            return this._cachedFillStyle;
          };
          cov_2gaz5zp7zh.s[577]++;

          _main.default.Renderer2D.prototype._setFill = function(fillStyle) {
            cov_2gaz5zp7zh.f[32]++;
            cov_2gaz5zp7zh.s[578]++;
            if (fillStyle !== this._cachedFillStyle) {
              cov_2gaz5zp7zh.b[147][0]++;
              cov_2gaz5zp7zh.s[579]++;
              this.drawingContext.fillStyle = fillStyle;
              cov_2gaz5zp7zh.s[580]++;
              this._cachedFillStyle = fillStyle;
            } else {
              cov_2gaz5zp7zh.b[147][1]++;
            }
          };
          cov_2gaz5zp7zh.s[581]++;

          _main.default.Renderer2D.prototype._getStroke = function() {
            cov_2gaz5zp7zh.f[33]++;
            cov_2gaz5zp7zh.s[582]++;
            if (!this._cachedStrokeStyle) {
              cov_2gaz5zp7zh.b[148][0]++;
              cov_2gaz5zp7zh.s[583]++;
              this._cachedStrokeStyle = this.drawingContext.strokeStyle;
            } else {
              cov_2gaz5zp7zh.b[148][1]++;
            }
            cov_2gaz5zp7zh.s[584]++;
            return this._cachedStrokeStyle;
          };
          cov_2gaz5zp7zh.s[585]++;

          _main.default.Renderer2D.prototype._setStroke = function(strokeStyle) {
            cov_2gaz5zp7zh.f[34]++;
            cov_2gaz5zp7zh.s[586]++;
            if (strokeStyle !== this._cachedStrokeStyle) {
              cov_2gaz5zp7zh.b[149][0]++;
              cov_2gaz5zp7zh.s[587]++;
              this.drawingContext.strokeStyle = strokeStyle;
              cov_2gaz5zp7zh.s[588]++;
              this._cachedStrokeStyle = strokeStyle;
            } else {
              cov_2gaz5zp7zh.b[149][1]++;
            }
          };

          //////////////////////////////////////////////
          // SHAPE | Curves
          //////////////////////////////////////////////
          cov_2gaz5zp7zh.s[589]++;
          _main.default.Renderer2D.prototype.bezier = function(
            x1,
            y1,
            x2,
            y2,
            x3,
            y3,
            x4,
            y4
          ) {
            cov_2gaz5zp7zh.f[35]++;
            cov_2gaz5zp7zh.s[590]++;
            this._pInst.beginShape();
            cov_2gaz5zp7zh.s[591]++;
            this._pInst.vertex(x1, y1);
            cov_2gaz5zp7zh.s[592]++;
            this._pInst.bezierVertex(x2, y2, x3, y3, x4, y4);
            cov_2gaz5zp7zh.s[593]++;
            this._pInst.endShape();
            cov_2gaz5zp7zh.s[594]++;
            return this;
          };
          cov_2gaz5zp7zh.s[595]++;

          _main.default.Renderer2D.prototype.curve = function(
            x1,
            y1,
            x2,
            y2,
            x3,
            y3,
            x4,
            y4
          ) {
            cov_2gaz5zp7zh.f[36]++;
            cov_2gaz5zp7zh.s[596]++;
            this._pInst.beginShape();
            cov_2gaz5zp7zh.s[597]++;
            this._pInst.curveVertex(x1, y1);
            cov_2gaz5zp7zh.s[598]++;
            this._pInst.curveVertex(x2, y2);
            cov_2gaz5zp7zh.s[599]++;
            this._pInst.curveVertex(x3, y3);
            cov_2gaz5zp7zh.s[600]++;
            this._pInst.curveVertex(x4, y4);
            cov_2gaz5zp7zh.s[601]++;
            this._pInst.endShape();
            cov_2gaz5zp7zh.s[602]++;
            return this;
          };

          //////////////////////////////////////////////
          // SHAPE | Vertex
          //////////////////////////////////////////////
          cov_2gaz5zp7zh.s[603]++;
          _main.default.Renderer2D.prototype._doFillStrokeClose = function(closeShape) {
            cov_2gaz5zp7zh.f[37]++;
            cov_2gaz5zp7zh.s[604]++;
            if (closeShape) {
              cov_2gaz5zp7zh.b[150][0]++;
              cov_2gaz5zp7zh.s[605]++;
              this.drawingContext.closePath();
            } else {
              cov_2gaz5zp7zh.b[150][1]++;
            }
            cov_2gaz5zp7zh.s[606]++;
            if (this._doFill) {
              cov_2gaz5zp7zh.b[151][0]++;
              cov_2gaz5zp7zh.s[607]++;
              this.drawingContext.fill();
            } else {
              cov_2gaz5zp7zh.b[151][1]++;
            }
            cov_2gaz5zp7zh.s[608]++;
            if (this._doStroke) {
              cov_2gaz5zp7zh.b[152][0]++;
              cov_2gaz5zp7zh.s[609]++;
              this.drawingContext.stroke();
            } else {
              cov_2gaz5zp7zh.b[152][1]++;
            }
          };

          //////////////////////////////////////////////
          // TRANSFORM
          //////////////////////////////////////////////
          cov_2gaz5zp7zh.s[610]++;
          _main.default.Renderer2D.prototype.applyMatrix = function(a, b, c, d, e, f) {
            cov_2gaz5zp7zh.f[38]++;
            cov_2gaz5zp7zh.s[611]++;
            this.drawingContext.transform(a, b, c, d, e, f);
          };
          cov_2gaz5zp7zh.s[612]++;

          _main.default.Renderer2D.prototype.resetMatrix = function() {
            cov_2gaz5zp7zh.f[39]++;
            cov_2gaz5zp7zh.s[613]++;
            this.drawingContext.setTransform(1, 0, 0, 1, 0, 0);
            cov_2gaz5zp7zh.s[614]++;
            this.drawingContext.scale(this._pInst._pixelDensity, this._pInst._pixelDensity);
            cov_2gaz5zp7zh.s[615]++;

            return this;
          };
          cov_2gaz5zp7zh.s[616]++;

          _main.default.Renderer2D.prototype.rotate = function(rad) {
            cov_2gaz5zp7zh.f[40]++;
            cov_2gaz5zp7zh.s[617]++;
            this.drawingContext.rotate(rad);
          };
          cov_2gaz5zp7zh.s[618]++;

          _main.default.Renderer2D.prototype.scale = function(x, y) {
            cov_2gaz5zp7zh.f[41]++;
            cov_2gaz5zp7zh.s[619]++;
            this.drawingContext.scale(x, y);
            cov_2gaz5zp7zh.s[620]++;
            return this;
          };
          cov_2gaz5zp7zh.s[621]++;

          _main.default.Renderer2D.prototype.translate = function(x, y) {
            cov_2gaz5zp7zh.f[42]++;
            cov_2gaz5zp7zh.s[622]++;
            // support passing a vector as the 1st parameter
            if (x instanceof _main.default.Vector) {
              cov_2gaz5zp7zh.b[153][0]++;
              cov_2gaz5zp7zh.s[623]++;
              y = x.y;
              cov_2gaz5zp7zh.s[624]++;
              x = x.x;
            } else {
              cov_2gaz5zp7zh.b[153][1]++;
            }
            cov_2gaz5zp7zh.s[625]++;
            this.drawingContext.translate(x, y);
            cov_2gaz5zp7zh.s[626]++;
            return this;
          };

          //////////////////////////////////////////////
          // TYPOGRAPHY
          //
          //////////////////////////////////////////////
          cov_2gaz5zp7zh.s[627]++;
          _main.default.Renderer2D.prototype.text = function(
            str,
            x,
            y,
            maxWidth,
            maxHeight
          ) {
            cov_2gaz5zp7zh.f[43]++;
            var baselineHacked;

            // baselineHacked: (HACK)
            // A temporary fix to conform to Processing's implementation
            // of BASELINE vertical alignment in a bounding box
            cov_2gaz5zp7zh.s[628]++;
            if (typeof maxWidth !== 'undefined') {
              cov_2gaz5zp7zh.b[154][0]++;
              cov_2gaz5zp7zh.s[629]++;
              if (this.drawingContext.textBaseline === constants.BASELINE) {
                cov_2gaz5zp7zh.b[155][0]++;
                cov_2gaz5zp7zh.s[630]++;
                baselineHacked = true;
                cov_2gaz5zp7zh.s[631]++;
                this.drawingContext.textBaseline = constants.TOP;
              } else {
                cov_2gaz5zp7zh.b[155][1]++;
              }
            } else {
              cov_2gaz5zp7zh.b[154][1]++;
            }

            var p = (cov_2gaz5zp7zh.s[632]++,
            _main.default.Renderer.prototype.text.apply(this, arguments));
            cov_2gaz5zp7zh.s[633]++;

            if (baselineHacked) {
              cov_2gaz5zp7zh.b[156][0]++;
              cov_2gaz5zp7zh.s[634]++;
              this.drawingContext.textBaseline = constants.BASELINE;
            } else {
              cov_2gaz5zp7zh.b[156][1]++;
            }
            cov_2gaz5zp7zh.s[635]++;

            return p;
          };
          cov_2gaz5zp7zh.s[636]++;

          _main.default.Renderer2D.prototype._renderText = function(p, line, x, y, maxY) {
            cov_2gaz5zp7zh.f[44]++;
            cov_2gaz5zp7zh.s[637]++;
            if (y >= maxY) {
              cov_2gaz5zp7zh.b[157][0]++;
              cov_2gaz5zp7zh.s[638]++;
              return; // don't render lines beyond our maxY position
            } else {
              cov_2gaz5zp7zh.b[157][1]++;
            }
            cov_2gaz5zp7zh.s[639]++;

            p.push(); // fix to #803
            cov_2gaz5zp7zh.s[640]++;
            if (!this._isOpenType()) {
              cov_2gaz5zp7zh.b[158][0]++;
              cov_2gaz5zp7zh.s[641]++;
              // a system/browser font

              // no stroke unless specified by user
              if (
                (cov_2gaz5zp7zh.b[160][0]++, this._doStroke) &&
                (cov_2gaz5zp7zh.b[160][1]++, this._strokeSet)
              ) {
                cov_2gaz5zp7zh.b[159][0]++;
                cov_2gaz5zp7zh.s[642]++;
                this.drawingContext.strokeText(line, x, y);
              } else {
                cov_2gaz5zp7zh.b[159][1]++;
              }
              cov_2gaz5zp7zh.s[643]++;

              if (this._doFill) {
                cov_2gaz5zp7zh.b[161][0]++;
                cov_2gaz5zp7zh.s[644]++;
                // if fill hasn't been set by user, use default text fill
                if (!this._fillSet) {
                  cov_2gaz5zp7zh.b[162][0]++;
                  cov_2gaz5zp7zh.s[645]++;
                  this._setFill(constants._DEFAULT_TEXT_FILL);
                } else {
                  cov_2gaz5zp7zh.b[162][1]++;
                }
                cov_2gaz5zp7zh.s[646]++;

                this.drawingContext.fillText(line, x, y);
              } else {
                cov_2gaz5zp7zh.b[161][1]++;
              }
            } else {
              cov_2gaz5zp7zh.b[158][1]++;
              cov_2gaz5zp7zh.s[647]++;
              // an opentype font, let it handle the rendering

              this._textFont._renderPath(line, x, y, { renderer: this });
            }
            cov_2gaz5zp7zh.s[648]++;

            p.pop();
            cov_2gaz5zp7zh.s[649]++;
            return p;
          };
          cov_2gaz5zp7zh.s[650]++;

          _main.default.Renderer2D.prototype.textWidth = function(s) {
            cov_2gaz5zp7zh.f[45]++;
            cov_2gaz5zp7zh.s[651]++;
            if (this._isOpenType()) {
              cov_2gaz5zp7zh.b[163][0]++;
              cov_2gaz5zp7zh.s[652]++;
              return this._textFont._textWidth(s, this._textSize);
            } else {
              cov_2gaz5zp7zh.b[163][1]++;
            }
            cov_2gaz5zp7zh.s[653]++;

            return this.drawingContext.measureText(s).width;
          };
          cov_2gaz5zp7zh.s[654]++;

          _main.default.Renderer2D.prototype._applyTextProperties = function() {
            cov_2gaz5zp7zh.f[46]++;
            var font;
            var p = (cov_2gaz5zp7zh.s[655]++, this._pInst);
            cov_2gaz5zp7zh.s[656]++;

            this._setProperty('_textAscent', null);
            cov_2gaz5zp7zh.s[657]++;
            this._setProperty('_textDescent', null);
            cov_2gaz5zp7zh.s[658]++;

            font = this._textFont;
            cov_2gaz5zp7zh.s[659]++;

            if (this._isOpenType()) {
              cov_2gaz5zp7zh.b[164][0]++;
              cov_2gaz5zp7zh.s[660]++;
              font = this._textFont.font.familyName;
              cov_2gaz5zp7zh.s[661]++;
              this._setProperty('_textStyle', this._textFont.font.styleName);
            } else {
              cov_2gaz5zp7zh.b[164][1]++;
            }
            cov_2gaz5zp7zh.s[662]++;

            this.drawingContext.font = ''
              .concat(
                (cov_2gaz5zp7zh.b[165][0]++, this._textStyle) ||
                  (cov_2gaz5zp7zh.b[165][1]++, 'normal'),
                ' '
              )
              .concat(
                (cov_2gaz5zp7zh.b[166][0]++, this._textSize) ||
                  (cov_2gaz5zp7zh.b[166][1]++, 12),
                'px '
              )
              .concat(
                (cov_2gaz5zp7zh.b[167][0]++, font) ||
                  (cov_2gaz5zp7zh.b[167][1]++, 'sans-serif')
              );
            cov_2gaz5zp7zh.s[663]++;

            this.drawingContext.textAlign = this._textAlign;
            cov_2gaz5zp7zh.s[664]++;
            if (this._textBaseline === constants.CENTER) {
              cov_2gaz5zp7zh.b[168][0]++;
              cov_2gaz5zp7zh.s[665]++;
              this.drawingContext.textBaseline = constants._CTX_MIDDLE;
            } else {
              cov_2gaz5zp7zh.b[168][1]++;
              cov_2gaz5zp7zh.s[666]++;
              this.drawingContext.textBaseline = this._textBaseline;
            }
            cov_2gaz5zp7zh.s[667]++;

            return p;
          };

          //////////////////////////////////////////////
          // STRUCTURE
          //////////////////////////////////////////////

          // a push() operation is in progress.
          // the renderer should return a 'style' object that it wishes to
          // store on the push stack.
          // derived renderers should call the base class' push() method
          // to fetch the base style object.
          cov_2gaz5zp7zh.s[668]++;
          _main.default.Renderer2D.prototype.push = function() {
            cov_2gaz5zp7zh.f[47]++;
            cov_2gaz5zp7zh.s[669]++;
            this.drawingContext.save();

            // get the base renderer style
            cov_2gaz5zp7zh.s[670]++;
            return _main.default.Renderer.prototype.push.apply(this);
          };

          // a pop() operation is in progress
          // the renderer is passed the 'style' object that it returned
          // from its push() method.
          // derived renderers should pass this object to their base
          // class' pop method
          cov_2gaz5zp7zh.s[671]++;
          _main.default.Renderer2D.prototype.pop = function(style) {
            cov_2gaz5zp7zh.f[48]++;
            cov_2gaz5zp7zh.s[672]++;
            this.drawingContext.restore();
            // Re-cache the fill / stroke state
            cov_2gaz5zp7zh.s[673]++;
            this._cachedFillStyle = this.drawingContext.fillStyle;
            cov_2gaz5zp7zh.s[674]++;
            this._cachedStrokeStyle = this.drawingContext.strokeStyle;
            cov_2gaz5zp7zh.s[675]++;

            _main.default.Renderer.prototype.pop.call(this, style);
          };
          var _default = _main.default.Renderer2D;
          exports.default = _default;
        },
        {
          '../image/filters': 304,
          './constants': 272,
          './main': 283,
          './p5.Renderer': 286,
          'core-js/modules/es.array.concat': 166,
          'core-js/modules/es.array.fill': 168,
          'core-js/modules/es.array.for-each': 170,
          'core-js/modules/es.array.slice': 178,
          'core-js/modules/es.function.name': 181,
          'core-js/modules/es.number.to-fixed': 187,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.regexp.to-string': 197
        }
      ],
      288: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_1ykqx3hwyu = (function() {
            var path = '/Users/outofambit/src/p5.js/src/core/preload.js';
            var hash = '6b4071895a0c4b879a117c58ae03d2df63d89fe6';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/core/preload.js',
              statementMap: {
                '0': { start: { line: 5, column: 0 }, end: { line: 19, column: 2 } },
                '1': { start: { line: 21, column: 0 }, end: { line: 23, column: 2 } },
                '2': { start: { line: 22, column: 2 }, end: { line: 22, column: 44 } },
                '3': { start: { line: 25, column: 22 }, end: { line: 25, column: 27 } },
                '4': { start: { line: 27, column: 0 }, end: { line: 63, column: 2 } },
                '5': { start: { line: 28, column: 2 }, end: { line: 61, column: 3 } },
                '6': { start: { line: 29, column: 20 }, end: { line: 29, column: 24 } },
                '7': { start: { line: 30, column: 55 }, end: { line: 30, column: 67 } },
                '8': { start: { line: 33, column: 17 }, end: { line: 33, column: 44 } },
                '9': { start: { line: 34, column: 25 }, end: { line: 34, column: 52 } },
                '10': { start: { line: 36, column: 4 }, end: { line: 42, column: 5 } },
                '11': { start: { line: 37, column: 6 }, end: { line: 39, column: 7 } },
                '12': { start: { line: 38, column: 8 }, end: { line: 38, column: 17 } },
                '13': { start: { line: 40, column: 6 }, end: { line: 40, column: 23 } },
                '14': { start: { line: 41, column: 6 }, end: { line: 41, column: 38 } },
                '15': { start: { line: 45, column: 4 }, end: { line: 49, column: 6 } },
                '16': { start: { line: 51, column: 4 }, end: { line: 60, column: 5 } },
                '17': { start: { line: 53, column: 27 }, end: { line: 53, column: 52 } },
                '18': { start: { line: 55, column: 6 }, end: { line: 59, column: 8 } },
                '19': { start: { line: 62, column: 2 }, end: { line: 62, column: 25 } },
                '20': { start: { line: 65, column: 0 }, end: { line: 104, column: 2 } },
                '21': { start: { line: 66, column: 28 }, end: { line: 99, column: 3 } },
                '22': { start: { line: 68, column: 4 }, end: { line: 68, column: 29 } },
                '23': { start: { line: 70, column: 19 }, end: { line: 70, column: 23 } },
                '24': { start: { line: 72, column: 24 }, end: { line: 72, column: 28 } },
                '25': { start: { line: 73, column: 4 }, end: { line: 83, column: 5 } },
                '26': { start: { line: 76, column: 6 }, end: { line: 82, column: 7 } },
                '27': { start: { line: 76, column: 19 }, end: { line: 76, column: 34 } },
                '28': { start: { line: 77, column: 8 }, end: { line: 79, column: 9 } },
                '29': { start: { line: 78, column: 10 }, end: { line: 78, column: 16 } },
                '30': { start: { line: 80, column: 8 }, end: { line: 80, column: 33 } },
                '31': { start: { line: 81, column: 8 }, end: { line: 81, column: 30 } },
                '32': { start: { line: 87, column: 20 }, end: { line: 87, column: 57 } },
                '33': { start: { line: 89, column: 4 }, end: { line: 91, column: 5 } },
                '34': { start: { line: 90, column: 6 }, end: { line: 90, column: 29 } },
                '35': { start: { line: 92, column: 4 }, end: { line: 94, column: 5 } },
                '36': { start: { line: 93, column: 6 }, end: { line: 93, column: 35 } },
                '37': { start: { line: 96, column: 4 }, end: { line: 96, column: 49 } },
                '38': { start: { line: 96, column: 23 }, end: { line: 96, column: 47 } },
                '39': { start: { line: 98, column: 4 }, end: { line: 98, column: 19 } },
                '40': { start: { line: 100, column: 2 }, end: { line: 102, column: 3 } },
                '41': { start: { line: 101, column: 4 }, end: { line: 101, column: 62 } },
                '42': { start: { line: 103, column: 2 }, end: { line: 103, column: 29 } },
                '43': { start: { line: 106, column: 22 }, end: { line: 108, column: 1 } },
                '44': { start: { line: 107, column: 2 }, end: { line: 107, column: 12 } },
                '45': { start: { line: 110, column: 0 }, end: { line: 138, column: 2 } },
                '46': { start: { line: 119, column: 4 }, end: { line: 119, column: 56 } },
                '47': { start: { line: 120, column: 25 }, end: { line: 133, column: 3 } },
                '48': { start: { line: 122, column: 4 }, end: { line: 122, column: 29 } },
                '49': { start: { line: 124, column: 24 }, end: { line: 124, column: 65 } },
                '50': { start: { line: 126, column: 4 }, end: { line: 131, column: 7 } },
                '51': { start: { line: 128, column: 6 }, end: { line: 128, column: 39 } },
                '52': { start: { line: 130, column: 6 }, end: { line: 130, column: 31 } },
                '53': { start: { line: 132, column: 4 }, end: { line: 132, column: 23 } },
                '54': { start: { line: 134, column: 2 }, end: { line: 136, column: 3 } },
                '55': { start: { line: 135, column: 4 }, end: { line: 135, column: 56 } },
                '56': { start: { line: 137, column: 2 }, end: { line: 137, column: 26 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 21, column: 38 }, end: { line: 21, column: 39 } },
                  loc: { start: { line: 21, column: 54 }, end: { line: 23, column: 1 } },
                  line: 21
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 27, column: 37 }, end: { line: 27, column: 38 } },
                  loc: { start: { line: 27, column: 48 }, end: { line: 63, column: 1 } },
                  line: 27
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: { start: { line: 65, column: 35 }, end: { line: 65, column: 36 } },
                  loc: { start: { line: 65, column: 73 }, end: { line: 104, column: 1 } },
                  line: 65
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: { start: { line: 66, column: 28 }, end: { line: 66, column: 29 } },
                  loc: { start: { line: 66, column: 46 }, end: { line: 99, column: 3 } },
                  line: 66
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: { start: { line: 96, column: 17 }, end: { line: 96, column: 18 } },
                  loc: { start: { line: 96, column: 23 }, end: { line: 96, column: 47 } },
                  line: 96
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 106, column: 22 },
                    end: { line: 106, column: 23 }
                  },
                  loc: { start: { line: 106, column: 33 }, end: { line: 108, column: 1 } },
                  line: 106
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 110, column: 39 },
                    end: { line: 110, column: 40 }
                  },
                  loc: { start: { line: 114, column: 2 }, end: { line: 138, column: 1 } },
                  line: 114
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 120, column: 25 },
                    end: { line: 120, column: 26 }
                  },
                  loc: { start: { line: 120, column: 36 }, end: { line: 133, column: 3 } },
                  line: 120
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 126, column: 35 },
                    end: { line: 126, column: 36 }
                  },
                  loc: { start: { line: 126, column: 43 }, end: { line: 131, column: 5 } },
                  line: 126
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 33, column: 17 }, end: { line: 33, column: 44 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 33, column: 17 }, end: { line: 33, column: 36 } },
                    { start: { line: 33, column: 40 }, end: { line: 33, column: 44 } }
                  ],
                  line: 33
                },
                '1': {
                  loc: { start: { line: 36, column: 4 }, end: { line: 42, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 36, column: 4 }, end: { line: 42, column: 5 } },
                    { start: { line: 36, column: 4 }, end: { line: 42, column: 5 } }
                  ],
                  line: 36
                },
                '2': {
                  loc: { start: { line: 37, column: 6 }, end: { line: 39, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 37, column: 6 }, end: { line: 39, column: 7 } },
                    { start: { line: 37, column: 6 }, end: { line: 39, column: 7 } }
                  ],
                  line: 37
                },
                '3': {
                  loc: { start: { line: 51, column: 4 }, end: { line: 60, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 51, column: 4 }, end: { line: 60, column: 5 } },
                    { start: { line: 51, column: 4 }, end: { line: 60, column: 5 } }
                  ],
                  line: 51
                },
                '4': {
                  loc: { start: { line: 73, column: 4 }, end: { line: 83, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 73, column: 4 }, end: { line: 83, column: 5 } },
                    { start: { line: 73, column: 4 }, end: { line: 83, column: 5 } }
                  ],
                  line: 73
                },
                '5': {
                  loc: { start: { line: 76, column: 36 }, end: { line: 76, column: 60 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 76, column: 36 }, end: { line: 76, column: 42 } },
                    { start: { line: 76, column: 46 }, end: { line: 76, column: 60 } }
                  ],
                  line: 76
                },
                '6': {
                  loc: { start: { line: 77, column: 8 }, end: { line: 79, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 77, column: 8 }, end: { line: 79, column: 9 } },
                    { start: { line: 77, column: 8 }, end: { line: 79, column: 9 } }
                  ],
                  line: 77
                },
                '7': {
                  loc: { start: { line: 89, column: 4 }, end: { line: 91, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 89, column: 4 }, end: { line: 91, column: 5 } },
                    { start: { line: 89, column: 4 }, end: { line: 91, column: 5 } }
                  ],
                  line: 89
                },
                '8': {
                  loc: { start: { line: 92, column: 4 }, end: { line: 94, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 92, column: 4 }, end: { line: 94, column: 5 } },
                    { start: { line: 92, column: 4 }, end: { line: 94, column: 5 } }
                  ],
                  line: 92
                },
                '9': {
                  loc: { start: { line: 100, column: 2 }, end: { line: 102, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 100, column: 2 }, end: { line: 102, column: 3 } },
                    { start: { line: 100, column: 2 }, end: { line: 102, column: 3 } }
                  ],
                  line: 100
                },
                '10': {
                  loc: { start: { line: 119, column: 4 }, end: { line: 119, column: 56 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 119, column: 4 }, end: { line: 119, column: 39 } },
                    { start: { line: 119, column: 43 }, end: { line: 119, column: 56 } }
                  ],
                  line: 119
                },
                '11': {
                  loc: { start: { line: 134, column: 2 }, end: { line: 136, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 134, column: 2 }, end: { line: 136, column: 3 } },
                    { start: { line: 134, column: 2 }, end: { line: 136, column: 3 } }
                  ],
                  line: 134
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0
              },
              f: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0, '8': 0 },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '6b4071895a0c4b879a117c58ae03d2df63d89fe6'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.symbol');
          _dereq_('core-js/modules/es.symbol.description');
          _dereq_('core-js/modules/es.symbol.iterator');
          _dereq_('core-js/modules/es.array.iterator');
          _dereq_('core-js/modules/es.object.assign');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.promise');
          _dereq_('core-js/modules/es.string.iterator');
          _dereq_('core-js/modules/web.dom-collections.iterator');

          var _main = _interopRequireDefault(_dereq_('./main'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_1ykqx3hwyu.s[0]++;

          _main.default.prototype._promisePreloads = [
            /* Example object
                                            {
                                              target: p5.prototype, // The target object to have the method modified
                                              method: 'loadXAsync', // The name of the preload function to wrap
                                              addCallbacks: true,   // Whether to automatically handle the p5 callbacks
                                              legacyPreloadSetup: { // Optional object to generate a legacy-style preload
                                                method: 'loadX',    // The name of the legacy preload function to generate
                                                createBaseObject: function() {
                                                  return {};
                                                } // An optional function to create the base object for the legacy preload.
                                              }
                                            }
                                            */
          ];
          cov_1ykqx3hwyu.s[1]++;

          _main.default.prototype.registerPromisePreload = function(setup) {
            cov_1ykqx3hwyu.f[0]++;
            cov_1ykqx3hwyu.s[2]++;
            _main.default.prototype._promisePreloads.push(setup);
          };

          var initialSetupRan = (cov_1ykqx3hwyu.s[3]++, false);
          cov_1ykqx3hwyu.s[4]++;

          _main.default.prototype._setupPromisePreloads = function() {
            cov_1ykqx3hwyu.f[1]++;
            cov_1ykqx3hwyu.s[5]++;
            var _iteratorNormalCompletion = true;
            var _didIteratorError = false;
            var _iteratorError = undefined;
            try {
              for (
                var _iterator = this._promisePreloads[Symbol.iterator](), _step;
                !(_iteratorNormalCompletion = (_step = _iterator.next()).done);
                _iteratorNormalCompletion = true
              ) {
                var preloadSetup = _step.value;
                var thisValue = (cov_1ykqx3hwyu.s[6]++, this);
                var _ref = (cov_1ykqx3hwyu.s[7]++, preloadSetup),
                  method = _ref.method,
                  addCallbacks = _ref.addCallbacks,
                  legacyPreloadSetup = _ref.legacyPreloadSetup;
                // Get the target object that the preload gets assigned to by default,
                // that is the current object.
                var target = (cov_1ykqx3hwyu.s[8]++,
                (cov_1ykqx3hwyu.b[0][0]++, preloadSetup.target) ||
                  (cov_1ykqx3hwyu.b[0][1]++, this));
                var sourceFunction = (cov_1ykqx3hwyu.s[9]++, target[method].bind(target));
                // If the target is the p5 prototype, then only set it up on the first run per page
                cov_1ykqx3hwyu.s[10]++;
                if (target === _main.default.prototype) {
                  cov_1ykqx3hwyu.b[1][0]++;
                  cov_1ykqx3hwyu.s[11]++;
                  if (initialSetupRan) {
                    cov_1ykqx3hwyu.b[2][0]++;
                    cov_1ykqx3hwyu.s[12]++;
                    continue;
                  } else {
                    cov_1ykqx3hwyu.b[2][1]++;
                  }
                  cov_1ykqx3hwyu.s[13]++;
                  thisValue = null;
                  cov_1ykqx3hwyu.s[14]++;
                  sourceFunction = target[method];
                } else {
                  cov_1ykqx3hwyu.b[1][1]++;
                }

                // Replace the original method with a wrapped version
                cov_1ykqx3hwyu.s[15]++;
                target[method] = this._wrapPromisePreload(
                  thisValue,
                  sourceFunction,
                  addCallbacks
                );

                // If a legacy preload is required
                cov_1ykqx3hwyu.s[16]++;
                if (legacyPreloadSetup) {
                  cov_1ykqx3hwyu.b[3][0]++;
                  // What is the name for this legacy preload
                  var legacyMethod = (cov_1ykqx3hwyu.s[17]++, legacyPreloadSetup.method);
                  // Wrap the already wrapped Promise-returning method with the legacy setup
                  cov_1ykqx3hwyu.s[18]++;
                  target[legacyMethod] = this._legacyPreloadGenerator(
                    thisValue,
                    legacyPreloadSetup,
                    target[method]
                  );
                } else {
                  cov_1ykqx3hwyu.b[3][1]++;
                }
              }
            } catch (err) {
              _didIteratorError = true;
              _iteratorError = err;
            } finally {
              try {
                if (!_iteratorNormalCompletion && _iterator.return != null) {
                  _iterator.return();
                }
              } finally {
                if (_didIteratorError) {
                  throw _iteratorError;
                }
              }
            }
            cov_1ykqx3hwyu.s[19]++;
            initialSetupRan = true;
          };
          cov_1ykqx3hwyu.s[20]++;

          _main.default.prototype._wrapPromisePreload = function(
            thisValue,
            fn,
            addCallbacks
          ) {
            cov_1ykqx3hwyu.f[2]++;
            cov_1ykqx3hwyu.s[21]++;
            var replacementFunction = function replacementFunction() {
              var _this = this;
              cov_1ykqx3hwyu.f[3]++;
              cov_1ykqx3hwyu.s[22]++;
              // Uses the current preload counting mechanism for now.
              this._incrementPreload();
              // A variable for the callback function if specified
              var callback = (cov_1ykqx3hwyu.s[23]++, null);
              // A variable for the errorCallback function if specified
              var errorCallback = (cov_1ykqx3hwyu.s[24]++, null);
              cov_1ykqx3hwyu.s[25]++;
              for (
                var _len = arguments.length, args = new Array(_len), _key = 0;
                _key < _len;
                _key++
              ) {
                args[_key] = arguments[_key];
              }
              if (addCallbacks) {
                cov_1ykqx3hwyu.b[4][0]++;
                cov_1ykqx3hwyu.s[26]++;
                // Loop from the end of the args array, pulling up to two functions off of
                // the end and putting them in fns
                for (
                  var i = (cov_1ykqx3hwyu.s[27]++, args.length - 1);
                  (cov_1ykqx3hwyu.b[5][0]++, i >= 0) &&
                  (cov_1ykqx3hwyu.b[5][1]++, !errorCallback);
                  i--
                ) {
                  cov_1ykqx3hwyu.s[28]++;
                  if (typeof args[i] !== 'function') {
                    cov_1ykqx3hwyu.b[6][0]++;
                    cov_1ykqx3hwyu.s[29]++;
                    break;
                  } else {
                    cov_1ykqx3hwyu.b[6][1]++;
                  }
                  cov_1ykqx3hwyu.s[30]++;
                  errorCallback = callback;
                  cov_1ykqx3hwyu.s[31]++;
                  callback = args.pop();
                }
              } else {
                cov_1ykqx3hwyu.b[4][1]++;
              }
              // Call the underlying function and pass it to Promise.resolve,
              // so that even if it didn't return a promise we can still
              // act on the result as if it did.
              var promise = (cov_1ykqx3hwyu.s[32]++, Promise.resolve(fn.apply(this, args)));
              // Add the optional callbacks
              cov_1ykqx3hwyu.s[33]++;
              if (callback) {
                cov_1ykqx3hwyu.b[7][0]++;
                cov_1ykqx3hwyu.s[34]++;
                promise.then(callback);
              } else {
                cov_1ykqx3hwyu.b[7][1]++;
              }
              cov_1ykqx3hwyu.s[35]++;
              if (errorCallback) {
                cov_1ykqx3hwyu.b[8][0]++;
                cov_1ykqx3hwyu.s[36]++;
                promise.catch(errorCallback);
              } else {
                cov_1ykqx3hwyu.b[8][1]++;
              }
              // Decrement the preload counter only if the promise resolved
              cov_1ykqx3hwyu.s[37]++;
              promise.then(function() {
                cov_1ykqx3hwyu.f[4]++;
                cov_1ykqx3hwyu.s[38]++;
                return _this._decrementPreload();
              });
              // Return the original promise so that neither callback changes the result.
              cov_1ykqx3hwyu.s[39]++;
              return promise;
            };
            cov_1ykqx3hwyu.s[40]++;
            if (thisValue) {
              cov_1ykqx3hwyu.b[9][0]++;
              cov_1ykqx3hwyu.s[41]++;
              replacementFunction = replacementFunction.bind(thisValue);
            } else {
              cov_1ykqx3hwyu.b[9][1]++;
            }
            cov_1ykqx3hwyu.s[42]++;
            return replacementFunction;
          };
          cov_1ykqx3hwyu.s[43]++;

          var objectCreator = function objectCreator() {
            cov_1ykqx3hwyu.f[5]++;
            cov_1ykqx3hwyu.s[44]++;
            return {};
          };
          cov_1ykqx3hwyu.s[45]++;

          _main.default.prototype._legacyPreloadGenerator = function(
            thisValue,
            legacyPreloadSetup,
            fn
          ) {
            cov_1ykqx3hwyu.f[6]++;
            // Create a function that will generate an object before the preload is
            // launched. For example, if the object should be an array or be an instance
            // of a specific class.
            var baseValueGenerator = (cov_1ykqx3hwyu.s[46]++,
            (cov_1ykqx3hwyu.b[10][0]++, legacyPreloadSetup.createBaseObject) ||
              (cov_1ykqx3hwyu.b[10][1]++, objectCreator));
            cov_1ykqx3hwyu.s[47]++;
            var returnedFunction = function returnedFunction() {
              var _this2 = this;
              cov_1ykqx3hwyu.f[7]++;
              cov_1ykqx3hwyu.s[48]++;
              // Our then clause needs to run before setup, so we also increment the preload counter
              this._incrementPreload();
              // Generate the return value based on the generator.
              var returnValue = (cov_1ykqx3hwyu.s[49]++,
              baseValueGenerator.apply(this, arguments));
              // Run the original wrapper
              cov_1ykqx3hwyu.s[50]++;
              fn.apply(this, arguments).then(function(data) {
                cov_1ykqx3hwyu.f[8]++;
                cov_1ykqx3hwyu.s[51]++;
                // Copy each key from the resolved value into returnValue
                Object.assign(returnValue, data);
                // Decrement the preload counter, to allow setup to continue.
                cov_1ykqx3hwyu.s[52]++;
                _this2._decrementPreload();
              });
              cov_1ykqx3hwyu.s[53]++;
              return returnValue;
            };
            cov_1ykqx3hwyu.s[54]++;
            if (thisValue) {
              cov_1ykqx3hwyu.b[11][0]++;
              cov_1ykqx3hwyu.s[55]++;
              returnedFunction = returnedFunction.bind(thisValue);
            } else {
              cov_1ykqx3hwyu.b[11][1]++;
            }
            cov_1ykqx3hwyu.s[56]++;
            return returnedFunction;
          };
        },
        {
          './main': 283,
          'core-js/modules/es.array.iterator': 174,
          'core-js/modules/es.object.assign': 188,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.promise': 193,
          'core-js/modules/es.string.iterator': 201,
          'core-js/modules/es.symbol': 211,
          'core-js/modules/es.symbol.description': 209,
          'core-js/modules/es.symbol.iterator': 210,
          'core-js/modules/web.dom-collections.iterator': 244
        }
      ],
      289: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_2m67xb0szr = (function() {
            var path = '/Users/outofambit/src/p5.js/src/core/rendering.js';
            var hash = '94e92bd44245663be57809f0fce8067f82acac91';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/core/rendering.js',
              statementMap: {
                '0': { start: { line: 12, column: 16 }, end: { line: 12, column: 32 } },
                '1': { start: { line: 13, column: 21 }, end: { line: 13, column: 31 } },
                '2': { start: { line: 55, column: 0 }, end: { line: 123, column: 2 } },
                '3': { start: { line: 56, column: 2 }, end: { line: 56, column: 52 } },
                '4': { start: { line: 58, column: 12 }, end: { line: 58, column: 37 } },
                '5': { start: { line: 61, column: 2 }, end: { line: 86, column: 3 } },
                '6': { start: { line: 62, column: 4 }, end: { line: 62, column: 43 } },
                '7': { start: { line: 63, column: 4 }, end: { line: 68, column: 5 } },
                '8': { start: { line: 65, column: 6 }, end: { line: 65, column: 34 } },
                '9': { start: { line: 66, column: 27 }, end: { line: 66, column: 41 } },
                '10': { start: { line: 67, column: 6 }, end: { line: 67, column: 70 } },
                '11': { start: { line: 67, column: 50 }, end: { line: 67, column: 68 } },
                '12': { start: { line: 69, column: 4 }, end: { line: 69, column: 41 } },
                '13': { start: { line: 70, column: 4 }, end: { line: 70, column: 21 } },
                '14': { start: { line: 71, column: 4 }, end: { line: 71, column: 34 } },
                '15': { start: { line: 73, column: 4 }, end: { line: 85, column: 5 } },
                '16': { start: { line: 74, column: 6 }, end: { line: 74, column: 43 } },
                '17': { start: { line: 75, column: 14 }, end: { line: 75, column: 15 } },
                '18': { start: { line: 76, column: 6 }, end: { line: 78, column: 7 } },
                '19': { start: { line: 77, column: 8 }, end: { line: 77, column: 12 } },
                '20': { start: { line: 79, column: 6 }, end: { line: 79, column: 38 } },
                '21': { start: { line: 80, column: 6 }, end: { line: 80, column: 23 } },
                '22': { start: { line: 81, column: 6 }, end: { line: 81, column: 36 } },
                '23': { start: { line: 84, column: 6 }, end: { line: 84, column: 22 } },
                '24': { start: { line: 89, column: 2 }, end: { line: 92, column: 3 } },
                '25': { start: { line: 90, column: 4 }, end: { line: 90, column: 28 } },
                '26': { start: { line: 91, column: 4 }, end: { line: 91, column: 34 } },
                '27': { start: { line: 94, column: 2 }, end: { line: 105, column: 3 } },
                '28': { start: { line: 96, column: 4 }, end: { line: 96, column: 34 } },
                '29': { start: { line: 99, column: 4 }, end: { line: 102, column: 5 } },
                '30': { start: { line: 100, column: 14 }, end: { line: 100, column: 44 } },
                '31': { start: { line: 101, column: 6 }, end: { line: 101, column: 35 } },
                '32': { start: { line: 104, column: 4 }, end: { line: 104, column: 60 } },
                '33': { start: { line: 109, column: 2 }, end: { line: 119, column: 3 } },
                '34': { start: { line: 110, column: 4 }, end: { line: 110, column: 69 } },
                '35': { start: { line: 111, column: 4 }, end: { line: 111, column: 40 } },
                '36': { start: { line: 114, column: 4 }, end: { line: 118, column: 5 } },
                '37': { start: { line: 115, column: 6 }, end: { line: 115, column: 71 } },
                '38': { start: { line: 116, column: 6 }, end: { line: 116, column: 42 } },
                '39': { start: { line: 117, column: 6 }, end: { line: 117, column: 42 } },
                '40': { start: { line: 120, column: 2 }, end: { line: 120, column: 30 } },
                '41': { start: { line: 121, column: 2 }, end: { line: 121, column: 34 } },
                '42': { start: { line: 122, column: 2 }, end: { line: 122, column: 24 } },
                '43': { start: { line: 151, column: 0 }, end: { line: 181, column: 2 } },
                '44': { start: { line: 152, column: 2 }, end: { line: 152, column: 52 } },
                '45': { start: { line: 153, column: 2 }, end: { line: 176, column: 3 } },
                '46': { start: { line: 155, column: 18 }, end: { line: 155, column: 20 } },
                '47': { start: { line: 156, column: 4 }, end: { line: 161, column: 5 } },
                '48': { start: { line: 157, column: 18 }, end: { line: 157, column: 42 } },
                '49': { start: { line: 158, column: 6 }, end: { line: 160, column: 7 } },
                '50': { start: { line: 159, column: 8 }, end: { line: 159, column: 25 } },
                '51': { start: { line: 162, column: 4 }, end: { line: 162, column: 32 } },
                '52': { start: { line: 163, column: 4 }, end: { line: 163, column: 19 } },
                '53': { start: { line: 164, column: 4 }, end: { line: 164, column: 20 } },
                '54': { start: { line: 166, column: 4 }, end: { line: 172, column: 5 } },
                '55': { start: { line: 167, column: 6 }, end: { line: 171, column: 7 } },
                '56': { start: { line: 168, column: 8 }, end: { line: 168, column: 56 } },
                '57': { start: { line: 173, column: 4 }, end: { line: 175, column: 5 } },
                '58': { start: { line: 174, column: 6 }, end: { line: 174, column: 20 } },
                '59': { start: { line: 178, column: 2 }, end: { line: 180, column: 3 } },
                '60': { start: { line: 179, column: 4 }, end: { line: 179, column: 29 } },
                '61': { start: { line: 198, column: 0 }, end: { line: 202, column: 2 } },
                '62': { start: { line: 199, column: 2 }, end: { line: 201, column: 3 } },
                '63': { start: { line: 200, column: 4 }, end: { line: 200, column: 52 } },
                '64': { start: { line: 238, column: 0 }, end: { line: 241, column: 2 } },
                '65': { start: { line: 239, column: 2 }, end: { line: 239, column: 54 } },
                '66': { start: { line: 240, column: 2 }, end: { line: 240, column: 47 } },
                '67': { start: { line: 314, column: 0 }, end: { line: 324, column: 2 } },
                '68': { start: { line: 315, column: 2 }, end: { line: 315, column: 49 } },
                '69': { start: { line: 316, column: 2 }, end: { line: 322, column: 3 } },
                '70': { start: { line: 318, column: 4 }, end: { line: 320, column: 6 } },
                '71': { start: { line: 321, column: 4 }, end: { line: 321, column: 27 } },
                '72': { start: { line: 323, column: 2 }, end: { line: 323, column: 33 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 55, column: 28 }, end: { line: 55, column: 29 } },
                  loc: { start: { line: 55, column: 53 }, end: { line: 123, column: 1 } },
                  line: 55
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 67, column: 45 }, end: { line: 67, column: 46 } },
                  loc: { start: { line: 67, column: 50 }, end: { line: 67, column: 68 } },
                  line: 67
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 151, column: 28 },
                    end: { line: 151, column: 29 }
                  },
                  loc: { start: { line: 151, column: 53 }, end: { line: 181, column: 1 } },
                  line: 151
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 198, column: 24 },
                    end: { line: 198, column: 25 }
                  },
                  loc: { start: { line: 198, column: 35 }, end: { line: 202, column: 1 } },
                  line: 198
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 238, column: 30 },
                    end: { line: 238, column: 31 }
                  },
                  loc: { start: { line: 238, column: 55 }, end: { line: 241, column: 1 } },
                  line: 238
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 314, column: 25 },
                    end: { line: 314, column: 26 }
                  },
                  loc: { start: { line: 314, column: 40 }, end: { line: 324, column: 1 } },
                  line: 314
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 58, column: 12 }, end: { line: 58, column: 37 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 58, column: 12 }, end: { line: 58, column: 20 } },
                    { start: { line: 58, column: 24 }, end: { line: 58, column: 37 } }
                  ],
                  line: 58
                },
                '1': {
                  loc: { start: { line: 61, column: 2 }, end: { line: 86, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 61, column: 2 }, end: { line: 86, column: 3 } },
                    { start: { line: 61, column: 2 }, end: { line: 86, column: 3 } }
                  ],
                  line: 61
                },
                '2': {
                  loc: { start: { line: 63, column: 4 }, end: { line: 68, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 63, column: 4 }, end: { line: 68, column: 5 } },
                    { start: { line: 63, column: 4 }, end: { line: 68, column: 5 } }
                  ],
                  line: 63
                },
                '3': {
                  loc: { start: { line: 73, column: 4 }, end: { line: 85, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 73, column: 4 }, end: { line: 85, column: 5 } },
                    { start: { line: 73, column: 4 }, end: { line: 85, column: 5 } }
                  ],
                  line: 73
                },
                '4': {
                  loc: { start: { line: 89, column: 2 }, end: { line: 92, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 89, column: 2 }, end: { line: 92, column: 3 } },
                    { start: { line: 89, column: 2 }, end: { line: 92, column: 3 } }
                  ],
                  line: 89
                },
                '5': {
                  loc: { start: { line: 94, column: 2 }, end: { line: 105, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 94, column: 2 }, end: { line: 105, column: 3 } },
                    { start: { line: 94, column: 2 }, end: { line: 105, column: 3 } }
                  ],
                  line: 94
                },
                '6': {
                  loc: { start: { line: 99, column: 4 }, end: { line: 102, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 99, column: 4 }, end: { line: 102, column: 5 } },
                    { start: { line: 99, column: 4 }, end: { line: 102, column: 5 } }
                  ],
                  line: 99
                },
                '7': {
                  loc: { start: { line: 109, column: 2 }, end: { line: 119, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 109, column: 2 }, end: { line: 119, column: 3 } },
                    { start: { line: 109, column: 2 }, end: { line: 119, column: 3 } }
                  ],
                  line: 109
                },
                '8': {
                  loc: { start: { line: 114, column: 4 }, end: { line: 118, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 114, column: 4 }, end: { line: 118, column: 5 } },
                    { start: { line: 114, column: 4 }, end: { line: 118, column: 5 } }
                  ],
                  line: 114
                },
                '9': {
                  loc: { start: { line: 153, column: 2 }, end: { line: 176, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 153, column: 2 }, end: { line: 176, column: 3 } },
                    { start: { line: 153, column: 2 }, end: { line: 176, column: 3 } }
                  ],
                  line: 153
                },
                '10': {
                  loc: { start: { line: 158, column: 6 }, end: { line: 160, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 158, column: 6 }, end: { line: 160, column: 7 } },
                    { start: { line: 158, column: 6 }, end: { line: 160, column: 7 } }
                  ],
                  line: 158
                },
                '11': {
                  loc: { start: { line: 158, column: 10 }, end: { line: 158, column: 62 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 158, column: 10 }, end: { line: 158, column: 33 } },
                    { start: { line: 158, column: 37 }, end: { line: 158, column: 62 } }
                  ],
                  line: 158
                },
                '12': {
                  loc: { start: { line: 173, column: 4 }, end: { line: 175, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 173, column: 4 }, end: { line: 175, column: 5 } },
                    { start: { line: 173, column: 4 }, end: { line: 175, column: 5 } }
                  ],
                  line: 173
                },
                '13': {
                  loc: { start: { line: 178, column: 2 }, end: { line: 180, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 178, column: 2 }, end: { line: 180, column: 3 } },
                    { start: { line: 178, column: 2 }, end: { line: 180, column: 3 } }
                  ],
                  line: 178
                },
                '14': {
                  loc: { start: { line: 199, column: 2 }, end: { line: 201, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 199, column: 2 }, end: { line: 201, column: 3 } },
                    { start: { line: 199, column: 2 }, end: { line: 201, column: 3 } }
                  ],
                  line: 199
                },
                '15': {
                  loc: { start: { line: 316, column: 2 }, end: { line: 322, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 316, column: 2 }, end: { line: 322, column: 3 } },
                    { start: { line: 316, column: 2 }, end: { line: 322, column: 3 } }
                  ],
                  line: 316
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0
              },
              f: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0 },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '94e92bd44245663be57809f0fce8067f82acac91'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.symbol');
          _dereq_('core-js/modules/es.symbol.description');
          _dereq_('core-js/modules/es.symbol.iterator');
          _dereq_('core-js/modules/es.array.filter');
          _dereq_('core-js/modules/es.array.iterator');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.string.iterator');
          _dereq_('core-js/modules/web.dom-collections.iterator');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('./main'));
          var constants = _interopRequireWildcard(_dereq_('./constants'));
          _dereq_('./p5.Graphics');
          _dereq_('./p5.Renderer2D');
          _dereq_('../webgl/p5.RendererGL');
          function _getRequireWildcardCache() {
            if (typeof WeakMap !== 'function') return null;
            var cache = new WeakMap();
            _getRequireWildcardCache = function _getRequireWildcardCache() {
              return cache;
            };
            return cache;
          }
          function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
              return obj;
            }
            if (obj === null || (_typeof(obj) !== 'object' && typeof obj !== 'function')) {
              return { default: obj };
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
              return cache.get(obj);
            }
            var newObj = {};
            var hasPropertyDescriptor =
              Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
              if (Object.prototype.hasOwnProperty.call(obj, key)) {
                var desc = hasPropertyDescriptor
                  ? Object.getOwnPropertyDescriptor(obj, key)
                  : null;
                if (desc && (desc.get || desc.set)) {
                  Object.defineProperty(newObj, key, desc);
                } else {
                  newObj[key] = obj[key];
                }
              }
            }
            newObj.default = obj;
            if (cache) {
              cache.set(obj, newObj);
            }
            return newObj;
          }
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          function _typeof(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof = function _typeof(obj) {
                return typeof obj;
              };
            } else {
              _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof(obj);
          }
          var defaultId = (cov_2m67xb0szr.s[0]++, 'defaultCanvas0'); // this gets set again in createCanvas
          var defaultClass = (cov_2m67xb0szr.s[1]++, 'p5Canvas');

          /**
           * Creates a canvas element in the document, and sets the dimensions of it
           * in pixels. This method should be called only once at the start of setup.
           * Calling <a href="#/p5/createCanvas">createCanvas</a> more than once in a
           * sketch will result in very unpredictable behavior. If you want more than
           * one drawing canvas you could use <a href="#/p5/createGraphics">createGraphics</a>
           * (hidden by default but it can be shown).
           *
           * Important note: in 2D mode (i.e. when `p5.Renderer` is not set) the origin (0,0)
           * is positioned at the top left of the screen. In 3D mode (i.e. when `p5.Renderer`
           * is set to `WEBGL`), the origin is positioned at the center of the canvas.
           * See [this issue](https://github.com/processing/p5.js/issues/1545) for more information.
           *
           * The system variables width and height are set by the parameters passed to this
           * function. If <a href="#/p5/createCanvas">createCanvas()</a> is not used, the
           * window will be given a default size of 100x100 pixels.
           *
           * For more ways to position the canvas, see the
           * <a href='https://github.com/processing/p5.js/wiki/Positioning-your-canvas'>
           * positioning the canvas</a> wiki page.
           *
           * @method createCanvas
           * @param  {Number} w width of the canvas
           * @param  {Number} h height of the canvas
           * @param  {Constant} [renderer] either P2D or WEBGL
           * @return {p5.Renderer}
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 50);
           *   background(153);
           *   line(0, 0, width, height);
           * }
           * </code>
           * </div>
           *
           * @alt
           * Black line extending from top-left of canvas to bottom right.
           */ cov_2m67xb0szr.s[2]++;
          _main.default.prototype.createCanvas = function(w, h, renderer) {
            cov_2m67xb0szr.f[0]++;
            cov_2m67xb0szr.s[3]++;
            _main.default._validateParameters('createCanvas', arguments);
            //optional: renderer, otherwise defaults to p2d
            var r = (cov_2m67xb0szr.s[4]++,
            (cov_2m67xb0szr.b[0][0]++, renderer) ||
              (cov_2m67xb0szr.b[0][1]++, constants.P2D));
            var c;
            cov_2m67xb0szr.s[5]++;

            if (r === constants.WEBGL) {
              cov_2m67xb0szr.b[1][0]++;
              cov_2m67xb0szr.s[6]++;
              c = document.getElementById(defaultId);
              cov_2m67xb0szr.s[7]++;
              if (c) {
                cov_2m67xb0szr.b[2][0]++;
                cov_2m67xb0szr.s[8]++;
                //if defaultCanvas already exists
                c.parentNode.removeChild(c); //replace the existing defaultCanvas
                var thisRenderer = (cov_2m67xb0szr.s[9]++, this._renderer);
                cov_2m67xb0szr.s[10]++;
                this._elements = this._elements.filter(function(e) {
                  cov_2m67xb0szr.f[1]++;
                  cov_2m67xb0szr.s[11]++;
                  return e !== thisRenderer;
                });
              } else {
                cov_2m67xb0szr.b[2][1]++;
              }
              cov_2m67xb0szr.s[12]++;
              c = document.createElement('canvas');
              cov_2m67xb0szr.s[13]++;
              c.id = defaultId;
              cov_2m67xb0szr.s[14]++;
              c.classList.add(defaultClass);
            } else {
              cov_2m67xb0szr.b[1][1]++;
              cov_2m67xb0szr.s[15]++;
              if (!this._defaultGraphicsCreated) {
                cov_2m67xb0szr.b[3][0]++;
                cov_2m67xb0szr.s[16]++;
                c = document.createElement('canvas');
                var i = (cov_2m67xb0szr.s[17]++, 0);
                cov_2m67xb0szr.s[18]++;
                while (document.getElementById('defaultCanvas'.concat(i))) {
                  cov_2m67xb0szr.s[19]++;
                  i++;
                }
                cov_2m67xb0szr.s[20]++;
                defaultId = 'defaultCanvas'.concat(i);
                cov_2m67xb0szr.s[21]++;
                c.id = defaultId;
                cov_2m67xb0szr.s[22]++;
                c.classList.add(defaultClass);
              } else {
                cov_2m67xb0szr.b[3][1]++;
                cov_2m67xb0szr.s[23]++;
                // resize the default canvas if new one is created
                c = this.canvas;
              }
            }

            // set to invisible if still in setup (to prevent flashing with manipulate)
            cov_2m67xb0szr.s[24]++;
            if (!this._setupDone) {
              cov_2m67xb0szr.b[4][0]++;
              cov_2m67xb0szr.s[25]++;
              c.dataset.hidden = true; // tag to show later
              cov_2m67xb0szr.s[26]++;
              c.style.visibility = 'hidden';
            } else {
              cov_2m67xb0szr.b[4][1]++;
            }
            cov_2m67xb0szr.s[27]++;

            if (this._userNode) {
              cov_2m67xb0szr.b[5][0]++;
              cov_2m67xb0szr.s[28]++;
              // user input node case
              this._userNode.appendChild(c);
            } else {
              cov_2m67xb0szr.b[5][1]++;
              cov_2m67xb0szr.s[29]++;
              //create main element
              if (document.getElementsByTagName('main').length === 0) {
                cov_2m67xb0szr.b[6][0]++;
                var m = (cov_2m67xb0szr.s[30]++, document.createElement('main'));
                cov_2m67xb0szr.s[31]++;
                document.body.appendChild(m);
              } else {
                cov_2m67xb0szr.b[6][1]++;
              }
              //append canvas to main
              cov_2m67xb0szr.s[32]++;
              document.getElementsByTagName('main')[0].appendChild(c);
            }

            // Init our graphics renderer
            //webgl mode
            cov_2m67xb0szr.s[33]++;
            if (r === constants.WEBGL) {
              cov_2m67xb0szr.b[7][0]++;
              cov_2m67xb0szr.s[34]++;
              this._setProperty('_renderer', new _main.default.RendererGL(c, this, true));
              cov_2m67xb0szr.s[35]++;
              this._elements.push(this._renderer);
            } else {
              cov_2m67xb0szr.b[7][1]++;
              cov_2m67xb0szr.s[36]++;
              //P2D mode
              if (!this._defaultGraphicsCreated) {
                cov_2m67xb0szr.b[8][0]++;
                cov_2m67xb0szr.s[37]++;
                this._setProperty('_renderer', new _main.default.Renderer2D(c, this, true));
                cov_2m67xb0szr.s[38]++;
                this._defaultGraphicsCreated = true;
                cov_2m67xb0szr.s[39]++;
                this._elements.push(this._renderer);
              } else {
                cov_2m67xb0szr.b[8][1]++;
              }
            }
            cov_2m67xb0szr.s[40]++;
            this._renderer.resize(w, h);
            cov_2m67xb0szr.s[41]++;
            this._renderer._applyDefaults();
            cov_2m67xb0szr.s[42]++;
            return this._renderer;
          };

          /**
           * Resizes the canvas to given width and height. The canvas will be cleared
           * and draw will be called immediately, allowing the sketch to re-render itself
           * in the resized canvas.
           * @method resizeCanvas
           * @param  {Number} w width of the canvas
           * @param  {Number} h height of the canvas
           * @param  {Boolean} [noRedraw] don't redraw the canvas immediately
           * @example
           * <div class="norender"><code>
           * function setup() {
           *   createCanvas(windowWidth, windowHeight);
           * }
           *
           * function draw() {
           *   background(0, 100, 200);
           * }
           *
           * function windowResized() {
           *   resizeCanvas(windowWidth, windowHeight);
           * }
           * </code></div>
           *
           * @alt
           * No image displayed.
           */ cov_2m67xb0szr.s[43]++;
          _main.default.prototype.resizeCanvas = function(w, h, noRedraw) {
            cov_2m67xb0szr.f[2]++;
            cov_2m67xb0szr.s[44]++;
            _main.default._validateParameters('resizeCanvas', arguments);
            cov_2m67xb0szr.s[45]++;
            if (this._renderer) {
              cov_2m67xb0szr.b[9][0]++;
              // save canvas properties
              var props = (cov_2m67xb0szr.s[46]++, {});
              cov_2m67xb0szr.s[47]++;
              for (var key in this.drawingContext) {
                var val = (cov_2m67xb0szr.s[48]++, this.drawingContext[key]);
                cov_2m67xb0szr.s[49]++;
                if (
                  (cov_2m67xb0szr.b[11][0]++, _typeof(val) !== 'object') &&
                  (cov_2m67xb0szr.b[11][1]++, typeof val !== 'function')
                ) {
                  cov_2m67xb0szr.b[10][0]++;
                  cov_2m67xb0szr.s[50]++;
                  props[key] = val;
                } else {
                  cov_2m67xb0szr.b[10][1]++;
                }
              }
              cov_2m67xb0szr.s[51]++;
              this._renderer.resize(w, h);
              cov_2m67xb0szr.s[52]++;
              this.width = w;
              cov_2m67xb0szr.s[53]++;
              this.height = h;
              // reset canvas properties
              cov_2m67xb0szr.s[54]++;
              for (var savedKey in props) {
                cov_2m67xb0szr.s[55]++;
                try {
                  cov_2m67xb0szr.s[56]++;
                  this.drawingContext[savedKey] = props[savedKey];
                } catch (err) {
                  // ignore read-only property errors
                }
              }
              cov_2m67xb0szr.s[57]++;
              if (!noRedraw) {
                cov_2m67xb0szr.b[12][0]++;
                cov_2m67xb0szr.s[58]++;
                this.redraw();
              } else {
                cov_2m67xb0szr.b[12][1]++;
              }
            } else {
              cov_2m67xb0szr.b[9][1]++;
            }
            //accessible Outputs
            cov_2m67xb0szr.s[59]++;
            if (this._addAccsOutput()) {
              cov_2m67xb0szr.b[13][0]++;
              cov_2m67xb0szr.s[60]++;
              this._updateAccsOutput();
            } else {
              cov_2m67xb0szr.b[13][1]++;
            }
          };

          /**
           * Removes the default canvas for a p5 sketch that doesn't require a canvas
           * @method noCanvas
           * @example
           * <div>
           * <code>
           * function setup() {
           *   noCanvas();
           * }
           * </code>
           * </div>
           *
           * @alt
           * no image displayed
           */ cov_2m67xb0szr.s[61]++;
          _main.default.prototype.noCanvas = function() {
            cov_2m67xb0szr.f[3]++;
            cov_2m67xb0szr.s[62]++;
            if (this.canvas) {
              cov_2m67xb0szr.b[14][0]++;
              cov_2m67xb0szr.s[63]++;
              this.canvas.parentNode.removeChild(this.canvas);
            } else {
              cov_2m67xb0szr.b[14][1]++;
            }
          };

          /**
           * Creates and returns a new p5.Renderer object. Use this class if you need
           * to draw into an off-screen graphics buffer. The two parameters define the
           * width and height in pixels.
           *
           * @method createGraphics
           * @param  {Number} w width of the offscreen graphics buffer
           * @param  {Number} h height of the offscreen graphics buffer
           * @param  {Constant} [renderer] either P2D or WEBGL
           *                               undefined defaults to p2d
           * @return {p5.Graphics} offscreen graphics buffer
           * @example
           * <div>
           * <code>
           * let pg;
           * function setup() {
           *   createCanvas(100, 100);
           *   pg = createGraphics(100, 100);
           * }
           *
           * function draw() {
           *   background(200);
           *   pg.background(100);
           *   pg.noStroke();
           *   pg.ellipse(pg.width / 2, pg.height / 2, 50, 50);
           *   image(pg, 50, 50);
           *   image(pg, 0, 0, 50, 50);
           * }
           * </code>
           * </div>
           *
           * @alt
           * 4 grey squares alternating light and dark grey. White quarter circle mid-left.
           */ cov_2m67xb0szr.s[64]++;
          _main.default.prototype.createGraphics = function(w, h, renderer) {
            cov_2m67xb0szr.f[4]++;
            cov_2m67xb0szr.s[65]++;
            _main.default._validateParameters('createGraphics', arguments);
            cov_2m67xb0szr.s[66]++;
            return new _main.default.Graphics(w, h, renderer, this);
          };

          /**
           * Blends the pixels in the display window according to the defined mode.
           * There is a choice of the following modes to blend the source pixels (A)
           * with the ones of pixels already in the display window (B):
           * <ul>
           * <li><code>BLEND</code> - linear interpolation of colours: C =
           * A*factor + B. <b>This is the default blending mode.</b></li>
           * <li><code>ADD</code> - sum of A and B</li>
           * <li><code>DARKEST</code> - only the darkest colour succeeds: C =
           * min(A*factor, B).</li>
           * <li><code>LIGHTEST</code> - only the lightest colour succeeds: C =
           * max(A*factor, B).</li>
           * <li><code>DIFFERENCE</code> - subtract colors from underlying image.</li>
           * <li><code>EXCLUSION</code> - similar to <code>DIFFERENCE</code>, but less
           * extreme.</li>
           * <li><code>MULTIPLY</code> - multiply the colors, result will always be
           * darker.</li>
           * <li><code>SCREEN</code> - opposite multiply, uses inverse values of the
           * colors.</li>
           * <li><code>REPLACE</code> - the pixels entirely replace the others and
           * don't utilize alpha (transparency) values.</li>
           * <li><code>REMOVE</code> - removes pixels from B with the alpha strength of A.</li>
           * <li><code>OVERLAY</code> - mix of <code>MULTIPLY</code> and <code>SCREEN
           * </code>. Multiplies dark values, and screens light values. <em>(2D)</em></li>
           * <li><code>HARD_LIGHT</code> - <code>SCREEN</code> when greater than 50%
           * gray, <code>MULTIPLY</code> when lower. <em>(2D)</em></li>
           * <li><code>SOFT_LIGHT</code> - mix of <code>DARKEST</code> and
           * <code>LIGHTEST</code>. Works like <code>OVERLAY</code>, but not as harsh. <em>(2D)</em>
           * </li>
           * <li><code>DODGE</code> - lightens light tones and increases contrast,
           * ignores darks. <em>(2D)</em></li>
           * <li><code>BURN</code> - darker areas are applied, increasing contrast,
           * ignores lights. <em>(2D)</em></li>
           * <li><code>SUBTRACT</code> - remainder of A and B <em>(3D)</em></li>
           * </ul>
           *
           * <em>(2D)</em> indicates that this blend mode <b>only</b> works in the 2D renderer.<br>
           * <em>(3D)</em> indicates that this blend mode <b>only</b> works in the WEBGL renderer.
           *
           * @method blendMode
           * @param  {Constant} mode blend mode to set for canvas.
           *                either BLEND, DARKEST, LIGHTEST, DIFFERENCE, MULTIPLY,
           *                EXCLUSION, SCREEN, REPLACE, OVERLAY, HARD_LIGHT,
           *                SOFT_LIGHT, DODGE, BURN, ADD, REMOVE or SUBTRACT
           * @example
           * <div>
           * <code>
           * blendMode(LIGHTEST);
           * strokeWeight(30);
           * stroke(80, 150, 255);
           * line(25, 25, 75, 75);
           * stroke(255, 50, 50);
           * line(75, 25, 25, 75);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * blendMode(MULTIPLY);
           * strokeWeight(30);
           * stroke(80, 150, 255);
           * line(25, 25, 75, 75);
           * stroke(255, 50, 50);
           * line(75, 25, 25, 75);
           * </code>
           * </div>
           *
           * @alt
           * translucent image thick red & blue diagonal rounded lines intersecting center
           * Thick red & blue diagonal rounded lines intersecting center. dark at overlap
           */ cov_2m67xb0szr.s[67]++;
          _main.default.prototype.blendMode = function(mode) {
            cov_2m67xb0szr.f[5]++;
            cov_2m67xb0szr.s[68]++;
            _main.default._validateParameters('blendMode', arguments);
            cov_2m67xb0szr.s[69]++;
            if (mode === constants.NORMAL) {
              cov_2m67xb0szr.b[15][0]++;
              cov_2m67xb0szr.s[70]++;
              // Warning added 3/26/19, can be deleted in future (1.0 release?)
              console.warn(
                'NORMAL has been deprecated for use in blendMode. defaulting to BLEND instead.'
              );
              cov_2m67xb0szr.s[71]++;

              mode = constants.BLEND;
            } else {
              cov_2m67xb0szr.b[15][1]++;
            }
            cov_2m67xb0szr.s[72]++;
            this._renderer.blendMode(mode);
          };

          /**
           * The p5.js API provides a lot of functionality for creating graphics, but there is
           * some native HTML5 Canvas functionality that is not exposed by p5. You can still call
           * it directly using the variable `drawingContext`, as in the example shown. This is
           * the equivalent of calling `canvas.getContext('2d');` or `canvas.getContext('webgl');`.
           * See this
           * <a href="https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D">
           * reference for the native canvas API</a> for possible drawing functions you can call.
           *
           * @property drawingContext
           * @example
           * <div>
           * <code>
           * function setup() {
           *   drawingContext.shadowOffsetX = 5;
           *   drawingContext.shadowOffsetY = -5;
           *   drawingContext.shadowBlur = 10;
           *   drawingContext.shadowColor = 'black';
           *   background(200);
           *   ellipse(width / 2, height / 2, 50, 50);
           * }
           * </code>
           * </div>
           *
           * @alt
           * white ellipse with shadow blur effect around edges
           */ var _default = _main.default;
          exports.default = _default;
        },
        {
          '../webgl/p5.RendererGL': 337,
          './constants': 272,
          './main': 283,
          './p5.Graphics': 285,
          './p5.Renderer2D': 287,
          'core-js/modules/es.array.filter': 169,
          'core-js/modules/es.array.iterator': 174,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.string.iterator': 201,
          'core-js/modules/es.symbol': 211,
          'core-js/modules/es.symbol.description': 209,
          'core-js/modules/es.symbol.iterator': 210,
          'core-js/modules/web.dom-collections.iterator': 244
        }
      ],
      290: [
        function(_dereq_, module, exports) {
          'use strict';
          function _typeof(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof = function _typeof(obj) {
                return typeof obj;
              };
            } else {
              _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof(obj);
          }
          var cov_1iohb0glu = (function() {
            var path = '/Users/outofambit/src/p5.js/src/core/shape/2d_primitives.js';
            var hash = '58fe34225aff27713cde0d99c865e95cc50c8712';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/core/shape/2d_primitives.js',
              statementMap: {
                '0': { start: { line: 38, column: 0 }, end: { line: 100, column: 2 } },
                '1': { start: { line: 45, column: 18 }, end: { line: 45, column: 25 } },
                '2': { start: { line: 52, column: 2 }, end: { line: 52, column: 74 } },
                '3': { start: { line: 53, column: 2 }, end: { line: 53, column: 71 } },
                '4': { start: { line: 67, column: 2 }, end: { line: 70, column: 4 } },
                '5': { start: { line: 73, column: 2 }, end: { line: 88, column: 3 } },
                '6': { start: { line: 74, column: 4 }, end: { line: 80, column: 5 } },
                '7': { start: { line: 75, column: 6 }, end: { line: 75, column: 58 } },
                '8': { start: { line: 76, column: 11 }, end: { line: 80, column: 5 } },
                '9': { start: { line: 77, column: 6 }, end: { line: 77, column: 73 } },
                '10': { start: { line: 79, column: 6 }, end: { line: 79, column: 77 } },
                '11': { start: { line: 81, column: 4 }, end: { line: 87, column: 5 } },
                '12': { start: { line: 82, column: 6 }, end: { line: 82, column: 56 } },
                '13': { start: { line: 83, column: 11 }, end: { line: 87, column: 5 } },
                '14': { start: { line: 84, column: 6 }, end: { line: 84, column: 71 } },
                '15': { start: { line: 86, column: 6 }, end: { line: 86, column: 75 } },
                '16': { start: { line: 91, column: 2 }, end: { line: 93, column: 3 } },
                '17': { start: { line: 92, column: 4 }, end: { line: 92, column: 29 } },
                '18': { start: { line: 95, column: 2 }, end: { line: 99, column: 4 } },
                '19': { start: { line: 173, column: 0 }, end: { line: 230, column: 2 } },
                '20': { start: { line: 174, column: 2 }, end: { line: 174, column: 43 } },
                '21': { start: { line: 178, column: 2 }, end: { line: 180, column: 3 } },
                '22': { start: { line: 179, column: 4 }, end: { line: 179, column: 16 } },
                '23': { start: { line: 182, column: 2 }, end: { line: 184, column: 3 } },
                '24': { start: { line: 183, column: 4 }, end: { line: 183, column: 16 } },
                '25': { start: { line: 186, column: 2 }, end: { line: 186, column: 33 } },
                '26': { start: { line: 187, column: 2 }, end: { line: 187, column: 31 } },
                '27': { start: { line: 190, column: 2 }, end: { line: 190, column: 18 } },
                '28': { start: { line: 191, column: 2 }, end: { line: 191, column: 18 } },
                '29': { start: { line: 193, column: 15 }, end: { line: 193, column: 73 } },
                '30': { start: { line: 194, column: 17 }, end: { line: 194, column: 76 } },
                '31': { start: { line: 196, column: 2 }, end: { line: 227, column: 3 } },
                '32': { start: { line: 202, column: 4 }, end: { line: 202, column: 69 } },
                '33': { start: { line: 204, column: 4 }, end: { line: 213, column: 6 } },
                '34': { start: { line: 216, column: 4 }, end: { line: 226, column: 5 } },
                '35': { start: { line: 217, column: 6 }, end: { line: 225, column: 9 } },
                '36': { start: { line: 229, column: 2 }, end: { line: 229, column: 14 } },
                '37': { start: { line: 270, column: 0 }, end: { line: 273, column: 2 } },
                '38': { start: { line: 271, column: 2 }, end: { line: 271, column: 47 } },
                '39': { start: { line: 272, column: 2 }, end: { line: 272, column: 52 } },
                '40': { start: { line: 300, column: 0 }, end: { line: 306, column: 2 } },
                '41': { start: { line: 301, column: 2 }, end: { line: 301, column: 46 } },
                '42': { start: { line: 302, column: 15 }, end: { line: 302, column: 58 } },
                '43': { start: { line: 303, column: 2 }, end: { line: 303, column: 26 } },
                '44': { start: { line: 304, column: 2 }, end: { line: 304, column: 26 } },
                '45': { start: { line: 305, column: 2 }, end: { line: 305, column: 47 } },
                '46': { start: { line: 309, column: 0 }, end: { line: 337, column: 2 } },
                '47': { start: { line: 312, column: 2 }, end: { line: 314, column: 3 } },
                '48': { start: { line: 313, column: 4 }, end: { line: 313, column: 16 } },
                '49': { start: { line: 317, column: 2 }, end: { line: 319, column: 3 } },
                '50': { start: { line: 318, column: 4 }, end: { line: 318, column: 20 } },
                '51': { start: { line: 321, column: 2 }, end: { line: 326, column: 3 } },
                '52': { start: { line: 323, column: 4 }, end: { line: 323, column: 10 } },
                '53': { start: { line: 324, column: 9 }, end: { line: 326, column: 3 } },
                '54': { start: { line: 325, column: 4 }, end: { line: 325, column: 20 } },
                '55': { start: { line: 328, column: 15 }, end: { line: 328, column: 73 } },
                '56': { start: { line: 329, column: 2 }, end: { line: 329, column: 68 } },
                '57': { start: { line: 332, column: 2 }, end: { line: 334, column: 3 } },
                '58': { start: { line: 333, column: 4 }, end: { line: 333, column: 66 } },
                '59': { start: { line: 336, column: 2 }, end: { line: 336, column: 14 } },
                '60': { start: { line: 385, column: 0 }, end: { line: 398, column: 2 } },
                '61': { start: { line: 386, column: 2 }, end: { line: 386, column: 39 } },
                '62': { start: { line: 388, column: 2 }, end: { line: 390, column: 3 } },
                '63': { start: { line: 389, column: 4 }, end: { line: 389, column: 33 } },
                '64': { start: { line: 393, column: 2 }, end: { line: 395, column: 3 } },
                '65': { start: { line: 394, column: 4 }, end: { line: 394, column: 35 } },
                '66': { start: { line: 397, column: 2 }, end: { line: 397, column: 14 } },
                '67': { start: { line: 455, column: 0 }, end: { line: 476, column: 2 } },
                '68': { start: { line: 456, column: 2 }, end: { line: 456, column: 40 } },
                '69': { start: { line: 458, column: 2 }, end: { line: 473, column: 3 } },
                '70': { start: { line: 459, column: 4 }, end: { line: 472, column: 5 } },
                '71': { start: { line: 460, column: 6 }, end: { line: 465, column: 8 } },
                '72': { start: { line: 467, column: 6 }, end: { line: 467, column: 36 } },
                '73': { start: { line: 469, column: 6 }, end: { line: 471, column: 7 } },
                '74': { start: { line: 470, column: 8 }, end: { line: 470, column: 40 } },
                '75': { start: { line: 475, column: 2 }, end: { line: 475, column: 14 } },
                '76': { start: { line: 526, column: 0 }, end: { line: 550, column: 2 } },
                '77': { start: { line: 527, column: 2 }, end: { line: 527, column: 39 } },
                '78': { start: { line: 529, column: 2 }, end: { line: 547, column: 3 } },
                '79': { start: { line: 530, column: 4 }, end: { line: 546, column: 5 } },
                '80': { start: { line: 533, column: 6 }, end: { line: 539, column: 26 } },
                '81': { start: { line: 541, column: 6 }, end: { line: 541, column: 35 } },
                '82': { start: { line: 543, column: 6 }, end: { line: 545, column: 7 } },
                '83': { start: { line: 544, column: 8 }, end: { line: 544, column: 48 } },
                '84': { start: { line: 549, column: 2 }, end: { line: 549, column: 14 } },
                '85': { start: { line: 613, column: 0 }, end: { line: 616, column: 2 } },
                '86': { start: { line: 614, column: 2 }, end: { line: 614, column: 44 } },
                '87': { start: { line: 615, column: 2 }, end: { line: 615, column: 49 } },
                '88': { start: { line: 669, column: 0 }, end: { line: 673, column: 2 } },
                '89': { start: { line: 670, column: 2 }, end: { line: 670, column: 46 } },
                '90': { start: { line: 672, column: 2 }, end: { line: 672, column: 65 } },
                '91': { start: { line: 676, column: 0 }, end: { line: 705, column: 2 } },
                '92': { start: { line: 677, column: 2 }, end: { line: 702, column: 3 } },
                '93': { start: { line: 679, column: 4 }, end: { line: 681, column: 5 } },
                '94': { start: { line: 680, column: 6 }, end: { line: 680, column: 34 } },
                '95': { start: { line: 682, column: 17 }, end: { line: 688, column: 5 } },
                '96': { start: { line: 690, column: 17 }, end: { line: 690, column: 49 } },
                '97': { start: { line: 693, column: 4 }, end: { line: 695, column: 5 } },
                '98': { start: { line: 693, column: 17 }, end: { line: 693, column: 18 } },
                '99': { start: { line: 694, column: 6 }, end: { line: 694, column: 29 } },
                '100': { start: { line: 696, column: 4 }, end: { line: 696, column: 30 } },
                '101': { start: { line: 699, column: 4 }, end: { line: 701, column: 5 } },
                '102': { start: { line: 700, column: 6 }, end: { line: 700, column: 70 } },
                '103': { start: { line: 704, column: 2 }, end: { line: 704, column: 14 } },
                '104': { start: { line: 731, column: 0 }, end: { line: 744, column: 2 } },
                '105': { start: { line: 732, column: 2 }, end: { line: 732, column: 43 } },
                '106': { start: { line: 734, column: 2 }, end: { line: 736, column: 3 } },
                '107': { start: { line: 735, column: 4 }, end: { line: 735, column: 34 } },
                '108': { start: { line: 739, column: 2 }, end: { line: 741, column: 3 } },
                '109': { start: { line: 740, column: 4 }, end: { line: 740, column: 39 } },
                '110': { start: { line: 743, column: 2 }, end: { line: 743, column: 14 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 38, column: 35 }, end: { line: 38, column: 36 } },
                  loc: { start: { line: 44, column: 5 }, end: { line: 100, column: 1 } },
                  line: 44
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: {
                    start: { line: 173, column: 19 },
                    end: { line: 173, column: 20 }
                  },
                  loc: { start: { line: 173, column: 67 }, end: { line: 230, column: 1 } },
                  line: 173
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 270, column: 23 },
                    end: { line: 270, column: 24 }
                  },
                  loc: { start: { line: 270, column: 53 }, end: { line: 273, column: 1 } },
                  line: 270
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 300, column: 22 },
                    end: { line: 300, column: 23 }
                  },
                  loc: { start: { line: 300, column: 33 }, end: { line: 306, column: 1 } },
                  line: 300
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 309, column: 30 },
                    end: { line: 309, column: 31 }
                  },
                  loc: { start: { line: 309, column: 60 }, end: { line: 337, column: 1 } },
                  line: 309
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 385, column: 20 },
                    end: { line: 385, column: 21 }
                  },
                  loc: { start: { line: 385, column: 38 }, end: { line: 398, column: 1 } },
                  line: 385
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 455, column: 21 },
                    end: { line: 455, column: 22 }
                  },
                  loc: { start: { line: 455, column: 39 }, end: { line: 476, column: 1 } },
                  line: 455
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 526, column: 20 },
                    end: { line: 526, column: 21 }
                  },
                  loc: { start: { line: 526, column: 38 }, end: { line: 550, column: 1 } },
                  line: 526
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 613, column: 20 },
                    end: { line: 613, column: 21 }
                  },
                  loc: { start: { line: 613, column: 31 }, end: { line: 616, column: 1 } },
                  line: 613
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 669, column: 22 },
                    end: { line: 669, column: 23 }
                  },
                  loc: { start: { line: 669, column: 56 }, end: { line: 673, column: 1 } },
                  line: 669
                },
                '10': {
                  name: '(anonymous_10)',
                  decl: {
                    start: { line: 676, column: 27 },
                    end: { line: 676, column: 28 }
                  },
                  loc: { start: { line: 676, column: 38 }, end: { line: 705, column: 1 } },
                  line: 676
                },
                '11': {
                  name: '(anonymous_11)',
                  decl: {
                    start: { line: 731, column: 24 },
                    end: { line: 731, column: 25 }
                  },
                  loc: { start: { line: 731, column: 42 }, end: { line: 744, column: 1 } },
                  line: 731
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 73, column: 2 }, end: { line: 88, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 73, column: 2 }, end: { line: 88, column: 3 } },
                    { start: { line: 73, column: 2 }, end: { line: 88, column: 3 } }
                  ],
                  line: 73
                },
                '1': {
                  loc: { start: { line: 74, column: 4 }, end: { line: 80, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 74, column: 4 }, end: { line: 80, column: 5 } },
                    { start: { line: 74, column: 4 }, end: { line: 80, column: 5 } }
                  ],
                  line: 74
                },
                '2': {
                  loc: { start: { line: 76, column: 11 }, end: { line: 80, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 76, column: 11 }, end: { line: 80, column: 5 } },
                    { start: { line: 76, column: 11 }, end: { line: 80, column: 5 } }
                  ],
                  line: 76
                },
                '3': {
                  loc: { start: { line: 76, column: 15 }, end: { line: 76, column: 74 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 76, column: 15 }, end: { line: 76, column: 40 } },
                    { start: { line: 76, column: 44 }, end: { line: 76, column: 74 } }
                  ],
                  line: 76
                },
                '4': {
                  loc: { start: { line: 81, column: 4 }, end: { line: 87, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 81, column: 4 }, end: { line: 87, column: 5 } },
                    { start: { line: 81, column: 4 }, end: { line: 87, column: 5 } }
                  ],
                  line: 81
                },
                '5': {
                  loc: { start: { line: 83, column: 11 }, end: { line: 87, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 83, column: 11 }, end: { line: 87, column: 5 } },
                    { start: { line: 83, column: 11 }, end: { line: 87, column: 5 } }
                  ],
                  line: 83
                },
                '6': {
                  loc: { start: { line: 83, column: 15 }, end: { line: 83, column: 72 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 83, column: 15 }, end: { line: 83, column: 39 } },
                    { start: { line: 83, column: 43 }, end: { line: 83, column: 72 } }
                  ],
                  line: 83
                },
                '7': {
                  loc: { start: { line: 91, column: 2 }, end: { line: 93, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 91, column: 2 }, end: { line: 93, column: 3 } },
                    { start: { line: 91, column: 2 }, end: { line: 93, column: 3 } }
                  ],
                  line: 91
                },
                '8': {
                  loc: { start: { line: 178, column: 2 }, end: { line: 180, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 178, column: 2 }, end: { line: 180, column: 3 } },
                    { start: { line: 178, column: 2 }, end: { line: 180, column: 3 } }
                  ],
                  line: 178
                },
                '9': {
                  loc: { start: { line: 178, column: 6 }, end: { line: 178, column: 58 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 178, column: 6 }, end: { line: 178, column: 31 } },
                    { start: { line: 178, column: 35 }, end: { line: 178, column: 58 } }
                  ],
                  line: 178
                },
                '10': {
                  loc: { start: { line: 182, column: 2 }, end: { line: 184, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 182, column: 2 }, end: { line: 184, column: 3 } },
                    { start: { line: 182, column: 2 }, end: { line: 184, column: 3 } }
                  ],
                  line: 182
                },
                '11': {
                  loc: { start: { line: 196, column: 2 }, end: { line: 227, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 196, column: 2 }, end: { line: 227, column: 3 } },
                    { start: { line: 196, column: 2 }, end: { line: 227, column: 3 } }
                  ],
                  line: 196
                },
                '12': {
                  loc: { start: { line: 216, column: 4 }, end: { line: 226, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 216, column: 4 }, end: { line: 226, column: 5 } },
                    { start: { line: 216, column: 4 }, end: { line: 226, column: 5 } }
                  ],
                  line: 216
                },
                '13': {
                  loc: { start: { line: 216, column: 8 }, end: { line: 216, column: 68 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 216, column: 8 }, end: { line: 216, column: 36 } },
                    { start: { line: 216, column: 40 }, end: { line: 216, column: 68 } }
                  ],
                  line: 216
                },
                '14': {
                  loc: { start: { line: 312, column: 2 }, end: { line: 314, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 312, column: 2 }, end: { line: 314, column: 3 } },
                    { start: { line: 312, column: 2 }, end: { line: 314, column: 3 } }
                  ],
                  line: 312
                },
                '15': {
                  loc: { start: { line: 312, column: 6 }, end: { line: 312, column: 58 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 312, column: 6 }, end: { line: 312, column: 31 } },
                    { start: { line: 312, column: 35 }, end: { line: 312, column: 58 } }
                  ],
                  line: 312
                },
                '16': {
                  loc: { start: { line: 317, column: 2 }, end: { line: 319, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 317, column: 2 }, end: { line: 319, column: 3 } },
                    { start: { line: 317, column: 2 }, end: { line: 319, column: 3 } }
                  ],
                  line: 317
                },
                '17': {
                  loc: { start: { line: 321, column: 2 }, end: { line: 326, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 321, column: 2 }, end: { line: 326, column: 3 } },
                    { start: { line: 321, column: 2 }, end: { line: 326, column: 3 } }
                  ],
                  line: 321
                },
                '18': {
                  loc: { start: { line: 324, column: 9 }, end: { line: 326, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 324, column: 9 }, end: { line: 326, column: 3 } },
                    { start: { line: 324, column: 9 }, end: { line: 326, column: 3 } }
                  ],
                  line: 324
                },
                '19': {
                  loc: { start: { line: 332, column: 2 }, end: { line: 334, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 332, column: 2 }, end: { line: 334, column: 3 } },
                    { start: { line: 332, column: 2 }, end: { line: 334, column: 3 } }
                  ],
                  line: 332
                },
                '20': {
                  loc: { start: { line: 332, column: 6 }, end: { line: 332, column: 66 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 332, column: 6 }, end: { line: 332, column: 34 } },
                    { start: { line: 332, column: 38 }, end: { line: 332, column: 66 } }
                  ],
                  line: 332
                },
                '21': {
                  loc: { start: { line: 388, column: 2 }, end: { line: 390, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 388, column: 2 }, end: { line: 390, column: 3 } },
                    { start: { line: 388, column: 2 }, end: { line: 390, column: 3 } }
                  ],
                  line: 388
                },
                '22': {
                  loc: { start: { line: 393, column: 2 }, end: { line: 395, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 393, column: 2 }, end: { line: 395, column: 3 } },
                    { start: { line: 393, column: 2 }, end: { line: 395, column: 3 } }
                  ],
                  line: 393
                },
                '23': {
                  loc: { start: { line: 393, column: 6 }, end: { line: 393, column: 66 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 393, column: 6 }, end: { line: 393, column: 34 } },
                    { start: { line: 393, column: 38 }, end: { line: 393, column: 66 } }
                  ],
                  line: 393
                },
                '24': {
                  loc: { start: { line: 458, column: 2 }, end: { line: 473, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 458, column: 2 }, end: { line: 473, column: 3 } },
                    { start: { line: 458, column: 2 }, end: { line: 473, column: 3 } }
                  ],
                  line: 458
                },
                '25': {
                  loc: { start: { line: 459, column: 4 }, end: { line: 472, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 459, column: 4 }, end: { line: 472, column: 5 } },
                    { start: { line: 459, column: 4 }, end: { line: 472, column: 5 } }
                  ],
                  line: 459
                },
                '26': {
                  loc: { start: { line: 459, column: 8 }, end: { line: 459, column: 57 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 459, column: 8 }, end: { line: 459, column: 25 } },
                    { start: { line: 459, column: 29 }, end: { line: 459, column: 57 } }
                  ],
                  line: 459
                },
                '27': {
                  loc: { start: { line: 469, column: 6 }, end: { line: 471, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 469, column: 6 }, end: { line: 471, column: 7 } },
                    { start: { line: 469, column: 6 }, end: { line: 471, column: 7 } }
                  ],
                  line: 469
                },
                '28': {
                  loc: { start: { line: 469, column: 10 }, end: { line: 469, column: 70 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 469, column: 10 }, end: { line: 469, column: 38 } },
                    { start: { line: 469, column: 42 }, end: { line: 469, column: 70 } }
                  ],
                  line: 469
                },
                '29': {
                  loc: { start: { line: 529, column: 2 }, end: { line: 547, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 529, column: 2 }, end: { line: 547, column: 3 } },
                    { start: { line: 529, column: 2 }, end: { line: 547, column: 3 } }
                  ],
                  line: 529
                },
                '30': {
                  loc: { start: { line: 529, column: 6 }, end: { line: 529, column: 56 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 529, column: 6 }, end: { line: 529, column: 30 } },
                    { start: { line: 529, column: 34 }, end: { line: 529, column: 56 } }
                  ],
                  line: 529
                },
                '31': {
                  loc: { start: { line: 530, column: 4 }, end: { line: 546, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 530, column: 4 }, end: { line: 546, column: 5 } },
                    { start: { line: 530, column: 4 }, end: { line: 546, column: 5 } }
                  ],
                  line: 530
                },
                '32': {
                  loc: { start: { line: 530, column: 8 }, end: { line: 530, column: 49 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 530, column: 8 }, end: { line: 530, column: 28 } },
                    { start: { line: 530, column: 32 }, end: { line: 530, column: 49 } }
                  ],
                  line: 530
                },
                '33': {
                  loc: { start: { line: 543, column: 6 }, end: { line: 545, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 543, column: 6 }, end: { line: 545, column: 7 } },
                    { start: { line: 543, column: 6 }, end: { line: 545, column: 7 } }
                  ],
                  line: 543
                },
                '34': {
                  loc: { start: { line: 543, column: 10 }, end: { line: 543, column: 70 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 543, column: 10 }, end: { line: 543, column: 38 } },
                    { start: { line: 543, column: 42 }, end: { line: 543, column: 70 } }
                  ],
                  line: 543
                },
                '35': {
                  loc: { start: { line: 677, column: 2 }, end: { line: 702, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 677, column: 2 }, end: { line: 702, column: 3 } },
                    { start: { line: 677, column: 2 }, end: { line: 702, column: 3 } }
                  ],
                  line: 677
                },
                '36': {
                  loc: { start: { line: 677, column: 6 }, end: { line: 677, column: 56 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 677, column: 6 }, end: { line: 677, column: 30 } },
                    { start: { line: 677, column: 34 }, end: { line: 677, column: 56 } }
                  ],
                  line: 677
                },
                '37': {
                  loc: { start: { line: 679, column: 4 }, end: { line: 681, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 679, column: 4 }, end: { line: 681, column: 5 } },
                    { start: { line: 679, column: 4 }, end: { line: 681, column: 5 } }
                  ],
                  line: 679
                },
                '38': {
                  loc: { start: { line: 699, column: 4 }, end: { line: 701, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 699, column: 4 }, end: { line: 701, column: 5 } },
                    { start: { line: 699, column: 4 }, end: { line: 701, column: 5 } }
                  ],
                  line: 699
                },
                '39': {
                  loc: { start: { line: 699, column: 8 }, end: { line: 699, column: 68 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 699, column: 8 }, end: { line: 699, column: 36 } },
                    { start: { line: 699, column: 40 }, end: { line: 699, column: 68 } }
                  ],
                  line: 699
                },
                '40': {
                  loc: { start: { line: 734, column: 2 }, end: { line: 736, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 734, column: 2 }, end: { line: 736, column: 3 } },
                    { start: { line: 734, column: 2 }, end: { line: 736, column: 3 } }
                  ],
                  line: 734
                },
                '41': {
                  loc: { start: { line: 734, column: 6 }, end: { line: 734, column: 56 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 734, column: 6 }, end: { line: 734, column: 30 } },
                    { start: { line: 734, column: 34 }, end: { line: 734, column: 56 } }
                  ],
                  line: 734
                },
                '42': {
                  loc: { start: { line: 739, column: 2 }, end: { line: 741, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 739, column: 2 }, end: { line: 741, column: 3 } },
                    { start: { line: 739, column: 2 }, end: { line: 741, column: 3 } }
                  ],
                  line: 739
                },
                '43': {
                  loc: { start: { line: 739, column: 6 }, end: { line: 739, column: 66 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 739, column: 6 }, end: { line: 739, column: 34 } },
                    { start: { line: 739, column: 38 }, end: { line: 739, column: 66 } }
                  ],
                  line: 739
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0],
                '20': [0, 0],
                '21': [0, 0],
                '22': [0, 0],
                '23': [0, 0],
                '24': [0, 0],
                '25': [0, 0],
                '26': [0, 0],
                '27': [0, 0],
                '28': [0, 0],
                '29': [0, 0],
                '30': [0, 0],
                '31': [0, 0],
                '32': [0, 0],
                '33': [0, 0],
                '34': [0, 0],
                '35': [0, 0],
                '36': [0, 0],
                '37': [0, 0],
                '38': [0, 0],
                '39': [0, 0],
                '40': [0, 0],
                '41': [0, 0],
                '42': [0, 0],
                '43': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '58fe34225aff27713cde0d99c865e95cc50c8712'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.slice');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../main'));
          var constants = _interopRequireWildcard(_dereq_('../constants'));
          var _helpers = _interopRequireDefault(_dereq_('../helpers'));
          _dereq_('../friendly_errors/fes_core');
          _dereq_('../friendly_errors/file_errors');
          _dereq_('../friendly_errors/validate_params');
          function _getRequireWildcardCache() {
            if (typeof WeakMap !== 'function') return null;
            var cache = new WeakMap();
            _getRequireWildcardCache = function _getRequireWildcardCache() {
              return cache;
            };
            return cache;
          }
          function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
              return obj;
            }
            if (obj === null || (_typeof(obj) !== 'object' && typeof obj !== 'function')) {
              return { default: obj };
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
              return cache.get(obj);
            }
            var newObj = {};
            var hasPropertyDescriptor =
              Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
              if (Object.prototype.hasOwnProperty.call(obj, key)) {
                var desc = hasPropertyDescriptor
                  ? Object.getOwnPropertyDescriptor(obj, key)
                  : null;
                if (desc && (desc.get || desc.set)) {
                  Object.defineProperty(newObj, key, desc);
                } else {
                  newObj[key] = obj[key];
                }
              }
            }
            newObj.default = obj;
            if (cache) {
              cache.set(obj, newObj);
            }
            return newObj;
          }
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_1iohb0glu.s[0]++;

          /**
           * This function does 3 things:
           *
           *   1. Bounds the desired start/stop angles for an arc (in radians) so that:
           *
           *          0 <= start < TWO_PI ;    start <= stop < start + TWO_PI
           *
           *      This means that the arc rendering functions don't have to be concerned
           *      with what happens if stop is smaller than start, or if the arc 'goes
           *      round more than once', etc.: they can just start at start and increase
           *      until stop and the correct arc will be drawn.
           *
           *   2. Optionally adjusts the angles within each quadrant to counter the naive
           *      scaling of the underlying ellipse up from the unit circle.  Without
           *      this, the angles become arbitrary when width != height: 45 degrees
           *      might be drawn at 5 degrees on a 'wide' ellipse, or at 85 degrees on
           *      a 'tall' ellipse.
           *
           *   3. Flags up when start and stop correspond to the same place on the
           *      underlying ellipse.  This is useful if you want to do something special
           *      there (like rendering a whole ellipse instead).
           */
          _main.default.prototype._normalizeArcAngles = function(
            start,
            stop,
            width,
            height,
            correctForScaling
          ) {
            cov_1iohb0glu.f[0]++;
            var epsilon = (cov_1iohb0glu.s[1]++, 0.00001); // Smallest visible angle on displays up to 4K.
            var separation;

            // The order of the steps is important here: each one builds upon the
            // adjustments made in the steps that precede it.

            // Constrain both start and stop to [0,TWO_PI).
            cov_1iohb0glu.s[2]++;
            start = start - constants.TWO_PI * Math.floor(start / constants.TWO_PI);
            cov_1iohb0glu.s[3]++;
            stop = stop - constants.TWO_PI * Math.floor(stop / constants.TWO_PI);

            // Get the angular separation between the requested start and stop points.
            //
            // Technically this separation only matches what gets drawn if
            // correctForScaling is enabled.  We could add a more complicated calculation
            // for when the scaling is uncorrected (in which case the drawn points could
            // end up pushed together or pulled apart quite dramatically relative to what
            // was requested), but it would make things more opaque for little practical
            // benefit.
            //
            // (If you do disable correctForScaling and find that correspondToSamePoint
            // is set too aggressively, the easiest thing to do is probably to just make
            // epsilon smaller...)
            cov_1iohb0glu.s[4]++;
            separation = Math.min(
              Math.abs(start - stop),
              constants.TWO_PI - Math.abs(start - stop)
            );

            // Optionally adjust the angles to counter linear scaling.
            cov_1iohb0glu.s[5]++;
            if (correctForScaling) {
              cov_1iohb0glu.b[0][0]++;
              cov_1iohb0glu.s[6]++;
              if (start <= constants.HALF_PI) {
                cov_1iohb0glu.b[1][0]++;
                cov_1iohb0glu.s[7]++;
                start = Math.atan(width / height * Math.tan(start));
              } else {
                cov_1iohb0glu.b[1][1]++;
                cov_1iohb0glu.s[8]++;
                if (
                  (cov_1iohb0glu.b[3][0]++, start > constants.HALF_PI) &&
                  (cov_1iohb0glu.b[3][1]++, start <= 3 * constants.HALF_PI)
                ) {
                  cov_1iohb0glu.b[2][0]++;
                  cov_1iohb0glu.s[9]++;
                  start = Math.atan(width / height * Math.tan(start)) + constants.PI;
                } else {
                  cov_1iohb0glu.b[2][1]++;
                  cov_1iohb0glu.s[10]++;
                  start = Math.atan(width / height * Math.tan(start)) + constants.TWO_PI;
                }
              }
              cov_1iohb0glu.s[11]++;
              if (stop <= constants.HALF_PI) {
                cov_1iohb0glu.b[4][0]++;
                cov_1iohb0glu.s[12]++;
                stop = Math.atan(width / height * Math.tan(stop));
              } else {
                cov_1iohb0glu.b[4][1]++;
                cov_1iohb0glu.s[13]++;
                if (
                  (cov_1iohb0glu.b[6][0]++, stop > constants.HALF_PI) &&
                  (cov_1iohb0glu.b[6][1]++, stop <= 3 * constants.HALF_PI)
                ) {
                  cov_1iohb0glu.b[5][0]++;
                  cov_1iohb0glu.s[14]++;
                  stop = Math.atan(width / height * Math.tan(stop)) + constants.PI;
                } else {
                  cov_1iohb0glu.b[5][1]++;
                  cov_1iohb0glu.s[15]++;
                  stop = Math.atan(width / height * Math.tan(stop)) + constants.TWO_PI;
                }
              }
            } else {
              cov_1iohb0glu.b[0][1]++;
            }

            // Ensure that start <= stop < start + TWO_PI.
            cov_1iohb0glu.s[16]++;
            if (start > stop) {
              cov_1iohb0glu.b[7][0]++;
              cov_1iohb0glu.s[17]++;
              stop += constants.TWO_PI;
            } else {
              cov_1iohb0glu.b[7][1]++;
            }
            cov_1iohb0glu.s[18]++;

            return {
              start: start,
              stop: stop,
              correspondToSamePoint: separation < epsilon
            };
          };

          /**
           * Draw an arc to the screen. If called with only x, y, w, h, start and stop,
           * the arc will be drawn and filled as an open pie segment. If a mode parameter
           * is provided, the arc will be filled like an open semi-circle (OPEN), a closed
           * semi-circle (CHORD), or as a closed pie segment (PIE). The origin may be changed
           * with the <a href="#/p5/ellipseMode">ellipseMode()</a> function.
           *
           * The arc is always drawn clockwise from wherever start falls to wherever stop
           * falls on the ellipse. Adding or subtracting TWO_PI to either angle does not
           * change where they fall. If both start and stop fall at the same place, a full
           * ellipse will be drawn. Be aware that the y-axis increases in the downward
           * direction, therefore angles are measured clockwise from the positive
           * x-direction ("3 o'clock").
           *
           * @method arc
           * @param  {Number} x      x-coordinate of the arc's ellipse
           * @param  {Number} y      y-coordinate of the arc's ellipse
           * @param  {Number} w      width of the arc's ellipse by default
           * @param  {Number} h      height of the arc's ellipse by default
           * @param  {Number} start  angle to start the arc, specified in radians
           * @param  {Number} stop   angle to stop the arc, specified in radians
           * @param  {Constant} [mode] optional parameter to determine the way of drawing
           *                         the arc. either CHORD, PIE or OPEN
           * @param  {Integer} [detail] optional parameter for WebGL mode only. This is to
           *                         specify the number of vertices that makes up the
           *                         perimeter of the arc. Default value is 25. Won't
           *                         draw a stroke for a detail of more than 50.
           * @chainable
           *
           * @example
           * <div>
           * <code>
           * arc(50, 55, 50, 50, 0, HALF_PI);
           * noFill();
           * arc(50, 55, 60, 60, HALF_PI, PI);
           * arc(50, 55, 70, 70, PI, PI + QUARTER_PI);
           * arc(50, 55, 80, 80, PI + QUARTER_PI, TWO_PI);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * arc(50, 50, 80, 80, 0, PI + QUARTER_PI);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * arc(50, 50, 80, 80, 0, PI + QUARTER_PI, OPEN);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * arc(50, 50, 80, 80, 0, PI + QUARTER_PI, CHORD);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * arc(50, 50, 80, 80, 0, PI + QUARTER_PI, PIE);
           * </code>
           * </div>
           *
           * @alt
           *shattered outline of an ellipse with a quarter of a white circle bottom-right.
           *white ellipse with top right quarter missing.
           *white ellipse with black outline with top right missing.
           *white ellipse with top right missing with black outline around shape.
           *white ellipse with top right quarter missing with black outline around the shape.
           */ cov_1iohb0glu.s[19]++;
          _main.default.prototype.arc = function(x, y, w, h, start, stop, mode, detail) {
            cov_1iohb0glu.f[1]++;
            cov_1iohb0glu.s[20]++;
            _main.default._validateParameters('arc', arguments);

            // if the current stroke and fill settings wouldn't result in something
            // visible, exit immediately
            cov_1iohb0glu.s[21]++;
            if (
              (cov_1iohb0glu.b[9][0]++, !this._renderer._doStroke) &&
              (cov_1iohb0glu.b[9][1]++, !this._renderer._doFill)
            ) {
              cov_1iohb0glu.b[8][0]++;
              cov_1iohb0glu.s[22]++;
              return this;
            } else {
              cov_1iohb0glu.b[8][1]++;
            }
            cov_1iohb0glu.s[23]++;

            if (start === stop) {
              cov_1iohb0glu.b[10][0]++;
              cov_1iohb0glu.s[24]++;
              return this;
            } else {
              cov_1iohb0glu.b[10][1]++;
            }
            cov_1iohb0glu.s[25]++;

            start = this._toRadians(start);
            cov_1iohb0glu.s[26]++;
            stop = this._toRadians(stop);

            // p5 supports negative width and heights for ellipses
            cov_1iohb0glu.s[27]++;
            w = Math.abs(w);
            cov_1iohb0glu.s[28]++;
            h = Math.abs(h);

            var vals = (cov_1iohb0glu.s[29]++,
            _helpers.default.modeAdjust(x, y, w, h, this._renderer._ellipseMode));
            var angles = (cov_1iohb0glu.s[30]++,
            this._normalizeArcAngles(start, stop, vals.w, vals.h, true));
            cov_1iohb0glu.s[31]++;

            if (angles.correspondToSamePoint) {
              cov_1iohb0glu.b[11][0]++;
              cov_1iohb0glu.s[32]++;
              // If the arc starts and ends at (near enough) the same place, we choose to
              // draw an ellipse instead.  This is preferable to faking an ellipse (by
              // making stop ever-so-slightly less than start + TWO_PI) because the ends
              // join up to each other rather than at a vertex at the centre (leaving
              // an unwanted spike in the stroke/fill).
              this._renderer.ellipse([vals.x, vals.y, vals.w, vals.h, detail]);
            } else {
              cov_1iohb0glu.b[11][1]++;
              cov_1iohb0glu.s[33]++;
              this._renderer.arc(
                vals.x,
                vals.y,
                vals.w,
                vals.h,
                angles.start, // [0, TWO_PI)
                angles.stop, // [start, start + TWO_PI)
                mode,
                detail
              );

              //accessible Outputs
              cov_1iohb0glu.s[34]++;
              if (
                (cov_1iohb0glu.b[13][0]++, this._accessibleOutputs.grid) ||
                (cov_1iohb0glu.b[13][1]++, this._accessibleOutputs.text)
              ) {
                cov_1iohb0glu.b[12][0]++;
                cov_1iohb0glu.s[35]++;
                this._accsOutput('arc', [
                  vals.x,
                  vals.y,
                  vals.w,
                  vals.h,
                  angles.start,
                  angles.stop,
                  mode
                ]);
              } else {
                cov_1iohb0glu.b[12][1]++;
              }
            }
            cov_1iohb0glu.s[36]++;

            return this;
          };

          /**
           * Draws an ellipse (oval) to the screen. By default, the first two parameters
           * set the location of the center of the ellipse, and the third and fourth
           * parameters set the shape's width and height. If no height is specified, the
           * value of width is used for both the width and height. If a negative height or
           * width is specified, the absolute value is taken.
           *
           * An ellipse with equal width and height is a circle. The origin may be changed
           * with the <a href="#/p5/ellipseMode">ellipseMode()</a> function.
           *
           * @method ellipse
           * @param  {Number} x x-coordinate of the center of ellipse.
           * @param  {Number} y y-coordinate of the center of ellipse.
           * @param  {Number} w width of the ellipse.
           * @param  {Number} [h] height of the ellipse.
           * @chainable
           * @example
           * <div>
           * <code>
           * ellipse(56, 46, 55, 55);
           * </code>
           * </div>
           *
           * @alt
           *white ellipse with black outline in middle-right of canvas that is 55x55
           */

          /**
           * @method ellipse
           * @param  {Number} x
           * @param  {Number} y
           * @param  {Number} w
           * @param  {Number} h
           * @param  {Integer} [detail] optional parameter for WebGL mode only. This is to
           *                         specify the number of vertices that makes up the
           *                         perimeter of the ellipse. Default value is 25. Won't
           *                         draw a stroke for a detail of more than 50.
           */ cov_1iohb0glu.s[37]++;
          _main.default.prototype.ellipse = function(x, y, w, h, detailX) {
            cov_1iohb0glu.f[2]++;
            cov_1iohb0glu.s[38]++;
            _main.default._validateParameters('ellipse', arguments);
            cov_1iohb0glu.s[39]++;
            return this._renderEllipse.apply(this, arguments);
          };

          /**
           * Draws a circle to the screen. A circle is a simple closed shape. It is the set
           * of all points in a plane that are at a given distance from a given point,
           * the centre. This function is a special case of the ellipse() function, where
           * the width and height of the ellipse are the same. Height and width of the
           * ellipse correspond to the diameter of the circle. By default, the first two
           * parameters set the location of the centre of the circle, the third sets the
           * diameter of the circle.
           *
           * @method circle
           * @param  {Number} x  x-coordinate of the centre of the circle.
           * @param  {Number} y  y-coordinate of the centre of the circle.
           * @param  {Number} d  diameter of the circle.
           * @chainable
           * @example
           * <div>
           * <code>
           * // Draw a circle at location (30, 30) with a diameter of 20.
           * circle(30, 30, 20);
           * </code>
           * </div>
           *
           * @alt
           * white circle with black outline in mid of canvas that is 55x55.
           */ cov_1iohb0glu.s[40]++;
          _main.default.prototype.circle = function() {
            cov_1iohb0glu.f[3]++;
            cov_1iohb0glu.s[41]++;
            _main.default._validateParameters('circle', arguments);
            var args = (cov_1iohb0glu.s[42]++, Array.prototype.slice.call(arguments, 0, 2));
            cov_1iohb0glu.s[43]++;
            args.push(arguments[2]);
            cov_1iohb0glu.s[44]++;
            args.push(arguments[2]);
            cov_1iohb0glu.s[45]++;
            return this._renderEllipse.apply(this, args);
          };

          // internal method for drawing ellipses (without parameter validation)
          cov_1iohb0glu.s[46]++;
          _main.default.prototype._renderEllipse = function(x, y, w, h, detailX) {
            cov_1iohb0glu.f[4]++;
            cov_1iohb0glu.s[47]++;
            // if the current stroke and fill settings wouldn't result in something
            // visible, exit immediately
            if (
              (cov_1iohb0glu.b[15][0]++, !this._renderer._doStroke) &&
              (cov_1iohb0glu.b[15][1]++, !this._renderer._doFill)
            ) {
              cov_1iohb0glu.b[14][0]++;
              cov_1iohb0glu.s[48]++;
              return this;
            } else {
              cov_1iohb0glu.b[14][1]++;
            }

            // p5 supports negative width and heights for rects
            cov_1iohb0glu.s[49]++;
            if (w < 0) {
              cov_1iohb0glu.b[16][0]++;
              cov_1iohb0glu.s[50]++;
              w = Math.abs(w);
            } else {
              cov_1iohb0glu.b[16][1]++;
            }
            cov_1iohb0glu.s[51]++;

            if (typeof h === 'undefined') {
              cov_1iohb0glu.b[17][0]++;
              cov_1iohb0glu.s[52]++;
              // Duplicate 3rd argument if only 3 given.
              h = w;
            } else {
              cov_1iohb0glu.b[17][1]++;
              cov_1iohb0glu.s[53]++;
              if (h < 0) {
                cov_1iohb0glu.b[18][0]++;
                cov_1iohb0glu.s[54]++;
                h = Math.abs(h);
              } else {
                cov_1iohb0glu.b[18][1]++;
              }
            }

            var vals = (cov_1iohb0glu.s[55]++,
            _helpers.default.modeAdjust(x, y, w, h, this._renderer._ellipseMode));
            cov_1iohb0glu.s[56]++;
            this._renderer.ellipse([vals.x, vals.y, vals.w, vals.h, detailX]);

            //accessible Outputs
            cov_1iohb0glu.s[57]++;
            if (
              (cov_1iohb0glu.b[20][0]++, this._accessibleOutputs.grid) ||
              (cov_1iohb0glu.b[20][1]++, this._accessibleOutputs.text)
            ) {
              cov_1iohb0glu.b[19][0]++;
              cov_1iohb0glu.s[58]++;
              this._accsOutput('ellipse', [vals.x, vals.y, vals.w, vals.h]);
            } else {
              cov_1iohb0glu.b[19][1]++;
            }
            cov_1iohb0glu.s[59]++;

            return this;
          };

          /**
           * Draws a line (a direct path between two points) to the screen. If called with
           * only 4 parameters, it will draw a line in 2D with a default width of 1 pixel.
           * This width can be modified by using the <a href="#/p5/strokeWeight">
           * strokeWeight()</a> function. A line cannot be filled, therefore the <a
           * href="#/p5/fill">fill()</a> function will not affect the color of a line. So to
           * color a line, use the <a href="#/p5/stroke">stroke()</a> function.
           *
           * @method line
           * @param  {Number} x1 the x-coordinate of the first point
           * @param  {Number} y1 the y-coordinate of the first point
           * @param  {Number} x2 the x-coordinate of the second point
           * @param  {Number} y2 the y-coordinate of the second point
           * @chainable
           * @example
           * <div>
           * <code>
           * line(30, 20, 85, 75);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * line(30, 20, 85, 20);
           * stroke(126);
           * line(85, 20, 85, 75);
           * stroke(255);
           * line(85, 75, 30, 75);
           * </code>
           * </div>
           *
           * @alt
           * An example showing a line 78 pixels long running from mid-top to bottom-right of canvas.
           * An example showing 3 lines of various stroke sizes. Form top, bottom and right sides of a square.
           */

          /**
           * @method line
           * @param  {Number} x1
           * @param  {Number} y1
           * @param  {Number} z1 the z-coordinate of the first point
           * @param  {Number} x2
           * @param  {Number} y2
           * @param  {Number} z2 the z-coordinate of the second point
           * @chainable
           */ cov_1iohb0glu.s[60]++;
          _main.default.prototype.line = function() {
            cov_1iohb0glu.f[5]++;
            cov_1iohb0glu.s[61]++;
            for (
              var _len = arguments.length, args = new Array(_len), _key = 0;
              _key < _len;
              _key++
            ) {
              args[_key] = arguments[_key];
            }
            _main.default._validateParameters('line', args);
            cov_1iohb0glu.s[62]++;

            if (this._renderer._doStroke) {
              var _this$_renderer;
              cov_1iohb0glu.b[21][0]++;
              cov_1iohb0glu.s[63]++;
              (_this$_renderer = this._renderer).line.apply(_this$_renderer, args);
            } else {
              cov_1iohb0glu.b[21][1]++;
            }

            //accessible Outputs
            cov_1iohb0glu.s[64]++;
            if (
              (cov_1iohb0glu.b[23][0]++, this._accessibleOutputs.grid) ||
              (cov_1iohb0glu.b[23][1]++, this._accessibleOutputs.text)
            ) {
              cov_1iohb0glu.b[22][0]++;
              cov_1iohb0glu.s[65]++;
              this._accsOutput('line', args);
            } else {
              cov_1iohb0glu.b[22][1]++;
            }
            cov_1iohb0glu.s[66]++;

            return this;
          };

          /**
           * Draws a point, a coordinate in space at the dimension of one pixel.
           * The first parameter is the horizontal value for the point, the second
           * param is the vertical value for the point. The color of the point is
           * changed with the <a href="#/p5/stroke">stroke()</a> function. The size of the point
           * can be changed with the <a href="#/p5/strokeWeight">strokeWeight()</a> function.
           *
           * @method point
           * @param  {Number} x the x-coordinate
           * @param  {Number} y the y-coordinate
           * @param  {Number} [z] the z-coordinate (for WebGL mode)
           * @chainable
           * @example
           * <div>
           * <code>
           * point(30, 20);
           * point(85, 20);
           * point(85, 75);
           * point(30, 75);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * point(30, 20);
           * point(85, 20);
           * stroke('purple'); // Change the color
           * strokeWeight(10); // Make the points 10 pixels in size
           * point(85, 75);
           * point(30, 75);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * let a = createVector(10, 10);
           * point(a);
           * let b = createVector(10, 20);
           * point(b);
           * point(createVector(20, 10));
           * point(createVector(20, 20));
           * </code>
           * </div>
           *
           * @alt
           * 4 points centered in the middle-right of the canvas.
           * 2 large points and 2 large purple points centered in the middle-right of the canvas.
           * Vertices of a square of length 10 pixels towards the top-left of the canvas.
           */

          /**
           * @method point
           * @param {p5.Vector} coordinate_vector the coordinate vector
           * @chainable
           */ cov_1iohb0glu.s[67]++;
          _main.default.prototype.point = function() {
            cov_1iohb0glu.f[6]++;
            cov_1iohb0glu.s[68]++;
            for (
              var _len2 = arguments.length, args = new Array(_len2), _key2 = 0;
              _key2 < _len2;
              _key2++
            ) {
              args[_key2] = arguments[_key2];
            }
            _main.default._validateParameters('point', args);
            cov_1iohb0glu.s[69]++;

            if (this._renderer._doStroke) {
              cov_1iohb0glu.b[24][0]++;
              cov_1iohb0glu.s[70]++;
              if (
                (cov_1iohb0glu.b[26][0]++, args.length === 1) &&
                (cov_1iohb0glu.b[26][1]++, args[0] instanceof _main.default.Vector)
              ) {
                cov_1iohb0glu.b[25][0]++;
                cov_1iohb0glu.s[71]++;
                this._renderer.point.call(this._renderer, args[0].x, args[0].y, args[0].z);
              } else {
                var _this$_renderer2;
                cov_1iohb0glu.b[25][1]++;
                cov_1iohb0glu.s[72]++;
                (_this$_renderer2 = this._renderer).point.apply(_this$_renderer2, args);
                //accessible Outputs
                cov_1iohb0glu.s[73]++;
                if (
                  (cov_1iohb0glu.b[28][0]++, this._accessibleOutputs.grid) ||
                  (cov_1iohb0glu.b[28][1]++, this._accessibleOutputs.text)
                ) {
                  cov_1iohb0glu.b[27][0]++;
                  cov_1iohb0glu.s[74]++;
                  this._accsOutput('point', args);
                } else {
                  cov_1iohb0glu.b[27][1]++;
                }
              }
            } else {
              cov_1iohb0glu.b[24][1]++;
            }
            cov_1iohb0glu.s[75]++;

            return this;
          };

          /**
           * Draws a quad on the canvas. A quad is a quadrilateral, a four sided polygon. It is
           * similar to a rectangle, but the angles between its edges are not
           * constrained to ninety degrees. The first pair of parameters (x1,y1)
           * sets the first vertex and the subsequent pairs should proceed
           * clockwise or counter-clockwise around the defined shape.
           * z-arguments only work when quad() is used in WEBGL mode.
           *
           * @method quad
           * @param {Number} x1 the x-coordinate of the first point
           * @param {Number} y1 the y-coordinate of the first point
           * @param {Number} x2 the x-coordinate of the second point
           * @param {Number} y2 the y-coordinate of the second point
           * @param {Number} x3 the x-coordinate of the third point
           * @param {Number} y3 the y-coordinate of the third point
           * @param {Number} x4 the x-coordinate of the fourth point
           * @param {Number} y4 the y-coordinate of the fourth point
           * @param {Integer} [detailX] number of segments in the x-direction
           * @param {Integer} [detailY] number of segments in the y-direction
           * @chainable
           * @example
           * <div>
           * <code>
           * quad(38, 31, 86, 20, 69, 63, 30, 76);
           * </code>
           * </div>
           *
           * @alt
           *irregular white quadrilateral shape with black outline mid-right of canvas.
           */
          /**
           * @method quad
           * @param {Number} x1
           * @param {Number} y1
           * @param {Number} z1 the z-coordinate of the first point
           * @param {Number} x2
           * @param {Number} y2
           * @param {Number} z2 the z-coordinate of the second point
           * @param {Number} x3
           * @param {Number} y3
           * @param {Number} z3 the z-coordinate of the third point
           * @param {Number} x4
           * @param {Number} y4
           * @param {Number} z4 the z-coordinate of the fourth point
           * @param {Integer} [detailX]
           * @param {Integer} [detailY]
           * @chainable
           */ cov_1iohb0glu.s[76]++;
          _main.default.prototype.quad = function() {
            cov_1iohb0glu.f[7]++;
            cov_1iohb0glu.s[77]++;
            for (
              var _len3 = arguments.length, args = new Array(_len3), _key3 = 0;
              _key3 < _len3;
              _key3++
            ) {
              args[_key3] = arguments[_key3];
            }
            _main.default._validateParameters('quad', args);
            cov_1iohb0glu.s[78]++;

            if (
              (cov_1iohb0glu.b[30][0]++, this._renderer._doStroke) ||
              (cov_1iohb0glu.b[30][1]++, this._renderer._doFill)
            ) {
              cov_1iohb0glu.b[29][0]++;
              cov_1iohb0glu.s[79]++;
              if (
                (cov_1iohb0glu.b[32][0]++, this._renderer.isP3D) &&
                (cov_1iohb0glu.b[32][1]++, args.length <= 12)
              ) {
                cov_1iohb0glu.b[31][0]++;
                cov_1iohb0glu.s[80]++;
                // if 3D and we weren't passed 12 args, assume Z is 0
                // prettier-ignore
                this._renderer.quad.call(
      this._renderer,
      args[0], args[1], 0,
      args[2], args[3], 0,
      args[4], args[5], 0,
      args[6], args[7], 0,
      args[8], args[9]);
              } else {
                var _this$_renderer3;
                cov_1iohb0glu.b[31][1]++;
                cov_1iohb0glu.s[81]++;
                (_this$_renderer3 = this._renderer).quad.apply(_this$_renderer3, args);
                //accessibile outputs
                cov_1iohb0glu.s[82]++;
                if (
                  (cov_1iohb0glu.b[34][0]++, this._accessibleOutputs.grid) ||
                  (cov_1iohb0glu.b[34][1]++, this._accessibleOutputs.text)
                ) {
                  cov_1iohb0glu.b[33][0]++;
                  cov_1iohb0glu.s[83]++;
                  this._accsOutput('quadrilateral', args);
                } else {
                  cov_1iohb0glu.b[33][1]++;
                }
              }
            } else {
              cov_1iohb0glu.b[29][1]++;
            }
            cov_1iohb0glu.s[84]++;

            return this;
          };

          /**
           * Draws a rectangle on the canvas. A rectangle is a four-sided closed shape with
           * every angle at ninety degrees. By default, the first two parameters set
           * the location of the upper-left corner, the third sets the width, and the
           * fourth sets the height. The way these parameters are interpreted, may be
           * changed with the <a href="#/p5/rectMode">rectMode()</a> function.
           *
           * The fifth, sixth, seventh and eighth parameters, if specified,
           * determine corner radius for the top-left, top-right, lower-right and
           * lower-left corners, respectively. An omitted corner radius parameter is set
           * to the value of the previously specified radius value in the parameter list.
           *
           * @method rect
           * @param  {Number} x  x-coordinate of the rectangle.
           * @param  {Number} y  y-coordinate of the rectangle.
           * @param  {Number} w  width of the rectangle.
           * @param  {Number} [h]  height of the rectangle.
           * @param  {Number} [tl] optional radius of top-left corner.
           * @param  {Number} [tr] optional radius of top-right corner.
           * @param  {Number} [br] optional radius of bottom-right corner.
           * @param  {Number} [bl] optional radius of bottom-left corner.
           * @chainable
           * @example
           * <div>
           * <code>
           * // Draw a rectangle at location (30, 20) with a width and height of 55.
           * rect(30, 20, 55, 55);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // Draw a rectangle with rounded corners, each having a radius of 20.
           * rect(30, 20, 55, 55, 20);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // Draw a rectangle with rounded corners having the following radii:
           * // top-left = 20, top-right = 15, bottom-right = 10, bottom-left = 5.
           * rect(30, 20, 55, 55, 20, 15, 10, 5);
           * </code>
           * </div>
           *
           * @alt
           * 55x55 white rect with black outline in mid-right of canvas.
           * 55x55 white rect with black outline and rounded edges in mid-right of canvas.
           * 55x55 white rect with black outline and rounded edges of different radii.
           */

          /**
           * @method rect
           * @param  {Number} x
           * @param  {Number} y
           * @param  {Number} w
           * @param  {Number} h
           * @param  {Integer} [detailX] number of segments in the x-direction (for WebGL mode)
           * @param  {Integer} [detailY] number of segments in the y-direction (for WebGL mode)
           * @chainable
           */ cov_1iohb0glu.s[85]++;
          _main.default.prototype.rect = function() {
            cov_1iohb0glu.f[8]++;
            cov_1iohb0glu.s[86]++;
            _main.default._validateParameters('rect', arguments);
            cov_1iohb0glu.s[87]++;
            return this._renderRect.apply(this, arguments);
          };

          /**
           * Draws a square to the screen. A square is a four-sided shape with every angle
           * at ninety degrees, and equal side size. This function is a special case of the
           * rect() function, where the width and height are the same, and the parameter
           * is called "s" for side size. By default, the first two parameters set the
           * location of the upper-left corner, the third sets the side size of the square.
           * The way these parameters are interpreted, may be changed with the <a
           * href="#/p5/rectMode">rectMode()</a> function.
           *
           * The fourth, fifth, sixth and seventh parameters, if specified,
           * determine corner radius for the top-left, top-right, lower-right and
           * lower-left corners, respectively. An omitted corner radius parameter is set
           * to the value of the previously specified radius value in the parameter list.
           *
           * @method square
           * @param  {Number} x  x-coordinate of the square.
           * @param  {Number} y  y-coordinate of the square.
           * @param  {Number} s  side size of the square.
           * @param  {Number} [tl] optional radius of top-left corner.
           * @param  {Number} [tr] optional radius of top-right corner.
           * @param  {Number} [br] optional radius of bottom-right corner.
           * @param  {Number} [bl] optional radius of bottom-left corner.
           * @chainable
           * @example
           * <div>
           * <code>
           * // Draw a square at location (30, 20) with a side size of 55.
           * square(30, 20, 55);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // Draw a square with rounded corners, each having a radius of 20.
           * square(30, 20, 55, 20);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // Draw a square with rounded corners having the following radii:
           * // top-left = 20, top-right = 15, bottom-right = 10, bottom-left = 5.
           * square(30, 20, 55, 20, 15, 10, 5);
           * </code>
           * </div>
           *
           * @alt
           * 55x55 white square with black outline in mid-right of canvas.
           * 55x55 white square with black outline and rounded edges in mid-right of canvas.
           * 55x55 white square with black outline and rounded edges of different radii.
           */ cov_1iohb0glu.s[88]++;
          _main.default.prototype.square = function(x, y, s, tl, tr, br, bl) {
            cov_1iohb0glu.f[9]++;
            cov_1iohb0glu.s[89]++;
            _main.default._validateParameters('square', arguments);
            // duplicate width for height in case of square
            cov_1iohb0glu.s[90]++;
            return this._renderRect.call(this, x, y, s, s, tl, tr, br, bl);
          };

          // internal method to have renderer draw a rectangle
          cov_1iohb0glu.s[91]++;
          _main.default.prototype._renderRect = function() {
            cov_1iohb0glu.f[10]++;
            cov_1iohb0glu.s[92]++;
            if (
              (cov_1iohb0glu.b[36][0]++, this._renderer._doStroke) ||
              (cov_1iohb0glu.b[36][1]++, this._renderer._doFill)
            ) {
              cov_1iohb0glu.b[35][0]++;
              cov_1iohb0glu.s[93]++;
              // duplicate width for height in case only 3 arguments is provided
              if (arguments.length === 3) {
                cov_1iohb0glu.b[37][0]++;
                cov_1iohb0glu.s[94]++;
                arguments[3] = arguments[2];
              } else {
                cov_1iohb0glu.b[37][1]++;
              }
              var vals = (cov_1iohb0glu.s[95]++,
              _helpers.default.modeAdjust(
                arguments[0],
                arguments[1],
                arguments[2],
                arguments[3],
                this._renderer._rectMode
              ));

              var args = (cov_1iohb0glu.s[96]++, [vals.x, vals.y, vals.w, vals.h]);
              // append the additional arguments (either cornder radii, or
              // segment details) to the argument list
              cov_1iohb0glu.s[97]++;
              for (var i = (cov_1iohb0glu.s[98]++, 4); i < arguments.length; i++) {
                cov_1iohb0glu.s[99]++;
                args[i] = arguments[i];
              }
              cov_1iohb0glu.s[100]++;
              this._renderer.rect(args);

              //accessible outputs
              cov_1iohb0glu.s[101]++;
              if (
                (cov_1iohb0glu.b[39][0]++, this._accessibleOutputs.grid) ||
                (cov_1iohb0glu.b[39][1]++, this._accessibleOutputs.text)
              ) {
                cov_1iohb0glu.b[38][0]++;
                cov_1iohb0glu.s[102]++;
                this._accsOutput('rectangle', [vals.x, vals.y, vals.w, vals.h]);
              } else {
                cov_1iohb0glu.b[38][1]++;
              }
            } else {
              cov_1iohb0glu.b[35][1]++;
            }
            cov_1iohb0glu.s[103]++;

            return this;
          };

          /**
           * Draws a triangle to the canvas. A triangle is a plane created by connecting
           * three points. The first two arguments specify the first point, the middle two
           * arguments specify the second point, and the last two arguments specify the
           * third point.
           *
           * @method triangle
           * @param  {Number} x1 x-coordinate of the first point
           * @param  {Number} y1 y-coordinate of the first point
           * @param  {Number} x2 x-coordinate of the second point
           * @param  {Number} y2 y-coordinate of the second point
           * @param  {Number} x3 x-coordinate of the third point
           * @param  {Number} y3 y-coordinate of the third point
           * @chainable
           * @example
           * <div>
           * <code>
           * triangle(30, 75, 58, 20, 86, 75);
           * </code>
           * </div>
           *
           *@alt
           * white triangle with black outline in mid-right of canvas.
           */ cov_1iohb0glu.s[104]++;
          _main.default.prototype.triangle = function() {
            cov_1iohb0glu.f[11]++;
            cov_1iohb0glu.s[105]++;
            for (
              var _len4 = arguments.length, args = new Array(_len4), _key4 = 0;
              _key4 < _len4;
              _key4++
            ) {
              args[_key4] = arguments[_key4];
            }
            _main.default._validateParameters('triangle', args);
            cov_1iohb0glu.s[106]++;

            if (
              (cov_1iohb0glu.b[41][0]++, this._renderer._doStroke) ||
              (cov_1iohb0glu.b[41][1]++, this._renderer._doFill)
            ) {
              cov_1iohb0glu.b[40][0]++;
              cov_1iohb0glu.s[107]++;
              this._renderer.triangle(args);
            } else {
              cov_1iohb0glu.b[40][1]++;
            }

            //accessible outputs
            cov_1iohb0glu.s[108]++;
            if (
              (cov_1iohb0glu.b[43][0]++, this._accessibleOutputs.grid) ||
              (cov_1iohb0glu.b[43][1]++, this._accessibleOutputs.text)
            ) {
              cov_1iohb0glu.b[42][0]++;
              cov_1iohb0glu.s[109]++;
              this._accsOutput('triangle', args);
            } else {
              cov_1iohb0glu.b[42][1]++;
            }
            cov_1iohb0glu.s[110]++;

            return this;
          };
          var _default = _main.default;
          exports.default = _default;
        },
        {
          '../constants': 272,
          '../friendly_errors/fes_core': 275,
          '../friendly_errors/file_errors': 276,
          '../friendly_errors/validate_params': 278,
          '../helpers': 279,
          '../main': 283,
          'core-js/modules/es.array.slice': 178
        }
      ],
      291: [
        function(_dereq_, module, exports) {
          'use strict';
          function _typeof(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof = function _typeof(obj) {
                return typeof obj;
              };
            } else {
              _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof(obj);
          }
          var cov_1foxivj4k4 = (function() {
            var path = '/Users/outofambit/src/p5.js/src/core/shape/attributes.js';
            var hash = '7343cc4e516c5f1a5925713e70df8ac36e44f829';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/core/shape/attributes.js',
              statementMap: {
                '0': { start: { line: 68, column: 0 }, end: { line: 79, column: 2 } },
                '1': { start: { line: 69, column: 2 }, end: { line: 69, column: 51 } },
                '2': { start: { line: 70, column: 2 }, end: { line: 77, column: 3 } },
                '3': { start: { line: 76, column: 4 }, end: { line: 76, column: 36 } },
                '4': { start: { line: 78, column: 2 }, end: { line: 78, column: 14 } },
                '5': { start: { line: 105, column: 0 }, end: { line: 113, column: 2 } },
                '6': { start: { line: 106, column: 2 }, end: { line: 106, column: 41 } },
                '7': { start: { line: 107, column: 2 }, end: { line: 111, column: 3 } },
                '8': { start: { line: 108, column: 4 }, end: { line: 110, column: 5 } },
                '9': { start: { line: 109, column: 6 }, end: { line: 109, column: 56 } },
                '10': { start: { line: 112, column: 2 }, end: { line: 112, column: 14 } },
                '11': { start: { line: 171, column: 0 }, end: { line: 182, column: 2 } },
                '12': { start: { line: 172, column: 2 }, end: { line: 172, column: 48 } },
                '13': { start: { line: 173, column: 2 }, end: { line: 180, column: 3 } },
                '14': { start: { line: 179, column: 4 }, end: { line: 179, column: 33 } },
                '15': { start: { line: 181, column: 2 }, end: { line: 181, column: 14 } },
                '16': { start: { line: 209, column: 0 }, end: { line: 217, column: 2 } },
                '17': { start: { line: 210, column: 2 }, end: { line: 210, column: 40 } },
                '18': { start: { line: 211, column: 2 }, end: { line: 215, column: 3 } },
                '19': { start: { line: 212, column: 4 }, end: { line: 214, column: 5 } },
                '20': { start: { line: 213, column: 6 }, end: { line: 213, column: 55 } },
                '21': { start: { line: 216, column: 2 }, end: { line: 216, column: 14 } },
                '22': { start: { line: 247, column: 0 }, end: { line: 257, column: 2 } },
                '23': { start: { line: 248, column: 2 }, end: { line: 248, column: 49 } },
                '24': { start: { line: 249, column: 2 }, end: { line: 255, column: 3 } },
                '25': { start: { line: 254, column: 4 }, end: { line: 254, column: 34 } },
                '26': { start: { line: 256, column: 2 }, end: { line: 256, column: 14 } },
                '27': { start: { line: 319, column: 0 }, end: { line: 329, column: 2 } },
                '28': { start: { line: 320, column: 2 }, end: { line: 320, column: 50 } },
                '29': { start: { line: 321, column: 2 }, end: { line: 327, column: 3 } },
                '30': { start: { line: 326, column: 4 }, end: { line: 326, column: 36 } },
                '31': { start: { line: 328, column: 2 }, end: { line: 328, column: 14 } },
                '32': { start: { line: 354, column: 0 }, end: { line: 358, column: 2 } },
                '33': { start: { line: 355, column: 2 }, end: { line: 355, column: 52 } },
                '34': { start: { line: 356, column: 2 }, end: { line: 356, column: 33 } },
                '35': { start: { line: 357, column: 2 }, end: { line: 357, column: 14 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 68, column: 27 }, end: { line: 68, column: 28 } },
                  loc: { start: { line: 68, column: 39 }, end: { line: 79, column: 1 } },
                  line: 68
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: {
                    start: { line: 105, column: 24 },
                    end: { line: 105, column: 25 }
                  },
                  loc: { start: { line: 105, column: 35 }, end: { line: 113, column: 1 } },
                  line: 105
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 171, column: 24 },
                    end: { line: 171, column: 25 }
                  },
                  loc: { start: { line: 171, column: 36 }, end: { line: 182, column: 1 } },
                  line: 171
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 209, column: 22 },
                    end: { line: 209, column: 23 }
                  },
                  loc: { start: { line: 209, column: 33 }, end: { line: 217, column: 1 } },
                  line: 209
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 247, column: 25 },
                    end: { line: 247, column: 26 }
                  },
                  loc: { start: { line: 247, column: 39 }, end: { line: 257, column: 1 } },
                  line: 247
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 319, column: 26 },
                    end: { line: 319, column: 27 }
                  },
                  loc: { start: { line: 319, column: 41 }, end: { line: 329, column: 1 } },
                  line: 319
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 354, column: 28 },
                    end: { line: 354, column: 29 }
                  },
                  loc: { start: { line: 354, column: 40 }, end: { line: 358, column: 1 } },
                  line: 354
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 70, column: 2 }, end: { line: 77, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 70, column: 2 }, end: { line: 77, column: 3 } },
                    { start: { line: 70, column: 2 }, end: { line: 77, column: 3 } }
                  ],
                  line: 70
                },
                '1': {
                  loc: { start: { line: 71, column: 4 }, end: { line: 74, column: 26 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 71, column: 4 }, end: { line: 71, column: 26 } },
                    { start: { line: 72, column: 4 }, end: { line: 72, column: 27 } },
                    { start: { line: 73, column: 4 }, end: { line: 73, column: 26 } },
                    { start: { line: 74, column: 4 }, end: { line: 74, column: 26 } }
                  ],
                  line: 71
                },
                '2': {
                  loc: { start: { line: 107, column: 2 }, end: { line: 111, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 107, column: 2 }, end: { line: 111, column: 3 } },
                    { start: { line: 107, column: 2 }, end: { line: 111, column: 3 } }
                  ],
                  line: 107
                },
                '3': {
                  loc: { start: { line: 108, column: 4 }, end: { line: 110, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 108, column: 4 }, end: { line: 110, column: 5 } },
                    { start: { line: 108, column: 4 }, end: { line: 110, column: 5 } }
                  ],
                  line: 108
                },
                '4': {
                  loc: { start: { line: 173, column: 2 }, end: { line: 180, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 173, column: 2 }, end: { line: 180, column: 3 } },
                    { start: { line: 173, column: 2 }, end: { line: 180, column: 3 } }
                  ],
                  line: 173
                },
                '5': {
                  loc: { start: { line: 174, column: 4 }, end: { line: 177, column: 26 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 174, column: 4 }, end: { line: 174, column: 26 } },
                    { start: { line: 175, column: 4 }, end: { line: 175, column: 27 } },
                    { start: { line: 176, column: 4 }, end: { line: 176, column: 26 } },
                    { start: { line: 177, column: 4 }, end: { line: 177, column: 26 } }
                  ],
                  line: 174
                },
                '6': {
                  loc: { start: { line: 211, column: 2 }, end: { line: 215, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 211, column: 2 }, end: { line: 215, column: 3 } },
                    { start: { line: 211, column: 2 }, end: { line: 215, column: 3 } }
                  ],
                  line: 211
                },
                '7': {
                  loc: { start: { line: 212, column: 4 }, end: { line: 214, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 212, column: 4 }, end: { line: 214, column: 5 } },
                    { start: { line: 212, column: 4 }, end: { line: 214, column: 5 } }
                  ],
                  line: 212
                },
                '8': {
                  loc: { start: { line: 249, column: 2 }, end: { line: 255, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 249, column: 2 }, end: { line: 255, column: 3 } },
                    { start: { line: 249, column: 2 }, end: { line: 255, column: 3 } }
                  ],
                  line: 249
                },
                '9': {
                  loc: { start: { line: 250, column: 4 }, end: { line: 252, column: 29 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 250, column: 4 }, end: { line: 250, column: 27 } },
                    { start: { line: 251, column: 4 }, end: { line: 251, column: 28 } },
                    { start: { line: 252, column: 4 }, end: { line: 252, column: 29 } }
                  ],
                  line: 250
                },
                '10': {
                  loc: { start: { line: 321, column: 2 }, end: { line: 327, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 321, column: 2 }, end: { line: 327, column: 3 } },
                    { start: { line: 321, column: 2 }, end: { line: 327, column: 3 } }
                  ],
                  line: 321
                },
                '11': {
                  loc: { start: { line: 322, column: 4 }, end: { line: 324, column: 28 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 322, column: 4 }, end: { line: 322, column: 28 } },
                    { start: { line: 323, column: 4 }, end: { line: 323, column: 28 } },
                    { start: { line: 324, column: 4 }, end: { line: 324, column: 28 } }
                  ],
                  line: 322
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0
              },
              f: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0 },
              b: {
                '0': [0, 0],
                '1': [0, 0, 0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0, 0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0, 0],
                '10': [0, 0],
                '11': [0, 0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '7343cc4e516c5f1a5925713e70df8ac36e44f829'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../main'));
          var constants = _interopRequireWildcard(_dereq_('../constants'));
          function _getRequireWildcardCache() {
            if (typeof WeakMap !== 'function') return null;
            var cache = new WeakMap();
            _getRequireWildcardCache = function _getRequireWildcardCache() {
              return cache;
            };
            return cache;
          }
          function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
              return obj;
            }
            if (obj === null || (_typeof(obj) !== 'object' && typeof obj !== 'function')) {
              return { default: obj };
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
              return cache.get(obj);
            }
            var newObj = {};
            var hasPropertyDescriptor =
              Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
              if (Object.prototype.hasOwnProperty.call(obj, key)) {
                var desc = hasPropertyDescriptor
                  ? Object.getOwnPropertyDescriptor(obj, key)
                  : null;
                if (desc && (desc.get || desc.set)) {
                  Object.defineProperty(newObj, key, desc);
                } else {
                  newObj[key] = obj[key];
                }
              }
            }
            newObj.default = obj;
            if (cache) {
              cache.set(obj, newObj);
            }
            return newObj;
          }
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_1foxivj4k4.s[0]++;

          /**
           * Modifies the location from which ellipses are drawn by changing the way in
           * which parameters given to <a href="#/p5/ellipse">ellipse()</a>,
           * <a href="#/p5/circle">circle()</a> and <a href="#/p5/arc">arc()</a> are interpreted.
           *
           * The default mode is CENTER, in which the first two parameters are interpreted
           * as the shape's center point's x and y coordinates respectively, while the third
           * and fourth parameters are its width and height.
           *
           * ellipseMode(RADIUS) also uses the first two parameters as the shape's center
           * point's x and y coordinates, but uses the third and fourth parameters to
           * specify half of the shapes's width and height.
           *
           * ellipseMode(CORNER) interprets the first two parameters as the upper-left
           * corner of the shape, while the third and fourth parameters are its width
           * and height.
           *
           * ellipseMode(CORNERS) interprets the first two parameters as the location of
           * one corner of the ellipse's bounding box, and the third and fourth parameters
           * as the location of the opposite corner.
           *
           * The parameter to this method must be written in ALL CAPS because they are
           * predefined as constants in ALL CAPS and Javascript is a case-sensitive language.
           *
           * @method ellipseMode
           * @param  {Constant} mode either CENTER, RADIUS, CORNER, or CORNERS
           * @chainable
           * @example
           * <div>
           * <code>
           * // Example showing RADIUS and CENTER ellipsemode with 2 overlaying ellipses
           * ellipseMode(RADIUS);
           * fill(255);
           * ellipse(50, 50, 30, 30); // Outer white ellipse
           * ellipseMode(CENTER);
           * fill(100);
           * ellipse(50, 50, 30, 30); // Inner gray ellipse
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // Example showing CORNER and CORNERS ellipseMode with 2 overlaying ellipses
           * ellipseMode(CORNER);
           * fill(255);
           * ellipse(25, 25, 50, 50); // Outer white ellipse
           * ellipseMode(CORNERS);
           * fill(100);
           * ellipse(25, 25, 50, 50); // Inner gray ellipse
           * </code>
           * </div>
           *
           * @alt
           * 60x60 white ellipse and 30x30 grey ellipse with black outlines at center.
           * 60x60 white ellipse and 30x30 grey ellipse top-right with black outlines.
           */
          _main.default.prototype.ellipseMode = function(m) {
            cov_1foxivj4k4.f[0]++;
            cov_1foxivj4k4.s[1]++;
            _main.default._validateParameters('ellipseMode', arguments);
            cov_1foxivj4k4.s[2]++;
            if (
              (cov_1foxivj4k4.b[1][0]++, m === constants.CORNER) ||
              (cov_1foxivj4k4.b[1][1]++, m === constants.CORNERS) ||
              (cov_1foxivj4k4.b[1][2]++, m === constants.RADIUS) ||
              (cov_1foxivj4k4.b[1][3]++, m === constants.CENTER)
            ) {
              cov_1foxivj4k4.b[0][0]++;
              cov_1foxivj4k4.s[3]++;
              this._renderer._ellipseMode = m;
            } else {
              cov_1foxivj4k4.b[0][1]++;
            }
            cov_1foxivj4k4.s[4]++;
            return this;
          };

          /**
           * Draws all geometry with jagged (aliased) edges. Note that <a href="#/p5/smooth">smooth()</a> is
           * active by default in 2D mode, so it is necessary to call <a href="#/p5/noSmooth">noSmooth()</a> to disable
           * smoothing of geometry, images, and fonts. In 3D mode, <a href="#/p5/noSmooth">noSmooth()</a> is enabled
           * by default, so it is necessary to call <a href="#/p5/smooth">smooth()</a> if you would like
           * smooth (antialiased) edges on your geometry.
           *
           * @method noSmooth
           * @chainable
           * @example
           * <div>
           * <code>
           * background(0);
           * noStroke();
           * smooth();
           * ellipse(30, 48, 36, 36);
           * noSmooth();
           * ellipse(70, 48, 36, 36);
           * </code>
           * </div>
           *
           * @alt
           * 2 pixelated 36x36 white ellipses to left & right of center, black background
           */ cov_1foxivj4k4.s[5]++;
          _main.default.prototype.noSmooth = function() {
            cov_1foxivj4k4.f[1]++;
            cov_1foxivj4k4.s[6]++;
            this.setAttributes('antialias', false);
            cov_1foxivj4k4.s[7]++;
            if (!this._renderer.isP3D) {
              cov_1foxivj4k4.b[2][0]++;
              cov_1foxivj4k4.s[8]++;
              if ('imageSmoothingEnabled' in this.drawingContext) {
                cov_1foxivj4k4.b[3][0]++;
                cov_1foxivj4k4.s[9]++;
                this.drawingContext.imageSmoothingEnabled = false;
              } else {
                cov_1foxivj4k4.b[3][1]++;
              }
            } else {
              cov_1foxivj4k4.b[2][1]++;
            }
            cov_1foxivj4k4.s[10]++;
            return this;
          };

          /**
           * Modifies the location from which rectangles are drawn by changing the way
           * in which parameters given to <a href="#/p5/rect">rect()</a> are interpreted.
           *
           * The default mode is CORNER, which interprets the first two parameters as the
           * upper-left corner of the shape, while the third and fourth parameters are its
           * width and height.
           *
           * rectMode(CORNERS) interprets the first two parameters as the location of
           * one of the corners, and the third and fourth parameters as the location of
           * the diagonally opposite corner. Note, the rectangle is drawn between the
           * coordinates, so it is not neccesary that the first corner be the upper left
           * corner.
           *
           * rectMode(CENTER) interprets the first two parameters as the shape's center
           * point, while the third and fourth parameters are its width and height.
           *
           * rectMode(RADIUS) also uses the first two parameters as the shape's center
           * point, but uses the third and fourth parameters to specify half of the shape's
           * width and height respectively.
           *
           * The parameter to this method must be written in ALL CAPS because they are
           * predefined as constants in ALL CAPS and Javascript is a case-sensitive language.
           *
           * @method rectMode
           * @param  {Constant} mode either CORNER, CORNERS, CENTER, or RADIUS
           * @chainable
           * @example
           * <div>
           * <code>
           * rectMode(CORNER);
           * fill(255);
           * rect(25, 25, 50, 50); // Draw white rectangle using CORNER mode
           *
           * rectMode(CORNERS);
           * fill(100);
           * rect(25, 25, 50, 50); // Draw gray rectangle using CORNERS mode
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * rectMode(RADIUS);
           * fill(255);
           * rect(50, 50, 30, 30); // Draw white rectangle using RADIUS mode
           *
           * rectMode(CENTER);
           * fill(100);
           * rect(50, 50, 30, 30); // Draw gray rectangle using CENTER mode
           * </code>
           * </div>
           *
           * @alt
           * 50x50 white rect at center and 25x25 grey rect in the top left of the other.
           * 50x50 white rect at center and 25x25 grey rect in the center of the other.
           */ cov_1foxivj4k4.s[11]++;
          _main.default.prototype.rectMode = function(m) {
            cov_1foxivj4k4.f[2]++;
            cov_1foxivj4k4.s[12]++;
            _main.default._validateParameters('rectMode', arguments);
            cov_1foxivj4k4.s[13]++;
            if (
              (cov_1foxivj4k4.b[5][0]++, m === constants.CORNER) ||
              (cov_1foxivj4k4.b[5][1]++, m === constants.CORNERS) ||
              (cov_1foxivj4k4.b[5][2]++, m === constants.RADIUS) ||
              (cov_1foxivj4k4.b[5][3]++, m === constants.CENTER)
            ) {
              cov_1foxivj4k4.b[4][0]++;
              cov_1foxivj4k4.s[14]++;
              this._renderer._rectMode = m;
            } else {
              cov_1foxivj4k4.b[4][1]++;
            }
            cov_1foxivj4k4.s[15]++;
            return this;
          };

          /**
           * Draws all geometry with smooth (anti-aliased) edges. <a href="#/p5/smooth">smooth()</a> will also
           * improve image quality of resized images. Note that <a href="#/p5/smooth">smooth()</a> is active by
           * default in 2D mode; <a href="#/p5/noSmooth">noSmooth()</a> can be used to disable smoothing of geometry,
           * images, and fonts. In 3D mode, <a href="#/p5/noSmooth">noSmooth()</a> is enabled
           * by default, so it is necessary to call <a href="#/p5/smooth">smooth()</a> if you would like
           * smooth (antialiased) edges on your geometry.
           *
           * @method smooth
           * @chainable
           * @example
           * <div>
           * <code>
           * background(0);
           * noStroke();
           * smooth();
           * ellipse(30, 48, 36, 36);
           * noSmooth();
           * ellipse(70, 48, 36, 36);
           * </code>
           * </div>
           *
           * @alt
           * 2 pixelated 36x36 white ellipses one left one right of center. On black.
           */ cov_1foxivj4k4.s[16]++;
          _main.default.prototype.smooth = function() {
            cov_1foxivj4k4.f[3]++;
            cov_1foxivj4k4.s[17]++;
            this.setAttributes('antialias', true);
            cov_1foxivj4k4.s[18]++;
            if (!this._renderer.isP3D) {
              cov_1foxivj4k4.b[6][0]++;
              cov_1foxivj4k4.s[19]++;
              if ('imageSmoothingEnabled' in this.drawingContext) {
                cov_1foxivj4k4.b[7][0]++;
                cov_1foxivj4k4.s[20]++;
                this.drawingContext.imageSmoothingEnabled = true;
              } else {
                cov_1foxivj4k4.b[7][1]++;
              }
            } else {
              cov_1foxivj4k4.b[6][1]++;
            }
            cov_1foxivj4k4.s[21]++;
            return this;
          };

          /**
           * Sets the style for rendering line endings. These ends are either rounded,
           * squared or extended, each of which specified with the corresponding
           * parameters: ROUND, SQUARE and PROJECT. The default cap is ROUND.
           *
           * The parameter to this method must be written in ALL CAPS because they are
           * predefined as constants in ALL CAPS and Javascript is a case-sensitive language.
           *
           * @method strokeCap
           * @param  {Constant} cap either ROUND, SQUARE or PROJECT
           * @chainable
           * @example
           * <div>
           * <code>
           * // Example of different strokeCaps
           * strokeWeight(12.0);
           * strokeCap(ROUND);
           * line(20, 30, 80, 30);
           * strokeCap(SQUARE);
           * line(20, 50, 80, 50);
           * strokeCap(PROJECT);
           * line(20, 70, 80, 70);
           * </code>
           * </div>
           *
           * @alt
           * 3 lines. Top line: rounded ends, mid: squared, bottom:longer squared ends.
           */ cov_1foxivj4k4.s[22]++;
          _main.default.prototype.strokeCap = function(cap) {
            cov_1foxivj4k4.f[4]++;
            cov_1foxivj4k4.s[23]++;
            _main.default._validateParameters('strokeCap', arguments);
            cov_1foxivj4k4.s[24]++;
            if (
              (cov_1foxivj4k4.b[9][0]++, cap === constants.ROUND) ||
              (cov_1foxivj4k4.b[9][1]++, cap === constants.SQUARE) ||
              (cov_1foxivj4k4.b[9][2]++, cap === constants.PROJECT)
            ) {
              cov_1foxivj4k4.b[8][0]++;
              cov_1foxivj4k4.s[25]++;
              this._renderer.strokeCap(cap);
            } else {
              cov_1foxivj4k4.b[8][1]++;
            }
            cov_1foxivj4k4.s[26]++;
            return this;
          };

          /**
           * Sets the style of the joints which connect line segments. These joints
           * are either mitered, beveled or rounded and specified with the
           * corresponding parameters MITER, BEVEL and ROUND. The default joint is
           * MITER.
           *
           * The parameter to this method must be written in ALL CAPS because they are
           * predefined as constants in ALL CAPS and Javascript is a case-sensitive language.
           *
           * @method strokeJoin
           * @param  {Constant} join either MITER, BEVEL, ROUND
           * @chainable
           * @example
           * <div>
           * <code>
           * // Example of MITER type of joints
           * noFill();
           * strokeWeight(10.0);
           * strokeJoin(MITER);
           * beginShape();
           * vertex(35, 20);
           * vertex(65, 50);
           * vertex(35, 80);
           * endShape();
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // Example of BEVEL type of joints
           * noFill();
           * strokeWeight(10.0);
           * strokeJoin(BEVEL);
           * beginShape();
           * vertex(35, 20);
           * vertex(65, 50);
           * vertex(35, 80);
           * endShape();
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // Example of ROUND type of joints
           * noFill();
           * strokeWeight(10.0);
           * strokeJoin(ROUND);
           * beginShape();
           * vertex(35, 20);
           * vertex(65, 50);
           * vertex(35, 80);
           * endShape();
           * </code>
           * </div>
           *
           * @alt
           * Right-facing arrowhead shape with pointed tip in center of canvas.
           * Right-facing arrowhead shape with flat tip in center of canvas.
           * Right-facing arrowhead shape with rounded tip in center of canvas.
           */ cov_1foxivj4k4.s[27]++;
          _main.default.prototype.strokeJoin = function(join) {
            cov_1foxivj4k4.f[5]++;
            cov_1foxivj4k4.s[28]++;
            _main.default._validateParameters('strokeJoin', arguments);
            cov_1foxivj4k4.s[29]++;
            if (
              (cov_1foxivj4k4.b[11][0]++, join === constants.ROUND) ||
              (cov_1foxivj4k4.b[11][1]++, join === constants.BEVEL) ||
              (cov_1foxivj4k4.b[11][2]++, join === constants.MITER)
            ) {
              cov_1foxivj4k4.b[10][0]++;
              cov_1foxivj4k4.s[30]++;
              this._renderer.strokeJoin(join);
            } else {
              cov_1foxivj4k4.b[10][1]++;
            }
            cov_1foxivj4k4.s[31]++;
            return this;
          };

          /**
           * Sets the width of the stroke used for lines, points and the border around
           * shapes. All widths are set in units of pixels.
           *
           * @method strokeWeight
           * @param  {Number} weight the weight of the stroke (in pixels)
           * @chainable
           * @example
           * <div>
           * <code>
           * // Example of different stroke weights
           * strokeWeight(1); // Default
           * line(20, 20, 80, 20);
           * strokeWeight(4); // Thicker
           * line(20, 40, 80, 40);
           * strokeWeight(10); // Beastly
           * line(20, 70, 80, 70);
           * </code>
           * </div>
           *
           * @alt
           * 3 horizontal black lines. Top line: thin, mid: medium, bottom:thick.
           */ cov_1foxivj4k4.s[32]++;
          _main.default.prototype.strokeWeight = function(w) {
            cov_1foxivj4k4.f[6]++;
            cov_1foxivj4k4.s[33]++;
            _main.default._validateParameters('strokeWeight', arguments);
            cov_1foxivj4k4.s[34]++;
            this._renderer.strokeWeight(w);
            cov_1foxivj4k4.s[35]++;
            return this;
          };
          var _default = _main.default;
          exports.default = _default;
        },
        { '../constants': 272, '../main': 283 }
      ],
      292: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_y9op1erj6 = (function() {
            var path = '/Users/outofambit/src/p5.js/src/core/shape/curves.js';
            var hash = '67ef676b1e1e8e03dc1b602cfa430bb2ba8e12a5';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/core/shape/curves.js',
              statementMap: {
                '0': { start: { line: 78, column: 0 }, end: { line: 90, column: 2 } },
                '1': { start: { line: 79, column: 2 }, end: { line: 79, column: 41 } },
                '2': { start: { line: 83, column: 2 }, end: { line: 85, column: 3 } },
                '3': { start: { line: 84, column: 4 }, end: { line: 84, column: 16 } },
                '4': { start: { line: 87, column: 2 }, end: { line: 87, column: 33 } },
                '5': { start: { line: 89, column: 2 }, end: { line: 89, column: 14 } },
                '6': { start: { line: 124, column: 0 }, end: { line: 128, column: 2 } },
                '7': { start: { line: 125, column: 2 }, end: { line: 125, column: 52 } },
                '8': { start: { line: 126, column: 2 }, end: { line: 126, column: 25 } },
                '9': { start: { line: 127, column: 2 }, end: { line: 127, column: 14 } },
                '10': { start: { line: 173, column: 0 }, end: { line: 183, column: 2 } },
                '11': { start: { line: 174, column: 2 }, end: { line: 174, column: 51 } },
                '12': { start: { line: 176, column: 20 }, end: { line: 176, column: 25 } },
                '13': { start: { line: 177, column: 2 }, end: { line: 182, column: 4 } },
                '14': { start: { line: 250, column: 0 }, end: { line: 262, column: 2 } },
                '15': { start: { line: 251, column: 2 }, end: { line: 251, column: 53 } },
                '16': { start: { line: 253, column: 20 }, end: { line: 253, column: 25 } },
                '17': { start: { line: 254, column: 2 }, end: { line: 261, column: 4 } },
                '18': { start: { line: 348, column: 0 }, end: { line: 356, column: 2 } },
                '19': { start: { line: 349, column: 2 }, end: { line: 349, column: 40 } },
                '20': { start: { line: 351, column: 2 }, end: { line: 353, column: 3 } },
                '21': { start: { line: 352, column: 4 }, end: { line: 352, column: 34 } },
                '22': { start: { line: 355, column: 2 }, end: { line: 355, column: 14 } },
                '23': { start: { line: 388, column: 0 }, end: { line: 396, column: 2 } },
                '24': { start: { line: 389, column: 2 }, end: { line: 389, column: 51 } },
                '25': { start: { line: 390, column: 2 }, end: { line: 394, column: 3 } },
                '26': { start: { line: 391, column: 4 }, end: { line: 391, column: 26 } },
                '27': { start: { line: 393, column: 4 }, end: { line: 393, column: 26 } },
                '28': { start: { line: 395, column: 2 }, end: { line: 395, column: 14 } },
                '29': { start: { line: 438, column: 0 }, end: { line: 442, column: 2 } },
                '30': { start: { line: 439, column: 2 }, end: { line: 439, column: 54 } },
                '31': { start: { line: 440, column: 2 }, end: { line: 440, column: 37 } },
                '32': { start: { line: 441, column: 2 }, end: { line: 441, column: 14 } },
                '33': { start: { line: 481, column: 0 }, end: { line: 491, column: 2 } },
                '34': { start: { line: 482, column: 2 }, end: { line: 482, column: 50 } },
                '35': { start: { line: 484, column: 13 }, end: { line: 484, column: 22 } },
                '36': { start: { line: 485, column: 9 }, end: { line: 485, column: 14 } },
                '37': { start: { line: 486, column: 9 }, end: { line: 486, column: 33 } },
                '38': { start: { line: 487, column: 9 }, end: { line: 487, column: 34 } },
                '39': { start: { line: 488, column: 9 }, end: { line: 488, column: 39 } },
                '40': { start: { line: 489, column: 9 }, end: { line: 489, column: 28 } },
                '41': { start: { line: 490, column: 2 }, end: { line: 490, column: 43 } },
                '42': { start: { line: 528, column: 0 }, end: { line: 537, column: 2 } },
                '43': { start: { line: 529, column: 2 }, end: { line: 529, column: 52 } },
                '44': { start: { line: 531, column: 13 }, end: { line: 531, column: 18 } },
                '45': { start: { line: 532, column: 9 }, end: { line: 532, column: 34 } },
                '46': { start: { line: 533, column: 9 }, end: { line: 533, column: 27 } },
                '47': { start: { line: 534, column: 9 }, end: { line: 534, column: 34 } },
                '48': { start: { line: 535, column: 9 }, end: { line: 535, column: 23 } },
                '49': { start: { line: 536, column: 2 }, end: { line: 536, column: 43 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 78, column: 22 }, end: { line: 78, column: 23 } },
                  loc: { start: { line: 78, column: 40 }, end: { line: 90, column: 1 } },
                  line: 78
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: {
                    start: { line: 124, column: 28 },
                    end: { line: 124, column: 29 }
                  },
                  loc: { start: { line: 124, column: 40 }, end: { line: 128, column: 1 } },
                  line: 124
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 173, column: 27 },
                    end: { line: 173, column: 28 }
                  },
                  loc: { start: { line: 173, column: 51 }, end: { line: 183, column: 1 } },
                  line: 173
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 250, column: 29 },
                    end: { line: 250, column: 30 }
                  },
                  loc: { start: { line: 250, column: 53 }, end: { line: 262, column: 1 } },
                  line: 250
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 348, column: 21 },
                    end: { line: 348, column: 22 }
                  },
                  loc: { start: { line: 348, column: 39 }, end: { line: 356, column: 1 } },
                  line: 348
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 388, column: 27 },
                    end: { line: 388, column: 28 }
                  },
                  loc: { start: { line: 388, column: 39 }, end: { line: 396, column: 1 } },
                  line: 388
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 438, column: 30 },
                    end: { line: 438, column: 31 }
                  },
                  loc: { start: { line: 438, column: 42 }, end: { line: 442, column: 1 } },
                  line: 438
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 481, column: 26 },
                    end: { line: 481, column: 27 }
                  },
                  loc: { start: { line: 481, column: 50 }, end: { line: 491, column: 1 } },
                  line: 481
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 528, column: 28 },
                    end: { line: 528, column: 29 }
                  },
                  loc: { start: { line: 528, column: 52 }, end: { line: 537, column: 1 } },
                  line: 528
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 83, column: 2 }, end: { line: 85, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 83, column: 2 }, end: { line: 85, column: 3 } },
                    { start: { line: 83, column: 2 }, end: { line: 85, column: 3 } }
                  ],
                  line: 83
                },
                '1': {
                  loc: { start: { line: 83, column: 6 }, end: { line: 83, column: 58 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 83, column: 6 }, end: { line: 83, column: 31 } },
                    { start: { line: 83, column: 35 }, end: { line: 83, column: 58 } }
                  ],
                  line: 83
                },
                '2': {
                  loc: { start: { line: 351, column: 2 }, end: { line: 353, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 351, column: 2 }, end: { line: 353, column: 3 } },
                    { start: { line: 351, column: 2 }, end: { line: 353, column: 3 } }
                  ],
                  line: 351
                },
                '3': {
                  loc: { start: { line: 390, column: 2 }, end: { line: 394, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 390, column: 2 }, end: { line: 394, column: 3 } },
                    { start: { line: 390, column: 2 }, end: { line: 394, column: 3 } }
                  ],
                  line: 390
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0
              },
              f: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0, '8': 0 },
              b: { '0': [0, 0], '1': [0, 0], '2': [0, 0], '3': [0, 0] },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '67ef676b1e1e8e03dc1b602cfa430bb2ba8e12a5'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../main'));
          _dereq_('../friendly_errors/fes_core');
          _dereq_('../friendly_errors/file_errors');
          _dereq_('../friendly_errors/validate_params');
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_y9op1erj6.s[0]++;

          /**
           * Draws a cubic Bezier curve on the screen. These curves are defined by a
           * series of anchor and control points. The first two parameters specify
           * the first anchor point and the last two parameters specify the other
           * anchor point, which become the first and last points on the curve. The
           * middle parameters specify the two control points which define the shape
           * of the curve. Approximately speaking, control points "pull" the curve
           * towards them.
           *
           * Bezier curves were developed by French automotive engineer Pierre Bezier,
           * and are commonly used in computer graphics to define gently sloping curves.
           * See also <a href="#/p5/curve">curve()</a>.
           *
           * @method bezier
           * @param  {Number} x1 x-coordinate for the first anchor point
           * @param  {Number} y1 y-coordinate for the first anchor point
           * @param  {Number} x2 x-coordinate for the first control point
           * @param  {Number} y2 y-coordinate for the first control point
           * @param  {Number} x3 x-coordinate for the second control point
           * @param  {Number} y3 y-coordinate for the second control point
           * @param  {Number} x4 x-coordinate for the second anchor point
           * @param  {Number} y4 y-coordinate for the second anchor point
           * @chainable
           * @example
           * <div>
           * <code>
           * noFill();
           * stroke(255, 102, 0);
           * line(85, 20, 10, 10);
           * line(90, 90, 15, 80);
           * stroke(0, 0, 0);
           * bezier(85, 20, 10, 10, 90, 90, 15, 80);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * background(0, 0, 0);
           * noFill();
           * stroke(255);
           * bezier(250, 250, 0, 100, 100, 0, 100, 0, 0, 0, 100, 0);
           * </code>
           * </div>
           *
           * @alt
           * stretched black s-shape in center with orange lines extending from end points.
           * a white colored curve on black background from the upper-right corner to the lower right corner.
           */

          /**
           * @method bezier
           * @param  {Number} x1
           * @param  {Number} y1
           * @param  {Number} z1 z-coordinate for the first anchor point
           * @param  {Number} x2
           * @param  {Number} y2
           * @param  {Number} z2 z-coordinate for the first control point
           * @param  {Number} x3
           * @param  {Number} y3
           * @param  {Number} z3 z-coordinate for the second control point
           * @param  {Number} x4
           * @param  {Number} y4
           * @param  {Number} z4 z-coordinate for the second anchor point
           * @chainable
           */
          _main.default.prototype.bezier = function() {
            var _this$_renderer;
            cov_y9op1erj6.f[0]++;
            cov_y9op1erj6.s[1]++;
            for (
              var _len = arguments.length, args = new Array(_len), _key = 0;
              _key < _len;
              _key++
            ) {
              args[_key] = arguments[_key];
            }
            _main.default._validateParameters('bezier', args);

            // if the current stroke and fill settings wouldn't result in something
            // visible, exit immediately
            cov_y9op1erj6.s[2]++;
            if (
              (cov_y9op1erj6.b[1][0]++, !this._renderer._doStroke) &&
              (cov_y9op1erj6.b[1][1]++, !this._renderer._doFill)
            ) {
              cov_y9op1erj6.b[0][0]++;
              cov_y9op1erj6.s[3]++;
              return this;
            } else {
              cov_y9op1erj6.b[0][1]++;
            }
            cov_y9op1erj6.s[4]++;

            (_this$_renderer = this._renderer).bezier.apply(_this$_renderer, args);
            cov_y9op1erj6.s[5]++;

            return this;
          };

          /**
           * Sets the resolution at which Bezier's curve is displayed. The default value is 20.
           *
           * Note, This function is only useful when using the WEBGL renderer
           * as the default canvas renderer does not use this information.
           *
           * @method bezierDetail
           * @param {Number} detail resolution of the curves
           * @chainable
           * @example
           * <div modernizr='webgl'>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   noFill();
           *   bezierDetail(5);
           * }
           *
           * function draw() {
           *   background(200);
           *   // prettier-ignore
           *   bezier(-40, -40, 0,
           *           90, -40, 0,
           *          -90,  40, 0,
           *           40,  40, 0);
           * }
           * </code>
           * </div>
           *
           * @alt
           * stretched black s-shape with a low level of bezier detail
           */ cov_y9op1erj6.s[6]++;
          _main.default.prototype.bezierDetail = function(d) {
            cov_y9op1erj6.f[1]++;
            cov_y9op1erj6.s[7]++;
            _main.default._validateParameters('bezierDetail', arguments);
            cov_y9op1erj6.s[8]++;
            this._bezierDetail = d;
            cov_y9op1erj6.s[9]++;
            return this;
          };

          /**
    * Given the x or y co-ordinate values of control and anchor points of a bezier
    * curve, it evaluates the x or y coordinate of the bezier at position t. The
    * parameters a and d are the x or y coordinates of first and last points on the
    * curve while b and c are of the control points.The final parameter t is the
    * position of the resultant point which is given between 0 and 1.
    * This can be done once with the x coordinates and a second time
    * with the y coordinates to get the location of a bezier curve at t.
    *
    * @method bezierPoint
    * @param {Number} a coordinate of first point on the curve
    * @param {Number} b coordinate of first control point
    * @param {Number} c coordinate of second control point
    * @param {Number} d coordinate of second point on the curve
    * @param {Number} t value between 0 and 1
    * @return {Number} the value of the Bezier at position t
    * @example
    * <div>
    * <code>
    * noFill();
    * let x1 = 85,
     x2 = 10,
     x3 = 90,
     x4 = 15;
    * let y1 = 20,
     y2 = 10,
     y3 = 90,
     y4 = 80;
    * bezier(x1, y1, x2, y2, x3, y3, x4, y4);
    * fill(255);
    * let steps = 10;
    * for (let i = 0; i <= steps; i++) {
    *   let t = i / steps;
    *   let x = bezierPoint(x1, x2, x3, x4, t);
    *   let y = bezierPoint(y1, y2, y3, y4, t);
    *   circle(x, y, 5);
    * }
    * </code>
    * </div>
    *
    * @alt
    * 10 points plotted on a given bezier at equal distances.
    */ cov_y9op1erj6
            .s[10]++;
          _main.default.prototype.bezierPoint = function(a, b, c, d, t) {
            cov_y9op1erj6.f[2]++;
            cov_y9op1erj6.s[11]++;
            _main.default._validateParameters('bezierPoint', arguments);

            var adjustedT = (cov_y9op1erj6.s[12]++, 1 - t);
            cov_y9op1erj6.s[13]++;
            return (
              Math.pow(adjustedT, 3) * a +
              3 * Math.pow(adjustedT, 2) * t * b +
              3 * adjustedT * Math.pow(t, 2) * c +
              Math.pow(t, 3) * d
            );
          };

          /**
           * Evaluates the tangent to the Bezier at position t for points a, b, c, d.
           * The parameters a and d are the first and last points
           * on the curve, and b and c are the control points.
           * The final parameter t varies between 0 and 1.
           *
           * @method bezierTangent
           * @param {Number} a coordinate of first point on the curve
           * @param {Number} b coordinate of first control point
           * @param {Number} c coordinate of second control point
           * @param {Number} d coordinate of second point on the curve
           * @param {Number} t value between 0 and 1
           * @return {Number} the tangent at position t
           * @example
           * <div>
           * <code>
           * noFill();
           * bezier(85, 20, 10, 10, 90, 90, 15, 80);
           * let steps = 6;
           * fill(255);
           * for (let i = 0; i <= steps; i++) {
           *   let t = i / steps;
           *   // Get the location of the point
           *   let x = bezierPoint(85, 10, 90, 15, t);
           *   let y = bezierPoint(20, 10, 90, 80, t);
           *   // Get the tangent points
           *   let tx = bezierTangent(85, 10, 90, 15, t);
           *   let ty = bezierTangent(20, 10, 90, 80, t);
           *   // Calculate an angle from the tangent points
           *   let a = atan2(ty, tx);
           *   a += PI;
           *   stroke(255, 102, 0);
           *   line(x, y, cos(a) * 30 + x, sin(a) * 30 + y);
           *   // The following line of code makes a line
           *   // inverse of the above line
           *   //line(x, y, cos(a)*-30 + x, sin(a)*-30 + y);
           *   stroke(0);
           *   ellipse(x, y, 5, 5);
           * }
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * noFill();
           * bezier(85, 20, 10, 10, 90, 90, 15, 80);
           * stroke(255, 102, 0);
           * let steps = 16;
           * for (let i = 0; i <= steps; i++) {
           *   let t = i / steps;
           *   let x = bezierPoint(85, 10, 90, 15, t);
           *   let y = bezierPoint(20, 10, 90, 80, t);
           *   let tx = bezierTangent(85, 10, 90, 15, t);
           *   let ty = bezierTangent(20, 10, 90, 80, t);
           *   let a = atan2(ty, tx);
           *   a -= HALF_PI;
           *   line(x, y, cos(a) * 8 + x, sin(a) * 8 + y);
           * }
           * </code>
           * </div>
           *
           * @alt
           * s-shaped line with 6 short orange lines showing the tangents at those points.
           * s-shaped line with 6 short orange lines showing lines coming out the underside of the bezier.
           */ cov_y9op1erj6.s[14]++;
          _main.default.prototype.bezierTangent = function(a, b, c, d, t) {
            cov_y9op1erj6.f[3]++;
            cov_y9op1erj6.s[15]++;
            _main.default._validateParameters('bezierTangent', arguments);

            var adjustedT = (cov_y9op1erj6.s[16]++, 1 - t);
            cov_y9op1erj6.s[17]++;
            return (
              3 * d * Math.pow(t, 2) -
              3 * c * Math.pow(t, 2) +
              6 * c * adjustedT * t -
              6 * b * adjustedT * t +
              3 * b * Math.pow(adjustedT, 2) -
              3 * a * Math.pow(adjustedT, 2)
            );
          };

          /**
           * Draws a curved line on the screen between two points, given as the
           * middle four parameters. The first two parameters are a control point, as
           * if the curve came from this point even though it's not drawn. The last
           * two parameters similarly describe the other control point. <br /><br />
           * Longer curves can be created by putting a series of <a href="#/p5/curve">curve()</a> functions
           * together or using <a href="#/p5/curveVertex">curveVertex()</a>. An additional function called
           * <a href="#/p5/curveTightness">curveTightness()</a> provides control for the visual quality of the curve.
           * The <a href="#/p5/curve">curve()</a> function is an implementation of Catmull-Rom splines.
           *
           * @method curve
           * @param  {Number} x1 x-coordinate for the beginning control point
           * @param  {Number} y1 y-coordinate for the beginning control point
           * @param  {Number} x2 x-coordinate for the first point
           * @param  {Number} y2 y-coordinate for the first point
           * @param  {Number} x3 x-coordinate for the second point
           * @param  {Number} y3 y-coordinate for the second point
           * @param  {Number} x4 x-coordinate for the ending control point
           * @param  {Number} y4 y-coordinate for the ending control point
           * @chainable
           * @example
           * <div>
           * <code>
           * noFill();
           * stroke(255, 102, 0);
           * curve(5, 26, 5, 26, 73, 24, 73, 61);
           * stroke(0);
           * curve(5, 26, 73, 24, 73, 61, 15, 65);
           * stroke(255, 102, 0);
           * curve(73, 24, 73, 61, 15, 65, 15, 65);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // Define the curve points as JavaScript objects
           * let p1 = { x: 5, y: 26 };
           * let p2 = { x: 73, y: 24 };
           * let p3 = { x: 73, y: 61 };
           * let p4 = { x: 15, y: 65 };
           * noFill();
           * stroke(255, 102, 0);
           * curve(p1.x, p1.y, p1.x, p1.y, p2.x, p2.y, p3.x, p3.y);
           * stroke(0);
           * curve(p1.x, p1.y, p2.x, p2.y, p3.x, p3.y, p4.x, p4.y);
           * stroke(255, 102, 0);
           * curve(p2.x, p2.y, p3.x, p3.y, p4.x, p4.y, p4.x, p4.y);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * noFill();
           * stroke(255, 102, 0);
           * curve(5, 26, 0, 5, 26, 0, 73, 24, 0, 73, 61, 0);
           * stroke(0);
           * curve(5, 26, 0, 73, 24, 0, 73, 61, 0, 15, 65, 0);
           * stroke(255, 102, 0);
           * curve(73, 24, 0, 73, 61, 0, 15, 65, 0, 15, 65, 0);
           * </code>
           * </div>
           *
           * @alt
           * horseshoe shape with orange ends facing left and black curved center.
           * horseshoe shape with orange ends facing left and black curved center.
           * curving black and orange lines.
           */

          /**
           * @method curve
           * @param  {Number} x1
           * @param  {Number} y1
           * @param  {Number} z1 z-coordinate for the beginning control point
           * @param  {Number} x2
           * @param  {Number} y2
           * @param  {Number} z2 z-coordinate for the first point
           * @param  {Number} x3
           * @param  {Number} y3
           * @param  {Number} z3 z-coordinate for the second point
           * @param  {Number} x4
           * @param  {Number} y4
           * @param  {Number} z4 z-coordinate for the ending control point
           * @chainable
           */ cov_y9op1erj6.s[18]++;
          _main.default.prototype.curve = function() {
            cov_y9op1erj6.f[4]++;
            cov_y9op1erj6.s[19]++;
            for (
              var _len2 = arguments.length, args = new Array(_len2), _key2 = 0;
              _key2 < _len2;
              _key2++
            ) {
              args[_key2] = arguments[_key2];
            }
            _main.default._validateParameters('curve', args);
            cov_y9op1erj6.s[20]++;

            if (this._renderer._doStroke) {
              var _this$_renderer2;
              cov_y9op1erj6.b[2][0]++;
              cov_y9op1erj6.s[21]++;
              (_this$_renderer2 = this._renderer).curve.apply(_this$_renderer2, args);
            } else {
              cov_y9op1erj6.b[2][1]++;
            }
            cov_y9op1erj6.s[22]++;

            return this;
          };

          /**
           * Sets the resolution at which curves display. The default value is 20 while
           * the minimum value is 3.
           *
           * This function is only useful when using the WEBGL renderer
           * as the default canvas renderer does not use this
           * information.
           *
           * @method curveDetail
           * @param {Number} resolution resolution of the curves
           * @chainable
           * @example
           * <div modernizr='webgl'>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *
           *   curveDetail(5);
           * }
           * function draw() {
           *   background(200);
           *
           *   curve(250, 600, 0, -30, 40, 0, 30, 30, 0, -250, 600, 0);
           * }
           * </code>
           * </div>
           *
           * @alt
           * white arch shape with a low level of curve detail.
           */ cov_y9op1erj6.s[23]++;
          _main.default.prototype.curveDetail = function(d) {
            cov_y9op1erj6.f[5]++;
            cov_y9op1erj6.s[24]++;
            _main.default._validateParameters('curveDetail', arguments);
            cov_y9op1erj6.s[25]++;
            if (d < 3) {
              cov_y9op1erj6.b[3][0]++;
              cov_y9op1erj6.s[26]++;
              this._curveDetail = 3;
            } else {
              cov_y9op1erj6.b[3][1]++;
              cov_y9op1erj6.s[27]++;
              this._curveDetail = d;
            }
            cov_y9op1erj6.s[28]++;
            return this;
          };

          /**
           * Modifies the quality of forms created with <a href="#/p5/curve">curve()</a>
           * and <a href="#/p5/curveVertex">curveVertex()</a>.The parameter tightness
           * determines how the curve fits to the vertex points. The value 0.0 is the
           * default value for tightness (this value defines the curves to be Catmull-Rom
           * splines) and the value 1.0 connects all the points with straight lines.
           * Values within the range -5.0 and 5.0 will deform the curves but will leave
           * them recognizable and as values increase in magnitude, they will continue to deform.
           *
           * @method curveTightness
           * @param {Number} amount amount of deformation from the original vertices
           * @chainable
           * @example
           * <div>
           * <code>
           * // Move the mouse left and right to see the curve change
           * function setup() {
           *   createCanvas(100, 100);
           *   noFill();
           * }
           *
           * function draw() {
           *   background(204);
           *   let t = map(mouseX, 0, width, -5, 5);
           *   curveTightness(t);
           *   beginShape();
           *   curveVertex(10, 26);
           *   curveVertex(10, 26);
           *   curveVertex(83, 24);
           *   curveVertex(83, 61);
           *   curveVertex(25, 65);
           *   curveVertex(25, 65);
           *   endShape();
           * }
           * </code>
           * </div>
           *
           * @alt
           * Line shaped like right-facing arrow,points move with mouse-x and warp shape.
           */ cov_y9op1erj6.s[29]++;
          _main.default.prototype.curveTightness = function(t) {
            cov_y9op1erj6.f[6]++;
            cov_y9op1erj6.s[30]++;
            _main.default._validateParameters('curveTightness', arguments);
            cov_y9op1erj6.s[31]++;
            this._renderer._curveTightness = t;
            cov_y9op1erj6.s[32]++;
            return this;
          };

          /**
           * Evaluates the curve at position t for points a, b, c, d.
           * The parameter t varies between 0 and 1, a and d are control points
           * of the curve, and b and c are the start and end points of the curve.
           * This can be done once with the x coordinates and a second time
           * with the y coordinates to get the location of a curve at t.
           *
           * @method curvePoint
           * @param {Number} a coordinate of first control point of the curve
           * @param {Number} b coordinate of first point
           * @param {Number} c coordinate of second point
           * @param {Number} d coordinate of second control point
           * @param {Number} t value between 0 and 1
           * @return {Number} bezier value at position t
           * @example
           * <div>
           * <code>
           * noFill();
           * curve(5, 26, 5, 26, 73, 24, 73, 61);
           * curve(5, 26, 73, 24, 73, 61, 15, 65);
           * fill(255);
           * ellipseMode(CENTER);
           * let steps = 6;
           * for (let i = 0; i <= steps; i++) {
           *   let t = i / steps;
           *   let x = curvePoint(5, 5, 73, 73, t);
           *   let y = curvePoint(26, 26, 24, 61, t);
           *   ellipse(x, y, 5, 5);
           *   x = curvePoint(5, 73, 73, 15, t);
           *   y = curvePoint(26, 24, 61, 65, t);
           *   ellipse(x, y, 5, 5);
           * }
           * </code>
           * </div>
           *
           *line hooking down to right-bottom with 13 5x5 white ellipse points
           */ cov_y9op1erj6.s[33]++;
          _main.default.prototype.curvePoint = function(a, b, c, d, t) {
            cov_y9op1erj6.f[7]++;
            cov_y9op1erj6.s[34]++;
            _main.default._validateParameters('curvePoint', arguments);

            var t3 = (cov_y9op1erj6.s[35]++, t * t * t),
              t2 = (cov_y9op1erj6.s[36]++, t * t),
              f1 = (cov_y9op1erj6.s[37]++, -0.5 * t3 + t2 - 0.5 * t),
              f2 = (cov_y9op1erj6.s[38]++, 1.5 * t3 - 2.5 * t2 + 1.0),
              f3 = (cov_y9op1erj6.s[39]++, -1.5 * t3 + 2.0 * t2 + 0.5 * t),
              f4 = (cov_y9op1erj6.s[40]++, 0.5 * t3 - 0.5 * t2);
            cov_y9op1erj6.s[41]++;
            return a * f1 + b * f2 + c * f3 + d * f4;
          };

          /**
           * Evaluates the tangent to the curve at position t for points a, b, c, d.
           * The parameter t varies between 0 and 1, a and d are points on the curve,
           * and b and c are the control points.
           *
           * @method curveTangent
           * @param {Number} a coordinate of first control point
           * @param {Number} b coordinate of first point on the curve
           * @param {Number} c coordinate of second point on the curve
           * @param {Number} d coordinate of second conrol point
           * @param {Number} t value between 0 and 1
           * @return {Number} the tangent at position t
           * @example
           * <div>
           * <code>
           * noFill();
           * curve(5, 26, 73, 24, 73, 61, 15, 65);
           * let steps = 6;
           * for (let i = 0; i <= steps; i++) {
           *   let t = i / steps;
           *   let x = curvePoint(5, 73, 73, 15, t);
           *   let y = curvePoint(26, 24, 61, 65, t);
           *   //ellipse(x, y, 5, 5);
           *   let tx = curveTangent(5, 73, 73, 15, t);
           *   let ty = curveTangent(26, 24, 61, 65, t);
           *   let a = atan2(ty, tx);
           *   a -= PI / 2.0;
           *   line(x, y, cos(a) * 8 + x, sin(a) * 8 + y);
           * }
           * </code>
           * </div>
           *
           * @alt
           * right curving line mid-right of canvas with 7 short lines radiating from it.
           */ cov_y9op1erj6.s[42]++;
          _main.default.prototype.curveTangent = function(a, b, c, d, t) {
            cov_y9op1erj6.f[8]++;
            cov_y9op1erj6.s[43]++;
            _main.default._validateParameters('curveTangent', arguments);

            var t2 = (cov_y9op1erj6.s[44]++, t * t),
              f1 = (cov_y9op1erj6.s[45]++, -3 * t2 / 2 + 2 * t - 0.5),
              f2 = (cov_y9op1erj6.s[46]++, 9 * t2 / 2 - 5 * t),
              f3 = (cov_y9op1erj6.s[47]++, -9 * t2 / 2 + 4 * t + 0.5),
              f4 = (cov_y9op1erj6.s[48]++, 3 * t2 / 2 - t);
            cov_y9op1erj6.s[49]++;
            return a * f1 + b * f2 + c * f3 + d * f4;
          };
          var _default = _main.default;
          exports.default = _default;
        },
        {
          '../friendly_errors/fes_core': 275,
          '../friendly_errors/file_errors': 276,
          '../friendly_errors/validate_params': 278,
          '../main': 283
        }
      ],
      293: [
        function(_dereq_, module, exports) {
          'use strict';
          function _typeof(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof = function _typeof(obj) {
                return typeof obj;
              };
            } else {
              _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof(obj);
          }
          var cov_13gx1t2zoz = (function() {
            var path = '/Users/outofambit/src/p5.js/src/core/shape/vertex.js';
            var hash = '18a71d0dcb3feff7d5eb4df015c681a2d7539bbe';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/core/shape/vertex.js',
              statementMap: {
                '0': { start: { line: 11, column: 16 }, end: { line: 11, column: 20 } },
                '1': { start: { line: 12, column: 15 }, end: { line: 12, column: 17 } },
                '2': { start: { line: 13, column: 22 }, end: { line: 13, column: 24 } },
                '3': { start: { line: 14, column: 15 }, end: { line: 14, column: 20 } },
                '4': { start: { line: 15, column: 14 }, end: { line: 15, column: 19 } },
                '5': { start: { line: 16, column: 18 }, end: { line: 16, column: 23 } },
                '6': { start: { line: 17, column: 16 }, end: { line: 17, column: 21 } },
                '7': { start: { line: 18, column: 21 }, end: { line: 18, column: 25 } },
                '8': { start: { line: 61, column: 0 }, end: { line: 65, column: 2 } },
                '9': { start: { line: 62, column: 2 }, end: { line: 62, column: 23 } },
                '10': { start: { line: 63, column: 2 }, end: { line: 63, column: 19 } },
                '11': { start: { line: 64, column: 2 }, end: { line: 64, column: 14 } },
                '12': { start: { line: 268, column: 0 }, end: { line: 291, column: 2 } },
                '13': { start: { line: 269, column: 2 }, end: { line: 269, column: 50 } },
                '14': { start: { line: 270, column: 2 }, end: { line: 289, column: 3 } },
                '15': { start: { line: 271, column: 4 }, end: { line: 271, column: 44 } },
                '16': { start: { line: 273, column: 4 }, end: { line: 285, column: 5 } },
                '17': { start: { line: 282, column: 6 }, end: { line: 282, column: 23 } },
                '18': { start: { line: 284, column: 6 }, end: { line: 284, column: 23 } },
                '19': { start: { line: 287, column: 4 }, end: { line: 287, column: 18 } },
                '20': { start: { line: 288, column: 4 }, end: { line: 288, column: 25 } },
                '21': { start: { line: 290, column: 2 }, end: { line: 290, column: 14 } },
                '22': { start: { line: 388, column: 0 }, end: { line: 413, column: 2 } },
                '23': { start: { line: 389, column: 2 }, end: { line: 389, column: 47 } },
                '24': { start: { line: 390, column: 2 }, end: { line: 411, column: 3 } },
                '25': { start: { line: 391, column: 4 }, end: { line: 391, column: 41 } },
                '26': { start: { line: 393, column: 4 }, end: { line: 410, column: 5 } },
                '27': { start: { line: 394, column: 6 }, end: { line: 397, column: 8 } },
                '28': { start: { line: 399, column: 6 }, end: { line: 399, column: 22 } },
                '29': { start: { line: 400, column: 19 }, end: { line: 400, column: 21 } },
                '30': { start: { line: 401, column: 6 }, end: { line: 403, column: 7 } },
                '31': { start: { line: 401, column: 19 }, end: { line: 401, column: 20 } },
                '32': { start: { line: 402, column: 8 }, end: { line: 402, column: 26 } },
                '33': { start: { line: 404, column: 6 }, end: { line: 404, column: 26 } },
                '34': { start: { line: 405, column: 6 }, end: { line: 409, column: 7 } },
                '35': { start: { line: 406, column: 8 }, end: { line: 406, column: 35 } },
                '36': { start: { line: 408, column: 8 }, end: { line: 408, column: 28 } },
                '37': { start: { line: 412, column: 2 }, end: { line: 412, column: 14 } },
                '38': { start: { line: 513, column: 0 }, end: { line: 522, column: 2 } },
                '39': { start: { line: 514, column: 2 }, end: { line: 514, column: 46 } },
                '40': { start: { line: 515, column: 2 }, end: { line: 520, column: 3 } },
                '41': { start: { line: 516, column: 4 }, end: { line: 516, column: 40 } },
                '42': { start: { line: 518, column: 4 }, end: { line: 518, column: 19 } },
                '43': { start: { line: 519, column: 4 }, end: { line: 519, column: 34 } },
                '44': { start: { line: 521, column: 2 }, end: { line: 521, column: 14 } },
                '45': { start: { line: 565, column: 0 }, end: { line: 581, column: 2 } },
                '46': { start: { line: 566, column: 15 }, end: { line: 566, column: 41 } },
                '47': { start: { line: 567, column: 2 }, end: { line: 567, column: 42 } },
                '48': { start: { line: 568, column: 2 }, end: { line: 568, column: 22 } },
                '49': { start: { line: 569, column: 2 }, end: { line: 569, column: 29 } },
                '50': { start: { line: 572, column: 2 }, end: { line: 575, column: 3 } },
                '51': { start: { line: 573, column: 4 }, end: { line: 573, column: 31 } },
                '52': { start: { line: 574, column: 4 }, end: { line: 574, column: 27 } },
                '53': { start: { line: 577, column: 2 }, end: { line: 579, column: 3 } },
                '54': { start: { line: 577, column: 15 }, end: { line: 577, column: 16 } },
                '55': { start: { line: 578, column: 4 }, end: { line: 578, column: 38 } },
                '56': { start: { line: 580, column: 2 }, end: { line: 580, column: 14 } },
                '57': { start: { line: 615, column: 0 }, end: { line: 666, column: 2 } },
                '58': { start: { line: 616, column: 2 }, end: { line: 616, column: 48 } },
                '59': { start: { line: 617, column: 2 }, end: { line: 664, column: 3 } },
                '60': { start: { line: 618, column: 4 }, end: { line: 625, column: 6 } },
                '61': { start: { line: 627, column: 4 }, end: { line: 629, column: 5 } },
                '62': { start: { line: 628, column: 6 }, end: { line: 628, column: 18 } },
                '63': { start: { line: 630, column: 4 }, end: { line: 632, column: 5 } },
                '64': { start: { line: 631, column: 6 }, end: { line: 631, column: 18 } },
                '65': { start: { line: 634, column: 23 }, end: { line: 634, column: 47 } },
                '66': { start: { line: 637, column: 4 }, end: { line: 639, column: 5 } },
                '67': { start: { line: 638, column: 6 }, end: { line: 638, column: 33 } },
                '68': { start: { line: 641, column: 4 }, end: { line: 649, column: 6 } },
                '69': { start: { line: 652, column: 4 }, end: { line: 652, column: 20 } },
                '70': { start: { line: 653, column: 4 }, end: { line: 653, column: 21 } },
                '71': { start: { line: 654, column: 4 }, end: { line: 654, column: 24 } },
                '72': { start: { line: 655, column: 4 }, end: { line: 655, column: 22 } },
                '73': { start: { line: 656, column: 4 }, end: { line: 656, column: 26 } },
                '74': { start: { line: 661, column: 4 }, end: { line: 663, column: 5 } },
                '75': { start: { line: 662, column: 6 }, end: { line: 662, column: 21 } },
                '76': { start: { line: 665, column: 2 }, end: { line: 665, column: 14 } },
                '77': { start: { line: 786, column: 0 }, end: { line: 824, column: 2 } },
                '78': { start: { line: 787, column: 2 }, end: { line: 787, column: 50 } },
                '79': { start: { line: 788, column: 2 }, end: { line: 822, column: 3 } },
                '80': { start: { line: 789, column: 4 }, end: { line: 789, column: 44 } },
                '81': { start: { line: 793, column: 4 }, end: { line: 803, column: 5 } },
                '82': { start: { line: 794, column: 17 }, end: { line: 794, column: 19 } },
                '83': { start: { line: 795, column: 6 }, end: { line: 795, column: 21 } },
                '84': { start: { line: 796, column: 6 }, end: { line: 796, column: 21 } },
                '85': { start: { line: 797, column: 6 }, end: { line: 797, column: 22 } },
                '86': { start: { line: 798, column: 6 }, end: { line: 798, column: 22 } },
                '87': { start: { line: 799, column: 6 }, end: { line: 799, column: 36 } },
                '88': { start: { line: 800, column: 6 }, end: { line: 800, column: 37 } },
                '89': { start: { line: 802, column: 6 }, end: { line: 802, column: 18 } },
                '90': { start: { line: 804, column: 4 }, end: { line: 821, column: 5 } },
                '91': { start: { line: 805, column: 6 }, end: { line: 805, column: 25 } },
                '92': { start: { line: 806, column: 19 }, end: { line: 806, column: 21 } },
                '93': { start: { line: 807, column: 6 }, end: { line: 809, column: 7 } },
                '94': { start: { line: 807, column: 19 }, end: { line: 807, column: 20 } },
                '95': { start: { line: 808, column: 8 }, end: { line: 808, column: 26 } },
                '96': { start: { line: 810, column: 6 }, end: { line: 810, column: 26 } },
                '97': { start: { line: 811, column: 6 }, end: { line: 815, column: 7 } },
                '98': { start: { line: 812, column: 8 }, end: { line: 812, column: 35 } },
                '99': { start: { line: 814, column: 8 }, end: { line: 814, column: 28 } },
                '100': { start: { line: 817, column: 6 }, end: { line: 820, column: 8 } },
                '101': { start: { line: 823, column: 2 }, end: { line: 823, column: 14 } },
                '102': { start: { line: 974, column: 0 }, end: { line: 1001, column: 2 } },
                '103': { start: { line: 975, column: 2 }, end: { line: 999, column: 3 } },
                '104': { start: { line: 976, column: 4 }, end: { line: 976, column: 40 } },
                '105': { start: { line: 978, column: 17 }, end: { line: 978, column: 19 } },
                '106': { start: { line: 979, column: 4 }, end: { line: 979, column: 23 } },
                '107': { start: { line: 980, column: 4 }, end: { line: 980, column: 16 } },
                '108': { start: { line: 981, column: 4 }, end: { line: 981, column: 16 } },
                '109': { start: { line: 982, column: 4 }, end: { line: 982, column: 16 } },
                '110': { start: { line: 983, column: 4 }, end: { line: 983, column: 16 } },
                '111': { start: { line: 984, column: 4 }, end: { line: 984, column: 16 } },
                '112': { start: { line: 985, column: 4 }, end: { line: 985, column: 40 } },
                '113': { start: { line: 986, column: 4 }, end: { line: 986, column: 42 } },
                '114': { start: { line: 988, column: 4 }, end: { line: 990, column: 5 } },
                '115': { start: { line: 989, column: 6 }, end: { line: 989, column: 27 } },
                '116': { start: { line: 991, column: 4 }, end: { line: 998, column: 5 } },
                '117': { start: { line: 992, column: 6 }, end: { line: 994, column: 7 } },
                '118': { start: { line: 993, column: 8 }, end: { line: 993, column: 27 } },
                '119': { start: { line: 995, column: 6 }, end: { line: 995, column: 33 } },
                '120': { start: { line: 997, column: 6 }, end: { line: 997, column: 26 } },
                '121': {
                  start: { line: 1000, column: 2 },
                  end: { line: 1000, column: 14 }
                },
                '122': { start: { line: 1047, column: 0 }, end: { line: 1053, column: 2 } },
                '123': {
                  start: { line: 1048, column: 2 },
                  end: { line: 1048, column: 27 }
                },
                '124': {
                  start: { line: 1049, column: 2 },
                  end: { line: 1049, column: 46 }
                },
                '125': {
                  start: { line: 1050, column: 2 },
                  end: { line: 1050, column: 38 }
                },
                '126': { start: { line: 1052, column: 2 }, end: { line: 1052, column: 14 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 61, column: 28 }, end: { line: 61, column: 29 } },
                  loc: { start: { line: 61, column: 39 }, end: { line: 65, column: 1 } },
                  line: 61
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: {
                    start: { line: 268, column: 26 },
                    end: { line: 268, column: 27 }
                  },
                  loc: { start: { line: 268, column: 41 }, end: { line: 291, column: 1 } },
                  line: 268
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 388, column: 28 },
                    end: { line: 388, column: 29 }
                  },
                  loc: { start: { line: 388, column: 46 }, end: { line: 413, column: 1 } },
                  line: 388
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 513, column: 27 },
                    end: { line: 513, column: 28 }
                  },
                  loc: { start: { line: 513, column: 45 }, end: { line: 522, column: 1 } },
                  line: 513
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 565, column: 26 },
                    end: { line: 565, column: 27 }
                  },
                  loc: { start: { line: 565, column: 37 }, end: { line: 581, column: 1 } },
                  line: 565
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 615, column: 24 },
                    end: { line: 615, column: 25 }
                  },
                  loc: { start: { line: 615, column: 39 }, end: { line: 666, column: 1 } },
                  line: 615
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 786, column: 31 },
                    end: { line: 786, column: 32 }
                  },
                  loc: { start: { line: 786, column: 49 }, end: { line: 824, column: 1 } },
                  line: 786
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 974, column: 22 },
                    end: { line: 974, column: 23 }
                  },
                  loc: { start: { line: 974, column: 51 }, end: { line: 1001, column: 1 } },
                  line: 974
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 1047, column: 22 },
                    end: { line: 1047, column: 23 }
                  },
                  loc: {
                    start: { line: 1047, column: 40 },
                    end: { line: 1053, column: 1 }
                  },
                  line: 1047
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 270, column: 2 }, end: { line: 289, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 270, column: 2 }, end: { line: 289, column: 3 } },
                    { start: { line: 270, column: 2 }, end: { line: 289, column: 3 } }
                  ],
                  line: 270
                },
                '1': {
                  loc: { start: { line: 273, column: 4 }, end: { line: 285, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 273, column: 4 }, end: { line: 285, column: 5 } },
                    { start: { line: 273, column: 4 }, end: { line: 285, column: 5 } }
                  ],
                  line: 273
                },
                '2': {
                  loc: { start: { line: 274, column: 6 }, end: { line: 280, column: 35 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 274, column: 6 }, end: { line: 274, column: 31 } },
                    { start: { line: 275, column: 6 }, end: { line: 275, column: 30 } },
                    { start: { line: 276, column: 6 }, end: { line: 276, column: 34 } },
                    { start: { line: 277, column: 6 }, end: { line: 277, column: 37 } },
                    { start: { line: 278, column: 6 }, end: { line: 278, column: 39 } },
                    { start: { line: 279, column: 6 }, end: { line: 279, column: 30 } },
                    { start: { line: 280, column: 6 }, end: { line: 280, column: 35 } }
                  ],
                  line: 274
                },
                '3': {
                  loc: { start: { line: 390, column: 2 }, end: { line: 411, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 390, column: 2 }, end: { line: 411, column: 3 } },
                    { start: { line: 390, column: 2 }, end: { line: 411, column: 3 } }
                  ],
                  line: 390
                },
                '4': {
                  loc: { start: { line: 393, column: 4 }, end: { line: 410, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 393, column: 4 }, end: { line: 410, column: 5 } },
                    { start: { line: 393, column: 4 }, end: { line: 410, column: 5 } }
                  ],
                  line: 393
                },
                '5': {
                  loc: { start: { line: 405, column: 6 }, end: { line: 409, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 405, column: 6 }, end: { line: 409, column: 7 } },
                    { start: { line: 405, column: 6 }, end: { line: 409, column: 7 } }
                  ],
                  line: 405
                },
                '6': {
                  loc: { start: { line: 515, column: 2 }, end: { line: 520, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 515, column: 2 }, end: { line: 520, column: 3 } },
                    { start: { line: 515, column: 2 }, end: { line: 520, column: 3 } }
                  ],
                  line: 515
                },
                '7': {
                  loc: { start: { line: 572, column: 2 }, end: { line: 575, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 572, column: 2 }, end: { line: 575, column: 3 } },
                    { start: { line: 572, column: 2 }, end: { line: 575, column: 3 } }
                  ],
                  line: 572
                },
                '8': {
                  loc: { start: { line: 617, column: 2 }, end: { line: 664, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 617, column: 2 }, end: { line: 664, column: 3 } },
                    { start: { line: 617, column: 2 }, end: { line: 664, column: 3 } }
                  ],
                  line: 617
                },
                '9': {
                  loc: { start: { line: 627, column: 4 }, end: { line: 629, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 627, column: 4 }, end: { line: 629, column: 5 } },
                    { start: { line: 627, column: 4 }, end: { line: 629, column: 5 } }
                  ],
                  line: 627
                },
                '10': {
                  loc: { start: { line: 630, column: 4 }, end: { line: 632, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 630, column: 4 }, end: { line: 632, column: 5 } },
                    { start: { line: 630, column: 4 }, end: { line: 632, column: 5 } }
                  ],
                  line: 630
                },
                '11': {
                  loc: { start: { line: 630, column: 8 }, end: { line: 630, column: 60 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 630, column: 8 }, end: { line: 630, column: 33 } },
                    { start: { line: 630, column: 37 }, end: { line: 630, column: 60 } }
                  ],
                  line: 630
                },
                '12': {
                  loc: { start: { line: 637, column: 4 }, end: { line: 639, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 637, column: 4 }, end: { line: 639, column: 5 } },
                    { start: { line: 637, column: 4 }, end: { line: 639, column: 5 } }
                  ],
                  line: 637
                },
                '13': {
                  loc: { start: { line: 637, column: 8 }, end: { line: 637, column: 32 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 637, column: 8 }, end: { line: 637, column: 18 } },
                    { start: { line: 637, column: 22 }, end: { line: 637, column: 32 } }
                  ],
                  line: 637
                },
                '14': {
                  loc: { start: { line: 661, column: 4 }, end: { line: 663, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 661, column: 4 }, end: { line: 663, column: 5 } },
                    { start: { line: 661, column: 4 }, end: { line: 663, column: 5 } }
                  ],
                  line: 661
                },
                '15': {
                  loc: { start: { line: 788, column: 2 }, end: { line: 822, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 788, column: 2 }, end: { line: 822, column: 3 } },
                    { start: { line: 788, column: 2 }, end: { line: 822, column: 3 } }
                  ],
                  line: 788
                },
                '16': {
                  loc: { start: { line: 793, column: 4 }, end: { line: 803, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 793, column: 4 }, end: { line: 803, column: 5 } },
                    { start: { line: 793, column: 4 }, end: { line: 803, column: 5 } }
                  ],
                  line: 793
                },
                '17': {
                  loc: { start: { line: 804, column: 4 }, end: { line: 821, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 804, column: 4 }, end: { line: 821, column: 5 } },
                    { start: { line: 804, column: 4 }, end: { line: 821, column: 5 } }
                  ],
                  line: 804
                },
                '18': {
                  loc: { start: { line: 811, column: 6 }, end: { line: 815, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 811, column: 6 }, end: { line: 815, column: 7 } },
                    { start: { line: 811, column: 6 }, end: { line: 815, column: 7 } }
                  ],
                  line: 811
                },
                '19': {
                  loc: { start: { line: 975, column: 2 }, end: { line: 999, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 975, column: 2 }, end: { line: 999, column: 3 } },
                    { start: { line: 975, column: 2 }, end: { line: 999, column: 3 } }
                  ],
                  line: 975
                },
                '20': {
                  loc: { start: { line: 988, column: 4 }, end: { line: 990, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 988, column: 4 }, end: { line: 990, column: 5 } },
                    { start: { line: 988, column: 4 }, end: { line: 990, column: 5 } }
                  ],
                  line: 988
                },
                '21': {
                  loc: { start: { line: 991, column: 4 }, end: { line: 998, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 991, column: 4 }, end: { line: 998, column: 5 } },
                    { start: { line: 991, column: 4 }, end: { line: 998, column: 5 } }
                  ],
                  line: 991
                },
                '22': {
                  loc: { start: { line: 992, column: 6 }, end: { line: 994, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 992, column: 6 }, end: { line: 994, column: 7 } },
                    { start: { line: 992, column: 6 }, end: { line: 994, column: 7 } }
                  ],
                  line: 992
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0,
                '118': 0,
                '119': 0,
                '120': 0,
                '121': 0,
                '122': 0,
                '123': 0,
                '124': 0,
                '125': 0,
                '126': 0
              },
              f: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0, '8': 0 },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0, 0, 0, 0, 0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0],
                '20': [0, 0],
                '21': [0, 0],
                '22': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '18a71d0dcb3feff7d5eb4df015c681a2d7539bbe'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.slice');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../main'));
          var constants = _interopRequireWildcard(_dereq_('../constants'));
          function _getRequireWildcardCache() {
            if (typeof WeakMap !== 'function') return null;
            var cache = new WeakMap();
            _getRequireWildcardCache = function _getRequireWildcardCache() {
              return cache;
            };
            return cache;
          }
          function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
              return obj;
            }
            if (obj === null || (_typeof(obj) !== 'object' && typeof obj !== 'function')) {
              return { default: obj };
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
              return cache.get(obj);
            }
            var newObj = {};
            var hasPropertyDescriptor =
              Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
              if (Object.prototype.hasOwnProperty.call(obj, key)) {
                var desc = hasPropertyDescriptor
                  ? Object.getOwnPropertyDescriptor(obj, key)
                  : null;
                if (desc && (desc.get || desc.set)) {
                  Object.defineProperty(newObj, key, desc);
                } else {
                  newObj[key] = obj[key];
                }
              }
            }
            newObj.default = obj;
            if (cache) {
              cache.set(obj, newObj);
            }
            return newObj;
          }
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          var shapeKind = (cov_13gx1t2zoz.s[0]++, null);
          var vertices = (cov_13gx1t2zoz.s[1]++, []);
          var contourVertices = (cov_13gx1t2zoz.s[2]++, []);
          var isBezier = (cov_13gx1t2zoz.s[3]++, false);
          var isCurve = (cov_13gx1t2zoz.s[4]++, false);
          var isQuadratic = (cov_13gx1t2zoz.s[5]++, false);
          var isContour = (cov_13gx1t2zoz.s[6]++, false);
          var isFirstContour = (cov_13gx1t2zoz.s[7]++, true);

          /**
           * Use the <a href="#/p5/beginContour">beginContour()</a> and
           * <a href="#/p5/endContour">endContour()</a> functions to create negative shapes
           * within shapes such as the center of the letter 'O'. <a href="#/p5/beginContour">beginContour()</a>
           * begins recording vertices for the shape and <a href="#/p5/endContour">endContour()</a> stops recording.
           * The vertices that define a negative shape must "wind" in the opposite direction
           * from the exterior shape. First draw vertices for the exterior clockwise order, then for internal shapes, draw vertices
           * shape in counter-clockwise.
           *
           * These functions can only be used within a <a href="#/p5/beginShape">beginShape()</a>/<a href="#/p5/endShape">endShape()</a> pair and
           * transformations such as <a href="#/p5/translate">translate()</a>, <a href="#/p5/rotate">rotate()</a>, and <a href="#/p5/scale">scale()</a> do not work
           * within a <a href="#/p5/beginContour">beginContour()</a>/<a href="#/p5/endContour">endContour()</a> pair. It is also not possible to use
           * other shapes, such as <a href="#/p5/ellipse">ellipse()</a> or <a href="#/p5/rect">rect()</a> within.
           *
           * @method beginContour
           * @chainable
           * @example
           * <div>
           * <code>
           * translate(50, 50);
           * stroke(255, 0, 0);
           * beginShape();
           * // Exterior part of shape, clockwise winding
           * vertex(-40, -40);
           * vertex(40, -40);
           * vertex(40, 40);
           * vertex(-40, 40);
           * // Interior part of shape, counter-clockwise winding
           * beginContour();
           * vertex(-20, -20);
           * vertex(-20, 20);
           * vertex(20, 20);
           * vertex(20, -20);
           * endContour();
           * endShape(CLOSE);
           * </code>
           * </div>
           *
           * @alt
           * white rect and smaller grey rect with red outlines in center of canvas.
           */ cov_13gx1t2zoz.s[8]++;
          _main.default.prototype.beginContour = function() {
            cov_13gx1t2zoz.f[0]++;
            cov_13gx1t2zoz.s[9]++;
            contourVertices = [];
            cov_13gx1t2zoz.s[10]++;
            isContour = true;
            cov_13gx1t2zoz.s[11]++;
            return this;
          };

          /**
           * Using the <a href="#/p5/beginShape">beginShape()</a> and <a href="#/p5/endShape">endShape()</a> functions allow creating more
           * complex forms. <a href="#/p5/beginShape">beginShape()</a> begins recording vertices for a shape and
           * <a href="#/p5/endShape">endShape()</a> stops recording. The value of the kind parameter tells it which
           * types of shapes to create from the provided vertices. With no mode
           * specified, the shape can be any irregular polygon.
           *
           * The parameters available for <a href="#/p5/beginShape">beginShape()</a> are:
           *
           * POINTS
           * Draw a series of points
           *
           * LINES
           * Draw a series of unconnected line segments (individual lines)
           *
           * TRIANGLES
           * Draw a series of separate triangles
           *
           * TRIANGLE_FAN
           * Draw a series of connected triangles sharing the first vertex in a fan-like fashion
           *
           * TRIANGLE_STRIP
           * Draw a series of connected triangles in strip fashion
           *
           * QUADS
           * Draw a series of seperate quad
           *
           * QUAD_STRIP
           * Draw quad strip using adjacent edges to form the next quad
           *
           * TESS (WebGl only)
           * Handle irregular polygon for filling curve by explicit tessellation
           *
           * After calling the <a href="#/p5/beginShape">beginShape()</a> function, a series of <a href="#/p5/vertex">vertex()</a> commands must follow. To stop
           * drawing the shape, call <a href="#/p5/endShape">endShape()</a>. Each shape will be outlined with the
           * current stroke color and filled with the fill color.
           *
           * Transformations such as <a href="#/p5/translate">translate()</a>, <a href="#/p5/rotate">rotate()</a>, and <a href="#/p5/scale">scale()</a> do not work
           * within <a href="#/p5/beginShape">beginShape()</a>. It is also not possible to use other shapes, such as
           * <a href="#/p5/ellipse">ellipse()</a> or <a href="#/p5/rect">rect()</a> within <a href="#/p5/beginShape">beginShape()</a>.
           *
           * @method beginShape
           * @param  {Constant} [kind] either POINTS, LINES, TRIANGLES, TRIANGLE_FAN
           *                                TRIANGLE_STRIP, QUADS, QUAD_STRIP or TESS
           * @chainable
           * @example
           * <div>
           * <code>
           * beginShape();
           * vertex(30, 20);
           * vertex(85, 20);
           * vertex(85, 75);
           * vertex(30, 75);
           * endShape(CLOSE);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * beginShape(POINTS);
           * vertex(30, 20);
           * vertex(85, 20);
           * vertex(85, 75);
           * vertex(30, 75);
           * endShape();
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * beginShape(LINES);
           * vertex(30, 20);
           * vertex(85, 20);
           * vertex(85, 75);
           * vertex(30, 75);
           * endShape();
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * noFill();
           * beginShape();
           * vertex(30, 20);
           * vertex(85, 20);
           * vertex(85, 75);
           * vertex(30, 75);
           * endShape();
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * noFill();
           * beginShape();
           * vertex(30, 20);
           * vertex(85, 20);
           * vertex(85, 75);
           * vertex(30, 75);
           * endShape(CLOSE);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * beginShape(TRIANGLES);
           * vertex(30, 75);
           * vertex(40, 20);
           * vertex(50, 75);
           * vertex(60, 20);
           * vertex(70, 75);
           * vertex(80, 20);
           * endShape();
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * beginShape(TRIANGLE_STRIP);
           * vertex(30, 75);
           * vertex(40, 20);
           * vertex(50, 75);
           * vertex(60, 20);
           * vertex(70, 75);
           * vertex(80, 20);
           * vertex(90, 75);
           * endShape();
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * beginShape(TRIANGLE_FAN);
           * vertex(57.5, 50);
           * vertex(57.5, 15);
           * vertex(92, 50);
           * vertex(57.5, 85);
           * vertex(22, 50);
           * vertex(57.5, 15);
           * endShape();
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * beginShape(QUADS);
           * vertex(30, 20);
           * vertex(30, 75);
           * vertex(50, 75);
           * vertex(50, 20);
           * vertex(65, 20);
           * vertex(65, 75);
           * vertex(85, 75);
           * vertex(85, 20);
           * endShape();
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * beginShape(QUAD_STRIP);
           * vertex(30, 20);
           * vertex(30, 75);
           * vertex(50, 20);
           * vertex(50, 75);
           * vertex(65, 20);
           * vertex(65, 75);
           * vertex(85, 20);
           * vertex(85, 75);
           * endShape();
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * beginShape(TESS);
           * vertex(20, 20);
           * vertex(80, 20);
           * vertex(80, 40);
           * vertex(40, 40);
           * vertex(40, 60);
           * vertex(80, 60);
           * vertex(80, 80);
           * vertex(20, 80);
           * endShape(CLOSE);
           * </code>
           * </div>
           *
           * @alt
           * white square-shape with black outline in middle-right of canvas.
           * 4 black points in a square shape in middle-right of canvas.
           * 2 horizontal black lines. In the top-right and bottom-right of canvas.
           * 3 line shape with horizontal on top, vertical in middle and horizontal bottom.
           * square line shape in middle-right of canvas.
           * 2 white triangle shapes mid-right canvas. left one pointing up and right down.
           * 5 horizontal interlocking and alternating white triangles in mid-right canvas.
           * 4 interlocking white triangles in 45 degree rotated square-shape.
           * 2 white rectangle shapes in mid-right canvas. Both 20x55.
           * 3 side-by-side white rectangles center rect is smaller in mid-right canvas.
           * Thick white l-shape with black outline mid-top-left of canvas.
           */ cov_13gx1t2zoz.s[12]++;
          _main.default.prototype.beginShape = function(kind) {
            cov_13gx1t2zoz.f[1]++;
            cov_13gx1t2zoz.s[13]++;
            _main.default._validateParameters('beginShape', arguments);
            cov_13gx1t2zoz.s[14]++;
            if (this._renderer.isP3D) {
              var _this$_renderer;
              cov_13gx1t2zoz.b[0][0]++;
              cov_13gx1t2zoz.s[15]++;
              (_this$_renderer = this._renderer).beginShape.apply(
                _this$_renderer,
                arguments
              );
            } else {
              cov_13gx1t2zoz.b[0][1]++;
              cov_13gx1t2zoz.s[16]++;
              if (
                (cov_13gx1t2zoz.b[2][0]++, kind === constants.POINTS) ||
                (cov_13gx1t2zoz.b[2][1]++, kind === constants.LINES) ||
                (cov_13gx1t2zoz.b[2][2]++, kind === constants.TRIANGLES) ||
                (cov_13gx1t2zoz.b[2][3]++, kind === constants.TRIANGLE_FAN) ||
                (cov_13gx1t2zoz.b[2][4]++, kind === constants.TRIANGLE_STRIP) ||
                (cov_13gx1t2zoz.b[2][5]++, kind === constants.QUADS) ||
                (cov_13gx1t2zoz.b[2][6]++, kind === constants.QUAD_STRIP)
              ) {
                cov_13gx1t2zoz.b[1][0]++;
                cov_13gx1t2zoz.s[17]++;
                shapeKind = kind;
              } else {
                cov_13gx1t2zoz.b[1][1]++;
                cov_13gx1t2zoz.s[18]++;
                shapeKind = null;
              }
              cov_13gx1t2zoz.s[19]++;

              vertices = [];
              cov_13gx1t2zoz.s[20]++;
              contourVertices = [];
            }
            cov_13gx1t2zoz.s[21]++;
            return this;
          };

          /**
           * Specifies vertex coordinates for Bezier curves. Each call to
           * bezierVertex() defines the position of two control points and
           * one anchor point of a Bezier curve, adding a new segment to a
           * line or shape. For WebGL mode bezierVertex() can be used in 2D
           * as well as 3D mode. 2D mode expects 6 parameters, while 3D mode
           * expects 9 parameters (including z coordinates).
           *
           * The first time bezierVertex() is used within a <a href="#/p5/beginShape">beginShape()</a>
           * call, it must be prefaced with a call to <a href="#/p5/vertex">vertex()</a> to set the first anchor
           * point. This function must be used between <a href="#/p5/beginShape">beginShape()</a> and <a href="#/p5/endShape">endShape()</a>
           * and only when there is no MODE or POINTS parameter specified to
           * <a href="#/p5/beginShape">beginShape()</a>.
           *
           * @method bezierVertex
           * @param  {Number} x2 x-coordinate for the first control point
           * @param  {Number} y2 y-coordinate for the first control point
           * @param  {Number} x3 x-coordinate for the second control point
           * @param  {Number} y3 y-coordinate for the second control point
           * @param  {Number} x4 x-coordinate for the anchor point
           * @param  {Number} y4 y-coordinate for the anchor point
           * @chainable
           *
           * @example
           * <div>
           * <code>
           * noFill();
           * beginShape();
           * vertex(30, 20);
           * bezierVertex(80, 0, 80, 75, 30, 75);
           * endShape();
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * beginShape();
           * vertex(30, 20);
           * bezierVertex(80, 0, 80, 75, 30, 75);
           * bezierVertex(50, 80, 60, 25, 30, 20);
           * endShape();
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   setAttributes('antialias', true);
           * }
           * function draw() {
           *   orbitControl();
           *   background(50);
           *   strokeWeight(4);
           *   stroke(255);
           *   point(-25, 30);
           *   point(25, 30);
           *   point(25, -30);
           *   point(-25, -30);
           *
           *   strokeWeight(1);
           *   noFill();
           *
           *   beginShape();
           *   vertex(-25, 30);
           *   bezierVertex(25, 30, 25, -30, -25, -30);
           *   endShape();
           *
           *   beginShape();
           *   vertex(-25, 30, 20);
           *   bezierVertex(25, 30, 20, 25, -30, 20, -25, -30, 20);
           *   endShape();
           * }
           * </code>
           * </div>
           *
           * @alt
           * crescent-shaped line in middle of canvas. Points facing left.
           * white crescent shape in middle of canvas. Points facing left.
           * crescent shape in middle of canvas with another crescent shape on positive z-axis.
           */

          /**
           * @method bezierVertex
           * @param  {Number} x2
           * @param  {Number} y2
           * @param  {Number} z2 z-coordinate for the first control point (for WebGL mode)
           * @param  {Number} x3
           * @param  {Number} y3
           * @param  {Number} z3 z-coordinate for the second control point (for WebGL mode)
           * @param  {Number} x4
           * @param  {Number} y4
           * @param  {Number} z4 z-coordinate for the anchor point (for WebGL mode)
           * @chainable
           */ cov_13gx1t2zoz.s[22]++;
          _main.default.prototype.bezierVertex = function() {
            cov_13gx1t2zoz.f[2]++;
            cov_13gx1t2zoz.s[23]++;
            for (
              var _len = arguments.length, args = new Array(_len), _key = 0;
              _key < _len;
              _key++
            ) {
              args[_key] = arguments[_key];
            }
            _main.default._validateParameters('bezierVertex', args);
            cov_13gx1t2zoz.s[24]++;
            if (this._renderer.isP3D) {
              var _this$_renderer2;
              cov_13gx1t2zoz.b[3][0]++;
              cov_13gx1t2zoz.s[25]++;
              (_this$_renderer2 = this._renderer).bezierVertex.apply(
                _this$_renderer2,
                args
              );
            } else {
              cov_13gx1t2zoz.b[3][1]++;
              cov_13gx1t2zoz.s[26]++;
              if (vertices.length === 0) {
                cov_13gx1t2zoz.b[4][0]++;
                cov_13gx1t2zoz.s[27]++;
                _main.default._friendlyError(
                  'vertex() must be used once before calling bezierVertex()',
                  'bezierVertex'
                );
              } else {
                cov_13gx1t2zoz.b[4][1]++;
                cov_13gx1t2zoz.s[28]++;
                isBezier = true;
                var vert = (cov_13gx1t2zoz.s[29]++, []);
                cov_13gx1t2zoz.s[30]++;
                for (var i = (cov_13gx1t2zoz.s[31]++, 0); i < args.length; i++) {
                  cov_13gx1t2zoz.s[32]++;
                  vert[i] = args[i];
                }
                cov_13gx1t2zoz.s[33]++;
                vert.isVert = false;
                cov_13gx1t2zoz.s[34]++;
                if (isContour) {
                  cov_13gx1t2zoz.b[5][0]++;
                  cov_13gx1t2zoz.s[35]++;
                  contourVertices.push(vert);
                } else {
                  cov_13gx1t2zoz.b[5][1]++;
                  cov_13gx1t2zoz.s[36]++;
                  vertices.push(vert);
                }
              }
            }
            cov_13gx1t2zoz.s[37]++;
            return this;
          };

          /**
           * Specifies vertex coordinates for curves. This function may only
           * be used between <a href="#/p5/beginShape">beginShape()</a> and <a href="#/p5/endShape">endShape()</a> and only when there
           * is no MODE parameter specified to <a href="#/p5/beginShape">beginShape()</a>.
           * For WebGL mode curveVertex() can be used in 2D as well as 3D mode.
           * 2D mode expects 2 parameters, while 3D mode expects 3 parameters.
           *
           * The first and last points in a series of curveVertex() lines will be used to
           * guide the beginning and end of a the curve. A minimum of four
           * points is required to draw a tiny curve between the second and
           * third points. Adding a fifth point with curveVertex() will draw
           * the curve between the second, third, and fourth points. The
           * curveVertex() function is an implementation of Catmull-Rom
           * splines.
           *
           * @method curveVertex
           * @param {Number} x x-coordinate of the vertex
           * @param {Number} y y-coordinate of the vertex
           * @chainable
           * @example
           * <div>
           * <code>
           * strokeWeight(5);
           * point(84, 91);
           * point(68, 19);
           * point(21, 17);
           * point(32, 91);
           * strokeWeight(1);
           *
           * noFill();
           * beginShape();
           * curveVertex(84, 91);
           * curveVertex(84, 91);
           * curveVertex(68, 19);
           * curveVertex(21, 17);
           * curveVertex(32, 91);
           * curveVertex(32, 91);
           * endShape();
           * </code>
           * </div>
           *
           * @alt
           * Upside-down u-shape line, mid canvas. left point extends beyond canvas view.
           */

          /**
           * @method curveVertex
           * @param {Number} x
           * @param {Number} y
           * @param {Number} [z] z-coordinate of the vertex (for WebGL mode)
           * @chainable
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   setAttributes('antialias', true);
           * }
           * function draw() {
           *   orbitControl();
           *   background(50);
           *   strokeWeight(4);
           *   stroke(255);
           *
           *   point(-25, 25);
           *   point(-25, 25);
           *   point(-25, -25);
           *   point(25, -25);
           *   point(25, 25);
           *   point(25, 25);
           *
           *   strokeWeight(1);
           *   noFill();
           *
           *   beginShape();
           *   curveVertex(-25, 25);
           *   curveVertex(-25, 25);
           *   curveVertex(-25, -25);
           *   curveVertex(25, -25);
           *   curveVertex(25, 25);
           *   curveVertex(25, 25);
           *   endShape();
           *
           *   beginShape();
           *   curveVertex(-25, 25, 20);
           *   curveVertex(-25, 25, 20);
           *   curveVertex(-25, -25, 20);
           *   curveVertex(25, -25, 20);
           *   curveVertex(25, 25, 20);
           *   curveVertex(25, 25, 20);
           *   endShape();
           * }
           * </code>
           * </div>
           *
           * @alt
           * Upside-down u-shape line, mid canvas with the same shape in positive z-axis.
           */ cov_13gx1t2zoz.s[38]++;
          _main.default.prototype.curveVertex = function() {
            cov_13gx1t2zoz.f[3]++;
            cov_13gx1t2zoz.s[39]++;
            for (
              var _len2 = arguments.length, args = new Array(_len2), _key2 = 0;
              _key2 < _len2;
              _key2++
            ) {
              args[_key2] = arguments[_key2];
            }
            _main.default._validateParameters('curveVertex', args);
            cov_13gx1t2zoz.s[40]++;
            if (this._renderer.isP3D) {
              var _this$_renderer3;
              cov_13gx1t2zoz.b[6][0]++;
              cov_13gx1t2zoz.s[41]++;
              (_this$_renderer3 = this._renderer).curveVertex.apply(_this$_renderer3, args);
            } else {
              cov_13gx1t2zoz.b[6][1]++;
              cov_13gx1t2zoz.s[42]++;
              isCurve = true;
              cov_13gx1t2zoz.s[43]++;
              this.vertex(args[0], args[1]);
            }
            cov_13gx1t2zoz.s[44]++;
            return this;
          };

          /**
           * Use the <a href="#/p5/beginContour">beginContour()</a> and <a href="#/p5/endContour">endContour()</a> functions to create negative
           * shapes within shapes such as the center of the letter 'O'. <a href="#/p5/beginContour">beginContour()</a>
           * begins recording vertices for the shape and <a href="#/p5/endContour">endContour()</a> stops recording.
           * The vertices that define a negative shape must "wind" in the opposite
           * direction from the exterior shape. First draw vertices for the exterior
           * clockwise order, then for internal shapes, draw vertices
           * shape in counter-clockwise.
           *
           * These functions can only be used within a <a href="#/p5/beginShape">beginShape()</a>/<a href="#/p5/endShape">endShape()</a> pair and
           * transformations such as <a href="#/p5/translate">translate()</a>, <a href="#/p5/rotate">rotate()</a>, and <a href="#/p5/scale">scale()</a> do not work
           * within a <a href="#/p5/beginContour">beginContour()</a>/<a href="#/p5/endContour">endContour()</a> pair. It is also not possible to use
           * other shapes, such as <a href="#/p5/ellipse">ellipse()</a> or <a href="#/p5/rect">rect()</a> within.
           *
           * @method endContour
           * @chainable
           * @example
           * <div>
           * <code>
           * translate(50, 50);
           * stroke(255, 0, 0);
           * beginShape();
           * // Exterior part of shape, clockwise winding
           * vertex(-40, -40);
           * vertex(40, -40);
           * vertex(40, 40);
           * vertex(-40, 40);
           * // Interior part of shape, counter-clockwise winding
           * beginContour();
           * vertex(-20, -20);
           * vertex(-20, 20);
           * vertex(20, 20);
           * vertex(20, -20);
           * endContour();
           * endShape(CLOSE);
           * </code>
           * </div>
           *
           * @alt
           * white rect and smaller grey rect with red outlines in center of canvas.
           */ cov_13gx1t2zoz.s[45]++;
          _main.default.prototype.endContour = function() {
            cov_13gx1t2zoz.f[4]++;
            var vert = (cov_13gx1t2zoz.s[46]++, contourVertices[0].slice()); // copy all data
            cov_13gx1t2zoz.s[47]++;
            vert.isVert = contourVertices[0].isVert;
            cov_13gx1t2zoz.s[48]++;
            vert.moveTo = false;
            cov_13gx1t2zoz.s[49]++;
            contourVertices.push(vert);

            // prevent stray lines with multiple contours
            cov_13gx1t2zoz.s[50]++;
            if (isFirstContour) {
              cov_13gx1t2zoz.b[7][0]++;
              cov_13gx1t2zoz.s[51]++;
              vertices.push(vertices[0]);
              cov_13gx1t2zoz.s[52]++;
              isFirstContour = false;
            } else {
              cov_13gx1t2zoz.b[7][1]++;
            }
            cov_13gx1t2zoz.s[53]++;

            for (var i = (cov_13gx1t2zoz.s[54]++, 0); i < contourVertices.length; i++) {
              cov_13gx1t2zoz.s[55]++;
              vertices.push(contourVertices[i]);
            }
            cov_13gx1t2zoz.s[56]++;
            return this;
          };

          /**
           * The <a href="#/p5/endShape">endShape()</a> function is the companion to <a href="#/p5/beginShape">beginShape()</a> and may only be
           * called after <a href="#/p5/beginShape">beginShape()</a>. When <a href="#/p5/endshape">endShape()</a> is called, all of image data
           * defined since the previous call to <a href="#/p5/beginShape">beginShape()</a> is written into the image
           * buffer. The constant CLOSE as the value for the MODE parameter to close
           * the shape (to connect the beginning and the end).
           *
           * @method endShape
           * @param  {Constant} [mode] use CLOSE to close the shape
           * @chainable
           * @example
           * <div>
           * <code>
           * noFill();
           *
           * beginShape();
           * vertex(20, 20);
           * vertex(45, 20);
           * vertex(45, 80);
           * endShape(CLOSE);
           *
           * beginShape();
           * vertex(50, 20);
           * vertex(75, 20);
           * vertex(75, 80);
           * endShape();
           * </code>
           * </div>
           *
           * @alt
           * Triangle line shape with smallest interior angle on bottom and upside-down L.
           */ cov_13gx1t2zoz.s[57]++;
          _main.default.prototype.endShape = function(mode) {
            cov_13gx1t2zoz.f[5]++;
            cov_13gx1t2zoz.s[58]++;
            _main.default._validateParameters('endShape', arguments);
            cov_13gx1t2zoz.s[59]++;
            if (this._renderer.isP3D) {
              cov_13gx1t2zoz.b[8][0]++;
              cov_13gx1t2zoz.s[60]++;
              this._renderer.endShape(
                mode,
                isCurve,
                isBezier,
                isQuadratic,
                isContour,
                shapeKind
              );
            } else {
              cov_13gx1t2zoz.b[8][1]++;
              cov_13gx1t2zoz.s[61]++;
              if (vertices.length === 0) {
                cov_13gx1t2zoz.b[9][0]++;
                cov_13gx1t2zoz.s[62]++;
                return this;
              } else {
                cov_13gx1t2zoz.b[9][1]++;
              }
              cov_13gx1t2zoz.s[63]++;
              if (
                (cov_13gx1t2zoz.b[11][0]++, !this._renderer._doStroke) &&
                (cov_13gx1t2zoz.b[11][1]++, !this._renderer._doFill)
              ) {
                cov_13gx1t2zoz.b[10][0]++;
                cov_13gx1t2zoz.s[64]++;
                return this;
              } else {
                cov_13gx1t2zoz.b[10][1]++;
              }

              var closeShape = (cov_13gx1t2zoz.s[65]++, mode === constants.CLOSE);

              // if the shape is closed, the first element is also the last element
              cov_13gx1t2zoz.s[66]++;
              if (
                (cov_13gx1t2zoz.b[13][0]++, closeShape) &&
                (cov_13gx1t2zoz.b[13][1]++, !isContour)
              ) {
                cov_13gx1t2zoz.b[12][0]++;
                cov_13gx1t2zoz.s[67]++;
                vertices.push(vertices[0]);
              } else {
                cov_13gx1t2zoz.b[12][1]++;
              }
              cov_13gx1t2zoz.s[68]++;

              this._renderer.endShape(
                mode,
                vertices,
                isCurve,
                isBezier,
                isQuadratic,
                isContour,
                shapeKind
              );

              // Reset some settings
              cov_13gx1t2zoz.s[69]++;
              isCurve = false;
              cov_13gx1t2zoz.s[70]++;
              isBezier = false;
              cov_13gx1t2zoz.s[71]++;
              isQuadratic = false;
              cov_13gx1t2zoz.s[72]++;
              isContour = false;
              cov_13gx1t2zoz.s[73]++;
              isFirstContour = true;

              // If the shape is closed, the first element was added as last element.
              // We must remove it again to prevent the list of vertices from growing
              // over successive calls to endShape(CLOSE)
              cov_13gx1t2zoz.s[74]++;
              if (closeShape) {
                cov_13gx1t2zoz.b[14][0]++;
                cov_13gx1t2zoz.s[75]++;
                vertices.pop();
              } else {
                cov_13gx1t2zoz.b[14][1]++;
              }
            }
            cov_13gx1t2zoz.s[76]++;
            return this;
          };

          /**
           * Specifies vertex coordinates for quadratic Bezier curves. Each call to
           * quadraticVertex() defines the position of one control points and one
           * anchor point of a Bezier curve, adding a new segment to a line or shape.
           * The first time quadraticVertex() is used within a <a href="#/p5/beginShape">beginShape()</a> call, it
           * must be prefaced with a call to <a href="#/p5/vertex">vertex()</a> to set the first anchor point.
           * For WebGL mode quadraticVertex() can be used in 2D as well as 3D mode.
           * 2D mode expects 4 parameters, while 3D mode expects 6 parameters
           * (including z coordinates).
           *
           * This function must be used between <a href="#/p5/beginShape">beginShape()</a> and <a href="#/p5/endShape">endShape()</a>
           * and only when there is no MODE or POINTS parameter specified to
           * <a href="#/p5/beginShape">beginShape()</a>.
           *
           * @method quadraticVertex
           * @param  {Number} cx x-coordinate for the control point
           * @param  {Number} cy y-coordinate for the control point
           * @param  {Number} x3 x-coordinate for the anchor point
           * @param  {Number} y3 y-coordinate for the anchor point
           * @chainable
           *
           * @example
           * <div>
           * <code>
           * strokeWeight(5);
           * point(20, 20);
           * point(80, 20);
           * point(50, 50);
           *
           * noFill();
           * strokeWeight(1);
           * beginShape();
           * vertex(20, 20);
           * quadraticVertex(80, 20, 50, 50);
           * endShape();
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * strokeWeight(5);
           * point(20, 20);
           * point(80, 20);
           * point(50, 50);
           *
           * point(20, 80);
           * point(80, 80);
           * point(80, 60);
           *
           * noFill();
           * strokeWeight(1);
           * beginShape();
           * vertex(20, 20);
           * quadraticVertex(80, 20, 50, 50);
           * quadraticVertex(20, 80, 80, 80);
           * vertex(80, 60);
           * endShape();
           * </code>
           * </div>
           *
           * @alt
           * arched-shaped black line with 4 pixel thick stroke weight.
           * backwards s-shaped black line with 4 pixel thick stroke weight.
           */

          /**
           * @method quadraticVertex
           * @param  {Number} cx
           * @param  {Number} cy
           * @param  {Number} cz z-coordinate for the control point (for WebGL mode)
           * @param  {Number} x3
           * @param  {Number} y3
           * @param  {Number} z3 z-coordinate for the anchor point (for WebGL mode)
           * @chainable
           *
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   setAttributes('antialias', true);
           * }
           * function draw() {
           *   orbitControl();
           *   background(50);
           *   strokeWeight(4);
           *   stroke(255);
           *
           *   point(-35, -35);
           *   point(35, -35);
           *   point(0, 0);
           *   point(-35, 35);
           *   point(35, 35);
           *   point(35, 10);
           *
           *   strokeWeight(1);
           *   noFill();
           *
           *   beginShape();
           *   vertex(-35, -35);
           *   quadraticVertex(35, -35, 0, 0);
           *   quadraticVertex(-35, 35, 35, 35);
           *   vertex(35, 10);
           *   endShape();
           *
           *   beginShape();
           *   vertex(-35, -35, 20);
           *   quadraticVertex(35, -35, 20, 0, 0, 20);
           *   quadraticVertex(-35, 35, 20, 35, 35, 20);
           *   vertex(35, 10, 20);
           *   endShape();
           * }
           * </code>
           * </div>
           *
           * @alt
           * backwards s-shaped black line with the same s-shaped line in postive z-axis.
           */ cov_13gx1t2zoz.s[77]++;
          _main.default.prototype.quadraticVertex = function() {
            cov_13gx1t2zoz.f[6]++;
            cov_13gx1t2zoz.s[78]++;
            for (
              var _len3 = arguments.length, args = new Array(_len3), _key3 = 0;
              _key3 < _len3;
              _key3++
            ) {
              args[_key3] = arguments[_key3];
            }
            _main.default._validateParameters('quadraticVertex', args);
            cov_13gx1t2zoz.s[79]++;
            if (this._renderer.isP3D) {
              var _this$_renderer4;
              cov_13gx1t2zoz.b[15][0]++;
              cov_13gx1t2zoz.s[80]++;
              (_this$_renderer4 = this._renderer).quadraticVertex.apply(
                _this$_renderer4,
                args
              );
            } else {
              cov_13gx1t2zoz.b[15][1]++;
              cov_13gx1t2zoz.s[81]++;
              //if we're drawing a contour, put the points into an
              // array for inside drawing
              if (this._contourInited) {
                cov_13gx1t2zoz.b[16][0]++;
                var pt = (cov_13gx1t2zoz.s[82]++, {});
                cov_13gx1t2zoz.s[83]++;
                pt.x = args[0];
                cov_13gx1t2zoz.s[84]++;
                pt.y = args[1];
                cov_13gx1t2zoz.s[85]++;
                pt.x3 = args[2];
                cov_13gx1t2zoz.s[86]++;
                pt.y3 = args[3];
                cov_13gx1t2zoz.s[87]++;
                pt.type = constants.QUADRATIC;
                cov_13gx1t2zoz.s[88]++;
                this._contourVertices.push(pt);
                cov_13gx1t2zoz.s[89]++;

                return this;
              } else {
                cov_13gx1t2zoz.b[16][1]++;
              }
              cov_13gx1t2zoz.s[90]++;
              if (vertices.length > 0) {
                cov_13gx1t2zoz.b[17][0]++;
                cov_13gx1t2zoz.s[91]++;
                isQuadratic = true;
                var vert = (cov_13gx1t2zoz.s[92]++, []);
                cov_13gx1t2zoz.s[93]++;
                for (var i = (cov_13gx1t2zoz.s[94]++, 0); i < args.length; i++) {
                  cov_13gx1t2zoz.s[95]++;
                  vert[i] = args[i];
                }
                cov_13gx1t2zoz.s[96]++;
                vert.isVert = false;
                cov_13gx1t2zoz.s[97]++;
                if (isContour) {
                  cov_13gx1t2zoz.b[18][0]++;
                  cov_13gx1t2zoz.s[98]++;
                  contourVertices.push(vert);
                } else {
                  cov_13gx1t2zoz.b[18][1]++;
                  cov_13gx1t2zoz.s[99]++;
                  vertices.push(vert);
                }
              } else {
                cov_13gx1t2zoz.b[17][1]++;
                cov_13gx1t2zoz.s[100]++;
                _main.default._friendlyError(
                  'vertex() must be used once before calling quadraticVertex()',
                  'quadraticVertex'
                );
              }
            }
            cov_13gx1t2zoz.s[101]++;
            return this;
          };

          /**
           * All shapes are constructed by connecting a series of vertices. <a href="#/p5/vertex">vertex()</a>
           * is used to specify the vertex coordinates for points, lines, triangles,
           * quads, and polygons. It is used exclusively within the <a href="#/p5/beginShape">beginShape()</a> and
           * <a href="#/p5/endShape">endShape()</a> functions.
           *
           * @method vertex
           * @param  {Number} x x-coordinate of the vertex
           * @param  {Number} y y-coordinate of the vertex
           * @chainable
           * @example
           * <div>
           * <code>
           * strokeWeight(3);
           * beginShape(POINTS);
           * vertex(30, 20);
           * vertex(85, 20);
           * vertex(85, 75);
           * vertex(30, 75);
           * endShape();
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * createCanvas(100, 100, WEBGL);
           * background(240, 240, 240);
           * fill(237, 34, 93);
           * noStroke();
           * beginShape();
           * vertex(0, 35);
           * vertex(35, 0);
           * vertex(0, -35);
           * vertex(-35, 0);
           * endShape();
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * createCanvas(100, 100, WEBGL);
           * background(240, 240, 240);
           * fill(237, 34, 93);
           * noStroke();
           * beginShape();
           * vertex(-10, 10);
           * vertex(0, 35);
           * vertex(10, 10);
           * vertex(35, 0);
           * vertex(10, -8);
           * vertex(0, -35);
           * vertex(-10, -8);
           * vertex(-35, 0);
           * endShape();
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * strokeWeight(3);
           * stroke(237, 34, 93);
           * beginShape(LINES);
           * vertex(10, 35);
           * vertex(90, 35);
           * vertex(10, 65);
           * vertex(90, 65);
           * vertex(35, 10);
           * vertex(35, 90);
           * vertex(65, 10);
           * vertex(65, 90);
           * endShape();
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // Click to change the number of sides.
           * // In WebGL mode, custom shapes will only
           * // display hollow fill sections when
           * // all calls to vertex() use the same z-value.
           *
           * let sides = 3;
           * let angle, px, py;
           *
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   setAttributes('antialias', true);
           *   fill(237, 34, 93);
           *   strokeWeight(3);
           * }
           *
           * function draw() {
           *   background(200);
           *   rotateX(frameCount * 0.01);
           *   rotateZ(frameCount * 0.01);
           *   ngon(sides, 0, 0, 80);
           * }
           *
           * function mouseClicked() {
           *   if (sides > 6) {
           *     sides = 3;
           *   } else {
           *     sides++;
           *   }
           * }
           *
           * function ngon(n, x, y, d) {
           *   beginShape(TESS);
           *   for (let i = 0; i < n + 1; i++) {
           *     angle = TWO_PI / n * i;
           *     px = x + sin(angle) * d / 2;
           *     py = y - cos(angle) * d / 2;
           *     vertex(px, py, 0);
           *   }
           *   for (let i = 0; i < n + 1; i++) {
           *     angle = TWO_PI / n * i;
           *     px = x + sin(angle) * d / 4;
           *     py = y - cos(angle) * d / 4;
           *     vertex(px, py, 0);
           *   }
           *   endShape();
           * }
           * </code>
           * </div>
           * @alt
           * 4 black points in a square shape in middle-right of canvas.
           * 4 points making a diamond shape.
           * 8 points making a star.
           * 8 points making 4 lines.
           * A rotating 3D shape with a hollow section in the middle.
           */
          /**
           * @method vertex
           * @param  {Number} x
           * @param  {Number} y
           * @param  {Number} z   z-coordinate of the vertex.
           *                       Defaults to 0 if not specified.
           * @chainable
           */
          /**
           * @method vertex
           * @param  {Number} x
           * @param  {Number} y
           * @param  {Number} [z]
           * @param  {Number} u   the vertex's texture u-coordinate
           * @param  {Number} v   the vertex's texture v-coordinate
           * @chainable
           */ cov_13gx1t2zoz.s[102]++;
          _main.default.prototype.vertex = function(x, y, moveTo, u, v) {
            cov_13gx1t2zoz.f[7]++;
            cov_13gx1t2zoz.s[103]++;
            if (this._renderer.isP3D) {
              var _this$_renderer5;
              cov_13gx1t2zoz.b[19][0]++;
              cov_13gx1t2zoz.s[104]++;
              (_this$_renderer5 = this._renderer).vertex.apply(_this$_renderer5, arguments);
            } else {
              cov_13gx1t2zoz.b[19][1]++;
              var vert = (cov_13gx1t2zoz.s[105]++, []);
              cov_13gx1t2zoz.s[106]++;
              vert.isVert = true;
              cov_13gx1t2zoz.s[107]++;
              vert[0] = x;
              cov_13gx1t2zoz.s[108]++;
              vert[1] = y;
              cov_13gx1t2zoz.s[109]++;
              vert[2] = 0;
              cov_13gx1t2zoz.s[110]++;
              vert[3] = 0;
              cov_13gx1t2zoz.s[111]++;
              vert[4] = 0;
              cov_13gx1t2zoz.s[112]++;
              vert[5] = this._renderer._getFill();
              cov_13gx1t2zoz.s[113]++;
              vert[6] = this._renderer._getStroke();
              cov_13gx1t2zoz.s[114]++;

              if (moveTo) {
                cov_13gx1t2zoz.b[20][0]++;
                cov_13gx1t2zoz.s[115]++;
                vert.moveTo = moveTo;
              } else {
                cov_13gx1t2zoz.b[20][1]++;
              }
              cov_13gx1t2zoz.s[116]++;
              if (isContour) {
                cov_13gx1t2zoz.b[21][0]++;
                cov_13gx1t2zoz.s[117]++;
                if (contourVertices.length === 0) {
                  cov_13gx1t2zoz.b[22][0]++;
                  cov_13gx1t2zoz.s[118]++;
                  vert.moveTo = true;
                } else {
                  cov_13gx1t2zoz.b[22][1]++;
                }
                cov_13gx1t2zoz.s[119]++;
                contourVertices.push(vert);
              } else {
                cov_13gx1t2zoz.b[21][1]++;
                cov_13gx1t2zoz.s[120]++;
                vertices.push(vert);
              }
            }
            cov_13gx1t2zoz.s[121]++;
            return this;
          };

          /**
           * Sets the 3d vertex normal to use for subsequent vertices drawn with
           * <a href="#/p5/vertex">vertex()</a>. A normal is a vector that is generally
           * nearly perpendicular to a shape's surface which controls how much light will
           * be reflected from that part of the surface.
           *
           * @method normal
           * @param  {Vector} vector A p5.Vector representing the vertex normal.
           * @chainable
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   noStroke();
           * }
           *
           * function draw() {
           *   background(255);
           *   rotateY(frameCount / 100);
           *   normalMaterial();
           *   beginShape(TRIANGLE_STRIP);
           *   normal(-0.4, 0.4, 0.8);
           *   vertex(-30, 30, 0);
           *
           *   normal(0, 0, 1);
           *   vertex(-30, -30, 30);
           *   vertex(30, 30, 30);
           *
           *   normal(0.4, -0.4, 0.8);
           *   vertex(30, -30, 0);
           *   endShape();
           * }
           * </code>
           * </div>
           */

          /**
           * @method normal
           * @param  {Number} x The x component of the vertex normal.
           * @param  {Number} y The y component of the vertex normal.
           * @param  {Number} z The z component of the vertex normal.
           * @chainable
           */ cov_13gx1t2zoz.s[122]++;
          _main.default.prototype.normal = function(x, y, z) {
            var _this$_renderer6;
            cov_13gx1t2zoz.f[8]++;
            cov_13gx1t2zoz.s[123]++;
            this._assert3d('normal');
            cov_13gx1t2zoz.s[124]++;
            _main.default._validateParameters('normal', arguments);
            cov_13gx1t2zoz.s[125]++;
            (_this$_renderer6 = this._renderer).normal.apply(_this$_renderer6, arguments);
            cov_13gx1t2zoz.s[126]++;

            return this;
          };
          var _default = _main.default;
          exports.default = _default;
        },
        { '../constants': 272, '../main': 283, 'core-js/modules/es.array.slice': 178 }
      ],
      294: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_2jylc5evdq = (function() {
            var path = '/Users/outofambit/src/p5.js/src/core/shim.js';
            var hash = '733969b89e747a95170aaeaced2669d49fbcb8d4';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/core/shim.js',
              statementMap: {
                '0': { start: { line: 7, column: 0 }, end: { line: 16, column: 8 } },
                '1': { start: { line: 8, column: 2 }, end: { line: 16, column: 4 } },
                '2': { start: { line: 15, column: 4 }, end: { line: 15, column: 43 } },
                '3': { start: { line: 25, column: 0 }, end: { line: 37, column: 5 } },
                '4': { start: { line: 26, column: 2 }, end: { line: 36, column: 3 } },
                '5': { start: { line: 30, column: 4 }, end: { line: 35, column: 7 } },
                '6': { start: { line: 47, column: 0 }, end: { line: 90, column: 5 } },
                '7': { start: { line: 48, column: 2 }, end: { line: 89, column: 3 } },
                '8': { start: { line: 49, column: 17 }, end: { line: 49, column: 28 } },
                '9': { start: { line: 50, column: 27 }, end: { line: 50, column: 48 } },
                '10': { start: { line: 51, column: 24 }, end: { line: 51, column: 73 } },
                '11': { start: { line: 51, column: 31 }, end: { line: 51, column: 73 } },
                '12': { start: { line: 53, column: 6 }, end: { line: 53, column: 66 } },
                '13': { start: { line: 54, column: 29 }, end: { line: 54, column: 66 } },
                '14': { start: { line: 55, column: 27 }, end: { line: 58, column: 7 } },
                '15': { start: { line: 56, column: 6 }, end: { line: 58, column: 7 } },
                '16': { start: { line: 57, column: 8 }, end: { line: 57, column: 48 } },
                '17': { start: { line: 61, column: 23 }, end: { line: 81, column: 5 } },
                '18': { start: { line: 62, column: 6 }, end: { line: 64, column: 7 } },
                '19': { start: { line: 63, column: 8 }, end: { line: 63, column: 56 } },
                '20': { start: { line: 65, column: 24 }, end: { line: 65, column: 38 } },
                '21': { start: { line: 67, column: 6 }, end: { line: 79, column: 7 } },
                '22': { start: { line: 68, column: 8 }, end: { line: 68, column: 38 } },
                '23': { start: { line: 69, column: 8 }, end: { line: 69, column: 29 } },
                '24': { start: { line: 70, column: 8 }, end: { line: 75, column: 9 } },
                '25': { start: { line: 71, column: 10 }, end: { line: 74, column: 12 } },
                '26': { start: { line: 76, column: 8 }, end: { line: 78, column: 9 } },
                '27': { start: { line: 77, column: 10 }, end: { line: 77, column: 49 } },
                '28': { start: { line: 80, column: 6 }, end: { line: 80, column: 23 } },
                '29': { start: { line: 83, column: 4 }, end: { line: 88, column: 7 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 7, column: 32 }, end: { line: 7, column: 33 } },
                  loc: { start: { line: 8, column: 2 }, end: { line: 16, column: 4 } },
                  line: 8
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 13, column: 3 }, end: { line: 13, column: 4 } },
                  loc: { start: { line: 13, column: 26 }, end: { line: 16, column: 3 } },
                  line: 13
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: { start: { line: 25, column: 1 }, end: { line: 25, column: 2 } },
                  loc: { start: { line: 25, column: 7 }, end: { line: 37, column: 1 } },
                  line: 25
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: { start: { line: 47, column: 1 }, end: { line: 47, column: 2 } },
                  loc: { start: { line: 47, column: 7 }, end: { line: 90, column: 1 } },
                  line: 47
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: { start: { line: 51, column: 24 }, end: { line: 51, column: 25 } },
                  loc: { start: { line: 51, column: 31 }, end: { line: 51, column: 73 } },
                  line: 51
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: { start: { line: 55, column: 27 }, end: { line: 55, column: 28 } },
                  loc: { start: { line: 56, column: 6 }, end: { line: 58, column: 7 } },
                  line: 56
                },
                '6': {
                  name: 'isEnumerable',
                  decl: { start: { line: 56, column: 15 }, end: { line: 56, column: 27 } },
                  loc: { start: { line: 56, column: 34 }, end: { line: 58, column: 7 } },
                  line: 56
                },
                '7': {
                  name: 'assign',
                  decl: { start: { line: 61, column: 32 }, end: { line: 61, column: 38 } },
                  loc: { start: { line: 61, column: 56 }, end: { line: 81, column: 5 } },
                  line: 61
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 8, column: 2 }, end: { line: 16, column: 4 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 8, column: 2 }, end: { line: 8, column: 30 } },
                    { start: { line: 9, column: 2 }, end: { line: 9, column: 36 } },
                    { start: { line: 10, column: 2 }, end: { line: 10, column: 33 } },
                    { start: { line: 11, column: 2 }, end: { line: 11, column: 31 } },
                    { start: { line: 12, column: 2 }, end: { line: 12, column: 32 } },
                    { start: { line: 13, column: 3 }, end: { line: 16, column: 3 } }
                  ],
                  line: 8
                },
                '1': {
                  loc: { start: { line: 26, column: 2 }, end: { line: 36, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 26, column: 2 }, end: { line: 36, column: 3 } },
                    { start: { line: 26, column: 2 }, end: { line: 36, column: 3 } }
                  ],
                  line: 26
                },
                '2': {
                  loc: { start: { line: 27, column: 4 }, end: { line: 28, column: 38 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 27, column: 4 }, end: { line: 27, column: 44 } },
                    { start: { line: 28, column: 4 }, end: { line: 28, column: 38 } }
                  ],
                  line: 27
                },
                '3': {
                  loc: { start: { line: 48, column: 2 }, end: { line: 89, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 48, column: 2 }, end: { line: 89, column: 3 } },
                    { start: { line: 48, column: 2 }, end: { line: 89, column: 3 } }
                  ],
                  line: 48
                },
                '4': {
                  loc: { start: { line: 51, column: 31 }, end: { line: 51, column: 73 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 51, column: 31 }, end: { line: 51, column: 57 } },
                    { start: { line: 51, column: 61 }, end: { line: 51, column: 73 } }
                  ],
                  line: 51
                },
                '5': {
                  loc: { start: { line: 53, column: 6 }, end: { line: 53, column: 66 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 53, column: 6 }, end: { line: 53, column: 34 } },
                    { start: { line: 53, column: 38 }, end: { line: 53, column: 66 } }
                  ],
                  line: 53
                },
                '6': {
                  loc: { start: { line: 62, column: 6 }, end: { line: 64, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 62, column: 6 }, end: { line: 64, column: 7 } },
                    { start: { line: 62, column: 6 }, end: { line: 64, column: 7 } }
                  ],
                  line: 62
                },
                '7': {
                  loc: { start: { line: 70, column: 8 }, end: { line: 75, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 70, column: 8 }, end: { line: 75, column: 9 } },
                    { start: { line: 70, column: 8 }, end: { line: 75, column: 9 } }
                  ],
                  line: 70
                },
                '8': {
                  loc: { start: { line: 70, column: 12 }, end: { line: 70, column: 54 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 70, column: 12 }, end: { line: 70, column: 22 } },
                    { start: { line: 70, column: 26 }, end: { line: 70, column: 54 } }
                  ],
                  line: 70
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0
              },
              f: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0 },
              b: {
                '0': [0, 0, 0, 0, 0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '733969b89e747a95170aaeaced2669d49fbcb8d4'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.symbol');
          _dereq_('core-js/modules/es.symbol.description');
          _dereq_('core-js/modules/es.symbol.iterator');
          _dereq_('core-js/modules/es.array.filter');
          _dereq_('core-js/modules/es.array.iterator');
          _dereq_('core-js/modules/es.array.slice');
          _dereq_('core-js/modules/es.object.assign');
          _dereq_('core-js/modules/es.object.keys');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.string.iterator');
          _dereq_('core-js/modules/es.typed-array.uint8-clamped-array');
          _dereq_('core-js/modules/es.typed-array.copy-within');
          _dereq_('core-js/modules/es.typed-array.every');
          _dereq_('core-js/modules/es.typed-array.fill');
          _dereq_('core-js/modules/es.typed-array.filter');
          _dereq_('core-js/modules/es.typed-array.find');
          _dereq_('core-js/modules/es.typed-array.find-index');
          _dereq_('core-js/modules/es.typed-array.for-each');
          _dereq_('core-js/modules/es.typed-array.includes');
          _dereq_('core-js/modules/es.typed-array.index-of');
          _dereq_('core-js/modules/es.typed-array.iterator');
          _dereq_('core-js/modules/es.typed-array.join');
          _dereq_('core-js/modules/es.typed-array.last-index-of');
          _dereq_('core-js/modules/es.typed-array.map');
          _dereq_('core-js/modules/es.typed-array.reduce');
          _dereq_('core-js/modules/es.typed-array.reduce-right');
          _dereq_('core-js/modules/es.typed-array.reverse');
          _dereq_('core-js/modules/es.typed-array.set');
          _dereq_('core-js/modules/es.typed-array.slice');
          _dereq_('core-js/modules/es.typed-array.some');
          _dereq_('core-js/modules/es.typed-array.sort');
          _dereq_('core-js/modules/es.typed-array.subarray');
          _dereq_('core-js/modules/es.typed-array.to-locale-string');
          _dereq_('core-js/modules/es.typed-array.to-string');
          _dereq_('core-js/modules/web.dom-collections.iterator');
          function _typeof(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof = function _typeof(obj) {
                return typeof obj;
              };
            } else {
              _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof(obj);
          }
          cov_2jylc5evdq.s[0]++; // requestAnim shim layer by Paul Irish
          // http://paulirish.com/2011/requestanimationframe-for-smart-animating/
          // http://my.opera.com/emoller/blog/2011/12/20/
          // requestanimationframe-for-smart-er-animating
          // requestAnimationFrame polyfill by Erik Möller
          // fixes from Paul Irish and Tino Zijdel
          window.requestAnimationFrame = (function() {
            cov_2jylc5evdq.f[0]++;
            cov_2jylc5evdq.s[1]++;
            return (
              (cov_2jylc5evdq.b[0][0]++, window.requestAnimationFrame) ||
              (cov_2jylc5evdq.b[0][1]++, window.webkitRequestAnimationFrame) ||
              (cov_2jylc5evdq.b[0][2]++, window.mozRequestAnimationFrame) ||
              (cov_2jylc5evdq.b[0][3]++, window.oRequestAnimationFrame) ||
              (cov_2jylc5evdq.b[0][4]++, window.msRequestAnimationFrame) ||
              (cov_2jylc5evdq.b[0][5]++,
              function(callback, element) {
                cov_2jylc5evdq.f[1]++;
                cov_2jylc5evdq.s[2]++;
                // should '60' here be framerate?
                window.setTimeout(callback, 1000 / 60);
              })
            );
          })();

          /**
           * shim for Uint8ClampedArray.slice
           * (allows arrayCopy to work with pixels[])
           * with thanks to http://halfpapstudios.com/blog/tag/html5-canvas/
           * Enumerable set to false to protect for...in from
           * Uint8ClampedArray.prototype pollution.
           */ cov_2jylc5evdq.s[3]++;
          (function() {
            cov_2jylc5evdq.f[2]++;
            cov_2jylc5evdq.s[4]++;
            if (
              (cov_2jylc5evdq.b[2][0]++, typeof Uint8ClampedArray !== 'undefined') &&
              (cov_2jylc5evdq.b[2][1]++, !Uint8ClampedArray.prototype.slice)
            ) {
              cov_2jylc5evdq.b[1][0]++;
              cov_2jylc5evdq.s[5]++;
              Object.defineProperty(Uint8ClampedArray.prototype, 'slice', {
                value: Array.prototype.slice,
                writable: true,
                configurable: true,
                enumerable: false
              });
            } else {
              cov_2jylc5evdq.b[1][1]++;
            }
          })();

          /**
           * this is implementation of Object.assign() which is unavailable in
           * IE11 and (non-Chrome) Android browsers.
           * The assign() method is used to copy the values of all enumerable
           * own properties from one or more source objects to a target object.
           * It will return the target object.
           * Modified from https://github.com/ljharb/object.assign
           */ cov_2jylc5evdq.s[6]++;
          (function() {
            cov_2jylc5evdq.f[3]++;
            cov_2jylc5evdq.s[7]++;
            if (!Object.assign) {
              cov_2jylc5evdq.b[3][0]++;
              var keys = (cov_2jylc5evdq.s[8]++, Object.keys);
              var defineProperty = (cov_2jylc5evdq.s[9]++, Object.defineProperty);
              cov_2jylc5evdq.s[10]++;
              var canBeObject = function canBeObject(obj) {
                cov_2jylc5evdq.f[4]++;
                cov_2jylc5evdq.s[11]++;
                return (
                  (cov_2jylc5evdq.b[4][0]++, typeof obj !== 'undefined') &&
                  (cov_2jylc5evdq.b[4][1]++, obj !== null)
                );
              };
              var hasSymbols = (cov_2jylc5evdq.s[12]++,
              (cov_2jylc5evdq.b[5][0]++, typeof Symbol === 'function') &&
                (cov_2jylc5evdq.b[5][1]++, _typeof(Symbol()) === 'symbol'));
              var propIsEnumerable = (cov_2jylc5evdq.s[13]++,
              Object.prototype.propertyIsEnumerable);
              cov_2jylc5evdq.s[14]++;
              var isEnumerableOn = function isEnumerableOn(obj) {
                cov_2jylc5evdq.f[5]++;
                cov_2jylc5evdq.s[15]++;
                return function isEnumerable(prop) {
                  cov_2jylc5evdq.f[6]++;
                  cov_2jylc5evdq.s[16]++;
                  return propIsEnumerable.call(obj, prop);
                };
              };

              // per ES6 spec, this function has to have a length of 2
              cov_2jylc5evdq.s[17]++;
              var assignShim = function assign(target, source1) {
                cov_2jylc5evdq.f[7]++;
                cov_2jylc5evdq.s[18]++;
                if (!canBeObject(target)) {
                  cov_2jylc5evdq.b[6][0]++;
                  cov_2jylc5evdq.s[19]++;
                  throw new TypeError('target must be an object');
                } else {
                  cov_2jylc5evdq.b[6][1]++;
                }
                var objTarget = (cov_2jylc5evdq.s[20]++, Object(target));
                var s, source, i, props;
                cov_2jylc5evdq.s[21]++;
                for (s = 1; s < arguments.length; ++s) {
                  cov_2jylc5evdq.s[22]++;
                  source = Object(arguments[s]);
                  cov_2jylc5evdq.s[23]++;
                  props = keys(source);
                  cov_2jylc5evdq.s[24]++;
                  if (
                    (cov_2jylc5evdq.b[8][0]++, hasSymbols) &&
                    (cov_2jylc5evdq.b[8][1]++, Object.getOwnPropertySymbols)
                  ) {
                    cov_2jylc5evdq.b[7][0]++;
                    cov_2jylc5evdq.s[25]++;
                    props.push.apply(
                      props,
                      Object.getOwnPropertySymbols(source).filter(isEnumerableOn(source))
                    );
                  } else {
                    cov_2jylc5evdq.b[7][1]++;
                  }
                  cov_2jylc5evdq.s[26]++;
                  for (i = 0; i < props.length; ++i) {
                    cov_2jylc5evdq.s[27]++;
                    objTarget[props[i]] = source[props[i]];
                  }
                }
                cov_2jylc5evdq.s[28]++;
                return objTarget;
              };
              cov_2jylc5evdq.s[29]++;

              defineProperty(Object, 'assign', {
                value: assignShim,
                configurable: true,
                enumerable: false,
                writable: true
              });
            } else {
              cov_2jylc5evdq.b[3][1]++;
            }
          })();
        },
        {
          'core-js/modules/es.array.filter': 169,
          'core-js/modules/es.array.iterator': 174,
          'core-js/modules/es.array.slice': 178,
          'core-js/modules/es.object.assign': 188,
          'core-js/modules/es.object.keys': 191,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.string.iterator': 201,
          'core-js/modules/es.symbol': 211,
          'core-js/modules/es.symbol.description': 209,
          'core-js/modules/es.symbol.iterator': 210,
          'core-js/modules/es.typed-array.copy-within': 212,
          'core-js/modules/es.typed-array.every': 213,
          'core-js/modules/es.typed-array.fill': 214,
          'core-js/modules/es.typed-array.filter': 215,
          'core-js/modules/es.typed-array.find': 217,
          'core-js/modules/es.typed-array.find-index': 216,
          'core-js/modules/es.typed-array.for-each': 220,
          'core-js/modules/es.typed-array.includes': 221,
          'core-js/modules/es.typed-array.index-of': 222,
          'core-js/modules/es.typed-array.iterator': 225,
          'core-js/modules/es.typed-array.join': 226,
          'core-js/modules/es.typed-array.last-index-of': 227,
          'core-js/modules/es.typed-array.map': 228,
          'core-js/modules/es.typed-array.reduce': 230,
          'core-js/modules/es.typed-array.reduce-right': 229,
          'core-js/modules/es.typed-array.reverse': 231,
          'core-js/modules/es.typed-array.set': 232,
          'core-js/modules/es.typed-array.slice': 233,
          'core-js/modules/es.typed-array.some': 234,
          'core-js/modules/es.typed-array.sort': 235,
          'core-js/modules/es.typed-array.subarray': 236,
          'core-js/modules/es.typed-array.to-locale-string': 237,
          'core-js/modules/es.typed-array.to-string': 238,
          'core-js/modules/es.typed-array.uint8-clamped-array': 242,
          'core-js/modules/web.dom-collections.iterator': 244
        }
      ],
      295: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_ici0gb6ul = (function() {
            var path = '/Users/outofambit/src/p5.js/src/core/structure.js';
            var hash = '044bf60956edf694ba3769991c4616230c786cd1';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/core/structure.js',
              statementMap: {
                '0': { start: { line: 79, column: 0 }, end: { line: 81, column: 2 } },
                '1': { start: { line: 80, column: 2 }, end: { line: 80, column: 21 } },
                '2': { start: { line: 125, column: 0 }, end: { line: 132, column: 2 } },
                '3': { start: { line: 126, column: 2 }, end: { line: 131, column: 3 } },
                '4': { start: { line: 127, column: 4 }, end: { line: 127, column: 22 } },
                '5': { start: { line: 128, column: 4 }, end: { line: 130, column: 5 } },
                '6': { start: { line: 129, column: 6 }, end: { line: 129, column: 19 } },
                '7': { start: { line: 188, column: 0 }, end: { line: 190, column: 2 } },
                '8': { start: { line: 189, column: 2 }, end: { line: 189, column: 20 } },
                '9': { start: { line: 281, column: 0 }, end: { line: 288, column: 2 } },
                '10': { start: { line: 282, column: 2 }, end: { line: 287, column: 5 } },
                '11': { start: { line: 381, column: 0 }, end: { line: 389, column: 2 } },
                '12': { start: { line: 382, column: 16 }, end: { line: 382, column: 34 } },
                '13': { start: { line: 383, column: 2 }, end: { line: 388, column: 3 } },
                '14': { start: { line: 384, column: 4 }, end: { line: 384, column: 39 } },
                '15': { start: { line: 385, column: 4 }, end: { line: 385, column: 37 } },
                '16': { start: { line: 387, column: 4 }, end: { line: 387, column: 61 } },
                '17': { start: { line: 458, column: 0 }, end: { line: 495, column: 2 } },
                '18': { start: { line: 459, column: 2 }, end: { line: 461, column: 3 } },
                '19': { start: { line: 460, column: 4 }, end: { line: 460, column: 11 } },
                '20': { start: { line: 463, column: 24 }, end: { line: 463, column: 35 } },
                '21': { start: { line: 464, column: 2 }, end: { line: 466, column: 3 } },
                '22': { start: { line: 465, column: 4 }, end: { line: 465, column: 24 } },
                '23': { start: { line: 468, column: 18 }, end: { line: 468, column: 48 } },
                '24': { start: { line: 469, column: 2 }, end: { line: 494, column: 3 } },
                '25': { start: { line: 470, column: 4 }, end: { line: 472, column: 5 } },
                '26': { start: { line: 471, column: 6 }, end: { line: 471, column: 66 } },
                '27': { start: { line: 473, column: 23 }, end: { line: 475, column: 5 } },
                '28': { start: { line: 474, column: 6 }, end: { line: 474, column: 22 } },
                '29': { start: { line: 476, column: 4 }, end: { line: 493, column: 5 } },
                '30': { start: { line: 476, column: 25 }, end: { line: 476, column: 26 } },
                '31': { start: { line: 477, column: 6 }, end: { line: 477, column: 28 } },
                '32': { start: { line: 478, column: 6 }, end: { line: 480, column: 7 } },
                '33': { start: { line: 479, column: 8 }, end: { line: 479, column: 33 } },
                '34': { start: { line: 481, column: 6 }, end: { line: 483, column: 7 } },
                '35': { start: { line: 482, column: 8 }, end: { line: 482, column: 36 } },
                '36': { start: { line: 484, column: 6 }, end: { line: 484, column: 65 } },
                '37': { start: { line: 485, column: 6 }, end: { line: 485, column: 57 } },
                '38': { start: { line: 486, column: 6 }, end: { line: 486, column: 30 } },
                '39': { start: { line: 487, column: 6 }, end: { line: 491, column: 7 } },
                '40': { start: { line: 488, column: 8 }, end: { line: 488, column: 23 } },
                '41': { start: { line: 490, column: 8 }, end: { line: 490, column: 33 } },
                '42': { start: { line: 492, column: 6 }, end: { line: 492, column: 58 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 79, column: 22 }, end: { line: 79, column: 23 } },
                  loc: { start: { line: 79, column: 33 }, end: { line: 81, column: 1 } },
                  line: 79
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: {
                    start: { line: 125, column: 20 },
                    end: { line: 125, column: 21 }
                  },
                  loc: { start: { line: 125, column: 31 }, end: { line: 132, column: 1 } },
                  line: 125
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 188, column: 25 },
                    end: { line: 188, column: 26 }
                  },
                  loc: { start: { line: 188, column: 36 }, end: { line: 190, column: 1 } },
                  line: 188
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 281, column: 20 },
                    end: { line: 281, column: 21 }
                  },
                  loc: { start: { line: 281, column: 31 }, end: { line: 288, column: 1 } },
                  line: 281
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 381, column: 19 },
                    end: { line: 381, column: 20 }
                  },
                  loc: { start: { line: 381, column: 30 }, end: { line: 389, column: 1 } },
                  line: 381
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 458, column: 22 },
                    end: { line: 458, column: 23 }
                  },
                  loc: { start: { line: 458, column: 34 }, end: { line: 495, column: 1 } },
                  line: 458
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 473, column: 23 },
                    end: { line: 473, column: 24 }
                  },
                  loc: { start: { line: 473, column: 28 }, end: { line: 475, column: 5 } },
                  line: 473
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 126, column: 2 }, end: { line: 131, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 126, column: 2 }, end: { line: 131, column: 3 } },
                    { start: { line: 126, column: 2 }, end: { line: 131, column: 3 } }
                  ],
                  line: 126
                },
                '1': {
                  loc: { start: { line: 128, column: 4 }, end: { line: 130, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 128, column: 4 }, end: { line: 130, column: 5 } },
                    { start: { line: 128, column: 4 }, end: { line: 130, column: 5 } }
                  ],
                  line: 128
                },
                '2': {
                  loc: { start: { line: 383, column: 2 }, end: { line: 388, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 383, column: 2 }, end: { line: 388, column: 3 } },
                    { start: { line: 383, column: 2 }, end: { line: 388, column: 3 } }
                  ],
                  line: 383
                },
                '3': {
                  loc: { start: { line: 459, column: 2 }, end: { line: 461, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 459, column: 2 }, end: { line: 461, column: 3 } },
                    { start: { line: 459, column: 2 }, end: { line: 461, column: 3 } }
                  ],
                  line: 459
                },
                '4': {
                  loc: { start: { line: 459, column: 6 }, end: { line: 459, column: 42 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 459, column: 6 }, end: { line: 459, column: 22 } },
                    { start: { line: 459, column: 26 }, end: { line: 459, column: 42 } }
                  ],
                  line: 459
                },
                '5': {
                  loc: { start: { line: 464, column: 2 }, end: { line: 466, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 464, column: 2 }, end: { line: 466, column: 3 } },
                    { start: { line: 464, column: 2 }, end: { line: 466, column: 3 } }
                  ],
                  line: 464
                },
                '6': {
                  loc: { start: { line: 464, column: 6 }, end: { line: 464, column: 51 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 464, column: 6 }, end: { line: 464, column: 28 } },
                    { start: { line: 464, column: 32 }, end: { line: 464, column: 51 } }
                  ],
                  line: 464
                },
                '7': {
                  loc: { start: { line: 468, column: 18 }, end: { line: 468, column: 48 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 468, column: 35 }, end: { line: 468, column: 41 } },
                    { start: { line: 468, column: 44 }, end: { line: 468, column: 48 } }
                  ],
                  line: 468
                },
                '8': {
                  loc: { start: { line: 469, column: 2 }, end: { line: 494, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 469, column: 2 }, end: { line: 494, column: 3 } },
                    { start: { line: 469, column: 2 }, end: { line: 494, column: 3 } }
                  ],
                  line: 469
                },
                '9': {
                  loc: { start: { line: 470, column: 4 }, end: { line: 472, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 470, column: 4 }, end: { line: 472, column: 5 } },
                    { start: { line: 470, column: 4 }, end: { line: 472, column: 5 } }
                  ],
                  line: 470
                },
                '10': {
                  loc: { start: { line: 478, column: 6 }, end: { line: 480, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 478, column: 6 }, end: { line: 480, column: 7 } },
                    { start: { line: 478, column: 6 }, end: { line: 480, column: 7 } }
                  ],
                  line: 478
                },
                '11': {
                  loc: { start: { line: 478, column: 10 }, end: { line: 478, column: 70 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 478, column: 10 }, end: { line: 478, column: 38 } },
                    { start: { line: 478, column: 42 }, end: { line: 478, column: 70 } }
                  ],
                  line: 478
                },
                '12': {
                  loc: { start: { line: 481, column: 6 }, end: { line: 483, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 481, column: 6 }, end: { line: 483, column: 7 } },
                    { start: { line: 481, column: 6 }, end: { line: 483, column: 7 } }
                  ],
                  line: 481
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0
              },
              f: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0 },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '044bf60956edf694ba3769991c4616230c786cd1'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.for-each');
          _dereq_('core-js/modules/es.object.assign');
          _dereq_('core-js/modules/web.dom-collections.for-each');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('./main'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_ici0gb6ul.s[0]++;

          /**
                                                                                                                                                                          * Stops p5.js from continuously executing the code within <a href="#/p5/draw">draw()</a>.
                                                                                                                                                                          * If <a href="#/p5/loop">loop()</a> is called, the code in <a href="#/p5/draw">draw()</a>
                                                                                                                                                                          * begins to run continuously again. If using <a href="#/p5/noLoop">noLoop()</a>
                                                                                                                                                                          * in <a href="#/p5/setup">setup()</a>, it should be the last line inside the block.
                                                                                                                                                                          *
                                                                                                                                                                          * When <a href="#/p5/noLoop">noLoop()</a> is used, it's not possible to manipulate
                                                                                                                                                                          * or access the screen inside event handling functions such as
                                                                                                                                                                          * <a href="#/p5/mousePressed">mousePressed()</a> or
                                                                                                                                                                          * <a href="#/p5/keyPressed">keyPressed()</a>. Instead, use those functions to
                                                                                                                                                                          * call <a href="#/p5/redraw">redraw()</a> or <a href="#/p5/loop">loop()</a>,
                                                                                                                                                                          * which will run <a href="#/p5/draw">draw()</a>, which can update the screen
                                                                                                                                                                          * properly. This means that when <a href="#/p5/noLoop">noLoop()</a> has been
                                                                                                                                                                          * called, no drawing can happen, and functions like <a href="#/p5/saveFrames">saveFrames()</a>
                                                                                                                                                                          * or <a href="#/p5/loadPixels">loadPixels()</a> may not be used.
                                                                                                                                                                          *
                                                                                                                                                                          * Note that if the sketch is resized, <a href="#/p5/redraw">redraw()</a> will
                                                                                                                                                                          * be called to update the sketch, even after <a href="#/p5/noLoop">noLoop()</a>
                                                                                                                                                                          * has been specified. Otherwise, the sketch would enter an odd state until
                                                                                                                                                                          * <a href="#/p5/loop">loop()</a> was called.
                                                                                                                                                                          *
                                                                                                                                                                          * Use <a href="#/p5/isLooping">isLooping()</a> to check current state of loop().
                                                                                                                                                                          *
                                                                                                                                                                          * @method noLoop
                                                                                                                                                                          * @example
                                                                                                                                                                          * <div>
                                                                                                                                                                          * <code>
                                                                                                                                                                          * function setup() {
                                                                                                                                                                          *   createCanvas(100, 100);
                                                                                                                                                                          *   background(200);
                                                                                                                                                                          *   noLoop();
                                                                                                                                                                          * }
                                                                                                                                                                         
                                                                                                                                                                          * function draw() {
                                                                                                                                                                          *   line(10, 10, 90, 90);
                                                                                                                                                                          * }
                                                                                                                                                                          * </code>
                                                                                                                                                                          * </div>
                                                                                                                                                                          *
                                                                                                                                                                          * <div>
                                                                                                                                                                          * <code>
                                                                                                                                                                          * let x = 0;
                                                                                                                                                                          * function setup() {
                                                                                                                                                                          *   createCanvas(100, 100);
                                                                                                                                                                          * }
                                                                                                                                                                          *
                                                                                                                                                                          * function draw() {
                                                                                                                                                                          *   background(204);
                                                                                                                                                                          *   x = x + 0.1;
                                                                                                                                                                          *   if (x > width) {
                                                                                                                                                                          *     x = 0;
                                                                                                                                                                          *   }
                                                                                                                                                                          *   line(x, 0, x, height);
                                                                                                                                                                          * }
                                                                                                                                                                          *
                                                                                                                                                                          * function mousePressed() {
                                                                                                                                                                          *   noLoop();
                                                                                                                                                                          * }
                                                                                                                                                                          *
                                                                                                                                                                          * function mouseReleased() {
                                                                                                                                                                          *   loop();
                                                                                                                                                                          * }
                                                                                                                                                                          * </code>
                                                                                                                                                                          * </div>
                                                                                                                                                                          *
                                                                                                                                                                          * @alt
                                                                                                                                                                          * 113 pixel long line extending from top-left to bottom right of canvas.
                                                                                                                                                                          * horizontal line moves slowly from left. Loops but stops on mouse press.
                                                                                                                                                                          */
          _main.default.prototype.noLoop = function() {
            cov_ici0gb6ul.f[0]++;
            cov_ici0gb6ul.s[1]++;
            this._loop = false;
          };

          /**
           * By default, p5.js loops through draw() continuously, executing the code within
           * it. However, the <a href="#/p5/draw">draw()</a> loop may be stopped by calling
           * <a href="#/p5/noLoop">noLoop()</a>. In that case, the <a href="#/p5/draw">draw()</a>
           * loop can be resumed with loop().
           *
           * Avoid calling loop() from inside setup().
           *
           * Use <a href="#/p5/isLooping">isLooping()</a> to check current state of loop().
           *
           * @method loop
           * @example
           * <div>
           * <code>
           * let x = 0;
           * function setup() {
           *   createCanvas(100, 100);
           *   noLoop();
           * }
           *
           * function draw() {
           *   background(204);
           *   x = x + 0.1;
           *   if (x > width) {
           *     x = 0;
           *   }
           *   line(x, 0, x, height);
           * }
           *
           * function mousePressed() {
           *   loop();
           * }
           *
           * function mouseReleased() {
           *   noLoop();
           * }
           * </code>
           * </div>
           *
           * @alt
           * horizontal line moves slowly from left. Loops but stops on mouse press.
           */ cov_ici0gb6ul.s[2]++;
          _main.default.prototype.loop = function() {
            cov_ici0gb6ul.f[1]++;
            cov_ici0gb6ul.s[3]++;
            if (!this._loop) {
              cov_ici0gb6ul.b[0][0]++;
              cov_ici0gb6ul.s[4]++;
              this._loop = true;
              cov_ici0gb6ul.s[5]++;
              if (this._setupDone) {
                cov_ici0gb6ul.b[1][0]++;
                cov_ici0gb6ul.s[6]++;
                this._draw();
              } else {
                cov_ici0gb6ul.b[1][1]++;
              }
            } else {
              cov_ici0gb6ul.b[0][1]++;
            }
          };

          /**
           * By default, p5.js loops through <a href="#/p5/draw">draw()</a> continuously,
           * executing the code within it. If the sketch is stopped with
           * <a href="#/p5/noLoop">noLoop()</a> or resumed with <a href="#/p5/loop">loop()</a>,
           * isLooping() returns the current state for use within custom event handlers.
           *
           * @method isLooping
           * @example
           * <div>
           * <code>
           * let checkbox, button, colBG, colFill;
           *
           * function setup() {
           *   createCanvas(100, 100);
           *
           *   button = createButton('Colorize if loop()');
           *   button.position(0, 120);
           *   button.mousePressed(changeBG);
           *
           *   checkbox = createCheckbox('loop()', true);
           *   checkbox.changed(checkLoop);
           *
           *   colBG = color(0);
           *   colFill = color(255);
           * }
           *
           * function changeBG() {
           *   if (isLooping()) {
           *     colBG = color(random(255), random(255), random(255));
           *     colFill = color(random(255), random(255), random(255));
           *   }
           * }
           *
           * function checkLoop() {
           *   if (this.checked()) {
           *     loop();
           *   } else {
           *     noLoop();
           *   }
           * }
           *
           * function draw() {
           *   background(colBG);
           *   fill(colFill);
           *   ellipse(frameCount % width, height / 2, 50);
           * }
           * </code>
           * </div>
           *
           * @alt
           * Ellipse moves slowly from left. Checkbox toggles loop()/noLoop().
           * Button colorizes sketch if isLooping().
           *
           */ cov_ici0gb6ul.s[7]++;
          _main.default.prototype.isLooping = function() {
            cov_ici0gb6ul.f[2]++;
            cov_ici0gb6ul.s[8]++;
            return this._loop;
          };

          /**
           * The <a href="#/p5/push">push()</a> function saves the current drawing style
           * settings and transformations, while <a href="#/p5/pop">pop()</a> restores these
           * settings. Note that these functions are always used together. They allow you to
           * change the style and transformation settings and later return to what you had.
           * When a new state is started with <a href="#/p5/push">push()</a>, it builds on
           * the current style and transform information. The <a href="#/p5/push">push()</a>
           * and <a href="#/p5/pop">pop()</a> functions can be embedded to provide more
           * control. (See the second example for a demonstration.)
           *
           * <a href="#/p5/push">push()</a> stores information related to the current transformation state
           * and style settings controlled by the following functions:
           * <a href="#/p5/fill">fill()</a>,
           * <a href="#/p5/noFill">noFill()</a>,
           * <a href="#/p5/noStroke">noStroke()</a>,
           * <a href="#/p5/stroke">stroke()</a>,
           * <a href="#/p5/tint">tint()</a>,
           * <a href="#/p5/noTint">noTint()</a>,
           * <a href="#/p5/strokeWeight">strokeWeight()</a>,
           * <a href="#/p5/strokeCap">strokeCap()</a>,
           * <a href="#/p5/strokeJoin">strokeJoin()</a>,
           * <a href="#/p5/imageMode">imageMode()</a>,
           * <a href="#/p5/rectMode">rectMode()</a>,
           * <a href="#/p5/ellipseMode">ellipseMode()</a>,
           * <a href="#/p5/colorMode">colorMode()</a>,
           * <a href="#/p5/textAlign">textAlign()</a>,
           * <a href="#/p5/textFont">textFont()</a>,
           * <a href="#/p5/textSize">textSize()</a>,
           * <a href="#/p5/textLeading">textLeading()</a>,
           * <a href="#/p5/applyMatrix">applyMatrix()</a>,
           * <a href="#/p5/resetMatrix">resetMatrix()</a>,
           * <a href="#/p5/rotate">rotate()</a>,
           * <a href="#/p5/scale">scale()</a>,
           * <a href="#/p5/shearX">shearX()</a>,
           * <a href="#/p5/shearY">shearY()</a>,
           * <a href="#/p5/translate">translate()</a>,
           * <a href="#/p5/noiseSeed">noiseSeed()</a>.
           *
           * In WEBGL mode additional style settings are stored. These are controlled by the
           * following functions: <a href="#/p5/setCamera">setCamera()</a>,
           * <a href="#/p5/ambientLight">ambientLight()</a>,
           * <a href="#/p5/directionalLight">directionalLight()</a>,
           * <a href="#/p5/pointLight">pointLight()</a>, <a href="#/p5/texture">texture()</a>,
           * <a href="#/p5/specularMaterial">specularMaterial()</a>,
           * <a href="#/p5/shininess">shininess()</a>,
           * <a href="#/p5/normalMaterial">normalMaterial()</a>
           * and <a href="#/p5/shader">shader()</a>.
           *
           * @method push
           * @example
           * <div>
           * <code>
           * ellipse(0, 50, 33, 33); // Left circle
           *
           * push(); // Start a new drawing state
           * strokeWeight(10);
           * fill(204, 153, 0);
           * translate(50, 0);
           * ellipse(0, 50, 33, 33); // Middle circle
           * pop(); // Restore original state
           *
           * ellipse(100, 50, 33, 33); // Right circle
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * ellipse(0, 50, 33, 33); // Left circle
           *
           * push(); // Start a new drawing state
           * strokeWeight(10);
           * fill(204, 153, 0);
           * ellipse(33, 50, 33, 33); // Left-middle circle
           *
           * push(); // Start another new drawing state
           * stroke(0, 102, 153);
           * ellipse(66, 50, 33, 33); // Right-middle circle
           * pop(); // Restore previous state
           *
           * pop(); // Restore original state
           *
           * ellipse(100, 50, 33, 33); // Right circle
           * </code>
           * </div>
           *
           * @alt
           * Gold ellipse + thick black outline @center 2 white ellipses on left and right.
           * 2 Gold ellipses left black right blue stroke. 2 white ellipses on left+right.
           */ cov_ici0gb6ul.s[9]++;
          _main.default.prototype.push = function() {
            cov_ici0gb6ul.f[3]++;
            cov_ici0gb6ul.s[10]++;
            this._styles.push({
              props: {
                _colorMode: this._colorMode
              },

              renderer: this._renderer.push()
            });
          };

          /**
           * The <a href="#/p5/push">push()</a> function saves the current drawing style
           * settings and transformations, while <a href="#/p5/pop">pop()</a> restores
           * these settings. Note that these functions are always used together. They allow
           * you to change the style and transformation settings and later return to what
           * you had. When a new state is started with <a href="#/p5/push">push()</a>, it
           * builds on the current style and transform information. The <a href="#/p5/push">push()</a>
           * and <a href="#/p5/pop">pop()</a> functions can be embedded to provide more
           * control. (See the second example for a demonstration.)
           *
           * <a href="#/p5/push">push()</a> stores information related to the current transformation state
           * and style settings controlled by the following functions:
           * <a href="#/p5/fill">fill()</a>,
           * <a href="#/p5/noFill">noFill()</a>,
           * <a href="#/p5/noStroke">noStroke()</a>,
           * <a href="#/p5/stroke">stroke()</a>,
           * <a href="#/p5/tint">tint()</a>,
           * <a href="#/p5/noTint">noTint()</a>,
           * <a href="#/p5/strokeWeight">strokeWeight()</a>,
           * <a href="#/p5/strokeCap">strokeCap()</a>,
           * <a href="#/p5/strokeJoin">strokeJoin()</a>,
           * <a href="#/p5/imageMode">imageMode()</a>,
           * <a href="#/p5/rectMode">rectMode()</a>,
           * <a href="#/p5/ellipseMode">ellipseMode()</a>,
           * <a href="#/p5/colorMode">colorMode()</a>,
           * <a href="#/p5/textAlign">textAlign()</a>,
           * <a href="#/p5/textFont">textFont()</a>,
           * <a href="#/p5/textSize">textSize()</a>,
           * <a href="#/p5/textLeading">textLeading()</a>,
           * <a href="#/p5/applyMatrix">applyMatrix()</a>,
           * <a href="#/p5/resetMatrix">resetMatrix()</a>,
           * <a href="#/p5/rotate">rotate()</a>,
           * <a href="#/p5/scale">scale()</a>,
           * <a href="#/p5/shearX">shearX()</a>,
           * <a href="#/p5/shearY">shearY()</a>,
           * <a href="#/p5/translate">translate()</a>,
           * <a href="#/p5/noiseSeed">noiseSeed()</a>.
           *
           * In WEBGL mode additional style settings are stored. These are controlled by
           * the following functions:
           * <a href="#/p5/setCamera">setCamera()</a>,
           * <a href="#/p5/ambientLight">ambientLight()</a>,
           * <a href="#/p5/directionalLight">directionalLight()</a>,
           * <a href="#/p5/pointLight">pointLight()</a>,
           * <a href="#/p5/texture">texture()</a>,
           * <a href="#/p5/specularMaterial">specularMaterial()</a>,
           * <a href="#/p5/shininess">shininess()</a>,
           * <a href="#/p5/normalMaterial">normalMaterial()</a> and
           * <a href="#/p5/shader">shader()</a>.
           *
           * @method pop
           * @example
           * <div>
           * <code>
           * ellipse(0, 50, 33, 33); // Left circle
           *
           * push(); // Start a new drawing state
           * translate(50, 0);
           * strokeWeight(10);
           * fill(204, 153, 0);
           * ellipse(0, 50, 33, 33); // Middle circle
           * pop(); // Restore original state
           *
           * ellipse(100, 50, 33, 33); // Right circle
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * ellipse(0, 50, 33, 33); // Left circle
           *
           * push(); // Start a new drawing state
           * strokeWeight(10);
           * fill(204, 153, 0);
           * ellipse(33, 50, 33, 33); // Left-middle circle
           *
           * push(); // Start another new drawing state
           * stroke(0, 102, 153);
           * ellipse(66, 50, 33, 33); // Right-middle circle
           * pop(); // Restore previous state
           *
           * pop(); // Restore original state
           *
           * ellipse(100, 50, 33, 33); // Right circle
           * </code>
           * </div>
           *
           * @alt
           * Gold ellipse + thick black outline @center 2 white ellipses on left and right.
           * 2 Gold ellipses left black right blue stroke. 2 white ellipses on left+right.
           */ cov_ici0gb6ul.s[11]++;
          _main.default.prototype.pop = function() {
            cov_ici0gb6ul.f[4]++;
            var style = (cov_ici0gb6ul.s[12]++, this._styles.pop());
            cov_ici0gb6ul.s[13]++;
            if (style) {
              cov_ici0gb6ul.b[2][0]++;
              cov_ici0gb6ul.s[14]++;
              this._renderer.pop(style.renderer);
              cov_ici0gb6ul.s[15]++;
              Object.assign(this, style.props);
            } else {
              cov_ici0gb6ul.b[2][1]++;
              cov_ici0gb6ul.s[16]++;
              console.warn('pop() was called without matching push()');
            }
          };

          /**
           * Executes the code within <a href="#/p5/draw">draw()</a> one time. This
           * function allows the program to update the display window only when necessary,
           * for example when an event registered by <a href="#/p5/mousePressed">mousePressed()</a>
           * or <a href="#/p5/keyPressed">keyPressed()</a> occurs.
           *
           * In structuring a program, it only makes sense to call <a href="#/p5/redraw">redraw()</a>
           * within events such as <a href="#/p5/mousePressed">mousePressed()</a>. This
           * is because <a href="#/p5/redraw">redraw()</a> does not run
           * <a href="#/p5/draw">draw()</a> immediately (it only sets a flag that indicates
           * an update is needed).
           *
           * The <a href="#/p5/redraw">redraw()</a> function does not work properly when
           * called inside <a href="#/p5/draw">draw()</a>.To enable/disable animations,
           * use <a href="#/p5/loop">loop()</a> and <a href="#/p5/noLoop">noLoop()</a>.
           *
           * In addition you can set the number of redraws per method call. Just
           * add an integer as single parameter for the number of redraws.
           *
           * @method redraw
           * @param  {Integer} [n] Redraw for n-times. The default value is 1.
           * @example
           * <div><code>
           * let x = 0;
           *
           * function setup() {
           *   createCanvas(100, 100);
           *   noLoop();
           * }
           *
           * function draw() {
           *   background(204);
           *   line(x, 0, x, height);
           * }
           *
           * function mousePressed() {
           *   x += 1;
           *   redraw();
           * }
           * </code>
           * </div>
           *
           * <div class='norender'>
           * <code>
           * let x = 0;
           *
           * function setup() {
           *   createCanvas(100, 100);
           *   noLoop();
           * }
           *
           * function draw() {
           *   background(204);
           *   x += 1;
           *   line(x, 0, x, height);
           * }
           *
           * function mousePressed() {
           *   redraw(5);
           * }
           * </code>
           * </div>
           *
           * @alt
           * black line on far left of canvas
           * black line on far left of canvas
           */ cov_ici0gb6ul.s[17]++;
          _main.default.prototype.redraw = function(n) {
            cov_ici0gb6ul.f[5]++;
            cov_ici0gb6ul.s[18]++;
            if (
              (cov_ici0gb6ul.b[4][0]++, this._inUserDraw) ||
              (cov_ici0gb6ul.b[4][1]++, !this._setupDone)
            ) {
              cov_ici0gb6ul.b[3][0]++;
              cov_ici0gb6ul.s[19]++;
              return;
            } else {
              cov_ici0gb6ul.b[3][1]++;
            }

            var numberOfRedraws = (cov_ici0gb6ul.s[20]++, parseInt(n));
            cov_ici0gb6ul.s[21]++;
            if (
              (cov_ici0gb6ul.b[6][0]++, isNaN(numberOfRedraws)) ||
              (cov_ici0gb6ul.b[6][1]++, numberOfRedraws < 1)
            ) {
              cov_ici0gb6ul.b[5][0]++;
              cov_ici0gb6ul.s[22]++;
              numberOfRedraws = 1;
            } else {
              cov_ici0gb6ul.b[5][1]++;
            }

            var context = (cov_ici0gb6ul.s[23]++,
            this._isGlobal
              ? (cov_ici0gb6ul.b[7][0]++, window)
              : (cov_ici0gb6ul.b[7][1]++, this));
            cov_ici0gb6ul.s[24]++;
            if (typeof context.draw === 'function') {
              cov_ici0gb6ul.b[8][0]++;
              cov_ici0gb6ul.s[25]++;
              if (typeof context.setup === 'undefined') {
                cov_ici0gb6ul.b[9][0]++;
                cov_ici0gb6ul.s[26]++;
                context.scale(context._pixelDensity, context._pixelDensity);
              } else {
                cov_ici0gb6ul.b[9][1]++;
              }
              cov_ici0gb6ul.s[27]++;
              var callMethod = function callMethod(f) {
                cov_ici0gb6ul.f[6]++;
                cov_ici0gb6ul.s[28]++;
                f.call(context);
              };
              cov_ici0gb6ul.s[29]++;
              for (
                var idxRedraw = (cov_ici0gb6ul.s[30]++, 0);
                idxRedraw < numberOfRedraws;
                idxRedraw++
              ) {
                cov_ici0gb6ul.s[31]++;
                context.resetMatrix();
                cov_ici0gb6ul.s[32]++;
                if (
                  (cov_ici0gb6ul.b[11][0]++, this._accessibleOutputs.grid) ||
                  (cov_ici0gb6ul.b[11][1]++, this._accessibleOutputs.text)
                ) {
                  cov_ici0gb6ul.b[10][0]++;
                  cov_ici0gb6ul.s[33]++;
                  this._updateAccsOutput();
                } else {
                  cov_ici0gb6ul.b[10][1]++;
                }
                cov_ici0gb6ul.s[34]++;
                if (context._renderer.isP3D) {
                  cov_ici0gb6ul.b[12][0]++;
                  cov_ici0gb6ul.s[35]++;
                  context._renderer._update();
                } else {
                  cov_ici0gb6ul.b[12][1]++;
                }
                cov_ici0gb6ul.s[36]++;
                context._setProperty('frameCount', context.frameCount + 1);
                cov_ici0gb6ul.s[37]++;
                context._registeredMethods.pre.forEach(callMethod);
                cov_ici0gb6ul.s[38]++;
                this._inUserDraw = true;
                cov_ici0gb6ul.s[39]++;
                try {
                  cov_ici0gb6ul.s[40]++;
                  context.draw();
                } finally {
                  cov_ici0gb6ul.s[41]++;
                  this._inUserDraw = false;
                }
                cov_ici0gb6ul.s[42]++;
                context._registeredMethods.post.forEach(callMethod);
              }
            } else {
              cov_ici0gb6ul.b[8][1]++;
            }
          };

          /**
           * The `p5()` constructor enables you to activate "instance mode" instead of normal
           * "global mode". This is an advanced topic. A short description and example is
           * included below. Please see
           * <a target="blank" href="https://www.youtube.com/watch?v=Su792jEauZg&feature=youtu.be">
           * Dan Shiffman's Coding Train video tutorial</a> or this
           * <a target="blank" href="https://github.com/processing/p5.js/wiki/p5.js-overview#instantiation--namespace">tutorial page</a>
           * for more info.
           *
           * By default, all p5.js functions are in the global namespace (i.e. bound to the window
           * object), meaning you can call them simply `ellipse()`, `fill()`, etc. However, this
           * might be inconvenient if you are mixing with other JS libraries (synchronously or
           * asynchronously) or writing long programs of your own. p5.js currently supports a
           * way around this problem called "instance mode". In instance mode, all p5 functions
           * are bound up in a single variable instead of polluting your global namespace.
           *
           * Optionally, you can specify a default container for the canvas and any other elements
           * to append to with a second argument. You can give the ID of an element in your html,
           * or an html node itself.
           *
           * Note that creating instances like this also allows you to have more than one p5 sketch on
           * a single web page, as they will each be wrapped up with their own set up variables. Of
           * course, you could also use iframes to have multiple sketches in global mode.
           *
           * @method p5
           * @param {Object} sketch a function containing a p5.js sketch
           * @param {String|Object} node ID or pointer to HTML DOM node to contain sketch in
           * @example
           * <div class='norender'><code>
           * const s = p => {
           *   let x = 100;
           *   let y = 100;
           *
           *   p.setup = function() {
           *     p.createCanvas(700, 410);
           *   };
           *
           *   p.draw = function() {
           *     p.background(0);
           *     p.fill(255);
           *     p.rect(x, y, 50, 50);
           *   };
           * };
           *
           * new p5(s); // invoke p5
           * </code></div>
           *
           * @alt
           * white rectangle on black background
           */ var _default = _main.default;
          exports.default = _default;
        },
        {
          './main': 283,
          'core-js/modules/es.array.for-each': 170,
          'core-js/modules/es.object.assign': 188,
          'core-js/modules/web.dom-collections.for-each': 243
        }
      ],
      296: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_d5jopodb3 = (function() {
            var path = '/Users/outofambit/src/p5.js/src/core/transform.js';
            var hash = '9dbcc789e5233c9e1df050204ffe7a625e8ac812';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/core/transform.js',
              statementMap: {
                '0': { start: { line: 158, column: 0 }, end: { line: 166, column: 2 } },
                '1': { start: { line: 159, column: 21 }, end: { line: 159, column: 78 } },
                '2': { start: { line: 160, column: 2 }, end: { line: 164, column: 3 } },
                '3': { start: { line: 161, column: 4 }, end: { line: 161, column: 48 } },
                '4': { start: { line: 163, column: 4 }, end: { line: 163, column: 45 } },
                '5': { start: { line: 165, column: 2 }, end: { line: 165, column: 14 } },
                '6': { start: { line: 188, column: 0 }, end: { line: 191, column: 2 } },
                '7': { start: { line: 189, column: 2 }, end: { line: 189, column: 31 } },
                '8': { start: { line: 190, column: 2 }, end: { line: 190, column: 14 } },
                '9': { start: { line: 226, column: 0 }, end: { line: 230, column: 2 } },
                '10': { start: { line: 227, column: 2 }, end: { line: 227, column: 46 } },
                '11': { start: { line: 228, column: 2 }, end: { line: 228, column: 54 } },
                '12': { start: { line: 229, column: 2 }, end: { line: 229, column: 14 } },
                '13': { start: { line: 261, column: 0 }, end: { line: 266, column: 2 } },
                '14': { start: { line: 262, column: 2 }, end: { line: 262, column: 28 } },
                '15': { start: { line: 263, column: 2 }, end: { line: 263, column: 47 } },
                '16': { start: { line: 264, column: 2 }, end: { line: 264, column: 49 } },
                '17': { start: { line: 265, column: 2 }, end: { line: 265, column: 14 } },
                '18': { start: { line: 297, column: 0 }, end: { line: 302, column: 2 } },
                '19': { start: { line: 298, column: 2 }, end: { line: 298, column: 28 } },
                '20': { start: { line: 299, column: 2 }, end: { line: 299, column: 47 } },
                '21': { start: { line: 300, column: 2 }, end: { line: 300, column: 49 } },
                '22': { start: { line: 301, column: 2 }, end: { line: 301, column: 14 } },
                '23': { start: { line: 335, column: 0 }, end: { line: 340, column: 2 } },
                '24': { start: { line: 336, column: 2 }, end: { line: 336, column: 28 } },
                '25': { start: { line: 337, column: 2 }, end: { line: 337, column: 47 } },
                '26': { start: { line: 338, column: 2 }, end: { line: 338, column: 49 } },
                '27': { start: { line: 339, column: 2 }, end: { line: 339, column: 14 } },
                '28': { start: { line: 391, column: 0 }, end: { line: 414, column: 2 } },
                '29': { start: { line: 392, column: 2 }, end: { line: 392, column: 45 } },
                '30': { start: { line: 394, column: 2 }, end: { line: 404, column: 3 } },
                '31': { start: { line: 395, column: 14 }, end: { line: 395, column: 15 } },
                '32': { start: { line: 396, column: 4 }, end: { line: 396, column: 12 } },
                '33': { start: { line: 397, column: 4 }, end: { line: 397, column: 12 } },
                '34': { start: { line: 398, column: 4 }, end: { line: 398, column: 12 } },
                '35': { start: { line: 399, column: 9 }, end: { line: 404, column: 3 } },
                '36': { start: { line: 400, column: 15 }, end: { line: 400, column: 16 } },
                '37': { start: { line: 401, column: 4 }, end: { line: 401, column: 14 } },
                '38': { start: { line: 402, column: 4 }, end: { line: 402, column: 14 } },
                '39': { start: { line: 403, column: 4 }, end: { line: 403, column: 19 } },
                '40': { start: { line: 405, column: 2 }, end: { line: 409, column: 3 } },
                '41': { start: { line: 406, column: 4 }, end: { line: 406, column: 14 } },
                '42': { start: { line: 407, column: 9 }, end: { line: 409, column: 3 } },
                '43': { start: { line: 408, column: 4 }, end: { line: 408, column: 10 } },
                '44': { start: { line: 411, column: 2 }, end: { line: 411, column: 53 } },
                '45': { start: { line: 413, column: 2 }, end: { line: 413, column: 14 } },
                '46': { start: { line: 448, column: 0 }, end: { line: 453, column: 2 } },
                '47': { start: { line: 449, column: 2 }, end: { line: 449, column: 46 } },
                '48': { start: { line: 450, column: 14 }, end: { line: 450, column: 36 } },
                '49': { start: { line: 451, column: 2 }, end: { line: 451, column: 59 } },
                '50': { start: { line: 452, column: 2 }, end: { line: 452, column: 14 } },
                '51': { start: { line: 487, column: 0 }, end: { line: 492, column: 2 } },
                '52': { start: { line: 488, column: 2 }, end: { line: 488, column: 46 } },
                '53': { start: { line: 489, column: 14 }, end: { line: 489, column: 36 } },
                '54': { start: { line: 490, column: 2 }, end: { line: 490, column: 59 } },
                '55': { start: { line: 491, column: 2 }, end: { line: 491, column: 14 } },
                '56': { start: { line: 552, column: 0 }, end: { line: 560, column: 2 } },
                '57': { start: { line: 553, column: 2 }, end: { line: 553, column: 49 } },
                '58': { start: { line: 554, column: 2 }, end: { line: 558, column: 3 } },
                '59': { start: { line: 555, column: 4 }, end: { line: 555, column: 38 } },
                '60': { start: { line: 557, column: 4 }, end: { line: 557, column: 35 } },
                '61': { start: { line: 559, column: 2 }, end: { line: 559, column: 14 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: {
                    start: { line: 158, column: 27 },
                    end: { line: 158, column: 28 }
                  },
                  loc: { start: { line: 158, column: 38 }, end: { line: 166, column: 1 } },
                  line: 158
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: {
                    start: { line: 188, column: 27 },
                    end: { line: 188, column: 28 }
                  },
                  loc: { start: { line: 188, column: 38 }, end: { line: 191, column: 1 } },
                  line: 188
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 226, column: 22 },
                    end: { line: 226, column: 23 }
                  },
                  loc: { start: { line: 226, column: 44 }, end: { line: 230, column: 1 } },
                  line: 226
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 261, column: 23 },
                    end: { line: 261, column: 24 }
                  },
                  loc: { start: { line: 261, column: 39 }, end: { line: 266, column: 1 } },
                  line: 261
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 297, column: 23 },
                    end: { line: 297, column: 24 }
                  },
                  loc: { start: { line: 297, column: 39 }, end: { line: 302, column: 1 } },
                  line: 297
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 335, column: 23 },
                    end: { line: 335, column: 24 }
                  },
                  loc: { start: { line: 335, column: 39 }, end: { line: 340, column: 1 } },
                  line: 335
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 391, column: 21 },
                    end: { line: 391, column: 22 }
                  },
                  loc: { start: { line: 391, column: 39 }, end: { line: 414, column: 1 } },
                  line: 391
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 448, column: 22 },
                    end: { line: 448, column: 23 }
                  },
                  loc: { start: { line: 448, column: 38 }, end: { line: 453, column: 1 } },
                  line: 448
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 487, column: 22 },
                    end: { line: 487, column: 23 }
                  },
                  loc: { start: { line: 487, column: 38 }, end: { line: 492, column: 1 } },
                  line: 487
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 552, column: 25 },
                    end: { line: 552, column: 26 }
                  },
                  loc: { start: { line: 552, column: 43 }, end: { line: 560, column: 1 } },
                  line: 552
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 160, column: 2 }, end: { line: 164, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 160, column: 2 }, end: { line: 164, column: 3 } },
                    { start: { line: 160, column: 2 }, end: { line: 164, column: 3 } }
                  ],
                  line: 160
                },
                '1': {
                  loc: { start: { line: 160, column: 6 }, end: { line: 160, column: 49 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 160, column: 6 }, end: { line: 160, column: 33 } },
                    { start: { line: 160, column: 37 }, end: { line: 160, column: 49 } }
                  ],
                  line: 160
                },
                '2': {
                  loc: { start: { line: 394, column: 2 }, end: { line: 404, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 394, column: 2 }, end: { line: 404, column: 3 } },
                    { start: { line: 394, column: 2 }, end: { line: 404, column: 3 } }
                  ],
                  line: 394
                },
                '3': {
                  loc: { start: { line: 399, column: 9 }, end: { line: 404, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 399, column: 9 }, end: { line: 404, column: 3 } },
                    { start: { line: 399, column: 9 }, end: { line: 404, column: 3 } }
                  ],
                  line: 399
                },
                '4': {
                  loc: { start: { line: 403, column: 8 }, end: { line: 403, column: 18 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 403, column: 8 }, end: { line: 403, column: 13 } },
                    { start: { line: 403, column: 17 }, end: { line: 403, column: 18 } }
                  ],
                  line: 403
                },
                '5': {
                  loc: { start: { line: 405, column: 2 }, end: { line: 409, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 405, column: 2 }, end: { line: 409, column: 3 } },
                    { start: { line: 405, column: 2 }, end: { line: 409, column: 3 } }
                  ],
                  line: 405
                },
                '6': {
                  loc: { start: { line: 407, column: 9 }, end: { line: 409, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 407, column: 9 }, end: { line: 409, column: 3 } },
                    { start: { line: 407, column: 9 }, end: { line: 409, column: 3 } }
                  ],
                  line: 407
                },
                '7': {
                  loc: { start: { line: 554, column: 2 }, end: { line: 558, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 554, column: 2 }, end: { line: 558, column: 3 } },
                    { start: { line: 554, column: 2 }, end: { line: 558, column: 3 } }
                  ],
                  line: 554
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '9dbcc789e5233c9e1df050204ffe7a625e8ac812'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.symbol');
          _dereq_('core-js/modules/es.symbol.description');
          _dereq_('core-js/modules/es.symbol.iterator');
          _dereq_('core-js/modules/es.array.from');
          _dereq_('core-js/modules/es.array.iterator');
          _dereq_('core-js/modules/es.object.get-prototype-of');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.regexp.to-string');
          _dereq_('core-js/modules/es.string.iterator');
          _dereq_('core-js/modules/es.typed-array.uint8-array');
          _dereq_('core-js/modules/es.typed-array.copy-within');
          _dereq_('core-js/modules/es.typed-array.every');
          _dereq_('core-js/modules/es.typed-array.fill');
          _dereq_('core-js/modules/es.typed-array.filter');
          _dereq_('core-js/modules/es.typed-array.find');
          _dereq_('core-js/modules/es.typed-array.find-index');
          _dereq_('core-js/modules/es.typed-array.for-each');
          _dereq_('core-js/modules/es.typed-array.includes');
          _dereq_('core-js/modules/es.typed-array.index-of');
          _dereq_('core-js/modules/es.typed-array.iterator');
          _dereq_('core-js/modules/es.typed-array.join');
          _dereq_('core-js/modules/es.typed-array.last-index-of');
          _dereq_('core-js/modules/es.typed-array.map');
          _dereq_('core-js/modules/es.typed-array.reduce');
          _dereq_('core-js/modules/es.typed-array.reduce-right');
          _dereq_('core-js/modules/es.typed-array.reverse');
          _dereq_('core-js/modules/es.typed-array.set');
          _dereq_('core-js/modules/es.typed-array.slice');
          _dereq_('core-js/modules/es.typed-array.some');
          _dereq_('core-js/modules/es.typed-array.sort');
          _dereq_('core-js/modules/es.typed-array.subarray');
          _dereq_('core-js/modules/es.typed-array.to-locale-string');
          _dereq_('core-js/modules/es.typed-array.to-string');
          _dereq_('core-js/modules/web.dom-collections.iterator');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('./main'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          function _toConsumableArray(arr) {
            return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();
          }
          function _nonIterableSpread() {
            throw new TypeError('Invalid attempt to spread non-iterable instance');
          }
          function _iterableToArray(iter) {
            if (
              Symbol.iterator in Object(iter) ||
              Object.prototype.toString.call(iter) === '[object Arguments]'
            )
              return Array.from(iter);
          }
          function _arrayWithoutHoles(arr) {
            if (Array.isArray(arr)) {
              for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {
                arr2[i] = arr[i];
              }
              return arr2;
            }
          }
          cov_d5jopodb3.s[0]++;

          /**
           * Multiplies the current matrix by the one specified through the parameters.
           * This is a powerful operation that can perform the equivalent of translate,
           * scale, shear and rotate all at once. You can learn more about transformation
           * matrices on <a href="https://en.wikipedia.org/wiki/Transformation_matrix">
           * Wikipedia</a>.
           *
           * The naming of the arguments here follows the naming of the <a href=
           * "https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-transform">
           * WHATWG specification</a> and corresponds to a
           * transformation matrix of the
           * form:
           *
           * > <img style="max-width: 150px" src="assets/transformation-matrix.png"
           * alt="The transformation matrix used when applyMatrix is called"/>
           *
           * @method applyMatrix
           * @param  {Number|Array} a numbers which define the 2x3 matrix to be multiplied, or an array of numbers
           * @param  {Number} b numbers which define the 2x3 matrix to be multiplied
           * @param  {Number} c numbers which define the 2x3 matrix to be multiplied
           * @param  {Number} d numbers which define the 2x3 matrix to be multiplied
           * @param  {Number} e numbers which define the 2x3 matrix to be multiplied
           * @param  {Number} f numbers which define the 2x3 matrix to be multiplied
           * @chainable
           * @example
           * <div>
           * <code>
           * function setup() {
           *   frameRate(10);
           *   rectMode(CENTER);
           * }
           *
           * function draw() {
           *   let step = frameCount % 20;
           *   background(200);
           *   // Equivalent to translate(x, y);
           *   applyMatrix(1, 0, 0, 1, 40 + step, 50);
           *   rect(0, 0, 50, 50);
           * }
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * function setup() {
           *   frameRate(10);
           *   rectMode(CENTER);
           * }
           *
           * function draw() {
           *   let step = frameCount % 20;
           *   background(200);
           *   translate(50, 50);
           *   // Equivalent to scale(x, y);
           *   applyMatrix(1 / step, 0, 0, 1 / step, 0, 0);
           *   rect(0, 0, 50, 50);
           * }
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * function setup() {
           *   frameRate(10);
           *   rectMode(CENTER);
           * }
           *
           * function draw() {
           *   let step = frameCount % 20;
           *   let angle = map(step, 0, 20, 0, TWO_PI);
           *   let cos_a = cos(angle);
           *   let sin_a = sin(angle);
           *   background(200);
           *   translate(50, 50);
           *   // Equivalent to rotate(angle);
           *   applyMatrix(cos_a, sin_a, -sin_a, cos_a, 0, 0);
           *   rect(0, 0, 50, 50);
           * }
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * function setup() {
           *   frameRate(10);
           *   rectMode(CENTER);
           * }
           *
           * function draw() {
           *   let step = frameCount % 20;
           *   let angle = map(step, 0, 20, -PI / 4, PI / 4);
           *   background(200);
           *   translate(50, 50);
           *   // equivalent to shearX(angle);
           *   let shear_factor = 1 / tan(PI / 2 - angle);
           *   applyMatrix(1, 0, shear_factor, 1, 0, 0);
           *   rect(0, 0, 50, 50);
           * }
           * </code>
           * </div>
           *
           * <div modernizr='webgl'>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   noFill();
           * }
           *
           * function draw() {
           *   background(200);
           *   rotateY(PI / 6);
           *   stroke(153);
           *   box(35);
           *   let rad = millis() / 1000;
           *   // Set rotation angles
           *   let ct = cos(rad);
           *   let st = sin(rad);
           *   // Matrix for rotation around the Y axis
           *   // prettier-ignore
           *   applyMatrix(  ct, 0.0,  st,  0.0,
           *                0.0, 1.0, 0.0,  0.0,
           *                -st, 0.0,  ct,  0.0,
           *                0.0, 0.0, 0.0,  1.0);
           *   stroke(255);
           *   box(50);
           * }
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * function draw() {
           *   background(200);
           *   let testMatrix = [1, 0, 0, 1, 0, 0];
           *   applyMatrix(testMatrix);
           *   rect(0, 0, 50, 50);
           * }
           * </code>
           * </div>
           *
           * @alt
           * A rectangle translating to the right
           * A rectangle shrinking to the center
           * A rectangle rotating clockwise about the center
           * A rectangle shearing
           * A rectangle in the upper left corner
           */
          _main.default.prototype.applyMatrix = function() {
            cov_d5jopodb3.f[0]++;
            var isTypedArray = (cov_d5jopodb3.s[1]++,
            arguments[0] instanceof Object.getPrototypeOf(Uint8Array));
            cov_d5jopodb3.s[2]++;
            if (
              (cov_d5jopodb3.b[1][0]++, Array.isArray(arguments[0])) ||
              (cov_d5jopodb3.b[1][1]++, isTypedArray)
            ) {
              var _this$_renderer;
              cov_d5jopodb3.b[0][0]++;
              cov_d5jopodb3.s[3]++;
              (_this$_renderer = this._renderer).applyMatrix.apply(
                _this$_renderer,
                _toConsumableArray(arguments[0])
              );
            } else {
              var _this$_renderer2;
              cov_d5jopodb3.b[0][1]++;
              cov_d5jopodb3.s[4]++;
              (_this$_renderer2 = this._renderer).applyMatrix.apply(
                _this$_renderer2,
                arguments
              );
            }
            cov_d5jopodb3.s[5]++;
            return this;
          };

          /**
           * Replaces the current matrix with the identity matrix.
           *
           * @method resetMatrix
           * @chainable
           * @example
           * <div>
           * <code>
           * translate(50, 50);
           * applyMatrix(0.5, 0.5, -0.5, 0.5, 0, 0);
           * rect(0, 0, 20, 20);
           * // Note that the translate is also reset.
           * resetMatrix();
           * rect(0, 0, 20, 20);
           * </code>
           * </div>
           *
           * @alt
           * A rotated rectangle in the center with another at the top left corner
           */ cov_d5jopodb3.s[6]++;
          _main.default.prototype.resetMatrix = function() {
            cov_d5jopodb3.f[1]++;
            cov_d5jopodb3.s[7]++;
            this._renderer.resetMatrix();
            cov_d5jopodb3.s[8]++;
            return this;
          };

          /**
           * Rotates a shape by the amount specified by the angle parameter. This
           * function accounts for <a href="#/p5/angleMode">angleMode</a>, so angles
           * can be entered in either RADIANS or DEGREES.
           *
           * Objects are always rotated around their relative position to the
           * origin and positive numbers rotate objects in a clockwise direction.
           * Transformations apply to everything that happens after and subsequent
           * calls to the function accumulates the effect. For example, calling
           * rotate(HALF_PI) and then rotate(HALF_PI) is the same as rotate(PI).
           * All transformations are reset when <a href="#/p5/draw">draw()</a> begins again.
           *
           * Technically, <a href="#/p5/rotate">rotate()</a> multiplies the current transformation matrix
           * by a rotation matrix. This function can be further controlled by
           * the <a href="#/p5/push">push()</a> and <a href="#/p5/pop">pop()</a>.
           *
           * @method rotate
           * @param  {Number} angle the angle of rotation, specified in radians
           *                        or degrees, depending on current angleMode
           * @param  {p5.Vector|Number[]} [axis] (in 3d) the axis to rotate around
           * @chainable
           * @example
           * <div>
           * <code>
           * translate(width / 2, height / 2);
           * rotate(PI / 3.0);
           * rect(-26, -26, 52, 52);
           * </code>
           * </div>
           *
           * @alt
           * white 52x52 rect with black outline at center rotated counter 45 degrees
           */ cov_d5jopodb3.s[9]++;
          _main.default.prototype.rotate = function(angle, axis) {
            cov_d5jopodb3.f[2]++;
            cov_d5jopodb3.s[10]++;
            _main.default._validateParameters('rotate', arguments);
            cov_d5jopodb3.s[11]++;
            this._renderer.rotate(this._toRadians(angle), axis);
            cov_d5jopodb3.s[12]++;
            return this;
          };

          /**
           * Rotates a shape around X axis by the amount specified in angle parameter.
           * The angles can be entered in either RADIANS or DEGREES.
           *
           * Objects are always rotated around their relative position to the
           * origin and positive numbers rotate objects in a clockwise direction.
           * All transformations are reset when <a href="#/p5/draw">draw()</a> begins again.
           *
           * @method  rotateX
           * @param  {Number} angle the angle of rotation, specified in radians
           *                        or degrees, depending on current angleMode
           * @chainable
           * @example
           * <div modernizr='webgl'>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           * function draw() {
           *   background(255);
           *   rotateX(millis() / 1000);
           *   box();
           * }
           * </code>
           * </div>
           *
           * @alt
           * 3d box rotating around the x axis.
           */ cov_d5jopodb3.s[13]++;
          _main.default.prototype.rotateX = function(angle) {
            cov_d5jopodb3.f[3]++;
            cov_d5jopodb3.s[14]++;
            this._assert3d('rotateX');
            cov_d5jopodb3.s[15]++;
            _main.default._validateParameters('rotateX', arguments);
            cov_d5jopodb3.s[16]++;
            this._renderer.rotateX(this._toRadians(angle));
            cov_d5jopodb3.s[17]++;
            return this;
          };

          /**
           * Rotates a shape around Y axis by the amount specified in angle parameter.
           * The angles can be entered in either RADIANS or DEGREES.
           *
           * Objects are always rotated around their relative position to the
           * origin and positive numbers rotate objects in a clockwise direction.
           * All transformations are reset when <a href="#/p5/draw">draw()</a> begins again.
           *
           * @method rotateY
           * @param  {Number} angle the angle of rotation, specified in radians
           *                        or degrees, depending on current angleMode
           * @chainable
           * @example
           * <div modernizr='webgl'>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           * function draw() {
           *   background(255);
           *   rotateY(millis() / 1000);
           *   box();
           * }
           * </code>
           * </div>
           *
           * @alt
           * 3d box rotating around the y axis.
           */ cov_d5jopodb3.s[18]++;
          _main.default.prototype.rotateY = function(angle) {
            cov_d5jopodb3.f[4]++;
            cov_d5jopodb3.s[19]++;
            this._assert3d('rotateY');
            cov_d5jopodb3.s[20]++;
            _main.default._validateParameters('rotateY', arguments);
            cov_d5jopodb3.s[21]++;
            this._renderer.rotateY(this._toRadians(angle));
            cov_d5jopodb3.s[22]++;
            return this;
          };

          /**
           * Rotates a shape around Z axis by the amount specified in angle parameter.
           * The angles can be entered in either RADIANS or DEGREES.
           *
           * This method works in WEBGL mode only.
           *
           * Objects are always rotated around their relative position to the
           * origin and positive numbers rotate objects in a clockwise direction.
           * All transformations are reset when <a href="#/p5/draw">draw()</a> begins again.
           *
           * @method rotateZ
           * @param  {Number} angle the angle of rotation, specified in radians
           *                        or degrees, depending on current angleMode
           * @chainable
           * @example
           * <div modernizr='webgl'>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           * function draw() {
           *   background(255);
           *   rotateZ(millis() / 1000);
           *   box();
           * }
           * </code>
           * </div>
           *
           * @alt
           * 3d box rotating around the z axis.
           */ cov_d5jopodb3.s[23]++;
          _main.default.prototype.rotateZ = function(angle) {
            cov_d5jopodb3.f[5]++;
            cov_d5jopodb3.s[24]++;
            this._assert3d('rotateZ');
            cov_d5jopodb3.s[25]++;
            _main.default._validateParameters('rotateZ', arguments);
            cov_d5jopodb3.s[26]++;
            this._renderer.rotateZ(this._toRadians(angle));
            cov_d5jopodb3.s[27]++;
            return this;
          };

          /**
           * Increases or decreases the size of a shape by expanding or contracting
           * vertices. Objects always scale from their relative origin to the
           * coordinate system. Scale values are specified as decimal percentages.
           * For example, the function call scale(2.0) increases the dimension of a
           * shape by 200%.
           *
           * Transformations apply to everything that happens after and subsequent
           * calls to the function multiply the effect. For example, calling scale(2.0)
           * and then scale(1.5) is the same as scale(3.0). If <a href="#/p5/scale">scale()</a> is called
           * within <a href="#/p5/draw">draw()</a>, the transformation is reset when the loop begins again.
           *
           * Using this function with the z parameter is only available in WEBGL mode.
           * This function can be further controlled with <a href="#/p5/push">push()</a> and <a href="#/p5/pop">pop()</a>.
           *
           * @method scale
           * @param  {Number|p5.Vector|Number[]} s
           *                      percent to scale the object, or percentage to
           *                      scale the object in the x-axis if multiple arguments
           *                      are given
           * @param  {Number} [y] percent to scale the object in the y-axis
           * @param  {Number} [z] percent to scale the object in the z-axis (webgl only)
           * @chainable
           * @example
           * <div>
           * <code>
           * rect(30, 20, 50, 50);
           * scale(0.5);
           * rect(30, 20, 50, 50);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * rect(30, 20, 50, 50);
           * scale(0.5, 1.3);
           * rect(30, 20, 50, 50);
           * </code>
           * </div>
           *
           * @alt
           * white 52x52 rect with black outline at center rotated counter 45 degrees
           * 2 white rects with black outline- 1 50x50 at center. other 25x65 bottom left
           */
          /**
           * @method scale
           * @param  {p5.Vector|Number[]} scales per-axis percents to scale the object
           * @chainable
           */ cov_d5jopodb3.s[28]++;
          _main.default.prototype.scale = function(x, y, z) {
            cov_d5jopodb3.f[6]++;
            cov_d5jopodb3.s[29]++;
            _main.default._validateParameters('scale', arguments);
            // Only check for Vector argument type if Vector is available
            cov_d5jopodb3.s[30]++;
            if (x instanceof _main.default.Vector) {
              cov_d5jopodb3.b[2][0]++;
              var v = (cov_d5jopodb3.s[31]++, x);
              cov_d5jopodb3.s[32]++;
              x = v.x;
              cov_d5jopodb3.s[33]++;
              y = v.y;
              cov_d5jopodb3.s[34]++;
              z = v.z;
            } else {
              cov_d5jopodb3.b[2][1]++;
              cov_d5jopodb3.s[35]++;
              if (x instanceof Array) {
                cov_d5jopodb3.b[3][0]++;
                var rg = (cov_d5jopodb3.s[36]++, x);
                cov_d5jopodb3.s[37]++;
                x = rg[0];
                cov_d5jopodb3.s[38]++;
                y = rg[1];
                cov_d5jopodb3.s[39]++;
                z = (cov_d5jopodb3.b[4][0]++, rg[2]) || (cov_d5jopodb3.b[4][1]++, 1);
              } else {
                cov_d5jopodb3.b[3][1]++;
              }
            }
            cov_d5jopodb3.s[40]++;
            if (isNaN(y)) {
              cov_d5jopodb3.b[5][0]++;
              cov_d5jopodb3.s[41]++;
              y = z = x;
            } else {
              cov_d5jopodb3.b[5][1]++;
              cov_d5jopodb3.s[42]++;
              if (isNaN(z)) {
                cov_d5jopodb3.b[6][0]++;
                cov_d5jopodb3.s[43]++;
                z = 1;
              } else {
                cov_d5jopodb3.b[6][1]++;
              }
            }
            cov_d5jopodb3.s[44]++;

            this._renderer.scale.call(this._renderer, x, y, z);
            cov_d5jopodb3.s[45]++;

            return this;
          };

          /**
           * Shears a shape around the x-axis by the amount specified by the angle
           * parameter. Angles should be specified in the current angleMode.
           * Objects are always sheared around their relative position to the origin
           * and positive numbers shear objects in a clockwise direction.
           *
           * Transformations apply to everything that happens after and subsequent
           * calls to the function accumulates the effect. For example, calling
           * shearX(PI/2) and then shearX(PI/2) is the same as shearX(PI).
           * If <a href="#/p5/shearX">shearX()</a> is called within the <a href="#/p5/draw">draw()</a>,
           * the transformation is reset when the loop begins again.
           *
           * Technically, <a href="#/p5/shearX">shearX()</a> multiplies the current
           * transformation matrix by a rotation matrix. This function can be further
           * controlled by the <a href="#/p5/push">push()</a> and <a href="#/p5/pop">pop()</a> functions.
           *
           * @method shearX
           * @param  {Number} angle angle of shear specified in radians or degrees,
           *                        depending on current angleMode
           * @chainable
           * @example
           * <div>
           * <code>
           * translate(width / 4, height / 4);
           * shearX(PI / 4.0);
           * rect(0, 0, 30, 30);
           * </code>
           * </div>
           *
           * @alt
           * white irregular quadrilateral with black outline at top middle.
           */ cov_d5jopodb3.s[46]++;
          _main.default.prototype.shearX = function(angle) {
            cov_d5jopodb3.f[7]++;
            cov_d5jopodb3.s[47]++;
            _main.default._validateParameters('shearX', arguments);
            var rad = (cov_d5jopodb3.s[48]++, this._toRadians(angle));
            cov_d5jopodb3.s[49]++;
            this._renderer.applyMatrix(1, 0, Math.tan(rad), 1, 0, 0);
            cov_d5jopodb3.s[50]++;
            return this;
          };

          /**
           * Shears a shape around the y-axis the amount specified by the angle
           * parameter. Angles should be specified in the current angleMode. Objects
           * are always sheared around their relative position to the origin and
           * positive numbers shear objects in a clockwise direction.
           *
           * Transformations apply to everything that happens after and subsequent
           * calls to the function accumulates the effect. For example, calling
           * shearY(PI/2) and then shearY(PI/2) is the same as shearY(PI). If
           * <a href="#/p5/shearY">shearY()</a> is called within the <a href="#/p5/draw">draw()</a>, the transformation is reset when
           * the loop begins again.
           *
           * Technically, <a href="#/p5/shearY">shearY()</a> multiplies the current transformation matrix by a
           * rotation matrix. This function can be further controlled by the
           * <a href="#/p5/push">push()</a> and <a href="#/p5/pop">pop()</a> functions.
           *
           * @method shearY
           * @param  {Number} angle angle of shear specified in radians or degrees,
           *                        depending on current angleMode
           * @chainable
           * @example
           * <div>
           * <code>
           * translate(width / 4, height / 4);
           * shearY(PI / 4.0);
           * rect(0, 0, 30, 30);
           * </code>
           * </div>
           *
           * @alt
           * white irregular quadrilateral with black outline at middle bottom.
           */ cov_d5jopodb3.s[51]++;
          _main.default.prototype.shearY = function(angle) {
            cov_d5jopodb3.f[8]++;
            cov_d5jopodb3.s[52]++;
            _main.default._validateParameters('shearY', arguments);
            var rad = (cov_d5jopodb3.s[53]++, this._toRadians(angle));
            cov_d5jopodb3.s[54]++;
            this._renderer.applyMatrix(1, Math.tan(rad), 0, 1, 0, 0);
            cov_d5jopodb3.s[55]++;
            return this;
          };

          /**
    * Specifies an amount to displace objects within the display window.
    * The x parameter specifies left/right translation, the y parameter
    * specifies up/down translation.
    *
    * Transformations are cumulative and apply to everything that happens after
    * and subsequent calls to the function accumulates the effect. For example,
    * calling translate(50, 0) and then translate(20, 0) is the same as
    * translate(70, 0). If <a href="#/p5/translate">translate()</a> is called within <a href="#/p5/draw">draw()</a>, the
    * transformation is reset when the loop begins again. This function can be
    * further controlled by using <a href="#/p5/push">push()</a> and <a href="#/p5/pop">pop()</a>.
    *
    * @method translate
    * @param  {Number} x left/right translation
    * @param  {Number} y up/down translation
    * @param  {Number} [z] forward/backward translation (webgl only)
    * @chainable
    * @example
    * <div>
    * <code>
    * translate(30, 20);
    * rect(0, 0, 55, 55);
    * </code>
    * </div>
    *
    * <div>
    * <code>
    * rect(0, 0, 55, 55); // Draw rect at original 0,0
    * translate(30, 20);
    * rect(0, 0, 55, 55); // Draw rect at new 0,0
    * translate(14, 14);
    * rect(0, 0, 55, 55); // Draw rect at new 0,0
    * </code>
    * </div>
    *
   
    * <div>
    * <code>
    * function draw() {
    *   background(200);
    *   rectMode(CENTER);
    *   translate(width / 2, height / 2);
    *   translate(p5.Vector.fromAngle(millis() / 1000, 40));
    *   rect(0, 0, 20, 20);
    * }
    * </code>
    * </div>
    *
    * @alt
    * white 55x55 rect with black outline at center right.
    * 3 white 55x55 rects with black outlines at top-l, center-r and bottom-r.
    * a 20x20 white rect moving in a circle around the canvas
    */
          /**
           * @method translate
           * @param  {p5.Vector} vector the vector to translate by
           * @chainable
           */ cov_d5jopodb3.s[56]++;
          _main.default.prototype.translate = function(x, y, z) {
            cov_d5jopodb3.f[9]++;
            cov_d5jopodb3.s[57]++;
            _main.default._validateParameters('translate', arguments);
            cov_d5jopodb3.s[58]++;
            if (this._renderer.isP3D) {
              cov_d5jopodb3.b[7][0]++;
              cov_d5jopodb3.s[59]++;
              this._renderer.translate(x, y, z);
            } else {
              cov_d5jopodb3.b[7][1]++;
              cov_d5jopodb3.s[60]++;
              this._renderer.translate(x, y);
            }
            cov_d5jopodb3.s[61]++;
            return this;
          };
          var _default = _main.default;
          exports.default = _default;
        },
        {
          './main': 283,
          'core-js/modules/es.array.from': 171,
          'core-js/modules/es.array.iterator': 174,
          'core-js/modules/es.object.get-prototype-of': 190,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.regexp.to-string': 197,
          'core-js/modules/es.string.iterator': 201,
          'core-js/modules/es.symbol': 211,
          'core-js/modules/es.symbol.description': 209,
          'core-js/modules/es.symbol.iterator': 210,
          'core-js/modules/es.typed-array.copy-within': 212,
          'core-js/modules/es.typed-array.every': 213,
          'core-js/modules/es.typed-array.fill': 214,
          'core-js/modules/es.typed-array.filter': 215,
          'core-js/modules/es.typed-array.find': 217,
          'core-js/modules/es.typed-array.find-index': 216,
          'core-js/modules/es.typed-array.for-each': 220,
          'core-js/modules/es.typed-array.includes': 221,
          'core-js/modules/es.typed-array.index-of': 222,
          'core-js/modules/es.typed-array.iterator': 225,
          'core-js/modules/es.typed-array.join': 226,
          'core-js/modules/es.typed-array.last-index-of': 227,
          'core-js/modules/es.typed-array.map': 228,
          'core-js/modules/es.typed-array.reduce': 230,
          'core-js/modules/es.typed-array.reduce-right': 229,
          'core-js/modules/es.typed-array.reverse': 231,
          'core-js/modules/es.typed-array.set': 232,
          'core-js/modules/es.typed-array.slice': 233,
          'core-js/modules/es.typed-array.some': 234,
          'core-js/modules/es.typed-array.sort': 235,
          'core-js/modules/es.typed-array.subarray': 236,
          'core-js/modules/es.typed-array.to-locale-string': 237,
          'core-js/modules/es.typed-array.to-string': 238,
          'core-js/modules/es.typed-array.uint8-array': 241,
          'core-js/modules/web.dom-collections.iterator': 244
        }
      ],
      297: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_y8ca01ezr = (function() {
            var path = '/Users/outofambit/src/p5.js/src/data/local_storage.js';
            var hash = 'c9d60ae7497f84bb410f410b6927b05b788a4417';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/data/local_storage.js',
              statementMap: {
                '0': { start: { line: 60, column: 0 }, end: { line: 99, column: 2 } },
                '1': { start: { line: 61, column: 2 }, end: { line: 65, column: 3 } },
                '2': { start: { line: 62, column: 4 }, end: { line: 64, column: 6 } },
                '3': { start: { line: 66, column: 2 }, end: { line: 70, column: 3 } },
                '4': { start: { line: 67, column: 4 }, end: { line: 69, column: 6 } },
                '5': { start: { line: 72, column: 2 }, end: { line: 74, column: 3 } },
                '6': { start: { line: 73, column: 4 }, end: { line: 73, column: 75 } },
                '7': { start: { line: 75, column: 13 }, end: { line: 75, column: 25 } },
                '8': { start: { line: 76, column: 2 }, end: { line: 94, column: 3 } },
                '9': { start: { line: 79, column: 6 }, end: { line: 79, column: 31 } },
                '10': { start: { line: 80, column: 6 }, end: { line: 80, column: 12 } },
                '11': { start: { line: 82, column: 6 }, end: { line: 88, column: 7 } },
                '12': { start: { line: 83, column: 8 }, end: { line: 83, column: 26 } },
                '13': { start: { line: 84, column: 13 }, end: { line: 88, column: 7 } },
                '14': { start: { line: 85, column: 8 }, end: { line: 85, column: 27 } },
                '15': { start: { line: 86, column: 22 }, end: { line: 86, column: 49 } },
                '16': { start: { line: 87, column: 8 }, end: { line: 87, column: 22 } },
                '17': { start: { line: 89, column: 6 }, end: { line: 89, column: 36 } },
                '18': { start: { line: 90, column: 6 }, end: { line: 90, column: 12 } },
                '19': { start: { line: 93, column: 6 }, end: { line: 93, column: 12 } },
                '20': { start: { line: 96, column: 2 }, end: { line: 96, column: 35 } },
                '21': { start: { line: 97, column: 18 }, end: { line: 97, column: 34 } },
                '22': { start: { line: 98, column: 2 }, end: { line: 98, column: 38 } },
                '23': { start: { line: 143, column: 0 }, end: { line: 175, column: 2 } },
                '24': { start: { line: 144, column: 14 }, end: { line: 144, column: 39 } },
                '25': { start: { line: 145, column: 15 }, end: { line: 145, column: 53 } },
                '26': { start: { line: 146, column: 2 }, end: { line: 173, column: 3 } },
                '27': { start: { line: 147, column: 4 }, end: { line: 149, column: 6 } },
                '28': { start: { line: 150, column: 9 }, end: { line: 173, column: 3 } },
                '29': { start: { line: 151, column: 4 }, end: { line: 172, column: 5 } },
                '30': { start: { line: 153, column: 8 }, end: { line: 153, column: 34 } },
                '31': { start: { line: 154, column: 8 }, end: { line: 154, column: 14 } },
                '32': { start: { line: 156, column: 8 }, end: { line: 156, column: 33 } },
                '33': { start: { line: 157, column: 8 }, end: { line: 157, column: 14 } },
                '34': { start: { line: 159, column: 8 }, end: { line: 159, column: 34 } },
                '35': { start: { line: 160, column: 8 }, end: { line: 160, column: 14 } },
                '36': { start: { line: 162, column: 8 }, end: { line: 162, column: 34 } },
                '37': { start: { line: 163, column: 8 }, end: { line: 163, column: 44 } },
                '38': { start: { line: 164, column: 8 }, end: { line: 164, column: 14 } },
                '39': { start: { line: 166, column: 8 }, end: { line: 166, column: 34 } },
                '40': { start: { line: 167, column: 8 }, end: { line: 167, column: 44 } },
                '41': { start: { line: 168, column: 8 }, end: { line: 168, column: 14 } },
                '42': { start: { line: 171, column: 8 }, end: { line: 171, column: 14 } },
                '43': { start: { line: 174, column: 2 }, end: { line: 174, column: 15 } },
                '44': { start: { line: 201, column: 0 }, end: { line: 203, column: 2 } },
                '45': { start: { line: 202, column: 2 }, end: { line: 202, column: 23 } },
                '46': { start: { line: 225, column: 0 }, end: { line: 233, column: 2 } },
                '47': { start: { line: 226, column: 2 }, end: { line: 230, column: 3 } },
                '48': { start: { line: 227, column: 4 }, end: { line: 229, column: 6 } },
                '49': { start: { line: 231, column: 2 }, end: { line: 231, column: 31 } },
                '50': { start: { line: 232, column: 2 }, end: { line: 232, column: 44 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 60, column: 25 }, end: { line: 60, column: 26 } },
                  loc: { start: { line: 60, column: 46 }, end: { line: 99, column: 1 } },
                  line: 60
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: {
                    start: { line: 143, column: 23 },
                    end: { line: 143, column: 24 }
                  },
                  loc: { start: { line: 143, column: 37 }, end: { line: 175, column: 1 } },
                  line: 143
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 201, column: 28 },
                    end: { line: 201, column: 29 }
                  },
                  loc: { start: { line: 201, column: 39 }, end: { line: 203, column: 1 } },
                  line: 201
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 225, column: 26 },
                    end: { line: 225, column: 27 }
                  },
                  loc: { start: { line: 225, column: 40 }, end: { line: 233, column: 1 } },
                  line: 225
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 61, column: 2 }, end: { line: 65, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 61, column: 2 }, end: { line: 65, column: 3 } },
                    { start: { line: 61, column: 2 }, end: { line: 65, column: 3 } }
                  ],
                  line: 61
                },
                '1': {
                  loc: { start: { line: 66, column: 2 }, end: { line: 70, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 66, column: 2 }, end: { line: 70, column: 3 } },
                    { start: { line: 66, column: 2 }, end: { line: 70, column: 3 } }
                  ],
                  line: 66
                },
                '2': {
                  loc: { start: { line: 72, column: 2 }, end: { line: 74, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 72, column: 2 }, end: { line: 74, column: 3 } },
                    { start: { line: 72, column: 2 }, end: { line: 74, column: 3 } }
                  ],
                  line: 72
                },
                '3': {
                  loc: { start: { line: 76, column: 2 }, end: { line: 94, column: 3 } },
                  type: 'switch',
                  locations: [
                    { start: { line: 77, column: 4 }, end: { line: 77, column: 18 } },
                    { start: { line: 78, column: 4 }, end: { line: 80, column: 12 } },
                    { start: { line: 81, column: 4 }, end: { line: 90, column: 12 } },
                    { start: { line: 91, column: 4 }, end: { line: 91, column: 18 } },
                    { start: { line: 92, column: 4 }, end: { line: 93, column: 12 } }
                  ],
                  line: 76
                },
                '4': {
                  loc: { start: { line: 82, column: 6 }, end: { line: 88, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 82, column: 6 }, end: { line: 88, column: 7 } },
                    { start: { line: 82, column: 6 }, end: { line: 88, column: 7 } }
                  ],
                  line: 82
                },
                '5': {
                  loc: { start: { line: 84, column: 13 }, end: { line: 88, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 84, column: 13 }, end: { line: 88, column: 7 } },
                    { start: { line: 84, column: 13 }, end: { line: 88, column: 7 } }
                  ],
                  line: 84
                },
                '6': {
                  loc: { start: { line: 146, column: 2 }, end: { line: 173, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 146, column: 2 }, end: { line: 173, column: 3 } },
                    { start: { line: 146, column: 2 }, end: { line: 173, column: 3 } }
                  ],
                  line: 146
                },
                '7': {
                  loc: { start: { line: 150, column: 9 }, end: { line: 173, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 150, column: 9 }, end: { line: 173, column: 3 } },
                    { start: { line: 150, column: 9 }, end: { line: 173, column: 3 } }
                  ],
                  line: 150
                },
                '8': {
                  loc: { start: { line: 151, column: 4 }, end: { line: 172, column: 5 } },
                  type: 'switch',
                  locations: [
                    { start: { line: 152, column: 6 }, end: { line: 154, column: 14 } },
                    { start: { line: 155, column: 6 }, end: { line: 157, column: 14 } },
                    { start: { line: 158, column: 6 }, end: { line: 160, column: 14 } },
                    { start: { line: 161, column: 6 }, end: { line: 164, column: 14 } },
                    { start: { line: 165, column: 6 }, end: { line: 168, column: 14 } },
                    { start: { line: 169, column: 6 }, end: { line: 169, column: 20 } },
                    { start: { line: 170, column: 6 }, end: { line: 171, column: 14 } }
                  ],
                  line: 151
                },
                '9': {
                  loc: { start: { line: 226, column: 2 }, end: { line: 230, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 226, column: 2 }, end: { line: 230, column: 3 } },
                    { start: { line: 226, column: 2 }, end: { line: 230, column: 3 } }
                  ],
                  line: 226
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0
              },
              f: { '0': 0, '1': 0, '2': 0, '3': 0 },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0, 0, 0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0, 0, 0, 0, 0, 0],
                '9': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: 'c9d60ae7497f84bb410f410b6927b05b788a4417'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.symbol');
          _dereq_('core-js/modules/es.symbol.description');
          _dereq_('core-js/modules/es.symbol.iterator');
          _dereq_('core-js/modules/es.array.from');
          _dereq_('core-js/modules/es.array.iterator');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.regexp.to-string');
          _dereq_('core-js/modules/es.string.ends-with');
          _dereq_('core-js/modules/es.string.iterator');
          _dereq_('core-js/modules/web.dom-collections.iterator');

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          function _toConsumableArray(arr) {
            return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();
          }
          function _nonIterableSpread() {
            throw new TypeError('Invalid attempt to spread non-iterable instance');
          }
          function _iterableToArray(iter) {
            if (
              Symbol.iterator in Object(iter) ||
              Object.prototype.toString.call(iter) === '[object Arguments]'
            )
              return Array.from(iter);
          }
          function _arrayWithoutHoles(arr) {
            if (Array.isArray(arr)) {
              for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {
                arr2[i] = arr[i];
              }
              return arr2;
            }
          }
          function _typeof(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof = function _typeof(obj) {
                return typeof obj;
              };
            } else {
              _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof(obj);
          }
          cov_y8ca01ezr.s[0]++;
          /**
           *
           * Stores a value in local storage under the key name.
           * Local storage is saved in the browser and persists
           * between browsing sessions and page reloads.
           * The key can be the name of the variable but doesn't
           * have to be. To retrieve stored items
           * see <a href="#/p5/getItem">getItem</a>.
           *
           * Sensitive data such as passwords or personal information
           * should not be stored in local storage.
           *
           * @method storeItem
           * @for p5
           * @param {String} key
           * @param {String|Number|Object|Boolean|p5.Color|p5.Vector} value
           *
           * @example
           * <div><code>
           * // Type to change the letter in the
           * // center of the canvas.
           * // If you reload the page, it will
           * // still display the last key you entered
           *
           * let myText;
           *
           * function setup() {
           *   createCanvas(100, 100);
           *   myText = getItem('myText');
           *   if (myText === null) {
           *     myText = '';
           *   }
           * }
           *
           * function draw() {
           *   textSize(40);
           *   background(255);
           *   text(myText, width / 2, height / 2);
           * }
           *
           * function keyPressed() {
           *   myText = key;
           *   storeItem('myText', myText);
           * }
           * </code></div>
           *
           * @alt
           * When you type the key name is displayed as black text on white background.
           * If you reload the page, the last letter typed is still displaying.
           */
          _main.default.prototype.storeItem = function(key, value) {
            cov_y8ca01ezr.f[0]++;
            cov_y8ca01ezr.s[1]++;
            if (typeof key !== 'string') {
              cov_y8ca01ezr.b[0][0]++;
              cov_y8ca01ezr.s[2]++;
              console.log(
                'The argument that you passed to storeItem() - '.concat(
                  key,
                  ' is not a string.'
                )
              );
            } else {
              cov_y8ca01ezr.b[0][1]++;
            }
            cov_y8ca01ezr.s[3]++;
            if (key.endsWith('p5TypeID')) {
              cov_y8ca01ezr.b[1][0]++;
              cov_y8ca01ezr.s[4]++;
              console.log(
                'The argument that you passed to storeItem() - '.concat(
                  key,
                  " must not end with 'p5TypeID'."
                )
              );
            } else {
              cov_y8ca01ezr.b[1][1]++;
            }
            cov_y8ca01ezr.s[5]++;

            if (typeof value === 'undefined') {
              cov_y8ca01ezr.b[2][0]++;
              cov_y8ca01ezr.s[6]++;
              console.log('You cannot store undefined variables using storeItem().');
            } else {
              cov_y8ca01ezr.b[2][1]++;
            }
            var type = (cov_y8ca01ezr.s[7]++, _typeof(value));
            cov_y8ca01ezr.s[8]++;
            switch (type) {
              case 'number':
                cov_y8ca01ezr.b[3][0]++;
              case 'boolean':
                cov_y8ca01ezr.b[3][1]++;
                cov_y8ca01ezr.s[9]++;
                value = value.toString();
                cov_y8ca01ezr.s[10]++;
                break;
              case 'object':
                cov_y8ca01ezr.b[3][2]++;
                cov_y8ca01ezr.s[11]++;
                if (value instanceof _main.default.Color) {
                  cov_y8ca01ezr.b[4][0]++;
                  cov_y8ca01ezr.s[12]++;
                  type = 'p5.Color';
                } else {
                  cov_y8ca01ezr.b[4][1]++;
                  cov_y8ca01ezr.s[13]++;
                  if (value instanceof _main.default.Vector) {
                    cov_y8ca01ezr.b[5][0]++;
                    cov_y8ca01ezr.s[14]++;
                    type = 'p5.Vector';
                    var coord = (cov_y8ca01ezr.s[15]++, [value.x, value.y, value.z]);
                    cov_y8ca01ezr.s[16]++;
                    value = coord;
                  } else {
                    cov_y8ca01ezr.b[5][1]++;
                  }
                }
                cov_y8ca01ezr.s[17]++;
                value = JSON.stringify(value);
                cov_y8ca01ezr.s[18]++;
                break;
              case 'string':
                cov_y8ca01ezr.b[3][3]++;
              default:
                cov_y8ca01ezr.b[3][4]++;
                cov_y8ca01ezr.s[19]++;
                break;
            }
            cov_y8ca01ezr.s[20]++;

            localStorage.setItem(key, value);
            var typeKey = (cov_y8ca01ezr.s[21]++, ''.concat(key, 'p5TypeID'));
            cov_y8ca01ezr.s[22]++;
            localStorage.setItem(typeKey, type);
          };

          /**
           *
           * Returns the value of an item that was stored in local storage
           * using storeItem()
           *
           * @method getItem
           * @for p5
           * @param {String} key name that you wish to use to store in local storage
           * @return {Number|Object|String|Boolean|p5.Color|p5.Vector} Value of stored item
           *
           * @example
           * <div><code>
           * // Click the mouse to change
           * // the color of the background
           * // Once you have changed the color
           * // it will stay changed even when you
           * // reload the page.
           *
           * let myColor;
           *
           * function setup() {
           *   createCanvas(100, 100);
           *   myColor = getItem('myColor');
           * }
           *
           * function draw() {
           *   if (myColor !== null) {
           *     background(myColor);
           *   }
           * }
           *
           * function mousePressed() {
           *   myColor = color(random(255), random(255), random(255));
           *   storeItem('myColor', myColor);
           * }
           * </code></div>
           *
           * @alt
           * If you click, the canvas changes to a random color.
           * If you reload the page, the canvas is still the color it
           * was when the page was previously loaded.
           */ cov_y8ca01ezr.s[23]++;
          _main.default.prototype.getItem = function(key) {
            cov_y8ca01ezr.f[1]++;
            var value = (cov_y8ca01ezr.s[24]++, localStorage.getItem(key));
            var type = (cov_y8ca01ezr.s[25]++,
            localStorage.getItem(''.concat(key, 'p5TypeID')));
            cov_y8ca01ezr.s[26]++;
            if (typeof type === 'undefined') {
              cov_y8ca01ezr.b[6][0]++;
              cov_y8ca01ezr.s[27]++;
              console.log(
                'Unable to determine type of item stored under '.concat(
                  key,
                  'in local storage. Did you save the item with something other than setItem()?'
                )
              );
            } else {
              cov_y8ca01ezr.b[6][1]++;
              cov_y8ca01ezr.s[28]++;
              if (value !== null) {
                cov_y8ca01ezr.b[7][0]++;
                cov_y8ca01ezr.s[29]++;
                switch (type) {
                  case 'number':
                    cov_y8ca01ezr.b[8][0]++;
                    cov_y8ca01ezr.s[30]++;
                    value = parseFloat(value);
                    cov_y8ca01ezr.s[31]++;
                    break;
                  case 'boolean':
                    cov_y8ca01ezr.b[8][1]++;
                    cov_y8ca01ezr.s[32]++;
                    value = value === 'true';
                    cov_y8ca01ezr.s[33]++;
                    break;
                  case 'object':
                    cov_y8ca01ezr.b[8][2]++;
                    cov_y8ca01ezr.s[34]++;
                    value = JSON.parse(value);
                    cov_y8ca01ezr.s[35]++;
                    break;
                  case 'p5.Color':
                    cov_y8ca01ezr.b[8][3]++;
                    cov_y8ca01ezr.s[36]++;
                    value = JSON.parse(value);
                    cov_y8ca01ezr.s[37]++;
                    value = this.color.apply(this, _toConsumableArray(value.levels));
                    cov_y8ca01ezr.s[38]++;
                    break;
                  case 'p5.Vector':
                    cov_y8ca01ezr.b[8][4]++;
                    cov_y8ca01ezr.s[39]++;
                    value = JSON.parse(value);
                    cov_y8ca01ezr.s[40]++;
                    value = this.createVector.apply(this, _toConsumableArray(value));
                    cov_y8ca01ezr.s[41]++;
                    break;
                  case 'string':
                    cov_y8ca01ezr.b[8][5]++;
                  default:
                    cov_y8ca01ezr.b[8][6]++;
                    cov_y8ca01ezr.s[42]++;
                    break;
                }
              } else {
                cov_y8ca01ezr.b[7][1]++;
              }
            }
            cov_y8ca01ezr.s[43]++;
            return value;
          };

          /**
           *
           * Clears all local storage items set with storeItem()
           * for the current domain.
           *
           * @method clearStorage
           * @for p5
           *
           * @example
           * <div class="norender">
           * <code>
           * function setup() {
           *   let myNum = 10;
           *   let myBool = false;
           *   storeItem('myNum', myNum);
           *   storeItem('myBool', myBool);
           *   print(getItem('myNum')); // logs 10 to the console
           *   print(getItem('myBool')); // logs false to the console
           *   clearStorage();
           *   print(getItem('myNum')); // logs null to the console
           *   print(getItem('myBool')); // logs null to the console
           * }
           * </code></div>
           */ cov_y8ca01ezr.s[44]++;
          _main.default.prototype.clearStorage = function() {
            cov_y8ca01ezr.f[2]++;
            cov_y8ca01ezr.s[45]++;
            localStorage.clear();
          };

          /**
           *
           * Removes an item that was stored with storeItem()
           *
           * @method removeItem
           * @param {String} key
           * @for p5
           *
           * @example
           * <div class="norender">
           * <code>
           * function setup() {
           *   let myVar = 10;
           *   storeItem('myVar', myVar);
           *   print(getItem('myVar')); // logs 10 to the console
           *   removeItem('myVar');
           *   print(getItem('myVar')); // logs null to the console
           * }
           * </code></div>
           */ cov_y8ca01ezr.s[46]++;
          _main.default.prototype.removeItem = function(key) {
            cov_y8ca01ezr.f[3]++;
            cov_y8ca01ezr.s[47]++;
            if (typeof key !== 'string') {
              cov_y8ca01ezr.b[9][0]++;
              cov_y8ca01ezr.s[48]++;
              console.log(
                'The argument that you passed to removeItem() - '.concat(
                  key,
                  ' is not a string.'
                )
              );
            } else {
              cov_y8ca01ezr.b[9][1]++;
            }
            cov_y8ca01ezr.s[49]++;
            localStorage.removeItem(key);
            cov_y8ca01ezr.s[50]++;
            localStorage.removeItem(''.concat(key, 'p5TypeID'));
          };
        },
        {
          '../core/main': 283,
          'core-js/modules/es.array.from': 171,
          'core-js/modules/es.array.iterator': 174,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.regexp.to-string': 197,
          'core-js/modules/es.string.ends-with': 199,
          'core-js/modules/es.string.iterator': 201,
          'core-js/modules/es.symbol': 211,
          'core-js/modules/es.symbol.description': 209,
          'core-js/modules/es.symbol.iterator': 210,
          'core-js/modules/web.dom-collections.iterator': 244
        }
      ],
      298: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_1v3t5apo9l = (function() {
            var path = '/Users/outofambit/src/p5.js/src/data/p5.TypedDict.js';
            var hash = 'ae27eccddf9e2586e90c265136c5b1e253e1050f';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/data/p5.TypedDict.js',
              statementMap: {
                '0': { start: { line: 43, column: 0 }, end: { line: 46, column: 2 } },
                '1': { start: { line: 44, column: 2 }, end: { line: 44, column: 56 } },
                '2': { start: { line: 45, column: 2 }, end: { line: 45, column: 39 } },
                '3': { start: { line: 77, column: 0 }, end: { line: 80, column: 2 } },
                '4': { start: { line: 78, column: 2 }, end: { line: 78, column: 56 } },
                '5': { start: { line: 79, column: 2 }, end: { line: 79, column: 39 } },
                '6': { start: { line: 91, column: 0 }, end: { line: 99, column: 2 } },
                '7': { start: { line: 92, column: 2 }, end: { line: 97, column: 3 } },
                '8': { start: { line: 93, column: 4 }, end: { line: 93, column: 20 } },
                '9': { start: { line: 95, column: 4 }, end: { line: 95, column: 19 } },
                '10': { start: { line: 96, column: 4 }, end: { line: 96, column: 27 } },
                '11': { start: { line: 98, column: 2 }, end: { line: 98, column: 14 } },
                '12': { start: { line: 118, column: 0 }, end: { line: 120, column: 2 } },
                '13': { start: { line: 119, column: 2 }, end: { line: 119, column: 39 } },
                '14': { start: { line: 140, column: 0 }, end: { line: 142, column: 2 } },
                '15': { start: { line: 141, column: 2 }, end: { line: 141, column: 39 } },
                '16': { start: { line: 162, column: 0 }, end: { line: 168, column: 2 } },
                '17': { start: { line: 163, column: 2 }, end: { line: 167, column: 3 } },
                '18': { start: { line: 164, column: 4 }, end: { line: 164, column: 26 } },
                '19': { start: { line: 166, column: 4 }, end: { line: 166, column: 60 } },
                '20': { start: { line: 189, column: 0 }, end: { line: 195, column: 2 } },
                '21': { start: { line: 190, column: 2 }, end: { line: 194, column: 3 } },
                '22': { start: { line: 191, column: 4 }, end: { line: 191, column: 27 } },
                '23': { start: { line: 193, column: 4 }, end: { line: 193, column: 68 } },
                '24': { start: { line: 202, column: 0 }, end: { line: 206, column: 2 } },
                '25': { start: { line: 203, column: 2 }, end: { line: 205, column: 3 } },
                '26': { start: { line: 204, column: 4 }, end: { line: 204, column: 28 } },
                '27': { start: { line: 231, column: 0 }, end: { line: 242, column: 2 } },
                '28': { start: { line: 232, column: 2 }, end: { line: 241, column: 3 } },
                '29': { start: { line: 233, column: 4 }, end: { line: 233, column: 22 } },
                '30': { start: { line: 234, column: 9 }, end: { line: 241, column: 3 } },
                '31': { start: { line: 235, column: 4 }, end: { line: 235, column: 25 } },
                '32': { start: { line: 237, column: 4 }, end: { line: 240, column: 6 } },
                '33': { start: { line: 261, column: 0 }, end: { line: 263, column: 2 } },
                '34': { start: { line: 262, column: 2 }, end: { line: 262, column: 17 } },
                '35': { start: { line: 286, column: 0 }, end: { line: 292, column: 2 } },
                '36': { start: { line: 287, column: 2 }, end: { line: 291, column: 3 } },
                '37': { start: { line: 288, column: 4 }, end: { line: 288, column: 26 } },
                '38': { start: { line: 290, column: 4 }, end: { line: 290, column: 64 } },
                '39': { start: { line: 312, column: 0 }, end: { line: 316, column: 2 } },
                '40': { start: { line: 313, column: 2 }, end: { line: 315, column: 3 } },
                '41': { start: { line: 314, column: 4 }, end: { line: 314, column: 56 } },
                '42': { start: { line: 345, column: 0 }, end: { line: 354, column: 2 } },
                '43': { start: { line: 346, column: 15 }, end: { line: 346, column: 17 } },
                '44': { start: { line: 348, column: 2 }, end: { line: 350, column: 3 } },
                '45': { start: { line: 349, column: 4 }, end: { line: 349, column: 43 } },
                '46': { start: { line: 352, column: 15 }, end: { line: 352, column: 55 } },
                '47': { start: { line: 353, column: 2 }, end: { line: 353, column: 62 } },
                '48': { start: { line: 383, column: 0 }, end: { line: 385, column: 2 } },
                '49': { start: { line: 384, column: 2 }, end: { line: 384, column: 50 } },
                '50': { start: { line: 392, column: 0 }, end: { line: 392, column: 49 } },
                '51': { start: { line: 392, column: 44 }, end: { line: 392, column: 48 } },
                '52': { start: { line: 402, column: 0 }, end: { line: 404, column: 2 } },
                '53': { start: { line: 403, column: 2 }, end: { line: 403, column: 33 } },
                '54': { start: { line: 406, column: 0 }, end: { line: 406, column: 64 } },
                '55': { start: { line: 408, column: 0 }, end: { line: 408, column: 71 } },
                '56': { start: { line: 408, column: 45 }, end: { line: 408, column: 70 } },
                '57': { start: { line: 419, column: 0 }, end: { line: 421, column: 2 } },
                '58': { start: { line: 420, column: 2 }, end: { line: 420, column: 33 } },
                '59': { start: { line: 423, column: 0 }, end: { line: 423, column: 64 } },
                '60': { start: { line: 430, column: 0 }, end: { line: 430, column: 71 } },
                '61': { start: { line: 430, column: 45 }, end: { line: 430, column: 70 } },
                '62': { start: { line: 451, column: 0 }, end: { line: 457, column: 2 } },
                '63': { start: { line: 452, column: 2 }, end: { line: 456, column: 3 } },
                '64': { start: { line: 453, column: 4 }, end: { line: 453, column: 29 } },
                '65': { start: { line: 455, column: 4 }, end: { line: 455, column: 71 } },
                '66': { start: { line: 478, column: 0 }, end: { line: 480, column: 2 } },
                '67': { start: { line: 479, column: 2 }, end: { line: 479, column: 25 } },
                '68': { start: { line: 501, column: 0 }, end: { line: 507, column: 2 } },
                '69': { start: { line: 502, column: 2 }, end: { line: 506, column: 3 } },
                '70': { start: { line: 503, column: 4 }, end: { line: 503, column: 29 } },
                '71': { start: { line: 505, column: 4 }, end: { line: 505, column: 71 } },
                '72': { start: { line: 528, column: 0 }, end: { line: 534, column: 2 } },
                '73': { start: { line: 529, column: 2 }, end: { line: 533, column: 3 } },
                '74': { start: { line: 530, column: 4 }, end: { line: 530, column: 29 } },
                '75': { start: { line: 532, column: 4 }, end: { line: 532, column: 71 } },
                '76': { start: { line: 542, column: 0 }, end: { line: 558, column: 2 } },
                '77': { start: { line: 543, column: 2 }, end: { line: 557, column: 3 } },
                '78': { start: { line: 544, column: 4 }, end: { line: 546, column: 6 } },
                '79': { start: { line: 547, column: 9 }, end: { line: 557, column: 3 } },
                '80': { start: { line: 548, column: 4 }, end: { line: 548, column: 48 } },
                '81': { start: { line: 550, column: 17 }, end: { line: 550, column: 53 } },
                '82': { start: { line: 551, column: 4 }, end: { line: 555, column: 5 } },
                '83': { start: { line: 552, column: 6 }, end: { line: 554, column: 7 } },
                '84': { start: { line: 553, column: 8 }, end: { line: 553, column: 32 } },
                '85': { start: { line: 556, column: 4 }, end: { line: 556, column: 18 } },
                '86': { start: { line: 576, column: 0 }, end: { line: 578, column: 2 } },
                '87': { start: { line: 577, column: 2 }, end: { line: 577, column: 28 } },
                '88': { start: { line: 596, column: 0 }, end: { line: 598, column: 2 } },
                '89': { start: { line: 597, column: 2 }, end: { line: 597, column: 29 } },
                '90': { start: { line: 606, column: 0 }, end: { line: 620, column: 2 } },
                '91': { start: { line: 607, column: 2 }, end: { line: 619, column: 3 } },
                '92': { start: { line: 608, column: 4 }, end: { line: 608, column: 69 } },
                '93': { start: { line: 609, column: 9 }, end: { line: 619, column: 3 } },
                '94': { start: { line: 610, column: 4 }, end: { line: 610, column: 37 } },
                '95': { start: { line: 612, column: 17 }, end: { line: 612, column: 42 } },
                '96': { start: { line: 613, column: 4 }, end: { line: 617, column: 5 } },
                '97': { start: { line: 613, column: 17 }, end: { line: 613, column: 18 } },
                '98': { start: { line: 614, column: 6 }, end: { line: 616, column: 7 } },
                '99': { start: { line: 615, column: 8 }, end: { line: 615, column: 43 } },
                '100': { start: { line: 618, column: 4 }, end: { line: 618, column: 18 } },
                '101': { start: { line: 638, column: 0 }, end: { line: 640, column: 2 } },
                '102': { start: { line: 639, column: 2 }, end: { line: 639, column: 26 } },
                '103': { start: { line: 658, column: 0 }, end: { line: 660, column: 2 } },
                '104': { start: { line: 659, column: 2 }, end: { line: 659, column: 27 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 43, column: 32 }, end: { line: 43, column: 33 } },
                  loc: { start: { line: 43, column: 53 }, end: { line: 46, column: 1 } },
                  line: 43
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 77, column: 32 }, end: { line: 77, column: 33 } },
                  loc: { start: { line: 77, column: 53 }, end: { line: 80, column: 1 } },
                  line: 77
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: { start: { line: 91, column: 15 }, end: { line: 91, column: 16 } },
                  loc: { start: { line: 91, column: 36 }, end: { line: 99, column: 1 } },
                  line: 91
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 118, column: 30 },
                    end: { line: 118, column: 31 }
                  },
                  loc: { start: { line: 118, column: 41 }, end: { line: 120, column: 1 } },
                  line: 118
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 140, column: 32 },
                    end: { line: 140, column: 33 }
                  },
                  loc: { start: { line: 140, column: 46 }, end: { line: 142, column: 1 } },
                  line: 140
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 162, column: 29 },
                    end: { line: 162, column: 30 }
                  },
                  loc: { start: { line: 162, column: 43 }, end: { line: 168, column: 1 } },
                  line: 162
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 189, column: 29 },
                    end: { line: 189, column: 30 }
                  },
                  loc: { start: { line: 189, column: 50 }, end: { line: 195, column: 1 } },
                  line: 189
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 202, column: 33 },
                    end: { line: 202, column: 34 }
                  },
                  loc: { start: { line: 202, column: 47 }, end: { line: 206, column: 1 } },
                  line: 202
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 231, column: 32 },
                    end: { line: 231, column: 33 }
                  },
                  loc: { start: { line: 231, column: 53 }, end: { line: 242, column: 1 } },
                  line: 231
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 261, column: 31 },
                    end: { line: 261, column: 32 }
                  },
                  loc: { start: { line: 261, column: 42 }, end: { line: 263, column: 1 } },
                  line: 261
                },
                '10': {
                  name: '(anonymous_10)',
                  decl: {
                    start: { line: 286, column: 32 },
                    end: { line: 286, column: 33 }
                  },
                  loc: { start: { line: 286, column: 46 }, end: { line: 292, column: 1 } },
                  line: 286
                },
                '11': {
                  name: '(anonymous_11)',
                  decl: {
                    start: { line: 312, column: 31 },
                    end: { line: 312, column: 32 }
                  },
                  loc: { start: { line: 312, column: 42 }, end: { line: 316, column: 1 } },
                  line: 312
                },
                '12': {
                  name: '(anonymous_12)',
                  decl: {
                    start: { line: 345, column: 35 },
                    end: { line: 345, column: 36 }
                  },
                  loc: { start: { line: 345, column: 54 }, end: { line: 354, column: 1 } },
                  line: 345
                },
                '13': {
                  name: '(anonymous_13)',
                  decl: {
                    start: { line: 383, column: 34 },
                    end: { line: 383, column: 35 }
                  },
                  loc: { start: { line: 383, column: 58 }, end: { line: 385, column: 1 } },
                  line: 383
                },
                '14': {
                  name: '(anonymous_14)',
                  decl: {
                    start: { line: 392, column: 35 },
                    end: { line: 392, column: 36 }
                  },
                  loc: { start: { line: 392, column: 44 }, end: { line: 392, column: 48 } },
                  line: 392
                },
                '15': {
                  name: '(anonymous_15)',
                  decl: {
                    start: { line: 402, column: 16 },
                    end: { line: 402, column: 17 }
                  },
                  loc: { start: { line: 402, column: 34 }, end: { line: 404, column: 1 } },
                  line: 402
                },
                '16': {
                  name: '(anonymous_16)',
                  decl: {
                    start: { line: 408, column: 36 },
                    end: { line: 408, column: 37 }
                  },
                  loc: { start: { line: 408, column: 45 }, end: { line: 408, column: 70 } },
                  line: 408
                },
                '17': {
                  name: '(anonymous_17)',
                  decl: {
                    start: { line: 419, column: 16 },
                    end: { line: 419, column: 17 }
                  },
                  loc: { start: { line: 419, column: 34 }, end: { line: 421, column: 1 } },
                  line: 419
                },
                '18': {
                  name: '(anonymous_18)',
                  decl: {
                    start: { line: 430, column: 36 },
                    end: { line: 430, column: 37 }
                  },
                  loc: { start: { line: 430, column: 45 }, end: { line: 430, column: 70 } },
                  line: 430
                },
                '19': {
                  name: '(anonymous_19)',
                  decl: {
                    start: { line: 451, column: 30 },
                    end: { line: 451, column: 31 }
                  },
                  loc: { start: { line: 451, column: 52 }, end: { line: 457, column: 1 } },
                  line: 451
                },
                '20': {
                  name: '(anonymous_20)',
                  decl: {
                    start: { line: 478, column: 30 },
                    end: { line: 478, column: 31 }
                  },
                  loc: { start: { line: 478, column: 52 }, end: { line: 480, column: 1 } },
                  line: 478
                },
                '21': {
                  name: '(anonymous_21)',
                  decl: {
                    start: { line: 501, column: 31 },
                    end: { line: 501, column: 32 }
                  },
                  loc: { start: { line: 501, column: 53 }, end: { line: 507, column: 1 } },
                  line: 501
                },
                '22': {
                  name: '(anonymous_22)',
                  decl: {
                    start: { line: 528, column: 30 },
                    end: { line: 528, column: 31 }
                  },
                  loc: { start: { line: 528, column: 52 }, end: { line: 534, column: 1 } },
                  line: 528
                },
                '23': {
                  name: '(anonymous_23)',
                  decl: {
                    start: { line: 542, column: 37 },
                    end: { line: 542, column: 38 }
                  },
                  loc: { start: { line: 542, column: 52 }, end: { line: 558, column: 1 } },
                  line: 542
                },
                '24': {
                  name: '(anonymous_24)',
                  decl: {
                    start: { line: 576, column: 35 },
                    end: { line: 576, column: 36 }
                  },
                  loc: { start: { line: 576, column: 46 }, end: { line: 578, column: 1 } },
                  line: 576
                },
                '25': {
                  name: '(anonymous_25)',
                  decl: {
                    start: { line: 596, column: 35 },
                    end: { line: 596, column: 36 }
                  },
                  loc: { start: { line: 596, column: 46 }, end: { line: 598, column: 1 } },
                  line: 596
                },
                '26': {
                  name: '(anonymous_26)',
                  decl: {
                    start: { line: 606, column: 35 },
                    end: { line: 606, column: 36 }
                  },
                  loc: { start: { line: 606, column: 50 }, end: { line: 620, column: 1 } },
                  line: 606
                },
                '27': {
                  name: '(anonymous_27)',
                  decl: {
                    start: { line: 638, column: 33 },
                    end: { line: 638, column: 34 }
                  },
                  loc: { start: { line: 638, column: 44 }, end: { line: 640, column: 1 } },
                  line: 638
                },
                '28': {
                  name: '(anonymous_28)',
                  decl: {
                    start: { line: 658, column: 33 },
                    end: { line: 658, column: 34 }
                  },
                  loc: { start: { line: 658, column: 44 }, end: { line: 660, column: 1 } },
                  line: 658
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 92, column: 2 }, end: { line: 97, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 92, column: 2 }, end: { line: 97, column: 3 } },
                    { start: { line: 92, column: 2 }, end: { line: 97, column: 3 } }
                  ],
                  line: 92
                },
                '1': {
                  loc: { start: { line: 163, column: 2 }, end: { line: 167, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 163, column: 2 }, end: { line: 167, column: 3 } },
                    { start: { line: 163, column: 2 }, end: { line: 167, column: 3 } }
                  ],
                  line: 163
                },
                '2': {
                  loc: { start: { line: 190, column: 2 }, end: { line: 194, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 190, column: 2 }, end: { line: 194, column: 3 } },
                    { start: { line: 190, column: 2 }, end: { line: 194, column: 3 } }
                  ],
                  line: 190
                },
                '3': {
                  loc: { start: { line: 232, column: 2 }, end: { line: 241, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 232, column: 2 }, end: { line: 241, column: 3 } },
                    { start: { line: 232, column: 2 }, end: { line: 241, column: 3 } }
                  ],
                  line: 232
                },
                '4': {
                  loc: { start: { line: 232, column: 6 }, end: { line: 232, column: 59 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 232, column: 6 }, end: { line: 232, column: 27 } },
                    { start: { line: 232, column: 31 }, end: { line: 232, column: 59 } }
                  ],
                  line: 232
                },
                '5': {
                  loc: { start: { line: 234, column: 9 }, end: { line: 241, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 234, column: 9 }, end: { line: 241, column: 3 } },
                    { start: { line: 234, column: 9 }, end: { line: 241, column: 3 } }
                  ],
                  line: 234
                },
                '6': {
                  loc: { start: { line: 287, column: 2 }, end: { line: 291, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 287, column: 2 }, end: { line: 291, column: 3 } },
                    { start: { line: 287, column: 2 }, end: { line: 291, column: 3 } }
                  ],
                  line: 287
                },
                '7': {
                  loc: { start: { line: 353, column: 34 }, end: { line: 353, column: 53 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 353, column: 34 }, end: { line: 353, column: 42 } },
                    { start: { line: 353, column: 46 }, end: { line: 353, column: 53 } }
                  ],
                  line: 353
                },
                '8': {
                  loc: { start: { line: 452, column: 2 }, end: { line: 456, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 452, column: 2 }, end: { line: 456, column: 3 } },
                    { start: { line: 452, column: 2 }, end: { line: 456, column: 3 } }
                  ],
                  line: 452
                },
                '9': {
                  loc: { start: { line: 502, column: 2 }, end: { line: 506, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 502, column: 2 }, end: { line: 506, column: 3 } },
                    { start: { line: 502, column: 2 }, end: { line: 506, column: 3 } }
                  ],
                  line: 502
                },
                '10': {
                  loc: { start: { line: 529, column: 2 }, end: { line: 533, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 529, column: 2 }, end: { line: 533, column: 3 } },
                    { start: { line: 529, column: 2 }, end: { line: 533, column: 3 } }
                  ],
                  line: 529
                },
                '11': {
                  loc: { start: { line: 543, column: 2 }, end: { line: 557, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 543, column: 2 }, end: { line: 557, column: 3 } },
                    { start: { line: 543, column: 2 }, end: { line: 557, column: 3 } }
                  ],
                  line: 543
                },
                '12': {
                  loc: { start: { line: 547, column: 9 }, end: { line: 557, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 547, column: 9 }, end: { line: 557, column: 3 } },
                    { start: { line: 547, column: 9 }, end: { line: 557, column: 3 } }
                  ],
                  line: 547
                },
                '13': {
                  loc: { start: { line: 552, column: 6 }, end: { line: 554, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 552, column: 6 }, end: { line: 554, column: 7 } },
                    { start: { line: 552, column: 6 }, end: { line: 554, column: 7 } }
                  ],
                  line: 552
                },
                '14': {
                  loc: { start: { line: 607, column: 2 }, end: { line: 619, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 607, column: 2 }, end: { line: 619, column: 3 } },
                    { start: { line: 607, column: 2 }, end: { line: 619, column: 3 } }
                  ],
                  line: 607
                },
                '15': {
                  loc: { start: { line: 609, column: 9 }, end: { line: 619, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 609, column: 9 }, end: { line: 619, column: 3 } },
                    { start: { line: 609, column: 9 }, end: { line: 619, column: 3 } }
                  ],
                  line: 609
                },
                '16': {
                  loc: { start: { line: 614, column: 6 }, end: { line: 616, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 614, column: 6 }, end: { line: 616, column: 7 } },
                    { start: { line: 614, column: 6 }, end: { line: 616, column: 7 } }
                  ],
                  line: 614
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: 'ae27eccddf9e2586e90c265136c5b1e253e1050f'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.concat');
          _dereq_('core-js/modules/es.object.keys');
          _dereq_('core-js/modules/es.string.sub');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_1v3t5apo9l.s[0]++;

          /**
           *
           * Creates a new instance of p5.StringDict using the key-value pair
           * or the object you provide.
           *
           * @method createStringDict
           * @for p5
           * @param {String} key
           * @param {String} value
           * @return {p5.StringDict}
           *
           * @example
           * <div class="norender">
           * <code>
           * function setup() {
           *   let myDictionary = createStringDict('p5', 'js');
           *   print(myDictionary.hasKey('p5')); // logs true to console
           *
           *   let anotherDictionary = createStringDict({ happy: 'coding' });
           *   print(anotherDictionary.hasKey('happy')); // logs true to console
           * }
           * </code></div>
           */
          /**
           * @method createStringDict
           * @param {Object} object object
           * @return {p5.StringDict}
           */

          _main.default.prototype.createStringDict = function(key, value) {
            cov_1v3t5apo9l.f[0]++;
            cov_1v3t5apo9l.s[1]++;
            _main.default._validateParameters('createStringDict', arguments);
            cov_1v3t5apo9l.s[2]++;
            return new _main.default.StringDict(key, value);
          };

          /**
           *
           * Creates a new instance of <a href="#/p5.NumberDict">p5.NumberDict</a> using the key-value pair
           * or object you provide.
           *
           * @method createNumberDict
           * @for p5
           * @param {Number} key
           * @param {Number} value
           * @return {p5.NumberDict}
           *
           * @example
           * <div class="norender">
           * <code>
           * function setup() {
           *   let myDictionary = createNumberDict(100, 42);
           *   print(myDictionary.hasKey(100)); // logs true to console
           *
           *   let anotherDictionary = createNumberDict({ 200: 84 });
           *   print(anotherDictionary.hasKey(200)); // logs true to console
           * }
           * </code></div>
           */
          /**
           * @method createNumberDict
           * @param {Object} object object
           * @return {p5.NumberDict}
           */ cov_1v3t5apo9l.s[3]++;

          _main.default.prototype.createNumberDict = function(key, value) {
            cov_1v3t5apo9l.f[1]++;
            cov_1v3t5apo9l.s[4]++;
            _main.default._validateParameters('createNumberDict', arguments);
            cov_1v3t5apo9l.s[5]++;
            return new _main.default.NumberDict(key, value);
          };

          /**
           *
           * Base class for all p5.Dictionary types. Specifically
           * typed Dictionary classes inherit from this class.
           *
           * @class p5.TypedDict
           * @constructor
           */ cov_1v3t5apo9l.s[6]++;

          _main.default.TypedDict = function(key, value) {
            cov_1v3t5apo9l.f[2]++;
            cov_1v3t5apo9l.s[7]++;
            if (key instanceof Object) {
              cov_1v3t5apo9l.b[0][0]++;
              cov_1v3t5apo9l.s[8]++;
              this.data = key;
            } else {
              cov_1v3t5apo9l.b[0][1]++;
              cov_1v3t5apo9l.s[9]++;
              this.data = {};
              cov_1v3t5apo9l.s[10]++;
              this.data[key] = value;
            }
            cov_1v3t5apo9l.s[11]++;
            return this;
          };

          /**
           * Returns the number of key-value pairs currently stored in the Dictionary.
           *
           * @method size
           * @return {Integer} the number of key-value pairs in the Dictionary
           *
           * @example
           * <div class="norender">
           * <code>
           * function setup() {
           *   let myDictionary = createNumberDict(1, 10);
           *   myDictionary.create(2, 20);
           *   myDictionary.create(3, 30);
           *   print(myDictionary.size()); // logs 3 to the console
           * }
           * </code></div>
           */ cov_1v3t5apo9l.s[12]++;
          _main.default.TypedDict.prototype.size = function() {
            cov_1v3t5apo9l.f[3]++;
            cov_1v3t5apo9l.s[13]++;
            return Object.keys(this.data).length;
          };

          /**
           * Returns true if the given key exists in the Dictionary,
           * otherwise returns false.
           *
           * @method hasKey
           * @param {Number|String} key that you want to look up
           * @return {Boolean} whether that key exists in Dictionary
           *
           * @example
           * <div class="norender">
           * <code>
           * function setup() {
           *   let myDictionary = createStringDict('p5', 'js');
           *   print(myDictionary.hasKey('p5')); // logs true to console
           * }
           * </code></div>
           */ cov_1v3t5apo9l.s[14]++;

          _main.default.TypedDict.prototype.hasKey = function(key) {
            cov_1v3t5apo9l.f[4]++;
            cov_1v3t5apo9l.s[15]++;
            return this.data.hasOwnProperty(key);
          };

          /**
           * Returns the value stored at the given key.
           *
           * @method get
           * @param {Number|String} the key you want to access
           * @return {Number|String} the value stored at that key
           *
           * @example
           * <div class="norender">
           * <code>
           * function setup() {
           *   let myDictionary = createStringDict('p5', 'js');
           *   let myValue = myDictionary.get('p5');
           *   print(myValue === 'js'); // logs true to console
           * }
           * </code></div>
           */ cov_1v3t5apo9l.s[16]++;

          _main.default.TypedDict.prototype.get = function(key) {
            cov_1v3t5apo9l.f[5]++;
            cov_1v3t5apo9l.s[17]++;
            if (this.data.hasOwnProperty(key)) {
              cov_1v3t5apo9l.b[1][0]++;
              cov_1v3t5apo9l.s[18]++;
              return this.data[key];
            } else {
              cov_1v3t5apo9l.b[1][1]++;
              cov_1v3t5apo9l.s[19]++;
              console.log(''.concat(key, ' does not exist in this Dictionary'));
            }
          };

          /**
           * Updates the value associated with the given key in case it already exists
           * in the Dictionary. Otherwise a new key-value pair is added.
           *
           * @method set
           * @param {Number|String} key
           * @param {Number|String} value
           *
           * @example
           * <div class="norender">
           * <code>
           * function setup() {
           *   let myDictionary = createStringDict('p5', 'js');
           *   myDictionary.set('p5', 'JS');
           *   myDictionary.print(); // logs "key: p5 - value: JS" to console
           * }
           * </code></div>
           */ cov_1v3t5apo9l.s[20]++;

          _main.default.TypedDict.prototype.set = function(key, value) {
            cov_1v3t5apo9l.f[6]++;
            cov_1v3t5apo9l.s[21]++;
            if (this._validate(value)) {
              cov_1v3t5apo9l.b[2][0]++;
              cov_1v3t5apo9l.s[22]++;
              this.data[key] = value;
            } else {
              cov_1v3t5apo9l.b[2][1]++;
              cov_1v3t5apo9l.s[23]++;
              console.log('Those values dont work for this dictionary type.');
            }
          };

          /**
           * private helper function to handle the user passing in objects
           * during construction or calls to create()
           */ cov_1v3t5apo9l.s[24]++;

          _main.default.TypedDict.prototype._addObj = function(obj) {
            cov_1v3t5apo9l.f[7]++;
            cov_1v3t5apo9l.s[25]++;
            for (var key in obj) {
              cov_1v3t5apo9l.s[26]++;
              this.set(key, obj[key]);
            }
          };

          /**
           * Creates a new key-value pair in the Dictionary.
           *
           * @method create
           * @param {Number|String} key
           * @param {Number|String} value
           *
           * @example
           * <div class="norender">
           * <code>
           * function setup() {
           *   let myDictionary = createStringDict('p5', 'js');
           *   myDictionary.create('happy', 'coding');
           *   myDictionary.print();
           *   // above logs "key: p5 - value: js, key: happy - value: coding" to console
           * }
           * </code></div>
           */
          /**
           * @method create
           * @param {Object} obj key/value pair
           */ cov_1v3t5apo9l.s[27]++;

          _main.default.TypedDict.prototype.create = function(key, value) {
            cov_1v3t5apo9l.f[8]++;
            cov_1v3t5apo9l.s[28]++;
            if (
              (cov_1v3t5apo9l.b[4][0]++, key instanceof Object) &&
              (cov_1v3t5apo9l.b[4][1]++, typeof value === 'undefined')
            ) {
              cov_1v3t5apo9l.b[3][0]++;
              cov_1v3t5apo9l.s[29]++;
              this._addObj(key);
            } else {
              cov_1v3t5apo9l.b[3][1]++;
              cov_1v3t5apo9l.s[30]++;
              if (typeof key !== 'undefined') {
                cov_1v3t5apo9l.b[5][0]++;
                cov_1v3t5apo9l.s[31]++;
                this.set(key, value);
              } else {
                cov_1v3t5apo9l.b[5][1]++;
                cov_1v3t5apo9l.s[32]++;
                console.log(
                  'In order to create a new Dictionary entry you must pass ' +
                    'an object or a key, value pair'
                );
              }
            }
          };

          /**
           * Removes all previously stored key-value pairs from the Dictionary.
           *
           * @method clear
           * @example
           * <div class="norender">
           * <code>
           * function setup() {
           *   let myDictionary = createStringDict('p5', 'js');
           *   print(myDictionary.hasKey('p5')); // prints 'true'
           *   myDictionary.clear();
           *   print(myDictionary.hasKey('p5')); // prints 'false'
           * }
           * </code>
           * </div>
           */ cov_1v3t5apo9l.s[33]++;

          _main.default.TypedDict.prototype.clear = function() {
            cov_1v3t5apo9l.f[9]++;
            cov_1v3t5apo9l.s[34]++;
            this.data = {};
          };

          /**
           * Removes the key-value pair stored at the given key from the Dictionary.
           *
           * @method remove
           * @param {Number|String} key for the pair to remove
           *
           * @example
           * <div class="norender">
           * <code>
           * function setup() {
           *   let myDictionary = createStringDict('p5', 'js');
           *   myDictionary.create('happy', 'coding');
           *   myDictionary.print();
           *   // above logs "key: p5 - value: js, key: happy - value: coding" to console
           *   myDictionary.remove('p5');
           *   myDictionary.print();
           *   // above logs "key: happy value: coding" to console
           * }
           * </code></div>
           */ cov_1v3t5apo9l.s[35]++;

          _main.default.TypedDict.prototype.remove = function(key) {
            cov_1v3t5apo9l.f[10]++;
            cov_1v3t5apo9l.s[36]++;
            if (this.data.hasOwnProperty(key)) {
              cov_1v3t5apo9l.b[6][0]++;
              cov_1v3t5apo9l.s[37]++;
              delete this.data[key];
            } else {
              cov_1v3t5apo9l.b[6][1]++;
              cov_1v3t5apo9l.s[38]++;
              throw new Error(''.concat(key, ' does not exist in this Dictionary'));
            }
          };

          /**
           * Logs the set of items currently stored in the Dictionary to the console.
           *
           * @method print
           *
           * @example
           * <div class="norender">
           * <code>
           * function setup() {
           *   let myDictionary = createStringDict('p5', 'js');
           *   myDictionary.create('happy', 'coding');
           *   myDictionary.print();
           *   // above logs "key: p5 - value: js, key: happy - value: coding" to console
           * }
           * </code>
           * </div>
           */ cov_1v3t5apo9l.s[39]++;

          _main.default.TypedDict.prototype.print = function() {
            cov_1v3t5apo9l.f[11]++;
            cov_1v3t5apo9l.s[40]++;
            for (var item in this.data) {
              cov_1v3t5apo9l.s[41]++;
              console.log('key:'.concat(item, ' value:').concat(this.data[item]));
            }
          };

          /**
           * Converts the Dictionary into a CSV file for local download.
           *
           * @method saveTable
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 100);
           *   background(200);
           *   text('click here to save', 10, 10, 70, 80);
           * }
           *
           * function mousePressed() {
           *   if (mouseX > 0 && mouseX < width && mouseY > 0 && mouseY < height) {
           *     createStringDict({
           *       john: 1940,
           *       paul: 1942,
           *       george: 1943,
           *       ringo: 1940
           *     }).saveTable('beatles');
           *   }
           * }
           * </code>
           * </div>
           */ cov_1v3t5apo9l.s[42]++;

          _main.default.TypedDict.prototype.saveTable = function(filename) {
            cov_1v3t5apo9l.f[12]++;
            var output = (cov_1v3t5apo9l.s[43]++, '');
            cov_1v3t5apo9l.s[44]++;

            for (var key in this.data) {
              cov_1v3t5apo9l.s[45]++;
              output += ''.concat(key, ',').concat(this.data[key], '\n');
            }

            var blob = (cov_1v3t5apo9l.s[46]++, new Blob([output], { type: 'text/csv' }));
            cov_1v3t5apo9l.s[47]++;
            _main.default.prototype.downloadFile(
              blob,
              (cov_1v3t5apo9l.b[7][0]++, filename) || (cov_1v3t5apo9l.b[7][1]++, 'mycsv'),
              'csv'
            );
          };

          /**
           * Converts the Dictionary into a JSON file for local download.
           *
           * @method saveJSON
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 100);
           *   background(200);
           *   text('click here to save', 10, 10, 70, 80);
           * }
           *
           * function mousePressed() {
           *   if (mouseX > 0 && mouseX < width && mouseY > 0 && mouseY < height) {
           *     createStringDict({
           *       john: 1940,
           *       paul: 1942,
           *       george: 1943,
           *       ringo: 1940
           *     }).saveJSON('beatles');
           *   }
           * }
           * </code>
           * </div>
           */ cov_1v3t5apo9l.s[48]++;

          _main.default.TypedDict.prototype.saveJSON = function(filename, opt) {
            cov_1v3t5apo9l.f[13]++;
            cov_1v3t5apo9l.s[49]++;
            _main.default.prototype.saveJSON(this.data, filename, opt);
          };

          /**
           * private helper function to ensure that the user passed in valid
           * values for the Dictionary type
           */ cov_1v3t5apo9l.s[50]++;

          _main.default.TypedDict.prototype._validate = function(value) {
            cov_1v3t5apo9l.f[14]++;
            cov_1v3t5apo9l.s[51]++;
            return true;
          };

          /**
           *
           * A simple Dictionary class for Strings.
           *
           * @class p5.StringDict
           * @extends p5.TypedDict
           */ cov_1v3t5apo9l.s[52]++;

          _main.default.StringDict = function() {
            cov_1v3t5apo9l.f[15]++;
            cov_1v3t5apo9l.s[53]++;
            for (
              var _len = arguments.length, args = new Array(_len), _key = 0;
              _key < _len;
              _key++
            ) {
              args[_key] = arguments[_key];
            }
            _main.default.TypedDict.apply(this, args);
          };
          cov_1v3t5apo9l.s[54]++;

          _main.default.StringDict.prototype = Object.create(
            _main.default.TypedDict.prototype
          );
          cov_1v3t5apo9l.s[55]++;

          _main.default.StringDict.prototype._validate = function(value) {
            cov_1v3t5apo9l.f[16]++;
            cov_1v3t5apo9l.s[56]++;
            return typeof value === 'string';
          };

          /**
           *
           * A simple Dictionary class for Numbers.
           *
           * @class p5.NumberDict
           * @constructor
           * @extends p5.TypedDict
           */ cov_1v3t5apo9l.s[57]++;

          _main.default.NumberDict = function() {
            cov_1v3t5apo9l.f[17]++;
            cov_1v3t5apo9l.s[58]++;
            for (
              var _len2 = arguments.length, args = new Array(_len2), _key2 = 0;
              _key2 < _len2;
              _key2++
            ) {
              args[_key2] = arguments[_key2];
            }
            _main.default.TypedDict.apply(this, args);
          };
          cov_1v3t5apo9l.s[59]++;

          _main.default.NumberDict.prototype = Object.create(
            _main.default.TypedDict.prototype
          );

          /**
           * private helper function to ensure that the user passed in valid
           * values for the Dictionary type
           */ cov_1v3t5apo9l.s[60]++;

          _main.default.NumberDict.prototype._validate = function(value) {
            cov_1v3t5apo9l.f[18]++;
            cov_1v3t5apo9l.s[61]++;
            return typeof value === 'number';
          };

          /**
           * Add the given number to the value currently stored at the given key.
           * The sum then replaces the value previously stored in the Dictionary.
           *
           * @method add
           * @param {Number} Key for the value you wish to add to
           * @param {Number} Number to add to the value
           * @example
           * <div class='norender'>
           * <code>
           * function setup() {
           *   let myDictionary = createNumberDict(2, 5);
           *   myDictionary.add(2, 2);
           *   print(myDictionary.get(2)); // logs 7 to console.
           * }
           * </code></div>
           *
           */ cov_1v3t5apo9l.s[62]++;

          _main.default.NumberDict.prototype.add = function(key, amount) {
            cov_1v3t5apo9l.f[19]++;
            cov_1v3t5apo9l.s[63]++;
            if (this.data.hasOwnProperty(key)) {
              cov_1v3t5apo9l.b[8][0]++;
              cov_1v3t5apo9l.s[64]++;
              this.data[key] += amount;
            } else {
              cov_1v3t5apo9l.b[8][1]++;
              cov_1v3t5apo9l.s[65]++;
              console.log('The key - '.concat(key, ' does not exist in this dictionary.'));
            }
          };

          /**
           * Subtract the given number from the value currently stored at the given key.
           * The difference then replaces the value previously stored in the Dictionary.
           *
           * @method sub
           * @param {Number} Key for the value you wish to subtract from
           * @param {Number} Number to subtract from the value
           * @example
           * <div class='norender'>
           * <code>
           * function setup() {
           *   let myDictionary = createNumberDict(2, 5);
           *   myDictionary.sub(2, 2);
           *   print(myDictionary.get(2)); // logs 3 to console.
           * }
           * </code></div>
           *
           */ cov_1v3t5apo9l.s[66]++;

          _main.default.NumberDict.prototype.sub = function(key, amount) {
            cov_1v3t5apo9l.f[20]++;
            cov_1v3t5apo9l.s[67]++;
            this.add(key, -amount);
          };

          /**
           * Multiply the given number with the value currently stored at the given key.
           * The product then replaces the value previously stored in the Dictionary.
           *
           * @method mult
           * @param {Number} Key for value you wish to multiply
           * @param {Number} Amount to multiply the value by
           * @example
           * <div class='norender'>
           * <code>
           * function setup() {
           *   let myDictionary = createNumberDict(2, 4);
           *   myDictionary.mult(2, 2);
           *   print(myDictionary.get(2)); // logs 8 to console.
           * }
           * </code></div>
           *
           */ cov_1v3t5apo9l.s[68]++;

          _main.default.NumberDict.prototype.mult = function(key, amount) {
            cov_1v3t5apo9l.f[21]++;
            cov_1v3t5apo9l.s[69]++;
            if (this.data.hasOwnProperty(key)) {
              cov_1v3t5apo9l.b[9][0]++;
              cov_1v3t5apo9l.s[70]++;
              this.data[key] *= amount;
            } else {
              cov_1v3t5apo9l.b[9][1]++;
              cov_1v3t5apo9l.s[71]++;
              console.log('The key - '.concat(key, ' does not exist in this dictionary.'));
            }
          };

          /**
           * Divide the given number with the value currently stored at the given key.
           * The quotient then replaces the value previously stored in the Dictionary.
           *
           * @method div
           * @param {Number} Key for value you wish to divide
           * @param {Number} Amount to divide the value by
           * @example
           * <div class='norender'>
           * <code>
           * function setup() {
           *   let myDictionary = createNumberDict(2, 8);
           *   myDictionary.div(2, 2);
           *   print(myDictionary.get(2)); // logs 4 to console.
           * }
           * </code></div>
           *
           */ cov_1v3t5apo9l.s[72]++;

          _main.default.NumberDict.prototype.div = function(key, amount) {
            cov_1v3t5apo9l.f[22]++;
            cov_1v3t5apo9l.s[73]++;
            if (this.data.hasOwnProperty(key)) {
              cov_1v3t5apo9l.b[10][0]++;
              cov_1v3t5apo9l.s[74]++;
              this.data[key] /= amount;
            } else {
              cov_1v3t5apo9l.b[10][1]++;
              cov_1v3t5apo9l.s[75]++;
              console.log('The key - '.concat(key, ' does not exist in this dictionary.'));
            }
          };

          /**
           * private helper function for finding lowest or highest value
           * the argument 'flip' is used to flip the comparison arrow
           * from 'less than' to 'greater than'
           */ cov_1v3t5apo9l.s[76]++;

          _main.default.NumberDict.prototype._valueTest = function(flip) {
            cov_1v3t5apo9l.f[23]++;
            cov_1v3t5apo9l.s[77]++;
            if (Object.keys(this.data).length === 0) {
              cov_1v3t5apo9l.b[11][0]++;
              cov_1v3t5apo9l.s[78]++;
              throw new Error(
                'Unable to search for a minimum or maximum value on an empty NumberDict'
              );
            } else {
              cov_1v3t5apo9l.b[11][1]++;
              cov_1v3t5apo9l.s[79]++;
              if (Object.keys(this.data).length === 1) {
                cov_1v3t5apo9l.b[12][0]++;
                cov_1v3t5apo9l.s[80]++;
                return this.data[Object.keys(this.data)[0]];
              } else {
                cov_1v3t5apo9l.b[12][1]++;
                var result = (cov_1v3t5apo9l.s[81]++, this.data[Object.keys(this.data)[0]]);
                cov_1v3t5apo9l.s[82]++;
                for (var key in this.data) {
                  cov_1v3t5apo9l.s[83]++;
                  if (this.data[key] * flip < result * flip) {
                    cov_1v3t5apo9l.b[13][0]++;
                    cov_1v3t5apo9l.s[84]++;
                    result = this.data[key];
                  } else {
                    cov_1v3t5apo9l.b[13][1]++;
                  }
                }
                cov_1v3t5apo9l.s[85]++;
                return result;
              }
            }
          };

          /**
           * Return the lowest number currently stored in the Dictionary.
           *
           * @method minValue
           * @return {Number}
           * @example
           * <div class='norender'>
           * <code>
           * function setup() {
           *   let myDictionary = createNumberDict({ 2: -10, 4: 0.65, 1.2: 3 });
           *   let lowestValue = myDictionary.minValue(); // value is -10
           *   print(lowestValue);
           * }
           * </code></div>
           */ cov_1v3t5apo9l.s[86]++;

          _main.default.NumberDict.prototype.minValue = function() {
            cov_1v3t5apo9l.f[24]++;
            cov_1v3t5apo9l.s[87]++;
            return this._valueTest(1);
          };

          /**
           * Return the highest number currently stored in the Dictionary.
           *
           * @method maxValue
           * @return {Number}
           * @example
           * <div class='norender'>
           * <code>
           * function setup() {
           *   let myDictionary = createNumberDict({ 2: -10, 4: 0.65, 1.2: 3 });
           *   let highestValue = myDictionary.maxValue(); // value is 3
           *   print(highestValue);
           * }
           * </code></div>
           */ cov_1v3t5apo9l.s[88]++;

          _main.default.NumberDict.prototype.maxValue = function() {
            cov_1v3t5apo9l.f[25]++;
            cov_1v3t5apo9l.s[89]++;
            return this._valueTest(-1);
          };

          /**
           * private helper function for finding lowest or highest key
           * the argument 'flip' is used to flip the comparison arrow
           * from 'less than' to 'greater than'
           */ cov_1v3t5apo9l.s[90]++;

          _main.default.NumberDict.prototype._keyTest = function(flip) {
            cov_1v3t5apo9l.f[26]++;
            cov_1v3t5apo9l.s[91]++;
            if (Object.keys(this.data).length === 0) {
              cov_1v3t5apo9l.b[14][0]++;
              cov_1v3t5apo9l.s[92]++;
              throw new Error('Unable to use minValue on an empty NumberDict');
            } else {
              cov_1v3t5apo9l.b[14][1]++;
              cov_1v3t5apo9l.s[93]++;
              if (Object.keys(this.data).length === 1) {
                cov_1v3t5apo9l.b[15][0]++;
                cov_1v3t5apo9l.s[94]++;
                return Object.keys(this.data)[0];
              } else {
                cov_1v3t5apo9l.b[15][1]++;
                var result = (cov_1v3t5apo9l.s[95]++, Object.keys(this.data)[0]);
                cov_1v3t5apo9l.s[96]++;
                for (
                  var i = (cov_1v3t5apo9l.s[97]++, 1);
                  i < Object.keys(this.data).length;
                  i++
                ) {
                  cov_1v3t5apo9l.s[98]++;
                  if (Object.keys(this.data)[i] * flip < result * flip) {
                    cov_1v3t5apo9l.b[16][0]++;
                    cov_1v3t5apo9l.s[99]++;
                    result = Object.keys(this.data)[i];
                  } else {
                    cov_1v3t5apo9l.b[16][1]++;
                  }
                }
                cov_1v3t5apo9l.s[100]++;
                return result;
              }
            }
          };

          /**
           * Return the lowest key currently used in the Dictionary.
           *
           * @method minKey
           * @return {Number}
           * @example
           * <div class='norender'>
           * <code>
           * function setup() {
           *   let myDictionary = createNumberDict({ 2: 4, 4: 6, 1.2: 3 });
           *   let lowestKey = myDictionary.minKey(); // value is 1.2
           *   print(lowestKey);
           * }
           * </code></div>
           */ cov_1v3t5apo9l.s[101]++;

          _main.default.NumberDict.prototype.minKey = function() {
            cov_1v3t5apo9l.f[27]++;
            cov_1v3t5apo9l.s[102]++;
            return this._keyTest(1);
          };

          /**
           * Return the highest key currently used in the Dictionary.
           *
           * @method maxKey
           * @return {Number}
           * @example
           * <div class='norender'>
           * <code>
           * function setup() {
           *   let myDictionary = createNumberDict({ 2: 4, 4: 6, 1.2: 3 });
           *   let highestKey = myDictionary.maxKey(); // value is 4
           *   print(highestKey);
           * }
           * </code></div>
           */ cov_1v3t5apo9l.s[103]++;

          _main.default.NumberDict.prototype.maxKey = function() {
            cov_1v3t5apo9l.f[28]++;
            cov_1v3t5apo9l.s[104]++;
            return this._keyTest(-1);
          };
          var _default = _main.default.TypedDict;
          exports.default = _default;
        },
        {
          '../core/main': 283,
          'core-js/modules/es.array.concat': 166,
          'core-js/modules/es.object.keys': 191,
          'core-js/modules/es.string.sub': 207
        }
      ],
      299: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_8ak35vatu = (function() {
            var path = '/Users/outofambit/src/p5.js/src/dom/dom.js';
            var hash = '34729af49ebd70fb00d50916175b38e037affd3d';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/dom/dom.js',
              statementMap: {
                '0': { start: { line: 57, column: 0 }, end: { line: 66, column: 2 } },
                '1': { start: { line: 58, column: 2 }, end: { line: 58, column: 46 } },
                '2': { start: { line: 59, column: 20 }, end: { line: 59, column: 41 } },
                '3': { start: { line: 60, column: 14 }, end: { line: 60, column: 40 } },
                '4': { start: { line: 61, column: 2 }, end: { line: 65, column: 3 } },
                '5': { start: { line: 62, column: 4 }, end: { line: 62, column: 34 } },
                '6': { start: { line: 64, column: 4 }, end: { line: 64, column: 16 } },
                '7': { start: { line: 113, column: 0 }, end: { line: 125, column: 2 } },
                '8': { start: { line: 114, column: 2 }, end: { line: 114, column: 49 } },
                '9': { start: { line: 115, column: 14 }, end: { line: 115, column: 16 } },
                '10': { start: { line: 116, column: 20 }, end: { line: 116, column: 41 } },
                '11': { start: { line: 117, column: 14 }, end: { line: 117, column: 43 } },
                '12': { start: { line: 118, column: 2 }, end: { line: 123, column: 3 } },
                '13': { start: { line: 119, column: 4 }, end: { line: 122, column: 5 } },
                '14': { start: { line: 119, column: 17 }, end: { line: 119, column: 18 } },
                '15': { start: { line: 120, column: 18 }, end: { line: 120, column: 43 } },
                '16': { start: { line: 121, column: 6 }, end: { line: 121, column: 20 } },
                '17': { start: { line: 124, column: 2 }, end: { line: 124, column: 13 } },
                '18': { start: { line: 130, column: 0 }, end: { line: 140, column: 2 } },
                '19': { start: { line: 131, column: 18 }, end: { line: 131, column: 26 } },
                '20': { start: { line: 132, column: 2 }, end: { line: 138, column: 3 } },
                '21': { start: { line: 133, column: 4 }, end: { line: 133, column: 54 } },
                '22': { start: { line: 134, column: 9 }, end: { line: 138, column: 3 } },
                '23': { start: { line: 135, column: 4 }, end: { line: 135, column: 22 } },
                '24': { start: { line: 136, column: 9 }, end: { line: 138, column: 3 } },
                '25': { start: { line: 137, column: 4 }, end: { line: 137, column: 18 } },
                '26': { start: { line: 139, column: 2 }, end: { line: 139, column: 19 } },
                '27': { start: { line: 145, column: 0 }, end: { line: 174, column: 2 } },
                '28': { start: { line: 146, column: 19 }, end: { line: 146, column: 59 } },
                '29': { start: { line: 147, column: 2 }, end: { line: 173, column: 3 } },
                '30': { start: { line: 148, column: 20 }, end: { line: 148, column: 45 } },
                '31': { start: { line: 149, column: 4 }, end: { line: 158, column: 6 } },
                '32': { start: { line: 150, column: 6 }, end: { line: 156, column: 7 } },
                '33': { start: { line: 151, column: 8 }, end: { line: 151, column: 32 } },
                '34': { start: { line: 152, column: 13 }, end: { line: 156, column: 7 } },
                '35': { start: { line: 153, column: 8 }, end: { line: 153, column: 32 } },
                '36': { start: { line: 155, column: 8 }, end: { line: 155, column: 33 } },
                '37': { start: { line: 157, column: 6 }, end: { line: 157, column: 18 } },
                '38': { start: { line: 159, column: 4 }, end: { line: 159, column: 21 } },
                '39': { start: { line: 160, column: 9 }, end: { line: 173, column: 3 } },
                '40': { start: { line: 161, column: 4 }, end: { line: 161, column: 42 } },
                '41': { start: { line: 162, column: 9 }, end: { line: 173, column: 3 } },
                '42': { start: { line: 163, column: 4 }, end: { line: 163, column: 56 } },
                '43': { start: { line: 164, column: 9 }, end: { line: 173, column: 3 } },
                '44': { start: { line: 167, column: 6 }, end: { line: 167, column: 60 } },
                '45': { start: { line: 170, column: 4 }, end: { line: 170, column: 55 } },
                '46': { start: { line: 172, column: 4 }, end: { line: 172, column: 37 } },
                '47': { start: { line: 196, column: 0 }, end: { line: 202, column: 2 } },
                '48': { start: { line: 197, column: 2 }, end: { line: 197, column: 54 } },
                '49': { start: { line: 199, column: 29 }, end: { line: 199, column: 73 } },
                '50': { start: { line: 199, column: 35 }, end: { line: 199, column: 73 } },
                '51': { start: { line: 200, column: 29 }, end: { line: 200, column: 70 } },
                '52': { start: { line: 201, column: 2 }, end: { line: 201, column: 44 } },
                '53': { start: { line: 201, column: 31 }, end: { line: 201, column: 42 } },
                '54': { start: { line: 266, column: 0 }, end: { line: 269, column: 2 } },
                '55': { start: { line: 267, column: 2 }, end: { line: 267, column: 50 } },
                '56': { start: { line: 268, column: 2 }, end: { line: 268, column: 14 } },
                '57': { start: { line: 304, column: 0 }, end: { line: 307, column: 2 } },
                '58': { start: { line: 305, column: 2 }, end: { line: 305, column: 49 } },
                '59': { start: { line: 306, column: 2 }, end: { line: 306, column: 14 } },
                '60': { start: { line: 313, column: 15 }, end: { line: 313, column: 64 } },
                '61': { start: { line: 314, column: 2 }, end: { line: 314, column: 24 } },
                '62': { start: { line: 315, column: 12 }, end: { line: 317, column: 32 } },
                '63': { start: { line: 318, column: 2 }, end: { line: 318, column: 26 } },
                '64': { start: { line: 319, column: 2 }, end: { line: 319, column: 11 } },
                '65': { start: { line: 335, column: 0 }, end: { line: 339, column: 2 } },
                '66': { start: { line: 336, column: 12 }, end: { line: 336, column: 41 } },
                '67': { start: { line: 337, column: 2 }, end: { line: 337, column: 23 } },
                '68': { start: { line: 338, column: 2 }, end: { line: 338, column: 31 } },
                '69': { start: { line: 355, column: 0 }, end: { line: 359, column: 2 } },
                '70': { start: { line: 356, column: 12 }, end: { line: 356, column: 39 } },
                '71': { start: { line: 357, column: 2 }, end: { line: 357, column: 23 } },
                '72': { start: { line: 358, column: 2 }, end: { line: 358, column: 31 } },
                '73': { start: { line: 373, column: 0 }, end: { line: 377, column: 2 } },
                '74': { start: { line: 374, column: 12 }, end: { line: 374, column: 42 } },
                '75': { start: { line: 375, column: 2 }, end: { line: 375, column: 23 } },
                '76': { start: { line: 376, column: 2 }, end: { line: 376, column: 31 } },
                '77': { start: { line: 404, column: 0 }, end: { line: 424, column: 2 } },
                '78': { start: { line: 405, column: 2 }, end: { line: 405, column: 49 } },
                '79': { start: { line: 406, column: 14 }, end: { line: 406, column: 43 } },
                '80': { start: { line: 407, column: 15 }, end: { line: 407, column: 24 } },
                '81': { start: { line: 409, column: 2 }, end: { line: 411, column: 3 } },
                '82': { start: { line: 410, column: 4 }, end: { line: 410, column: 22 } },
                '83': { start: { line: 412, column: 2 }, end: { line: 414, column: 3 } },
                '84': { start: { line: 413, column: 4 }, end: { line: 413, column: 30 } },
                '85': { start: { line: 415, column: 2 }, end: { line: 415, column: 20 } },
                '86': { start: { line: 416, column: 2 }, end: { line: 416, column: 31 } },
                '87': { start: { line: 417, column: 2 }, end: { line: 422, column: 5 } },
                '88': { start: { line: 418, column: 4 }, end: { line: 418, column: 46 } },
                '89': { start: { line: 419, column: 4 }, end: { line: 419, column: 49 } },
                '90': { start: { line: 420, column: 17 }, end: { line: 420, column: 38 } },
                '91': { start: { line: 421, column: 4 }, end: { line: 421, column: 47 } },
                '92': { start: { line: 421, column: 36 }, end: { line: 421, column: 47 } },
                '93': { start: { line: 423, column: 2 }, end: { line: 423, column: 14 } },
                '94': { start: { line: 441, column: 0 }, end: { line: 448, column: 2 } },
                '95': { start: { line: 442, column: 2 }, end: { line: 442, column: 47 } },
                '96': { start: { line: 443, column: 14 }, end: { line: 443, column: 41 } },
                '97': { start: { line: 444, column: 2 }, end: { line: 444, column: 18 } },
                '98': { start: { line: 445, column: 2 }, end: { line: 445, column: 23 } },
                '99': { start: { line: 446, column: 2 }, end: { line: 446, column: 34 } },
                '100': { start: { line: 446, column: 14 }, end: { line: 446, column: 34 } },
                '101': { start: { line: 447, column: 2 }, end: { line: 447, column: 31 } },
                '102': { start: { line: 492, column: 0 }, end: { line: 505, column: 2 } },
                '103': { start: { line: 493, column: 2 }, end: { line: 493, column: 52 } },
                '104': { start: { line: 494, column: 14 }, end: { line: 494, column: 45 } },
                '105': { start: { line: 495, column: 2 }, end: { line: 495, column: 21 } },
                '106': { start: { line: 496, column: 2 }, end: { line: 496, column: 16 } },
                '107': { start: { line: 497, column: 2 }, end: { line: 497, column: 16 } },
                '108': { start: { line: 498, column: 2 }, end: { line: 502, column: 3 } },
                '109': { start: { line: 499, column: 4 }, end: { line: 499, column: 36 } },
                '110': { start: { line: 500, column: 9 }, end: { line: 502, column: 3 } },
                '111': { start: { line: 501, column: 4 }, end: { line: 501, column: 20 } },
                '112': { start: { line: 503, column: 2 }, end: { line: 503, column: 51 } },
                '113': { start: { line: 503, column: 33 }, end: { line: 503, column: 51 } },
                '114': { start: { line: 504, column: 2 }, end: { line: 504, column: 31 } },
                '115': { start: { line: 533, column: 0 }, end: { line: 539, column: 2 } },
                '116': { start: { line: 534, column: 2 }, end: { line: 534, column: 52 } },
                '117': { start: { line: 535, column: 14 }, end: { line: 535, column: 46 } },
                '118': { start: { line: 536, column: 2 }, end: { line: 536, column: 24 } },
                '119': { start: { line: 537, column: 2 }, end: { line: 537, column: 31 } },
                '120': { start: { line: 537, column: 13 }, end: { line: 537, column: 31 } },
                '121': { start: { line: 538, column: 2 }, end: { line: 538, column: 31 } },
                '122': { start: { line: 567, column: 0 }, end: { line: 607, column: 2 } },
                '123': { start: { line: 568, column: 2 }, end: { line: 568, column: 54 } },
                '124': { start: { line: 569, column: 14 }, end: { line: 569, column: 43 } },
                '125': { start: { line: 570, column: 19 }, end: { line: 570, column: 50 } },
                '126': { start: { line: 571, column: 2 }, end: { line: 571, column: 29 } },
                '127': { start: { line: 572, column: 2 }, end: { line: 572, column: 28 } },
                '128': { start: { line: 574, column: 15 }, end: { line: 574, column: 36 } },
                '129': { start: { line: 575, column: 2 }, end: { line: 587, column: 4 } },
                '130': { start: { line: 576, column: 15 }, end: { line: 576, column: 56 } },
                '131': { start: { line: 577, column: 4 }, end: { line: 585, column: 5 } },
                '132': { start: { line: 578, column: 6 }, end: { line: 584, column: 7 } },
                '133': { start: { line: 579, column: 8 }, end: { line: 579, column: 26 } },
                '134': { start: { line: 580, column: 13 }, end: { line: 584, column: 7 } },
                '135': { start: { line: 581, column: 8 }, end: { line: 581, column: 26 } },
                '136': { start: { line: 583, column: 8 }, end: { line: 583, column: 27 } },
                '137': { start: { line: 586, column: 4 }, end: { line: 586, column: 16 } },
                '138': { start: { line: 588, column: 2 }, end: { line: 591, column: 4 } },
                '139': { start: { line: 589, column: 4 }, end: { line: 589, column: 21 } },
                '140': { start: { line: 590, column: 4 }, end: { line: 590, column: 16 } },
                '141': { start: { line: 592, column: 2 }, end: { line: 602, column: 3 } },
                '142': { start: { line: 593, column: 16 }, end: { line: 595, column: 15 } },
                '143': { start: { line: 596, column: 18 }, end: { line: 596, column: 49 } },
                '144': { start: { line: 597, column: 4 }, end: { line: 597, column: 37 } },
                '145': { start: { line: 598, column: 4 }, end: { line: 598, column: 24 } },
                '146': { start: { line: 599, column: 4 }, end: { line: 599, column: 29 } },
                '147': { start: { line: 600, column: 4 }, end: { line: 600, column: 61 } },
                '148': { start: { line: 601, column: 4 }, end: { line: 601, column: 27 } },
                '149': { start: { line: 603, column: 2 }, end: { line: 605, column: 3 } },
                '150': { start: { line: 604, column: 4 }, end: { line: 604, column: 28 } },
                '151': { start: { line: 606, column: 2 }, end: { line: 606, column: 14 } },
                '152': { start: { line: 666, column: 0 }, end: { line: 755, column: 2 } },
                '153': { start: { line: 667, column: 2 }, end: { line: 667, column: 52 } },
                '154': { start: { line: 669, column: 12 }, end: { line: 669, column: 24 } },
                '155': { start: { line: 670, column: 2 }, end: { line: 684, column: 3 } },
                '156': { start: { line: 672, column: 4 }, end: { line: 672, column: 15 } },
                '157': { start: { line: 673, column: 4 }, end: { line: 673, column: 23 } },
                '158': { start: { line: 674, column: 9 }, end: { line: 684, column: 3 } },
                '159': { start: { line: 675, column: 4 }, end: { line: 675, column: 33 } },
                '160': { start: { line: 676, column: 4 }, end: { line: 676, column: 19 } },
                '161': { start: { line: 678, column: 16 }, end: { line: 678, column: 48 } },
                '162': { start: { line: 679, column: 4 }, end: { line: 681, column: 5 } },
                '163': { start: { line: 680, column: 6 }, end: { line: 680, column: 43 } },
                '164': { start: { line: 682, column: 4 }, end: { line: 682, column: 33 } },
                '165': { start: { line: 683, column: 4 }, end: { line: 683, column: 19 } },
                '166': { start: { line: 685, column: 2 }, end: { line: 716, column: 4 } },
                '167': { start: { line: 689, column: 4 }, end: { line: 691, column: 5 } },
                '168': { start: { line: 690, column: 6 }, end: { line: 690, column: 13 } },
                '169': { start: { line: 693, column: 4 }, end: { line: 698, column: 5 } },
                '170': { start: { line: 693, column: 17 }, end: { line: 693, column: 18 } },
                '171': { start: { line: 694, column: 6 }, end: { line: 697, column: 7 } },
                '172': { start: { line: 695, column: 8 }, end: { line: 695, column: 18 } },
                '173': { start: { line: 696, column: 8 }, end: { line: 696, column: 14 } },
                '174': { start: { line: 700, column: 4 }, end: { line: 715, column: 5 } },
                '175': { start: { line: 702, column: 6 }, end: { line: 707, column: 7 } },
                '176': { start: { line: 703, column: 8 }, end: { line: 703, column: 31 } },
                '177': { start: { line: 706, column: 8 }, end: { line: 706, column: 38 } },
                '178': { start: { line: 710, column: 18 }, end: { line: 710, column: 50 } },
                '179': { start: { line: 711, column: 6 }, end: { line: 711, column: 27 } },
                '180': { start: { line: 712, column: 6 }, end: { line: 712, column: 53 } },
                '181': { start: { line: 713, column: 6 }, end: { line: 713, column: 32 } },
                '182': { start: { line: 714, column: 6 }, end: { line: 714, column: 38 } },
                '183': { start: { line: 718, column: 2 }, end: { line: 738, column: 4 } },
                '184': { start: { line: 720, column: 4 }, end: { line: 737, column: 5 } },
                '185': { start: { line: 721, column: 6 }, end: { line: 725, column: 7 } },
                '186': { start: { line: 721, column: 19 }, end: { line: 721, column: 20 } },
                '187': { start: { line: 722, column: 8 }, end: { line: 724, column: 9 } },
                '188': { start: { line: 723, column: 10 }, end: { line: 723, column: 37 } },
                '189': { start: { line: 726, column: 6 }, end: { line: 726, column: 18 } },
                '190': { start: { line: 728, column: 6 }, end: { line: 736, column: 7 } },
                '191': { start: { line: 729, column: 18 }, end: { line: 729, column: 20 } },
                '192': { start: { line: 730, column: 8 }, end: { line: 732, column: 9 } },
                '193': { start: { line: 731, column: 10 }, end: { line: 731, column: 41 } },
                '194': { start: { line: 733, column: 8 }, end: { line: 733, column: 19 } },
                '195': { start: { line: 735, column: 8 }, end: { line: 735, column: 30 } },
                '196': { start: { line: 740, column: 2 }, end: { line: 752, column: 4 } },
                '197': { start: { line: 741, column: 4 }, end: { line: 750, column: 5 } },
                '198': { start: { line: 742, column: 6 }, end: { line: 747, column: 7 } },
                '199': { start: { line: 742, column: 19 }, end: { line: 742, column: 20 } },
                '200': { start: { line: 743, column: 8 }, end: { line: 746, column: 9 } },
                '201': { start: { line: 744, column: 10 }, end: { line: 744, column: 38 } },
                '202': { start: { line: 745, column: 10 }, end: { line: 745, column: 39 } },
                '203': { start: { line: 749, column: 6 }, end: { line: 749, column: 31 } },
                '204': { start: { line: 751, column: 4 }, end: { line: 751, column: 16 } },
                '205': { start: { line: 754, column: 2 }, end: { line: 754, column: 14 } },
                '206': { start: { line: 824, column: 0 }, end: { line: 933, column: 2 } },
                '207': { start: { line: 831, column: 15 }, end: { line: 831, column: 27 } },
                '208': { start: { line: 833, column: 2 }, end: { line: 839, column: 3 } },
                '209': { start: { line: 834, column: 4 }, end: { line: 834, column: 24 } },
                '210': { start: { line: 835, column: 4 }, end: { line: 835, column: 62 } },
                '211': { start: { line: 835, column: 42 }, end: { line: 835, column: 62 } },
                '212': { start: { line: 837, column: 4 }, end: { line: 837, column: 46 } },
                '213': { start: { line: 837, column: 34 }, end: { line: 837, column: 46 } },
                '214': { start: { line: 838, column: 4 }, end: { line: 838, column: 49 } },
                '215': { start: { line: 840, column: 2 }, end: { line: 840, column: 26 } },
                '216': { start: { line: 841, column: 13 }, end: { line: 841, column: 43 } },
                '217': { start: { line: 842, column: 2 }, end: { line: 842, column: 37 } },
                '218': { start: { line: 845, column: 23 }, end: { line: 846, column: 57 } },
                '219': { start: { line: 846, column: 4 }, end: { line: 846, column: 57 } },
                '220': { start: { line: 847, column: 22 }, end: { line: 847, column: 77 } },
                '221': { start: { line: 847, column: 28 }, end: { line: 847, column: 77 } },
                '222': { start: { line: 849, column: 2 }, end: { line: 851, column: 4 } },
                '223': { start: { line: 850, column: 4 }, end: { line: 850, column: 62 } },
                '224': { start: { line: 853, column: 2 }, end: { line: 883, column: 4 } },
                '225': { start: { line: 856, column: 4 }, end: { line: 861, column: 5 } },
                '226': { start: { line: 857, column: 6 }, end: { line: 860, column: 7 } },
                '227': { start: { line: 858, column: 8 }, end: { line: 858, column: 26 } },
                '228': { start: { line: 859, column: 8 }, end: { line: 859, column: 14 } },
                '229': { start: { line: 864, column: 4 }, end: { line: 869, column: 5 } },
                '230': { start: { line: 865, column: 6 }, end: { line: 865, column: 49 } },
                '231': { start: { line: 866, column: 6 }, end: { line: 866, column: 45 } },
                '232': { start: { line: 867, column: 6 }, end: { line: 867, column: 44 } },
                '233': { start: { line: 868, column: 6 }, end: { line: 868, column: 37 } },
                '234': { start: { line: 873, column: 4 }, end: { line: 878, column: 5 } },
                '235': { start: { line: 874, column: 6 }, end: { line: 874, column: 53 } },
                '236': { start: { line: 875, column: 6 }, end: { line: 875, column: 63 } },
                '237': { start: { line: 877, column: 6 }, end: { line: 877, column: 49 } },
                '238': { start: { line: 880, column: 4 }, end: { line: 880, column: 65 } },
                '239': { start: { line: 881, column: 4 }, end: { line: 881, column: 46 } },
                '240': { start: { line: 882, column: 4 }, end: { line: 882, column: 20 } },
                '241': { start: { line: 885, column: 2 }, end: { line: 893, column: 4 } },
                '242': { start: { line: 886, column: 4 }, end: { line: 892, column: 5 } },
                '243': { start: { line: 887, column: 6 }, end: { line: 891, column: 7 } },
                '244': { start: { line: 888, column: 8 }, end: { line: 888, column: 72 } },
                '245': { start: { line: 888, column: 35 }, end: { line: 888, column: 72 } },
                '246': { start: { line: 889, column: 8 }, end: { line: 889, column: 26 } },
                '247': { start: { line: 890, column: 8 }, end: { line: 890, column: 15 } },
                '248': { start: { line: 895, column: 2 }, end: { line: 904, column: 4 } },
                '249': { start: { line: 896, column: 17 }, end: { line: 896, column: 19 } },
                '250': { start: { line: 897, column: 4 }, end: { line: 902, column: 5 } },
                '251': { start: { line: 898, column: 6 }, end: { line: 901, column: 7 } },
                '252': { start: { line: 899, column: 8 }, end: { line: 899, column: 30 } },
                '253': { start: { line: 900, column: 8 }, end: { line: 900, column: 14 } },
                '254': { start: { line: 903, column: 4 }, end: { line: 903, column: 18 } },
                '255': { start: { line: 906, column: 2 }, end: { line: 924, column: 4 } },
                '256': { start: { line: 907, column: 17 }, end: { line: 907, column: 21 } },
                '257': { start: { line: 908, column: 4 }, end: { line: 922, column: 5 } },
                '258': { start: { line: 909, column: 6 }, end: { line: 914, column: 7 } },
                '259': { start: { line: 910, column: 8 }, end: { line: 913, column: 9 } },
                '260': { start: { line: 911, column: 10 }, end: { line: 911, column: 26 } },
                '261': { start: { line: 912, column: 10 }, end: { line: 912, column: 16 } },
                '262': { start: { line: 916, column: 6 }, end: { line: 921, column: 7 } },
                '263': { start: { line: 917, column: 8 }, end: { line: 920, column: 9 } },
                '264': { start: { line: 918, column: 10 }, end: { line: 918, column: 47 } },
                '265': { start: { line: 919, column: 10 }, end: { line: 919, column: 26 } },
                '266': { start: { line: 923, column: 4 }, end: { line: 923, column: 18 } },
                '267': { start: { line: 926, column: 2 }, end: { line: 930, column: 4 } },
                '268': { start: { line: 927, column: 4 }, end: { line: 929, column: 5 } },
                '269': { start: { line: 928, column: 6 }, end: { line: 928, column: 57 } },
                '270': { start: { line: 932, column: 2 }, end: { line: 932, column: 14 } },
                '271': { start: { line: 987, column: 0 }, end: { line: 1021, column: 2 } },
                '272': { start: { line: 988, column: 2 }, end: { line: 988, column: 57 } },
                '273': { start: { line: 989, column: 14 }, end: { line: 989, column: 45 } },
                '274': { start: { line: 991, column: 2 }, end: { line: 991, column: 21 } },
                '275': { start: { line: 992, column: 2 }, end: { line: 1006, column: 3 } },
                '276': { start: { line: 993, column: 4 }, end: { line: 1003, column: 5 } },
                '277': { start: { line: 994, column: 6 }, end: { line: 994, column: 44 } },
                '278': { start: { line: 996, column: 6 }, end: { line: 996, column: 38 } },
                '279': { start: { line: 997, column: 6 }, end: { line: 1001, column: 8 } },
                '280': {
                  start: { line: 1002, column: 6 },
                  end: { line: 1002, column: 64 }
                },
                '281': {
                  start: { line: 1005, column: 4 },
                  end: { line: 1005, column: 26 }
                },
                '282': {
                  start: { line: 1007, column: 2 },
                  end: { line: 1007, column: 31 }
                },
                '283': { start: { line: 1009, column: 2 }, end: { line: 1019, column: 4 } },
                '284': { start: { line: 1010, column: 4 }, end: { line: 1017, column: 5 } },
                '285': { start: { line: 1011, column: 6 }, end: { line: 1013, column: 7 } },
                '286': {
                  start: { line: 1012, column: 8 },
                  end: { line: 1012, column: 45 }
                },
                '287': { start: { line: 1014, column: 6 }, end: { line: 1016, column: 7 } },
                '288': {
                  start: { line: 1015, column: 8 },
                  end: { line: 1015, column: 47 }
                },
                '289': {
                  start: { line: 1018, column: 4 },
                  end: { line: 1018, column: 46 }
                },
                '290': {
                  start: { line: 1020, column: 2 },
                  end: { line: 1020, column: 14 }
                },
                '291': { start: { line: 1053, column: 0 }, end: { line: 1059, column: 2 } },
                '292': {
                  start: { line: 1054, column: 2 },
                  end: { line: 1054, column: 51 }
                },
                '293': {
                  start: { line: 1055, column: 12 },
                  end: { line: 1055, column: 43 }
                },
                '294': {
                  start: { line: 1056, column: 2 },
                  end: { line: 1056, column: 35 }
                },
                '295': {
                  start: { line: 1057, column: 2 },
                  end: { line: 1057, column: 33 }
                },
                '296': {
                  start: { line: 1058, column: 2 },
                  end: { line: 1058, column: 31 }
                },
                '297': { start: { line: 1097, column: 0 }, end: { line: 1119, column: 2 } },
                '298': {
                  start: { line: 1098, column: 2 },
                  end: { line: 1098, column: 55 }
                },
                '299': {
                  start: { line: 1100, column: 27 },
                  end: { line: 1104, column: 3 }
                },
                '300': { start: { line: 1101, column: 4 }, end: { line: 1103, column: 5 } },
                '301': {
                  start: { line: 1102, column: 6 },
                  end: { line: 1102, column: 36 }
                },
                '302': { start: { line: 1107, column: 2 }, end: { line: 1112, column: 3 } },
                '303': { start: { line: 1108, column: 4 }, end: { line: 1110, column: 6 } },
                '304': {
                  start: { line: 1111, column: 4 },
                  end: { line: 1111, column: 11 }
                },
                '305': {
                  start: { line: 1114, column: 20 },
                  end: { line: 1114, column: 51 }
                },
                '306': {
                  start: { line: 1115, column: 2 },
                  end: { line: 1115, column: 41 }
                },
                '307': {
                  start: { line: 1116, column: 2 },
                  end: { line: 1116, column: 57 }
                },
                '308': {
                  start: { line: 1116, column: 16 },
                  end: { line: 1116, column: 57 }
                },
                '309': {
                  start: { line: 1117, column: 2 },
                  end: { line: 1117, column: 64 }
                },
                '310': {
                  start: { line: 1118, column: 2 },
                  end: { line: 1118, column: 37 }
                },
                '311': {
                  start: { line: 1125, column: 14 },
                  end: { line: 1125, column: 42 }
                },
                '312': {
                  start: { line: 1128, column: 2 },
                  end: { line: 1128, column: 18 }
                },
                '313': { start: { line: 1129, column: 2 }, end: { line: 1131, column: 3 } },
                '314': {
                  start: { line: 1130, column: 4 },
                  end: { line: 1130, column: 16 }
                },
                '315': { start: { line: 1132, column: 2 }, end: { line: 1136, column: 3 } },
                '316': {
                  start: { line: 1133, column: 21 },
                  end: { line: 1133, column: 53 }
                },
                '317': {
                  start: { line: 1134, column: 4 },
                  end: { line: 1134, column: 46 }
                },
                '318': {
                  start: { line: 1135, column: 4 },
                  end: { line: 1135, column: 30 }
                },
                '319': { start: { line: 1139, column: 2 }, end: { line: 1145, column: 3 } },
                '320': {
                  start: { line: 1140, column: 28 },
                  end: { line: 1143, column: 5 }
                },
                '321': {
                  start: { line: 1141, column: 6 },
                  end: { line: 1141, column: 17 }
                },
                '322': {
                  start: { line: 1142, column: 6 },
                  end: { line: 1142, column: 65 }
                },
                '323': {
                  start: { line: 1144, column: 4 },
                  end: { line: 1144, column: 60 }
                },
                '324': {
                  start: { line: 1147, column: 18 },
                  end: { line: 1147, column: 46 }
                },
                '325': {
                  start: { line: 1148, column: 2 },
                  end: { line: 1148, column: 33 }
                },
                '326': { start: { line: 1151, column: 2 }, end: { line: 1163, column: 5 } },
                '327': {
                  start: { line: 1152, column: 4 },
                  end: { line: 1152, column: 35 }
                },
                '328': {
                  start: { line: 1153, column: 4 },
                  end: { line: 1153, column: 37 }
                },
                '329': {
                  start: { line: 1156, column: 4 },
                  end: { line: 1156, column: 68 }
                },
                '330': {
                  start: { line: 1156, column: 33 },
                  end: { line: 1156, column: 68 }
                },
                '331': {
                  start: { line: 1157, column: 4 },
                  end: { line: 1157, column: 71 }
                },
                '332': {
                  start: { line: 1157, column: 34 },
                  end: { line: 1157, column: 71 }
                },
                '333': { start: { line: 1158, column: 4 }, end: { line: 1161, column: 5 } },
                '334': {
                  start: { line: 1159, column: 6 },
                  end: { line: 1159, column: 60 }
                },
                '335': {
                  start: { line: 1160, column: 6 },
                  end: { line: 1160, column: 40 }
                },
                '336': {
                  start: { line: 1162, column: 4 },
                  end: { line: 1162, column: 34 }
                },
                '337': {
                  start: { line: 1165, column: 2 },
                  end: { line: 1165, column: 17 }
                },
                '338': { start: { line: 1209, column: 0 }, end: { line: 1212, column: 2 } },
                '339': {
                  start: { line: 1210, column: 2 },
                  end: { line: 1210, column: 51 }
                },
                '340': {
                  start: { line: 1211, column: 2 },
                  end: { line: 1211, column: 51 }
                },
                '341': { start: { line: 1248, column: 0 }, end: { line: 1251, column: 2 } },
                '342': {
                  start: { line: 1249, column: 2 },
                  end: { line: 1249, column: 51 }
                },
                '343': {
                  start: { line: 1250, column: 2 },
                  end: { line: 1250, column: 51 }
                },
                '344': {
                  start: { line: 1260, column: 0 },
                  end: { line: 1260, column: 29 }
                },
                '345': {
                  start: { line: 1266, column: 0 },
                  end: { line: 1266, column: 29 }
                },
                '346': { start: { line: 1270, column: 0 }, end: { line: 1272, column: 1 } },
                '347': {
                  start: { line: 1271, column: 2 },
                  end: { line: 1271, column: 30 }
                },
                '348': { start: { line: 1277, column: 0 }, end: { line: 1296, column: 1 } },
                '349': { start: { line: 1278, column: 2 }, end: { line: 1295, column: 4 } },
                '350': {
                  start: { line: 1281, column: 6 },
                  end: { line: 1281, column: 63 }
                },
                '351': { start: { line: 1285, column: 4 }, end: { line: 1289, column: 5 } },
                '352': { start: { line: 1286, column: 6 }, end: { line: 1288, column: 8 } },
                '353': { start: { line: 1292, column: 4 }, end: { line: 1294, column: 7 } },
                '354': {
                  start: { line: 1293, column: 6 },
                  end: { line: 1293, column: 65 }
                },
                '355': { start: { line: 1380, column: 0 }, end: { line: 1433, column: 2 } },
                '356': {
                  start: { line: 1381, column: 2 },
                  end: { line: 1381, column: 53 }
                },
                '357': { start: { line: 1384, column: 2 }, end: { line: 1386, column: 3 } },
                '358': {
                  start: { line: 1385, column: 4 },
                  end: { line: 1385, column: 73 }
                },
                '359': {
                  start: { line: 1388, column: 17 },
                  end: { line: 1388, column: 21 }
                },
                '360': {
                  start: { line: 1389, column: 17 },
                  end: { line: 1389, column: 21 }
                },
                '361': { start: { line: 1392, column: 2 }, end: { line: 1397, column: 3 } },
                '362': {
                  start: { line: 1393, column: 4 },
                  end: { line: 1396, column: 55 }
                },
                '363': {
                  start: { line: 1393, column: 36 },
                  end: { line: 1393, column: 53 }
                },
                '364': {
                  start: { line: 1394, column: 9 },
                  end: { line: 1396, column: 55 }
                },
                '365': {
                  start: { line: 1394, column: 41 },
                  end: { line: 1394, column: 58 }
                },
                '366': {
                  start: { line: 1395, column: 9 },
                  end: { line: 1396, column: 55 }
                },
                '367': {
                  start: { line: 1395, column: 38 },
                  end: { line: 1395, column: 56 }
                },
                '368': {
                  start: { line: 1396, column: 9 },
                  end: { line: 1396, column: 55 }
                },
                '369': {
                  start: { line: 1396, column: 40 },
                  end: { line: 1396, column: 55 }
                },
                '370': {
                  start: { line: 1398, column: 2 },
                  end: { line: 1398, column: 71 }
                },
                '371': {
                  start: { line: 1398, column: 20 },
                  end: { line: 1398, column: 71 }
                },
                '372': {
                  start: { line: 1400, column: 21 },
                  end: { line: 1400, column: 52 }
                },
                '373': {
                  start: { line: 1402, column: 2 },
                  end: { line: 1402, column: 45 }
                },
                '374': {
                  start: { line: 1404, column: 2 },
                  end: { line: 1414, column: 18 }
                },
                '375': { start: { line: 1405, column: 4 }, end: { line: 1413, column: 5 } },
                '376': { start: { line: 1406, column: 6 }, end: { line: 1410, column: 7 } },
                '377': {
                  start: { line: 1407, column: 8 },
                  end: { line: 1407, column: 38 }
                },
                '378': {
                  start: { line: 1409, column: 8 },
                  end: { line: 1409, column: 60 }
                },
                '379': {
                  start: { line: 1412, column: 6 },
                  end: { line: 1412, column: 30 }
                },
                '380': {
                  start: { line: 1416, column: 18 },
                  end: { line: 1416, column: 52 }
                },
                '381': {
                  start: { line: 1417, column: 2 },
                  end: { line: 1417, column: 33 }
                },
                '382': { start: { line: 1419, column: 2 }, end: { line: 1431, column: 5 } },
                '383': {
                  start: { line: 1420, column: 4 },
                  end: { line: 1420, column: 22 }
                },
                '384': { start: { line: 1421, column: 4 }, end: { line: 1427, column: 5 } },
                '385': {
                  start: { line: 1422, column: 6 },
                  end: { line: 1422, column: 39 }
                },
                '386': {
                  start: { line: 1423, column: 6 },
                  end: { line: 1423, column: 41 }
                },
                '387': {
                  start: { line: 1425, column: 6 },
                  end: { line: 1425, column: 64 }
                },
                '388': {
                  start: { line: 1426, column: 6 },
                  end: { line: 1426, column: 67 }
                },
                '389': {
                  start: { line: 1428, column: 4 },
                  end: { line: 1428, column: 34 }
                },
                '390': {
                  start: { line: 1430, column: 4 },
                  end: { line: 1430, column: 49 }
                },
                '391': {
                  start: { line: 1430, column: 18 },
                  end: { line: 1430, column: 49 }
                },
                '392': {
                  start: { line: 1432, column: 2 },
                  end: { line: 1432, column: 17 }
                },
                '393': { start: { line: 1449, column: 0 }, end: { line: 1456, column: 2 } },
                '394': {
                  start: { line: 1450, column: 2 },
                  end: { line: 1450, column: 53 }
                },
                '395': {
                  start: { line: 1451, column: 14 },
                  end: { line: 1451, column: 41 }
                },
                '396': { start: { line: 1452, column: 2 }, end: { line: 1454, column: 3 } },
                '397': {
                  start: { line: 1453, column: 4 },
                  end: { line: 1453, column: 28 }
                },
                '398': {
                  start: { line: 1455, column: 2 },
                  end: { line: 1455, column: 31 }
                },
                '399': { start: { line: 1475, column: 0 }, end: { line: 1484, column: 2 } },
                '400': { start: { line: 1476, column: 2 }, end: { line: 1482, column: 3 } },
                '401': { start: { line: 1477, column: 4 }, end: { line: 1479, column: 5 } },
                '402': {
                  start: { line: 1478, column: 6 },
                  end: { line: 1478, column: 56 }
                },
                '403': {
                  start: { line: 1481, column: 4 },
                  end: { line: 1481, column: 27 }
                },
                '404': {
                  start: { line: 1483, column: 2 },
                  end: { line: 1483, column: 14 }
                },
                '405': { start: { line: 1511, column: 0 }, end: { line: 1515, column: 2 } },
                '406': {
                  start: { line: 1513, column: 2 },
                  end: { line: 1513, column: 31 }
                },
                '407': {
                  start: { line: 1514, column: 2 },
                  end: { line: 1514, column: 14 }
                },
                '408': { start: { line: 1542, column: 0 }, end: { line: 1544, column: 2 } },
                '409': {
                  start: { line: 1543, column: 2 },
                  end: { line: 1543, column: 40 }
                },
                '410': { start: { line: 1567, column: 0 }, end: { line: 1577, column: 2 } },
                '411': { start: { line: 1571, column: 2 }, end: { line: 1575, column: 3 } },
                '412': {
                  start: { line: 1572, column: 4 },
                  end: { line: 1572, column: 33 }
                },
                '413': {
                  start: { line: 1574, column: 4 },
                  end: { line: 1574, column: 30 }
                },
                '414': {
                  start: { line: 1576, column: 2 },
                  end: { line: 1576, column: 14 }
                },
                '415': { start: { line: 1613, column: 0 }, end: { line: 1630, column: 2 } },
                '416': { start: { line: 1614, column: 2 }, end: { line: 1616, column: 3 } },
                '417': {
                  start: { line: 1615, column: 4 },
                  end: { line: 1615, column: 31 }
                },
                '418': { start: { line: 1617, column: 2 }, end: { line: 1624, column: 3 } },
                '419': { start: { line: 1618, column: 4 }, end: { line: 1620, column: 5 } },
                '420': {
                  start: { line: 1619, column: 6 },
                  end: { line: 1619, column: 41 }
                },
                '421': {
                  start: { line: 1621, column: 4 },
                  end: { line: 1621, column: 51 }
                },
                '422': { start: { line: 1622, column: 9 }, end: { line: 1624, column: 3 } },
                '423': {
                  start: { line: 1623, column: 4 },
                  end: { line: 1623, column: 30 }
                },
                '424': { start: { line: 1626, column: 2 }, end: { line: 1628, column: 3 } },
                '425': {
                  start: { line: 1627, column: 4 },
                  end: { line: 1627, column: 36 }
                },
                '426': {
                  start: { line: 1629, column: 2 },
                  end: { line: 1629, column: 14 }
                },
                '427': { start: { line: 1651, column: 0 }, end: { line: 1681, column: 2 } },
                '428': {
                  start: { line: 1652, column: 16 },
                  end: { line: 1652, column: 38 }
                },
                '429': {
                  start: { line: 1653, column: 17 },
                  end: { line: 1653, column: 50 }
                },
                '430': {
                  start: { line: 1654, column: 23 },
                  end: { line: 1654, column: 61 }
                },
                '431': {
                  start: { line: 1655, column: 14 },
                  end: { line: 1655, column: 63 }
                },
                '432': {
                  start: { line: 1657, column: 2 },
                  end: { line: 1657, column: 26 }
                },
                '433': {
                  start: { line: 1657, column: 14 },
                  end: { line: 1657, column: 26 }
                },
                '434': {
                  start: { line: 1658, column: 2 },
                  end: { line: 1658, column: 41 }
                },
                '435': {
                  start: { line: 1658, column: 20 },
                  end: { line: 1658, column: 41 }
                },
                '436': {
                  start: { line: 1659, column: 2 },
                  end: { line: 1659, column: 35 }
                },
                '437': {
                  start: { line: 1661, column: 2 },
                  end: { line: 1661, column: 22 }
                },
                '438': {
                  start: { line: 1662, column: 18 },
                  end: { line: 1662, column: 76 }
                },
                '439': {
                  start: { line: 1663, column: 18 },
                  end: { line: 1663, column: 78 }
                },
                '440': { start: { line: 1665, column: 2 }, end: { line: 1674, column: 3 } },
                '441': { start: { line: 1666, column: 4 }, end: { line: 1669, column: 6 } },
                '442': { start: { line: 1670, column: 9 }, end: { line: 1674, column: 3 } },
                '443': {
                  start: { line: 1671, column: 4 },
                  end: { line: 1671, column: 65 }
                },
                '444': { start: { line: 1672, column: 9 }, end: { line: 1674, column: 3 } },
                '445': {
                  start: { line: 1673, column: 4 },
                  end: { line: 1673, column: 64 }
                },
                '446': {
                  start: { line: 1676, column: 2 },
                  end: { line: 1676, column: 31 }
                },
                '447': {
                  start: { line: 1677, column: 2 },
                  end: { line: 1677, column: 26 }
                },
                '448': {
                  start: { line: 1677, column: 14 },
                  end: { line: 1677, column: 26 }
                },
                '449': {
                  start: { line: 1678, column: 2 },
                  end: { line: 1678, column: 41 }
                },
                '450': {
                  start: { line: 1678, column: 20 },
                  end: { line: 1678, column: 41 }
                },
                '451': {
                  start: { line: 1680, column: 2 },
                  end: { line: 1680, column: 14 }
                },
                '452': { start: { line: 1710, column: 0 }, end: { line: 1720, column: 2 } },
                '453': { start: { line: 1711, column: 2 }, end: { line: 1719, column: 3 } },
                '454': {
                  start: { line: 1712, column: 4 },
                  end: { line: 1712, column: 30 }
                },
                '455': { start: { line: 1713, column: 9 }, end: { line: 1719, column: 3 } },
                '456': {
                  start: { line: 1714, column: 4 },
                  end: { line: 1714, column: 59 }
                },
                '457': {
                  start: { line: 1715, column: 4 },
                  end: { line: 1715, column: 16 }
                },
                '458': {
                  start: { line: 1717, column: 4 },
                  end: { line: 1717, column: 38 }
                },
                '459': {
                  start: { line: 1718, column: 4 },
                  end: { line: 1718, column: 16 }
                },
                '460': { start: { line: 1762, column: 0 }, end: { line: 1784, column: 2 } },
                '461': { start: { line: 1763, column: 2 }, end: { line: 1783, column: 3 } },
                '462': {
                  start: { line: 1764, column: 4 },
                  end: { line: 1764, column: 61 }
                },
                '463': {
                  start: { line: 1766, column: 23 },
                  end: { line: 1766, column: 33 }
                },
                '464': { start: { line: 1767, column: 4 }, end: { line: 1776, column: 5 } },
                '465': {
                  start: { line: 1775, column: 6 },
                  end: { line: 1775, column: 34 }
                },
                '466': {
                  start: { line: 1777, column: 4 },
                  end: { line: 1777, column: 43 }
                },
                '467': {
                  start: { line: 1778, column: 4 },
                  end: { line: 1778, column: 46 }
                },
                '468': {
                  start: { line: 1779, column: 4 },
                  end: { line: 1779, column: 45 }
                },
                '469': {
                  start: { line: 1780, column: 4 },
                  end: { line: 1780, column: 26 }
                },
                '470': {
                  start: { line: 1781, column: 4 },
                  end: { line: 1781, column: 26 }
                },
                '471': {
                  start: { line: 1782, column: 4 },
                  end: { line: 1782, column: 16 }
                },
                '472': { start: { line: 1787, column: 0 }, end: { line: 1816, column: 2 } },
                '473': {
                  start: { line: 1788, column: 2 },
                  end: { line: 1788, column: 39 }
                },
                '474': {
                  start: { line: 1790, column: 18 },
                  end: { line: 1790, column: 20 }
                },
                '475': { start: { line: 1791, column: 2 }, end: { line: 1794, column: 3 } },
                '476': {
                  start: { line: 1792, column: 4 },
                  end: { line: 1792, column: 75 }
                },
                '477': {
                  start: { line: 1793, column: 4 },
                  end: { line: 1793, column: 64 }
                },
                '478': { start: { line: 1795, column: 2 }, end: { line: 1812, column: 3 } },
                '479': {
                  start: { line: 1796, column: 4 },
                  end: { line: 1797, column: 66 }
                },
                '480': { start: { line: 1798, column: 9 }, end: { line: 1812, column: 3 } },
                '481': {
                  start: { line: 1799, column: 4 },
                  end: { line: 1806, column: 12 }
                },
                '482': { start: { line: 1807, column: 4 }, end: { line: 1811, column: 5 } },
                '483': {
                  start: { line: 1808, column: 6 },
                  end: { line: 1808, column: 58 }
                },
                '484': {
                  start: { line: 1810, column: 6 },
                  end: { line: 1810, column: 69 }
                },
                '485': {
                  start: { line: 1814, column: 2 },
                  end: { line: 1814, column: 40 }
                },
                '486': {
                  start: { line: 1815, column: 2 },
                  end: { line: 1815, column: 14 }
                },
                '487': { start: { line: 1819, column: 0 }, end: { line: 1840, column: 2 } },
                '488': {
                  start: { line: 1821, column: 18 },
                  end: { line: 1821, column: 20 }
                },
                '489': { start: { line: 1822, column: 2 }, end: { line: 1825, column: 3 } },
                '490': {
                  start: { line: 1823, column: 4 },
                  end: { line: 1823, column: 72 }
                },
                '491': {
                  start: { line: 1824, column: 4 },
                  end: { line: 1824, column: 61 }
                },
                '492': { start: { line: 1827, column: 2 }, end: { line: 1836, column: 3 } },
                '493': {
                  start: { line: 1828, column: 4 },
                  end: { line: 1828, column: 65 }
                },
                '494': { start: { line: 1829, column: 9 }, end: { line: 1836, column: 3 } },
                '495': {
                  start: { line: 1830, column: 4 },
                  end: { line: 1831, column: 65 }
                },
                '496': { start: { line: 1832, column: 9 }, end: { line: 1836, column: 3 } },
                '497': {
                  start: { line: 1833, column: 4 },
                  end: { line: 1833, column: 66 }
                },
                '498': {
                  start: { line: 1834, column: 4 },
                  end: { line: 1834, column: 67 }
                },
                '499': {
                  start: { line: 1835, column: 4 },
                  end: { line: 1835, column: 67 }
                },
                '500': {
                  start: { line: 1838, column: 2 },
                  end: { line: 1838, column: 40 }
                },
                '501': {
                  start: { line: 1839, column: 2 },
                  end: { line: 1839, column: 14 }
                },
                '502': { start: { line: 1887, column: 0 }, end: { line: 1935, column: 2 } },
                '503': {
                  start: { line: 1888, column: 15 },
                  end: { line: 1888, column: 19 }
                },
                '504': { start: { line: 1890, column: 2 }, end: { line: 1901, column: 3 } },
                '505': {
                  start: { line: 1891, column: 4 },
                  end: { line: 1900, column: 10 }
                },
                '506': { start: { line: 1903, column: 2 }, end: { line: 1933, column: 3 } },
                '507': { start: { line: 1904, column: 4 }, end: { line: 1918, column: 5 } },
                '508': {
                  start: { line: 1906, column: 19 },
                  end: { line: 1906, column: 52 }
                },
                '509': {
                  start: { line: 1907, column: 18 },
                  end: { line: 1907, column: 47 }
                },
                '510': {
                  start: { line: 1908, column: 6 },
                  end: { line: 1908, column: 19 }
                },
                '511': {
                  start: { line: 1911, column: 20 },
                  end: { line: 1911, column: 35 }
                },
                '512': { start: { line: 1912, column: 6 }, end: { line: 1917, column: 7 } },
                '513': {
                  start: { line: 1912, column: 19 },
                  end: { line: 1912, column: 20 }
                },
                '514': {
                  start: { line: 1913, column: 22 },
                  end: { line: 1913, column: 41 }
                },
                '515': { start: { line: 1914, column: 8 }, end: { line: 1916, column: 9 } },
                '516': {
                  start: { line: 1915, column: 10 },
                  end: { line: 1915, column: 60 }
                },
                '517': {
                  start: { line: 1921, column: 4 },
                  end: { line: 1921, column: 31 }
                },
                '518': { start: { line: 1922, column: 4 }, end: { line: 1932, column: 5 } },
                '519': {
                  start: { line: 1928, column: 19 },
                  end: { line: 1928, column: 52 }
                },
                '520': {
                  start: { line: 1929, column: 21 },
                  end: { line: 1929, column: 50 }
                },
                '521': {
                  start: { line: 1930, column: 19 },
                  end: { line: 1930, column: 47 }
                },
                '522': {
                  start: { line: 1931, column: 6 },
                  end: { line: 1931, column: 40 }
                },
                '523': {
                  start: { line: 1934, column: 2 },
                  end: { line: 1934, column: 14 }
                },
                '524': { start: { line: 1958, column: 0 }, end: { line: 1979, column: 2 } },
                '525': { start: { line: 1961, column: 2 }, end: { line: 1978, column: 3 } },
                '526': { start: { line: 1966, column: 4 }, end: { line: 1972, column: 5 } },
                '527': {
                  start: { line: 1967, column: 6 },
                  end: { line: 1967, column: 52 }
                },
                '528': { start: { line: 1969, column: 6 }, end: { line: 1971, column: 7 } },
                '529': {
                  start: { line: 1969, column: 19 },
                  end: { line: 1969, column: 20 }
                },
                '530': {
                  start: { line: 1970, column: 8 },
                  end: { line: 1970, column: 57 }
                },
                '531': { start: { line: 1973, column: 9 }, end: { line: 1978, column: 3 } },
                '532': {
                  start: { line: 1974, column: 4 },
                  end: { line: 1974, column: 39 }
                },
                '533': {
                  start: { line: 1976, column: 4 },
                  end: { line: 1976, column: 39 }
                },
                '534': {
                  start: { line: 1977, column: 4 },
                  end: { line: 1977, column: 16 }
                },
                '535': { start: { line: 2012, column: 0 }, end: { line: 2024, column: 2 } },
                '536': { start: { line: 2013, column: 2 }, end: { line: 2021, column: 3 } },
                '537': { start: { line: 2018, column: 4 }, end: { line: 2020, column: 5 } },
                '538': {
                  start: { line: 2018, column: 17 },
                  end: { line: 2018, column: 18 }
                },
                '539': {
                  start: { line: 2019, column: 6 },
                  end: { line: 2019, column: 51 }
                },
                '540': {
                  start: { line: 2022, column: 2 },
                  end: { line: 2022, column: 33 }
                },
                '541': {
                  start: { line: 2023, column: 2 },
                  end: { line: 2023, column: 14 }
                },
                '542': { start: { line: 2061, column: 0 }, end: { line: 2070, column: 2 } },
                '543': { start: { line: 2062, column: 2 }, end: { line: 2069, column: 3 } },
                '544': {
                  start: { line: 2063, column: 4 },
                  end: { line: 2063, column: 34 }
                },
                '545': {
                  start: { line: 2064, column: 4 },
                  end: { line: 2064, column: 16 }
                },
                '546': {
                  start: { line: 2066, column: 4 },
                  end: { line: 2068, column: 33 }
                },
                '547': {
                  start: { line: 2067, column: 6 },
                  end: { line: 2067, column: 40 }
                },
                '548': {
                  start: { line: 2068, column: 11 },
                  end: { line: 2068, column: 33 }
                },
                '549': { start: { line: 2085, column: 0 }, end: { line: 2088, column: 2 } },
                '550': {
                  start: { line: 2086, column: 2 },
                  end: { line: 2086, column: 35 }
                },
                '551': {
                  start: { line: 2087, column: 2 },
                  end: { line: 2087, column: 14 }
                },
                '552': { start: { line: 2101, column: 0 }, end: { line: 2104, column: 2 } },
                '553': {
                  start: { line: 2102, column: 2 },
                  end: { line: 2102, column: 34 }
                },
                '554': {
                  start: { line: 2103, column: 2 },
                  end: { line: 2103, column: 14 }
                },
                '555': { start: { line: 2136, column: 0 }, end: { line: 2185, column: 2 } },
                '556': { start: { line: 2137, column: 2 }, end: { line: 2184, column: 3 } },
                '557': {
                  start: { line: 2138, column: 4 },
                  end: { line: 2138, column: 74 }
                },
                '558': {
                  start: { line: 2140, column: 13 },
                  end: { line: 2140, column: 14 }
                },
                '559': {
                  start: { line: 2141, column: 13 },
                  end: { line: 2141, column: 14 }
                },
                '560': {
                  start: { line: 2142, column: 17 },
                  end: { line: 2142, column: 34 }
                },
                '561': { start: { line: 2143, column: 4 }, end: { line: 2182, column: 5 } },
                '562': { start: { line: 2144, column: 6 }, end: { line: 2148, column: 7 } },
                '563': {
                  start: { line: 2145, column: 8 },
                  end: { line: 2145, column: 42 }
                },
                '564': {
                  start: { line: 2146, column: 13 },
                  end: { line: 2148, column: 7 }
                },
                '565': {
                  start: { line: 2147, column: 8 },
                  end: { line: 2147, column: 42 }
                },
                '566': { start: { line: 2150, column: 6 }, end: { line: 2170, column: 7 } },
                '567': {
                  start: { line: 2151, column: 18 },
                  end: { line: 2151, column: 20 }
                },
                '568': {
                  start: { line: 2152, column: 18 },
                  end: { line: 2152, column: 43 }
                },
                '569': { start: { line: 2154, column: 8 }, end: { line: 2156, column: 9 } },
                '570': {
                  start: { line: 2155, column: 10 },
                  end: { line: 2155, column: 28 }
                },
                '571': {
                  start: { line: 2157, column: 8 },
                  end: { line: 2157, column: 71 }
                },
                '572': {
                  start: { line: 2158, column: 8 },
                  end: { line: 2158, column: 72 }
                },
                '573': {
                  start: { line: 2159, column: 8 },
                  end: { line: 2159, column: 41 }
                },
                '574': {
                  start: { line: 2160, column: 8 },
                  end: { line: 2160, column: 42 }
                },
                '575': {
                  start: { line: 2161, column: 8 },
                  end: { line: 2161, column: 80 }
                },
                '576': { start: { line: 2162, column: 8 }, end: { line: 2164, column: 9 } },
                '577': {
                  start: { line: 2163, column: 10 },
                  end: { line: 2163, column: 52 }
                },
                '578': {
                  start: { line: 2166, column: 8 },
                  end: { line: 2166, column: 41 }
                },
                '579': {
                  start: { line: 2167, column: 8 },
                  end: { line: 2167, column: 42 }
                },
                '580': {
                  start: { line: 2168, column: 8 },
                  end: { line: 2168, column: 28 }
                },
                '581': {
                  start: { line: 2169, column: 8 },
                  end: { line: 2169, column: 29 }
                },
                '582': {
                  start: { line: 2172, column: 6 },
                  end: { line: 2172, column: 40 }
                },
                '583': {
                  start: { line: 2173, column: 6 },
                  end: { line: 2173, column: 42 }
                },
                '584': { start: { line: 2175, column: 6 }, end: { line: 2181, column: 7 } },
                '585': { start: { line: 2177, column: 8 }, end: { line: 2180, column: 9 } },
                '586': {
                  start: { line: 2178, column: 10 },
                  end: { line: 2178, column: 66 }
                },
                '587': {
                  start: { line: 2179, column: 10 },
                  end: { line: 2179, column: 68 }
                },
                '588': {
                  start: { line: 2183, column: 4 },
                  end: { line: 2183, column: 16 }
                },
                '589': { start: { line: 2196, column: 0 }, end: { line: 2223, column: 2 } },
                '590': { start: { line: 2199, column: 2 }, end: { line: 2208, column: 3 } },
                '591': {
                  start: { line: 2200, column: 4 },
                  end: { line: 2200, column: 16 }
                },
                '592': {
                  start: { line: 2201, column: 20 },
                  end: { line: 2201, column: 38 }
                },
                '593': { start: { line: 2202, column: 4 }, end: { line: 2207, column: 5 } },
                '594': {
                  start: { line: 2203, column: 21 },
                  end: { line: 2203, column: 40 }
                },
                '595': { start: { line: 2204, column: 6 }, end: { line: 2206, column: 9 } },
                '596': {
                  start: { line: 2205, column: 8 },
                  end: { line: 2205, column: 21 }
                },
                '597': {
                  start: { line: 2211, column: 16 },
                  end: { line: 2211, column: 51 }
                },
                '598': { start: { line: 2212, column: 2 }, end: { line: 2214, column: 3 } },
                '599': {
                  start: { line: 2213, column: 4 },
                  end: { line: 2213, column: 43 }
                },
                '600': { start: { line: 2217, column: 2 }, end: { line: 2219, column: 3 } },
                '601': {
                  start: { line: 2218, column: 4 },
                  end: { line: 2218, column: 55 }
                },
                '602': { start: { line: 2220, column: 2 }, end: { line: 2222, column: 3 } },
                '603': {
                  start: { line: 2221, column: 4 },
                  end: { line: 2221, column: 46 }
                },
                '604': { start: { line: 2284, column: 0 }, end: { line: 2328, column: 2 } },
                '605': { start: { line: 2286, column: 2 }, end: { line: 2325, column: 3 } },
                '606': { start: { line: 2287, column: 4 }, end: { line: 2301, column: 5 } },
                '607': {
                  start: { line: 2288, column: 6 },
                  end: { line: 2288, column: 32 }
                },
                '608': {
                  start: { line: 2290, column: 29 },
                  end: { line: 2292, column: 7 }
                },
                '609': {
                  start: { line: 2291, column: 8 },
                  end: { line: 2291, column: 29 }
                },
                '610': {
                  start: { line: 2297, column: 6 },
                  end: { line: 2297, column: 60 }
                },
                '611': {
                  start: { line: 2300, column: 6 },
                  end: { line: 2300, column: 61 }
                },
                '612': { start: { line: 2304, column: 4 }, end: { line: 2322, column: 6 } },
                '613': {
                  start: { line: 2307, column: 8 },
                  end: { line: 2307, column: 29 }
                },
                '614': { start: { line: 2309, column: 8 }, end: { line: 2311, column: 9 } },
                '615': {
                  start: { line: 2310, column: 10 },
                  end: { line: 2310, column: 30 }
                },
                '616': {
                  start: { line: 2313, column: 22 },
                  end: { line: 2313, column: 44 }
                },
                '617': { start: { line: 2316, column: 8 }, end: { line: 2319, column: 9 } },
                '618': {
                  start: { line: 2316, column: 21 },
                  end: { line: 2316, column: 22 }
                },
                '619': {
                  start: { line: 2317, column: 20 },
                  end: { line: 2317, column: 28 }
                },
                '620': {
                  start: { line: 2318, column: 10 },
                  end: { line: 2318, column: 37 }
                },
                '621': {
                  start: { line: 2324, column: 4 },
                  end: { line: 2324, column: 74 }
                },
                '622': {
                  start: { line: 2327, column: 2 },
                  end: { line: 2327, column: 14 }
                },
                '623': { start: { line: 2344, column: 0 }, end: { line: 2420, column: 2 } },
                '624': {
                  start: { line: 2345, column: 2 },
                  end: { line: 2345, column: 36 }
                },
                '625': {
                  start: { line: 2347, column: 15 },
                  end: { line: 2347, column: 19 }
                },
                '626': {
                  start: { line: 2348, column: 2 },
                  end: { line: 2348, column: 37 }
                },
                '627': {
                  start: { line: 2350, column: 2 },
                  end: { line: 2350, column: 21 }
                },
                '628': {
                  start: { line: 2351, column: 2 },
                  end: { line: 2351, column: 25 }
                },
                '629': {
                  start: { line: 2352, column: 2 },
                  end: { line: 2352, column: 18 }
                },
                '630': {
                  start: { line: 2353, column: 2 },
                  end: { line: 2353, column: 27 }
                },
                '631': {
                  start: { line: 2354, column: 2 },
                  end: { line: 2354, column: 25 }
                },
                '632': {
                  start: { line: 2355, column: 2 },
                  end: { line: 2355, column: 25 }
                },
                '633': { start: { line: 2395, column: 2 }, end: { line: 2413, column: 5 } },
                '634': {
                  start: { line: 2397, column: 28 },
                  end: { line: 2397, column: 52 }
                },
                '635': {
                  start: { line: 2398, column: 21 },
                  end: { line: 2398, column: 78 }
                },
                '636': {
                  start: { line: 2400, column: 8 },
                  end: { line: 2400, column: 71 }
                },
                '637': {
                  start: { line: 2401, column: 6 },
                  end: { line: 2401, column: 17 }
                },
                '638': { start: { line: 2404, column: 6 }, end: { line: 2406, column: 7 } },
                '639': {
                  start: { line: 2404, column: 19 },
                  end: { line: 2404, column: 20 }
                },
                '640': {
                  start: { line: 2405, column: 8 },
                  end: { line: 2405, column: 51 }
                },
                '641': {
                  start: { line: 2407, column: 21 },
                  end: { line: 2407, column: 53 }
                },
                '642': {
                  start: { line: 2408, column: 6 },
                  end: { line: 2408, column: 28 }
                },
                '643': {
                  start: { line: 2409, column: 6 },
                  end: { line: 2409, column: 30 }
                },
                '644': {
                  start: { line: 2410, column: 6 },
                  end: { line: 2410, column: 30 }
                },
                '645': {
                  start: { line: 2411, column: 6 },
                  end: { line: 2411, column: 27 }
                },
                '646': {
                  start: { line: 2416, column: 2 },
                  end: { line: 2416, column: 32 }
                },
                '647': { start: { line: 2417, column: 2 }, end: { line: 2419, column: 4 } },
                '648': {
                  start: { line: 2418, column: 4 },
                  end: { line: 2418, column: 24 }
                },
                '649': {
                  start: { line: 2421, column: 0 },
                  end: { line: 2421, column: 64 }
                },
                '650': { start: { line: 2461, column: 0 }, end: { line: 2485, column: 2 } },
                '651': { start: { line: 2462, column: 2 }, end: { line: 2464, column: 3 } },
                '652': {
                  start: { line: 2463, column: 4 },
                  end: { line: 2463, column: 29 }
                },
                '653': { start: { line: 2466, column: 2 }, end: { line: 2472, column: 3 } },
                '654': {
                  start: { line: 2467, column: 4 },
                  end: { line: 2467, column: 30 }
                },
                '655': {
                  start: { line: 2470, column: 4 },
                  end: { line: 2470, column: 20 }
                },
                '656': {
                  start: { line: 2471, column: 4 },
                  end: { line: 2471, column: 30 }
                },
                '657': { start: { line: 2473, column: 2 }, end: { line: 2483, column: 3 } },
                '658': { start: { line: 2474, column: 4 }, end: { line: 2482, column: 7 } },
                '659': { start: { line: 2476, column: 6 }, end: { line: 2481, column: 7 } },
                '660': {
                  start: { line: 2477, column: 8 },
                  end: { line: 2477, column: 44 }
                },
                '661': {
                  start: { line: 2480, column: 8 },
                  end: { line: 2480, column: 78 }
                },
                '662': {
                  start: { line: 2484, column: 2 },
                  end: { line: 2484, column: 14 }
                },
                '663': { start: { line: 2545, column: 0 }, end: { line: 2549, column: 2 } },
                '664': {
                  start: { line: 2546, column: 2 },
                  end: { line: 2546, column: 19 }
                },
                '665': {
                  start: { line: 2547, column: 2 },
                  end: { line: 2547, column: 27 }
                },
                '666': {
                  start: { line: 2548, column: 2 },
                  end: { line: 2548, column: 14 }
                },
                '667': { start: { line: 2608, column: 0 }, end: { line: 2611, column: 2 } },
                '668': {
                  start: { line: 2609, column: 2 },
                  end: { line: 2609, column: 19 }
                },
                '669': {
                  start: { line: 2610, column: 2 },
                  end: { line: 2610, column: 14 }
                },
                '670': { start: { line: 2664, column: 0 }, end: { line: 2668, column: 2 } },
                '671': {
                  start: { line: 2665, column: 2 },
                  end: { line: 2665, column: 38 }
                },
                '672': {
                  start: { line: 2666, column: 2 },
                  end: { line: 2666, column: 14 }
                },
                '673': {
                  start: { line: 2667, column: 2 },
                  end: { line: 2667, column: 14 }
                },
                '674': { start: { line: 2716, column: 0 }, end: { line: 2719, column: 2 } },
                '675': {
                  start: { line: 2717, column: 2 },
                  end: { line: 2717, column: 35 }
                },
                '676': {
                  start: { line: 2718, column: 2 },
                  end: { line: 2718, column: 14 }
                },
                '677': { start: { line: 2727, column: 0 }, end: { line: 2733, column: 2 } },
                '678': {
                  start: { line: 2728, column: 18 },
                  end: { line: 2728, column: 76 }
                },
                '679': {
                  start: { line: 2728, column: 35 },
                  end: { line: 2728, column: 70 }
                },
                '680': { start: { line: 2729, column: 2 }, end: { line: 2732, column: 5 } },
                '681': {
                  start: { line: 2729, column: 42 },
                  end: { line: 2729, column: 63 }
                },
                '682': { start: { line: 2780, column: 0 }, end: { line: 2800, column: 2 } },
                '683': {
                  start: { line: 2781, column: 17 },
                  end: { line: 2781, column: 50 }
                },
                '684': {
                  start: { line: 2782, column: 2 },
                  end: { line: 2782, column: 41 }
                },
                '685': { start: { line: 2784, column: 2 }, end: { line: 2797, column: 3 } },
                '686': {
                  start: { line: 2786, column: 39 },
                  end: { line: 2786, column: 79 }
                },
                '687': {
                  start: { line: 2786, column: 45 },
                  end: { line: 2786, column: 79 }
                },
                '688': { start: { line: 2788, column: 4 }, end: { line: 2796, column: 5 } },
                '689': {
                  start: { line: 2789, column: 6 },
                  end: { line: 2789, column: 35 }
                },
                '690': { start: { line: 2792, column: 6 }, end: { line: 2795, column: 9 } },
                '691': {
                  start: { line: 2799, column: 2 },
                  end: { line: 2799, column: 14 }
                },
                '692': { start: { line: 2880, column: 0 }, end: { line: 2886, column: 2 } },
                '693': { start: { line: 2881, column: 2 }, end: { line: 2885, column: 3 } },
                '694': {
                  start: { line: 2882, column: 4 },
                  end: { line: 2882, column: 27 }
                },
                '695': {
                  start: { line: 2884, column: 4 },
                  end: { line: 2884, column: 26 }
                },
                '696': { start: { line: 2965, column: 0 }, end: { line: 2975, column: 2 } },
                '697': { start: { line: 2966, column: 2 }, end: { line: 2974, column: 3 } },
                '698': {
                  start: { line: 2967, column: 4 },
                  end: { line: 2967, column: 60 }
                },
                '699': { start: { line: 2969, column: 4 }, end: { line: 2973, column: 5 } },
                '700': {
                  start: { line: 2970, column: 6 },
                  end: { line: 2970, column: 34 }
                },
                '701': {
                  start: { line: 2972, column: 6 },
                  end: { line: 2972, column: 36 }
                },
                '702': { start: { line: 3027, column: 0 }, end: { line: 3034, column: 2 } },
                '703': { start: { line: 3028, column: 2 }, end: { line: 3033, column: 3 } },
                '704': {
                  start: { line: 3029, column: 4 },
                  end: { line: 3029, column: 32 }
                },
                '705': {
                  start: { line: 3031, column: 4 },
                  end: { line: 3031, column: 31 }
                },
                '706': {
                  start: { line: 3032, column: 4 },
                  end: { line: 3032, column: 16 }
                },
                '707': { start: { line: 3064, column: 0 }, end: { line: 3066, column: 2 } },
                '708': {
                  start: { line: 3065, column: 2 },
                  end: { line: 3065, column: 27 }
                },
                '709': {
                  start: { line: 3067, column: 0 },
                  end: { line: 3067, column: 38 }
                },
                '710': { start: { line: 3068, column: 0 }, end: { line: 3092, column: 2 } },
                '711': { start: { line: 3069, column: 2 }, end: { line: 3073, column: 3 } },
                '712': {
                  start: { line: 3070, column: 4 },
                  end: { line: 3070, column: 51 }
                },
                '713': {
                  start: { line: 3071, column: 4 },
                  end: { line: 3071, column: 55 }
                },
                '714': {
                  start: { line: 3072, column: 4 },
                  end: { line: 3072, column: 27 }
                },
                '715': { start: { line: 3074, column: 2 }, end: { line: 3091, column: 3 } },
                '716': { start: { line: 3076, column: 4 }, end: { line: 3081, column: 5 } },
                '717': {
                  start: { line: 3077, column: 6 },
                  end: { line: 3077, column: 41 }
                },
                '718': {
                  start: { line: 3078, column: 6 },
                  end: { line: 3078, column: 43 }
                },
                '719': {
                  start: { line: 3079, column: 6 },
                  end: { line: 3079, column: 37 }
                },
                '720': {
                  start: { line: 3080, column: 6 },
                  end: { line: 3080, column: 39 }
                },
                '721': { start: { line: 3083, column: 4 }, end: { line: 3089, column: 6 } },
                '722': {
                  start: { line: 3090, column: 4 },
                  end: { line: 3090, column: 27 }
                },
                '723': { start: { line: 3093, column: 0 }, end: { line: 3096, column: 2 } },
                '724': {
                  start: { line: 3094, column: 2 },
                  end: { line: 3094, column: 23 }
                },
                '725': {
                  start: { line: 3095, column: 2 },
                  end: { line: 3095, column: 67 }
                },
                '726': { start: { line: 3097, column: 0 }, end: { line: 3105, column: 2 } },
                '727': { start: { line: 3098, column: 2 }, end: { line: 3102, column: 3 } },
                '728': {
                  start: { line: 3100, column: 4 },
                  end: { line: 3100, column: 25 }
                },
                '729': {
                  start: { line: 3101, column: 4 },
                  end: { line: 3101, column: 64 }
                },
                '730': {
                  start: { line: 3103, column: 2 },
                  end: { line: 3103, column: 25 }
                },
                '731': {
                  start: { line: 3104, column: 2 },
                  end: { line: 3104, column: 14 }
                },
                '732': { start: { line: 3106, column: 0 }, end: { line: 3109, column: 2 } },
                '733': {
                  start: { line: 3107, column: 2 },
                  end: { line: 3107, column: 23 }
                },
                '734': {
                  start: { line: 3108, column: 2 },
                  end: { line: 3108, column: 60 }
                },
                '735': { start: { line: 3110, column: 0 }, end: { line: 3113, column: 2 } },
                '736': {
                  start: { line: 3111, column: 2 },
                  end: { line: 3111, column: 20 }
                },
                '737': {
                  start: { line: 3112, column: 2 },
                  end: { line: 3112, column: 66 }
                },
                '738': { start: { line: 3115, column: 0 }, end: { line: 3122, column: 2 } },
                '739': { start: { line: 3116, column: 2 }, end: { line: 3121, column: 3 } },
                '740': {
                  start: { line: 3118, column: 4 },
                  end: { line: 3118, column: 25 }
                },
                '741': {
                  start: { line: 3119, column: 4 },
                  end: { line: 3119, column: 59 }
                },
                '742': {
                  start: { line: 3120, column: 4 },
                  end: { line: 3120, column: 27 }
                },
                '743': { start: { line: 3123, column: 0 }, end: { line: 3126, column: 2 } },
                '744': {
                  start: { line: 3124, column: 2 },
                  end: { line: 3124, column: 23 }
                },
                '745': {
                  start: { line: 3125, column: 2 },
                  end: { line: 3125, column: 43 }
                },
                '746': { start: { line: 3127, column: 0 }, end: { line: 3131, column: 2 } },
                '747': {
                  start: { line: 3128, column: 2 },
                  end: { line: 3128, column: 20 }
                },
                '748': {
                  start: { line: 3129, column: 2 },
                  end: { line: 3129, column: 25 }
                },
                '749': {
                  start: { line: 3130, column: 2 },
                  end: { line: 3130, column: 49 }
                },
                '750': { start: { line: 3141, column: 0 }, end: { line: 3143, column: 2 } },
                '751': {
                  start: { line: 3142, column: 2 },
                  end: { line: 3142, column: 24 }
                },
                '752': { start: { line: 3155, column: 0 }, end: { line: 3157, column: 2 } },
                '753': {
                  start: { line: 3156, column: 2 },
                  end: { line: 3156, column: 25 }
                },
                '754': { start: { line: 3184, column: 0 }, end: { line: 3187, column: 2 } },
                '755': {
                  start: { line: 3185, column: 2 },
                  end: { line: 3185, column: 27 }
                },
                '756': {
                  start: { line: 3186, column: 2 },
                  end: { line: 3186, column: 14 }
                },
                '757': { start: { line: 3203, column: 0 }, end: { line: 3238, column: 2 } },
                '758': { start: { line: 3207, column: 2 }, end: { line: 3217, column: 3 } },
                '759': {
                  start: { line: 3208, column: 4 },
                  end: { line: 3208, column: 50 }
                },
                '760': {
                  start: { line: 3209, column: 4 },
                  end: { line: 3209, column: 35 }
                },
                '761': { start: { line: 3211, column: 4 }, end: { line: 3216, column: 5 } },
                '762': {
                  start: { line: 3212, column: 6 },
                  end: { line: 3212, column: 33 }
                },
                '763': {
                  start: { line: 3213, column: 6 },
                  end: { line: 3213, column: 44 }
                },
                '764': {
                  start: { line: 3215, column: 6 },
                  end: { line: 3215, column: 78 }
                },
                '765': { start: { line: 3220, column: 2 }, end: { line: 3225, column: 3 } },
                '766': {
                  start: { line: 3221, column: 4 },
                  end: { line: 3221, column: 75 }
                },
                '767': {
                  start: { line: 3224, column: 4 },
                  end: { line: 3224, column: 45 }
                },
                '768': { start: { line: 3228, column: 2 }, end: { line: 3237, column: 3 } },
                '769': { start: { line: 3229, column: 4 }, end: { line: 3233, column: 5 } },
                '770': {
                  start: { line: 3230, column: 6 },
                  end: { line: 3230, column: 46 }
                },
                '771': {
                  start: { line: 3232, column: 6 },
                  end: { line: 3232, column: 40 }
                },
                '772': {
                  start: { line: 3236, column: 4 },
                  end: { line: 3236, column: 45 }
                },
                '773': { start: { line: 3247, column: 0 }, end: { line: 3253, column: 2 } },
                '774': { start: { line: 3248, column: 2 }, end: { line: 3252, column: 3 } },
                '775': {
                  start: { line: 3249, column: 4 },
                  end: { line: 3249, column: 38 }
                },
                '776': {
                  start: { line: 3251, column: 4 },
                  end: { line: 3251, column: 34 }
                },
                '777': { start: { line: 3282, column: 0 }, end: { line: 3286, column: 2 } },
                '778': {
                  start: { line: 3284, column: 2 },
                  end: { line: 3284, column: 43 }
                },
                '779': {
                  start: { line: 3285, column: 2 },
                  end: { line: 3285, column: 27 }
                },
                '780': { start: { line: 3313, column: 0 }, end: { line: 3315, column: 2 } },
                '781': {
                  start: { line: 3314, column: 2 },
                  end: { line: 3314, column: 28 }
                },
                '782': {
                  start: { line: 3321, column: 12 },
                  end: { line: 3326, column: 1 }
                },
                '783': {
                  start: { line: 3322, column: 2 },
                  end: { line: 3322, column: 27 }
                },
                '784': {
                  start: { line: 3323, column: 2 },
                  end: { line: 3323, column: 19 }
                },
                '785': {
                  start: { line: 3324, column: 2 },
                  end: { line: 3324, column: 15 }
                },
                '786': {
                  start: { line: 3325, column: 2 },
                  end: { line: 3325, column: 17 }
                },
                '787': { start: { line: 3378, column: 0 }, end: { line: 3389, column: 2 } },
                '788': {
                  start: { line: 3379, column: 13 },
                  end: { line: 3379, column: 33 }
                },
                '789': {
                  start: { line: 3381, column: 14 },
                  end: { line: 3381, column: 46 }
                },
                '790': {
                  start: { line: 3382, column: 2 },
                  end: { line: 3382, column: 23 }
                },
                '791': { start: { line: 3384, column: 2 }, end: { line: 3386, column: 3 } },
                '792': {
                  start: { line: 3385, column: 4 },
                  end: { line: 3385, column: 58 }
                },
                '793': {
                  start: { line: 3388, column: 2 },
                  end: { line: 3388, column: 12 }
                },
                '794': { start: { line: 3420, column: 0 }, end: { line: 3431, column: 2 } },
                '795': { start: { line: 3421, column: 2 }, end: { line: 3426, column: 3 } },
                '796': {
                  start: { line: 3421, column: 15 },
                  end: { line: 3421, column: 16 }
                },
                '797': { start: { line: 3422, column: 4 }, end: { line: 3425, column: 5 } },
                '798': {
                  start: { line: 3423, column: 6 },
                  end: { line: 3423, column: 22 }
                },
                '799': {
                  start: { line: 3424, column: 6 },
                  end: { line: 3424, column: 30 }
                },
                '800': { start: { line: 3428, column: 2 }, end: { line: 3430, column: 3 } },
                '801': {
                  start: { line: 3429, column: 4 },
                  end: { line: 3429, column: 33 }
                },
                '802': { start: { line: 3467, column: 0 }, end: { line: 3470, column: 2 } },
                '803': {
                  start: { line: 3468, column: 2 },
                  end: { line: 3468, column: 18 }
                },
                '804': {
                  start: { line: 3469, column: 2 },
                  end: { line: 3469, column: 31 }
                },
                '805': { start: { line: 3474, column: 0 }, end: { line: 3488, column: 2 } },
                '806': {
                  start: { line: 3475, column: 23 },
                  end: { line: 3475, column: 34 }
                },
                '807': { start: { line: 3477, column: 2 }, end: { line: 3485, column: 3 } },
                '808': {
                  start: { line: 3477, column: 15 },
                  end: { line: 3477, column: 16 }
                },
                '809': {
                  start: { line: 3478, column: 25 },
                  end: { line: 3478, column: 43 }
                },
                '810': {
                  start: { line: 3479, column: 16 },
                  end: { line: 3479, column: 33 }
                },
                '811': { start: { line: 3481, column: 4 }, end: { line: 3484, column: 5 } },
                '812': {
                  start: { line: 3483, column: 6 },
                  end: { line: 3483, column: 34 }
                },
                '813': {
                  start: { line: 3487, column: 2 },
                  end: { line: 3487, column: 32 }
                },
                '814': { start: { line: 3498, column: 0 }, end: { line: 3543, column: 2 } },
                '815': {
                  start: { line: 3504, column: 2 },
                  end: { line: 3504, column: 19 }
                },
                '816': {
                  start: { line: 3506, column: 2 },
                  end: { line: 3506, column: 22 }
                },
                '817': {
                  start: { line: 3510, column: 19 },
                  end: { line: 3510, column: 39 }
                },
                '818': {
                  start: { line: 3516, column: 2 },
                  end: { line: 3516, column: 26 }
                },
                '819': {
                  start: { line: 3522, column: 2 },
                  end: { line: 3522, column: 29 }
                },
                '820': {
                  start: { line: 3528, column: 2 },
                  end: { line: 3528, column: 24 }
                },
                '821': {
                  start: { line: 3534, column: 2 },
                  end: { line: 3534, column: 24 }
                },
                '822': {
                  start: { line: 3542, column: 2 },
                  end: { line: 3542, column: 24 }
                },
                '823': { start: { line: 3545, column: 0 }, end: { line: 3563, column: 2 } },
                '824': {
                  start: { line: 3546, column: 17 },
                  end: { line: 3546, column: 33 }
                },
                '825': { start: { line: 3547, column: 2 }, end: { line: 3561, column: 4 } },
                '826': {
                  start: { line: 3548, column: 19 },
                  end: { line: 3548, column: 39 }
                },
                '827': { start: { line: 3549, column: 4 }, end: { line: 3559, column: 5 } },
                '828': {
                  start: { line: 3551, column: 6 },
                  end: { line: 3551, column: 48 }
                },
                '829': {
                  start: { line: 3552, column: 11 },
                  end: { line: 3559, column: 5 }
                },
                '830': {
                  start: { line: 3554, column: 21 },
                  end: { line: 3554, column: 36 }
                },
                '831': {
                  start: { line: 3555, column: 18 },
                  end: { line: 3555, column: 69 }
                },
                '832': {
                  start: { line: 3556, column: 6 },
                  end: { line: 3556, column: 52 }
                },
                '833': {
                  start: { line: 3558, column: 6 },
                  end: { line: 3558, column: 36 }
                },
                '834': {
                  start: { line: 3560, column: 4 },
                  end: { line: 3560, column: 21 }
                },
                '835': {
                  start: { line: 3562, column: 2 },
                  end: { line: 3562, column: 16 }
                },
                '836': { start: { line: 3565, column: 0 }, end: { line: 3577, column: 2 } },
                '837': { start: { line: 3568, column: 2 }, end: { line: 3576, column: 3 } },
                '838': {
                  start: { line: 3569, column: 4 },
                  end: { line: 3569, column: 53 }
                },
                '839': { start: { line: 3570, column: 9 }, end: { line: 3576, column: 3 } },
                '840': {
                  start: { line: 3571, column: 4 },
                  end: { line: 3571, column: 56 }
                },
                '841': {
                  start: { line: 3573, column: 17 },
                  end: { line: 3573, column: 31 }
                },
                '842': {
                  start: { line: 3574, column: 4 },
                  end: { line: 3574, column: 39 }
                },
                '843': { start: { line: 3575, column: 4 }, end: { line: 3575, column: 19 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 57, column: 22 }, end: { line: 57, column: 23 } },
                  loc: { start: { line: 57, column: 37 }, end: { line: 66, column: 1 } },
                  line: 57
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: {
                    start: { line: 113, column: 25 },
                    end: { line: 113, column: 26 }
                  },
                  loc: { start: { line: 113, column: 40 }, end: { line: 125, column: 1 } },
                  line: 113
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 130, column: 29 },
                    end: { line: 130, column: 30 }
                  },
                  loc: { start: { line: 130, column: 41 }, end: { line: 140, column: 1 } },
                  line: 130
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 145, column: 28 },
                    end: { line: 145, column: 29 }
                  },
                  loc: { start: { line: 145, column: 42 }, end: { line: 174, column: 1 } },
                  line: 145
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 149, column: 24 },
                    end: { line: 149, column: 25 }
                  },
                  loc: { start: { line: 149, column: 35 }, end: { line: 158, column: 5 } },
                  line: 149
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 166, column: 19 },
                    end: { line: 166, column: 20 }
                  },
                  loc: { start: { line: 166, column: 31 }, end: { line: 168, column: 5 } },
                  line: 166
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 196, column: 30 },
                    end: { line: 196, column: 31 }
                  },
                  loc: { start: { line: 196, column: 42 }, end: { line: 202, column: 1 } },
                  line: 196
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 199, column: 29 },
                    end: { line: 199, column: 30 }
                  },
                  loc: { start: { line: 199, column: 35 }, end: { line: 199, column: 73 } },
                  line: 199
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 201, column: 25 },
                    end: { line: 201, column: 26 }
                  },
                  loc: { start: { line: 201, column: 31 }, end: { line: 201, column: 42 } },
                  line: 201
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 266, column: 31 },
                    end: { line: 266, column: 32 }
                  },
                  loc: { start: { line: 266, column: 45 }, end: { line: 269, column: 1 } },
                  line: 266
                },
                '10': {
                  name: '(anonymous_10)',
                  decl: {
                    start: { line: 304, column: 29 },
                    end: { line: 304, column: 30 }
                  },
                  loc: { start: { line: 304, column: 43 }, end: { line: 307, column: 1 } },
                  line: 304
                },
                '11': {
                  name: 'addElement',
                  decl: { start: { line: 312, column: 9 }, end: { line: 312, column: 19 } },
                  loc: { start: { line: 312, column: 39 }, end: { line: 320, column: 1 } },
                  line: 312
                },
                '12': {
                  name: '(anonymous_12)',
                  decl: {
                    start: { line: 335, column: 25 },
                    end: { line: 335, column: 26 }
                  },
                  loc: { start: { line: 335, column: 45 }, end: { line: 339, column: 1 } },
                  line: 335
                },
                '13': {
                  name: '(anonymous_13)',
                  decl: {
                    start: { line: 355, column: 23 },
                    end: { line: 355, column: 24 }
                  },
                  loc: { start: { line: 355, column: 43 }, end: { line: 359, column: 1 } },
                  line: 355
                },
                '14': {
                  name: '(anonymous_14)',
                  decl: {
                    start: { line: 373, column: 26 },
                    end: { line: 373, column: 27 }
                  },
                  loc: { start: { line: 373, column: 46 }, end: { line: 377, column: 1 } },
                  line: 373
                },
                '15': {
                  name: '(anonymous_15)',
                  decl: {
                    start: { line: 404, column: 25 },
                    end: { line: 404, column: 26 }
                  },
                  loc: { start: { line: 404, column: 36 }, end: { line: 424, column: 1 } },
                  line: 404
                },
                '16': {
                  name: '(anonymous_16)',
                  decl: {
                    start: { line: 417, column: 31 },
                    end: { line: 417, column: 32 }
                  },
                  loc: { start: { line: 417, column: 42 }, end: { line: 422, column: 3 } },
                  line: 417
                },
                '17': {
                  name: '(anonymous_17)',
                  decl: {
                    start: { line: 441, column: 23 },
                    end: { line: 441, column: 24 }
                  },
                  loc: { start: { line: 441, column: 52 }, end: { line: 448, column: 1 } },
                  line: 441
                },
                '18': {
                  name: '(anonymous_18)',
                  decl: {
                    start: { line: 492, column: 28 },
                    end: { line: 492, column: 29 }
                  },
                  loc: { start: { line: 492, column: 60 }, end: { line: 505, column: 1 } },
                  line: 492
                },
                '19': {
                  name: '(anonymous_19)',
                  decl: {
                    start: { line: 533, column: 28 },
                    end: { line: 533, column: 29 }
                  },
                  loc: { start: { line: 533, column: 51 }, end: { line: 539, column: 1 } },
                  line: 533
                },
                '20': {
                  name: '(anonymous_20)',
                  decl: {
                    start: { line: 567, column: 30 },
                    end: { line: 567, column: 31 }
                  },
                  loc: { start: { line: 567, column: 41 }, end: { line: 607, column: 1 } },
                  line: 567
                },
                '21': {
                  name: '(anonymous_21)',
                  decl: {
                    start: { line: 575, column: 17 },
                    end: { line: 575, column: 18 }
                  },
                  loc: { start: { line: 575, column: 28 }, end: { line: 587, column: 3 } },
                  line: 575
                },
                '22': {
                  name: '(anonymous_22)',
                  decl: {
                    start: { line: 588, column: 15 },
                    end: { line: 588, column: 16 }
                  },
                  loc: { start: { line: 588, column: 29 }, end: { line: 591, column: 3 } },
                  line: 588
                },
                '23': {
                  name: '(anonymous_23)',
                  decl: {
                    start: { line: 666, column: 28 },
                    end: { line: 666, column: 29 }
                  },
                  loc: { start: { line: 666, column: 39 }, end: { line: 755, column: 1 } },
                  line: 666
                },
                '24': {
                  name: '(anonymous_24)',
                  decl: {
                    start: { line: 685, column: 16 },
                    end: { line: 685, column: 17 }
                  },
                  loc: { start: { line: 685, column: 38 }, end: { line: 716, column: 3 } },
                  line: 685
                },
                '25': {
                  name: '(anonymous_25)',
                  decl: {
                    start: { line: 718, column: 18 },
                    end: { line: 718, column: 19 }
                  },
                  loc: { start: { line: 718, column: 34 }, end: { line: 738, column: 3 } },
                  line: 718
                },
                '26': {
                  name: '(anonymous_26)',
                  decl: {
                    start: { line: 740, column: 17 },
                    end: { line: 740, column: 18 }
                  },
                  loc: { start: { line: 740, column: 33 }, end: { line: 752, column: 3 } },
                  line: 740
                },
                '27': {
                  name: '(anonymous_27)',
                  decl: {
                    start: { line: 824, column: 27 },
                    end: { line: 824, column: 28 }
                  },
                  loc: { start: { line: 824, column: 38 }, end: { line: 933, column: 1 } },
                  line: 824
                },
                '28': {
                  name: '(anonymous_28)',
                  decl: {
                    start: { line: 845, column: 23 },
                    end: { line: 845, column: 24 }
                  },
                  loc: { start: { line: 846, column: 4 }, end: { line: 846, column: 57 } },
                  line: 846
                },
                '29': {
                  name: '(anonymous_29)',
                  decl: {
                    start: { line: 847, column: 22 },
                    end: { line: 847, column: 23 }
                  },
                  loc: { start: { line: 847, column: 28 }, end: { line: 847, column: 77 } },
                  line: 847
                },
                '30': {
                  name: '(anonymous_30)',
                  decl: {
                    start: { line: 849, column: 26 },
                    end: { line: 849, column: 27 }
                  },
                  loc: { start: { line: 849, column: 37 }, end: { line: 851, column: 3 } },
                  line: 849
                },
                '31': {
                  name: '(anonymous_31)',
                  decl: {
                    start: { line: 853, column: 16 },
                    end: { line: 853, column: 17 }
                  },
                  loc: { start: { line: 853, column: 39 }, end: { line: 883, column: 3 } },
                  line: 853
                },
                '32': {
                  name: '(anonymous_32)',
                  decl: {
                    start: { line: 885, column: 16 },
                    end: { line: 885, column: 17 }
                  },
                  loc: { start: { line: 885, column: 32 }, end: { line: 893, column: 3 } },
                  line: 885
                },
                '33': {
                  name: '(anonymous_33)',
                  decl: {
                    start: { line: 895, column: 15 },
                    end: { line: 895, column: 16 }
                  },
                  loc: { start: { line: 895, column: 26 }, end: { line: 904, column: 3 } },
                  line: 895
                },
                '34': {
                  name: '(anonymous_34)',
                  decl: {
                    start: { line: 906, column: 18 },
                    end: { line: 906, column: 19 }
                  },
                  loc: { start: { line: 906, column: 34 }, end: { line: 924, column: 3 } },
                  line: 906
                },
                '35': {
                  name: '(anonymous_35)',
                  decl: {
                    start: { line: 926, column: 17 },
                    end: { line: 926, column: 18 }
                  },
                  loc: { start: { line: 926, column: 48 }, end: { line: 930, column: 3 } },
                  line: 926
                },
                '36': {
                  name: '(anonymous_36)',
                  decl: {
                    start: { line: 987, column: 33 },
                    end: { line: 987, column: 34 }
                  },
                  loc: { start: { line: 987, column: 49 }, end: { line: 1021, column: 1 } },
                  line: 987
                },
                '37': {
                  name: '(anonymous_37)',
                  decl: {
                    start: { line: 1009, column: 15 },
                    end: { line: 1009, column: 16 }
                  },
                  loc: {
                    start: { line: 1009, column: 26 },
                    end: { line: 1019, column: 3 }
                  },
                  line: 1009
                },
                '38': {
                  name: '(anonymous_38)',
                  decl: {
                    start: { line: 1053, column: 27 },
                    end: { line: 1053, column: 28 }
                  },
                  loc: {
                    start: { line: 1053, column: 63 },
                    end: { line: 1059, column: 1 }
                  },
                  line: 1053
                },
                '39': {
                  name: '(anonymous_39)',
                  decl: {
                    start: { line: 1097, column: 31 },
                    end: { line: 1097, column: 32 }
                  },
                  loc: {
                    start: { line: 1097, column: 68 },
                    end: { line: 1119, column: 1 }
                  },
                  line: 1097
                },
                '40': {
                  name: '(anonymous_40)',
                  decl: {
                    start: { line: 1100, column: 27 },
                    end: { line: 1100, column: 28 }
                  },
                  loc: {
                    start: { line: 1100, column: 43 },
                    end: { line: 1104, column: 3 }
                  },
                  line: 1100
                },
                '41': {
                  name: 'createMedia',
                  decl: {
                    start: { line: 1124, column: 9 },
                    end: { line: 1124, column: 20 }
                  },
                  loc: {
                    start: { line: 1124, column: 49 },
                    end: { line: 1166, column: 1 }
                  },
                  line: 1124
                },
                '42': {
                  name: '(anonymous_42)',
                  decl: {
                    start: { line: 1140, column: 28 },
                    end: { line: 1140, column: 29 }
                  },
                  loc: {
                    start: { line: 1140, column: 34 },
                    end: { line: 1143, column: 5 }
                  },
                  line: 1140
                },
                '43': {
                  name: '(anonymous_43)',
                  decl: {
                    start: { line: 1151, column: 41 },
                    end: { line: 1151, column: 42 }
                  },
                  loc: {
                    start: { line: 1151, column: 47 },
                    end: { line: 1163, column: 3 }
                  },
                  line: 1151
                },
                '44': {
                  name: '(anonymous_44)',
                  decl: {
                    start: { line: 1209, column: 27 },
                    end: { line: 1209, column: 28 }
                  },
                  loc: {
                    start: { line: 1209, column: 51 },
                    end: { line: 1212, column: 1 }
                  },
                  line: 1209
                },
                '45': {
                  name: '(anonymous_45)',
                  decl: {
                    start: { line: 1248, column: 27 },
                    end: { line: 1248, column: 28 }
                  },
                  loc: {
                    start: { line: 1248, column: 51 },
                    end: { line: 1251, column: 1 }
                  },
                  line: 1248
                },
                '46': {
                  name: '(anonymous_46)',
                  decl: {
                    start: { line: 1278, column: 40 },
                    end: { line: 1278, column: 41 }
                  },
                  loc: {
                    start: { line: 1278, column: 62 },
                    end: { line: 1295, column: 3 }
                  },
                  line: 1278
                },
                '47': {
                  name: '(anonymous_47)',
                  decl: {
                    start: { line: 1292, column: 23 },
                    end: { line: 1292, column: 24 }
                  },
                  loc: {
                    start: { line: 1292, column: 49 },
                    end: { line: 1294, column: 5 }
                  },
                  line: 1292
                },
                '48': {
                  name: '(anonymous_48)',
                  decl: {
                    start: { line: 1380, column: 29 },
                    end: { line: 1380, column: 30 }
                  },
                  loc: {
                    start: { line: 1380, column: 40 },
                    end: { line: 1433, column: 1 }
                  },
                  line: 1380
                },
                '49': {
                  name: '(anonymous_49)',
                  decl: {
                    start: { line: 1404, column: 56 },
                    end: { line: 1404, column: 57 }
                  },
                  loc: {
                    start: { line: 1404, column: 73 },
                    end: { line: 1414, column: 3 }
                  },
                  line: 1404
                },
                '50': {
                  name: '(anonymous_50)',
                  decl: {
                    start: { line: 1419, column: 48 },
                    end: { line: 1419, column: 49 }
                  },
                  loc: {
                    start: { line: 1419, column: 59 },
                    end: { line: 1431, column: 3 }
                  },
                  line: 1419
                },
                '51': {
                  name: '(anonymous_51)',
                  decl: {
                    start: { line: 1449, column: 29 },
                    end: { line: 1449, column: 30 }
                  },
                  loc: {
                    start: { line: 1449, column: 52 },
                    end: { line: 1456, column: 1 }
                  },
                  line: 1449
                },
                '52': {
                  name: '(anonymous_52)',
                  decl: {
                    start: { line: 1475, column: 32 },
                    end: { line: 1475, column: 33 }
                  },
                  loc: {
                    start: { line: 1475, column: 44 },
                    end: { line: 1484, column: 1 }
                  },
                  line: 1475
                },
                '53': {
                  name: '(anonymous_53)',
                  decl: {
                    start: { line: 1511, column: 35 },
                    end: { line: 1511, column: 36 }
                  },
                  loc: {
                    start: { line: 1511, column: 47 },
                    end: { line: 1515, column: 1 }
                  },
                  line: 1511
                },
                '54': {
                  name: '(anonymous_54)',
                  decl: {
                    start: { line: 1542, column: 32 },
                    end: { line: 1542, column: 33 }
                  },
                  loc: {
                    start: { line: 1542, column: 44 },
                    end: { line: 1544, column: 1 }
                  },
                  line: 1542
                },
                '55': {
                  name: '(anonymous_55)',
                  decl: {
                    start: { line: 1567, column: 35 },
                    end: { line: 1567, column: 36 }
                  },
                  loc: {
                    start: { line: 1567, column: 47 },
                    end: { line: 1577, column: 1 }
                  },
                  line: 1567
                },
                '56': {
                  name: '(anonymous_56)',
                  decl: {
                    start: { line: 1613, column: 29 },
                    end: { line: 1613, column: 30 }
                  },
                  loc: {
                    start: { line: 1613, column: 49 },
                    end: { line: 1630, column: 1 }
                  },
                  line: 1613
                },
                '57': {
                  name: '(anonymous_57)',
                  decl: {
                    start: { line: 1651, column: 30 },
                    end: { line: 1651, column: 31 }
                  },
                  loc: {
                    start: { line: 1651, column: 46 },
                    end: { line: 1681, column: 1 }
                  },
                  line: 1651
                },
                '58': {
                  name: '(anonymous_58)',
                  decl: {
                    start: { line: 1710, column: 28 },
                    end: { line: 1710, column: 29 }
                  },
                  loc: {
                    start: { line: 1710, column: 39 },
                    end: { line: 1720, column: 1 }
                  },
                  line: 1710
                },
                '59': {
                  name: '(anonymous_59)',
                  decl: {
                    start: { line: 1762, column: 32 },
                    end: { line: 1762, column: 33 }
                  },
                  loc: {
                    start: { line: 1762, column: 43 },
                    end: { line: 1784, column: 1 }
                  },
                  line: 1762
                },
                '60': {
                  name: '(anonymous_60)',
                  decl: {
                    start: { line: 1787, column: 34 },
                    end: { line: 1787, column: 35 }
                  },
                  loc: {
                    start: { line: 1787, column: 45 },
                    end: { line: 1816, column: 1 }
                  },
                  line: 1787
                },
                '61': {
                  name: '(anonymous_61)',
                  decl: {
                    start: { line: 1819, column: 31 },
                    end: { line: 1819, column: 32 }
                  },
                  loc: {
                    start: { line: 1819, column: 42 },
                    end: { line: 1840, column: 1 }
                  },
                  line: 1819
                },
                '62': {
                  name: '(anonymous_62)',
                  decl: {
                    start: { line: 1887, column: 29 },
                    end: { line: 1887, column: 30 }
                  },
                  loc: {
                    start: { line: 1887, column: 49 },
                    end: { line: 1935, column: 1 }
                  },
                  line: 1887
                },
                '63': {
                  name: '(anonymous_63)',
                  decl: {
                    start: { line: 1958, column: 33 },
                    end: { line: 1958, column: 34 }
                  },
                  loc: {
                    start: { line: 1958, column: 55 },
                    end: { line: 1979, column: 1 }
                  },
                  line: 1958
                },
                '64': {
                  name: '(anonymous_64)',
                  decl: {
                    start: { line: 2012, column: 39 },
                    end: { line: 2012, column: 40 }
                  },
                  loc: {
                    start: { line: 2012, column: 54 },
                    end: { line: 2024, column: 1 }
                  },
                  line: 2012
                },
                '65': {
                  name: '(anonymous_65)',
                  decl: {
                    start: { line: 2061, column: 29 },
                    end: { line: 2061, column: 30 }
                  },
                  loc: {
                    start: { line: 2061, column: 40 },
                    end: { line: 2070, column: 1 }
                  },
                  line: 2061
                },
                '66': {
                  name: '(anonymous_66)',
                  decl: {
                    start: { line: 2085, column: 28 },
                    end: { line: 2085, column: 29 }
                  },
                  loc: {
                    start: { line: 2085, column: 39 },
                    end: { line: 2088, column: 1 }
                  },
                  line: 2085
                },
                '67': {
                  name: '(anonymous_67)',
                  decl: {
                    start: { line: 2101, column: 28 },
                    end: { line: 2101, column: 29 }
                  },
                  loc: {
                    start: { line: 2101, column: 39 },
                    end: { line: 2104, column: 1 }
                  },
                  line: 2101
                },
                '68': {
                  name: '(anonymous_68)',
                  decl: {
                    start: { line: 2136, column: 28 },
                    end: { line: 2136, column: 29 }
                  },
                  loc: {
                    start: { line: 2136, column: 43 },
                    end: { line: 2185, column: 1 }
                  },
                  line: 2136
                },
                '69': {
                  name: '(anonymous_69)',
                  decl: {
                    start: { line: 2196, column: 30 },
                    end: { line: 2196, column: 31 }
                  },
                  loc: {
                    start: { line: 2196, column: 41 },
                    end: { line: 2223, column: 1 }
                  },
                  line: 2196
                },
                '70': {
                  name: '(anonymous_70)',
                  decl: {
                    start: { line: 2204, column: 21 },
                    end: { line: 2204, column: 22 }
                  },
                  loc: {
                    start: { line: 2204, column: 30 },
                    end: { line: 2206, column: 7 }
                  },
                  line: 2204
                },
                '71': {
                  name: '(anonymous_71)',
                  decl: {
                    start: { line: 2284, column: 28 },
                    end: { line: 2284, column: 29 }
                  },
                  loc: {
                    start: { line: 2284, column: 52 },
                    end: { line: 2328, column: 1 }
                  },
                  line: 2284
                },
                '72': {
                  name: '(anonymous_72)',
                  decl: {
                    start: { line: 2290, column: 29 },
                    end: { line: 2290, column: 30 }
                  },
                  loc: {
                    start: { line: 2290, column: 43 },
                    end: { line: 2292, column: 7 }
                  },
                  line: 2290
                },
                '73': {
                  name: '(anonymous_73)',
                  decl: {
                    start: { line: 2306, column: 6 },
                    end: { line: 2306, column: 7 }
                  },
                  loc: {
                    start: { line: 2306, column: 20 },
                    end: { line: 2320, column: 7 }
                  },
                  line: 2306
                },
                '74': {
                  name: '(anonymous_74)',
                  decl: {
                    start: { line: 2344, column: 18 },
                    end: { line: 2344, column: 19 }
                  },
                  loc: {
                    start: { line: 2344, column: 39 },
                    end: { line: 2420, column: 1 }
                  },
                  line: 2344
                },
                '75': {
                  name: '(anonymous_75)',
                  decl: {
                    start: { line: 2396, column: 9 },
                    end: { line: 2396, column: 10 }
                  },
                  loc: {
                    start: { line: 2396, column: 20 },
                    end: { line: 2402, column: 5 }
                  },
                  line: 2396
                },
                '76': {
                  name: '(anonymous_76)',
                  decl: {
                    start: { line: 2403, column: 9 },
                    end: { line: 2403, column: 10 }
                  },
                  loc: {
                    start: { line: 2403, column: 28 },
                    end: { line: 2412, column: 5 }
                  },
                  line: 2403
                },
                '77': {
                  name: '(anonymous_77)',
                  decl: {
                    start: { line: 2416, column: 18 },
                    end: { line: 2416, column: 19 }
                  },
                  loc: {
                    start: { line: 2416, column: 29 },
                    end: { line: 2416, column: 31 }
                  },
                  line: 2416
                },
                '78': {
                  name: '(anonymous_78)',
                  decl: {
                    start: { line: 2417, column: 21 },
                    end: { line: 2417, column: 22 }
                  },
                  loc: {
                    start: { line: 2417, column: 32 },
                    end: { line: 2419, column: 3 }
                  },
                  line: 2417
                },
                '79': {
                  name: '(anonymous_79)',
                  decl: {
                    start: { line: 2461, column: 33 },
                    end: { line: 2461, column: 34 }
                  },
                  loc: {
                    start: { line: 2461, column: 44 },
                    end: { line: 2485, column: 1 }
                  },
                  line: 2461
                },
                '80': {
                  name: '(anonymous_80)',
                  decl: {
                    start: { line: 2474, column: 18 },
                    end: { line: 2474, column: 19 }
                  },
                  loc: {
                    start: { line: 2474, column: 23 },
                    end: { line: 2482, column: 5 }
                  },
                  line: 2474
                },
                '81': {
                  name: '(anonymous_81)',
                  decl: {
                    start: { line: 2545, column: 33 },
                    end: { line: 2545, column: 34 }
                  },
                  loc: {
                    start: { line: 2545, column: 44 },
                    end: { line: 2549, column: 1 }
                  },
                  line: 2545
                },
                '82': {
                  name: '(anonymous_82)',
                  decl: {
                    start: { line: 2608, column: 34 },
                    end: { line: 2608, column: 35 }
                  },
                  loc: {
                    start: { line: 2608, column: 45 },
                    end: { line: 2611, column: 1 }
                  },
                  line: 2608
                },
                '83': {
                  name: '(anonymous_83)',
                  decl: {
                    start: { line: 2664, column: 33 },
                    end: { line: 2664, column: 34 }
                  },
                  loc: {
                    start: { line: 2664, column: 44 },
                    end: { line: 2668, column: 1 }
                  },
                  line: 2664
                },
                '84': {
                  name: '(anonymous_84)',
                  decl: {
                    start: { line: 2716, column: 35 },
                    end: { line: 2716, column: 36 }
                  },
                  loc: {
                    start: { line: 2716, column: 46 },
                    end: { line: 2719, column: 1 }
                  },
                  line: 2716
                },
                '85': {
                  name: '(anonymous_85)',
                  decl: {
                    start: { line: 2727, column: 56 },
                    end: { line: 2727, column: 57 }
                  },
                  loc: {
                    start: { line: 2727, column: 67 },
                    end: { line: 2733, column: 1 }
                  },
                  line: 2727
                },
                '86': {
                  name: '(anonymous_86)',
                  decl: {
                    start: { line: 2728, column: 29 },
                    end: { line: 2728, column: 30 }
                  },
                  loc: {
                    start: { line: 2728, column: 35 },
                    end: { line: 2728, column: 70 }
                  },
                  line: 2728
                },
                '87': {
                  name: '(anonymous_87)',
                  decl: {
                    start: { line: 2729, column: 36 },
                    end: { line: 2729, column: 37 }
                  },
                  loc: {
                    start: { line: 2729, column: 42 },
                    end: { line: 2729, column: 63 }
                  },
                  line: 2729
                },
                '88': {
                  name: '(anonymous_88)',
                  decl: {
                    start: { line: 2780, column: 37 },
                    end: { line: 2780, column: 38 }
                  },
                  loc: {
                    start: { line: 2780, column: 51 },
                    end: { line: 2800, column: 1 }
                  },
                  line: 2780
                },
                '89': {
                  name: '(anonymous_89)',
                  decl: {
                    start: { line: 2786, column: 39 },
                    end: { line: 2786, column: 40 }
                  },
                  loc: {
                    start: { line: 2786, column: 45 },
                    end: { line: 2786, column: 79 }
                  },
                  line: 2786
                },
                '90': {
                  name: '(anonymous_90)',
                  decl: {
                    start: { line: 2880, column: 35 },
                    end: { line: 2880, column: 36 }
                  },
                  loc: {
                    start: { line: 2880, column: 49 },
                    end: { line: 2886, column: 1 }
                  },
                  line: 2880
                },
                '91': {
                  name: '(anonymous_91)',
                  decl: {
                    start: { line: 2965, column: 34 },
                    end: { line: 2965, column: 35 }
                  },
                  loc: {
                    start: { line: 2965, column: 48 },
                    end: { line: 2975, column: 1 }
                  },
                  line: 2965
                },
                '92': {
                  name: '(anonymous_92)',
                  decl: {
                    start: { line: 3027, column: 33 },
                    end: { line: 3027, column: 34 }
                  },
                  loc: {
                    start: { line: 3027, column: 47 },
                    end: { line: 3034, column: 1 }
                  },
                  line: 3027
                },
                '93': {
                  name: '(anonymous_93)',
                  decl: {
                    start: { line: 3064, column: 37 },
                    end: { line: 3064, column: 38 }
                  },
                  loc: {
                    start: { line: 3064, column: 48 },
                    end: { line: 3066, column: 1 }
                  },
                  line: 3064
                },
                '94': {
                  name: '(anonymous_94)',
                  decl: {
                    start: { line: 3068, column: 42 },
                    end: { line: 3068, column: 43 }
                  },
                  loc: {
                    start: { line: 3068, column: 53 },
                    end: { line: 3092, column: 1 }
                  },
                  line: 3068
                },
                '95': {
                  name: '(anonymous_95)',
                  decl: {
                    start: { line: 3093, column: 39 },
                    end: { line: 3093, column: 40 }
                  },
                  loc: {
                    start: { line: 3093, column: 50 },
                    end: { line: 3096, column: 1 }
                  },
                  line: 3093
                },
                '96': {
                  name: '(anonymous_96)',
                  decl: {
                    start: { line: 3097, column: 41 },
                    end: { line: 3097, column: 42 }
                  },
                  loc: {
                    start: { line: 3097, column: 62 },
                    end: { line: 3105, column: 1 }
                  },
                  line: 3097
                },
                '97': {
                  name: '(anonymous_97)',
                  decl: {
                    start: { line: 3106, column: 32 },
                    end: { line: 3106, column: 33 }
                  },
                  loc: {
                    start: { line: 3106, column: 43 },
                    end: { line: 3109, column: 1 }
                  },
                  line: 3106
                },
                '98': {
                  name: '(anonymous_98)',
                  decl: {
                    start: { line: 3110, column: 38 },
                    end: { line: 3110, column: 39 }
                  },
                  loc: {
                    start: { line: 3110, column: 49 },
                    end: { line: 3113, column: 1 }
                  },
                  line: 3110
                },
                '99': {
                  name: '(anonymous_99)',
                  decl: {
                    start: { line: 3115, column: 32 },
                    end: { line: 3115, column: 33 }
                  },
                  loc: {
                    start: { line: 3115, column: 57 },
                    end: { line: 3122, column: 1 }
                  },
                  line: 3115
                },
                '100': {
                  name: '(anonymous_100)',
                  decl: {
                    start: { line: 3123, column: 33 },
                    end: { line: 3123, column: 34 }
                  },
                  loc: {
                    start: { line: 3123, column: 44 },
                    end: { line: 3126, column: 1 }
                  },
                  line: 3123
                },
                '101': {
                  name: '(anonymous_101)',
                  decl: {
                    start: { line: 3127, column: 33 },
                    end: { line: 3127, column: 34 }
                  },
                  loc: {
                    start: { line: 3127, column: 44 },
                    end: { line: 3131, column: 1 }
                  },
                  line: 3127
                },
                '102': {
                  name: '(anonymous_102)',
                  decl: {
                    start: { line: 3141, column: 39 },
                    end: { line: 3141, column: 40 }
                  },
                  loc: {
                    start: { line: 3141, column: 50 },
                    end: { line: 3143, column: 1 }
                  },
                  line: 3141
                },
                '103': {
                  name: '(anonymous_103)',
                  decl: {
                    start: { line: 3155, column: 40 },
                    end: { line: 3155, column: 41 }
                  },
                  loc: {
                    start: { line: 3155, column: 56 },
                    end: { line: 3157, column: 1 }
                  },
                  line: 3155
                },
                '104': {
                  name: '(anonymous_104)',
                  decl: {
                    start: { line: 3184, column: 36 },
                    end: { line: 3184, column: 37 }
                  },
                  loc: {
                    start: { line: 3184, column: 55 },
                    end: { line: 3187, column: 1 }
                  },
                  line: 3184
                },
                '105': {
                  name: '(anonymous_105)',
                  decl: {
                    start: { line: 3203, column: 36 },
                    end: { line: 3203, column: 37 }
                  },
                  loc: {
                    start: { line: 3203, column: 50 },
                    end: { line: 3238, column: 1 }
                  },
                  line: 3203
                },
                '106': {
                  name: '(anonymous_106)',
                  decl: {
                    start: { line: 3247, column: 39 },
                    end: { line: 3247, column: 40 }
                  },
                  loc: {
                    start: { line: 3247, column: 50 },
                    end: { line: 3253, column: 1 }
                  },
                  line: 3247
                },
                '107': {
                  name: '(anonymous_107)',
                  decl: {
                    start: { line: 3282, column: 41 },
                    end: { line: 3282, column: 42 }
                  },
                  loc: {
                    start: { line: 3282, column: 52 },
                    end: { line: 3286, column: 1 }
                  },
                  line: 3282
                },
                '108': {
                  name: '(anonymous_108)',
                  decl: {
                    start: { line: 3313, column: 41 },
                    end: { line: 3313, column: 42 }
                  },
                  loc: {
                    start: { line: 3313, column: 52 },
                    end: { line: 3315, column: 1 }
                  },
                  line: 3313
                },
                '109': {
                  name: '(anonymous_109)',
                  decl: {
                    start: { line: 3321, column: 12 },
                    end: { line: 3321, column: 13 }
                  },
                  loc: {
                    start: { line: 3321, column: 46 },
                    end: { line: 3326, column: 1 }
                  },
                  line: 3321
                },
                '110': {
                  name: '(anonymous_110)',
                  decl: {
                    start: { line: 3378, column: 35 },
                    end: { line: 3378, column: 36 }
                  },
                  loc: {
                    start: { line: 3378, column: 65 },
                    end: { line: 3389, column: 1 }
                  },
                  line: 3378
                },
                '111': {
                  name: '(anonymous_111)',
                  decl: {
                    start: { line: 3420, column: 38 },
                    end: { line: 3420, column: 39 }
                  },
                  loc: {
                    start: { line: 3420, column: 51 },
                    end: { line: 3431, column: 1 }
                  },
                  line: 3420
                },
                '112': {
                  name: '(anonymous_112)',
                  decl: {
                    start: { line: 3467, column: 38 },
                    end: { line: 3467, column: 39 }
                  },
                  loc: {
                    start: { line: 3467, column: 49 },
                    end: { line: 3470, column: 1 }
                  },
                  line: 3467
                },
                '113': {
                  name: '(anonymous_113)',
                  decl: {
                    start: { line: 3474, column: 42 },
                    end: { line: 3474, column: 43 }
                  },
                  loc: {
                    start: { line: 3474, column: 53 },
                    end: { line: 3488, column: 1 }
                  },
                  line: 3474
                },
                '114': {
                  name: '(anonymous_114)',
                  decl: {
                    start: { line: 3498, column: 10 },
                    end: { line: 3498, column: 11 }
                  },
                  loc: {
                    start: { line: 3498, column: 32 },
                    end: { line: 3543, column: 1 }
                  },
                  line: 3498
                },
                '115': {
                  name: '(anonymous_115)',
                  decl: {
                    start: { line: 3545, column: 24 },
                    end: { line: 3545, column: 25 }
                  },
                  loc: {
                    start: { line: 3545, column: 52 },
                    end: { line: 3563, column: 1 }
                  },
                  line: 3545
                },
                '116': {
                  name: '(anonymous_116)',
                  decl: {
                    start: { line: 3547, column: 18 },
                    end: { line: 3547, column: 19 }
                  },
                  loc: {
                    start: { line: 3547, column: 30 },
                    end: { line: 3561, column: 3 }
                  },
                  line: 3547
                },
                '117': {
                  name: '(anonymous_117)',
                  decl: {
                    start: { line: 3565, column: 16 },
                    end: { line: 3565, column: 17 }
                  },
                  loc: {
                    start: { line: 3565, column: 38 },
                    end: { line: 3577, column: 1 }
                  },
                  line: 3565
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 61, column: 2 }, end: { line: 65, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 61, column: 2 }, end: { line: 65, column: 3 } },
                    { start: { line: 61, column: 2 }, end: { line: 65, column: 3 } }
                  ],
                  line: 61
                },
                '1': {
                  loc: { start: { line: 118, column: 2 }, end: { line: 123, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 118, column: 2 }, end: { line: 123, column: 3 } },
                    { start: { line: 118, column: 2 }, end: { line: 123, column: 3 } }
                  ],
                  line: 118
                },
                '2': {
                  loc: { start: { line: 132, column: 2 }, end: { line: 138, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 132, column: 2 }, end: { line: 138, column: 3 } },
                    { start: { line: 132, column: 2 }, end: { line: 138, column: 3 } }
                  ],
                  line: 132
                },
                '3': {
                  loc: { start: { line: 133, column: 16 }, end: { line: 133, column: 53 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 133, column: 16 }, end: { line: 133, column: 41 } },
                    { start: { line: 133, column: 45 }, end: { line: 133, column: 53 } }
                  ],
                  line: 133
                },
                '4': {
                  loc: { start: { line: 134, column: 9 }, end: { line: 138, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 134, column: 9 }, end: { line: 138, column: 3 } },
                    { start: { line: 134, column: 9 }, end: { line: 138, column: 3 } }
                  ],
                  line: 134
                },
                '5': {
                  loc: { start: { line: 136, column: 9 }, end: { line: 138, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 136, column: 9 }, end: { line: 138, column: 3 } },
                    { start: { line: 136, column: 9 }, end: { line: 138, column: 3 } }
                  ],
                  line: 136
                },
                '6': {
                  loc: { start: { line: 147, column: 2 }, end: { line: 173, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 147, column: 2 }, end: { line: 173, column: 3 } },
                    { start: { line: 147, column: 2 }, end: { line: 173, column: 3 } }
                  ],
                  line: 147
                },
                '7': {
                  loc: { start: { line: 147, column: 6 }, end: { line: 147, column: 56 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 147, column: 6 }, end: { line: 147, column: 29 } },
                    { start: { line: 147, column: 33 }, end: { line: 147, column: 56 } }
                  ],
                  line: 147
                },
                '8': {
                  loc: { start: { line: 150, column: 6 }, end: { line: 156, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 150, column: 6 }, end: { line: 156, column: 7 } },
                    { start: { line: 150, column: 6 }, end: { line: 156, column: 7 } }
                  ],
                  line: 150
                },
                '9': {
                  loc: { start: { line: 152, column: 13 }, end: { line: 156, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 152, column: 13 }, end: { line: 156, column: 7 } },
                    { start: { line: 152, column: 13 }, end: { line: 156, column: 7 } }
                  ],
                  line: 152
                },
                '10': {
                  loc: { start: { line: 160, column: 9 }, end: { line: 173, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 160, column: 9 }, end: { line: 173, column: 3 } },
                    { start: { line: 160, column: 9 }, end: { line: 173, column: 3 } }
                  ],
                  line: 160
                },
                '11': {
                  loc: { start: { line: 160, column: 13 }, end: { line: 160, column: 63 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 160, column: 13 }, end: { line: 160, column: 36 } },
                    { start: { line: 160, column: 40 }, end: { line: 160, column: 63 } }
                  ],
                  line: 160
                },
                '12': {
                  loc: { start: { line: 162, column: 9 }, end: { line: 173, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 162, column: 9 }, end: { line: 173, column: 3 } },
                    { start: { line: 162, column: 9 }, end: { line: 173, column: 3 } }
                  ],
                  line: 162
                },
                '13': {
                  loc: { start: { line: 164, column: 9 }, end: { line: 173, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 164, column: 9 }, end: { line: 173, column: 3 } },
                    { start: { line: 164, column: 9 }, end: { line: 173, column: 3 } }
                  ],
                  line: 164
                },
                '14': {
                  loc: { start: { line: 165, column: 4 }, end: { line: 168, column: 6 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 165, column: 4 }, end: { line: 165, column: 23 } },
                    { start: { line: 166, column: 4 }, end: { line: 168, column: 6 } }
                  ],
                  line: 165
                },
                '15': {
                  loc: { start: { line: 167, column: 13 }, end: { line: 167, column: 59 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 167, column: 13 }, end: { line: 167, column: 34 } },
                    { start: { line: 167, column: 38 }, end: { line: 167, column: 59 } }
                  ],
                  line: 167
                },
                '16': {
                  loc: { start: { line: 313, column: 15 }, end: { line: 313, column: 64 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 313, column: 33 }, end: { line: 313, column: 48 } },
                    { start: { line: 313, column: 51 }, end: { line: 313, column: 64 } }
                  ],
                  line: 313
                },
                '17': {
                  loc: { start: { line: 315, column: 12 }, end: { line: 317, column: 32 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 316, column: 6 }, end: { line: 316, column: 37 } },
                    { start: { line: 317, column: 6 }, end: { line: 317, column: 32 } }
                  ],
                  line: 315
                },
                '18': {
                  loc: { start: { line: 335, column: 34 }, end: { line: 335, column: 43 } },
                  type: 'default-arg',
                  locations: [
                    { start: { line: 335, column: 41 }, end: { line: 335, column: 43 } }
                  ],
                  line: 335
                },
                '19': {
                  loc: { start: { line: 355, column: 32 }, end: { line: 355, column: 41 } },
                  type: 'default-arg',
                  locations: [
                    { start: { line: 355, column: 39 }, end: { line: 355, column: 41 } }
                  ],
                  line: 355
                },
                '20': {
                  loc: { start: { line: 373, column: 35 }, end: { line: 373, column: 44 } },
                  type: 'default-arg',
                  locations: [
                    { start: { line: 373, column: 42 }, end: { line: 373, column: 44 } }
                  ],
                  line: 373
                },
                '21': {
                  loc: { start: { line: 409, column: 2 }, end: { line: 411, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 409, column: 2 }, end: { line: 411, column: 3 } },
                    { start: { line: 409, column: 2 }, end: { line: 411, column: 3 } }
                  ],
                  line: 409
                },
                '22': {
                  loc: { start: { line: 409, column: 6 }, end: { line: 409, column: 52 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 409, column: 6 }, end: { line: 409, column: 21 } },
                    { start: { line: 409, column: 25 }, end: { line: 409, column: 52 } }
                  ],
                  line: 409
                },
                '23': {
                  loc: { start: { line: 412, column: 2 }, end: { line: 414, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 412, column: 2 }, end: { line: 414, column: 3 } },
                    { start: { line: 412, column: 2 }, end: { line: 414, column: 3 } }
                  ],
                  line: 412
                },
                '24': {
                  loc: { start: { line: 412, column: 6 }, end: { line: 412, column: 52 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 412, column: 6 }, end: { line: 412, column: 21 } },
                    { start: { line: 412, column: 25 }, end: { line: 412, column: 52 } }
                  ],
                  line: 412
                },
                '25': {
                  loc: { start: { line: 418, column: 17 }, end: { line: 418, column: 45 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 418, column: 17 }, end: { line: 418, column: 32 } },
                    { start: { line: 418, column: 36 }, end: { line: 418, column: 45 } }
                  ],
                  line: 418
                },
                '26': {
                  loc: { start: { line: 419, column: 18 }, end: { line: 419, column: 48 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 419, column: 18 }, end: { line: 419, column: 34 } },
                    { start: { line: 419, column: 38 }, end: { line: 419, column: 48 } }
                  ],
                  line: 419
                },
                '27': {
                  loc: { start: { line: 421, column: 4 }, end: { line: 421, column: 47 } },
                  type: 'if',
                  locations: [
                    { start: { line: 421, column: 4 }, end: { line: 421, column: 47 } },
                    { start: { line: 421, column: 4 }, end: { line: 421, column: 47 } }
                  ],
                  line: 421
                },
                '28': {
                  loc: { start: { line: 446, column: 2 }, end: { line: 446, column: 34 } },
                  type: 'if',
                  locations: [
                    { start: { line: 446, column: 2 }, end: { line: 446, column: 34 } },
                    { start: { line: 446, column: 2 }, end: { line: 446, column: 34 } }
                  ],
                  line: 446
                },
                '29': {
                  loc: { start: { line: 498, column: 2 }, end: { line: 502, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 498, column: 2 }, end: { line: 502, column: 3 } },
                    { start: { line: 498, column: 2 }, end: { line: 502, column: 3 } }
                  ],
                  line: 498
                },
                '30': {
                  loc: { start: { line: 500, column: 9 }, end: { line: 502, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 500, column: 9 }, end: { line: 502, column: 3 } },
                    { start: { line: 500, column: 9 }, end: { line: 502, column: 3 } }
                  ],
                  line: 500
                },
                '31': {
                  loc: { start: { line: 503, column: 2 }, end: { line: 503, column: 51 } },
                  type: 'if',
                  locations: [
                    { start: { line: 503, column: 2 }, end: { line: 503, column: 51 } },
                    { start: { line: 503, column: 2 }, end: { line: 503, column: 51 } }
                  ],
                  line: 503
                },
                '32': {
                  loc: { start: { line: 537, column: 2 }, end: { line: 537, column: 31 } },
                  type: 'if',
                  locations: [
                    { start: { line: 537, column: 2 }, end: { line: 537, column: 31 } },
                    { start: { line: 537, column: 2 }, end: { line: 537, column: 31 } }
                  ],
                  line: 537
                },
                '33': {
                  loc: { start: { line: 577, column: 4 }, end: { line: 585, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 577, column: 4 }, end: { line: 585, column: 5 } },
                    { start: { line: 577, column: 4 }, end: { line: 585, column: 5 } }
                  ],
                  line: 577
                },
                '34': {
                  loc: { start: { line: 578, column: 6 }, end: { line: 584, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 578, column: 6 }, end: { line: 584, column: 7 } },
                    { start: { line: 578, column: 6 }, end: { line: 584, column: 7 } }
                  ],
                  line: 578
                },
                '35': {
                  loc: { start: { line: 580, column: 13 }, end: { line: 584, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 580, column: 13 }, end: { line: 584, column: 7 } },
                    { start: { line: 580, column: 13 }, end: { line: 584, column: 7 } }
                  ],
                  line: 580
                },
                '36': {
                  loc: { start: { line: 592, column: 2 }, end: { line: 602, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 592, column: 2 }, end: { line: 602, column: 3 } },
                    { start: { line: 592, column: 2 }, end: { line: 602, column: 3 } }
                  ],
                  line: 592
                },
                '37': {
                  loc: { start: { line: 603, column: 2 }, end: { line: 605, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 603, column: 2 }, end: { line: 605, column: 3 } },
                    { start: { line: 603, column: 2 }, end: { line: 605, column: 3 } }
                  ],
                  line: 603
                },
                '38': {
                  loc: { start: { line: 670, column: 2 }, end: { line: 684, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 670, column: 2 }, end: { line: 684, column: 3 } },
                    { start: { line: 670, column: 2 }, end: { line: 684, column: 3 } }
                  ],
                  line: 670
                },
                '39': {
                  loc: { start: { line: 670, column: 6 }, end: { line: 670, column: 71 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 670, column: 6 }, end: { line: 670, column: 31 } },
                    { start: { line: 670, column: 35 }, end: { line: 670, column: 71 } }
                  ],
                  line: 670
                },
                '40': {
                  loc: { start: { line: 674, column: 9 }, end: { line: 684, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 674, column: 9 }, end: { line: 684, column: 3 } },
                    { start: { line: 674, column: 9 }, end: { line: 684, column: 3 } }
                  ],
                  line: 674
                },
                '41': {
                  loc: { start: { line: 679, column: 4 }, end: { line: 681, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 679, column: 4 }, end: { line: 681, column: 5 } },
                    { start: { line: 679, column: 4 }, end: { line: 681, column: 5 } }
                  ],
                  line: 679
                },
                '42': {
                  loc: { start: { line: 679, column: 8 }, end: { line: 679, column: 39 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 679, column: 8 }, end: { line: 679, column: 11 } },
                    { start: { line: 679, column: 15 }, end: { line: 679, column: 39 } }
                  ],
                  line: 679
                },
                '43': {
                  loc: { start: { line: 689, column: 4 }, end: { line: 691, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 689, column: 4 }, end: { line: 691, column: 5 } },
                    { start: { line: 689, column: 4 }, end: { line: 691, column: 5 } }
                  ],
                  line: 689
                },
                '44': {
                  loc: { start: { line: 694, column: 6 }, end: { line: 697, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 694, column: 6 }, end: { line: 697, column: 7 } },
                    { start: { line: 694, column: 6 }, end: { line: 697, column: 7 } }
                  ],
                  line: 694
                },
                '45': {
                  loc: { start: { line: 700, column: 4 }, end: { line: 715, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 700, column: 4 }, end: { line: 715, column: 5 } },
                    { start: { line: 700, column: 4 }, end: { line: 715, column: 5 } }
                  ],
                  line: 700
                },
                '46': {
                  loc: { start: { line: 702, column: 6 }, end: { line: 707, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 702, column: 6 }, end: { line: 707, column: 7 } },
                    { start: { line: 702, column: 6 }, end: { line: 707, column: 7 } }
                  ],
                  line: 702
                },
                '47': {
                  loc: { start: { line: 712, column: 18 }, end: { line: 712, column: 52 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 712, column: 40 }, end: { line: 712, column: 44 } },
                    { start: { line: 712, column: 47 }, end: { line: 712, column: 52 } }
                  ],
                  line: 712
                },
                '48': {
                  loc: { start: { line: 720, column: 4 }, end: { line: 737, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 720, column: 4 }, end: { line: 737, column: 5 } },
                    { start: { line: 720, column: 4 }, end: { line: 737, column: 5 } }
                  ],
                  line: 720
                },
                '49': {
                  loc: { start: { line: 722, column: 8 }, end: { line: 724, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 722, column: 8 }, end: { line: 724, column: 9 } },
                    { start: { line: 722, column: 8 }, end: { line: 724, column: 9 } }
                  ],
                  line: 722
                },
                '50': {
                  loc: { start: { line: 728, column: 6 }, end: { line: 736, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 728, column: 6 }, end: { line: 736, column: 7 } },
                    { start: { line: 728, column: 6 }, end: { line: 736, column: 7 } }
                  ],
                  line: 728
                },
                '51': {
                  loc: { start: { line: 741, column: 4 }, end: { line: 750, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 741, column: 4 }, end: { line: 750, column: 5 } },
                    { start: { line: 741, column: 4 }, end: { line: 750, column: 5 } }
                  ],
                  line: 741
                },
                '52': {
                  loc: { start: { line: 743, column: 8 }, end: { line: 746, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 743, column: 8 }, end: { line: 746, column: 9 } },
                    { start: { line: 743, column: 8 }, end: { line: 746, column: 9 } }
                  ],
                  line: 743
                },
                '53': {
                  loc: { start: { line: 833, column: 2 }, end: { line: 839, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 833, column: 2 }, end: { line: 839, column: 3 } },
                    { start: { line: 833, column: 2 }, end: { line: 839, column: 3 } }
                  ],
                  line: 833
                },
                '54': {
                  loc: { start: { line: 833, column: 6 }, end: { line: 833, column: 71 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 833, column: 6 }, end: { line: 833, column: 36 } },
                    { start: { line: 833, column: 40 }, end: { line: 833, column: 71 } }
                  ],
                  line: 833
                },
                '55': {
                  loc: { start: { line: 835, column: 4 }, end: { line: 835, column: 62 } },
                  type: 'if',
                  locations: [
                    { start: { line: 835, column: 4 }, end: { line: 835, column: 62 } },
                    { start: { line: 835, column: 4 }, end: { line: 835, column: 62 } }
                  ],
                  line: 835
                },
                '56': {
                  loc: { start: { line: 837, column: 4 }, end: { line: 837, column: 46 } },
                  type: 'if',
                  locations: [
                    { start: { line: 837, column: 4 }, end: { line: 837, column: 46 } },
                    { start: { line: 837, column: 4 }, end: { line: 837, column: 46 } }
                  ],
                  line: 837
                },
                '57': {
                  loc: { start: { line: 842, column: 15 }, end: { line: 842, column: 36 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 842, column: 15 }, end: { line: 842, column: 19 } },
                    { start: { line: 842, column: 23 }, end: { line: 842, column: 36 } }
                  ],
                  line: 842
                },
                '58': {
                  loc: { start: { line: 846, column: 4 }, end: { line: 846, column: 57 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 846, column: 4 }, end: { line: 846, column: 34 } },
                    { start: { line: 846, column: 38 }, end: { line: 846, column: 57 } }
                  ],
                  line: 846
                },
                '59': {
                  loc: { start: { line: 857, column: 6 }, end: { line: 860, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 857, column: 6 }, end: { line: 860, column: 7 } },
                    { start: { line: 857, column: 6 }, end: { line: 860, column: 7 } }
                  ],
                  line: 857
                },
                '60': {
                  loc: { start: { line: 864, column: 4 }, end: { line: 869, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 864, column: 4 }, end: { line: 869, column: 5 } },
                    { start: { line: 864, column: 4 }, end: { line: 869, column: 5 } }
                  ],
                  line: 864
                },
                '61': {
                  loc: { start: { line: 873, column: 4 }, end: { line: 878, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 873, column: 4 }, end: { line: 878, column: 5 } },
                    { start: { line: 873, column: 4 }, end: { line: 878, column: 5 } }
                  ],
                  line: 873
                },
                '62': {
                  loc: { start: { line: 880, column: 29 }, end: { line: 880, column: 64 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 880, column: 51 }, end: { line: 880, column: 56 } },
                    { start: { line: 880, column: 59 }, end: { line: 880, column: 64 } }
                  ],
                  line: 880
                },
                '63': {
                  loc: { start: { line: 887, column: 6 }, end: { line: 891, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 887, column: 6 }, end: { line: 891, column: 7 } },
                    { start: { line: 887, column: 6 }, end: { line: 891, column: 7 } }
                  ],
                  line: 887
                },
                '64': {
                  loc: { start: { line: 888, column: 8 }, end: { line: 888, column: 72 } },
                  type: 'if',
                  locations: [
                    { start: { line: 888, column: 8 }, end: { line: 888, column: 72 } },
                    { start: { line: 888, column: 8 }, end: { line: 888, column: 72 } }
                  ],
                  line: 888
                },
                '65': {
                  loc: { start: { line: 898, column: 6 }, end: { line: 901, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 898, column: 6 }, end: { line: 901, column: 7 } },
                    { start: { line: 898, column: 6 }, end: { line: 901, column: 7 } }
                  ],
                  line: 898
                },
                '66': {
                  loc: { start: { line: 908, column: 4 }, end: { line: 922, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 908, column: 4 }, end: { line: 922, column: 5 } },
                    { start: { line: 908, column: 4 }, end: { line: 922, column: 5 } }
                  ],
                  line: 908
                },
                '67': {
                  loc: { start: { line: 910, column: 8 }, end: { line: 913, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 910, column: 8 }, end: { line: 913, column: 9 } },
                    { start: { line: 910, column: 8 }, end: { line: 913, column: 9 } }
                  ],
                  line: 910
                },
                '68': {
                  loc: { start: { line: 917, column: 8 }, end: { line: 920, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 917, column: 8 }, end: { line: 920, column: 9 } },
                    { start: { line: 917, column: 8 }, end: { line: 920, column: 9 } }
                  ],
                  line: 917
                },
                '69': {
                  loc: { start: { line: 926, column: 26 }, end: { line: 926, column: 46 } },
                  type: 'default-arg',
                  locations: [
                    { start: { line: 926, column: 42 }, end: { line: 926, column: 46 } }
                  ],
                  line: 926
                },
                '70': {
                  loc: { start: { line: 992, column: 2 }, end: { line: 1006, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 992, column: 2 }, end: { line: 1006, column: 3 } },
                    { start: { line: 992, column: 2 }, end: { line: 1006, column: 3 } }
                  ],
                  line: 992
                },
                '71': {
                  loc: { start: { line: 993, column: 4 }, end: { line: 1003, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 993, column: 4 }, end: { line: 1003, column: 5 } },
                    { start: { line: 993, column: 4 }, end: { line: 1003, column: 5 } }
                  ],
                  line: 993
                },
                '72': {
                  loc: { start: { line: 1010, column: 4 }, end: { line: 1017, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1010, column: 4 }, end: { line: 1017, column: 5 } },
                    { start: { line: 1010, column: 4 }, end: { line: 1017, column: 5 } }
                  ],
                  line: 1010
                },
                '73': {
                  loc: { start: { line: 1011, column: 6 }, end: { line: 1013, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1011, column: 6 }, end: { line: 1013, column: 7 } },
                    { start: { line: 1011, column: 6 }, end: { line: 1013, column: 7 } }
                  ],
                  line: 1011
                },
                '74': {
                  loc: { start: { line: 1014, column: 6 }, end: { line: 1016, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1014, column: 6 }, end: { line: 1016, column: 7 } },
                    { start: { line: 1014, column: 6 }, end: { line: 1016, column: 7 } }
                  ],
                  line: 1014
                },
                '75': {
                  loc: {
                    start: { line: 1053, column: 36 },
                    end: { line: 1053, column: 46 }
                  },
                  type: 'default-arg',
                  locations: [
                    { start: { line: 1053, column: 44 }, end: { line: 1053, column: 46 } }
                  ],
                  line: 1053
                },
                '76': {
                  loc: {
                    start: { line: 1053, column: 48 },
                    end: { line: 1053, column: 61 }
                  },
                  type: 'default-arg',
                  locations: [
                    { start: { line: 1053, column: 55 }, end: { line: 1053, column: 61 } }
                  ],
                  line: 1053
                },
                '77': {
                  loc: {
                    start: { line: 1097, column: 50 },
                    end: { line: 1097, column: 66 }
                  },
                  type: 'default-arg',
                  locations: [
                    { start: { line: 1097, column: 61 }, end: { line: 1097, column: 66 } }
                  ],
                  line: 1097
                },
                '78': {
                  loc: { start: { line: 1107, column: 2 }, end: { line: 1112, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1107, column: 2 }, end: { line: 1112, column: 3 } },
                    { start: { line: 1107, column: 2 }, end: { line: 1112, column: 3 } }
                  ],
                  line: 1107
                },
                '79': {
                  loc: {
                    start: { line: 1107, column: 8 },
                    end: { line: 1107, column: 74 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1107, column: 8 }, end: { line: 1107, column: 19 } },
                    { start: { line: 1107, column: 23 }, end: { line: 1107, column: 40 } },
                    { start: { line: 1107, column: 44 }, end: { line: 1107, column: 59 } },
                    { start: { line: 1107, column: 63 }, end: { line: 1107, column: 74 } }
                  ],
                  line: 1107
                },
                '80': {
                  loc: {
                    start: { line: 1116, column: 2 },
                    end: { line: 1116, column: 57 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1116, column: 2 }, end: { line: 1116, column: 57 } },
                    { start: { line: 1116, column: 2 }, end: { line: 1116, column: 57 } }
                  ],
                  line: 1116
                },
                '81': {
                  loc: {
                    start: { line: 1128, column: 8 },
                    end: { line: 1128, column: 17 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1128, column: 8 }, end: { line: 1128, column: 11 } },
                    { start: { line: 1128, column: 15 }, end: { line: 1128, column: 17 } }
                  ],
                  line: 1128
                },
                '82': {
                  loc: { start: { line: 1129, column: 2 }, end: { line: 1131, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1129, column: 2 }, end: { line: 1131, column: 3 } },
                    { start: { line: 1129, column: 2 }, end: { line: 1131, column: 3 } }
                  ],
                  line: 1129
                },
                '83': {
                  loc: { start: { line: 1139, column: 2 }, end: { line: 1145, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1139, column: 2 }, end: { line: 1145, column: 3 } },
                    { start: { line: 1139, column: 2 }, end: { line: 1145, column: 3 } }
                  ],
                  line: 1139
                },
                '84': {
                  loc: {
                    start: { line: 1156, column: 4 },
                    end: { line: 1156, column: 68 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1156, column: 4 }, end: { line: 1156, column: 68 } },
                    { start: { line: 1156, column: 4 }, end: { line: 1156, column: 68 } }
                  ],
                  line: 1156
                },
                '85': {
                  loc: {
                    start: { line: 1157, column: 4 },
                    end: { line: 1157, column: 71 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1157, column: 4 }, end: { line: 1157, column: 71 } },
                    { start: { line: 1157, column: 4 }, end: { line: 1157, column: 71 } }
                  ],
                  line: 1157
                },
                '86': {
                  loc: { start: { line: 1158, column: 4 }, end: { line: 1161, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1158, column: 4 }, end: { line: 1161, column: 5 } },
                    { start: { line: 1158, column: 4 }, end: { line: 1161, column: 5 } }
                  ],
                  line: 1158
                },
                '87': {
                  loc: { start: { line: 1270, column: 0 }, end: { line: 1272, column: 1 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1270, column: 0 }, end: { line: 1272, column: 1 } },
                    { start: { line: 1270, column: 0 }, end: { line: 1272, column: 1 } }
                  ],
                  line: 1270
                },
                '88': {
                  loc: { start: { line: 1277, column: 0 }, end: { line: 1296, column: 1 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1277, column: 0 }, end: { line: 1296, column: 1 } },
                    { start: { line: 1277, column: 0 }, end: { line: 1296, column: 1 } }
                  ],
                  line: 1277
                },
                '89': {
                  loc: {
                    start: { line: 1281, column: 6 },
                    end: { line: 1281, column: 63 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1281, column: 6 }, end: { line: 1281, column: 34 } },
                    { start: { line: 1281, column: 38 }, end: { line: 1281, column: 63 } }
                  ],
                  line: 1281
                },
                '90': {
                  loc: { start: { line: 1285, column: 4 }, end: { line: 1289, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1285, column: 4 }, end: { line: 1289, column: 5 } },
                    { start: { line: 1285, column: 4 }, end: { line: 1289, column: 5 } }
                  ],
                  line: 1285
                },
                '91': {
                  loc: { start: { line: 1384, column: 2 }, end: { line: 1386, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1384, column: 2 }, end: { line: 1386, column: 3 } },
                    { start: { line: 1384, column: 2 }, end: { line: 1386, column: 3 } }
                  ],
                  line: 1384
                },
                '92': {
                  loc: {
                    start: { line: 1384, column: 8 },
                    end: { line: 1384, column: 69 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1384, column: 8 }, end: { line: 1384, column: 30 } },
                    { start: { line: 1384, column: 34 }, end: { line: 1384, column: 69 } }
                  ],
                  line: 1384
                },
                '93': {
                  loc: {
                    start: { line: 1393, column: 4 },
                    end: { line: 1396, column: 55 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1393, column: 4 }, end: { line: 1396, column: 55 } },
                    { start: { line: 1393, column: 4 }, end: { line: 1396, column: 55 } }
                  ],
                  line: 1393
                },
                '94': {
                  loc: {
                    start: { line: 1394, column: 9 },
                    end: { line: 1396, column: 55 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1394, column: 9 }, end: { line: 1396, column: 55 } },
                    { start: { line: 1394, column: 9 }, end: { line: 1396, column: 55 } }
                  ],
                  line: 1394
                },
                '95': {
                  loc: {
                    start: { line: 1395, column: 9 },
                    end: { line: 1396, column: 55 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1395, column: 9 }, end: { line: 1396, column: 55 } },
                    { start: { line: 1395, column: 9 }, end: { line: 1396, column: 55 } }
                  ],
                  line: 1395
                },
                '96': {
                  loc: {
                    start: { line: 1396, column: 9 },
                    end: { line: 1396, column: 55 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1396, column: 9 }, end: { line: 1396, column: 55 } },
                    { start: { line: 1396, column: 9 }, end: { line: 1396, column: 55 } }
                  ],
                  line: 1396
                },
                '97': {
                  loc: {
                    start: { line: 1398, column: 2 },
                    end: { line: 1398, column: 71 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1398, column: 2 }, end: { line: 1398, column: 71 } },
                    { start: { line: 1398, column: 2 }, end: { line: 1398, column: 71 } }
                  ],
                  line: 1398
                },
                '98': {
                  loc: { start: { line: 1406, column: 6 }, end: { line: 1410, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1406, column: 6 }, end: { line: 1410, column: 7 } },
                    { start: { line: 1406, column: 6 }, end: { line: 1410, column: 7 } }
                  ],
                  line: 1406
                },
                '99': {
                  loc: { start: { line: 1421, column: 4 }, end: { line: 1427, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1421, column: 4 }, end: { line: 1427, column: 5 } },
                    { start: { line: 1421, column: 4 }, end: { line: 1427, column: 5 } }
                  ],
                  line: 1421
                },
                '100': {
                  loc: {
                    start: { line: 1430, column: 4 },
                    end: { line: 1430, column: 49 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1430, column: 4 }, end: { line: 1430, column: 49 } },
                    { start: { line: 1430, column: 4 }, end: { line: 1430, column: 49 } }
                  ],
                  line: 1430
                },
                '101': {
                  loc: { start: { line: 1452, column: 2 }, end: { line: 1454, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1452, column: 2 }, end: { line: 1454, column: 3 } },
                    { start: { line: 1452, column: 2 }, end: { line: 1454, column: 3 } }
                  ],
                  line: 1452
                },
                '102': {
                  loc: { start: { line: 1476, column: 2 }, end: { line: 1482, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1476, column: 2 }, end: { line: 1482, column: 3 } },
                    { start: { line: 1476, column: 2 }, end: { line: 1482, column: 3 } }
                  ],
                  line: 1476
                },
                '103': {
                  loc: { start: { line: 1477, column: 4 }, end: { line: 1479, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1477, column: 4 }, end: { line: 1479, column: 5 } },
                    { start: { line: 1477, column: 4 }, end: { line: 1479, column: 5 } }
                  ],
                  line: 1477
                },
                '104': {
                  loc: { start: { line: 1571, column: 2 }, end: { line: 1575, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1571, column: 2 }, end: { line: 1575, column: 3 } },
                    { start: { line: 1571, column: 2 }, end: { line: 1575, column: 3 } }
                  ],
                  line: 1571
                },
                '105': {
                  loc: { start: { line: 1614, column: 2 }, end: { line: 1616, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1614, column: 2 }, end: { line: 1616, column: 3 } },
                    { start: { line: 1614, column: 2 }, end: { line: 1616, column: 3 } }
                  ],
                  line: 1614
                },
                '106': {
                  loc: { start: { line: 1617, column: 2 }, end: { line: 1624, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1617, column: 2 }, end: { line: 1624, column: 3 } },
                    { start: { line: 1617, column: 2 }, end: { line: 1624, column: 3 } }
                  ],
                  line: 1617
                },
                '107': {
                  loc: { start: { line: 1618, column: 4 }, end: { line: 1620, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1618, column: 4 }, end: { line: 1620, column: 5 } },
                    { start: { line: 1618, column: 4 }, end: { line: 1620, column: 5 } }
                  ],
                  line: 1618
                },
                '108': {
                  loc: { start: { line: 1622, column: 9 }, end: { line: 1624, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1622, column: 9 }, end: { line: 1624, column: 3 } },
                    { start: { line: 1622, column: 9 }, end: { line: 1624, column: 3 } }
                  ],
                  line: 1622
                },
                '109': {
                  loc: { start: { line: 1626, column: 2 }, end: { line: 1628, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1626, column: 2 }, end: { line: 1628, column: 3 } },
                    { start: { line: 1626, column: 2 }, end: { line: 1628, column: 3 } }
                  ],
                  line: 1626
                },
                '110': {
                  loc: {
                    start: { line: 1657, column: 2 },
                    end: { line: 1657, column: 26 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1657, column: 2 }, end: { line: 1657, column: 26 } },
                    { start: { line: 1657, column: 2 }, end: { line: 1657, column: 26 } }
                  ],
                  line: 1657
                },
                '111': {
                  loc: {
                    start: { line: 1658, column: 2 },
                    end: { line: 1658, column: 41 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1658, column: 2 }, end: { line: 1658, column: 41 } },
                    { start: { line: 1658, column: 2 }, end: { line: 1658, column: 41 } }
                  ],
                  line: 1658
                },
                '112': {
                  loc: { start: { line: 1665, column: 2 }, end: { line: 1674, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1665, column: 2 }, end: { line: 1674, column: 3 } },
                    { start: { line: 1665, column: 2 }, end: { line: 1674, column: 3 } }
                  ],
                  line: 1665
                },
                '113': {
                  loc: {
                    start: { line: 1665, column: 6 },
                    end: { line: 1665, column: 45 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1665, column: 6 }, end: { line: 1665, column: 22 } },
                    { start: { line: 1665, column: 26 }, end: { line: 1665, column: 45 } }
                  ],
                  line: 1665
                },
                '114': {
                  loc: { start: { line: 1670, column: 9 }, end: { line: 1674, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1670, column: 9 }, end: { line: 1674, column: 3 } },
                    { start: { line: 1670, column: 9 }, end: { line: 1674, column: 3 } }
                  ],
                  line: 1670
                },
                '115': {
                  loc: { start: { line: 1672, column: 9 }, end: { line: 1674, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1672, column: 9 }, end: { line: 1674, column: 3 } },
                    { start: { line: 1672, column: 9 }, end: { line: 1674, column: 3 } }
                  ],
                  line: 1672
                },
                '116': {
                  loc: {
                    start: { line: 1677, column: 2 },
                    end: { line: 1677, column: 26 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1677, column: 2 }, end: { line: 1677, column: 26 } },
                    { start: { line: 1677, column: 2 }, end: { line: 1677, column: 26 } }
                  ],
                  line: 1677
                },
                '117': {
                  loc: {
                    start: { line: 1678, column: 2 },
                    end: { line: 1678, column: 41 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1678, column: 2 }, end: { line: 1678, column: 41 } },
                    { start: { line: 1678, column: 2 }, end: { line: 1678, column: 41 } }
                  ],
                  line: 1678
                },
                '118': {
                  loc: { start: { line: 1711, column: 2 }, end: { line: 1719, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1711, column: 2 }, end: { line: 1719, column: 3 } },
                    { start: { line: 1711, column: 2 }, end: { line: 1719, column: 3 } }
                  ],
                  line: 1711
                },
                '119': {
                  loc: { start: { line: 1713, column: 9 }, end: { line: 1719, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1713, column: 9 }, end: { line: 1719, column: 3 } },
                    { start: { line: 1713, column: 9 }, end: { line: 1719, column: 3 } }
                  ],
                  line: 1713
                },
                '120': {
                  loc: { start: { line: 1763, column: 2 }, end: { line: 1783, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1763, column: 2 }, end: { line: 1783, column: 3 } },
                    { start: { line: 1763, column: 2 }, end: { line: 1783, column: 3 } }
                  ],
                  line: 1763
                },
                '121': {
                  loc: { start: { line: 1767, column: 4 }, end: { line: 1776, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1767, column: 4 }, end: { line: 1776, column: 5 } },
                    { start: { line: 1767, column: 4 }, end: { line: 1776, column: 5 } }
                  ],
                  line: 1767
                },
                '122': {
                  loc: {
                    start: { line: 1768, column: 6 },
                    end: { line: 1773, column: 32 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1768, column: 6 }, end: { line: 1768, column: 31 } },
                    { start: { line: 1769, column: 6 }, end: { line: 1769, column: 30 } },
                    { start: { line: 1770, column: 6 }, end: { line: 1770, column: 33 } },
                    { start: { line: 1771, column: 6 }, end: { line: 1771, column: 31 } },
                    { start: { line: 1772, column: 6 }, end: { line: 1772, column: 32 } },
                    { start: { line: 1773, column: 6 }, end: { line: 1773, column: 32 } }
                  ],
                  line: 1768
                },
                '123': {
                  loc: { start: { line: 1791, column: 2 }, end: { line: 1794, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1791, column: 2 }, end: { line: 1794, column: 3 } },
                    { start: { line: 1791, column: 2 }, end: { line: 1794, column: 3 } }
                  ],
                  line: 1791
                },
                '124': {
                  loc: { start: { line: 1795, column: 2 }, end: { line: 1812, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1795, column: 2 }, end: { line: 1812, column: 3 } },
                    { start: { line: 1795, column: 2 }, end: { line: 1812, column: 3 } }
                  ],
                  line: 1795
                },
                '125': {
                  loc: { start: { line: 1798, column: 9 }, end: { line: 1812, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1798, column: 9 }, end: { line: 1812, column: 3 } },
                    { start: { line: 1798, column: 9 }, end: { line: 1812, column: 3 } }
                  ],
                  line: 1798
                },
                '126': {
                  loc: { start: { line: 1807, column: 4 }, end: { line: 1811, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1807, column: 4 }, end: { line: 1811, column: 5 } },
                    { start: { line: 1807, column: 4 }, end: { line: 1811, column: 5 } }
                  ],
                  line: 1807
                },
                '127': {
                  loc: { start: { line: 1822, column: 2 }, end: { line: 1825, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1822, column: 2 }, end: { line: 1825, column: 3 } },
                    { start: { line: 1822, column: 2 }, end: { line: 1825, column: 3 } }
                  ],
                  line: 1822
                },
                '128': {
                  loc: { start: { line: 1827, column: 2 }, end: { line: 1836, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1827, column: 2 }, end: { line: 1836, column: 3 } },
                    { start: { line: 1827, column: 2 }, end: { line: 1836, column: 3 } }
                  ],
                  line: 1827
                },
                '129': {
                  loc: { start: { line: 1829, column: 9 }, end: { line: 1836, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1829, column: 9 }, end: { line: 1836, column: 3 } },
                    { start: { line: 1829, column: 9 }, end: { line: 1836, column: 3 } }
                  ],
                  line: 1829
                },
                '130': {
                  loc: { start: { line: 1832, column: 9 }, end: { line: 1836, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1832, column: 9 }, end: { line: 1836, column: 3 } },
                    { start: { line: 1832, column: 9 }, end: { line: 1836, column: 3 } }
                  ],
                  line: 1832
                },
                '131': {
                  loc: { start: { line: 1890, column: 2 }, end: { line: 1901, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1890, column: 2 }, end: { line: 1901, column: 3 } },
                    { start: { line: 1890, column: 2 }, end: { line: 1901, column: 3 } }
                  ],
                  line: 1890
                },
                '132': {
                  loc: { start: { line: 1903, column: 2 }, end: { line: 1933, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1903, column: 2 }, end: { line: 1933, column: 3 } },
                    { start: { line: 1903, column: 2 }, end: { line: 1933, column: 3 } }
                  ],
                  line: 1903
                },
                '133': {
                  loc: { start: { line: 1904, column: 4 }, end: { line: 1918, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1904, column: 4 }, end: { line: 1918, column: 5 } },
                    { start: { line: 1904, column: 4 }, end: { line: 1918, column: 5 } }
                  ],
                  line: 1904
                },
                '134': {
                  loc: { start: { line: 1914, column: 8 }, end: { line: 1916, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1914, column: 8 }, end: { line: 1916, column: 9 } },
                    { start: { line: 1914, column: 8 }, end: { line: 1916, column: 9 } }
                  ],
                  line: 1914
                },
                '135': {
                  loc: {
                    start: { line: 1914, column: 12 },
                    end: { line: 1914, column: 32 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1914, column: 12 }, end: { line: 1914, column: 20 } },
                    { start: { line: 1914, column: 24 }, end: { line: 1914, column: 32 } }
                  ],
                  line: 1914
                },
                '136': {
                  loc: { start: { line: 1922, column: 4 }, end: { line: 1932, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1922, column: 4 }, end: { line: 1932, column: 5 } },
                    { start: { line: 1922, column: 4 }, end: { line: 1932, column: 5 } }
                  ],
                  line: 1922
                },
                '137': {
                  loc: {
                    start: { line: 1923, column: 6 },
                    end: { line: 1926, column: 20 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1923, column: 6 }, end: { line: 1923, column: 22 } },
                    { start: { line: 1924, column: 6 }, end: { line: 1924, column: 23 } },
                    { start: { line: 1925, column: 6 }, end: { line: 1925, column: 21 } },
                    { start: { line: 1926, column: 6 }, end: { line: 1926, column: 20 } }
                  ],
                  line: 1923
                },
                '138': {
                  loc: { start: { line: 1961, column: 2 }, end: { line: 1978, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1961, column: 2 }, end: { line: 1978, column: 3 } },
                    { start: { line: 1961, column: 2 }, end: { line: 1978, column: 3 } }
                  ],
                  line: 1961
                },
                '139': {
                  loc: {
                    start: { line: 1962, column: 4 },
                    end: { line: 1964, column: 43 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1962, column: 4 }, end: { line: 1962, column: 31 } },
                    { start: { line: 1963, column: 5 }, end: { line: 1963, column: 44 } },
                    { start: { line: 1964, column: 6 }, end: { line: 1964, column: 42 } }
                  ],
                  line: 1962
                },
                '140': {
                  loc: { start: { line: 1966, column: 4 }, end: { line: 1972, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1966, column: 4 }, end: { line: 1972, column: 5 } },
                    { start: { line: 1966, column: 4 }, end: { line: 1972, column: 5 } }
                  ],
                  line: 1966
                },
                '141': {
                  loc: { start: { line: 1973, column: 9 }, end: { line: 1978, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1973, column: 9 }, end: { line: 1978, column: 3 } },
                    { start: { line: 1973, column: 9 }, end: { line: 1978, column: 3 } }
                  ],
                  line: 1973
                },
                '142': {
                  loc: { start: { line: 2013, column: 2 }, end: { line: 2021, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2013, column: 2 }, end: { line: 2021, column: 3 } },
                    { start: { line: 2013, column: 2 }, end: { line: 2021, column: 3 } }
                  ],
                  line: 2013
                },
                '143': {
                  loc: {
                    start: { line: 2014, column: 4 },
                    end: { line: 2016, column: 43 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 2014, column: 4 }, end: { line: 2014, column: 31 } },
                    { start: { line: 2015, column: 5 }, end: { line: 2015, column: 44 } },
                    { start: { line: 2016, column: 6 }, end: { line: 2016, column: 42 } }
                  ],
                  line: 2014
                },
                '144': {
                  loc: { start: { line: 2062, column: 2 }, end: { line: 2069, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2062, column: 2 }, end: { line: 2069, column: 3 } },
                    { start: { line: 2062, column: 2 }, end: { line: 2069, column: 3 } }
                  ],
                  line: 2062
                },
                '145': {
                  loc: {
                    start: { line: 2066, column: 4 },
                    end: { line: 2068, column: 33 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 2066, column: 4 }, end: { line: 2068, column: 33 } },
                    { start: { line: 2066, column: 4 }, end: { line: 2068, column: 33 } }
                  ],
                  line: 2066
                },
                '146': {
                  loc: { start: { line: 2137, column: 2 }, end: { line: 2184, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2137, column: 2 }, end: { line: 2184, column: 3 } },
                    { start: { line: 2137, column: 2 }, end: { line: 2184, column: 3 } }
                  ],
                  line: 2137
                },
                '147': {
                  loc: { start: { line: 2143, column: 4 }, end: { line: 2182, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2143, column: 4 }, end: { line: 2182, column: 5 } },
                    { start: { line: 2143, column: 4 }, end: { line: 2182, column: 5 } }
                  ],
                  line: 2143
                },
                '148': {
                  loc: {
                    start: { line: 2143, column: 8 },
                    end: { line: 2143, column: 34 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 2143, column: 8 }, end: { line: 2143, column: 19 } },
                    { start: { line: 2143, column: 23 }, end: { line: 2143, column: 34 } }
                  ],
                  line: 2143
                },
                '149': {
                  loc: { start: { line: 2144, column: 6 }, end: { line: 2148, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2144, column: 6 }, end: { line: 2148, column: 7 } },
                    { start: { line: 2144, column: 6 }, end: { line: 2148, column: 7 } }
                  ],
                  line: 2144
                },
                '150': {
                  loc: {
                    start: { line: 2146, column: 13 },
                    end: { line: 2148, column: 7 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 2146, column: 13 }, end: { line: 2148, column: 7 } },
                    { start: { line: 2146, column: 13 }, end: { line: 2148, column: 7 } }
                  ],
                  line: 2146
                },
                '151': {
                  loc: { start: { line: 2150, column: 6 }, end: { line: 2170, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2150, column: 6 }, end: { line: 2170, column: 7 } },
                    { start: { line: 2150, column: 6 }, end: { line: 2170, column: 7 } }
                  ],
                  line: 2150
                },
                '152': {
                  loc: { start: { line: 2175, column: 6 }, end: { line: 2181, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2175, column: 6 }, end: { line: 2181, column: 7 } },
                    { start: { line: 2175, column: 6 }, end: { line: 2181, column: 7 } }
                  ],
                  line: 2175
                },
                '153': {
                  loc: {
                    start: { line: 2175, column: 10 },
                    end: { line: 2175, column: 48 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 2175, column: 10 }, end: { line: 2175, column: 21 } },
                    { start: { line: 2175, column: 25 }, end: { line: 2175, column: 48 } }
                  ],
                  line: 2175
                },
                '154': {
                  loc: { start: { line: 2177, column: 8 }, end: { line: 2180, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2177, column: 8 }, end: { line: 2180, column: 9 } },
                    { start: { line: 2177, column: 8 }, end: { line: 2180, column: 9 } }
                  ],
                  line: 2177
                },
                '155': {
                  loc: { start: { line: 2199, column: 2 }, end: { line: 2208, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2199, column: 2 }, end: { line: 2208, column: 3 } },
                    { start: { line: 2199, column: 2 }, end: { line: 2208, column: 3 } }
                  ],
                  line: 2199
                },
                '156': {
                  loc: { start: { line: 2202, column: 4 }, end: { line: 2207, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2202, column: 4 }, end: { line: 2207, column: 5 } },
                    { start: { line: 2202, column: 4 }, end: { line: 2207, column: 5 } }
                  ],
                  line: 2202
                },
                '157': {
                  loc: { start: { line: 2212, column: 2 }, end: { line: 2214, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2212, column: 2 }, end: { line: 2214, column: 3 } },
                    { start: { line: 2212, column: 2 }, end: { line: 2214, column: 3 } }
                  ],
                  line: 2212
                },
                '158': {
                  loc: { start: { line: 2220, column: 2 }, end: { line: 2222, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2220, column: 2 }, end: { line: 2222, column: 3 } },
                    { start: { line: 2220, column: 2 }, end: { line: 2222, column: 3 } }
                  ],
                  line: 2220
                },
                '159': {
                  loc: {
                    start: { line: 2220, column: 6 },
                    end: { line: 2220, column: 37 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 2220, column: 6 }, end: { line: 2220, column: 14 } },
                    { start: { line: 2220, column: 18 }, end: { line: 2220, column: 37 } }
                  ],
                  line: 2220
                },
                '160': {
                  loc: { start: { line: 2286, column: 2 }, end: { line: 2325, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2286, column: 2 }, end: { line: 2325, column: 3 } },
                    { start: { line: 2286, column: 2 }, end: { line: 2325, column: 3 } }
                  ],
                  line: 2286
                },
                '161': {
                  loc: {
                    start: { line: 2286, column: 6 },
                    end: { line: 2286, column: 72 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 2286, column: 6 }, end: { line: 2286, column: 17 } },
                    { start: { line: 2286, column: 21 }, end: { line: 2286, column: 38 } },
                    { start: { line: 2286, column: 42 }, end: { line: 2286, column: 57 } },
                    { start: { line: 2286, column: 61 }, end: { line: 2286, column: 72 } }
                  ],
                  line: 2286
                },
                '162': {
                  loc: { start: { line: 2287, column: 4 }, end: { line: 2301, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2287, column: 4 }, end: { line: 2301, column: 5 } },
                    { start: { line: 2287, column: 4 }, end: { line: 2301, column: 5 } }
                  ],
                  line: 2287
                },
                '163': {
                  loc: { start: { line: 2309, column: 8 }, end: { line: 2311, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2309, column: 8 }, end: { line: 2311, column: 9 } },
                    { start: { line: 2309, column: 8 }, end: { line: 2311, column: 9 } }
                  ],
                  line: 2309
                },
                '164': {
                  loc: {
                    start: { line: 2398, column: 21 },
                    end: { line: 2398, column: 78 }
                  },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 2398, column: 61 }, end: { line: 2398, column: 63 } },
                    { start: { line: 2398, column: 66 }, end: { line: 2398, column: 78 } }
                  ],
                  line: 2398
                },
                '165': {
                  loc: {
                    start: { line: 2400, column: 8 },
                    end: { line: 2400, column: 71 }
                  },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 2400, column: 49 }, end: { line: 2400, column: 55 } },
                    { start: { line: 2400, column: 58 }, end: { line: 2400, column: 71 } }
                  ],
                  line: 2400
                },
                '166': {
                  loc: { start: { line: 2462, column: 2 }, end: { line: 2464, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2462, column: 2 }, end: { line: 2464, column: 3 } },
                    { start: { line: 2462, column: 2 }, end: { line: 2464, column: 3 } }
                  ],
                  line: 2462
                },
                '167': {
                  loc: { start: { line: 2466, column: 2 }, end: { line: 2472, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2466, column: 2 }, end: { line: 2472, column: 3 } },
                    { start: { line: 2466, column: 2 }, end: { line: 2472, column: 3 } }
                  ],
                  line: 2466
                },
                '168': {
                  loc: { start: { line: 2473, column: 2 }, end: { line: 2483, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2473, column: 2 }, end: { line: 2483, column: 3 } },
                    { start: { line: 2473, column: 2 }, end: { line: 2483, column: 3 } }
                  ],
                  line: 2473
                },
                '169': {
                  loc: {
                    start: { line: 2473, column: 6 },
                    end: { line: 2473, column: 30 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 2473, column: 6 }, end: { line: 2473, column: 13 } },
                    { start: { line: 2473, column: 17 }, end: { line: 2473, column: 30 } }
                  ],
                  line: 2473
                },
                '170': {
                  loc: { start: { line: 2476, column: 6 }, end: { line: 2481, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2476, column: 6 }, end: { line: 2481, column: 7 } },
                    { start: { line: 2476, column: 6 }, end: { line: 2481, column: 7 } }
                  ],
                  line: 2476
                },
                '171': {
                  loc: { start: { line: 2784, column: 2 }, end: { line: 2797, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2784, column: 2 }, end: { line: 2797, column: 3 } },
                    { start: { line: 2784, column: 2 }, end: { line: 2797, column: 3 } }
                  ],
                  line: 2784
                },
                '172': {
                  loc: {
                    start: { line: 2784, column: 6 },
                    end: { line: 2784, column: 20 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 2784, column: 6 }, end: { line: 2784, column: 9 } },
                    { start: { line: 2784, column: 13 }, end: { line: 2784, column: 20 } }
                  ],
                  line: 2784
                },
                '173': {
                  loc: { start: { line: 2788, column: 4 }, end: { line: 2796, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2788, column: 4 }, end: { line: 2796, column: 5 } },
                    { start: { line: 2788, column: 4 }, end: { line: 2796, column: 5 } }
                  ],
                  line: 2788
                },
                '174': {
                  loc: { start: { line: 2881, column: 2 }, end: { line: 2885, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2881, column: 2 }, end: { line: 2885, column: 3 } },
                    { start: { line: 2881, column: 2 }, end: { line: 2885, column: 3 } }
                  ],
                  line: 2881
                },
                '175': {
                  loc: { start: { line: 2966, column: 2 }, end: { line: 2974, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2966, column: 2 }, end: { line: 2974, column: 3 } },
                    { start: { line: 2966, column: 2 }, end: { line: 2974, column: 3 } }
                  ],
                  line: 2966
                },
                '176': {
                  loc: {
                    start: { line: 2967, column: 11 },
                    end: { line: 2967, column: 59 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 2967, column: 11 }, end: { line: 2967, column: 34 } },
                    { start: { line: 2967, column: 38 }, end: { line: 2967, column: 59 } }
                  ],
                  line: 2967
                },
                '177': {
                  loc: { start: { line: 2969, column: 4 }, end: { line: 2973, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2969, column: 4 }, end: { line: 2973, column: 5 } },
                    { start: { line: 2969, column: 4 }, end: { line: 2973, column: 5 } }
                  ],
                  line: 2969
                },
                '178': {
                  loc: { start: { line: 3028, column: 2 }, end: { line: 3033, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 3028, column: 2 }, end: { line: 3033, column: 3 } },
                    { start: { line: 3028, column: 2 }, end: { line: 3033, column: 3 } }
                  ],
                  line: 3028
                },
                '179': {
                  loc: { start: { line: 3069, column: 2 }, end: { line: 3073, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 3069, column: 2 }, end: { line: 3073, column: 3 } },
                    { start: { line: 3069, column: 2 }, end: { line: 3073, column: 3 } }
                  ],
                  line: 3069
                },
                '180': {
                  loc: { start: { line: 3074, column: 2 }, end: { line: 3091, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 3074, column: 2 }, end: { line: 3091, column: 3 } },
                    { start: { line: 3074, column: 2 }, end: { line: 3091, column: 3 } }
                  ],
                  line: 3074
                },
                '181': {
                  loc: { start: { line: 3076, column: 4 }, end: { line: 3081, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 3076, column: 4 }, end: { line: 3081, column: 5 } },
                    { start: { line: 3076, column: 4 }, end: { line: 3081, column: 5 } }
                  ],
                  line: 3076
                },
                '182': {
                  loc: { start: { line: 3098, column: 2 }, end: { line: 3102, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 3098, column: 2 }, end: { line: 3102, column: 3 } },
                    { start: { line: 3098, column: 2 }, end: { line: 3102, column: 3 } }
                  ],
                  line: 3098
                },
                '183': {
                  loc: { start: { line: 3116, column: 2 }, end: { line: 3121, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 3116, column: 2 }, end: { line: 3121, column: 3 } },
                    { start: { line: 3116, column: 2 }, end: { line: 3121, column: 3 } }
                  ],
                  line: 3116
                },
                '184': {
                  loc: { start: { line: 3207, column: 2 }, end: { line: 3217, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 3207, column: 2 }, end: { line: 3217, column: 3 } },
                    { start: { line: 3207, column: 2 }, end: { line: 3217, column: 3 } }
                  ],
                  line: 3207
                },
                '185': {
                  loc: { start: { line: 3220, column: 2 }, end: { line: 3225, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 3220, column: 2 }, end: { line: 3225, column: 3 } },
                    { start: { line: 3220, column: 2 }, end: { line: 3225, column: 3 } }
                  ],
                  line: 3220
                },
                '186': {
                  loc: { start: { line: 3228, column: 2 }, end: { line: 3237, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 3228, column: 2 }, end: { line: 3237, column: 3 } },
                    { start: { line: 3228, column: 2 }, end: { line: 3237, column: 3 } }
                  ],
                  line: 3228
                },
                '187': {
                  loc: { start: { line: 3229, column: 4 }, end: { line: 3233, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 3229, column: 4 }, end: { line: 3233, column: 5 } },
                    { start: { line: 3229, column: 4 }, end: { line: 3233, column: 5 } }
                  ],
                  line: 3229
                },
                '188': {
                  loc: { start: { line: 3248, column: 2 }, end: { line: 3252, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 3248, column: 2 }, end: { line: 3252, column: 3 } },
                    { start: { line: 3248, column: 2 }, end: { line: 3252, column: 3 } }
                  ],
                  line: 3248
                },
                '189': {
                  loc: { start: { line: 3384, column: 2 }, end: { line: 3386, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 3384, column: 2 }, end: { line: 3386, column: 3 } },
                    { start: { line: 3384, column: 2 }, end: { line: 3386, column: 3 } }
                  ],
                  line: 3384
                },
                '190': {
                  loc: { start: { line: 3422, column: 4 }, end: { line: 3425, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 3422, column: 4 }, end: { line: 3425, column: 5 } },
                    { start: { line: 3422, column: 4 }, end: { line: 3425, column: 5 } }
                  ],
                  line: 3422
                },
                '191': {
                  loc: { start: { line: 3428, column: 2 }, end: { line: 3430, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 3428, column: 2 }, end: { line: 3430, column: 3 } },
                    { start: { line: 3428, column: 2 }, end: { line: 3430, column: 3 } }
                  ],
                  line: 3428
                },
                '192': {
                  loc: { start: { line: 3481, column: 4 }, end: { line: 3484, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 3481, column: 4 }, end: { line: 3484, column: 5 } },
                    { start: { line: 3481, column: 4 }, end: { line: 3484, column: 5 } }
                  ],
                  line: 3481
                },
                '193': {
                  loc: {
                    start: { line: 3481, column: 8 },
                    end: { line: 3481, column: 69 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 3481, column: 8 }, end: { line: 3481, column: 37 } },
                    { start: { line: 3481, column: 41 }, end: { line: 3481, column: 69 } }
                  ],
                  line: 3481
                },
                '194': {
                  loc: { start: { line: 3549, column: 4 }, end: { line: 3559, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 3549, column: 4 }, end: { line: 3559, column: 5 } },
                    { start: { line: 3549, column: 4 }, end: { line: 3559, column: 5 } }
                  ],
                  line: 3549
                },
                '195': {
                  loc: {
                    start: { line: 3552, column: 11 },
                    end: { line: 3559, column: 5 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 3552, column: 11 }, end: { line: 3559, column: 5 } },
                    { start: { line: 3552, column: 11 }, end: { line: 3559, column: 5 } }
                  ],
                  line: 3552
                },
                '196': {
                  loc: { start: { line: 3568, column: 2 }, end: { line: 3576, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 3568, column: 2 }, end: { line: 3576, column: 3 } },
                    { start: { line: 3568, column: 2 }, end: { line: 3576, column: 3 } }
                  ],
                  line: 3568
                },
                '197': {
                  loc: {
                    start: { line: 3568, column: 6 },
                    end: { line: 3568, column: 61 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 3568, column: 6 }, end: { line: 3568, column: 28 } },
                    { start: { line: 3568, column: 32 }, end: { line: 3568, column: 61 } }
                  ],
                  line: 3568
                },
                '198': {
                  loc: { start: { line: 3570, column: 9 }, end: { line: 3576, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 3570, column: 9 }, end: { line: 3576, column: 3 } },
                    { start: { line: 3570, column: 9 }, end: { line: 3576, column: 3 } }
                  ],
                  line: 3570
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0,
                '118': 0,
                '119': 0,
                '120': 0,
                '121': 0,
                '122': 0,
                '123': 0,
                '124': 0,
                '125': 0,
                '126': 0,
                '127': 0,
                '128': 0,
                '129': 0,
                '130': 0,
                '131': 0,
                '132': 0,
                '133': 0,
                '134': 0,
                '135': 0,
                '136': 0,
                '137': 0,
                '138': 0,
                '139': 0,
                '140': 0,
                '141': 0,
                '142': 0,
                '143': 0,
                '144': 0,
                '145': 0,
                '146': 0,
                '147': 0,
                '148': 0,
                '149': 0,
                '150': 0,
                '151': 0,
                '152': 0,
                '153': 0,
                '154': 0,
                '155': 0,
                '156': 0,
                '157': 0,
                '158': 0,
                '159': 0,
                '160': 0,
                '161': 0,
                '162': 0,
                '163': 0,
                '164': 0,
                '165': 0,
                '166': 0,
                '167': 0,
                '168': 0,
                '169': 0,
                '170': 0,
                '171': 0,
                '172': 0,
                '173': 0,
                '174': 0,
                '175': 0,
                '176': 0,
                '177': 0,
                '178': 0,
                '179': 0,
                '180': 0,
                '181': 0,
                '182': 0,
                '183': 0,
                '184': 0,
                '185': 0,
                '186': 0,
                '187': 0,
                '188': 0,
                '189': 0,
                '190': 0,
                '191': 0,
                '192': 0,
                '193': 0,
                '194': 0,
                '195': 0,
                '196': 0,
                '197': 0,
                '198': 0,
                '199': 0,
                '200': 0,
                '201': 0,
                '202': 0,
                '203': 0,
                '204': 0,
                '205': 0,
                '206': 0,
                '207': 0,
                '208': 0,
                '209': 0,
                '210': 0,
                '211': 0,
                '212': 0,
                '213': 0,
                '214': 0,
                '215': 0,
                '216': 0,
                '217': 0,
                '218': 0,
                '219': 0,
                '220': 0,
                '221': 0,
                '222': 0,
                '223': 0,
                '224': 0,
                '225': 0,
                '226': 0,
                '227': 0,
                '228': 0,
                '229': 0,
                '230': 0,
                '231': 0,
                '232': 0,
                '233': 0,
                '234': 0,
                '235': 0,
                '236': 0,
                '237': 0,
                '238': 0,
                '239': 0,
                '240': 0,
                '241': 0,
                '242': 0,
                '243': 0,
                '244': 0,
                '245': 0,
                '246': 0,
                '247': 0,
                '248': 0,
                '249': 0,
                '250': 0,
                '251': 0,
                '252': 0,
                '253': 0,
                '254': 0,
                '255': 0,
                '256': 0,
                '257': 0,
                '258': 0,
                '259': 0,
                '260': 0,
                '261': 0,
                '262': 0,
                '263': 0,
                '264': 0,
                '265': 0,
                '266': 0,
                '267': 0,
                '268': 0,
                '269': 0,
                '270': 0,
                '271': 0,
                '272': 0,
                '273': 0,
                '274': 0,
                '275': 0,
                '276': 0,
                '277': 0,
                '278': 0,
                '279': 0,
                '280': 0,
                '281': 0,
                '282': 0,
                '283': 0,
                '284': 0,
                '285': 0,
                '286': 0,
                '287': 0,
                '288': 0,
                '289': 0,
                '290': 0,
                '291': 0,
                '292': 0,
                '293': 0,
                '294': 0,
                '295': 0,
                '296': 0,
                '297': 0,
                '298': 0,
                '299': 0,
                '300': 0,
                '301': 0,
                '302': 0,
                '303': 0,
                '304': 0,
                '305': 0,
                '306': 0,
                '307': 0,
                '308': 0,
                '309': 0,
                '310': 0,
                '311': 0,
                '312': 0,
                '313': 0,
                '314': 0,
                '315': 0,
                '316': 0,
                '317': 0,
                '318': 0,
                '319': 0,
                '320': 0,
                '321': 0,
                '322': 0,
                '323': 0,
                '324': 0,
                '325': 0,
                '326': 0,
                '327': 0,
                '328': 0,
                '329': 0,
                '330': 0,
                '331': 0,
                '332': 0,
                '333': 0,
                '334': 0,
                '335': 0,
                '336': 0,
                '337': 0,
                '338': 0,
                '339': 0,
                '340': 0,
                '341': 0,
                '342': 0,
                '343': 0,
                '344': 0,
                '345': 0,
                '346': 0,
                '347': 0,
                '348': 0,
                '349': 0,
                '350': 0,
                '351': 0,
                '352': 0,
                '353': 0,
                '354': 0,
                '355': 0,
                '356': 0,
                '357': 0,
                '358': 0,
                '359': 0,
                '360': 0,
                '361': 0,
                '362': 0,
                '363': 0,
                '364': 0,
                '365': 0,
                '366': 0,
                '367': 0,
                '368': 0,
                '369': 0,
                '370': 0,
                '371': 0,
                '372': 0,
                '373': 0,
                '374': 0,
                '375': 0,
                '376': 0,
                '377': 0,
                '378': 0,
                '379': 0,
                '380': 0,
                '381': 0,
                '382': 0,
                '383': 0,
                '384': 0,
                '385': 0,
                '386': 0,
                '387': 0,
                '388': 0,
                '389': 0,
                '390': 0,
                '391': 0,
                '392': 0,
                '393': 0,
                '394': 0,
                '395': 0,
                '396': 0,
                '397': 0,
                '398': 0,
                '399': 0,
                '400': 0,
                '401': 0,
                '402': 0,
                '403': 0,
                '404': 0,
                '405': 0,
                '406': 0,
                '407': 0,
                '408': 0,
                '409': 0,
                '410': 0,
                '411': 0,
                '412': 0,
                '413': 0,
                '414': 0,
                '415': 0,
                '416': 0,
                '417': 0,
                '418': 0,
                '419': 0,
                '420': 0,
                '421': 0,
                '422': 0,
                '423': 0,
                '424': 0,
                '425': 0,
                '426': 0,
                '427': 0,
                '428': 0,
                '429': 0,
                '430': 0,
                '431': 0,
                '432': 0,
                '433': 0,
                '434': 0,
                '435': 0,
                '436': 0,
                '437': 0,
                '438': 0,
                '439': 0,
                '440': 0,
                '441': 0,
                '442': 0,
                '443': 0,
                '444': 0,
                '445': 0,
                '446': 0,
                '447': 0,
                '448': 0,
                '449': 0,
                '450': 0,
                '451': 0,
                '452': 0,
                '453': 0,
                '454': 0,
                '455': 0,
                '456': 0,
                '457': 0,
                '458': 0,
                '459': 0,
                '460': 0,
                '461': 0,
                '462': 0,
                '463': 0,
                '464': 0,
                '465': 0,
                '466': 0,
                '467': 0,
                '468': 0,
                '469': 0,
                '470': 0,
                '471': 0,
                '472': 0,
                '473': 0,
                '474': 0,
                '475': 0,
                '476': 0,
                '477': 0,
                '478': 0,
                '479': 0,
                '480': 0,
                '481': 0,
                '482': 0,
                '483': 0,
                '484': 0,
                '485': 0,
                '486': 0,
                '487': 0,
                '488': 0,
                '489': 0,
                '490': 0,
                '491': 0,
                '492': 0,
                '493': 0,
                '494': 0,
                '495': 0,
                '496': 0,
                '497': 0,
                '498': 0,
                '499': 0,
                '500': 0,
                '501': 0,
                '502': 0,
                '503': 0,
                '504': 0,
                '505': 0,
                '506': 0,
                '507': 0,
                '508': 0,
                '509': 0,
                '510': 0,
                '511': 0,
                '512': 0,
                '513': 0,
                '514': 0,
                '515': 0,
                '516': 0,
                '517': 0,
                '518': 0,
                '519': 0,
                '520': 0,
                '521': 0,
                '522': 0,
                '523': 0,
                '524': 0,
                '525': 0,
                '526': 0,
                '527': 0,
                '528': 0,
                '529': 0,
                '530': 0,
                '531': 0,
                '532': 0,
                '533': 0,
                '534': 0,
                '535': 0,
                '536': 0,
                '537': 0,
                '538': 0,
                '539': 0,
                '540': 0,
                '541': 0,
                '542': 0,
                '543': 0,
                '544': 0,
                '545': 0,
                '546': 0,
                '547': 0,
                '548': 0,
                '549': 0,
                '550': 0,
                '551': 0,
                '552': 0,
                '553': 0,
                '554': 0,
                '555': 0,
                '556': 0,
                '557': 0,
                '558': 0,
                '559': 0,
                '560': 0,
                '561': 0,
                '562': 0,
                '563': 0,
                '564': 0,
                '565': 0,
                '566': 0,
                '567': 0,
                '568': 0,
                '569': 0,
                '570': 0,
                '571': 0,
                '572': 0,
                '573': 0,
                '574': 0,
                '575': 0,
                '576': 0,
                '577': 0,
                '578': 0,
                '579': 0,
                '580': 0,
                '581': 0,
                '582': 0,
                '583': 0,
                '584': 0,
                '585': 0,
                '586': 0,
                '587': 0,
                '588': 0,
                '589': 0,
                '590': 0,
                '591': 0,
                '592': 0,
                '593': 0,
                '594': 0,
                '595': 0,
                '596': 0,
                '597': 0,
                '598': 0,
                '599': 0,
                '600': 0,
                '601': 0,
                '602': 0,
                '603': 0,
                '604': 0,
                '605': 0,
                '606': 0,
                '607': 0,
                '608': 0,
                '609': 0,
                '610': 0,
                '611': 0,
                '612': 0,
                '613': 0,
                '614': 0,
                '615': 0,
                '616': 0,
                '617': 0,
                '618': 0,
                '619': 0,
                '620': 0,
                '621': 0,
                '622': 0,
                '623': 0,
                '624': 0,
                '625': 0,
                '626': 0,
                '627': 0,
                '628': 0,
                '629': 0,
                '630': 0,
                '631': 0,
                '632': 0,
                '633': 0,
                '634': 0,
                '635': 0,
                '636': 0,
                '637': 0,
                '638': 0,
                '639': 0,
                '640': 0,
                '641': 0,
                '642': 0,
                '643': 0,
                '644': 0,
                '645': 0,
                '646': 0,
                '647': 0,
                '648': 0,
                '649': 0,
                '650': 0,
                '651': 0,
                '652': 0,
                '653': 0,
                '654': 0,
                '655': 0,
                '656': 0,
                '657': 0,
                '658': 0,
                '659': 0,
                '660': 0,
                '661': 0,
                '662': 0,
                '663': 0,
                '664': 0,
                '665': 0,
                '666': 0,
                '667': 0,
                '668': 0,
                '669': 0,
                '670': 0,
                '671': 0,
                '672': 0,
                '673': 0,
                '674': 0,
                '675': 0,
                '676': 0,
                '677': 0,
                '678': 0,
                '679': 0,
                '680': 0,
                '681': 0,
                '682': 0,
                '683': 0,
                '684': 0,
                '685': 0,
                '686': 0,
                '687': 0,
                '688': 0,
                '689': 0,
                '690': 0,
                '691': 0,
                '692': 0,
                '693': 0,
                '694': 0,
                '695': 0,
                '696': 0,
                '697': 0,
                '698': 0,
                '699': 0,
                '700': 0,
                '701': 0,
                '702': 0,
                '703': 0,
                '704': 0,
                '705': 0,
                '706': 0,
                '707': 0,
                '708': 0,
                '709': 0,
                '710': 0,
                '711': 0,
                '712': 0,
                '713': 0,
                '714': 0,
                '715': 0,
                '716': 0,
                '717': 0,
                '718': 0,
                '719': 0,
                '720': 0,
                '721': 0,
                '722': 0,
                '723': 0,
                '724': 0,
                '725': 0,
                '726': 0,
                '727': 0,
                '728': 0,
                '729': 0,
                '730': 0,
                '731': 0,
                '732': 0,
                '733': 0,
                '734': 0,
                '735': 0,
                '736': 0,
                '737': 0,
                '738': 0,
                '739': 0,
                '740': 0,
                '741': 0,
                '742': 0,
                '743': 0,
                '744': 0,
                '745': 0,
                '746': 0,
                '747': 0,
                '748': 0,
                '749': 0,
                '750': 0,
                '751': 0,
                '752': 0,
                '753': 0,
                '754': 0,
                '755': 0,
                '756': 0,
                '757': 0,
                '758': 0,
                '759': 0,
                '760': 0,
                '761': 0,
                '762': 0,
                '763': 0,
                '764': 0,
                '765': 0,
                '766': 0,
                '767': 0,
                '768': 0,
                '769': 0,
                '770': 0,
                '771': 0,
                '772': 0,
                '773': 0,
                '774': 0,
                '775': 0,
                '776': 0,
                '777': 0,
                '778': 0,
                '779': 0,
                '780': 0,
                '781': 0,
                '782': 0,
                '783': 0,
                '784': 0,
                '785': 0,
                '786': 0,
                '787': 0,
                '788': 0,
                '789': 0,
                '790': 0,
                '791': 0,
                '792': 0,
                '793': 0,
                '794': 0,
                '795': 0,
                '796': 0,
                '797': 0,
                '798': 0,
                '799': 0,
                '800': 0,
                '801': 0,
                '802': 0,
                '803': 0,
                '804': 0,
                '805': 0,
                '806': 0,
                '807': 0,
                '808': 0,
                '809': 0,
                '810': 0,
                '811': 0,
                '812': 0,
                '813': 0,
                '814': 0,
                '815': 0,
                '816': 0,
                '817': 0,
                '818': 0,
                '819': 0,
                '820': 0,
                '821': 0,
                '822': 0,
                '823': 0,
                '824': 0,
                '825': 0,
                '826': 0,
                '827': 0,
                '828': 0,
                '829': 0,
                '830': 0,
                '831': 0,
                '832': 0,
                '833': 0,
                '834': 0,
                '835': 0,
                '836': 0,
                '837': 0,
                '838': 0,
                '839': 0,
                '840': 0,
                '841': 0,
                '842': 0,
                '843': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0],
                '19': [0],
                '20': [0],
                '21': [0, 0],
                '22': [0, 0],
                '23': [0, 0],
                '24': [0, 0],
                '25': [0, 0],
                '26': [0, 0],
                '27': [0, 0],
                '28': [0, 0],
                '29': [0, 0],
                '30': [0, 0],
                '31': [0, 0],
                '32': [0, 0],
                '33': [0, 0],
                '34': [0, 0],
                '35': [0, 0],
                '36': [0, 0],
                '37': [0, 0],
                '38': [0, 0],
                '39': [0, 0],
                '40': [0, 0],
                '41': [0, 0],
                '42': [0, 0],
                '43': [0, 0],
                '44': [0, 0],
                '45': [0, 0],
                '46': [0, 0],
                '47': [0, 0],
                '48': [0, 0],
                '49': [0, 0],
                '50': [0, 0],
                '51': [0, 0],
                '52': [0, 0],
                '53': [0, 0],
                '54': [0, 0],
                '55': [0, 0],
                '56': [0, 0],
                '57': [0, 0],
                '58': [0, 0],
                '59': [0, 0],
                '60': [0, 0],
                '61': [0, 0],
                '62': [0, 0],
                '63': [0, 0],
                '64': [0, 0],
                '65': [0, 0],
                '66': [0, 0],
                '67': [0, 0],
                '68': [0, 0],
                '69': [0],
                '70': [0, 0],
                '71': [0, 0],
                '72': [0, 0],
                '73': [0, 0],
                '74': [0, 0],
                '75': [0],
                '76': [0],
                '77': [0],
                '78': [0, 0],
                '79': [0, 0, 0, 0],
                '80': [0, 0],
                '81': [0, 0],
                '82': [0, 0],
                '83': [0, 0],
                '84': [0, 0],
                '85': [0, 0],
                '86': [0, 0],
                '87': [0, 0],
                '88': [0, 0],
                '89': [0, 0],
                '90': [0, 0],
                '91': [0, 0],
                '92': [0, 0],
                '93': [0, 0],
                '94': [0, 0],
                '95': [0, 0],
                '96': [0, 0],
                '97': [0, 0],
                '98': [0, 0],
                '99': [0, 0],
                '100': [0, 0],
                '101': [0, 0],
                '102': [0, 0],
                '103': [0, 0],
                '104': [0, 0],
                '105': [0, 0],
                '106': [0, 0],
                '107': [0, 0],
                '108': [0, 0],
                '109': [0, 0],
                '110': [0, 0],
                '111': [0, 0],
                '112': [0, 0],
                '113': [0, 0],
                '114': [0, 0],
                '115': [0, 0],
                '116': [0, 0],
                '117': [0, 0],
                '118': [0, 0],
                '119': [0, 0],
                '120': [0, 0],
                '121': [0, 0],
                '122': [0, 0, 0, 0, 0, 0],
                '123': [0, 0],
                '124': [0, 0],
                '125': [0, 0],
                '126': [0, 0],
                '127': [0, 0],
                '128': [0, 0],
                '129': [0, 0],
                '130': [0, 0],
                '131': [0, 0],
                '132': [0, 0],
                '133': [0, 0],
                '134': [0, 0],
                '135': [0, 0],
                '136': [0, 0],
                '137': [0, 0, 0, 0],
                '138': [0, 0],
                '139': [0, 0, 0],
                '140': [0, 0],
                '141': [0, 0],
                '142': [0, 0],
                '143': [0, 0, 0],
                '144': [0, 0],
                '145': [0, 0],
                '146': [0, 0],
                '147': [0, 0],
                '148': [0, 0],
                '149': [0, 0],
                '150': [0, 0],
                '151': [0, 0],
                '152': [0, 0],
                '153': [0, 0],
                '154': [0, 0],
                '155': [0, 0],
                '156': [0, 0],
                '157': [0, 0],
                '158': [0, 0],
                '159': [0, 0],
                '160': [0, 0],
                '161': [0, 0, 0, 0],
                '162': [0, 0],
                '163': [0, 0],
                '164': [0, 0],
                '165': [0, 0],
                '166': [0, 0],
                '167': [0, 0],
                '168': [0, 0],
                '169': [0, 0],
                '170': [0, 0],
                '171': [0, 0],
                '172': [0, 0],
                '173': [0, 0],
                '174': [0, 0],
                '175': [0, 0],
                '176': [0, 0],
                '177': [0, 0],
                '178': [0, 0],
                '179': [0, 0],
                '180': [0, 0],
                '181': [0, 0],
                '182': [0, 0],
                '183': [0, 0],
                '184': [0, 0],
                '185': [0, 0],
                '186': [0, 0],
                '187': [0, 0],
                '188': [0, 0],
                '189': [0, 0],
                '190': [0, 0],
                '191': [0, 0],
                '192': [0, 0],
                '193': [0, 0],
                '194': [0, 0],
                '195': [0, 0],
                '196': [0, 0],
                '197': [0, 0],
                '198': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '34729af49ebd70fb00d50916175b38e037affd3d'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.symbol');
          _dereq_('core-js/modules/es.symbol.description');
          _dereq_('core-js/modules/es.symbol.iterator');
          _dereq_('core-js/modules/es.array.every');
          _dereq_('core-js/modules/es.array.filter');
          _dereq_('core-js/modules/es.array.for-each');
          _dereq_('core-js/modules/es.array.from');
          _dereq_('core-js/modules/es.array.index-of');
          _dereq_('core-js/modules/es.array.iterator');
          _dereq_('core-js/modules/es.array.map');
          _dereq_('core-js/modules/es.array.slice');
          _dereq_('core-js/modules/es.array.splice');
          _dereq_('core-js/modules/es.function.name');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.promise');
          _dereq_('core-js/modules/es.regexp.exec');
          _dereq_('core-js/modules/es.regexp.to-string');
          _dereq_('core-js/modules/es.string.iterator');
          _dereq_('core-js/modules/es.string.replace');
          _dereq_('core-js/modules/es.string.split');
          _dereq_('core-js/modules/es.string.trim');
          _dereq_('core-js/modules/web.dom-collections.for-each');
          _dereq_('core-js/modules/web.dom-collections.iterator');
          _dereq_('core-js/modules/web.url');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          function _typeof(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof = function _typeof(obj) {
                return typeof obj;
              };
            } else {
              _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof(obj);
          }
          cov_8ak35vatu.s[0]++;

          /**
           * Searches the page for the first element that matches the given CSS selector string (can be an
           * ID, class, tag name or a combination) and returns it as a <a href="#/p5.Element">p5.Element</a>.
           * The DOM node itself can be accessed with .elt.
           * Returns null if none found. You can also specify a container to search within.
           *
           * @method select
           * @param  {String} selectors CSS selector string of element to search for
           * @param  {String|p5.Element|HTMLElement} [container] CSS selector string, <a href="#/p5.Element">p5.Element</a>, or
           *                                             HTML element to search within
           * @return {p5.Element|null} <a href="#/p5.Element">p5.Element</a> containing node found
           * @example
           * <div><code>
           * function setup() {
           *   createCanvas(50, 50);
           *   background(30);
           *   // move canvas down and right
           *   select('canvas').position(10, 30);
           * }
           * </code></div>
           *
           * <div class="norender"><code>
           * // select using ID
           * let a = select('#container');
           * let b = select('#beep', '#container');
           * let c;
           * if (a) {
           *   // select using class
           *   c = select('.boop', a);
           * }
           * // select using CSS selector string
           * let d = select('#container #bleep');
           * let e = select('#container p');
           * [a, b, c, d, e]; // unused
           * </code></div>
           */
          _main.default.prototype.select = function(e, p) {
            cov_8ak35vatu.f[0]++;
            cov_8ak35vatu.s[1]++;
            _main.default._validateParameters('select', arguments);
            var container = (cov_8ak35vatu.s[2]++, this._getContainer(p));
            var res = (cov_8ak35vatu.s[3]++, container.querySelector(e));
            cov_8ak35vatu.s[4]++;
            if (res) {
              cov_8ak35vatu.b[0][0]++;
              cov_8ak35vatu.s[5]++;
              return this._wrapElement(res);
            } else {
              cov_8ak35vatu.b[0][1]++;
              cov_8ak35vatu.s[6]++;
              return null;
            }
          };

          /**
           * Searches the page for elements that match the given CSS selector string (can be an ID a class,
           * tag name or a combination) and returns them as <a href="#/p5.Element">p5.Element</a>s in
           * an array.
           * The DOM node itself can be accessed with .elt.
           * Returns an empty array if none found.
           * You can also specify a container to search within.
           *
           * @method selectAll
           * @param  {String} selectors CSS selector string of elements to search for
           * @param  {String|p5.Element|HTMLElement} [container] CSS selector string, <a href="#/p5.Element">p5.Element</a>
           *                                             , or HTML element to search within
           * @return {p5.Element[]} Array of <a href="#/p5.Element">p5.Element</a>s containing nodes found
           * @example
           * <div><code>
           * function setup() {
           *   createButton('btn');
           *   createButton('2nd btn');
           *   createButton('3rd btn');
           *   let buttons = selectAll('button');
           *
           *   for (let i = 0; i < 3; i++) {
           *     buttons[i].size(100);
           *     buttons[i].position(0, i * 30);
           *   }
           * }
           * </code></div>
           * <div><code>
           * // these are all valid calls to selectAll()
           * let a = selectAll('.beep');
           * a = selectAll('div');
           * a = selectAll('button', '#container');
           *
           * let b = createDiv();
           * b.id('container');
           * let c = select('#container');
           * a = selectAll('p', c);
           * a = selectAll('#container p');
           *
           * let d = document.getElementById('container');
           * a = selectAll('.boop', d);
           * a = selectAll('#container .boop');
           * console.log(a);
           * </code></div>
           */ cov_8ak35vatu.s[7]++;
          _main.default.prototype.selectAll = function(e, p) {
            cov_8ak35vatu.f[1]++;
            cov_8ak35vatu.s[8]++;
            _main.default._validateParameters('selectAll', arguments);
            var arr = (cov_8ak35vatu.s[9]++, []);
            var container = (cov_8ak35vatu.s[10]++, this._getContainer(p));
            var res = (cov_8ak35vatu.s[11]++, container.querySelectorAll(e));
            cov_8ak35vatu.s[12]++;
            if (res) {
              cov_8ak35vatu.b[1][0]++;
              cov_8ak35vatu.s[13]++;
              for (var j = (cov_8ak35vatu.s[14]++, 0); j < res.length; j++) {
                var obj = (cov_8ak35vatu.s[15]++, this._wrapElement(res[j]));
                cov_8ak35vatu.s[16]++;
                arr.push(obj);
              }
            } else {
              cov_8ak35vatu.b[1][1]++;
            }
            cov_8ak35vatu.s[17]++;
            return arr;
          };

          /**
           * Helper function for select and selectAll
           */ cov_8ak35vatu.s[18]++;
          _main.default.prototype._getContainer = function(p) {
            cov_8ak35vatu.f[2]++;
            var container = (cov_8ak35vatu.s[19]++, document);
            cov_8ak35vatu.s[20]++;
            if (typeof p === 'string') {
              cov_8ak35vatu.b[2][0]++;
              cov_8ak35vatu.s[21]++;
              container =
                (cov_8ak35vatu.b[3][0]++, document.querySelector(p)) ||
                (cov_8ak35vatu.b[3][1]++, document);
            } else {
              cov_8ak35vatu.b[2][1]++;
              cov_8ak35vatu.s[22]++;
              if (p instanceof _main.default.Element) {
                cov_8ak35vatu.b[4][0]++;
                cov_8ak35vatu.s[23]++;
                container = p.elt;
              } else {
                cov_8ak35vatu.b[4][1]++;
                cov_8ak35vatu.s[24]++;
                if (p instanceof HTMLElement) {
                  cov_8ak35vatu.b[5][0]++;
                  cov_8ak35vatu.s[25]++;
                  container = p;
                } else {
                  cov_8ak35vatu.b[5][1]++;
                }
              }
            }
            cov_8ak35vatu.s[26]++;
            return container;
          };

          /**
           * Helper function for getElement and getElements.
           */ cov_8ak35vatu.s[27]++;
          _main.default.prototype._wrapElement = function(elt) {
            cov_8ak35vatu.f[3]++;
            var children = (cov_8ak35vatu.s[28]++,
            Array.prototype.slice.call(elt.children));
            cov_8ak35vatu.s[29]++;
            if (
              (cov_8ak35vatu.b[7][0]++, elt.tagName === 'INPUT') &&
              (cov_8ak35vatu.b[7][1]++, elt.type === 'checkbox')
            ) {
              cov_8ak35vatu.b[6][0]++;
              var converted = (cov_8ak35vatu.s[30]++, new _main.default.Element(elt, this));
              cov_8ak35vatu.s[31]++;
              converted.checked = function() {
                cov_8ak35vatu.f[4]++;
                cov_8ak35vatu.s[32]++;
                if (arguments.length === 0) {
                  cov_8ak35vatu.b[8][0]++;
                  cov_8ak35vatu.s[33]++;
                  return this.elt.checked;
                } else {
                  cov_8ak35vatu.b[8][1]++;
                  cov_8ak35vatu.s[34]++;
                  if (arguments[0]) {
                    cov_8ak35vatu.b[9][0]++;
                    cov_8ak35vatu.s[35]++;
                    this.elt.checked = true;
                  } else {
                    cov_8ak35vatu.b[9][1]++;
                    cov_8ak35vatu.s[36]++;
                    this.elt.checked = false;
                  }
                }
                cov_8ak35vatu.s[37]++;
                return this;
              };
              cov_8ak35vatu.s[38]++;
              return converted;
            } else {
              cov_8ak35vatu.b[6][1]++;
              cov_8ak35vatu.s[39]++;
              if (
                (cov_8ak35vatu.b[11][0]++, elt.tagName === 'VIDEO') ||
                (cov_8ak35vatu.b[11][1]++, elt.tagName === 'AUDIO')
              ) {
                cov_8ak35vatu.b[10][0]++;
                cov_8ak35vatu.s[40]++;
                return new _main.default.MediaElement(elt, this);
              } else {
                cov_8ak35vatu.b[10][1]++;
                cov_8ak35vatu.s[41]++;
                if (elt.tagName === 'SELECT') {
                  cov_8ak35vatu.b[12][0]++;
                  cov_8ak35vatu.s[42]++;
                  return this.createSelect(new _main.default.Element(elt, this));
                } else {
                  cov_8ak35vatu.b[12][1]++;
                  cov_8ak35vatu.s[43]++;
                  if (
                    (cov_8ak35vatu.b[14][0]++, children.length > 0) &&
                    (cov_8ak35vatu.b[14][1]++,
                    children.every(function(c) {
                      cov_8ak35vatu.f[5]++;
                      cov_8ak35vatu.s[44]++;
                      return (
                        (cov_8ak35vatu.b[15][0]++, c.tagName === 'INPUT') ||
                        (cov_8ak35vatu.b[15][1]++, c.tagName === 'LABEL')
                      );
                    }))
                  ) {
                    cov_8ak35vatu.b[13][0]++;
                    cov_8ak35vatu.s[45]++;
                    return this.createRadio(new _main.default.Element(elt, this));
                  } else {
                    cov_8ak35vatu.b[13][1]++;
                    cov_8ak35vatu.s[46]++;
                    return new _main.default.Element(elt, this);
                  }
                }
              }
            }
          };

          /**
           * Removes all elements created by p5, except any canvas / graphics
           * elements created by <a href="#/p5/createCanvas">createCanvas</a> or <a href="#/p5/createGraphics">createGraphics</a>.
           * Event handlers are removed, and element is removed from the DOM.
           * @method removeElements
           * @example
           * <div><code>
           * function setup() {
           *   createCanvas(100, 100);
           *   background('grey');
           *   let div = createDiv('this is some text');
           *   let p = createP('this is a paragraph');
           *   div.style('font-size', '16px');
           *   p.style('font-size', '16px');
           * }
           * function mousePressed() {
           *   removeElements(); // this will remove the div and p, not canvas
           * }
           * </code></div>
           */ cov_8ak35vatu.s[47]++;
          _main.default.prototype.removeElements = function(e) {
            cov_8ak35vatu.f[6]++;
            cov_8ak35vatu.s[48]++;
            _main.default._validateParameters('removeElements', arguments);
            // el.remove splices from this._elements, so don't mix iteration with it
            cov_8ak35vatu.s[49]++;
            var isNotCanvasElement = function isNotCanvasElement(el) {
              cov_8ak35vatu.f[7]++;
              cov_8ak35vatu.s[50]++;
              return !(el.elt instanceof HTMLCanvasElement);
            };
            var removeableElements = (cov_8ak35vatu.s[51]++,
            this._elements.filter(isNotCanvasElement));
            cov_8ak35vatu.s[52]++;
            removeableElements.map(function(el) {
              cov_8ak35vatu.f[8]++;
              cov_8ak35vatu.s[53]++;
              return el.remove();
            });
          };

          /**
           * The .<a href="#/p5.Element/changed">changed()</a> function is called when the value of an
           * element changes.
           * This can be used to attach an element specific event listener.
           *
           * @method changed
           * @param  {Function|Boolean} fxn function to be fired when the value of
           *                                an element changes.
           *                                if `false` is passed instead, the previously
           *                                firing function will no longer fire.
           * @chainable
           * @example
           * <div><code>
           * let sel;
           *
           * function setup() {
           *   textAlign(CENTER);
           *   background(200);
           *   sel = createSelect();
           *   sel.position(10, 10);
           *   sel.option('pear');
           *   sel.option('kiwi');
           *   sel.option('grape');
           *   sel.changed(mySelectEvent);
           * }
           *
           * function mySelectEvent() {
           *   let item = sel.value();
           *   background(200);
           *   text("it's a " + item + '!', 50, 50);
           * }
           * </code></div>
           *
           * <div><code>
           * let checkbox;
           * let cnv;
           *
           * function setup() {
           *   checkbox = createCheckbox(' fill');
           *   checkbox.changed(changeFill);
           *   cnv = createCanvas(100, 100);
           *   cnv.position(0, 30);
           *   noFill();
           * }
           *
           * function draw() {
           *   background(200);
           *   ellipse(50, 50, 50, 50);
           * }
           *
           * function changeFill() {
           *   if (checkbox.checked()) {
           *     fill(0);
           *   } else {
           *     noFill();
           *   }
           * }
           * </code></div>
           *
           * @alt
           * dropdown: pear, kiwi, grape. When selected text "its a" + selection shown.
           */ cov_8ak35vatu.s[54]++;
          _main.default.Element.prototype.changed = function(fxn) {
            cov_8ak35vatu.f[9]++;
            cov_8ak35vatu.s[55]++;
            _main.default.Element._adjustListener('change', fxn, this);
            cov_8ak35vatu.s[56]++;
            return this;
          };

          /**
           * The .<a href="#/p5.Element/input">input()</a> function is called when any user input is
           * detected with an element. The input event is often used
           * to detect keystrokes in a input element, or changes on a
           * slider element. This can be used to attach an element specific
           * event listener.
           *
           * @method input
           * @param  {Function|Boolean} fxn function to be fired when any user input is
           *                                detected within the element.
           *                                if `false` is passed instead, the previously
           *                                firing function will no longer fire.
           * @chainable
           * @example
           * <div><code>
           * // Open your console to see the output
           * function setup() {
           *   createCanvas(100, 100);
           *   background('grey');
           *   let inp = createInput('');
           *   inp.position(0, 0);
           *   inp.size(100);
           *   inp.input(myInputEvent);
           * }
           *
           * function myInputEvent() {
           *   console.log('you are typing: ', this.value());
           * }
           * </code></div>
           *
           * @alt
           * no display.
           */ cov_8ak35vatu.s[57]++;
          _main.default.Element.prototype.input = function(fxn) {
            cov_8ak35vatu.f[10]++;
            cov_8ak35vatu.s[58]++;
            _main.default.Element._adjustListener('input', fxn, this);
            cov_8ak35vatu.s[59]++;
            return this;
          };

          /**
           * Helpers for create methods.
           */
          function addElement(elt, pInst, media) {
            cov_8ak35vatu.f[11]++;
            var node = (cov_8ak35vatu.s[60]++,
            pInst._userNode
              ? (cov_8ak35vatu.b[16][0]++, pInst._userNode)
              : (cov_8ak35vatu.b[16][1]++, document.body));
            cov_8ak35vatu.s[61]++;
            node.appendChild(elt);
            var c = (cov_8ak35vatu.s[62]++,
            media
              ? (cov_8ak35vatu.b[17][0]++, new _main.default.MediaElement(elt, pInst))
              : (cov_8ak35vatu.b[17][1]++, new _main.default.Element(elt, pInst)));
            cov_8ak35vatu.s[63]++;
            pInst._elements.push(c);
            cov_8ak35vatu.s[64]++;
            return c;
          }

          /**
           * Creates a `&lt;div&gt;&lt;/div&gt;` element in the DOM with given inner HTML.
           *
           * @method createDiv
           * @param  {String} [html] inner HTML for element created
           * @return {p5.Element} pointer to <a href="#/p5.Element">p5.Element</a> holding created node
           * @example
           * <div><code>
           * let div = createDiv('this is some text');
           * div.style('font-size', '16px');
           * div.position(10, 0);
           * </code></div>
           */ cov_8ak35vatu.s[65]++;
          _main.default.prototype.createDiv = function() {
            var html =
              arguments.length > 0 && arguments[0] !== undefined
                ? arguments[0]
                : (cov_8ak35vatu.b[18][0]++, '');
            cov_8ak35vatu.f[12]++;
            var elt = (cov_8ak35vatu.s[66]++, document.createElement('div'));
            cov_8ak35vatu.s[67]++;
            elt.innerHTML = html;
            cov_8ak35vatu.s[68]++;
            return addElement(elt, this);
          };

          /**
           * Creates a `&lt;p&gt;&lt;/p&gt;` element in the DOM with given inner HTML. Used
           * for paragraph length text.
           *
           * @method createP
           * @param  {String} [html] inner HTML for element created
           * @return {p5.Element} pointer to <a href="#/p5.Element">p5.Element</a> holding created node
           * @example
           * <div><code>
           * let p = createP('this is some text');
           * p.style('font-size', '16px');
           * p.position(10, 0);
           * </code></div>
           */ cov_8ak35vatu.s[69]++;
          _main.default.prototype.createP = function() {
            var html =
              arguments.length > 0 && arguments[0] !== undefined
                ? arguments[0]
                : (cov_8ak35vatu.b[19][0]++, '');
            cov_8ak35vatu.f[13]++;
            var elt = (cov_8ak35vatu.s[70]++, document.createElement('p'));
            cov_8ak35vatu.s[71]++;
            elt.innerHTML = html;
            cov_8ak35vatu.s[72]++;
            return addElement(elt, this);
          };

          /**
           * Creates a `&lt;span&gt;&lt;/span&gt;` element in the DOM with given inner HTML.
           *
           * @method createSpan
           * @param  {String} [html] inner HTML for element created
           * @return {p5.Element} pointer to <a href="#/p5.Element">p5.Element</a> holding created node
           * @example
           * <div><code>
           * let span = createSpan('this is some text');
           * span.position(0, 0);
           * </code></div>
           */ cov_8ak35vatu.s[73]++;
          _main.default.prototype.createSpan = function() {
            var html =
              arguments.length > 0 && arguments[0] !== undefined
                ? arguments[0]
                : (cov_8ak35vatu.b[20][0]++, '');
            cov_8ak35vatu.f[14]++;
            var elt = (cov_8ak35vatu.s[74]++, document.createElement('span'));
            cov_8ak35vatu.s[75]++;
            elt.innerHTML = html;
            cov_8ak35vatu.s[76]++;
            return addElement(elt, this);
          };

          /**
           * Creates an `&lt;img&gt;` element in the DOM with given src and
           * alternate text.
           *
           * @method createImg
           * @param  {String} src src path or url for image
           * @param  {String} alt <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Img#Attributes">alternate text</a> to be used if image does not load. You can use also an empty string (`""`) if that an image is not intended to be viewed.
           * @return {p5.Element} pointer to <a href="#/p5.Element">p5.Element</a> holding created node
           * @example
           *  <div><code>
           * let img = createImg(
           *   'https://p5js.org/assets/img/asterisk-01.png',
           *   'the p5 magenta asterisk'
           * );
           * img.position(0, -10);
           * </code></div>
           */
          /**
           * @method createImg
           * @param  {String} src
           * @param  {String} alt
           * @param  {String} crossOrigin <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes">crossOrigin property</a> of the `img` element; use either 'anonymous' or 'use-credentials' to retrieve the image with cross-origin access (for later use with `canvas`. if an empty string(`""`) is passed, CORS is not used
           * @param  {Function} [successCallback] callback to be called once image data is loaded with the <a href="#/p5.Element">p5.Element</a> as argument
           * @return {p5.Element} pointer to <a href="#/p5.Element">p5.Element</a> holding created node
           */ cov_8ak35vatu.s[77]++;
          _main.default.prototype.createImg = function() {
            cov_8ak35vatu.f[15]++;
            cov_8ak35vatu.s[78]++;
            _main.default._validateParameters('createImg', arguments);
            var elt = (cov_8ak35vatu.s[79]++, document.createElement('img'));
            var args = (cov_8ak35vatu.s[80]++, arguments);
            var self;
            cov_8ak35vatu.s[81]++;
            if (
              (cov_8ak35vatu.b[22][0]++, args.length > 1) &&
              (cov_8ak35vatu.b[22][1]++, typeof args[1] === 'string')
            ) {
              cov_8ak35vatu.b[21][0]++;
              cov_8ak35vatu.s[82]++;
              elt.alt = args[1];
            } else {
              cov_8ak35vatu.b[21][1]++;
            }
            cov_8ak35vatu.s[83]++;
            if (
              (cov_8ak35vatu.b[24][0]++, args.length > 2) &&
              (cov_8ak35vatu.b[24][1]++, typeof args[2] === 'string')
            ) {
              cov_8ak35vatu.b[23][0]++;
              cov_8ak35vatu.s[84]++;
              elt.crossOrigin = args[2];
            } else {
              cov_8ak35vatu.b[23][1]++;
            }
            cov_8ak35vatu.s[85]++;
            elt.src = args[0];
            cov_8ak35vatu.s[86]++;
            self = addElement(elt, this);
            cov_8ak35vatu.s[87]++;
            elt.addEventListener('load', function() {
              cov_8ak35vatu.f[16]++;
              cov_8ak35vatu.s[88]++;
              self.width =
                (cov_8ak35vatu.b[25][0]++, elt.offsetWidth) ||
                (cov_8ak35vatu.b[25][1]++, elt.width);
              cov_8ak35vatu.s[89]++;
              self.height =
                (cov_8ak35vatu.b[26][0]++, elt.offsetHeight) ||
                (cov_8ak35vatu.b[26][1]++, elt.height);
              var last = (cov_8ak35vatu.s[90]++, args[args.length - 1]);
              cov_8ak35vatu.s[91]++;
              if (typeof last === 'function') {
                cov_8ak35vatu.b[27][0]++;
                cov_8ak35vatu.s[92]++;
                last(self);
              } else {
                cov_8ak35vatu.b[27][1]++;
              }
            });
            cov_8ak35vatu.s[93]++;
            return self;
          };

          /**
           * Creates an `&lt;a&gt;&lt;/a&gt;` element in the DOM for including a hyperlink.
           *
           * @method createA
           * @param  {String} href       url of page to link to
           * @param  {String} html       inner html of link element to display
           * @param  {String} [target]   target where new link should open,
           *                             could be _blank, _self, _parent, _top.
           * @return {p5.Element} pointer to <a href="#/p5.Element">p5.Element</a> holding created node
           * @example
           * <div><code>
           * let a = createA('http://p5js.org/', 'this is a link');
           * a.position(0, 0);
           * </code></div>
           */ cov_8ak35vatu.s[94]++;
          _main.default.prototype.createA = function(href, html, target) {
            cov_8ak35vatu.f[17]++;
            cov_8ak35vatu.s[95]++;
            _main.default._validateParameters('createA', arguments);
            var elt = (cov_8ak35vatu.s[96]++, document.createElement('a'));
            cov_8ak35vatu.s[97]++;
            elt.href = href;
            cov_8ak35vatu.s[98]++;
            elt.innerHTML = html;
            cov_8ak35vatu.s[99]++;
            if (target) {
              cov_8ak35vatu.b[28][0]++;
              cov_8ak35vatu.s[100]++;
              elt.target = target;
            } else {
              cov_8ak35vatu.b[28][1]++;
            }
            cov_8ak35vatu.s[101]++;
            return addElement(elt, this);
          };

          /** INPUT **/

          /**
           * Creates a slider `&lt;input&gt;&lt;/input&gt;` element in the DOM.
           * Use .size() to set the display length of the slider.
           *
           * @method createSlider
           * @param  {Number} min minimum value of the slider
           * @param  {Number} max maximum value of the slider
           * @param  {Number} [value] default value of the slider
           * @param  {Number} [step] step size for each tick of the slider (if step is set to 0, the slider will move continuously from the minimum to the maximum value)
           * @return {p5.Element} pointer to <a href="#/p5.Element">p5.Element</a> holding created node
           * @example
           * <div><code>
           * let slider;
           * function setup() {
           *   slider = createSlider(0, 255, 100);
           *   slider.position(10, 10);
           *   slider.style('width', '80px');
           * }
           *
           * function draw() {
           *   let val = slider.value();
           *   background(val);
           * }
           * </code></div>
           *
           * <div><code>
           * let slider;
           * function setup() {
           *   colorMode(HSB);
           *   slider = createSlider(0, 360, 60, 40);
           *   slider.position(10, 10);
           *   slider.style('width', '80px');
           * }
           *
           * function draw() {
           *   let val = slider.value();
           *   background(val, 100, 100, 1);
           * }
           * </code></div>
           */ cov_8ak35vatu.s[102]++;
          _main.default.prototype.createSlider = function(min, max, value, step) {
            cov_8ak35vatu.f[18]++;
            cov_8ak35vatu.s[103]++;
            _main.default._validateParameters('createSlider', arguments);
            var elt = (cov_8ak35vatu.s[104]++, document.createElement('input'));
            cov_8ak35vatu.s[105]++;
            elt.type = 'range';
            cov_8ak35vatu.s[106]++;
            elt.min = min;
            cov_8ak35vatu.s[107]++;
            elt.max = max;
            cov_8ak35vatu.s[108]++;
            if (step === 0) {
              cov_8ak35vatu.b[29][0]++;
              cov_8ak35vatu.s[109]++;
              elt.step = 0.000000000000000001; // smallest valid step
            } else {
              cov_8ak35vatu.b[29][1]++;
              cov_8ak35vatu.s[110]++;
              if (step) {
                cov_8ak35vatu.b[30][0]++;
                cov_8ak35vatu.s[111]++;
                elt.step = step;
              } else {
                cov_8ak35vatu.b[30][1]++;
              }
            }
            cov_8ak35vatu.s[112]++;
            if (typeof value === 'number') {
              cov_8ak35vatu.b[31][0]++;
              cov_8ak35vatu.s[113]++;
              elt.value = value;
            } else {
              cov_8ak35vatu.b[31][1]++;
            }
            cov_8ak35vatu.s[114]++;
            return addElement(elt, this);
          };

          /**
           * Creates a `&lt;button&gt;&lt;/button&gt;` element in the DOM.
           * Use .size() to set the display size of the button.
           * Use .mousePressed() to specify behavior on press.
           *
           * @method createButton
           * @param  {String} label label displayed on the button
           * @param  {String} [value] value of the button
           * @return {p5.Element} pointer to <a href="#/p5.Element">p5.Element</a> holding created node
           * @example
           * <div><code>
           * let button;
           * function setup() {
           *   createCanvas(100, 100);
           *   background(0);
           *   button = createButton('click me');
           *   button.position(0, 0);
           *   button.mousePressed(changeBG);
           * }
           *
           * function changeBG() {
           *   let val = random(255);
           *   background(val);
           * }
           * </code></div>
           */ cov_8ak35vatu.s[115]++;
          _main.default.prototype.createButton = function(label, value) {
            cov_8ak35vatu.f[19]++;
            cov_8ak35vatu.s[116]++;
            _main.default._validateParameters('createButton', arguments);
            var elt = (cov_8ak35vatu.s[117]++, document.createElement('button'));
            cov_8ak35vatu.s[118]++;
            elt.innerHTML = label;
            cov_8ak35vatu.s[119]++;
            if (value) {
              cov_8ak35vatu.b[32][0]++;
              cov_8ak35vatu.s[120]++;
              elt.value = value;
            } else {
              cov_8ak35vatu.b[32][1]++;
            }
            cov_8ak35vatu.s[121]++;
            return addElement(elt, this);
          };

          /**
           * Creates a checkbox `&lt;input&gt;&lt;/input&gt;` element in the DOM.
           * Calling .checked() on a checkbox returns if it is checked or not
           *
           * @method createCheckbox
           * @param  {String} [label] label displayed after checkbox
           * @param  {boolean} [value] value of the checkbox; checked is true, unchecked is false
           * @return {p5.Element} pointer to <a href="#/p5.Element">p5.Element</a> holding created node
           * @example
           * <div><code>
           * let checkbox;
           *
           * function setup() {
           *   checkbox = createCheckbox('label', false);
           *   checkbox.changed(myCheckedEvent);
           * }
           *
           * function myCheckedEvent() {
           *   if (this.checked()) {
           *     console.log('Checking!');
           *   } else {
           *     console.log('Unchecking!');
           *   }
           * }
           * </code></div>
           */ cov_8ak35vatu.s[122]++;
          _main.default.prototype.createCheckbox = function() {
            cov_8ak35vatu.f[20]++;
            cov_8ak35vatu.s[123]++;
            _main.default._validateParameters('createCheckbox', arguments);
            var elt = (cov_8ak35vatu.s[124]++, document.createElement('div'));
            var checkbox = (cov_8ak35vatu.s[125]++, document.createElement('input'));
            cov_8ak35vatu.s[126]++;
            checkbox.type = 'checkbox';
            cov_8ak35vatu.s[127]++;
            elt.appendChild(checkbox);
            //checkbox must be wrapped in p5.Element before label so that label appears after
            var self = (cov_8ak35vatu.s[128]++, addElement(elt, this));
            cov_8ak35vatu.s[129]++;
            self.checked = function() {
              cov_8ak35vatu.f[21]++;
              var cb = (cov_8ak35vatu.s[130]++, self.elt.getElementsByTagName('input')[0]);
              cov_8ak35vatu.s[131]++;
              if (cb) {
                cov_8ak35vatu.b[33][0]++;
                cov_8ak35vatu.s[132]++;
                if (arguments.length === 0) {
                  cov_8ak35vatu.b[34][0]++;
                  cov_8ak35vatu.s[133]++;
                  return cb.checked;
                } else {
                  cov_8ak35vatu.b[34][1]++;
                  cov_8ak35vatu.s[134]++;
                  if (arguments[0]) {
                    cov_8ak35vatu.b[35][0]++;
                    cov_8ak35vatu.s[135]++;
                    cb.checked = true;
                  } else {
                    cov_8ak35vatu.b[35][1]++;
                    cov_8ak35vatu.s[136]++;
                    cb.checked = false;
                  }
                }
              } else {
                cov_8ak35vatu.b[33][1]++;
              }
              cov_8ak35vatu.s[137]++;
              return self;
            };
            cov_8ak35vatu.s[138]++;
            this.value = function(val) {
              cov_8ak35vatu.f[22]++;
              cov_8ak35vatu.s[139]++;
              self.value = val;
              cov_8ak35vatu.s[140]++;
              return this;
            };
            cov_8ak35vatu.s[141]++;
            if (arguments[0]) {
              cov_8ak35vatu.b[36][0]++;
              var ran = (cov_8ak35vatu.s[142]++,
              Math.random()
                .toString(36)
                .slice(2));
              var label = (cov_8ak35vatu.s[143]++, document.createElement('label'));
              cov_8ak35vatu.s[144]++;
              checkbox.setAttribute('id', ran);
              cov_8ak35vatu.s[145]++;
              label.htmlFor = ran;
              cov_8ak35vatu.s[146]++;
              self.value(arguments[0]);
              cov_8ak35vatu.s[147]++;
              label.appendChild(document.createTextNode(arguments[0]));
              cov_8ak35vatu.s[148]++;
              elt.appendChild(label);
            } else {
              cov_8ak35vatu.b[36][1]++;
            }
            cov_8ak35vatu.s[149]++;
            if (arguments[1]) {
              cov_8ak35vatu.b[37][0]++;
              cov_8ak35vatu.s[150]++;
              checkbox.checked = true;
            } else {
              cov_8ak35vatu.b[37][1]++;
            }
            cov_8ak35vatu.s[151]++;
            return self;
          };

          /**
           * Creates a dropdown menu `&lt;select&gt;&lt;/select&gt;` element in the DOM.
           * It also helps to assign select-box methods to <a href="#/p5.Element">p5.Element</a> when selecting existing select box.
           * - `.option(name, [value])` can be used to set options for the select after it is created.
           * - `.value()` will return the currently selected option.
           * - `.selected()` will return current dropdown element which is an instance of <a href="#/p5.Element">p5.Element</a>
           * - `.selected(value)` can be used to make given option selected by default when the page first loads.
           * - `.disable()` marks whole of dropdown element as disabled.
           * - `.disable(value)` marks given option as disabled
           *
           * @method createSelect
           * @param {boolean} [multiple] true if dropdown should support multiple selections
           * @return {p5.Element}
           * @example
           * <div><code>
           * let sel;
           *
           * function setup() {
           *   textAlign(CENTER);
           *   background(200);
           *   sel = createSelect();
           *   sel.position(10, 10);
           *   sel.option('pear');
           *   sel.option('kiwi');
           *   sel.option('grape');
           *   sel.selected('kiwi');
           *   sel.changed(mySelectEvent);
           * }
           *
           * function mySelectEvent() {
           *   let item = sel.value();
           *   background(200);
           *   text('It is a ' + item + '!', 50, 50);
           * }
           * </code></div>
           *
           * <div><code>
           * let sel;
           *
           * function setup() {
           *   textAlign(CENTER);
           *   background(200);
           *   sel = createSelect();
           *   sel.position(10, 10);
           *   sel.option('oil');
           *   sel.option('milk');
           *   sel.option('bread');
           *   sel.disable('milk');
           * }
           * </code></div>
           */
          /**
           * @method createSelect
           * @param {Object} existing DOM select element
           * @return {p5.Element}
           */ cov_8ak35vatu.s[152]++;

          _main.default.prototype.createSelect = function() {
            cov_8ak35vatu.f[23]++;
            cov_8ak35vatu.s[153]++;
            _main.default._validateParameters('createSelect', arguments);
            var self;
            var arg = (cov_8ak35vatu.s[154]++, arguments[0]);
            cov_8ak35vatu.s[155]++;
            if (
              (cov_8ak35vatu.b[39][0]++, arg instanceof _main.default.Element) &&
              (cov_8ak35vatu.b[39][1]++, arg.elt instanceof HTMLSelectElement)
            ) {
              cov_8ak35vatu.b[38][0]++;
              cov_8ak35vatu.s[156]++;
              // If given argument is p5.Element of select type
              self = arg;
              cov_8ak35vatu.s[157]++;
              this.elt = arg.elt;
            } else {
              cov_8ak35vatu.b[38][1]++;
              cov_8ak35vatu.s[158]++;
              if (arg instanceof HTMLSelectElement) {
                cov_8ak35vatu.b[40][0]++;
                cov_8ak35vatu.s[159]++;
                self = addElement(arg, this);
                cov_8ak35vatu.s[160]++;
                this.elt = arg;
              } else {
                cov_8ak35vatu.b[40][1]++;
                var elt = (cov_8ak35vatu.s[161]++, document.createElement('select'));
                cov_8ak35vatu.s[162]++;
                if (
                  (cov_8ak35vatu.b[42][0]++, arg) &&
                  (cov_8ak35vatu.b[42][1]++, typeof arg === 'boolean')
                ) {
                  cov_8ak35vatu.b[41][0]++;
                  cov_8ak35vatu.s[163]++;
                  elt.setAttribute('multiple', 'true');
                } else {
                  cov_8ak35vatu.b[41][1]++;
                }
                cov_8ak35vatu.s[164]++;
                self = addElement(elt, this);
                cov_8ak35vatu.s[165]++;
                this.elt = elt;
              }
            }
            cov_8ak35vatu.s[166]++;
            self.option = function(name, value) {
              cov_8ak35vatu.f[24]++;
              var index;

              // if no name is passed, return
              cov_8ak35vatu.s[167]++;
              if (name === undefined) {
                cov_8ak35vatu.b[43][0]++;
                cov_8ak35vatu.s[168]++;
                return;
              } else {
                cov_8ak35vatu.b[43][1]++;
              }
              //see if there is already an option with this name
              cov_8ak35vatu.s[169]++;
              for (var i = (cov_8ak35vatu.s[170]++, 0); i < this.elt.length; i += 1) {
                cov_8ak35vatu.s[171]++;
                if (this.elt[i].innerHTML === name) {
                  cov_8ak35vatu.b[44][0]++;
                  cov_8ak35vatu.s[172]++;
                  index = i;
                  cov_8ak35vatu.s[173]++;
                  break;
                } else {
                  cov_8ak35vatu.b[44][1]++;
                }
              }
              //if there is an option with this name we will modify it
              cov_8ak35vatu.s[174]++;
              if (index !== undefined) {
                cov_8ak35vatu.b[45][0]++;
                cov_8ak35vatu.s[175]++;
                //if the user passed in false then delete that option
                if (value === false) {
                  cov_8ak35vatu.b[46][0]++;
                  cov_8ak35vatu.s[176]++;
                  this.elt.remove(index);
                } else {
                  cov_8ak35vatu.b[46][1]++;
                  cov_8ak35vatu.s[177]++;
                  // Update the option at index with the value
                  this.elt[index].value = value;
                }
              } else {
                cov_8ak35vatu.b[45][1]++;
                //if it doesn't exist create it
                var opt = (cov_8ak35vatu.s[178]++, document.createElement('option'));
                cov_8ak35vatu.s[179]++;
                opt.innerHTML = name;
                cov_8ak35vatu.s[180]++;
                opt.value =
                  value === undefined
                    ? (cov_8ak35vatu.b[47][0]++, name)
                    : (cov_8ak35vatu.b[47][1]++, value);
                cov_8ak35vatu.s[181]++;
                this.elt.appendChild(opt);
                cov_8ak35vatu.s[182]++;
                this._pInst._elements.push(opt);
              }
            };
            cov_8ak35vatu.s[183]++;

            self.selected = function(value) {
              cov_8ak35vatu.f[25]++;
              cov_8ak35vatu.s[184]++;
              // Update selected status of option
              if (value !== undefined) {
                cov_8ak35vatu.b[48][0]++;
                cov_8ak35vatu.s[185]++;
                for (var i = (cov_8ak35vatu.s[186]++, 0); i < this.elt.length; i += 1) {
                  cov_8ak35vatu.s[187]++;
                  if (this.elt[i].value.toString() === value.toString()) {
                    cov_8ak35vatu.b[49][0]++;
                    cov_8ak35vatu.s[188]++;
                    this.elt.selectedIndex = i;
                  } else {
                    cov_8ak35vatu.b[49][1]++;
                  }
                }
                cov_8ak35vatu.s[189]++;
                return this;
              } else {
                cov_8ak35vatu.b[48][1]++;
                cov_8ak35vatu.s[190]++;
                if (this.elt.getAttribute('multiple')) {
                  cov_8ak35vatu.b[50][0]++;
                  var arr = (cov_8ak35vatu.s[191]++, []);
                  cov_8ak35vatu.s[192]++;
                  var _iteratorNormalCompletion = true;
                  var _didIteratorError = false;
                  var _iteratorError = undefined;
                  try {
                    for (
                      var _iterator = this.elt.selectedOptions[Symbol.iterator](), _step;
                      !(_iteratorNormalCompletion = (_step = _iterator.next()).done);
                      _iteratorNormalCompletion = true
                    ) {
                      var selectedOption = _step.value;
                      cov_8ak35vatu.s[193]++;
                      arr.push(selectedOption.value);
                    }
                  } catch (err) {
                    _didIteratorError = true;
                    _iteratorError = err;
                  } finally {
                    try {
                      if (!_iteratorNormalCompletion && _iterator.return != null) {
                        _iterator.return();
                      }
                    } finally {
                      if (_didIteratorError) {
                        throw _iteratorError;
                      }
                    }
                  }
                  cov_8ak35vatu.s[194]++;
                  return arr;
                } else {
                  cov_8ak35vatu.b[50][1]++;
                  cov_8ak35vatu.s[195]++;
                  return this.elt.value;
                }
              }
            };
            cov_8ak35vatu.s[196]++;

            self.disable = function(value) {
              cov_8ak35vatu.f[26]++;
              cov_8ak35vatu.s[197]++;
              if (typeof value === 'string') {
                cov_8ak35vatu.b[51][0]++;
                cov_8ak35vatu.s[198]++;
                for (var i = (cov_8ak35vatu.s[199]++, 0); i < this.elt.length; i++) {
                  cov_8ak35vatu.s[200]++;
                  if (this.elt[i].value.toString() === value) {
                    cov_8ak35vatu.b[52][0]++;
                    cov_8ak35vatu.s[201]++;
                    this.elt[i].disabled = true;
                    cov_8ak35vatu.s[202]++;
                    this.elt[i].selected = false;
                  } else {
                    cov_8ak35vatu.b[52][1]++;
                  }
                }
              } else {
                cov_8ak35vatu.b[51][1]++;
                cov_8ak35vatu.s[203]++;
                this.elt.disabled = true;
              }
              cov_8ak35vatu.s[204]++;
              return this;
            };
            cov_8ak35vatu.s[205]++;

            return self;
          };

          /**
           * Creates a radio button element in the DOM.It also helps existing radio buttons
           * assign methods of <a href="#/p5.Element/">p5.Element</a>.
           * - `.option(value, [label])` can be used to create a new option for the
           *   element. If an option with a value already exists, it will be returned.
           *   Optionally, a label can be provided as second argument for the option.
           * - `.remove(value)` can be used to remove an option for the element.
           * - `.value()` method will return the currently selected value.
           * - `.selected()` method will return the currently selected input element.
           * - `.selected(value)` method will select the option and return it.
           * - `.disable(Boolean)` method will enable/disable the whole radio button element.
           *
           * @method createRadio
           * @param  {Object} containerElement An container HTML Element either a div
           * or span inside which all existing radio inputs will be considered as options.
           * @param {string} [name] A name parameter for each Input Element.
           * @return {p5.Element} pointer to <a href="#/p5.Element">p5.Element</a> holding created node
           * @example
           * <div><code>
           * let radio;
           *
           * function setup() {
           *   radio = createRadio();
           *   radio.option('black');
           *   radio.option('white');
           *   radio.option('gray');
           *   radio.style('width', '60px');
           *   textAlign(CENTER);
           *   fill(255, 0, 0);
           * }
           *
           * function draw() {
           *   let val = radio.value();
           *   background(val);
           *   text(val, width / 2, height / 2);
           * }
           * </code></div>
           * <div><code>
           * let radio;
           *
           * function setup() {
           *   radio = createRadio();
           *   radio.option(1, 'apple');
           *   radio.option(2, 'bread');
           *   radio.option(3, 'juice');
           *   radio.style('width', '30px');
           *   textAlign(CENTER);
           * }
           *
           * function draw() {
           *   background(200);
           *   let val = radio.value();
           *   if (val) {
           *     text('item cost is $' + val, width / 2, height / 2);
           *   }
           * }
           * </code></div>
           */
          /**
           * @method createRadio
           * @param {String} name
           * @return {p5.Element} pointer to <a href="#/p5.Element">p5.Element</a> holding created node
           */
          /**
           * @method createRadio
           * @return {p5.Element} pointer to <a href="#/p5.Element">p5.Element</a> holding created node
           */ cov_8ak35vatu.s[206]++;
          _main.default.prototype.createRadio = function() {
            cov_8ak35vatu.f[27]++;
            // Creates a div, adds each option as an individual input inside it.
            // If already given with a containerEl, will search for all input[radio]
            // it, create a p5.Element out of it, add options to it and return the p5.Element.

            var radioElement;
            var name;
            var arg0 = (cov_8ak35vatu.s[207]++, arguments[0]);
            // If existing radio Element is provided as argument 0
            cov_8ak35vatu.s[208]++;
            if (
              (cov_8ak35vatu.b[54][0]++, arg0 instanceof HTMLDivElement) ||
              (cov_8ak35vatu.b[54][1]++, arg0 instanceof HTMLSpanElement)
            ) {
              cov_8ak35vatu.b[53][0]++;
              cov_8ak35vatu.s[209]++;
              radioElement = arg0;
              cov_8ak35vatu.s[210]++;
              if (typeof arguments[1] === 'string') {
                cov_8ak35vatu.b[55][0]++;
                cov_8ak35vatu.s[211]++;
                name = arguments[1];
              } else {
                cov_8ak35vatu.b[55][1]++;
              }
            } else {
              cov_8ak35vatu.b[53][1]++;
              cov_8ak35vatu.s[212]++;
              if (typeof arg0 === 'string') {
                cov_8ak35vatu.b[56][0]++;
                cov_8ak35vatu.s[213]++;
                name = arg0;
              } else {
                cov_8ak35vatu.b[56][1]++;
              }
              cov_8ak35vatu.s[214]++;
              radioElement = document.createElement('div');
            }
            cov_8ak35vatu.s[215]++;
            this.elt = radioElement;
            var self = (cov_8ak35vatu.s[216]++, addElement(radioElement, this));
            cov_8ak35vatu.s[217]++;
            self._name =
              (cov_8ak35vatu.b[57][0]++, name) || (cov_8ak35vatu.b[57][1]++, 'radioOption');

            // setup member functions
            cov_8ak35vatu.s[218]++;
            var isRadioInput = function isRadioInput(el) {
              cov_8ak35vatu.f[28]++;
              cov_8ak35vatu.s[219]++;
              return (
                (cov_8ak35vatu.b[58][0]++, el instanceof HTMLInputElement) &&
                (cov_8ak35vatu.b[58][1]++, el.type === 'radio')
              );
            };
            cov_8ak35vatu.s[220]++;
            var isNextLabel = function isNextLabel(el) {
              cov_8ak35vatu.f[29]++;
              cov_8ak35vatu.s[221]++;
              return el.nextElementSibling instanceof HTMLLabelElement;
            };
            cov_8ak35vatu.s[222]++;

            self._getOptionsArray = function() {
              cov_8ak35vatu.f[30]++;
              cov_8ak35vatu.s[223]++;
              return Array.from(this.elt.children).filter(isRadioInput);
            };
            cov_8ak35vatu.s[224]++;

            self.option = function(value, label) {
              cov_8ak35vatu.f[31]++;
              // return an option with this value, create if not exists.
              var optionEl;
              cov_8ak35vatu.s[225]++;
              var _iteratorNormalCompletion2 = true;
              var _didIteratorError2 = false;
              var _iteratorError2 = undefined;
              try {
                for (
                  var _iterator2 = self._getOptionsArray()[Symbol.iterator](), _step2;
                  !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done);
                  _iteratorNormalCompletion2 = true
                ) {
                  var option = _step2.value;
                  cov_8ak35vatu.s[226]++;
                  if (option.value === value) {
                    cov_8ak35vatu.b[59][0]++;
                    cov_8ak35vatu.s[227]++;
                    optionEl = option;
                    cov_8ak35vatu.s[228]++;
                    break;
                  } else {
                    cov_8ak35vatu.b[59][1]++;
                  }
                }

                // Create a new option, add it to radioElement and return it.
              } catch (err) {
                _didIteratorError2 = true;
                _iteratorError2 = err;
              } finally {
                try {
                  if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
                    _iterator2.return();
                  }
                } finally {
                  if (_didIteratorError2) {
                    throw _iteratorError2;
                  }
                }
              }
              cov_8ak35vatu.s[229]++;
              if (optionEl === undefined) {
                cov_8ak35vatu.b[60][0]++;
                cov_8ak35vatu.s[230]++;
                optionEl = document.createElement('input');
                cov_8ak35vatu.s[231]++;
                optionEl.setAttribute('type', 'radio');
                cov_8ak35vatu.s[232]++;
                optionEl.setAttribute('value', value);
                cov_8ak35vatu.s[233]++;
                this.elt.appendChild(optionEl);
              } else {
                cov_8ak35vatu.b[60][1]++;
              }

              // Check if label element exists, else create it
              var labelElement;
              cov_8ak35vatu.s[234]++;
              if (!isNextLabel(optionEl)) {
                cov_8ak35vatu.b[61][0]++;
                cov_8ak35vatu.s[235]++;
                labelElement = document.createElement('label');
                cov_8ak35vatu.s[236]++;
                optionEl.insertAdjacentElement('afterend', labelElement);
              } else {
                cov_8ak35vatu.b[61][1]++;
                cov_8ak35vatu.s[237]++;
                labelElement = optionEl.nextElementSibling;
              }
              cov_8ak35vatu.s[238]++;

              labelElement.innerHTML =
                label === undefined
                  ? (cov_8ak35vatu.b[62][0]++, value)
                  : (cov_8ak35vatu.b[62][1]++, label);
              cov_8ak35vatu.s[239]++;
              optionEl.setAttribute('name', self._name);
              cov_8ak35vatu.s[240]++;
              return optionEl;
            };
            cov_8ak35vatu.s[241]++;

            self.remove = function(value) {
              cov_8ak35vatu.f[32]++;
              cov_8ak35vatu.s[242]++;
              var _iteratorNormalCompletion3 = true;
              var _didIteratorError3 = false;
              var _iteratorError3 = undefined;
              try {
                for (
                  var _iterator3 = self._getOptionsArray()[Symbol.iterator](), _step3;
                  !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done);
                  _iteratorNormalCompletion3 = true
                ) {
                  var optionEl = _step3.value;
                  cov_8ak35vatu.s[243]++;
                  if (optionEl.value === value) {
                    cov_8ak35vatu.b[63][0]++;
                    cov_8ak35vatu.s[244]++;
                    if (isNextLabel(optionEl)) {
                      cov_8ak35vatu.b[64][0]++;
                      cov_8ak35vatu.s[245]++;
                      optionEl.nextElementSibling.remove();
                    } else {
                      cov_8ak35vatu.b[64][1]++;
                    }
                    cov_8ak35vatu.s[246]++;
                    optionEl.remove();
                    cov_8ak35vatu.s[247]++;
                    return;
                  } else {
                    cov_8ak35vatu.b[63][1]++;
                  }
                }
              } catch (err) {
                _didIteratorError3 = true;
                _iteratorError3 = err;
              } finally {
                try {
                  if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
                    _iterator3.return();
                  }
                } finally {
                  if (_didIteratorError3) {
                    throw _iteratorError3;
                  }
                }
              }
            };
            cov_8ak35vatu.s[248]++;

            self.value = function() {
              cov_8ak35vatu.f[33]++;
              var result = (cov_8ak35vatu.s[249]++, '');
              cov_8ak35vatu.s[250]++;
              var _iteratorNormalCompletion4 = true;
              var _didIteratorError4 = false;
              var _iteratorError4 = undefined;
              try {
                for (
                  var _iterator4 = self._getOptionsArray()[Symbol.iterator](), _step4;
                  !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done);
                  _iteratorNormalCompletion4 = true
                ) {
                  var option = _step4.value;
                  cov_8ak35vatu.s[251]++;
                  if (option.checked) {
                    cov_8ak35vatu.b[65][0]++;
                    cov_8ak35vatu.s[252]++;
                    result = option.value;
                    cov_8ak35vatu.s[253]++;
                    break;
                  } else {
                    cov_8ak35vatu.b[65][1]++;
                  }
                }
              } catch (err) {
                _didIteratorError4 = true;
                _iteratorError4 = err;
              } finally {
                try {
                  if (!_iteratorNormalCompletion4 && _iterator4.return != null) {
                    _iterator4.return();
                  }
                } finally {
                  if (_didIteratorError4) {
                    throw _iteratorError4;
                  }
                }
              }
              cov_8ak35vatu.s[254]++;
              return result;
            };
            cov_8ak35vatu.s[255]++;

            self.selected = function(value) {
              cov_8ak35vatu.f[34]++;
              var result = (cov_8ak35vatu.s[256]++, null);
              cov_8ak35vatu.s[257]++;
              if (value === undefined) {
                cov_8ak35vatu.b[66][0]++;
                cov_8ak35vatu.s[258]++;
                var _iteratorNormalCompletion5 = true;
                var _didIteratorError5 = false;
                var _iteratorError5 = undefined;
                try {
                  for (
                    var _iterator5 = self._getOptionsArray()[Symbol.iterator](), _step5;
                    !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done);
                    _iteratorNormalCompletion5 = true
                  ) {
                    var option = _step5.value;
                    cov_8ak35vatu.s[259]++;
                    if (option.checked) {
                      cov_8ak35vatu.b[67][0]++;
                      cov_8ak35vatu.s[260]++;
                      result = option;
                      cov_8ak35vatu.s[261]++;
                      break;
                    } else {
                      cov_8ak35vatu.b[67][1]++;
                    }
                  }
                } catch (err) {
                  _didIteratorError5 = true;
                  _iteratorError5 = err;
                } finally {
                  try {
                    if (!_iteratorNormalCompletion5 && _iterator5.return != null) {
                      _iterator5.return();
                    }
                  } finally {
                    if (_didIteratorError5) {
                      throw _iteratorError5;
                    }
                  }
                }
              } else {
                cov_8ak35vatu.b[66][1]++;
                cov_8ak35vatu.s[262]++;
                var _iteratorNormalCompletion6 = true;
                var _didIteratorError6 = false;
                var _iteratorError6 = undefined;
                try {
                  for (
                    var _iterator6 = self._getOptionsArray()[Symbol.iterator](), _step6;
                    !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done);
                    _iteratorNormalCompletion6 = true
                  ) {
                    var _option = _step6.value;
                    cov_8ak35vatu.s[263]++;
                    if (_option.value === value) {
                      cov_8ak35vatu.b[68][0]++;
                      cov_8ak35vatu.s[264]++;
                      _option.setAttribute('checked', true);
                      cov_8ak35vatu.s[265]++;
                      result = _option;
                    } else {
                      cov_8ak35vatu.b[68][1]++;
                    }
                  }
                } catch (err) {
                  _didIteratorError6 = true;
                  _iteratorError6 = err;
                } finally {
                  try {
                    if (!_iteratorNormalCompletion6 && _iterator6.return != null) {
                      _iterator6.return();
                    }
                  } finally {
                    if (_didIteratorError6) {
                      throw _iteratorError6;
                    }
                  }
                }
              }
              cov_8ak35vatu.s[266]++;
              return result;
            };
            cov_8ak35vatu.s[267]++;

            self.disable = function() {
              var shouldDisable =
                arguments.length > 0 && arguments[0] !== undefined
                  ? arguments[0]
                  : (cov_8ak35vatu.b[69][0]++, true);
              cov_8ak35vatu.f[35]++;
              cov_8ak35vatu.s[268]++;
              var _iteratorNormalCompletion7 = true;
              var _didIteratorError7 = false;
              var _iteratorError7 = undefined;
              try {
                for (
                  var _iterator7 = self._getOptionsArray()[Symbol.iterator](), _step7;
                  !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done);
                  _iteratorNormalCompletion7 = true
                ) {
                  var radioInput = _step7.value;
                  cov_8ak35vatu.s[269]++;
                  radioInput.setAttribute('disabled', shouldDisable);
                }
              } catch (err) {
                _didIteratorError7 = true;
                _iteratorError7 = err;
              } finally {
                try {
                  if (!_iteratorNormalCompletion7 && _iterator7.return != null) {
                    _iterator7.return();
                  }
                } finally {
                  if (_didIteratorError7) {
                    throw _iteratorError7;
                  }
                }
              }
            };
            cov_8ak35vatu.s[270]++;

            return self;
          };

          /**
           * Creates a colorPicker element in the DOM for color input.
           * The .value() method will return a hex string (#rrggbb) of the color.
           * The .color() method will return a p5.Color object with the current chosen color.
           *
           * @method createColorPicker
           * @param {String|p5.Color} [value] default color of element
           * @return {p5.Element} pointer to <a href="#/p5.Element">p5.Element</a> holding created node
           * @example
           * <div><code>
           * let colorPicker;
           * function setup() {
           *   createCanvas(100, 100);
           *   colorPicker = createColorPicker('#ed225d');
           *   colorPicker.position(0, height + 5);
           * }
           *
           * function draw() {
           *   background(colorPicker.color());
           * }
           * </code></div>
           * <div><code>
           * let inp1, inp2;
           * function setup() {
           *   createCanvas(100, 100);
           *   background('grey');
           *   inp1 = createColorPicker('#ff0000');
           *   inp1.position(0, height + 5);
           *   inp1.input(setShade1);
           *   inp2 = createColorPicker(color('yellow'));
           *   inp2.position(0, height + 30);
           *   inp2.input(setShade2);
           *   setMidShade();
           * }
           *
           * function setMidShade() {
           *   // Finding a shade between the two
           *   let commonShade = lerpColor(inp1.color(), inp2.color(), 0.5);
           *   fill(commonShade);
           *   rect(20, 20, 60, 60);
           * }
           *
           * function setShade1() {
           *   setMidShade();
           *   console.log('You are choosing shade 1 to be : ', this.value());
           * }
           * function setShade2() {
           *   setMidShade();
           *   console.log('You are choosing shade 2 to be : ', this.value());
           * }
           * </code></div>
           */ cov_8ak35vatu.s[271]++;
          _main.default.prototype.createColorPicker = function(value) {
            cov_8ak35vatu.f[36]++;
            cov_8ak35vatu.s[272]++;
            _main.default._validateParameters('createColorPicker', arguments);
            var elt = (cov_8ak35vatu.s[273]++, document.createElement('input'));
            var self;
            cov_8ak35vatu.s[274]++;
            elt.type = 'color';
            cov_8ak35vatu.s[275]++;
            if (value) {
              cov_8ak35vatu.b[70][0]++;
              cov_8ak35vatu.s[276]++;
              if (value instanceof _main.default.Color) {
                cov_8ak35vatu.b[71][0]++;
                cov_8ak35vatu.s[277]++;
                elt.value = value.toString('#rrggbb');
              } else {
                cov_8ak35vatu.b[71][1]++;
                cov_8ak35vatu.s[278]++;
                _main.default.prototype._colorMode = 'rgb';
                cov_8ak35vatu.s[279]++;
                _main.default.prototype._colorMaxes = {
                  rgb: [255, 255, 255, 255],
                  hsb: [360, 100, 100, 1],
                  hsl: [360, 100, 100, 1]
                };
                cov_8ak35vatu.s[280]++;

                elt.value = _main.default.prototype.color(value).toString('#rrggbb');
              }
            } else {
              cov_8ak35vatu.b[70][1]++;
              cov_8ak35vatu.s[281]++;
              elt.value = '#000000';
            }
            cov_8ak35vatu.s[282]++;
            self = addElement(elt, this);
            // Method to return a p5.Color object for the given color.
            cov_8ak35vatu.s[283]++;
            self.color = function() {
              cov_8ak35vatu.f[37]++;
              cov_8ak35vatu.s[284]++;
              if (value) {
                cov_8ak35vatu.b[72][0]++;
                cov_8ak35vatu.s[285]++;
                if (value.mode) {
                  cov_8ak35vatu.b[73][0]++;
                  cov_8ak35vatu.s[286]++;
                  _main.default.prototype._colorMode = value.mode;
                } else {
                  cov_8ak35vatu.b[73][1]++;
                }
                cov_8ak35vatu.s[287]++;
                if (value.maxes) {
                  cov_8ak35vatu.b[74][0]++;
                  cov_8ak35vatu.s[288]++;
                  _main.default.prototype._colorMaxes = value.maxes;
                } else {
                  cov_8ak35vatu.b[74][1]++;
                }
              } else {
                cov_8ak35vatu.b[72][1]++;
              }
              cov_8ak35vatu.s[289]++;
              return _main.default.prototype.color(this.elt.value);
            };
            cov_8ak35vatu.s[290]++;
            return self;
          };

          /**
           * Creates an `&lt;input&gt;&lt;/input&gt;` element in the DOM for text input.
           * Use .<a href="#/p5.Element/size">size()</a> to set the display length of the box.
           *
           * @method createInput
           * @param {String} value default value of the input box
           * @param {String} [type] type of text, ie text, password etc. Defaults to text.
           *   Needs a value to be specified first.
           * @return {p5.Element} pointer to <a href="#/p5.Element">p5.Element</a> holding created node
           * @example
           * <div><code>
           * function setup() {
           *   createCanvas(100, 100);
           *   background('grey');
           *   let inp = createInput('');
           *   inp.position(0, 0);
           *   inp.size(100);
           *   inp.input(myInputEvent);
           * }
           *
           * function myInputEvent() {
           *   console.log('you are typing: ', this.value());
           * }
           * </code></div>
           */
          /**
           * @method createInput
           * @param {String} [value]
           * @return {p5.Element}
           */ cov_8ak35vatu.s[291]++;
          _main.default.prototype.createInput = function() {
            var value =
              arguments.length > 0 && arguments[0] !== undefined
                ? arguments[0]
                : (cov_8ak35vatu.b[75][0]++, '');
            var type =
              arguments.length > 1 && arguments[1] !== undefined
                ? arguments[1]
                : (cov_8ak35vatu.b[76][0]++, 'text');
            cov_8ak35vatu.f[38]++;
            cov_8ak35vatu.s[292]++;
            _main.default._validateParameters('createInput', arguments);
            var elt = (cov_8ak35vatu.s[293]++, document.createElement('input'));
            cov_8ak35vatu.s[294]++;
            elt.setAttribute('value', value);
            cov_8ak35vatu.s[295]++;
            elt.setAttribute('type', type);
            cov_8ak35vatu.s[296]++;
            return addElement(elt, this);
          };

          /**
           * Creates an `&lt;input&gt;&lt;/input&gt;` element in the DOM of type 'file'.
           * This allows users to select local files for use in a sketch.
           *
           * @method createFileInput
           * @param  {Function} callback callback function for when a file is loaded
           * @param  {Boolean} [multiple] optional, to allow multiple files to be selected
           * @return {p5.Element} pointer to <a href="#/p5.Element">p5.Element</a> holding created DOM element
           * @example
           * <div><code>
           * let input;
           * let img;
           *
           * function setup() {
           *   input = createFileInput(handleFile);
           *   input.position(0, 0);
           * }
           *
           * function draw() {
           *   background(255);
           *   if (img) {
           *     image(img, 0, 0, width, height);
           *   }
           * }
           *
           * function handleFile(file) {
           *   print(file);
           *   if (file.type === 'image') {
           *     img = createImg(file.data, '');
           *     img.hide();
           *   } else {
           *     img = null;
           *   }
           * }
           * </code></div>
           */ cov_8ak35vatu.s[297]++;
          _main.default.prototype.createFileInput = function(callback) {
            var multiple =
              arguments.length > 1 && arguments[1] !== undefined
                ? arguments[1]
                : (cov_8ak35vatu.b[77][0]++, false);
            cov_8ak35vatu.f[39]++;
            cov_8ak35vatu.s[298]++;
            _main.default._validateParameters('createFileInput', arguments);
            cov_8ak35vatu.s[299]++;

            var handleFileSelect = function handleFileSelect(event) {
              cov_8ak35vatu.f[40]++;
              cov_8ak35vatu.s[300]++;
              var _iteratorNormalCompletion8 = true;
              var _didIteratorError8 = false;
              var _iteratorError8 = undefined;
              try {
                for (
                  var _iterator8 = event.target.files[Symbol.iterator](), _step8;
                  !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done);
                  _iteratorNormalCompletion8 = true
                ) {
                  var file = _step8.value;
                  cov_8ak35vatu.s[301]++;
                  _main.default.File._load(file, callback);
                }
              } catch (err) {
                _didIteratorError8 = true;
                _iteratorError8 = err;
              } finally {
                try {
                  if (!_iteratorNormalCompletion8 && _iterator8.return != null) {
                    _iterator8.return();
                  }
                } finally {
                  if (_didIteratorError8) {
                    throw _iteratorError8;
                  }
                }
              }
            };

            // If File API's are not supported, throw Error
            cov_8ak35vatu.s[302]++;
            if (
              !(
                (cov_8ak35vatu.b[79][0]++, window.File) &&
                (cov_8ak35vatu.b[79][1]++, window.FileReader) &&
                (cov_8ak35vatu.b[79][2]++, window.FileList) &&
                (cov_8ak35vatu.b[79][3]++, window.Blob)
              )
            ) {
              cov_8ak35vatu.b[78][0]++;
              cov_8ak35vatu.s[303]++;
              console.log(
                'The File APIs are not fully supported in this browser. Cannot create element.'
              );
              cov_8ak35vatu.s[304]++;

              return;
            } else {
              cov_8ak35vatu.b[78][1]++;
            }

            var fileInput = (cov_8ak35vatu.s[305]++, document.createElement('input'));
            cov_8ak35vatu.s[306]++;
            fileInput.setAttribute('type', 'file');
            cov_8ak35vatu.s[307]++;
            if (multiple) {
              cov_8ak35vatu.b[80][0]++;
              cov_8ak35vatu.s[308]++;
              fileInput.setAttribute('multiple', true);
            } else {
              cov_8ak35vatu.b[80][1]++;
            }
            cov_8ak35vatu.s[309]++;
            fileInput.addEventListener('change', handleFileSelect, false);
            cov_8ak35vatu.s[310]++;
            return addElement(fileInput, this);
          };

          /** VIDEO STUFF **/

          // Helps perform similar tasks for media element methods.
          function createMedia(pInst, type, src, callback) {
            cov_8ak35vatu.f[41]++;
            var elt = (cov_8ak35vatu.s[311]++, document.createElement(type));

            // Create source elements from given sources
            cov_8ak35vatu.s[312]++;
            src = (cov_8ak35vatu.b[81][0]++, src) || (cov_8ak35vatu.b[81][1]++, '');
            cov_8ak35vatu.s[313]++;
            if (typeof src === 'string') {
              cov_8ak35vatu.b[82][0]++;
              cov_8ak35vatu.s[314]++;
              src = [src];
            } else {
              cov_8ak35vatu.b[82][1]++;
            }
            cov_8ak35vatu.s[315]++;
            var _iteratorNormalCompletion9 = true;
            var _didIteratorError9 = false;
            var _iteratorError9 = undefined;
            try {
              for (
                var _iterator9 = src[Symbol.iterator](), _step9;
                !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done);
                _iteratorNormalCompletion9 = true
              ) {
                var mediaSource = _step9.value;
                var sourceEl = (cov_8ak35vatu.s[316]++, document.createElement('source'));
                cov_8ak35vatu.s[317]++;
                sourceEl.setAttribute('src', mediaSource);
                cov_8ak35vatu.s[318]++;
                elt.appendChild(sourceEl);
              }

              // If callback is provided, attach to element
            } catch (err) {
              _didIteratorError9 = true;
              _iteratorError9 = err;
            } finally {
              try {
                if (!_iteratorNormalCompletion9 && _iterator9.return != null) {
                  _iterator9.return();
                }
              } finally {
                if (_didIteratorError9) {
                  throw _iteratorError9;
                }
              }
            }
            cov_8ak35vatu.s[319]++;
            if (typeof callback === 'function') {
              cov_8ak35vatu.b[83][0]++;
              cov_8ak35vatu.s[320]++;
              var callbackHandler = function callbackHandler() {
                cov_8ak35vatu.f[42]++;
                cov_8ak35vatu.s[321]++;
                callback();
                cov_8ak35vatu.s[322]++;
                elt.removeEventListener('canplaythrough', callbackHandler);
              };
              cov_8ak35vatu.s[323]++;
              elt.addEventListener('canplaythrough', callbackHandler);
            } else {
              cov_8ak35vatu.b[83][1]++;
            }

            var mediaEl = (cov_8ak35vatu.s[324]++, addElement(elt, pInst, true));
            cov_8ak35vatu.s[325]++;
            mediaEl.loadedmetadata = false;

            // set width and height onload metadata
            cov_8ak35vatu.s[326]++;
            elt.addEventListener('loadedmetadata', function() {
              cov_8ak35vatu.f[43]++;
              cov_8ak35vatu.s[327]++;
              mediaEl.width = elt.videoWidth;
              cov_8ak35vatu.s[328]++;
              mediaEl.height = elt.videoHeight;

              // set elt width and height if not set
              cov_8ak35vatu.s[329]++;
              if (mediaEl.elt.width === 0) {
                cov_8ak35vatu.b[84][0]++;
                cov_8ak35vatu.s[330]++;
                mediaEl.elt.width = elt.videoWidth;
              } else {
                cov_8ak35vatu.b[84][1]++;
              }
              cov_8ak35vatu.s[331]++;
              if (mediaEl.elt.height === 0) {
                cov_8ak35vatu.b[85][0]++;
                cov_8ak35vatu.s[332]++;
                mediaEl.elt.height = elt.videoHeight;
              } else {
                cov_8ak35vatu.b[85][1]++;
              }
              cov_8ak35vatu.s[333]++;
              if (mediaEl.presetPlaybackRate) {
                cov_8ak35vatu.b[86][0]++;
                cov_8ak35vatu.s[334]++;
                mediaEl.elt.playbackRate = mediaEl.presetPlaybackRate;
                cov_8ak35vatu.s[335]++;
                delete mediaEl.presetPlaybackRate;
              } else {
                cov_8ak35vatu.b[86][1]++;
              }
              cov_8ak35vatu.s[336]++;
              mediaEl.loadedmetadata = true;
            });
            cov_8ak35vatu.s[337]++;

            return mediaEl;
          }

          /**
           * Creates an HTML5 `&lt;video&gt;` element in the DOM for simple playback
           * of audio/video. Shown by default, can be hidden with .<a href="#/p5.Element/hide">hide()</a>
           * and drawn into canvas using <a href="#/p5/image">image()</a>. The first parameter
           * can be either a single string path to a video file, or an array of string
           * paths to different formats of the same video. This is useful for ensuring
           * that your video can play across different browsers, as each supports
           * different formats. See <a href='https://developer.mozilla.org/en-US/docs/Web/HTML/Supported_media_formats'>this
           * page</a> for further information about supported formats.
           *
           * @method createVideo
           * @param  {String|String[]} src path to a video file, or array of paths for
           *                             supporting different browsers
           * @param  {Function} [callback] callback function to be called upon
           *                             'canplaythrough' event fire, that is, when the
           *                             browser can play the media, and estimates that
           *                             enough data has been loaded to play the media
           *                             up to its end without having to stop for
           *                             further buffering of content
           * @return {p5.MediaElement}   pointer to video <a href="#/p5.Element">p5.Element</a>
           * @example
           * <div><code>
           * let vid;
           * function setup() {
           *   noCanvas();
           *
           *   vid = createVideo(
           *     ['assets/small.mp4', 'assets/small.ogv', 'assets/small.webm'],
           *     vidLoad
           *   );
           *
           *   vid.size(100, 100);
           * }
           *
           * // This function is called when the video loads
           * function vidLoad() {
           *   vid.loop();
           *   vid.volume(0);
           * }
           * </code></div>
           */ cov_8ak35vatu.s[338]++;
          _main.default.prototype.createVideo = function(src, callback) {
            cov_8ak35vatu.f[44]++;
            cov_8ak35vatu.s[339]++;
            _main.default._validateParameters('createVideo', arguments);
            cov_8ak35vatu.s[340]++;
            return createMedia(this, 'video', src, callback);
          };

          /** AUDIO STUFF **/

          /**
           * Creates a hidden HTML5 `&lt;audio&gt;` element in the DOM for simple audio
           * playback. The first parameter can be either a single string path to a
           * audio file, or an array of string paths to different formats of the same
           * audio. This is useful for ensuring that your audio can play across
           * different browsers, as each supports different formats.
           * See <a href='https://developer.mozilla.org/en-US/docs/Web/HTML/Supported_media_formats'>this
           * page for further information about supported formats</a>.
           *
           * @method createAudio
           * @param  {String|String[]} [src] path to an audio file, or array of paths
           *                             for supporting different browsers
           * @param  {Function} [callback] callback function to be called upon
           *                             'canplaythrough' event fire, that is, when the
           *                             browser can play the media, and estimates that
           *                             enough data has been loaded to play the media
           *                             up to its end without having to stop for
           *                             further buffering of content
           * @return {p5.MediaElement}   pointer to audio <a href="#/p5.Element">p5.Element</a>
           * @example
           * <div><code>
           * let ele;
           * function setup() {
           *   ele = createAudio('assets/beat.mp3');
           *
           *   // here we set the element to autoplay
           *   // The element will play as soon
           *   // as it is able to do so.
           *   ele.autoplay(true);
           * }
           * </code></div>
           */ cov_8ak35vatu.s[341]++;
          _main.default.prototype.createAudio = function(src, callback) {
            cov_8ak35vatu.f[45]++;
            cov_8ak35vatu.s[342]++;
            _main.default._validateParameters('createAudio', arguments);
            cov_8ak35vatu.s[343]++;
            return createMedia(this, 'audio', src, callback);
          };

          /** CAMERA STUFF **/

          /**
           * @property {String} VIDEO
           * @final
           * @category Constants
           */ cov_8ak35vatu.s[344]++;
          _main.default.prototype.VIDEO = 'video';
          /**
           * @property {String} AUDIO
           * @final
           * @category Constants
           */ cov_8ak35vatu.s[345]++;
          _main.default.prototype.AUDIO = 'audio';

          // from: https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia
          // Older browsers might not implement mediaDevices at all, so we set an empty object first
          cov_8ak35vatu.s[346]++;
          if (navigator.mediaDevices === undefined) {
            cov_8ak35vatu.b[87][0]++;
            cov_8ak35vatu.s[347]++;
            navigator.mediaDevices = {};
          } else {
            cov_8ak35vatu.b[87][1]++;
          }

          // Some browsers partially implement mediaDevices. We can't just assign an object
          // with getUserMedia as it would overwrite existing properties.
          // Here, we will just add the getUserMedia property if it's missing.
          cov_8ak35vatu.s[348]++;
          if (navigator.mediaDevices.getUserMedia === undefined) {
            cov_8ak35vatu.b[88][0]++;
            cov_8ak35vatu.s[349]++;
            navigator.mediaDevices.getUserMedia = function(constraints) {
              cov_8ak35vatu.f[46]++;
              // First get ahold of the legacy getUserMedia, if present
              var getUserMedia = (cov_8ak35vatu.s[350]++,
              (cov_8ak35vatu.b[89][0]++, navigator.webkitGetUserMedia) ||
                (cov_8ak35vatu.b[89][1]++, navigator.mozGetUserMedia));

              // Some browsers just don't implement it - return a rejected promise with an error
              // to keep a consistent interface
              cov_8ak35vatu.s[351]++;
              if (!getUserMedia) {
                cov_8ak35vatu.b[90][0]++;
                cov_8ak35vatu.s[352]++;
                return Promise.reject(
                  new Error('getUserMedia is not implemented in this browser')
                );
              } else {
                cov_8ak35vatu.b[90][1]++;
              }

              // Otherwise, wrap the call to the old navigator.getUserMedia with a Promise
              cov_8ak35vatu.s[353]++;
              return new Promise(function(resolve, reject) {
                cov_8ak35vatu.f[47]++;
                cov_8ak35vatu.s[354]++;
                getUserMedia.call(navigator, constraints, resolve, reject);
              });
            };
          } else {
            cov_8ak35vatu.b[88][1]++;
          }

          /**
           * Creates a new HTML5 `&lt;video&gt;` element that contains the audio/video feed
           * from a webcam. The element is separate from the canvas and is displayed by
           * default. The element can be hidden using .<a href="#/p5.Element/hide">hide()</a>.
           * The feed can be drawn onto the canvas using <a href="#/p5/image">image()</a>.
           * The loadedmetadata property can be used to detect when the element has fully
           * loaded (see second example).
           *
           * More specific properties of the feed can be passing in a Constraints object.
           * See the <a href='http://w3c.github.io/mediacapture-main/getusermedia.html#media-track-constraints'>
           * W3C spec</a> for possible properties. Note that not all of these are supported
           * by all browsers.
           *
           * <em>Security note</em>: A new browser security specification requires that
           * getUserMedia, which is behind <a href="#/p5/createCapture">createCapture()</a>,
           * only works when you're running the code locally, or on HTTPS. Learn more
           * <a href='http://stackoverflow.com/questions/34197653/getusermedia-in-chrome-47-without-using-https'>here</a>
           * and <a href='https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia'>here</a>.
           *
           * @method createCapture
           * @param  {String|Constant|Object}   type type of capture, either VIDEO or
           *                                   AUDIO if none specified, default both,
           *                                   or a Constraints object
           * @param  {Function}                 [callback] function to be called once
           *                                   stream has loaded
           * @return {p5.Element} capture video <a href="#/p5.Element">p5.Element</a>
           * @example
           * <div class='notest'>
           * <code>
           * let capture;
           *
           * function setup() {
           *   createCanvas(100, 100);
           *   capture = createCapture(VIDEO);
           *   capture.hide();
           * }
           *
           * function draw() {
           *   image(capture, 0, 0, width, width * capture.height / capture.width);
           *   filter(INVERT);
           * }
           * </code>
           * </div>
           *
           * <div class='notest norender'>
           * <code>
           * function setup() {
           *   createCanvas(480, 120);
           *   let constraints = {
           *     video: {
           *       mandatory: {
           *         minWidth: 1280,
           *         minHeight: 720
           *       },
           *       optional: [{ maxFrameRate: 10 }]
           *     },
           *     audio: true
           *   };
           *   createCapture(constraints, function(stream) {
           *     console.log(stream);
           *   });
           * }
           * </code>
           * </div>
           * <div class='notest norender'>
           * <code>
           * let capture;
           *
           * function setup() {
           *   createCanvas(640, 480);
           *   capture = createCapture(VIDEO);
           * }
           * function draw() {
           *   background(0);
           *   if (capture.loadedmetadata) {
           *     let c = capture.get(0, 0, 100, 100);
           *     image(c, 0, 0);
           *   }
           * }
           * </code>
           * </div>
           */ cov_8ak35vatu.s[355]++;
          _main.default.prototype.createCapture = function() {
            cov_8ak35vatu.f[48]++;
            cov_8ak35vatu.s[356]++;
            _main.default._validateParameters('createCapture', arguments);

            // return if getUserMedia is not supported by browser
            cov_8ak35vatu.s[357]++;
            if (
              !(
                (cov_8ak35vatu.b[92][0]++, navigator.mediaDevices) &&
                (cov_8ak35vatu.b[92][1]++, navigator.mediaDevices.getUserMedia)
              )
            ) {
              cov_8ak35vatu.b[91][0]++;
              cov_8ak35vatu.s[358]++;
              throw new DOMException('getUserMedia not supported in this browser');
            } else {
              cov_8ak35vatu.b[91][1]++;
            }

            var useVideo = (cov_8ak35vatu.s[359]++, true);
            var useAudio = (cov_8ak35vatu.s[360]++, true);
            var constraints;
            var callback;
            cov_8ak35vatu.s[361]++;
            var _iteratorNormalCompletion10 = true;
            var _didIteratorError10 = false;
            var _iteratorError10 = undefined;
            try {
              for (
                var _iterator10 = arguments[Symbol.iterator](), _step10;
                !(_iteratorNormalCompletion10 = (_step10 = _iterator10.next()).done);
                _iteratorNormalCompletion10 = true
              ) {
                var arg = _step10.value;
                cov_8ak35vatu.s[362]++;
                if (arg === _main.default.prototype.VIDEO) {
                  cov_8ak35vatu.b[93][0]++;
                  cov_8ak35vatu.s[363]++;
                  useAudio = false;
                } else {
                  cov_8ak35vatu.b[93][1]++;
                  cov_8ak35vatu.s[364]++;
                  if (arg === _main.default.prototype.AUDIO) {
                    cov_8ak35vatu.b[94][0]++;
                    cov_8ak35vatu.s[365]++;
                    useVideo = false;
                  } else {
                    cov_8ak35vatu.b[94][1]++;
                    cov_8ak35vatu.s[366]++;
                    if (_typeof(arg) === 'object') {
                      cov_8ak35vatu.b[95][0]++;
                      cov_8ak35vatu.s[367]++;
                      constraints = arg;
                    } else {
                      cov_8ak35vatu.b[95][1]++;
                      cov_8ak35vatu.s[368]++;
                      if (typeof arg === 'function') {
                        cov_8ak35vatu.b[96][0]++;
                        cov_8ak35vatu.s[369]++;
                        callback = arg;
                      } else {
                        cov_8ak35vatu.b[96][1]++;
                      }
                    }
                  }
                }
              }
            } catch (err) {
              _didIteratorError10 = true;
              _iteratorError10 = err;
            } finally {
              try {
                if (!_iteratorNormalCompletion10 && _iterator10.return != null) {
                  _iterator10.return();
                }
              } finally {
                if (_didIteratorError10) {
                  throw _iteratorError10;
                }
              }
            }
            cov_8ak35vatu.s[370]++;
            if (!constraints) {
              cov_8ak35vatu.b[97][0]++;
              cov_8ak35vatu.s[371]++;
              constraints = { video: useVideo, audio: useAudio };
            } else {
              cov_8ak35vatu.b[97][1]++;
            }

            var domElement = (cov_8ak35vatu.s[372]++, document.createElement('video'));
            // required to work in iOS 11 & up:
            cov_8ak35vatu.s[373]++;
            domElement.setAttribute('playsinline', '');
            cov_8ak35vatu.s[374]++;

            navigator.mediaDevices.getUserMedia(constraints).then(function(stream) {
              cov_8ak35vatu.f[49]++;
              cov_8ak35vatu.s[375]++;
              try {
                cov_8ak35vatu.s[376]++;
                if ('srcObject' in domElement) {
                  cov_8ak35vatu.b[98][0]++;
                  cov_8ak35vatu.s[377]++;
                  domElement.srcObject = stream;
                } else {
                  cov_8ak35vatu.b[98][1]++;
                  cov_8ak35vatu.s[378]++;
                  domElement.src = window.URL.createObjectURL(stream);
                }
              } catch (err) {
                cov_8ak35vatu.s[379]++;
                domElement.src = stream;
              }
            }, console.log);

            var videoEl = (cov_8ak35vatu.s[380]++, addElement(domElement, this, true));
            cov_8ak35vatu.s[381]++;
            videoEl.loadedmetadata = false;
            // set width and height onload metadata
            cov_8ak35vatu.s[382]++;
            domElement.addEventListener('loadedmetadata', function() {
              cov_8ak35vatu.f[50]++;
              cov_8ak35vatu.s[383]++;
              domElement.play();
              cov_8ak35vatu.s[384]++;
              if (domElement.width) {
                cov_8ak35vatu.b[99][0]++;
                cov_8ak35vatu.s[385]++;
                videoEl.width = domElement.width;
                cov_8ak35vatu.s[386]++;
                videoEl.height = domElement.height;
              } else {
                cov_8ak35vatu.b[99][1]++;
                cov_8ak35vatu.s[387]++;
                videoEl.width = videoEl.elt.width = domElement.videoWidth;
                cov_8ak35vatu.s[388]++;
                videoEl.height = videoEl.elt.height = domElement.videoHeight;
              }
              cov_8ak35vatu.s[389]++;
              videoEl.loadedmetadata = true;
              cov_8ak35vatu.s[390]++;

              if (callback) {
                cov_8ak35vatu.b[100][0]++;
                cov_8ak35vatu.s[391]++;
                callback(domElement.srcObject);
              } else {
                cov_8ak35vatu.b[100][1]++;
              }
            });
            cov_8ak35vatu.s[392]++;
            return videoEl;
          };

          /**
           * Creates element with given tag in the DOM with given content.
           *
           * @method createElement
           * @param  {String} tag tag for the new element
           * @param  {String} [content] html content to be inserted into the element
           * @return {p5.Element} pointer to <a href="#/p5.Element">p5.Element</a> holding created node
           * @example
           * <div><code>
           * let h5 = createElement('h5', 'im an h5 p5.element!');
           * h5.style('color', '#00a1d3');
           * h5.position(0, 0);
           * </code></div>
           */ cov_8ak35vatu.s[393]++;
          _main.default.prototype.createElement = function(tag, content) {
            cov_8ak35vatu.f[51]++;
            cov_8ak35vatu.s[394]++;
            _main.default._validateParameters('createElement', arguments);
            var elt = (cov_8ak35vatu.s[395]++, document.createElement(tag));
            cov_8ak35vatu.s[396]++;
            if (typeof content !== 'undefined') {
              cov_8ak35vatu.b[101][0]++;
              cov_8ak35vatu.s[397]++;
              elt.innerHTML = content;
            } else {
              cov_8ak35vatu.b[101][1]++;
            }
            cov_8ak35vatu.s[398]++;
            return addElement(elt, this);
          };

          // =============================================================================
          //                         p5.Element additions
          // =============================================================================
          /**
           *
           * Adds specified class to the element.
           *
           * @for p5.Element
           * @method addClass
           * @param  {String} class name of class to add
           * @chainable
           * @example
           * <div class='norender'><code>
           * let div = createDiv('div');
           * div.addClass('myClass');
           * </code></div>
           */ cov_8ak35vatu.s[399]++;
          _main.default.Element.prototype.addClass = function(c) {
            cov_8ak35vatu.f[52]++;
            cov_8ak35vatu.s[400]++;
            if (this.elt.className) {
              cov_8ak35vatu.b[102][0]++;
              cov_8ak35vatu.s[401]++;
              if (!this.hasClass(c)) {
                cov_8ak35vatu.b[103][0]++;
                cov_8ak35vatu.s[402]++;
                this.elt.className = this.elt.className + ' ' + c;
              } else {
                cov_8ak35vatu.b[103][1]++;
              }
            } else {
              cov_8ak35vatu.b[102][1]++;
              cov_8ak35vatu.s[403]++;
              this.elt.className = c;
            }
            cov_8ak35vatu.s[404]++;
            return this;
          };

          /**
           *
           * Removes specified class from the element.
           *
           * @method removeClass
           * @param  {String} class name of class to remove
           * @chainable
           * @example
           * <div class='norender'><code>
           * // In this example, a class is set when the div is created
           * // and removed when mouse is pressed. This could link up
           * // with a CSS style rule to toggle style properties.
           *
           * let div;
           *
           * function setup() {
           *   div = createDiv('div');
           *   div.addClass('myClass');
           * }
           *
           * function mousePressed() {
           *   div.removeClass('myClass');
           * }
           * </code></div>
           */ cov_8ak35vatu.s[405]++;
          _main.default.Element.prototype.removeClass = function(c) {
            cov_8ak35vatu.f[53]++;
            cov_8ak35vatu.s[406]++;
            // Note: Removing a class that does not exist does NOT throw an error in classList.remove method
            this.elt.classList.remove(c);
            cov_8ak35vatu.s[407]++;
            return this;
          };

          /**
           *
           * Checks if specified class already set to element
           *
           * @method hasClass
           * @returns {boolean} a boolean value if element has specified class
           * @param c {String} class name of class to check
           * @example
           * <div class='norender'><code>
           * let div;
           *
           * function setup() {
           *   div = createDiv('div');
           *   div.addClass('show');
           * }
           *
           * function mousePressed() {
           *   if (div.hasClass('show')) {
           *     div.addClass('show');
           *   } else {
           *     div.removeClass('show');
           *   }
           * }
           * </code></div>
           */ cov_8ak35vatu.s[408]++;
          _main.default.Element.prototype.hasClass = function(c) {
            cov_8ak35vatu.f[54]++;
            cov_8ak35vatu.s[409]++;
            return this.elt.classList.contains(c);
          };

          /**
           *
           * Toggles element class
           *
           * @method toggleClass
           * @param c {String} class name to toggle
           * @chainable
           * @example
           * <div class='norender'><code>
           * let div;
           *
           * function setup() {
           *   div = createDiv('div');
           *   div.addClass('show');
           * }
           *
           * function mousePressed() {
           *   div.toggleClass('show');
           * }
           * </code></div>
           */ cov_8ak35vatu.s[410]++;
          _main.default.Element.prototype.toggleClass = function(c) {
            cov_8ak35vatu.f[55]++;
            cov_8ak35vatu.s[411]++;
            // classList also has a toggle() method, but we cannot use that yet as support is unclear.
            // See https://github.com/processing/p5.js/issues/3631
            // this.elt.classList.toggle(c);
            if (this.elt.classList.contains(c)) {
              cov_8ak35vatu.b[104][0]++;
              cov_8ak35vatu.s[412]++;
              this.elt.classList.remove(c);
            } else {
              cov_8ak35vatu.b[104][1]++;
              cov_8ak35vatu.s[413]++;
              this.elt.classList.add(c);
            }
            cov_8ak35vatu.s[414]++;
            return this;
          };

          /**
           *
           * Attaches the element  as a child to the parent specified.
           * Accepts either a string ID, DOM node, or <a href="#/p5.Element">p5.Element</a>.
           * If no argument is specified, an array of children DOM nodes is returned.
           *
           * @method child
           * @returns {Node[]} an array of child nodes
           * @example
           * <div class='norender'><code>
           * let div0 = createDiv('this is the parent');
           * let div1 = createDiv('this is the child');
           * div0.child(div1); // use p5.Element
           * </code></div>
           * <div class='norender'><code>
           * let div0 = createDiv('this is the parent');
           * let div1 = createDiv('this is the child');
           * div1.id('apples');
           * div0.child('apples'); // use id
           * </code></div>
           * <div class='norender notest'><code>
           * // this example assumes there is a div already on the page
           * // with id "myChildDiv"
           * let div0 = createDiv('this is the parent');
           * let elt = document.getElementById('myChildDiv');
           * div0.child(elt); // use element from page
           * </code></div>
           */
          /**
           * @method child
           * @param  {String|p5.Element} [child] the ID, DOM node, or <a href="#/p5.Element">p5.Element</a>
           *                         to add to the current element
           * @chainable
           */ cov_8ak35vatu.s[415]++;
          _main.default.Element.prototype.child = function(childNode) {
            cov_8ak35vatu.f[56]++;
            cov_8ak35vatu.s[416]++;
            if (typeof childNode === 'undefined') {
              cov_8ak35vatu.b[105][0]++;
              cov_8ak35vatu.s[417]++;
              return this.elt.childNodes;
            } else {
              cov_8ak35vatu.b[105][1]++;
            }
            cov_8ak35vatu.s[418]++;
            if (typeof childNode === 'string') {
              cov_8ak35vatu.b[106][0]++;
              cov_8ak35vatu.s[419]++;
              if (childNode[0] === '#') {
                cov_8ak35vatu.b[107][0]++;
                cov_8ak35vatu.s[420]++;
                childNode = childNode.substring(1);
              } else {
                cov_8ak35vatu.b[107][1]++;
              }
              cov_8ak35vatu.s[421]++;
              childNode = document.getElementById(childNode);
            } else {
              cov_8ak35vatu.b[106][1]++;
              cov_8ak35vatu.s[422]++;
              if (childNode instanceof _main.default.Element) {
                cov_8ak35vatu.b[108][0]++;
                cov_8ak35vatu.s[423]++;
                childNode = childNode.elt;
              } else {
                cov_8ak35vatu.b[108][1]++;
              }
            }
            cov_8ak35vatu.s[424]++;

            if (childNode instanceof HTMLElement) {
              cov_8ak35vatu.b[109][0]++;
              cov_8ak35vatu.s[425]++;
              this.elt.appendChild(childNode);
            } else {
              cov_8ak35vatu.b[109][1]++;
            }
            cov_8ak35vatu.s[426]++;
            return this;
          };

          /**
           * Centers a p5 Element either vertically, horizontally,
           * or both, relative to its parent or according to
           * the body if the Element has no parent. If no argument is passed
           * the Element is aligned both vertically and horizontally.
           *
           * @method center
           * @param  {String} [align]       passing 'vertical', 'horizontal' aligns element accordingly
           * @chainable
           *
           * @example
           * <div><code>
           * function setup() {
           *   let div = createDiv('').size(10, 10);
           *   div.style('background-color', 'orange');
           *   div.center();
           * }
           * </code></div>
           */ cov_8ak35vatu.s[427]++;
          _main.default.Element.prototype.center = function(align) {
            cov_8ak35vatu.f[57]++;
            var style = (cov_8ak35vatu.s[428]++, this.elt.style.display);
            var hidden = (cov_8ak35vatu.s[429]++, this.elt.style.display === 'none');
            var parentHidden = (cov_8ak35vatu.s[430]++,
            this.parent().style.display === 'none');
            var pos = (cov_8ak35vatu.s[431]++,
            { x: this.elt.offsetLeft, y: this.elt.offsetTop });
            cov_8ak35vatu.s[432]++;

            if (hidden) {
              cov_8ak35vatu.b[110][0]++;
              cov_8ak35vatu.s[433]++;
              this.show();
            } else {
              cov_8ak35vatu.b[110][1]++;
            }
            cov_8ak35vatu.s[434]++;
            if (parentHidden) {
              cov_8ak35vatu.b[111][0]++;
              cov_8ak35vatu.s[435]++;
              this.parent().show();
            } else {
              cov_8ak35vatu.b[111][1]++;
            }
            cov_8ak35vatu.s[436]++;
            this.elt.style.display = 'block';
            cov_8ak35vatu.s[437]++;

            this.position(0, 0);
            var wOffset = (cov_8ak35vatu.s[438]++,
            Math.abs(this.parent().offsetWidth - this.elt.offsetWidth));
            var hOffset = (cov_8ak35vatu.s[439]++,
            Math.abs(this.parent().offsetHeight - this.elt.offsetHeight));
            cov_8ak35vatu.s[440]++;

            if (
              (cov_8ak35vatu.b[113][0]++, align === 'both') ||
              (cov_8ak35vatu.b[113][1]++, align === undefined)
            ) {
              cov_8ak35vatu.b[112][0]++;
              cov_8ak35vatu.s[441]++;
              this.position(
                wOffset / 2 + this.parent().offsetLeft,
                hOffset / 2 + this.parent().offsetTop
              );
            } else {
              cov_8ak35vatu.b[112][1]++;
              cov_8ak35vatu.s[442]++;
              if (align === 'horizontal') {
                cov_8ak35vatu.b[114][0]++;
                cov_8ak35vatu.s[443]++;
                this.position(wOffset / 2 + this.parent().offsetLeft, pos.y);
              } else {
                cov_8ak35vatu.b[114][1]++;
                cov_8ak35vatu.s[444]++;
                if (align === 'vertical') {
                  cov_8ak35vatu.b[115][0]++;
                  cov_8ak35vatu.s[445]++;
                  this.position(pos.x, hOffset / 2 + this.parent().offsetTop);
                } else {
                  cov_8ak35vatu.b[115][1]++;
                }
              }
            }
            cov_8ak35vatu.s[446]++;

            this.style('display', style);
            cov_8ak35vatu.s[447]++;
            if (hidden) {
              cov_8ak35vatu.b[116][0]++;
              cov_8ak35vatu.s[448]++;
              this.hide();
            } else {
              cov_8ak35vatu.b[116][1]++;
            }
            cov_8ak35vatu.s[449]++;
            if (parentHidden) {
              cov_8ak35vatu.b[117][0]++;
              cov_8ak35vatu.s[450]++;
              this.parent().hide();
            } else {
              cov_8ak35vatu.b[117][1]++;
            }
            cov_8ak35vatu.s[451]++;

            return this;
          };

          /**
           *
           * If an argument is given, sets the inner HTML of the element,
           * replacing any existing html. If true is included as a second
           * argument, html is appended instead of replacing existing html.
           * If no arguments are given, returns
           * the inner HTML of the element.
           *
           * @for p5.Element
           * @method html
           * @returns {String} the inner HTML of the element
           * @example
           * <div class='norender'><code>
           * let div = createDiv('').size(100, 100);
           * div.html('hi');
           * </code></div>
           * <div class='norender'><code>
           * let div = createDiv('Hello ').size(100, 100);
           * div.html('World', true);
           * </code></div>
           */
          /**
           * @method html
           * @param  {String} [html] the HTML to be placed inside the element
           * @param  {boolean} [append] whether to append HTML to existing
           * @chainable
           */ cov_8ak35vatu.s[452]++;
          _main.default.Element.prototype.html = function() {
            cov_8ak35vatu.f[58]++;
            cov_8ak35vatu.s[453]++;
            if (arguments.length === 0) {
              cov_8ak35vatu.b[118][0]++;
              cov_8ak35vatu.s[454]++;
              return this.elt.innerHTML;
            } else {
              cov_8ak35vatu.b[118][1]++;
              cov_8ak35vatu.s[455]++;
              if (arguments[1]) {
                cov_8ak35vatu.b[119][0]++;
                cov_8ak35vatu.s[456]++;
                this.elt.insertAdjacentHTML('beforeend', arguments[0]);
                cov_8ak35vatu.s[457]++;
                return this;
              } else {
                cov_8ak35vatu.b[119][1]++;
                cov_8ak35vatu.s[458]++;
                this.elt.innerHTML = arguments[0];
                cov_8ak35vatu.s[459]++;
                return this;
              }
            }
          };

          /**
           *
           * Sets the position of the element. If no position type argument is given, the
           * position will be relative to (0, 0) of the window.
           * Essentially, this sets position:absolute and left and top
           * properties of style. If an optional third argument specifying position type is given,
           * the x and y coordinates will be interpreted based on the <a target="_blank"
           * href="https://developer.mozilla.org/en-US/docs/Web/CSS/position">positioning scheme</a>.
           * If no arguments given, the function returns the x and y position of the element.
           *
           * found documentation on how to be more specific with object type
           * https://stackoverflow.com/questions/14714314/how-do-i-comment-object-literals-in-yuidoc
           *
           * @method position
           * @returns {Object} object of form { x: 0, y: 0 } containing the position of the element in an object
           * @example
           * <div><code class='norender'>
           * function setup() {
           *   let cnv = createCanvas(100, 100);
           *   // positions canvas 50px to the right and 100px
           *   // below upper left corner of the window
           *   cnv.position(50, 100);
           * }
           * </code></div>
           * <div><code class='norender'>
           * function setup() {
           *   let cnv = createCanvas(100, 100);
           *   // positions canvas 50px to the right and 100px
           *   // below upper left corner of the window
           *   cnv.position(0, 0, 'fixed');
           * }
           * </code></div>
           */
          /**
           * @method position
           * @param  {Number} [x] x-position relative to upper left of window (optional)
           * @param  {Number} [y] y-position relative to upper left of window (optional)
           * @param  {String} positionType it can be static, fixed, relative, sticky, initial or inherit (optional)
           * @chainable
           */ cov_8ak35vatu.s[460]++;
          _main.default.Element.prototype.position = function() {
            cov_8ak35vatu.f[59]++;
            cov_8ak35vatu.s[461]++;
            if (arguments.length === 0) {
              cov_8ak35vatu.b[120][0]++;
              cov_8ak35vatu.s[462]++;
              return { x: this.elt.offsetLeft, y: this.elt.offsetTop };
            } else {
              cov_8ak35vatu.b[120][1]++;
              var positionType = (cov_8ak35vatu.s[463]++, 'absolute');
              cov_8ak35vatu.s[464]++;
              if (
                (cov_8ak35vatu.b[122][0]++, arguments[2] === 'static') ||
                (cov_8ak35vatu.b[122][1]++, arguments[2] === 'fixed') ||
                (cov_8ak35vatu.b[122][2]++, arguments[2] === 'relative') ||
                (cov_8ak35vatu.b[122][3]++, arguments[2] === 'sticky') ||
                (cov_8ak35vatu.b[122][4]++, arguments[2] === 'initial') ||
                (cov_8ak35vatu.b[122][5]++, arguments[2] === 'inherit')
              ) {
                cov_8ak35vatu.b[121][0]++;
                cov_8ak35vatu.s[465]++;
                positionType = arguments[2];
              } else {
                cov_8ak35vatu.b[121][1]++;
              }
              cov_8ak35vatu.s[466]++;
              this.elt.style.position = positionType;
              cov_8ak35vatu.s[467]++;
              this.elt.style.left = arguments[0] + 'px';
              cov_8ak35vatu.s[468]++;
              this.elt.style.top = arguments[1] + 'px';
              cov_8ak35vatu.s[469]++;
              this.x = arguments[0];
              cov_8ak35vatu.s[470]++;
              this.y = arguments[1];
              cov_8ak35vatu.s[471]++;
              return this;
            }
          };

          /* Helper method called by p5.Element.style() */ cov_8ak35vatu.s[472]++;
          _main.default.Element.prototype._translate = function() {
            cov_8ak35vatu.f[60]++;
            cov_8ak35vatu.s[473]++;
            this.elt.style.position = 'absolute';
            // save out initial non-translate transform styling
            var transform = (cov_8ak35vatu.s[474]++, '');
            cov_8ak35vatu.s[475]++;
            if (this.elt.style.transform) {
              cov_8ak35vatu.b[123][0]++;
              cov_8ak35vatu.s[476]++;
              transform = this.elt.style.transform.replace(/translate3d\(.*\)/g, '');
              cov_8ak35vatu.s[477]++;
              transform = transform.replace(/translate[X-Z]?\(.*\)/g, '');
            } else {
              cov_8ak35vatu.b[123][1]++;
            }
            cov_8ak35vatu.s[478]++;
            if (arguments.length === 2) {
              cov_8ak35vatu.b[124][0]++;
              cov_8ak35vatu.s[479]++;
              this.elt.style.transform =
                'translate(' + arguments[0] + 'px, ' + arguments[1] + 'px)';
            } else {
              cov_8ak35vatu.b[124][1]++;
              cov_8ak35vatu.s[480]++;
              if (arguments.length > 2) {
                cov_8ak35vatu.b[125][0]++;
                cov_8ak35vatu.s[481]++;
                this.elt.style.transform =
                  'translate3d(' +
                  arguments[0] +
                  'px,' +
                  arguments[1] +
                  'px,' +
                  arguments[2] +
                  'px)';
                cov_8ak35vatu.s[482]++;
                if (arguments.length === 3) {
                  cov_8ak35vatu.b[126][0]++;
                  cov_8ak35vatu.s[483]++;
                  this.elt.parentElement.style.perspective = '1000px';
                } else {
                  cov_8ak35vatu.b[126][1]++;
                  cov_8ak35vatu.s[484]++;
                  this.elt.parentElement.style.perspective = arguments[3] + 'px';
                }
              } else {
                cov_8ak35vatu.b[125][1]++;
              }
            }
            // add any extra transform styling back on end
            cov_8ak35vatu.s[485]++;
            this.elt.style.transform += transform;
            cov_8ak35vatu.s[486]++;
            return this;
          };

          /* Helper method called by p5.Element.style() */ cov_8ak35vatu.s[487]++;
          _main.default.Element.prototype._rotate = function() {
            cov_8ak35vatu.f[61]++;
            // save out initial non-rotate transform styling
            var transform = (cov_8ak35vatu.s[488]++, '');
            cov_8ak35vatu.s[489]++;
            if (this.elt.style.transform) {
              cov_8ak35vatu.b[127][0]++;
              cov_8ak35vatu.s[490]++;
              transform = this.elt.style.transform.replace(/rotate3d\(.*\)/g, '');
              cov_8ak35vatu.s[491]++;
              transform = transform.replace(/rotate[X-Z]?\(.*\)/g, '');
            } else {
              cov_8ak35vatu.b[127][1]++;
            }
            cov_8ak35vatu.s[492]++;

            if (arguments.length === 1) {
              cov_8ak35vatu.b[128][0]++;
              cov_8ak35vatu.s[493]++;
              this.elt.style.transform = 'rotate(' + arguments[0] + 'deg)';
            } else {
              cov_8ak35vatu.b[128][1]++;
              cov_8ak35vatu.s[494]++;
              if (arguments.length === 2) {
                cov_8ak35vatu.b[129][0]++;
                cov_8ak35vatu.s[495]++;
                this.elt.style.transform =
                  'rotate(' + arguments[0] + 'deg, ' + arguments[1] + 'deg)';
              } else {
                cov_8ak35vatu.b[129][1]++;
                cov_8ak35vatu.s[496]++;
                if (arguments.length === 3) {
                  cov_8ak35vatu.b[130][0]++;
                  cov_8ak35vatu.s[497]++;
                  this.elt.style.transform = 'rotateX(' + arguments[0] + 'deg)';
                  cov_8ak35vatu.s[498]++;
                  this.elt.style.transform += 'rotateY(' + arguments[1] + 'deg)';
                  cov_8ak35vatu.s[499]++;
                  this.elt.style.transform += 'rotateZ(' + arguments[2] + 'deg)';
                } else {
                  cov_8ak35vatu.b[130][1]++;
                }
              }
            }
            // add remaining transform back on
            cov_8ak35vatu.s[500]++;
            this.elt.style.transform += transform;
            cov_8ak35vatu.s[501]++;
            return this;
          };

          /**
           * Sets the given style (css) property (1st arg) of the element with the
           * given value (2nd arg). If a single argument is given, .style()
           * returns the value of the given property; however, if the single argument
           * is given in css syntax ('text-align:center'), .style() sets the css
           * appropriately.
           *
           * @method style
           * @param  {String} property   property to be set
           * @returns {String} value of property
           * @example
           * <div><code class='norender'>
           * let myDiv = createDiv('I like pandas.');
           * myDiv.style('font-size', '18px');
           * myDiv.style('color', '#ff0000');
           * myDiv.position(0, 0);
           * </code></div>
           * <div><code class='norender'>
           * let col = color(25, 23, 200, 50);
           * let button = createButton('button');
           * button.style('background-color', col);
           * button.position(0, 0);
           * </code></div>
           * <div><code class='norender'>
           * let myDiv, fontSize;
           * function setup() {
           *   background(200);
           *   myDiv = createDiv('I like gray.');
           *   myDiv.position(0, 0);
           *   myDiv.style('z-index', 10);
           * }
           *
           * function draw() {
           *   fontSize = min(mouseX, 90);
           *   myDiv.style('font-size', fontSize + 'px');
           * }
           * </code></div>
           */
          /**
           * @method style
           * @param  {String} property
           * @param  {String|p5.Color} value     value to assign to property
           * @return {String} current value of property, if no value is given as second argument
           * @chainable
           */ cov_8ak35vatu.s[502]++;
          _main.default.Element.prototype.style = function(prop, val) {
            cov_8ak35vatu.f[62]++;
            var self = (cov_8ak35vatu.s[503]++, this);
            cov_8ak35vatu.s[504]++;

            if (val instanceof _main.default.Color) {
              cov_8ak35vatu.b[131][0]++;
              cov_8ak35vatu.s[505]++;
              val =
                'rgba(' +
                val.levels[0] +
                ',' +
                val.levels[1] +
                ',' +
                val.levels[2] +
                ',' +
                val.levels[3] / 255 +
                ')';
            } else {
              cov_8ak35vatu.b[131][1]++;
            }
            cov_8ak35vatu.s[506]++;

            if (typeof val === 'undefined') {
              cov_8ak35vatu.b[132][0]++;
              cov_8ak35vatu.s[507]++;
              if (prop.indexOf(':') === -1) {
                cov_8ak35vatu.b[133][0]++;
                // no value set, so assume requesting a value
                var styles = (cov_8ak35vatu.s[508]++, window.getComputedStyle(self.elt));
                var style = (cov_8ak35vatu.s[509]++, styles.getPropertyValue(prop));
                cov_8ak35vatu.s[510]++;
                return style;
              } else {
                cov_8ak35vatu.b[133][1]++;
                // value set using `:` in a single line string
                var attrs = (cov_8ak35vatu.s[511]++, prop.split(';'));
                cov_8ak35vatu.s[512]++;
                for (var i = (cov_8ak35vatu.s[513]++, 0); i < attrs.length; i++) {
                  var parts = (cov_8ak35vatu.s[514]++, attrs[i].split(':'));
                  cov_8ak35vatu.s[515]++;
                  if (
                    (cov_8ak35vatu.b[135][0]++, parts[0]) &&
                    (cov_8ak35vatu.b[135][1]++, parts[1])
                  ) {
                    cov_8ak35vatu.b[134][0]++;
                    cov_8ak35vatu.s[516]++;
                    this.elt.style[parts[0].trim()] = parts[1].trim();
                  } else {
                    cov_8ak35vatu.b[134][1]++;
                  }
                }
              }
            } else {
              cov_8ak35vatu.b[132][1]++;
              cov_8ak35vatu.s[517]++;
              // input provided as key,val pair
              this.elt.style[prop] = val;
              cov_8ak35vatu.s[518]++;
              if (
                (cov_8ak35vatu.b[137][0]++, prop === 'width') ||
                (cov_8ak35vatu.b[137][1]++, prop === 'height') ||
                (cov_8ak35vatu.b[137][2]++, prop === 'left') ||
                (cov_8ak35vatu.b[137][3]++, prop === 'top')
              ) {
                cov_8ak35vatu.b[136][0]++;
                var _styles = (cov_8ak35vatu.s[519]++, window.getComputedStyle(self.elt));
                var styleVal = (cov_8ak35vatu.s[520]++, _styles.getPropertyValue(prop));
                var numVal = (cov_8ak35vatu.s[521]++, styleVal.replace(/\D+/g, ''));
                cov_8ak35vatu.s[522]++;
                this[prop] = parseInt(numVal, 10);
              } else {
                cov_8ak35vatu.b[136][1]++;
              }
            }
            cov_8ak35vatu.s[523]++;
            return this;
          };

          /**
           *
           * Adds a new attribute or changes the value of an existing attribute
           * on the specified element. If no value is specified, returns the
           * value of the given attribute, or null if attribute is not set.
           *
           * @method attribute
           * @return {String} value of attribute
           *
           * @example
           * <div class='norender'><code>
           * let myDiv = createDiv('I like pandas.');
           * myDiv.attribute('align', 'center');
           * </code></div>
           */
          /**
           * @method attribute
           * @param  {String} attr       attribute to set
           * @param  {String} value      value to assign to attribute
           * @chainable
           */ cov_8ak35vatu.s[524]++;
          _main.default.Element.prototype.attribute = function(attr, value) {
            cov_8ak35vatu.f[63]++;
            cov_8ak35vatu.s[525]++;
            //handling for checkboxes and radios to ensure options get
            //attributes not divs
            if (
              (cov_8ak35vatu.b[139][0]++, this.elt.firstChild != null) &&
              ((cov_8ak35vatu.b[139][1]++, this.elt.firstChild.type === 'checkbox') ||
                (cov_8ak35vatu.b[139][2]++, this.elt.firstChild.type === 'radio'))
            ) {
              cov_8ak35vatu.b[138][0]++;
              cov_8ak35vatu.s[526]++;
              if (typeof value === 'undefined') {
                cov_8ak35vatu.b[140][0]++;
                cov_8ak35vatu.s[527]++;
                return this.elt.firstChild.getAttribute(attr);
              } else {
                cov_8ak35vatu.b[140][1]++;
                cov_8ak35vatu.s[528]++;
                for (
                  var i = (cov_8ak35vatu.s[529]++, 0);
                  i < this.elt.childNodes.length;
                  i++
                ) {
                  cov_8ak35vatu.s[530]++;
                  this.elt.childNodes[i].setAttribute(attr, value);
                }
              }
            } else {
              cov_8ak35vatu.b[138][1]++;
              cov_8ak35vatu.s[531]++;
              if (typeof value === 'undefined') {
                cov_8ak35vatu.b[141][0]++;
                cov_8ak35vatu.s[532]++;
                return this.elt.getAttribute(attr);
              } else {
                cov_8ak35vatu.b[141][1]++;
                cov_8ak35vatu.s[533]++;
                this.elt.setAttribute(attr, value);
                cov_8ak35vatu.s[534]++;
                return this;
              }
            }
          };

          /**
           *
           * Removes an attribute on the specified element.
           *
           * @method removeAttribute
           * @param  {String} attr       attribute to remove
           * @chainable
           *
           * @example
           * <div><code>
           * let button;
           * let checkbox;
           *
           * function setup() {
           *   checkbox = createCheckbox('enable', true);
           *   checkbox.changed(enableButton);
           *   button = createButton('button');
           *   button.position(10, 10);
           * }
           *
           * function enableButton() {
           *   if (this.checked()) {
           *     // Re-enable the button
           *     button.removeAttribute('disabled');
           *   } else {
           *     // Disable the button
           *     button.attribute('disabled', '');
           *   }
           * }
           * </code></div>
           */ cov_8ak35vatu.s[535]++;
          _main.default.Element.prototype.removeAttribute = function(attr) {
            cov_8ak35vatu.f[64]++;
            cov_8ak35vatu.s[536]++;
            if (
              (cov_8ak35vatu.b[143][0]++, this.elt.firstChild != null) &&
              ((cov_8ak35vatu.b[143][1]++, this.elt.firstChild.type === 'checkbox') ||
                (cov_8ak35vatu.b[143][2]++, this.elt.firstChild.type === 'radio'))
            ) {
              cov_8ak35vatu.b[142][0]++;
              cov_8ak35vatu.s[537]++;
              for (
                var i = (cov_8ak35vatu.s[538]++, 0);
                i < this.elt.childNodes.length;
                i++
              ) {
                cov_8ak35vatu.s[539]++;
                this.elt.childNodes[i].removeAttribute(attr);
              }
            } else {
              cov_8ak35vatu.b[142][1]++;
            }
            cov_8ak35vatu.s[540]++;
            this.elt.removeAttribute(attr);
            cov_8ak35vatu.s[541]++;
            return this;
          };

          /**
           * Either returns the value of the element if no arguments
           * given, or sets the value of the element.
           *
           * @method value
           * @return {String|Number} value of the element
           * @example
           * <div class='norender'><code>
           * // gets the value
           * let inp;
           * function setup() {
           *   inp = createInput('');
           * }
           *
           * function mousePressed() {
           *   print(inp.value());
           * }
           * </code></div>
           * <div class='norender'><code>
           * // sets the value
           * let inp;
           * function setup() {
           *   inp = createInput('myValue');
           * }
           *
           * function mousePressed() {
           *   inp.value('myValue');
           * }
           * </code></div>
           */
          /**
           * @method value
           * @param  {String|Number}     value
           * @chainable
           */ cov_8ak35vatu.s[542]++;
          _main.default.Element.prototype.value = function() {
            cov_8ak35vatu.f[65]++;
            cov_8ak35vatu.s[543]++;
            if (arguments.length > 0) {
              cov_8ak35vatu.b[144][0]++;
              cov_8ak35vatu.s[544]++;
              this.elt.value = arguments[0];
              cov_8ak35vatu.s[545]++;
              return this;
            } else {
              cov_8ak35vatu.b[144][1]++;
              cov_8ak35vatu.s[546]++;
              if (this.elt.type === 'range') {
                cov_8ak35vatu.b[145][0]++;
                cov_8ak35vatu.s[547]++;
                return parseFloat(this.elt.value);
              } else {
                cov_8ak35vatu.b[145][1]++;
                cov_8ak35vatu.s[548]++;
                return this.elt.value;
              }
            }
          };

          /**
           *
           * Shows the current element. Essentially, setting display:block for the style.
           *
           * @method show
           * @chainable
           * @example
           * <div class='norender'><code>
           * let div = createDiv('div');
           * div.style('display', 'none');
           * div.show(); // turns display to block
           * </code></div>
           */ cov_8ak35vatu.s[549]++;
          _main.default.Element.prototype.show = function() {
            cov_8ak35vatu.f[66]++;
            cov_8ak35vatu.s[550]++;
            this.elt.style.display = 'block';
            cov_8ak35vatu.s[551]++;
            return this;
          };

          /**
           * Hides the current element. Essentially, setting display:none for the style.
           *
           * @method hide
           * @chainable
           * @example
           * <div class='norender'><code>
           * let div = createDiv('this is a div');
           * div.hide();
           * </code></div>
           */ cov_8ak35vatu.s[552]++;
          _main.default.Element.prototype.hide = function() {
            cov_8ak35vatu.f[67]++;
            cov_8ak35vatu.s[553]++;
            this.elt.style.display = 'none';
            cov_8ak35vatu.s[554]++;
            return this;
          };

          /**
           *
           * Sets the width and height of the element. AUTO can be used to
           * only adjust one dimension at a time. If no arguments are given, it
           * returns the width and height of the element in an object. In case of
           * elements which need to be loaded, such as images, it is recommended
           * to call the function after the element has finished loading.
           *
           * @method size
           * @return {Object} the width and height of the element in an object
           * @example
           * <div class='norender'><code>
           * let div = createDiv('this is a div');
           * div.size(100, 100);
           * let img = createImg(
           *   'assets/rockies.jpg',
           *   'A tall mountain with a small forest and field in front of it on a sunny day',
           *   '',
           *   () => {
           *     img.size(10, AUTO);
           *   }
           * );
           * </code></div>
           */
          /**
           * @method size
           * @param  {Number|Constant} w    width of the element, either AUTO, or a number
           * @param  {Number|Constant} [h] height of the element, either AUTO, or a number
           * @chainable
           */ cov_8ak35vatu.s[555]++;
          _main.default.Element.prototype.size = function(w, h) {
            cov_8ak35vatu.f[68]++;
            cov_8ak35vatu.s[556]++;
            if (arguments.length === 0) {
              cov_8ak35vatu.b[146][0]++;
              cov_8ak35vatu.s[557]++;
              return { width: this.elt.offsetWidth, height: this.elt.offsetHeight };
            } else {
              cov_8ak35vatu.b[146][1]++;
              var aW = (cov_8ak35vatu.s[558]++, w);
              var aH = (cov_8ak35vatu.s[559]++, h);
              var AUTO = (cov_8ak35vatu.s[560]++, _main.default.prototype.AUTO);
              cov_8ak35vatu.s[561]++;
              if (
                (cov_8ak35vatu.b[148][0]++, aW !== AUTO) ||
                (cov_8ak35vatu.b[148][1]++, aH !== AUTO)
              ) {
                cov_8ak35vatu.b[147][0]++;
                cov_8ak35vatu.s[562]++;
                if (aW === AUTO) {
                  cov_8ak35vatu.b[149][0]++;
                  cov_8ak35vatu.s[563]++;
                  aW = h * this.width / this.height;
                } else {
                  cov_8ak35vatu.b[149][1]++;
                  cov_8ak35vatu.s[564]++;
                  if (aH === AUTO) {
                    cov_8ak35vatu.b[150][0]++;
                    cov_8ak35vatu.s[565]++;
                    aH = w * this.height / this.width;
                  } else {
                    cov_8ak35vatu.b[150][1]++;
                  }
                }
                // set diff for cnv vs normal div
                cov_8ak35vatu.s[566]++;
                if (this.elt instanceof HTMLCanvasElement) {
                  cov_8ak35vatu.b[151][0]++;
                  var j = (cov_8ak35vatu.s[567]++, {});
                  var k = (cov_8ak35vatu.s[568]++, this.elt.getContext('2d'));
                  var prop;
                  cov_8ak35vatu.s[569]++;
                  for (prop in k) {
                    cov_8ak35vatu.s[570]++;
                    j[prop] = k[prop];
                  }
                  cov_8ak35vatu.s[571]++;
                  this.elt.setAttribute('width', aW * this._pInst._pixelDensity);
                  cov_8ak35vatu.s[572]++;
                  this.elt.setAttribute('height', aH * this._pInst._pixelDensity);
                  cov_8ak35vatu.s[573]++;
                  this.elt.style.width = aW + 'px';
                  cov_8ak35vatu.s[574]++;
                  this.elt.style.height = aH + 'px';
                  cov_8ak35vatu.s[575]++;
                  this._pInst.scale(this._pInst._pixelDensity, this._pInst._pixelDensity);
                  cov_8ak35vatu.s[576]++;
                  for (prop in j) {
                    cov_8ak35vatu.s[577]++;
                    this.elt.getContext('2d')[prop] = j[prop];
                  }
                } else {
                  cov_8ak35vatu.b[151][1]++;
                  cov_8ak35vatu.s[578]++;
                  this.elt.style.width = aW + 'px';
                  cov_8ak35vatu.s[579]++;
                  this.elt.style.height = aH + 'px';
                  cov_8ak35vatu.s[580]++;
                  this.elt.width = aW;
                  cov_8ak35vatu.s[581]++;
                  this.elt.height = aH;
                }
                cov_8ak35vatu.s[582]++;

                this.width = this.elt.offsetWidth;
                cov_8ak35vatu.s[583]++;
                this.height = this.elt.offsetHeight;
                cov_8ak35vatu.s[584]++;

                if (
                  (cov_8ak35vatu.b[153][0]++, this._pInst) &&
                  (cov_8ak35vatu.b[153][1]++, this._pInst._curElement)
                ) {
                  cov_8ak35vatu.b[152][0]++;
                  cov_8ak35vatu.s[585]++;
                  // main canvas associated with p5 instance
                  if (this._pInst._curElement.elt === this.elt) {
                    cov_8ak35vatu.b[154][0]++;
                    cov_8ak35vatu.s[586]++;
                    this._pInst._setProperty('width', this.elt.offsetWidth);
                    cov_8ak35vatu.s[587]++;
                    this._pInst._setProperty('height', this.elt.offsetHeight);
                  } else {
                    cov_8ak35vatu.b[154][1]++;
                  }
                } else {
                  cov_8ak35vatu.b[152][1]++;
                }
              } else {
                cov_8ak35vatu.b[147][1]++;
              }
              cov_8ak35vatu.s[588]++;
              return this;
            }
          };

          /**
           * Removes the element, stops all media streams, and deregisters all listeners.
           * @method remove
           * @example
           * <div class='norender'><code>
           * let myDiv = createDiv('this is some text');
           * myDiv.remove();
           * </code></div>
           */ cov_8ak35vatu.s[589]++;
          _main.default.Element.prototype.remove = function() {
            cov_8ak35vatu.f[69]++;
            cov_8ak35vatu.s[590]++;
            // stop all audios/videos and detach all devices like microphone/camera etc
            // used as input/output for audios/videos.
            if (this instanceof _main.default.MediaElement) {
              cov_8ak35vatu.b[155][0]++;
              cov_8ak35vatu.s[591]++;
              this.stop();
              var sources = (cov_8ak35vatu.s[592]++, this.elt.srcObject);
              cov_8ak35vatu.s[593]++;
              if (sources !== null) {
                cov_8ak35vatu.b[156][0]++;
                var tracks = (cov_8ak35vatu.s[594]++, sources.getTracks());
                cov_8ak35vatu.s[595]++;
                tracks.forEach(function(track) {
                  cov_8ak35vatu.f[70]++;
                  cov_8ak35vatu.s[596]++;
                  track.stop();
                });
              } else {
                cov_8ak35vatu.b[156][1]++;
              }
            } else {
              cov_8ak35vatu.b[155][1]++;
            }

            // delete the reference in this._pInst._elements
            var index = (cov_8ak35vatu.s[597]++, this._pInst._elements.indexOf(this));
            cov_8ak35vatu.s[598]++;
            if (index !== -1) {
              cov_8ak35vatu.b[157][0]++;
              cov_8ak35vatu.s[599]++;
              this._pInst._elements.splice(index, 1);
            } else {
              cov_8ak35vatu.b[157][1]++;
            }

            // deregister events
            cov_8ak35vatu.s[600]++;
            for (var ev in this._events) {
              cov_8ak35vatu.s[601]++;
              this.elt.removeEventListener(ev, this._events[ev]);
            }
            cov_8ak35vatu.s[602]++;
            if (
              (cov_8ak35vatu.b[159][0]++, this.elt) &&
              (cov_8ak35vatu.b[159][1]++, this.elt.parentNode)
            ) {
              cov_8ak35vatu.b[158][0]++;
              cov_8ak35vatu.s[603]++;
              this.elt.parentNode.removeChild(this.elt);
            } else {
              cov_8ak35vatu.b[158][1]++;
            }
          };

          /**
           * Registers a callback that gets called every time a file that is
           * dropped on the element has been loaded.
           * p5 will load every dropped file into memory and pass it as a p5.File object to the callback.
           * Multiple files dropped at the same time will result in multiple calls to the callback.
           *
           * You can optionally pass a second callback which will be registered to the raw
           * <a href="https://developer.mozilla.org/en-US/docs/Web/Events/drop">drop</a> event.
           * The callback will thus be provided the original
           * <a href="https://developer.mozilla.org/en-US/docs/Web/API/DragEvent">DragEvent</a>.
           * Dropping multiple files at the same time will trigger the second callback once per drop,
           * whereas the first callback will trigger for each loaded file.
           *
           * @method drop
           * @param  {Function} callback  callback to receive loaded file, called for each file dropped.
           * @param  {Function} [fxn]     callback triggered once when files are dropped with the drop event.
           * @chainable
           * @example
           * <div><code>
           * function setup() {
           *   let c = createCanvas(100, 100);
           *   background(200);
           *   textAlign(CENTER);
           *   text('drop file', width / 2, height / 2);
           *   c.drop(gotFile);
           * }
           *
           * function gotFile(file) {
           *   background(200);
           *   text('received file:', width / 2, height / 2);
           *   text(file.name, width / 2, height / 2 + 50);
           * }
           * </code></div>
           *
           * <div><code>
           * let img;
           *
           * function setup() {
           *   let c = createCanvas(100, 100);
           *   background(200);
           *   textAlign(CENTER);
           *   text('drop image', width / 2, height / 2);
           *   c.drop(gotFile);
           * }
           *
           * function draw() {
           *   if (img) {
           *     image(img, 0, 0, width, height);
           *   }
           * }
           *
           * function gotFile(file) {
           *   img = createImg(file.data, '').hide();
           * }
           * </code></div>
           *
           * @alt
           * Canvas turns into whatever image is dragged/dropped onto it.
           */ cov_8ak35vatu.s[604]++;
          _main.default.Element.prototype.drop = function(callback, fxn) {
            cov_8ak35vatu.f[71]++;
            cov_8ak35vatu.s[605]++;
            // Is the file stuff supported?
            if (
              (cov_8ak35vatu.b[161][0]++, window.File) &&
              (cov_8ak35vatu.b[161][1]++, window.FileReader) &&
              (cov_8ak35vatu.b[161][2]++, window.FileList) &&
              (cov_8ak35vatu.b[161][3]++, window.Blob)
            ) {
              cov_8ak35vatu.b[160][0]++;
              cov_8ak35vatu.s[606]++;
              if (!this._dragDisabled) {
                cov_8ak35vatu.b[162][0]++;
                cov_8ak35vatu.s[607]++;
                this._dragDisabled = true;
                cov_8ak35vatu.s[608]++;

                var preventDefault = function preventDefault(evt) {
                  cov_8ak35vatu.f[72]++;
                  cov_8ak35vatu.s[609]++;
                  evt.preventDefault();
                };

                // If you want to be able to drop you've got to turn off
                // a lot of default behavior.
                // avoid `attachListener` here, since it overrides other handlers.
                cov_8ak35vatu.s[610]++;
                this.elt.addEventListener('dragover', preventDefault);

                // If this is a drag area we need to turn off the default behavior
                cov_8ak35vatu.s[611]++;
                this.elt.addEventListener('dragleave', preventDefault);
              } else {
                cov_8ak35vatu.b[162][1]++;
              }

              // Deal with the files
              cov_8ak35vatu.s[612]++;
              _main.default.Element._attachListener(
                'drop',
                function(evt) {
                  cov_8ak35vatu.f[73]++;
                  cov_8ak35vatu.s[613]++;
                  evt.preventDefault();
                  // Call the second argument as a callback that receives the raw drop event
                  cov_8ak35vatu.s[614]++;
                  if (typeof fxn === 'function') {
                    cov_8ak35vatu.b[163][0]++;
                    cov_8ak35vatu.s[615]++;
                    fxn.call(this, evt);
                  } else {
                    cov_8ak35vatu.b[163][1]++;
                  }
                  // A FileList
                  var files = (cov_8ak35vatu.s[616]++, evt.dataTransfer.files);

                  // Load each one and trigger the callback
                  cov_8ak35vatu.s[617]++;
                  for (var i = (cov_8ak35vatu.s[618]++, 0); i < files.length; i++) {
                    var f = (cov_8ak35vatu.s[619]++, files[i]);
                    cov_8ak35vatu.s[620]++;
                    _main.default.File._load(f, callback);
                  }
                },
                this
              );
            } else {
              cov_8ak35vatu.b[160][1]++;
              cov_8ak35vatu.s[621]++;
              console.log('The File APIs are not fully supported in this browser.');
            }
            cov_8ak35vatu.s[622]++;

            return this;
          };

          // =============================================================================
          //                         p5.MediaElement additions
          // =============================================================================

          /**
           * Extends <a href="#/p5.Element">p5.Element</a> to handle audio and video. In addition to the methods
           * of <a href="#/p5.Element">p5.Element</a>, it also contains methods for controlling media. It is not
           * called directly, but <a href="#/p5.MediaElement">p5.MediaElement</a>s are created by calling <a href="#/p5/createVideo">createVideo</a>,
           * <a href="#/p5/createAudio">createAudio</a>, and <a href="#/p5/createCapture">createCapture</a>.
           *
           * @class p5.MediaElement
           * @constructor
           * @param {String} elt DOM node that is wrapped
           */ cov_8ak35vatu.s[623]++;
          _main.default.MediaElement = function(elt, pInst) {
            cov_8ak35vatu.f[74]++;
            cov_8ak35vatu.s[624]++;
            _main.default.Element.call(this, elt, pInst);

            var self = (cov_8ak35vatu.s[625]++, this);
            cov_8ak35vatu.s[626]++;
            this.elt.crossOrigin = 'anonymous';
            cov_8ak35vatu.s[627]++;

            this._prevTime = 0;
            cov_8ak35vatu.s[628]++;
            this._cueIDCounter = 0;
            cov_8ak35vatu.s[629]++;
            this._cues = [];
            cov_8ak35vatu.s[630]++;
            this._pixelsState = this;
            cov_8ak35vatu.s[631]++;
            this._pixelDensity = 1;
            cov_8ak35vatu.s[632]++;
            this._modified = false;

            /**
             * Path to the media element source.
             *
             * @property src
             * @return {String} src
             * @example
             * <div><code>
             * let ele;
             *
             * function setup() {
             *   background(250);
             *
             *   //p5.MediaElement objects are usually created
             *   //by calling the createAudio(), createVideo(),
             *   //and createCapture() functions.
             *
             *   //In this example we create
             *   //a new p5.MediaElement via createAudio().
             *   ele = createAudio('assets/beat.mp3');
             *
             *   //We'll set up our example so that
             *   //when you click on the text,
             *   //an alert box displays the MediaElement's
             *   //src field.
             *   textAlign(CENTER);
             *   text('Click Me!', width / 2, height / 2);
             * }
             *
             * function mouseClicked() {
             *   //here we test if the mouse is over the
             *   //canvas element when it's clicked
             *   if (mouseX >= 0 && mouseX <= width && mouseY >= 0 && mouseY <= height) {
             *     //Show our p5.MediaElement's src field
             *     alert(ele.src);
             *   }
             * }
             * </code></div>
             */ cov_8ak35vatu.s[633]++;
            Object.defineProperty(self, 'src', {
              get: function get() {
                cov_8ak35vatu.f[75]++;
                var firstChildSrc = (cov_8ak35vatu.s[634]++, self.elt.children[0].src);
                var srcVal = (cov_8ak35vatu.s[635]++,
                self.elt.src === window.location.href
                  ? (cov_8ak35vatu.b[164][0]++, '')
                  : (cov_8ak35vatu.b[164][1]++, self.elt.src));
                var ret = (cov_8ak35vatu.s[636]++,
                firstChildSrc === window.location.href
                  ? (cov_8ak35vatu.b[165][0]++, srcVal)
                  : (cov_8ak35vatu.b[165][1]++, firstChildSrc));
                cov_8ak35vatu.s[637]++;
                return ret;
              },
              set: function set(newValue) {
                cov_8ak35vatu.f[76]++;
                cov_8ak35vatu.s[638]++;
                for (
                  var i = (cov_8ak35vatu.s[639]++, 0);
                  i < self.elt.children.length;
                  i++
                ) {
                  cov_8ak35vatu.s[640]++;
                  self.elt.removeChild(self.elt.children[i]);
                }
                var source = (cov_8ak35vatu.s[641]++, document.createElement('source'));
                cov_8ak35vatu.s[642]++;
                source.src = newValue;
                cov_8ak35vatu.s[643]++;
                elt.appendChild(source);
                cov_8ak35vatu.s[644]++;
                self.elt.src = newValue;
                cov_8ak35vatu.s[645]++;
                self.modified = true;
              }
            });

            // private _onended callback, set by the method: onended(callback)
            cov_8ak35vatu.s[646]++;
            self._onended = function() {
              cov_8ak35vatu.f[77]++;
            };
            cov_8ak35vatu.s[647]++;
            self.elt.onended = function() {
              cov_8ak35vatu.f[78]++;
              cov_8ak35vatu.s[648]++;
              self._onended(self);
            };
          };
          cov_8ak35vatu.s[649]++;
          _main.default.MediaElement.prototype = Object.create(
            _main.default.Element.prototype
          );

          /**
           * Play an HTML5 media element.
           *
           * @method play
           * @chainable
           * @example
           * <div><code>
           * let ele;
           *
           * function setup() {
           *   //p5.MediaElement objects are usually created
           *   //by calling the createAudio(), createVideo(),
           *   //and createCapture() functions.
           *
           *   //In this example we create
           *   //a new p5.MediaElement via createAudio().
           *   ele = createAudio('assets/beat.mp3');
           *
           *   background(250);
           *   textAlign(CENTER);
           *   text('Click to Play!', width / 2, height / 2);
           * }
           *
           * function mouseClicked() {
           *   //here we test if the mouse is over the
           *   //canvas element when it's clicked
           *   if (mouseX >= 0 && mouseX <= width && mouseY >= 0 && mouseY <= height) {
           *     //Here we call the play() function on
           *     //the p5.MediaElement we created above.
           *     //This will start the audio sample.
           *     ele.play();
           *
           *     background(200);
           *     text('You clicked Play!', width / 2, height / 2);
           *   }
           * }
           * </code></div>
           */ cov_8ak35vatu.s[650]++;
          _main.default.MediaElement.prototype.play = function() {
            var _this = this;
            cov_8ak35vatu.f[79]++;
            cov_8ak35vatu.s[651]++;
            if (this.elt.currentTime === this.elt.duration) {
              cov_8ak35vatu.b[166][0]++;
              cov_8ak35vatu.s[652]++;
              this.elt.currentTime = 0;
            } else {
              cov_8ak35vatu.b[166][1]++;
            }
            var promise;
            cov_8ak35vatu.s[653]++;
            if (this.elt.readyState > 1) {
              cov_8ak35vatu.b[167][0]++;
              cov_8ak35vatu.s[654]++;
              promise = this.elt.play();
            } else {
              cov_8ak35vatu.b[167][1]++;
              cov_8ak35vatu.s[655]++;
              // in Chrome, playback cannot resume after being stopped and must reload
              this.elt.load();
              cov_8ak35vatu.s[656]++;
              promise = this.elt.play();
            }
            cov_8ak35vatu.s[657]++;
            if (
              (cov_8ak35vatu.b[169][0]++, promise) &&
              (cov_8ak35vatu.b[169][1]++, promise.catch)
            ) {
              cov_8ak35vatu.b[168][0]++;
              cov_8ak35vatu.s[658]++;
              promise.catch(function(e) {
                cov_8ak35vatu.f[80]++;
                cov_8ak35vatu.s[659]++;
                // if it's an autoplay failure error
                if (e.name === 'NotAllowedError') {
                  cov_8ak35vatu.b[170][0]++;
                  cov_8ak35vatu.s[660]++;
                  _main.default._friendlyAutoplayError(_this.src);
                } else {
                  cov_8ak35vatu.b[170][1]++;
                  cov_8ak35vatu.s[661]++;
                  // any other kind of error
                  console.error('Media play method encountered an unexpected error', e);
                }
              });
            } else {
              cov_8ak35vatu.b[168][1]++;
            }
            cov_8ak35vatu.s[662]++;
            return this;
          };

          /**
           * Stops an HTML5 media element (sets current time to zero).
           *
           * @method stop
           * @chainable
           * @example
           * <div><code>
           * //This example both starts
           * //and stops a sound sample
           * //when the user clicks the canvas
           *
           * //We will store the p5.MediaElement
           * //object in here
           * let ele;
           *
           * //while our audio is playing,
           * //this will be set to true
           * let sampleIsPlaying = false;
           *
           * function setup() {
           *   //Here we create a p5.MediaElement object
           *   //using the createAudio() function.
           *   ele = createAudio('assets/beat.mp3');
           *   background(200);
           *   textAlign(CENTER);
           *   text('Click to play!', width / 2, height / 2);
           * }
           *
           * function mouseClicked() {
           *   //here we test if the mouse is over the
           *   //canvas element when it's clicked
           *   if (mouseX >= 0 && mouseX <= width && mouseY >= 0 && mouseY <= height) {
           *     background(200);
           *
           *     if (sampleIsPlaying) {
           *       //if the sample is currently playing
           *       //calling the stop() function on
           *       //our p5.MediaElement will stop
           *       //it and reset its current
           *       //time to 0 (i.e. it will start
           *       //at the beginning the next time
           *       //you play it)
           *       ele.stop();
           *
           *       sampleIsPlaying = false;
           *       text('Click to play!', width / 2, height / 2);
           *     } else {
           *       //loop our sound element until we
           *       //call ele.stop() on it.
           *       ele.loop();
           *
           *       sampleIsPlaying = true;
           *       text('Click to stop!', width / 2, height / 2);
           *     }
           *   }
           * }
           * </code></div>
           */ cov_8ak35vatu.s[663]++;
          _main.default.MediaElement.prototype.stop = function() {
            cov_8ak35vatu.f[81]++;
            cov_8ak35vatu.s[664]++;
            this.elt.pause();
            cov_8ak35vatu.s[665]++;
            this.elt.currentTime = 0;
            cov_8ak35vatu.s[666]++;
            return this;
          };

          /**
           * Pauses an HTML5 media element.
           *
           * @method pause
           * @chainable
           * @example
           * <div><code>
           * //This example both starts
           * //and pauses a sound sample
           * //when the user clicks the canvas
           *
           * //We will store the p5.MediaElement
           * //object in here
           * let ele;
           *
           * //while our audio is playing,
           * //this will be set to true
           * let sampleIsPlaying = false;
           *
           * function setup() {
           *   //Here we create a p5.MediaElement object
           *   //using the createAudio() function.
           *   ele = createAudio('assets/lucky_dragons.mp3');
           *   background(200);
           *   textAlign(CENTER);
           *   text('Click to play!', width / 2, height / 2);
           * }
           *
           * function mouseClicked() {
           *   //here we test if the mouse is over the
           *   //canvas element when it's clicked
           *   if (mouseX >= 0 && mouseX <= width && mouseY >= 0 && mouseY <= height) {
           *     background(200);
           *
           *     if (sampleIsPlaying) {
           *       //Calling pause() on our
           *       //p5.MediaElement will stop it
           *       //playing, but when we call the
           *       //loop() or play() functions
           *       //the sample will start from
           *       //where we paused it.
           *       ele.pause();
           *
           *       sampleIsPlaying = false;
           *       text('Click to resume!', width / 2, height / 2);
           *     } else {
           *       //loop our sound element until we
           *       //call ele.pause() on it.
           *       ele.loop();
           *
           *       sampleIsPlaying = true;
           *       text('Click to pause!', width / 2, height / 2);
           *     }
           *   }
           * }
           * </code></div>
           */ cov_8ak35vatu.s[667]++;
          _main.default.MediaElement.prototype.pause = function() {
            cov_8ak35vatu.f[82]++;
            cov_8ak35vatu.s[668]++;
            this.elt.pause();
            cov_8ak35vatu.s[669]++;
            return this;
          };

          /**
           * Set 'loop' to true for an HTML5 media element, and starts playing.
           *
           * @method loop
           * @chainable
           * @example
           * <div><code>
           * //Clicking the canvas will loop
           * //the audio sample until the user
           * //clicks again to stop it
           *
           * //We will store the p5.MediaElement
           * //object in here
           * let ele;
           *
           * //while our audio is playing,
           * //this will be set to true
           * let sampleIsLooping = false;
           *
           * function setup() {
           *   //Here we create a p5.MediaElement object
           *   //using the createAudio() function.
           *   ele = createAudio('assets/lucky_dragons.mp3');
           *   background(200);
           *   textAlign(CENTER);
           *   text('Click to loop!', width / 2, height / 2);
           * }
           *
           * function mouseClicked() {
           *   //here we test if the mouse is over the
           *   //canvas element when it's clicked
           *   if (mouseX >= 0 && mouseX <= width && mouseY >= 0 && mouseY <= height) {
           *     background(200);
           *
           *     if (!sampleIsLooping) {
           *       //loop our sound element until we
           *       //call ele.stop() on it.
           *       ele.loop();
           *
           *       sampleIsLooping = true;
           *       text('Click to stop!', width / 2, height / 2);
           *     } else {
           *       ele.stop();
           *
           *       sampleIsLooping = false;
           *       text('Click to loop!', width / 2, height / 2);
           *     }
           *   }
           * }
           * </code></div>
           */ cov_8ak35vatu.s[670]++;
          _main.default.MediaElement.prototype.loop = function() {
            cov_8ak35vatu.f[83]++;
            cov_8ak35vatu.s[671]++;
            this.elt.setAttribute('loop', true);
            cov_8ak35vatu.s[672]++;
            this.play();
            cov_8ak35vatu.s[673]++;
            return this;
          };
          /**
           * Set 'loop' to false for an HTML5 media element. Element will stop
           * when it reaches the end.
           *
           * @method noLoop
           * @chainable
           * @example
           * <div><code>
           * //This example both starts
           * //and stops loop of sound sample
           * //when the user clicks the canvas
           *
           * //We will store the p5.MediaElement
           * //object in here
           * let ele;
           * //while our audio is playing,
           * //this will be set to true
           * let sampleIsPlaying = false;
           *
           * function setup() {
           *   //Here we create a p5.MediaElement object
           *   //using the createAudio() function.
           *   ele = createAudio('assets/beat.mp3');
           *   background(200);
           *   textAlign(CENTER);
           *   text('Click to play!', width / 2, height / 2);
           * }
           *
           * function mouseClicked() {
           *   //here we test if the mouse is over the
           *   //canvas element when it's clicked
           *   if (mouseX >= 0 && mouseX <= width && mouseY >= 0 && mouseY <= height) {
           *     background(200);
           *
           *     if (sampleIsPlaying) {
           *       ele.noLoop();
           *       sampleIsPlaying = false;
           *       text('No more Loops!', width / 2, height / 2);
           *     } else {
           *       ele.loop();
           *       sampleIsPlaying = true;
           *       text('Click to stop looping!', width / 2, height / 2);
           *     }
           *   }
           * }
           * </code></div>
           */ cov_8ak35vatu.s[674]++;
          _main.default.MediaElement.prototype.noLoop = function() {
            cov_8ak35vatu.f[84]++;
            cov_8ak35vatu.s[675]++;
            this.elt.removeAttribute('loop');
            cov_8ak35vatu.s[676]++;
            return this;
          };

          /**
           * Sets up logic to check that autoplay succeeded.
           *
           * @method setupAutoplayFailDetection
           * @private
           */ cov_8ak35vatu.s[677]++;
          _main.default.MediaElement.prototype._setupAutoplayFailDetection = function() {
            var _this2 = this;
            cov_8ak35vatu.f[85]++;
            var timeout = (cov_8ak35vatu.s[678]++,
            setTimeout(function() {
              cov_8ak35vatu.f[86]++;
              cov_8ak35vatu.s[679]++;
              return _main.default._friendlyAutoplayError(_this2.src);
            }, 500));
            cov_8ak35vatu.s[680]++;
            this.elt.addEventListener(
              'play',
              function() {
                cov_8ak35vatu.f[87]++;
                cov_8ak35vatu.s[681]++;
                return clearTimeout(timeout);
              },
              {
                passive: true,
                once: true
              }
            );
          };

          /**
           * Set HTML5 media element to autoplay or not. If no argument is specified, by
           * default it will autoplay.
           *
           * @method autoplay
           * @param {Boolean} shouldAutoplay whether the element should autoplay
           * @chainable
           * @example
           * <div><code>
           * let videoElement;
           * function setup() {
           *   noCanvas();
           *   videoElement = createVideo(['assets/small.mp4'], onVideoLoad);
           * }
           * function onVideoLoad() {
           *   // The media will play as soon as it is loaded.
           *   videoElement.autoplay();
           *   videoElement.volume(0);
           *   videoElement.size(100, 100);
           * }
           * </code></div>
           *
           * <div><code>
           * let videoElement;
           * function setup() {
           *   noCanvas();
           *   videoElement = createVideo(['assets/small.mp4'], onVideoLoad);
           * }
           * function onVideoLoad() {
           *   // The media will not play untill some explicitly triggered.
           *   videoElement.autoplay(false);
           *   videoElement.volume(0);
           *   videoElement.size(100, 100);
           * }
           *
           * function mouseClicked() {
           *   videoElement.play();
           * }
           * </code></div>
           *
           * @alt
           * An example of a video element which autoplays after it is loaded.
           * An example of a video element which waits for a trigger for playing.
           */ cov_8ak35vatu.s[682]++;

          _main.default.MediaElement.prototype.autoplay = function(val) {
            var _this3 = this;
            cov_8ak35vatu.f[88]++;
            var oldVal = (cov_8ak35vatu.s[683]++, this.elt.getAttribute('autoplay'));
            cov_8ak35vatu.s[684]++;
            this.elt.setAttribute('autoplay', val);
            // if we turned on autoplay
            cov_8ak35vatu.s[685]++;
            if ((cov_8ak35vatu.b[172][0]++, val) && (cov_8ak35vatu.b[172][1]++, !oldVal)) {
              cov_8ak35vatu.b[171][0]++;
              cov_8ak35vatu.s[686]++;
              // bind method to this scope
              var setupAutoplayFailDetection = function setupAutoplayFailDetection() {
                cov_8ak35vatu.f[89]++;
                cov_8ak35vatu.s[687]++;
                return _this3._setupAutoplayFailDetection();
              };
              // if media is ready to play, schedule check now
              cov_8ak35vatu.s[688]++;
              if (this.elt.readyState === 4) {
                cov_8ak35vatu.b[173][0]++;
                cov_8ak35vatu.s[689]++;
                setupAutoplayFailDetection();
              } else {
                cov_8ak35vatu.b[173][1]++;
                cov_8ak35vatu.s[690]++;
                // otherwise, schedule check whenever it is ready
                this.elt.addEventListener('canplay', setupAutoplayFailDetection, {
                  passive: true,
                  once: true
                });
              }
            } else {
              cov_8ak35vatu.b[171][1]++;
            }
            cov_8ak35vatu.s[691]++;

            return this;
          };

          /**
           * Sets volume for this HTML5 media element. If no argument is given,
           * returns the current volume.
           *
           * @method volume
           * @return {Number} current volume
           *
           * @example
           * <div><code>
           * let ele;
           * function setup() {
           *   // p5.MediaElement objects are usually created
           *   // by calling the createAudio(), createVideo(),
           *   // and createCapture() functions.
           *   // In this example we create
           *   // a new p5.MediaElement via createAudio().
           *   ele = createAudio('assets/lucky_dragons.mp3');
           *   background(250);
           *   textAlign(CENTER);
           *   text('Click to Play!', width / 2, height / 2);
           * }
           * function mouseClicked() {
           *   // Here we call the volume() function
           *   // on the sound element to set its volume
           *   // Volume must be between 0.0 and 1.0
           *   ele.volume(0.2);
           *   ele.play();
           *   background(200);
           *   text('You clicked Play!', width / 2, height / 2);
           * }
           * </code></div>
           * <div><code>
           * let audio;
           * let counter = 0;
           *
           * function loaded() {
           *   audio.play();
           * }
           *
           * function setup() {
           *   audio = createAudio('assets/lucky_dragons.mp3', loaded);
           *   textAlign(CENTER);
           * }
           *
           * function draw() {
           *   if (counter === 0) {
           *     background(0, 255, 0);
           *     text('volume(0.9)', width / 2, height / 2);
           *   } else if (counter === 1) {
           *     background(255, 255, 0);
           *     text('volume(0.5)', width / 2, height / 2);
           *   } else if (counter === 2) {
           *     background(255, 0, 0);
           *     text('volume(0.1)', width / 2, height / 2);
           *   }
           * }
           *
           * function mousePressed() {
           *   counter++;
           *   if (counter === 0) {
           *     audio.volume(0.9);
           *   } else if (counter === 1) {
           *     audio.volume(0.5);
           *   } else if (counter === 2) {
           *     audio.volume(0.1);
           *   } else {
           *     counter = 0;
           *     audio.volume(0.9);
           *   }
           * }
           * </code>
           * </div>
           */
          /**
           * @method volume
           * @param {Number}            val volume between 0.0 and 1.0
           * @chainable
           */ cov_8ak35vatu.s[692]++;
          _main.default.MediaElement.prototype.volume = function(val) {
            cov_8ak35vatu.f[90]++;
            cov_8ak35vatu.s[693]++;
            if (typeof val === 'undefined') {
              cov_8ak35vatu.b[174][0]++;
              cov_8ak35vatu.s[694]++;
              return this.elt.volume;
            } else {
              cov_8ak35vatu.b[174][1]++;
              cov_8ak35vatu.s[695]++;
              this.elt.volume = val;
            }
          };

          /**
           * If no arguments are given, returns the current playback speed of the
           * element. The speed parameter sets the speed where 2.0 will play the
           * element twice as fast, 0.5 will play at half the speed, and -1 will play
           * the element in normal speed in reverse.(Note that not all browsers support
           * backward playback and even if they do, playback might not be smooth.)
           *
           * @method speed
           * @return {Number} current playback speed of the element
           *
           * @example
           * <div class='norender notest'><code>
           * //Clicking the canvas will loop
           * //the audio sample until the user
           * //clicks again to stop it
           *
           * //We will store the p5.MediaElement
           * //object in here
           * let ele;
           * let button;
           *
           * function setup() {
           *   createCanvas(710, 400);
           *   //Here we create a p5.MediaElement object
           *   //using the createAudio() function.
           *   ele = createAudio('assets/beat.mp3');
           *   ele.loop();
           *   background(200);
           *
           *   button = createButton('2x speed');
           *   button.position(100, 68);
           *   button.mousePressed(twice_speed);
           *
           *   button = createButton('half speed');
           *   button.position(200, 68);
           *   button.mousePressed(half_speed);
           *
           *   button = createButton('reverse play');
           *   button.position(300, 68);
           *   button.mousePressed(reverse_speed);
           *
           *   button = createButton('STOP');
           *   button.position(400, 68);
           *   button.mousePressed(stop_song);
           *
           *   button = createButton('PLAY!');
           *   button.position(500, 68);
           *   button.mousePressed(play_speed);
           * }
           *
           * function twice_speed() {
           *   ele.speed(2);
           * }
           *
           * function half_speed() {
           *   ele.speed(0.5);
           * }
           *
           * function reverse_speed() {
           *   ele.speed(-1);
           * }
           *
           * function stop_song() {
           *   ele.stop();
           * }
           *
           * function play_speed() {
           *   ele.play();
           * }
           * </code></div>
           */

          /**
           * @method speed
           * @param {Number} speed  speed multiplier for element playback
           * @chainable
           */ cov_8ak35vatu.s[696]++;
          _main.default.MediaElement.prototype.speed = function(val) {
            cov_8ak35vatu.f[91]++;
            cov_8ak35vatu.s[697]++;
            if (typeof val === 'undefined') {
              cov_8ak35vatu.b[175][0]++;
              cov_8ak35vatu.s[698]++;
              return (
                (cov_8ak35vatu.b[176][0]++, this.presetPlaybackRate) ||
                (cov_8ak35vatu.b[176][1]++, this.elt.playbackRate)
              );
            } else {
              cov_8ak35vatu.b[175][1]++;
              cov_8ak35vatu.s[699]++;
              if (this.loadedmetadata) {
                cov_8ak35vatu.b[177][0]++;
                cov_8ak35vatu.s[700]++;
                this.elt.playbackRate = val;
              } else {
                cov_8ak35vatu.b[177][1]++;
                cov_8ak35vatu.s[701]++;
                this.presetPlaybackRate = val;
              }
            }
          };

          /**
           * If no arguments are given, returns the current time of the element.
           * If an argument is given the current time of the element is set to it.
           *
           * @method time
           * @return {Number} current time (in seconds)
           *
           * @example
           * <div><code>
           * let ele;
           * let beginning = true;
           * function setup() {
           *   //p5.MediaElement objects are usually created
           *   //by calling the createAudio(), createVideo(),
           *   //and createCapture() functions.
           *
           *   //In this example we create
           *   //a new p5.MediaElement via createAudio().
           *   ele = createAudio('assets/lucky_dragons.mp3');
           *   background(250);
           *   textAlign(CENTER);
           *   text('start at beginning', width / 2, height / 2);
           * }
           *
           * // this function fires with click anywhere
           * function mousePressed() {
           *   if (beginning === true) {
           *     // here we start the sound at the beginning
           *     // time(0) is not necessary here
           *     // as this produces the same result as
           *     // play()
           *     ele.play().time(0);
           *     background(200);
           *     text('jump 2 sec in', width / 2, height / 2);
           *     beginning = false;
           *   } else {
           *     // here we jump 2 seconds into the sound
           *     ele.play().time(2);
           *     background(250);
           *     text('start at beginning', width / 2, height / 2);
           *     beginning = true;
           *   }
           * }
           * </code></div>
           */
          /**
           * @method time
           * @param {Number} time time to jump to (in seconds)
           * @chainable
           */ cov_8ak35vatu.s[702]++;
          _main.default.MediaElement.prototype.time = function(val) {
            cov_8ak35vatu.f[92]++;
            cov_8ak35vatu.s[703]++;
            if (typeof val === 'undefined') {
              cov_8ak35vatu.b[178][0]++;
              cov_8ak35vatu.s[704]++;
              return this.elt.currentTime;
            } else {
              cov_8ak35vatu.b[178][1]++;
              cov_8ak35vatu.s[705]++;
              this.elt.currentTime = val;
              cov_8ak35vatu.s[706]++;
              return this;
            }
          };

          /**
           * Returns the duration of the HTML5 media element.
           *
           * @method duration
           * @return {Number} duration
           *
           * @example
           * <div><code>
           * let ele;
           * function setup() {
           *   //p5.MediaElement objects are usually created
           *   //by calling the createAudio(), createVideo(),
           *   //and createCapture() functions.
           *   //In this example we create
           *   //a new p5.MediaElement via createAudio().
           *   ele = createAudio('assets/doorbell.mp3');
           *   background(250);
           *   textAlign(CENTER);
           *   text('Click to know the duration!', 10, 25, 70, 80);
           * }
           * function mouseClicked() {
           *   ele.play();
           *   background(200);
           *   //ele.duration dislpays the duration
           *   text(ele.duration() + ' seconds', width / 2, height / 2);
           * }
           * </code></div>
           */ cov_8ak35vatu.s[707]++;
          _main.default.MediaElement.prototype.duration = function() {
            cov_8ak35vatu.f[93]++;
            cov_8ak35vatu.s[708]++;
            return this.elt.duration;
          };
          cov_8ak35vatu.s[709]++;
          _main.default.MediaElement.prototype.pixels = [];
          cov_8ak35vatu.s[710]++;
          _main.default.MediaElement.prototype._ensureCanvas = function() {
            cov_8ak35vatu.f[94]++;
            cov_8ak35vatu.s[711]++;
            if (!this.canvas) {
              cov_8ak35vatu.b[179][0]++;
              cov_8ak35vatu.s[712]++;
              this.canvas = document.createElement('canvas');
              cov_8ak35vatu.s[713]++;
              this.drawingContext = this.canvas.getContext('2d');
              cov_8ak35vatu.s[714]++;
              this.setModified(true);
            } else {
              cov_8ak35vatu.b[179][1]++;
            }
            cov_8ak35vatu.s[715]++;
            if (this.loadedmetadata) {
              cov_8ak35vatu.b[180][0]++;
              cov_8ak35vatu.s[716]++;
              // wait for metadata for w/h
              if (this.canvas.width !== this.elt.width) {
                cov_8ak35vatu.b[181][0]++;
                cov_8ak35vatu.s[717]++;
                this.canvas.width = this.elt.width;
                cov_8ak35vatu.s[718]++;
                this.canvas.height = this.elt.height;
                cov_8ak35vatu.s[719]++;
                this.width = this.canvas.width;
                cov_8ak35vatu.s[720]++;
                this.height = this.canvas.height;
              } else {
                cov_8ak35vatu.b[181][1]++;
              }
              cov_8ak35vatu.s[721]++;

              this.drawingContext.drawImage(
                this.elt,
                0,
                0,
                this.canvas.width,
                this.canvas.height
              );
              cov_8ak35vatu.s[722]++;

              this.setModified(true);
            } else {
              cov_8ak35vatu.b[180][1]++;
            }
          };
          cov_8ak35vatu.s[723]++;
          _main.default.MediaElement.prototype.loadPixels = function() {
            cov_8ak35vatu.f[95]++;
            cov_8ak35vatu.s[724]++;
            this._ensureCanvas();
            cov_8ak35vatu.s[725]++;
            return _main.default.Renderer2D.prototype.loadPixels.apply(this, arguments);
          };
          cov_8ak35vatu.s[726]++;
          _main.default.MediaElement.prototype.updatePixels = function(x, y, w, h) {
            cov_8ak35vatu.f[96]++;
            cov_8ak35vatu.s[727]++;
            if (this.loadedmetadata) {
              cov_8ak35vatu.b[182][0]++;
              cov_8ak35vatu.s[728]++;
              // wait for metadata
              this._ensureCanvas();
              cov_8ak35vatu.s[729]++;
              _main.default.Renderer2D.prototype.updatePixels.call(this, x, y, w, h);
            } else {
              cov_8ak35vatu.b[182][1]++;
            }
            cov_8ak35vatu.s[730]++;
            this.setModified(true);
            cov_8ak35vatu.s[731]++;
            return this;
          };
          cov_8ak35vatu.s[732]++;
          _main.default.MediaElement.prototype.get = function() {
            cov_8ak35vatu.f[97]++;
            cov_8ak35vatu.s[733]++;
            this._ensureCanvas();
            cov_8ak35vatu.s[734]++;
            return _main.default.Renderer2D.prototype.get.apply(this, arguments);
          };
          cov_8ak35vatu.s[735]++;
          _main.default.MediaElement.prototype._getPixel = function() {
            cov_8ak35vatu.f[98]++;
            cov_8ak35vatu.s[736]++;
            this.loadPixels();
            cov_8ak35vatu.s[737]++;
            return _main.default.Renderer2D.prototype._getPixel.apply(this, arguments);
          };
          cov_8ak35vatu.s[738]++;

          _main.default.MediaElement.prototype.set = function(x, y, imgOrCol) {
            cov_8ak35vatu.f[99]++;
            cov_8ak35vatu.s[739]++;
            if (this.loadedmetadata) {
              cov_8ak35vatu.b[183][0]++;
              cov_8ak35vatu.s[740]++;
              // wait for metadata
              this._ensureCanvas();
              cov_8ak35vatu.s[741]++;
              _main.default.Renderer2D.prototype.set.call(this, x, y, imgOrCol);
              cov_8ak35vatu.s[742]++;
              this.setModified(true);
            } else {
              cov_8ak35vatu.b[183][1]++;
            }
          };
          cov_8ak35vatu.s[743]++;
          _main.default.MediaElement.prototype.copy = function() {
            cov_8ak35vatu.f[100]++;
            cov_8ak35vatu.s[744]++;
            this._ensureCanvas();
            cov_8ak35vatu.s[745]++;
            _main.default.prototype.copy.apply(this, arguments);
          };
          cov_8ak35vatu.s[746]++;
          _main.default.MediaElement.prototype.mask = function() {
            cov_8ak35vatu.f[101]++;
            cov_8ak35vatu.s[747]++;
            this.loadPixels();
            cov_8ak35vatu.s[748]++;
            this.setModified(true);
            cov_8ak35vatu.s[749]++;
            _main.default.Image.prototype.mask.apply(this, arguments);
          };
          /**
           * helper method for web GL mode to figure out if the element
           * has been modified and might need to be re-uploaded to texture
           * memory between frames.
           * @method isModified
           * @private
           * @return {boolean} a boolean indicating whether or not the
           * image has been updated or modified since last texture upload.
           */ cov_8ak35vatu.s[750]++;
          _main.default.MediaElement.prototype.isModified = function() {
            cov_8ak35vatu.f[102]++;
            cov_8ak35vatu.s[751]++;
            return this._modified;
          };
          /**
           * helper method for web GL mode to indicate that an element has been
           * changed or unchanged since last upload. gl texture upload will
           * set this value to false after uploading the texture; or might set
           * it to true if metadata has become available but there is no actual
           * texture data available yet..
           * @method setModified
           * @param {boolean} val sets whether or not the element has been
           * modified.
           * @private
           */ cov_8ak35vatu.s[752]++;
          _main.default.MediaElement.prototype.setModified = function(value) {
            cov_8ak35vatu.f[103]++;
            cov_8ak35vatu.s[753]++;
            this._modified = value;
          };
          /**
           * Schedule an event to be called when the audio or video
           * element reaches the end. If the element is looping,
           * this will not be called. The element is passed in
           * as the argument to the onended callback.
           *
           * @method  onended
           * @param  {Function} callback function to call when the
           *                             soundfile has ended. The
           *                             media element will be passed
           *                             in as the argument to the
           *                             callback.
           * @chainable
           * @example
           * <div><code>
           * function setup() {
           *   let audioEl = createAudio('assets/beat.mp3');
           *   audioEl.showControls();
           *   audioEl.onended(sayDone);
           * }
           *
           * function sayDone(elt) {
           *   alert('done playing ' + elt.src);
           * }
           * </code></div>
           */ cov_8ak35vatu.s[754]++;
          _main.default.MediaElement.prototype.onended = function(callback) {
            cov_8ak35vatu.f[104]++;
            cov_8ak35vatu.s[755]++;
            this._onended = callback;
            cov_8ak35vatu.s[756]++;
            return this;
          };

          /*** CONNECT TO WEB AUDIO API / p5.sound.js ***/

          /**
           * Send the audio output of this element to a specified audioNode or
           * p5.sound object. If no element is provided, connects to p5's main
           * output. That connection is established when this method is first called.
           * All connections are removed by the .disconnect() method.
           *
           * This method is meant to be used with the p5.sound.js addon library.
           *
           * @method  connect
           * @param  {AudioNode|Object} audioNode AudioNode from the Web Audio API,
           * or an object from the p5.sound library
           */ cov_8ak35vatu.s[757]++;
          _main.default.MediaElement.prototype.connect = function(obj) {
            cov_8ak35vatu.f[105]++;
            var audioContext, mainOutput;

            // if p5.sound exists, same audio context
            cov_8ak35vatu.s[758]++;
            if (typeof _main.default.prototype.getAudioContext === 'function') {
              cov_8ak35vatu.b[184][0]++;
              cov_8ak35vatu.s[759]++;
              audioContext = _main.default.prototype.getAudioContext();
              cov_8ak35vatu.s[760]++;
              mainOutput = _main.default.soundOut.input;
            } else {
              cov_8ak35vatu.b[184][1]++;
              cov_8ak35vatu.s[761]++;
              try {
                cov_8ak35vatu.s[762]++;
                audioContext = obj.context;
                cov_8ak35vatu.s[763]++;
                mainOutput = audioContext.destination;
              } catch (e) {
                cov_8ak35vatu.s[764]++;
                throw 'connect() is meant to be used with Web Audio API or p5.sound.js';
              }
            }

            // create a Web Audio MediaElementAudioSourceNode if none already exists
            cov_8ak35vatu.s[765]++;
            if (!this.audioSourceNode) {
              cov_8ak35vatu.b[185][0]++;
              cov_8ak35vatu.s[766]++;
              this.audioSourceNode = audioContext.createMediaElementSource(this.elt);

              // connect to main output when this method is first called
              cov_8ak35vatu.s[767]++;
              this.audioSourceNode.connect(mainOutput);
            } else {
              cov_8ak35vatu.b[185][1]++;
            }

            // connect to object if provided
            cov_8ak35vatu.s[768]++;
            if (obj) {
              cov_8ak35vatu.b[186][0]++;
              cov_8ak35vatu.s[769]++;
              if (obj.input) {
                cov_8ak35vatu.b[187][0]++;
                cov_8ak35vatu.s[770]++;
                this.audioSourceNode.connect(obj.input);
              } else {
                cov_8ak35vatu.b[187][1]++;
                cov_8ak35vatu.s[771]++;
                this.audioSourceNode.connect(obj);
              }
            } else {
              cov_8ak35vatu.b[186][1]++;
              cov_8ak35vatu.s[772]++;
              // otherwise connect to main output of p5.sound / AudioContext
              this.audioSourceNode.connect(mainOutput);
            }
          };

          /**
           * Disconnect all Web Audio routing, including to main output.
           * This is useful if you want to re-route the output through
           * audio effects, for example.
           *
           * @method  disconnect
           */ cov_8ak35vatu.s[773]++;
          _main.default.MediaElement.prototype.disconnect = function() {
            cov_8ak35vatu.f[106]++;
            cov_8ak35vatu.s[774]++;
            if (this.audioSourceNode) {
              cov_8ak35vatu.b[188][0]++;
              cov_8ak35vatu.s[775]++;
              this.audioSourceNode.disconnect();
            } else {
              cov_8ak35vatu.b[188][1]++;
              cov_8ak35vatu.s[776]++;
              throw 'nothing to disconnect';
            }
          };

          /*** SHOW / HIDE CONTROLS ***/

          /**
           * Show the default MediaElement controls, as determined by the web browser.
           *
           * @method  showControls
           * @example
           * <div><code>
           * let ele;
           * function setup() {
           *   //p5.MediaElement objects are usually created
           *   //by calling the createAudio(), createVideo(),
           *   //and createCapture() functions.
           *   //In this example we create
           *   //a new p5.MediaElement via createAudio()
           *   ele = createAudio('assets/lucky_dragons.mp3');
           *   background(200);
           *   textAlign(CENTER);
           *   text('Click to Show Controls!', 10, 25, 70, 80);
           * }
           * function mousePressed() {
           *   ele.showControls();
           *   background(200);
           *   text('Controls Shown', width / 2, height / 2);
           * }
           * </code></div>
           */ cov_8ak35vatu.s[777]++;
          _main.default.MediaElement.prototype.showControls = function() {
            cov_8ak35vatu.f[107]++;
            cov_8ak35vatu.s[778]++;
            // must set style for the element to show on the page
            this.elt.style['text-align'] = 'inherit';
            cov_8ak35vatu.s[779]++;
            this.elt.controls = true;
          };

          /**
           * Hide the default mediaElement controls.
           * @method hideControls
           * @example
           * <div><code>
           * let ele;
           * function setup() {
           *   //p5.MediaElement objects are usually created
           *   //by calling the createAudio(), createVideo(),
           *   //and createCapture() functions.
           *   //In this example we create
           *   //a new p5.MediaElement via createAudio()
           *   ele = createAudio('assets/lucky_dragons.mp3');
           *   ele.showControls();
           *   background(200);
           *   textAlign(CENTER);
           *   text('Click to hide Controls!', 10, 25, 70, 80);
           * }
           * function mousePressed() {
           *   ele.hideControls();
           *   background(200);
           *   text('Controls hidden', width / 2, height / 2);
           * }
           * </code></div>
           */ cov_8ak35vatu.s[780]++;
          _main.default.MediaElement.prototype.hideControls = function() {
            cov_8ak35vatu.f[108]++;
            cov_8ak35vatu.s[781]++;
            this.elt.controls = false;
          };

          /*** SCHEDULE EVENTS ***/

          // Cue inspired by JavaScript setTimeout, and the
          // Tone.js Transport Timeline Event, MIT License Yotam Mann 2015 tonejs.org
          cov_8ak35vatu.s[782]++;
          var Cue = function Cue(callback, time, id, val) {
            cov_8ak35vatu.f[109]++;
            cov_8ak35vatu.s[783]++;
            this.callback = callback;
            cov_8ak35vatu.s[784]++;
            this.time = time;
            cov_8ak35vatu.s[785]++;
            this.id = id;
            cov_8ak35vatu.s[786]++;
            this.val = val;
          };

          /**
           * Schedule events to trigger every time a MediaElement
           * (audio/video) reaches a playback cue point.
           *
           * Accepts a callback function, a time (in seconds) at which to trigger
           * the callback, and an optional parameter for the callback.
           *
           * Time will be passed as the first parameter to the callback function,
           * and param will be the second parameter.
           *
           * @method  addCue
           * @param {Number}   time     Time in seconds, relative to this media
           *                             element's playback. For example, to trigger
           *                             an event every time playback reaches two
           *                             seconds, pass in the number 2. This will be
           *                             passed as the first parameter to
           *                             the callback function.
           * @param {Function} callback Name of a function that will be
           *                             called at the given time. The callback will
           *                             receive time and (optionally) param as its
           *                             two parameters.
           * @param {Object} [value]    An object to be passed as the
           *                             second parameter to the
           *                             callback function.
           * @return {Number} id ID of this cue,
           *                     useful for removeCue(id)
           * @example
           * <div><code>
           * //
           * //
           * function setup() {
           *   createCanvas(200, 200);
           *
           *   let audioEl = createAudio('assets/beat.mp3');
           *   audioEl.showControls();
           *
           *   // schedule three calls to changeBackground
           *   audioEl.addCue(0.5, changeBackground, color(255, 0, 0));
           *   audioEl.addCue(1.0, changeBackground, color(0, 255, 0));
           *   audioEl.addCue(2.5, changeBackground, color(0, 0, 255));
           *   audioEl.addCue(3.0, changeBackground, color(0, 255, 255));
           *   audioEl.addCue(4.2, changeBackground, color(255, 255, 0));
           *   audioEl.addCue(5.0, changeBackground, color(255, 255, 0));
           * }
           *
           * function changeBackground(val) {
           *   background(val);
           * }
           * </code></div>
           */ cov_8ak35vatu.s[787]++;
          _main.default.MediaElement.prototype.addCue = function(time, callback, val) {
            cov_8ak35vatu.f[110]++;
            var id = (cov_8ak35vatu.s[788]++, this._cueIDCounter++);

            var cue = (cov_8ak35vatu.s[789]++, new Cue(callback, time, id, val));
            cov_8ak35vatu.s[790]++;
            this._cues.push(cue);
            cov_8ak35vatu.s[791]++;

            if (!this.elt.ontimeupdate) {
              cov_8ak35vatu.b[189][0]++;
              cov_8ak35vatu.s[792]++;
              this.elt.ontimeupdate = this._onTimeUpdate.bind(this);
            } else {
              cov_8ak35vatu.b[189][1]++;
            }
            cov_8ak35vatu.s[793]++;

            return id;
          };

          /**
           * Remove a callback based on its ID. The ID is returned by the
           * addCue method.
           * @method removeCue
           * @param  {Number} id ID of the cue, as returned by addCue
           * @example
           * <div><code>
           * let audioEl, id1, id2;
           * function setup() {
           *   background(255, 255, 255);
           *   audioEl = createAudio('assets/beat.mp3');
           *   audioEl.showControls();
           *   // schedule five calls to changeBackground
           *   id1 = audioEl.addCue(0.5, changeBackground, color(255, 0, 0));
           *   audioEl.addCue(1.0, changeBackground, color(0, 255, 0));
           *   audioEl.addCue(2.5, changeBackground, color(0, 0, 255));
           *   audioEl.addCue(3.0, changeBackground, color(0, 255, 255));
           *   id2 = audioEl.addCue(4.2, changeBackground, color(255, 255, 0));
           *   text('Click to remove first and last Cue!', 10, 25, 70, 80);
           * }
           * function mousePressed() {
           *   audioEl.removeCue(id1);
           *   audioEl.removeCue(id2);
           * }
           * function changeBackground(val) {
           *   background(val);
           * }
           * </code></div>
           */ cov_8ak35vatu.s[794]++;
          _main.default.MediaElement.prototype.removeCue = function(id) {
            cov_8ak35vatu.f[111]++;
            cov_8ak35vatu.s[795]++;
            for (var i = (cov_8ak35vatu.s[796]++, 0); i < this._cues.length; i++) {
              cov_8ak35vatu.s[797]++;
              if (this._cues[i].id === id) {
                cov_8ak35vatu.b[190][0]++;
                cov_8ak35vatu.s[798]++;
                console.log(id);
                cov_8ak35vatu.s[799]++;
                this._cues.splice(i, 1);
              } else {
                cov_8ak35vatu.b[190][1]++;
              }
            }
            cov_8ak35vatu.s[800]++;

            if (this._cues.length === 0) {
              cov_8ak35vatu.b[191][0]++;
              cov_8ak35vatu.s[801]++;
              this.elt.ontimeupdate = null;
            } else {
              cov_8ak35vatu.b[191][1]++;
            }
          };

          /**
           * Remove all of the callbacks that had originally been scheduled
           * via the addCue method.
           * @method  clearCues
           * @param  {Number} id ID of the cue, as returned by addCue
           * @example
           * <div><code>
           * let audioEl;
           * function setup() {
           *   background(255, 255, 255);
           *   audioEl = createAudio('assets/beat.mp3');
           *   //Show the default MediaElement controls, as determined by the web browser
           *   audioEl.showControls();
           *   // schedule calls to changeBackground
           *   background(200);
           *   text('Click to change Cue!', 10, 25, 70, 80);
           *   audioEl.addCue(0.5, changeBackground, color(255, 0, 0));
           *   audioEl.addCue(1.0, changeBackground, color(0, 255, 0));
           *   audioEl.addCue(2.5, changeBackground, color(0, 0, 255));
           *   audioEl.addCue(3.0, changeBackground, color(0, 255, 255));
           *   audioEl.addCue(4.2, changeBackground, color(255, 255, 0));
           * }
           * function mousePressed() {
           *   // here we clear the scheduled callbacks
           *   audioEl.clearCues();
           *   // then we add some more callbacks
           *   audioEl.addCue(1, changeBackground, color(2, 2, 2));
           *   audioEl.addCue(3, changeBackground, color(255, 255, 0));
           * }
           * function changeBackground(val) {
           *   background(val);
           * }
           * </code></div>
           */ cov_8ak35vatu.s[802]++;
          _main.default.MediaElement.prototype.clearCues = function() {
            cov_8ak35vatu.f[112]++;
            cov_8ak35vatu.s[803]++;
            this._cues = [];
            cov_8ak35vatu.s[804]++;
            this.elt.ontimeupdate = null;
          };

          // private method that checks for cues to be fired if events
          // have been scheduled using addCue(callback, time).
          cov_8ak35vatu.s[805]++;
          _main.default.MediaElement.prototype._onTimeUpdate = function() {
            cov_8ak35vatu.f[113]++;
            var playbackTime = (cov_8ak35vatu.s[806]++, this.time());
            cov_8ak35vatu.s[807]++;

            for (var i = (cov_8ak35vatu.s[808]++, 0); i < this._cues.length; i++) {
              var callbackTime = (cov_8ak35vatu.s[809]++, this._cues[i].time);
              var val = (cov_8ak35vatu.s[810]++, this._cues[i].val);
              cov_8ak35vatu.s[811]++;

              if (
                (cov_8ak35vatu.b[193][0]++, this._prevTime < callbackTime) &&
                (cov_8ak35vatu.b[193][1]++, callbackTime <= playbackTime)
              ) {
                cov_8ak35vatu.b[192][0]++;
                cov_8ak35vatu.s[812]++;
                // pass the scheduled callbackTime as parameter to the callback
                this._cues[i].callback(val);
              } else {
                cov_8ak35vatu.b[192][1]++;
              }
            }
            cov_8ak35vatu.s[813]++;

            this._prevTime = playbackTime;
          };

          /**
           * Base class for a file.
           * Used for Element.drop and createFileInput.
           *
           * @class p5.File
           * @constructor
           * @param {File} file File that is wrapped
           */ cov_8ak35vatu.s[814]++;
          _main.default.File = function(file, pInst) {
            cov_8ak35vatu.f[114]++;
            cov_8ak35vatu.s[815]++;
            /**
             * Underlying File object. All normal File methods can be called on this.
             *
             * @property file
             */
            this.file = file;
            cov_8ak35vatu.s[816]++;

            this._pInst = pInst;

            // Splitting out the file type into two components
            // This makes determining if image or text etc simpler
            var typeList = (cov_8ak35vatu.s[817]++, file.type.split('/'));
            /**
             * File type (image, text, etc.)
             *
             * @property type
             */ cov_8ak35vatu.s[818]++;
            this.type = typeList[0];
            /**
             * File subtype (usually the file extension jpg, png, xml, etc.)
             *
             * @property subtype
             */ cov_8ak35vatu.s[819]++;
            this.subtype = typeList[1];
            /**
             * File name
             *
             * @property name
             */ cov_8ak35vatu.s[820]++;
            this.name = file.name;
            /**
             * File size
             *
             * @property size
             */ cov_8ak35vatu.s[821]++;
            this.size = file.size;

            /**
             * URL string containing either image data, the text contents of the file or
             * a parsed object if file is JSON and p5.XML if XML
             *
             * @property data
             */ cov_8ak35vatu.s[822]++;
            this.data = undefined;
          };
          cov_8ak35vatu.s[823]++;

          _main.default.File._createLoader = function(theFile, callback) {
            cov_8ak35vatu.f[115]++;
            var reader = (cov_8ak35vatu.s[824]++, new FileReader());
            cov_8ak35vatu.s[825]++;
            reader.onload = function(e) {
              cov_8ak35vatu.f[116]++;
              var p5file = (cov_8ak35vatu.s[826]++, new _main.default.File(theFile));
              cov_8ak35vatu.s[827]++;
              if (p5file.file.type === 'application/json') {
                cov_8ak35vatu.b[194][0]++;
                cov_8ak35vatu.s[828]++;
                // Parse JSON and store the result in data
                p5file.data = JSON.parse(e.target.result);
              } else {
                cov_8ak35vatu.b[194][1]++;
                cov_8ak35vatu.s[829]++;
                if (p5file.file.type === 'text/xml') {
                  cov_8ak35vatu.b[195][0]++;
                  // Parse XML, wrap it in p5.XML and store the result in data
                  var parser = (cov_8ak35vatu.s[830]++, new DOMParser());
                  var xml = (cov_8ak35vatu.s[831]++,
                  parser.parseFromString(e.target.result, 'text/xml'));
                  cov_8ak35vatu.s[832]++;
                  p5file.data = new _main.default.XML(xml.documentElement);
                } else {
                  cov_8ak35vatu.b[195][1]++;
                  cov_8ak35vatu.s[833]++;
                  p5file.data = e.target.result;
                }
              }
              cov_8ak35vatu.s[834]++;
              callback(p5file);
            };
            cov_8ak35vatu.s[835]++;
            return reader;
          };
          cov_8ak35vatu.s[836]++;

          _main.default.File._load = function(f, callback) {
            cov_8ak35vatu.f[117]++;
            cov_8ak35vatu.s[837]++;
            // Text or data?
            // This should likely be improved
            if (
              (cov_8ak35vatu.b[197][0]++, /^text\//.test(f.type)) ||
              (cov_8ak35vatu.b[197][1]++, f.type === 'application/json')
            ) {
              cov_8ak35vatu.b[196][0]++;
              cov_8ak35vatu.s[838]++;
              _main.default.File._createLoader(f, callback).readAsText(f);
            } else {
              cov_8ak35vatu.b[196][1]++;
              cov_8ak35vatu.s[839]++;
              if (!/^(video|audio)\//.test(f.type)) {
                cov_8ak35vatu.b[198][0]++;
                cov_8ak35vatu.s[840]++;
                _main.default.File._createLoader(f, callback).readAsDataURL(f);
              } else {
                cov_8ak35vatu.b[198][1]++;
                var file = (cov_8ak35vatu.s[841]++, new _main.default.File(f));
                cov_8ak35vatu.s[842]++;
                file.data = URL.createObjectURL(f);
                cov_8ak35vatu.s[843]++;
                callback(file);
              }
            }
          };
          var _default = _main.default;
          exports.default = _default;
        },
        {
          '../core/main': 283,
          'core-js/modules/es.array.every': 167,
          'core-js/modules/es.array.filter': 169,
          'core-js/modules/es.array.for-each': 170,
          'core-js/modules/es.array.from': 171,
          'core-js/modules/es.array.index-of': 173,
          'core-js/modules/es.array.iterator': 174,
          'core-js/modules/es.array.map': 177,
          'core-js/modules/es.array.slice': 178,
          'core-js/modules/es.array.splice': 180,
          'core-js/modules/es.function.name': 181,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.promise': 193,
          'core-js/modules/es.regexp.exec': 196,
          'core-js/modules/es.regexp.to-string': 197,
          'core-js/modules/es.string.iterator': 201,
          'core-js/modules/es.string.replace': 204,
          'core-js/modules/es.string.split': 206,
          'core-js/modules/es.string.trim': 208,
          'core-js/modules/es.symbol': 211,
          'core-js/modules/es.symbol.description': 209,
          'core-js/modules/es.symbol.iterator': 210,
          'core-js/modules/web.dom-collections.for-each': 243,
          'core-js/modules/web.dom-collections.iterator': 244,
          'core-js/modules/web.url': 246
        }
      ],
      300: [
        function(_dereq_, module, exports) {
          'use strict';
          function _typeof(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof = function _typeof(obj) {
                return typeof obj;
              };
            } else {
              _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof(obj);
          }
          var cov_2hd269szt = (function() {
            var path = '/Users/outofambit/src/p5.js/src/events/acceleration.js';
            var hash = 'b109ab6950452e5a685d4d973cbee098d91a2c3f';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/events/acceleration.js',
              statementMap: {
                '0': { start: { line: 20, column: 0 }, end: { line: 21, column: 74 } },
                '1': { start: { line: 44, column: 0 }, end: { line: 44, column: 31 } },
                '2': { start: { line: 67, column: 0 }, end: { line: 67, column: 31 } },
                '3': { start: { line: 92, column: 0 }, end: { line: 92, column: 31 } },
                '4': { start: { line: 102, column: 0 }, end: { line: 102, column: 32 } },
                '5': { start: { line: 112, column: 0 }, end: { line: 112, column: 32 } },
                '6': { start: { line: 122, column: 0 }, end: { line: 122, column: 32 } },
                '7': { start: { line: 129, column: 0 }, end: { line: 133, column: 2 } },
                '8': { start: { line: 130, column: 2 }, end: { line: 130, column: 58 } },
                '9': { start: { line: 131, column: 2 }, end: { line: 131, column: 58 } },
                '10': { start: { line: 132, column: 2 }, end: { line: 132, column: 58 } },
                '11': { start: { line: 166, column: 0 }, end: { line: 166, column: 27 } },
                '12': { start: { line: 199, column: 0 }, end: { line: 199, column: 27 } },
                '13': { start: { line: 237, column: 0 }, end: { line: 237, column: 27 } },
                '14': { start: { line: 283, column: 0 }, end: { line: 283, column: 28 } },
                '15': { start: { line: 328, column: 0 }, end: { line: 328, column: 28 } },
                '16': { start: { line: 369, column: 0 }, end: { line: 369, column: 28 } },
                '17': { start: { line: 371, column: 18 }, end: { line: 371, column: 19 } },
                '18': { start: { line: 372, column: 18 }, end: { line: 372, column: 19 } },
                '19': { start: { line: 373, column: 18 }, end: { line: 373, column: 19 } },
                '20': { start: { line: 375, column: 23 }, end: { line: 375, column: 34 } },
                '21': { start: { line: 376, column: 23 }, end: { line: 376, column: 34 } },
                '22': { start: { line: 377, column: 23 }, end: { line: 377, column: 34 } },
                '23': { start: { line: 379, column: 0 }, end: { line: 379, column: 43 } },
                '24': { start: { line: 380, column: 0 }, end: { line: 380, column: 43 } },
                '25': { start: { line: 381, column: 0 }, end: { line: 381, column: 43 } },
                '26': { start: { line: 383, column: 0 }, end: { line: 387, column: 2 } },
                '27': { start: { line: 384, column: 2 }, end: { line: 384, column: 50 } },
                '28': { start: { line: 385, column: 2 }, end: { line: 385, column: 50 } },
                '29': { start: { line: 386, column: 2 }, end: { line: 386, column: 50 } },
                '30': { start: { line: 423, column: 0 }, end: { line: 423, column: 34 } },
                '31': { start: { line: 425, column: 21 }, end: { line: 425, column: 24 } },
                '32': { start: { line: 426, column: 22 }, end: { line: 426, column: 24 } },
                '33': { start: { line: 466, column: 0 }, end: { line: 469, column: 2 } },
                '34': { start: { line: 467, column: 2 }, end: { line: 467, column: 56 } },
                '35': { start: { line: 468, column: 2 }, end: { line: 468, column: 23 } },
                '36': { start: { line: 510, column: 0 }, end: { line: 513, column: 2 } },
                '37': { start: { line: 511, column: 2 }, end: { line: 511, column: 57 } },
                '38': { start: { line: 512, column: 2 }, end: { line: 512, column: 24 } },
                '39': { start: { line: 635, column: 0 }, end: { line: 646, column: 2 } },
                '40': { start: { line: 636, column: 2 }, end: { line: 636, column: 27 } },
                '41': { start: { line: 637, column: 2 }, end: { line: 641, column: 3 } },
                '42': { start: { line: 638, column: 4 }, end: { line: 638, column: 36 } },
                '43': { start: { line: 639, column: 4 }, end: { line: 639, column: 38 } },
                '44': { start: { line: 640, column: 4 }, end: { line: 640, column: 38 } },
                '45': { start: { line: 642, column: 2 }, end: { line: 642, column: 41 } },
                '46': { start: { line: 643, column: 2 }, end: { line: 643, column: 42 } },
                '47': { start: { line: 644, column: 2 }, end: { line: 644, column: 42 } },
                '48': { start: { line: 645, column: 2 }, end: { line: 645, column: 23 } },
                '49': { start: { line: 647, column: 0 }, end: { line: 653, column: 2 } },
                '50': { start: { line: 648, column: 2 }, end: { line: 648, column: 31 } },
                '51': { start: { line: 649, column: 2 }, end: { line: 649, column: 59 } },
                '52': { start: { line: 650, column: 2 }, end: { line: 650, column: 59 } },
                '53': { start: { line: 651, column: 2 }, end: { line: 651, column: 59 } },
                '54': { start: { line: 652, column: 2 }, end: { line: 652, column: 23 } },
                '55': { start: { line: 654, column: 0 }, end: { line: 757, column: 2 } },
                '56': { start: { line: 655, column: 2 }, end: { line: 661, column: 3 } },
                '57': { start: { line: 656, column: 4 }, end: { line: 656, column: 56 } },
                '58': { start: { line: 657, column: 9 }, end: { line: 661, column: 3 } },
                '59': { start: { line: 658, column: 4 }, end: { line: 658, column: 55 } },
                '60': { start: { line: 659, column: 9 }, end: { line: 661, column: 3 } },
                '61': { start: { line: 660, column: 4 }, end: { line: 660, column: 56 } },
                '62': { start: { line: 662, column: 18 }, end: { line: 662, column: 48 } },
                '63': { start: { line: 663, column: 2 }, end: { line: 671, column: 3 } },
                '64': { start: { line: 664, column: 4 }, end: { line: 670, column: 5 } },
                '65': { start: { line: 669, column: 6 }, end: { line: 669, column: 28 } },
                '66': { start: { line: 673, column: 2 }, end: { line: 744, column: 3 } },
                '67': { start: { line: 678, column: 16 }, end: { line: 678, column: 36 } },
                '68': { start: { line: 679, column: 17 }, end: { line: 679, column: 38 } },
                '69': { start: { line: 680, column: 15 }, end: { line: 680, column: 32 } },
                '70': { start: { line: 681, column: 4 }, end: { line: 685, column: 5 } },
                '71': { start: { line: 682, column: 6 }, end: { line: 682, column: 37 } },
                '72': { start: { line: 683, column: 11 }, end: { line: 685, column: 5 } },
                '73': { start: { line: 684, column: 6 }, end: { line: 684, column: 45 } },
                '74': { start: { line: 686, column: 4 }, end: { line: 688, column: 5 } },
                '75': { start: { line: 687, column: 6 }, end: { line: 687, column: 17 } },
                '76': { start: { line: 689, column: 4 }, end: { line: 693, column: 5 } },
                '77': { start: { line: 690, column: 6 }, end: { line: 690, column: 17 } },
                '78': { start: { line: 691, column: 6 }, end: { line: 691, column: 41 } },
                '79': { start: { line: 692, column: 6 }, end: { line: 692, column: 29 } },
                '80': { start: { line: 694, column: 4 }, end: { line: 694, column: 46 } },
                '81': { start: { line: 695, column: 4 }, end: { line: 695, column: 29 } },
                '82': { start: { line: 698, column: 16 }, end: { line: 698, column: 36 } },
                '83': { start: { line: 699, column: 17 }, end: { line: 699, column: 38 } },
                '84': { start: { line: 700, column: 15 }, end: { line: 700, column: 32 } },
                '85': { start: { line: 701, column: 4 }, end: { line: 705, column: 5 } },
                '86': { start: { line: 702, column: 6 }, end: { line: 702, column: 37 } },
                '87': { start: { line: 703, column: 11 }, end: { line: 705, column: 5 } },
                '88': { start: { line: 704, column: 6 }, end: { line: 704, column: 45 } },
                '89': { start: { line: 706, column: 4 }, end: { line: 708, column: 5 } },
                '90': { start: { line: 707, column: 6 }, end: { line: 707, column: 17 } },
                '91': { start: { line: 709, column: 4 }, end: { line: 713, column: 5 } },
                '92': { start: { line: 710, column: 6 }, end: { line: 710, column: 17 } },
                '93': { start: { line: 711, column: 6 }, end: { line: 711, column: 41 } },
                '94': { start: { line: 712, column: 6 }, end: { line: 712, column: 29 } },
                '95': { start: { line: 714, column: 4 }, end: { line: 714, column: 46 } },
                '96': { start: { line: 715, column: 4 }, end: { line: 715, column: 29 } },
                '97': { start: { line: 719, column: 4 }, end: { line: 730, column: 5 } },
                '98': { start: { line: 724, column: 6 }, end: { line: 724, column: 37 } },
                '99': { start: { line: 725, column: 11 }, end: { line: 730, column: 5 } },
                '100': { start: { line: 729, column: 6 }, end: { line: 729, column: 45 } },
                '101': { start: { line: 731, column: 4 }, end: { line: 733, column: 5 } },
                '102': { start: { line: 732, column: 6 }, end: { line: 732, column: 35 } },
                '103': { start: { line: 734, column: 4 }, end: { line: 741, column: 5 } },
                '104': { start: { line: 738, column: 6 }, end: { line: 738, column: 35 } },
                '105': { start: { line: 739, column: 6 }, end: { line: 739, column: 41 } },
                '106': { start: { line: 740, column: 6 }, end: { line: 740, column: 29 } },
                '107': { start: { line: 742, column: 4 }, end: { line: 742, column: 46 } },
                '108': { start: { line: 743, column: 4 }, end: { line: 743, column: 45 } },
                '109': { start: { line: 745, column: 2 }, end: { line: 756, column: 3 } },
                '110': { start: { line: 749, column: 4 }, end: { line: 752, column: 5 } },
                '111': { start: { line: 750, column: 6 }, end: { line: 750, column: 79 } },
                '112': { start: { line: 751, column: 6 }, end: { line: 751, column: 79 } },
                '113': { start: { line: 753, column: 4 }, end: { line: 755, column: 5 } },
                '114': { start: { line: 754, column: 6 }, end: { line: 754, column: 29 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: {
                    start: { line: 129, column: 37 },
                    end: { line: 129, column: 38 }
                  },
                  loc: { start: { line: 129, column: 48 }, end: { line: 133, column: 1 } },
                  line: 129
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: {
                    start: { line: 383, column: 33 },
                    end: { line: 383, column: 34 }
                  },
                  loc: { start: { line: 383, column: 44 }, end: { line: 387, column: 1 } },
                  line: 383
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 466, column: 32 },
                    end: { line: 466, column: 33 }
                  },
                  loc: { start: { line: 466, column: 46 }, end: { line: 469, column: 1 } },
                  line: 466
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 510, column: 33 },
                    end: { line: 510, column: 34 }
                  },
                  loc: { start: { line: 510, column: 47 }, end: { line: 513, column: 1 } },
                  line: 510
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 635, column: 36 },
                    end: { line: 635, column: 37 }
                  },
                  loc: { start: { line: 635, column: 48 }, end: { line: 646, column: 1 } },
                  line: 635
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 647, column: 31 },
                    end: { line: 647, column: 32 }
                  },
                  loc: { start: { line: 647, column: 43 }, end: { line: 653, column: 1 } },
                  line: 647
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 654, column: 29 },
                    end: { line: 654, column: 30 }
                  },
                  loc: { start: { line: 654, column: 40 }, end: { line: 757, column: 1 } },
                  line: 654
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 21, column: 2 }, end: { line: 21, column: 73 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 21, column: 49 }, end: { line: 21, column: 60 } },
                    { start: { line: 21, column: 63 }, end: { line: 21, column: 73 } }
                  ],
                  line: 21
                },
                '1': {
                  loc: { start: { line: 637, column: 2 }, end: { line: 641, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 637, column: 2 }, end: { line: 641, column: 3 } },
                    { start: { line: 637, column: 2 }, end: { line: 641, column: 3 } }
                  ],
                  line: 637
                },
                '2': {
                  loc: { start: { line: 655, column: 2 }, end: { line: 661, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 655, column: 2 }, end: { line: 661, column: 3 } },
                    { start: { line: 655, column: 2 }, end: { line: 661, column: 3 } }
                  ],
                  line: 655
                },
                '3': {
                  loc: { start: { line: 655, column: 6 }, end: { line: 655, column: 61 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 655, column: 6 }, end: { line: 655, column: 31 } },
                    { start: { line: 655, column: 35 }, end: { line: 655, column: 61 } }
                  ],
                  line: 655
                },
                '4': {
                  loc: { start: { line: 657, column: 9 }, end: { line: 661, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 657, column: 9 }, end: { line: 661, column: 3 } },
                    { start: { line: 657, column: 9 }, end: { line: 661, column: 3 } }
                  ],
                  line: 657
                },
                '5': {
                  loc: { start: { line: 659, column: 9 }, end: { line: 661, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 659, column: 9 }, end: { line: 661, column: 3 } },
                    { start: { line: 659, column: 9 }, end: { line: 661, column: 3 } }
                  ],
                  line: 659
                },
                '6': {
                  loc: { start: { line: 662, column: 18 }, end: { line: 662, column: 48 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 662, column: 35 }, end: { line: 662, column: 41 } },
                    { start: { line: 662, column: 44 }, end: { line: 662, column: 48 } }
                  ],
                  line: 662
                },
                '7': {
                  loc: { start: { line: 663, column: 2 }, end: { line: 671, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 663, column: 2 }, end: { line: 671, column: 3 } },
                    { start: { line: 663, column: 2 }, end: { line: 671, column: 3 } }
                  ],
                  line: 663
                },
                '8': {
                  loc: { start: { line: 664, column: 4 }, end: { line: 670, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 664, column: 4 }, end: { line: 670, column: 5 } },
                    { start: { line: 664, column: 4 }, end: { line: 670, column: 5 } }
                  ],
                  line: 664
                },
                '9': {
                  loc: { start: { line: 665, column: 6 }, end: { line: 667, column: 73 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 665, column: 6 }, end: { line: 665, column: 73 } },
                    { start: { line: 666, column: 6 }, end: { line: 666, column: 73 } },
                    { start: { line: 667, column: 6 }, end: { line: 667, column: 73 } }
                  ],
                  line: 665
                },
                '10': {
                  loc: { start: { line: 673, column: 2 }, end: { line: 744, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 673, column: 2 }, end: { line: 744, column: 3 } },
                    { start: { line: 673, column: 2 }, end: { line: 744, column: 3 } }
                  ],
                  line: 673
                },
                '11': {
                  loc: { start: { line: 681, column: 4 }, end: { line: 685, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 681, column: 4 }, end: { line: 685, column: 5 } },
                    { start: { line: 681, column: 4 }, end: { line: 685, column: 5 } }
                  ],
                  line: 681
                },
                '12': {
                  loc: { start: { line: 681, column: 8 }, end: { line: 681, column: 65 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 681, column: 9 }, end: { line: 681, column: 23 } },
                    { start: { line: 681, column: 27 }, end: { line: 681, column: 43 } },
                    { start: { line: 681, column: 48 }, end: { line: 681, column: 65 } }
                  ],
                  line: 681
                },
                '13': {
                  loc: { start: { line: 683, column: 11 }, end: { line: 685, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 683, column: 11 }, end: { line: 685, column: 5 } },
                    { start: { line: 683, column: 11 }, end: { line: 685, column: 5 } }
                  ],
                  line: 683
                },
                '14': {
                  loc: { start: { line: 683, column: 15 }, end: { line: 683, column: 49 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 683, column: 15 }, end: { line: 683, column: 29 } },
                    { start: { line: 683, column: 33 }, end: { line: 683, column: 49 } }
                  ],
                  line: 683
                },
                '15': {
                  loc: { start: { line: 686, column: 4 }, end: { line: 688, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 686, column: 4 }, end: { line: 688, column: 5 } },
                    { start: { line: 686, column: 4 }, end: { line: 688, column: 5 } }
                  ],
                  line: 686
                },
                '16': {
                  loc: { start: { line: 689, column: 4 }, end: { line: 693, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 689, column: 4 }, end: { line: 693, column: 5 } },
                    { start: { line: 689, column: 4 }, end: { line: 693, column: 5 } }
                  ],
                  line: 689
                },
                '17': {
                  loc: { start: { line: 689, column: 8 }, end: { line: 689, column: 63 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 689, column: 8 }, end: { line: 689, column: 33 } },
                    { start: { line: 689, column: 37 }, end: { line: 689, column: 63 } }
                  ],
                  line: 689
                },
                '18': {
                  loc: { start: { line: 701, column: 4 }, end: { line: 705, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 701, column: 4 }, end: { line: 705, column: 5 } },
                    { start: { line: 701, column: 4 }, end: { line: 705, column: 5 } }
                  ],
                  line: 701
                },
                '19': {
                  loc: { start: { line: 701, column: 8 }, end: { line: 701, column: 65 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 701, column: 9 }, end: { line: 701, column: 23 } },
                    { start: { line: 701, column: 27 }, end: { line: 701, column: 43 } },
                    { start: { line: 701, column: 48 }, end: { line: 701, column: 65 } }
                  ],
                  line: 701
                },
                '20': {
                  loc: { start: { line: 703, column: 11 }, end: { line: 705, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 703, column: 11 }, end: { line: 705, column: 5 } },
                    { start: { line: 703, column: 11 }, end: { line: 705, column: 5 } }
                  ],
                  line: 703
                },
                '21': {
                  loc: { start: { line: 703, column: 15 }, end: { line: 703, column: 60 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 703, column: 15 }, end: { line: 703, column: 29 } },
                    { start: { line: 703, column: 33 }, end: { line: 703, column: 60 } }
                  ],
                  line: 703
                },
                '22': {
                  loc: { start: { line: 706, column: 4 }, end: { line: 708, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 706, column: 4 }, end: { line: 708, column: 5 } },
                    { start: { line: 706, column: 4 }, end: { line: 708, column: 5 } }
                  ],
                  line: 706
                },
                '23': {
                  loc: { start: { line: 709, column: 4 }, end: { line: 713, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 709, column: 4 }, end: { line: 713, column: 5 } },
                    { start: { line: 709, column: 4 }, end: { line: 713, column: 5 } }
                  ],
                  line: 709
                },
                '24': {
                  loc: { start: { line: 709, column: 8 }, end: { line: 709, column: 63 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 709, column: 8 }, end: { line: 709, column: 33 } },
                    { start: { line: 709, column: 37 }, end: { line: 709, column: 63 } }
                  ],
                  line: 709
                },
                '25': {
                  loc: { start: { line: 719, column: 4 }, end: { line: 730, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 719, column: 4 }, end: { line: 730, column: 5 } },
                    { start: { line: 719, column: 4 }, end: { line: 730, column: 5 } }
                  ],
                  line: 719
                },
                '26': {
                  loc: { start: { line: 720, column: 6 }, end: { line: 722, column: 45 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 720, column: 7 }, end: { line: 720, column: 43 } },
                    { start: { line: 721, column: 8 }, end: { line: 721, column: 46 } },
                    { start: { line: 722, column: 6 }, end: { line: 722, column: 45 } }
                  ],
                  line: 720
                },
                '27': {
                  loc: { start: { line: 725, column: 11 }, end: { line: 730, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 725, column: 11 }, end: { line: 730, column: 5 } },
                    { start: { line: 725, column: 11 }, end: { line: 730, column: 5 } }
                  ],
                  line: 725
                },
                '28': {
                  loc: { start: { line: 726, column: 6 }, end: { line: 727, column: 44 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 726, column: 6 }, end: { line: 726, column: 42 } },
                    { start: { line: 727, column: 6 }, end: { line: 727, column: 44 } }
                  ],
                  line: 726
                },
                '29': {
                  loc: { start: { line: 731, column: 4 }, end: { line: 733, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 731, column: 4 }, end: { line: 733, column: 5 } },
                    { start: { line: 731, column: 4 }, end: { line: 733, column: 5 } }
                  ],
                  line: 731
                },
                '30': {
                  loc: { start: { line: 734, column: 4 }, end: { line: 741, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 734, column: 4 }, end: { line: 741, column: 5 } },
                    { start: { line: 734, column: 4 }, end: { line: 741, column: 5 } }
                  ],
                  line: 734
                },
                '31': {
                  loc: { start: { line: 735, column: 6 }, end: { line: 736, column: 50 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 735, column: 6 }, end: { line: 735, column: 49 } },
                    { start: { line: 736, column: 6 }, end: { line: 736, column: 50 } }
                  ],
                  line: 735
                },
                '32': {
                  loc: { start: { line: 745, column: 2 }, end: { line: 756, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 745, column: 2 }, end: { line: 756, column: 3 } },
                    { start: { line: 745, column: 2 }, end: { line: 756, column: 3 } }
                  ],
                  line: 745
                },
                '33': {
                  loc: { start: { line: 749, column: 4 }, end: { line: 752, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 749, column: 4 }, end: { line: 752, column: 5 } },
                    { start: { line: 749, column: 4 }, end: { line: 752, column: 5 } }
                  ],
                  line: 749
                },
                '34': {
                  loc: { start: { line: 753, column: 4 }, end: { line: 755, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 753, column: 4 }, end: { line: 755, column: 5 } },
                    { start: { line: 753, column: 4 }, end: { line: 755, column: 5 } }
                  ],
                  line: 753
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0
              },
              f: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0 },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0, 0],
                '20': [0, 0],
                '21': [0, 0],
                '22': [0, 0],
                '23': [0, 0],
                '24': [0, 0],
                '25': [0, 0],
                '26': [0, 0, 0],
                '27': [0, 0],
                '28': [0, 0],
                '29': [0, 0],
                '30': [0, 0],
                '31': [0, 0],
                '32': [0, 0],
                '33': [0, 0],
                '34': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: 'b109ab6950452e5a685d4d973cbee098d91a2c3f'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          var constants = _interopRequireWildcard(_dereq_('../core/constants'));
          function _getRequireWildcardCache() {
            if (typeof WeakMap !== 'function') return null;
            var cache = new WeakMap();
            _getRequireWildcardCache = function _getRequireWildcardCache() {
              return cache;
            };
            return cache;
          }
          function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
              return obj;
            }
            if (obj === null || (_typeof(obj) !== 'object' && typeof obj !== 'function')) {
              return { default: obj };
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
              return cache.get(obj);
            }
            var newObj = {};
            var hasPropertyDescriptor =
              Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
              if (Object.prototype.hasOwnProperty.call(obj, key)) {
                var desc = hasPropertyDescriptor
                  ? Object.getOwnPropertyDescriptor(obj, key)
                  : null;
                if (desc && (desc.get || desc.set)) {
                  Object.defineProperty(newObj, key, desc);
                } else {
                  newObj[key] = obj[key];
                }
              }
            }
            newObj.default = obj;
            if (cache) {
              cache.set(obj, newObj);
            }
            return newObj;
          }
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_2hd269szt.s[0]++;

          /**
           * The system variable deviceOrientation always contains the orientation of
           * the device. The value of this variable will either be set 'landscape'
           * or 'portrait'. If no data is available it will be set to 'undefined'.
           * either LANDSCAPE or PORTRAIT.
           *
           * @property {Constant} deviceOrientation
           * @readOnly
           */
          _main.default.prototype.deviceOrientation =
            window.innerWidth / window.innerHeight > 1.0
              ? (cov_2hd269szt.b[0][0]++, 'landscape')
              : (cov_2hd269szt.b[0][1]++, 'portrait');

          /**
           * The system variable accelerationX always contains the acceleration of the
           * device along the x axis. Value is represented as meters per second squared.
           *
           * @property {Number} accelerationX
           * @readOnly
           * @example
           * <div>
           * <code>
           * // Move a touchscreen device to register
           * // acceleration changes.
           * function draw() {
           *   background(220, 50);
           *   fill('magenta');
           *   ellipse(width / 2, height / 2, accelerationX);
           * }
           * </code>
           * </div>
           * @alt
           * Magnitude of device acceleration is displayed as ellipse size
           */ cov_2hd269szt.s[1]++;
          _main.default.prototype.accelerationX = 0;

          /**
           * The system variable accelerationY always contains the acceleration of the
           * device along the y axis. Value is represented as meters per second squared.
           *
           * @property {Number} accelerationY
           * @readOnly
           * @example
           * <div>
           * <code>
           * // Move a touchscreen device to register
           * // acceleration changes.
           * function draw() {
           *   background(220, 50);
           *   fill('magenta');
           *   ellipse(width / 2, height / 2, accelerationY);
           * }
           * </code>
           * </div>
           * @alt
           * Magnitude of device acceleration is displayed as ellipse size
           */ cov_2hd269szt.s[2]++;
          _main.default.prototype.accelerationY = 0;

          /**
           * The system variable accelerationZ always contains the acceleration of the
           * device along the z axis. Value is represented as meters per second squared.
           *
           * @property {Number} accelerationZ
           * @readOnly
           *
           * @example
           * <div>
           * <code>
           * // Move a touchscreen device to register
           * // acceleration changes.
           * function draw() {
           *   background(220, 50);
           *   fill('magenta');
           *   ellipse(width / 2, height / 2, accelerationZ);
           * }
           * </code>
           * </div>
           *
           * @alt
           * Magnitude of device acceleration is displayed as ellipse size
           */ cov_2hd269szt.s[3]++;
          _main.default.prototype.accelerationZ = 0;

          /**
           * The system variable pAccelerationX always contains the acceleration of the
           * device along the x axis in the frame previous to the current frame. Value
           * is represented as meters per second squared.
           *
           * @property {Number} pAccelerationX
           * @readOnly
           */ cov_2hd269szt.s[4]++;
          _main.default.prototype.pAccelerationX = 0;

          /**
           * The system variable pAccelerationY always contains the acceleration of the
           * device along the y axis in the frame previous to the current frame. Value
           * is represented as meters per second squared.
           *
           * @property {Number} pAccelerationY
           * @readOnly
           */ cov_2hd269szt.s[5]++;
          _main.default.prototype.pAccelerationY = 0;

          /**
           * The system variable pAccelerationZ always contains the acceleration of the
           * device along the z axis in the frame previous to the current frame. Value
           * is represented as meters per second squared.
           *
           * @property {Number} pAccelerationZ
           * @readOnly
           */ cov_2hd269szt.s[6]++;
          _main.default.prototype.pAccelerationZ = 0;

          /**
           * _updatePAccelerations updates the pAcceleration values
           *
           * @private
           */ cov_2hd269szt.s[7]++;
          _main.default.prototype._updatePAccelerations = function() {
            cov_2hd269szt.f[0]++;
            cov_2hd269szt.s[8]++;
            this._setProperty('pAccelerationX', this.accelerationX);
            cov_2hd269szt.s[9]++;
            this._setProperty('pAccelerationY', this.accelerationY);
            cov_2hd269szt.s[10]++;
            this._setProperty('pAccelerationZ', this.accelerationZ);
          };

          /**
           * The system variable rotationX always contains the rotation of the
           * device along the x axis. If the sketch <a href="#/p5/angleMode">
           * angleMode()</a> is set to DEGREES, the value will be -180 to 180. If
           * it is set to RADIANS, the value will be -PI to PI.
           *
           * Note: The order the rotations are called is important, ie. if used
           * together, it must be called in the order Z-X-Y or there might be
           * unexpected behaviour.
           *
           * @property {Number} rotationX
           * @readOnly
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           *
           * function draw() {
           *   background(200);
           *   //rotateZ(radians(rotationZ));
           *   rotateX(radians(rotationX));
           *   //rotateY(radians(rotationY));
           *   box(200, 200, 200);
           * }
           * </code>
           * </div>
           * @alt
           * red horizontal line right, green vertical line bottom. black background.
           */ cov_2hd269szt.s[11]++;
          _main.default.prototype.rotationX = 0;

          /**
           * The system variable rotationY always contains the rotation of the
           * device along the y axis. If the sketch <a href="#/p5/angleMode">
           * angleMode()</a> is set to DEGREES, the value will be -90 to 90. If
           * it is set to RADIANS, the value will be -PI/2 to PI/2.
           *
           * Note: The order the rotations are called is important, ie. if used
           * together, it must be called in the order Z-X-Y or there might be
           * unexpected behaviour.
           *
           * @property {Number} rotationY
           * @readOnly
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           *
           * function draw() {
           *   background(200);
           *   //rotateZ(radians(rotationZ));
           *   //rotateX(radians(rotationX));
           *   rotateY(radians(rotationY));
           *   box(200, 200, 200);
           * }
           * </code>
           * </div>
           * @alt
           * red horizontal line right, green vertical line bottom. black background.
           */ cov_2hd269szt.s[12]++;
          _main.default.prototype.rotationY = 0;

          /**
           * The system variable rotationZ always contains the rotation of the
           * device along the z axis. If the sketch <a href="#/p5/angleMode">
           * angleMode()</a> is set to DEGREES, the value will be 0 to 360. If
           * it is set to RADIANS, the value will be 0 to 2*PI.
           *
           * Unlike rotationX and rotationY, this variable is available for devices
           * with a built-in compass only.
           *
           * Note: The order the rotations are called is important, ie. if used
           * together, it must be called in the order Z-X-Y or there might be
           * unexpected behaviour.
           *
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           *
           * function draw() {
           *   background(200);
           *   rotateZ(radians(rotationZ));
           *   //rotateX(radians(rotationX));
           *   //rotateY(radians(rotationY));
           *   box(200, 200, 200);
           * }
           * </code>
           * </div>
           *
           * @property {Number} rotationZ
           * @readOnly
           *
           * @alt
           * red horizontal line right, green vertical line bottom. black background.
           */ cov_2hd269szt.s[13]++;
          _main.default.prototype.rotationZ = 0;

          /**
           * The system variable pRotationX always contains the rotation of the
           * device along the x axis in the frame previous to the current frame.
           * If the sketch <a href="#/p5/angleMode"> angleMode()</a> is set to DEGREES,
           * the value will be -180 to 180. If it is set to RADIANS, the value will
           * be -PI to PI.
           *
           * pRotationX can also be used with rotationX to determine the rotate
           * direction of the device along the X-axis.
           * @example
           * <div class='norender'>
           * <code>
           * // A simple if statement looking at whether
           * // rotationX - pRotationX < 0 is true or not will be
           * // sufficient for determining the rotate direction
           * // in most cases.
           *
           * // Some extra logic is needed to account for cases where
           * // the angles wrap around.
           * let rotateDirection = 'clockwise';
           *
           * // Simple range conversion to make things simpler.
           * // This is not absolutely necessary but the logic
           * // will be different in that case.
           *
           * let rX = rotationX + 180;
           * let pRX = pRotationX + 180;
           *
           * if ((rX - pRX > 0 && rX - pRX < 270) || rX - pRX < -270) {
           *   rotateDirection = 'clockwise';
           * } else if (rX - pRX < 0 || rX - pRX > 270) {
           *   rotateDirection = 'counter-clockwise';
           * }
           *
           * print(rotateDirection);
           * </code>
           * </div>
           *
           * @alt
           * no image to display.
           *
           * @property {Number} pRotationX
           * @readOnly
           */ cov_2hd269szt.s[14]++;
          _main.default.prototype.pRotationX = 0;

          /**
           * The system variable pRotationY always contains the rotation of the
           * device along the y axis in the frame previous to the current frame.
           * If the sketch <a href="#/p5/angleMode"> angleMode()</a> is set to DEGREES,
           * the value will be -90 to 90. If it is set to RADIANS, the value will
           * be -PI/2 to PI/2.
           *
           * pRotationY can also be used with rotationY to determine the rotate
           * direction of the device along the Y-axis.
           * @example
           * <div class='norender'>
           * <code>
           * // A simple if statement looking at whether
           * // rotationY - pRotationY < 0 is true or not will be
           * // sufficient for determining the rotate direction
           * // in most cases.
           *
           * // Some extra logic is needed to account for cases where
           * // the angles wrap around.
           * let rotateDirection = 'clockwise';
           *
           * // Simple range conversion to make things simpler.
           * // This is not absolutely necessary but the logic
           * // will be different in that case.
           *
           * let rY = rotationY + 180;
           * let pRY = pRotationY + 180;
           *
           * if ((rY - pRY > 0 && rY - pRY < 270) || rY - pRY < -270) {
           *   rotateDirection = 'clockwise';
           * } else if (rY - pRY < 0 || rY - pRY > 270) {
           *   rotateDirection = 'counter-clockwise';
           * }
           * print(rotateDirection);
           * </code>
           * </div>
           *
           * @alt
           * no image to display.
           *
           * @property {Number} pRotationY
           * @readOnly
           */ cov_2hd269szt.s[15]++;
          _main.default.prototype.pRotationY = 0;

          /**
           * The system variable pRotationZ always contains the rotation of the
           * device along the z axis in the frame previous to the current frame.
           * If the sketch <a href="#/p5/angleMode"> angleMode()</a> is set to DEGREES,
           * the value will be 0 to 360. If it is set to RADIANS, the value will
           * be 0 to 2*PI.
           *
           * pRotationZ can also be used with rotationZ to determine the rotate
           * direction of the device along the Z-axis.
           * @example
           * <div class='norender'>
           * <code>
           * // A simple if statement looking at whether
           * // rotationZ - pRotationZ < 0 is true or not will be
           * // sufficient for determining the rotate direction
           * // in most cases.
           *
           * // Some extra logic is needed to account for cases where
           * // the angles wrap around.
           * let rotateDirection = 'clockwise';
           *
           * if (
           *   (rotationZ - pRotationZ > 0 && rotationZ - pRotationZ < 270) ||
           *   rotationZ - pRotationZ < -270
           * ) {
           *   rotateDirection = 'clockwise';
           * } else if (rotationZ - pRotationZ < 0 || rotationZ - pRotationZ > 270) {
           *   rotateDirection = 'counter-clockwise';
           * }
           * print(rotateDirection);
           * </code>
           * </div>
           *
           * @alt
           * no image to display.
           *
           * @property {Number} pRotationZ
           * @readOnly
           */ cov_2hd269szt.s[16]++;
          _main.default.prototype.pRotationZ = 0;

          var startAngleX = (cov_2hd269szt.s[17]++, 0);
          var startAngleY = (cov_2hd269szt.s[18]++, 0);
          var startAngleZ = (cov_2hd269szt.s[19]++, 0);

          var rotateDirectionX = (cov_2hd269szt.s[20]++, 'clockwise');
          var rotateDirectionY = (cov_2hd269szt.s[21]++, 'clockwise');
          var rotateDirectionZ = (cov_2hd269szt.s[22]++, 'clockwise');
          cov_2hd269szt.s[23]++;

          _main.default.prototype.pRotateDirectionX = undefined;
          cov_2hd269szt.s[24]++;
          _main.default.prototype.pRotateDirectionY = undefined;
          cov_2hd269szt.s[25]++;
          _main.default.prototype.pRotateDirectionZ = undefined;
          cov_2hd269szt.s[26]++;

          _main.default.prototype._updatePRotations = function() {
            cov_2hd269szt.f[1]++;
            cov_2hd269szt.s[27]++;
            this._setProperty('pRotationX', this.rotationX);
            cov_2hd269szt.s[28]++;
            this._setProperty('pRotationY', this.rotationY);
            cov_2hd269szt.s[29]++;
            this._setProperty('pRotationZ', this.rotationZ);
          };

          /**
           * When a device is rotated, the axis that triggers the <a href="#/p5/deviceTurned">deviceTurned()</a>
           * method is stored in the turnAxis variable. The turnAxis variable is only defined within
           * the scope of deviceTurned().
           * @property {String} turnAxis
           * @readOnly
           * @example
           * <div>
           * <code>
           * // Run this example on a mobile device
           * // Rotate the device by 90 degrees in the
           * // X-axis to change the value.
           *
           * let value = 0;
           * function draw() {
           *   fill(value);
           *   rect(25, 25, 50, 50);
           * }
           * function deviceTurned() {
           *   if (turnAxis === 'X') {
           *     if (value === 0) {
           *       value = 255;
           *     } else if (value === 255) {
           *       value = 0;
           *     }
           *   }
           * }
           * </code>
           * </div>
           *
           * @alt
           * 50x50 black rect in center of canvas. turns white on mobile when device turns
           * 50x50 black rect in center of canvas. turns white on mobile when x-axis turns
           */ cov_2hd269szt.s[30]++;
          _main.default.prototype.turnAxis = undefined;

          var move_threshold = (cov_2hd269szt.s[31]++, 0.5);
          var shake_threshold = (cov_2hd269szt.s[32]++, 30);

          /**
           * The <a href="#/p5/setMoveThreshold">setMoveThreshold()</a> function is used to set the movement threshold for
           * the <a href="#/p5/deviceMoved">deviceMoved()</a> function. The default threshold is set to 0.5.
           *
           * @method setMoveThreshold
           * @param {number} value The threshold value
           * @example
           * <div class="norender">
           * <code>
           * // Run this example on a mobile device
           * // You will need to move the device incrementally further
           * // the closer the square's color gets to white in order to change the value.
           *
           * let value = 0;
           * let threshold = 0.5;
           * function setup() {
           *   setMoveThreshold(threshold);
           * }
           * function draw() {
           *   fill(value);
           *   rect(25, 25, 50, 50);
           * }
           * function deviceMoved() {
           *   value = value + 5;
           *   threshold = threshold + 0.1;
           *   if (value > 255) {
           *     value = 0;
           *     threshold = 30;
           *   }
           *   setMoveThreshold(threshold);
           * }
           * </code>
           * </div>
           *
           * @alt
           * 50x50 black rect in center of canvas. turns white on mobile when device moves
           */ cov_2hd269szt.s[33]++;

          _main.default.prototype.setMoveThreshold = function(val) {
            cov_2hd269szt.f[2]++;
            cov_2hd269szt.s[34]++;
            _main.default._validateParameters('setMoveThreshold', arguments);
            cov_2hd269szt.s[35]++;
            move_threshold = val;
          };

          /**
           * The <a href="#/p5/setShakeThreshold">setShakeThreshold()</a> function is used to set the movement threshold for
           * the <a href="#/p5/deviceShaken">deviceShaken()</a> function. The default threshold is set to 30.
           *
           * @method setShakeThreshold
           * @param {number} value The threshold value
           * @example
           * <div class="norender">
           * <code>
           * // Run this example on a mobile device
           * // You will need to shake the device more firmly
           * // the closer the box's fill gets to white in order to change the value.
           *
           * let value = 0;
           * let threshold = 30;
           * function setup() {
           *   setShakeThreshold(threshold);
           * }
           * function draw() {
           *   fill(value);
           *   rect(25, 25, 50, 50);
           * }
           * function deviceMoved() {
           *   value = value + 5;
           *   threshold = threshold + 5;
           *   if (value > 255) {
           *     value = 0;
           *     threshold = 30;
           *   }
           *   setShakeThreshold(threshold);
           * }
           * </code>
           * </div>
           *
           * @alt
           * 50x50 black rect in center of canvas. turns white on mobile when device
           * is being shaked
           */ cov_2hd269szt.s[36]++;

          _main.default.prototype.setShakeThreshold = function(val) {
            cov_2hd269szt.f[3]++;
            cov_2hd269szt.s[37]++;
            _main.default._validateParameters('setShakeThreshold', arguments);
            cov_2hd269szt.s[38]++;
            shake_threshold = val;
          };

          /**
           * The <a href="#/p5/deviceMoved">deviceMoved()</a> function is called when the device is moved by more than
           * the threshold value along X, Y or Z axis. The default threshold is set to 0.5.
           * The threshold value can be changed using <a href="https://p5js.org/reference/#/p5/setMoveThreshold">setMoveThreshold()</a>.
           *
           * @method deviceMoved
           * @example
           * <div class="norender">
           * <code>
           * // Run this example on a mobile device
           * // Move the device around
           * // to change the value.
           *
           * let value = 0;
           * function draw() {
           *   fill(value);
           *   rect(25, 25, 50, 50);
           * }
           * function deviceMoved() {
           *   value = value + 5;
           *   if (value > 255) {
           *     value = 0;
           *   }
           * }
           * </code>
           * </div>
           *
           * @alt
           * 50x50 black rect in center of canvas. turns white on mobile when device moves
           */

          /**
           * The <a href="#/p5/deviceTurned">deviceTurned()</a> function is called when the device rotates by
           * more than 90 degrees continuously.
           *
           * The axis that triggers the <a href="#/p5/deviceTurned">deviceTurned()</a> method is stored in the turnAxis
           * variable. The <a href="#/p5/deviceTurned">deviceTurned()</a> method can be locked to trigger on any axis:
           * X, Y or Z by comparing the turnAxis variable to 'X', 'Y' or 'Z'.
           *
           * @method deviceTurned
           * @example
           * <div class="norender">
           * <code>
           * // Run this example on a mobile device
           * // Rotate the device by 90 degrees
           * // to change the value.
           *
           * let value = 0;
           * function draw() {
           *   fill(value);
           *   rect(25, 25, 50, 50);
           * }
           * function deviceTurned() {
           *   if (value === 0) {
           *     value = 255;
           *   } else if (value === 255) {
           *     value = 0;
           *   }
           * }
           * </code>
           * </div>
           * <div>
           * <code>
           * // Run this example on a mobile device
           * // Rotate the device by 90 degrees in the
           * // X-axis to change the value.
           *
           * let value = 0;
           * function draw() {
           *   fill(value);
           *   rect(25, 25, 50, 50);
           * }
           * function deviceTurned() {
           *   if (turnAxis === 'X') {
           *     if (value === 0) {
           *       value = 255;
           *     } else if (value === 255) {
           *       value = 0;
           *     }
           *   }
           * }
           * </code>
           * </div>
           *
           * @alt
           * 50x50 black rect in center of canvas. turns white on mobile when device turns
           * 50x50 black rect in center of canvas. turns white on mobile when x-axis turns
           */

          /**
           * The <a href="#/p5/deviceShaken">deviceShaken()</a> function is called when the device total acceleration
           * changes of accelerationX and accelerationY values is more than
           * the threshold value. The default threshold is set to 30.
           * The threshold value can be changed using <a href="https://p5js.org/reference/#/p5/setShakeThreshold">setShakeThreshold()</a>.
           *
           * @method deviceShaken
           * @example
           * <div class="norender">
           * <code>
           * // Run this example on a mobile device
           * // Shake the device to change the value.
           *
           * let value = 0;
           * function draw() {
           *   fill(value);
           *   rect(25, 25, 50, 50);
           * }
           * function deviceShaken() {
           *   value = value + 5;
           *   if (value > 255) {
           *     value = 0;
           *   }
           * }
           * </code>
           * </div>
           *
           * @alt
           * 50x50 black rect in center of canvas. turns white on mobile when device shakes
           */ cov_2hd269szt.s[39]++;

          _main.default.prototype._ondeviceorientation = function(e) {
            cov_2hd269szt.f[4]++;
            cov_2hd269szt.s[40]++;
            this._updatePRotations();
            cov_2hd269szt.s[41]++;
            if (this._angleMode === constants.radians) {
              cov_2hd269szt.b[1][0]++;
              cov_2hd269szt.s[42]++;
              e.beta = e.beta * (_PI / 180.0);
              cov_2hd269szt.s[43]++;
              e.gamma = e.gamma * (_PI / 180.0);
              cov_2hd269szt.s[44]++;
              e.alpha = e.alpha * (_PI / 180.0);
            } else {
              cov_2hd269szt.b[1][1]++;
            }
            cov_2hd269szt.s[45]++;
            this._setProperty('rotationX', e.beta);
            cov_2hd269szt.s[46]++;
            this._setProperty('rotationY', e.gamma);
            cov_2hd269szt.s[47]++;
            this._setProperty('rotationZ', e.alpha);
            cov_2hd269szt.s[48]++;
            this._handleMotion();
          };
          cov_2hd269szt.s[49]++;
          _main.default.prototype._ondevicemotion = function(e) {
            cov_2hd269szt.f[5]++;
            cov_2hd269szt.s[50]++;
            this._updatePAccelerations();
            cov_2hd269szt.s[51]++;
            this._setProperty('accelerationX', e.acceleration.x * 2);
            cov_2hd269szt.s[52]++;
            this._setProperty('accelerationY', e.acceleration.y * 2);
            cov_2hd269szt.s[53]++;
            this._setProperty('accelerationZ', e.acceleration.z * 2);
            cov_2hd269szt.s[54]++;
            this._handleMotion();
          };
          cov_2hd269szt.s[55]++;
          _main.default.prototype._handleMotion = function() {
            cov_2hd269szt.f[6]++;
            cov_2hd269szt.s[56]++;
            if (
              (cov_2hd269szt.b[3][0]++, window.orientation === 90) ||
              (cov_2hd269szt.b[3][1]++, window.orientation === -90)
            ) {
              cov_2hd269szt.b[2][0]++;
              cov_2hd269szt.s[57]++;
              this._setProperty('deviceOrientation', 'landscape');
            } else {
              cov_2hd269szt.b[2][1]++;
              cov_2hd269szt.s[58]++;
              if (window.orientation === 0) {
                cov_2hd269szt.b[4][0]++;
                cov_2hd269szt.s[59]++;
                this._setProperty('deviceOrientation', 'portrait');
              } else {
                cov_2hd269szt.b[4][1]++;
                cov_2hd269szt.s[60]++;
                if (window.orientation === undefined) {
                  cov_2hd269szt.b[5][0]++;
                  cov_2hd269szt.s[61]++;
                  this._setProperty('deviceOrientation', 'undefined');
                } else {
                  cov_2hd269szt.b[5][1]++;
                }
              }
            }
            var context = (cov_2hd269szt.s[62]++,
            this._isGlobal
              ? (cov_2hd269szt.b[6][0]++, window)
              : (cov_2hd269szt.b[6][1]++, this));
            cov_2hd269szt.s[63]++;
            if (typeof context.deviceMoved === 'function') {
              cov_2hd269szt.b[7][0]++;
              cov_2hd269szt.s[64]++;
              if (
                (cov_2hd269szt.b[9][0]++,
                Math.abs(this.accelerationX - this.pAccelerationX) > move_threshold) ||
                (cov_2hd269szt.b[9][1]++,
                Math.abs(this.accelerationY - this.pAccelerationY) > move_threshold) ||
                (cov_2hd269szt.b[9][2]++,
                Math.abs(this.accelerationZ - this.pAccelerationZ) > move_threshold)
              ) {
                cov_2hd269szt.b[8][0]++;
                cov_2hd269szt.s[65]++;
                context.deviceMoved();
              } else {
                cov_2hd269szt.b[8][1]++;
              }
            } else {
              cov_2hd269szt.b[7][1]++;
            }
            cov_2hd269szt.s[66]++;

            if (typeof context.deviceTurned === 'function') {
              cov_2hd269szt.b[10][0]++;
              // The angles given by rotationX etc is from range -180 to 180.
              // The following will convert them to 0 to 360 for ease of calculation
              // of cases when the angles wrapped around.
              // _startAngleX will be converted back at the end and updated.
              var wRX = (cov_2hd269szt.s[67]++, this.rotationX + 180);
              var wPRX = (cov_2hd269szt.s[68]++, this.pRotationX + 180);
              var wSAX = (cov_2hd269szt.s[69]++, startAngleX + 180);
              cov_2hd269szt.s[70]++;
              if (
                ((cov_2hd269szt.b[12][0]++, wRX - wPRX > 0) &&
                  (cov_2hd269szt.b[12][1]++, wRX - wPRX < 270)) ||
                (cov_2hd269szt.b[12][2]++, wRX - wPRX < -270)
              ) {
                cov_2hd269szt.b[11][0]++;
                cov_2hd269szt.s[71]++;
                rotateDirectionX = 'clockwise';
              } else {
                cov_2hd269szt.b[11][1]++;
                cov_2hd269szt.s[72]++;
                if (
                  (cov_2hd269szt.b[14][0]++, wRX - wPRX < 0) ||
                  (cov_2hd269szt.b[14][1]++, wRX - wPRX > 270)
                ) {
                  cov_2hd269szt.b[13][0]++;
                  cov_2hd269szt.s[73]++;
                  rotateDirectionX = 'counter-clockwise';
                } else {
                  cov_2hd269szt.b[13][1]++;
                }
              }
              cov_2hd269szt.s[74]++;
              if (rotateDirectionX !== this.pRotateDirectionX) {
                cov_2hd269szt.b[15][0]++;
                cov_2hd269szt.s[75]++;
                wSAX = wRX;
              } else {
                cov_2hd269szt.b[15][1]++;
              }
              cov_2hd269szt.s[76]++;
              if (
                (cov_2hd269szt.b[17][0]++, Math.abs(wRX - wSAX) > 90) &&
                (cov_2hd269szt.b[17][1]++, Math.abs(wRX - wSAX) < 270)
              ) {
                cov_2hd269szt.b[16][0]++;
                cov_2hd269szt.s[77]++;
                wSAX = wRX;
                cov_2hd269szt.s[78]++;
                this._setProperty('turnAxis', 'X');
                cov_2hd269szt.s[79]++;
                context.deviceTurned();
              } else {
                cov_2hd269szt.b[16][1]++;
              }
              cov_2hd269szt.s[80]++;
              this.pRotateDirectionX = rotateDirectionX;
              cov_2hd269szt.s[81]++;
              startAngleX = wSAX - 180;

              // Y-axis is identical to X-axis except for changing some names.
              var wRY = (cov_2hd269szt.s[82]++, this.rotationY + 180);
              var wPRY = (cov_2hd269szt.s[83]++, this.pRotationY + 180);
              var wSAY = (cov_2hd269szt.s[84]++, startAngleY + 180);
              cov_2hd269szt.s[85]++;
              if (
                ((cov_2hd269szt.b[19][0]++, wRY - wPRY > 0) &&
                  (cov_2hd269szt.b[19][1]++, wRY - wPRY < 270)) ||
                (cov_2hd269szt.b[19][2]++, wRY - wPRY < -270)
              ) {
                cov_2hd269szt.b[18][0]++;
                cov_2hd269szt.s[86]++;
                rotateDirectionY = 'clockwise';
              } else {
                cov_2hd269szt.b[18][1]++;
                cov_2hd269szt.s[87]++;
                if (
                  (cov_2hd269szt.b[21][0]++, wRY - wPRY < 0) ||
                  (cov_2hd269szt.b[21][1]++, wRY - this.pRotationY > 270)
                ) {
                  cov_2hd269szt.b[20][0]++;
                  cov_2hd269szt.s[88]++;
                  rotateDirectionY = 'counter-clockwise';
                } else {
                  cov_2hd269szt.b[20][1]++;
                }
              }
              cov_2hd269szt.s[89]++;
              if (rotateDirectionY !== this.pRotateDirectionY) {
                cov_2hd269szt.b[22][0]++;
                cov_2hd269szt.s[90]++;
                wSAY = wRY;
              } else {
                cov_2hd269szt.b[22][1]++;
              }
              cov_2hd269szt.s[91]++;
              if (
                (cov_2hd269szt.b[24][0]++, Math.abs(wRY - wSAY) > 90) &&
                (cov_2hd269szt.b[24][1]++, Math.abs(wRY - wSAY) < 270)
              ) {
                cov_2hd269szt.b[23][0]++;
                cov_2hd269szt.s[92]++;
                wSAY = wRY;
                cov_2hd269szt.s[93]++;
                this._setProperty('turnAxis', 'Y');
                cov_2hd269szt.s[94]++;
                context.deviceTurned();
              } else {
                cov_2hd269szt.b[23][1]++;
              }
              cov_2hd269szt.s[95]++;
              this.pRotateDirectionY = rotateDirectionY;
              cov_2hd269szt.s[96]++;
              startAngleY = wSAY - 180;

              // Z-axis is already in the range 0 to 360
              // so no conversion is needed.
              cov_2hd269szt.s[97]++;
              if (
                ((cov_2hd269szt.b[26][0]++, this.rotationZ - this.pRotationZ > 0) &&
                  (cov_2hd269szt.b[26][1]++, this.rotationZ - this.pRotationZ < 270)) ||
                (cov_2hd269szt.b[26][2]++, this.rotationZ - this.pRotationZ < -270)
              ) {
                cov_2hd269szt.b[25][0]++;
                cov_2hd269szt.s[98]++;
                rotateDirectionZ = 'clockwise';
              } else {
                cov_2hd269szt.b[25][1]++;
                cov_2hd269szt.s[99]++;
                if (
                  (cov_2hd269szt.b[28][0]++, this.rotationZ - this.pRotationZ < 0) ||
                  (cov_2hd269szt.b[28][1]++, this.rotationZ - this.pRotationZ > 270)
                ) {
                  cov_2hd269szt.b[27][0]++;
                  cov_2hd269szt.s[100]++;
                  rotateDirectionZ = 'counter-clockwise';
                } else {
                  cov_2hd269szt.b[27][1]++;
                }
              }
              cov_2hd269szt.s[101]++;
              if (rotateDirectionZ !== this.pRotateDirectionZ) {
                cov_2hd269szt.b[29][0]++;
                cov_2hd269szt.s[102]++;
                startAngleZ = this.rotationZ;
              } else {
                cov_2hd269szt.b[29][1]++;
              }
              cov_2hd269szt.s[103]++;
              if (
                (cov_2hd269szt.b[31][0]++, Math.abs(this.rotationZ - startAngleZ) > 90) &&
                (cov_2hd269szt.b[31][1]++, Math.abs(this.rotationZ - startAngleZ) < 270)
              ) {
                cov_2hd269szt.b[30][0]++;
                cov_2hd269szt.s[104]++;
                startAngleZ = this.rotationZ;
                cov_2hd269szt.s[105]++;
                this._setProperty('turnAxis', 'Z');
                cov_2hd269szt.s[106]++;
                context.deviceTurned();
              } else {
                cov_2hd269szt.b[30][1]++;
              }
              cov_2hd269szt.s[107]++;
              this.pRotateDirectionZ = rotateDirectionZ;
              cov_2hd269szt.s[108]++;
              this._setProperty('turnAxis', undefined);
            } else {
              cov_2hd269szt.b[10][1]++;
            }
            cov_2hd269szt.s[109]++;
            if (typeof context.deviceShaken === 'function') {
              cov_2hd269szt.b[32][0]++;
              var accelerationChangeX;
              var accelerationChangeY;
              // Add accelerationChangeZ if acceleration change on Z is needed
              cov_2hd269szt.s[110]++;
              if (this.pAccelerationX !== null) {
                cov_2hd269szt.b[33][0]++;
                cov_2hd269szt.s[111]++;
                accelerationChangeX = Math.abs(this.accelerationX - this.pAccelerationX);
                cov_2hd269szt.s[112]++;
                accelerationChangeY = Math.abs(this.accelerationY - this.pAccelerationY);
              } else {
                cov_2hd269szt.b[33][1]++;
              }
              cov_2hd269szt.s[113]++;
              if (accelerationChangeX + accelerationChangeY > shake_threshold) {
                cov_2hd269szt.b[34][0]++;
                cov_2hd269szt.s[114]++;
                context.deviceShaken();
              } else {
                cov_2hd269szt.b[34][1]++;
              }
            } else {
              cov_2hd269szt.b[32][1]++;
            }
          };
          var _default = _main.default;
          exports.default = _default;
        },
        { '../core/constants': 272, '../core/main': 283 }
      ],
      301: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_1ca11ygnea = (function() {
            var path = '/Users/outofambit/src/p5.js/src/events/keyboard.js';
            var hash = 'ea6caa03e414340dfbe172dd4ac7f7237dcd5226';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/events/keyboard.js',
              statementMap: {
                '0': { start: { line: 33, column: 0 }, end: { line: 33, column: 34 } },
                '1': { start: { line: 34, column: 0 }, end: { line: 34, column: 34 } },
                '2': { start: { line: 62, column: 0 }, end: { line: 62, column: 22 } },
                '3': { start: { line: 101, column: 0 }, end: { line: 101, column: 25 } },
                '4': { start: { line: 172, column: 0 }, end: { line: 189, column: 2 } },
                '5': { start: { line: 173, column: 2 }, end: { line: 176, column: 3 } },
                '6': { start: { line: 175, column: 4 }, end: { line: 175, column: 11 } },
                '7': { start: { line: 177, column: 2 }, end: { line: 177, column: 42 } },
                '8': { start: { line: 178, column: 2 }, end: { line: 178, column: 42 } },
                '9': { start: { line: 179, column: 2 }, end: { line: 179, column: 40 } },
                '10': { start: { line: 180, column: 2 }, end: { line: 180, column: 33 } },
                '11': { start: { line: 181, column: 2 }, end: { line: 181, column: 77 } },
                '12': { start: { line: 182, column: 18 }, end: { line: 182, column: 48 } },
                '13': { start: { line: 183, column: 2 }, end: { line: 188, column: 3 } },
                '14': { start: { line: 184, column: 27 }, end: { line: 184, column: 48 } },
                '15': { start: { line: 185, column: 4 }, end: { line: 187, column: 5 } },
                '16': { start: { line: 186, column: 6 }, end: { line: 186, column: 25 } },
                '17': { start: { line: 221, column: 0 }, end: { line: 241, column: 2 } },
                '18': { start: { line: 222, column: 2 }, end: { line: 222, column: 34 } },
                '19': { start: { line: 224, column: 2 }, end: { line: 227, column: 3 } },
                '20': { start: { line: 225, column: 4 }, end: { line: 225, column: 45 } },
                '21': { start: { line: 226, column: 4 }, end: { line: 226, column: 45 } },
                '22': { start: { line: 229, column: 2 }, end: { line: 229, column: 47 } },
                '23': { start: { line: 231, column: 2 }, end: { line: 231, column: 77 } },
                '24': { start: { line: 232, column: 2 }, end: { line: 232, column: 40 } },
                '25': { start: { line: 234, column: 18 }, end: { line: 234, column: 48 } },
                '26': { start: { line: 235, column: 2 }, end: { line: 240, column: 3 } },
                '27': { start: { line: 236, column: 27 }, end: { line: 236, column: 49 } },
                '28': { start: { line: 237, column: 4 }, end: { line: 239, column: 5 } },
                '29': { start: { line: 238, column: 6 }, end: { line: 238, column: 25 } },
                '30': { start: { line: 282, column: 0 }, end: { line: 297, column: 2 } },
                '31': { start: { line: 283, column: 2 }, end: { line: 286, column: 3 } },
                '32': { start: { line: 285, column: 4 }, end: { line: 285, column: 11 } },
                '33': { start: { line: 287, column: 2 }, end: { line: 287, column: 50 } },
                '34': { start: { line: 288, column: 2 }, end: { line: 288, column: 77 } },
                '35': { start: { line: 290, column: 18 }, end: { line: 290, column: 48 } },
                '36': { start: { line: 291, column: 2 }, end: { line: 296, column: 3 } },
                '37': { start: { line: 292, column: 27 }, end: { line: 292, column: 46 } },
                '38': { start: { line: 293, column: 4 }, end: { line: 295, column: 5 } },
                '39': { start: { line: 294, column: 6 }, end: { line: 294, column: 25 } },
                '40': { start: { line: 304, column: 0 }, end: { line: 306, column: 2 } },
                '41': { start: { line: 305, column: 2 }, end: { line: 305, column: 22 } },
                '42': { start: { line: 379, column: 0 }, end: { line: 382, column: 2 } },
                '43': { start: { line: 380, column: 2 }, end: { line: 380, column: 49 } },
                '44': { start: { line: 381, column: 2 }, end: { line: 381, column: 39 } },
                '45': { start: { line: 393, column: 0 }, end: { line: 400, column: 2 } },
                '46': { start: { line: 394, column: 2 }, end: { line: 398, column: 3 } },
                '47': { start: { line: 395, column: 4 }, end: { line: 397, column: 5 } },
                '48': { start: { line: 396, column: 6 }, end: { line: 396, column: 18 } },
                '49': { start: { line: 399, column: 2 }, end: { line: 399, column: 15 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: {
                    start: { line: 172, column: 26 },
                    end: { line: 172, column: 27 }
                  },
                  loc: { start: { line: 172, column: 38 }, end: { line: 189, column: 1 } },
                  line: 172
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: {
                    start: { line: 221, column: 24 },
                    end: { line: 221, column: 25 }
                  },
                  loc: { start: { line: 221, column: 36 }, end: { line: 241, column: 1 } },
                  line: 221
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 282, column: 27 },
                    end: { line: 282, column: 28 }
                  },
                  loc: { start: { line: 282, column: 39 }, end: { line: 297, column: 1 } },
                  line: 282
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 304, column: 23 },
                    end: { line: 304, column: 24 }
                  },
                  loc: { start: { line: 304, column: 35 }, end: { line: 306, column: 1 } },
                  line: 304
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 379, column: 25 },
                    end: { line: 379, column: 26 }
                  },
                  loc: { start: { line: 379, column: 40 }, end: { line: 382, column: 1 } },
                  line: 379
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 393, column: 28 },
                    end: { line: 393, column: 29 }
                  },
                  loc: { start: { line: 393, column: 39 }, end: { line: 400, column: 1 } },
                  line: 393
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 173, column: 2 }, end: { line: 176, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 173, column: 2 }, end: { line: 176, column: 3 } },
                    { start: { line: 173, column: 2 }, end: { line: 176, column: 3 } }
                  ],
                  line: 173
                },
                '1': {
                  loc: { start: { line: 181, column: 27 }, end: { line: 181, column: 75 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 181, column: 27 }, end: { line: 181, column: 32 } },
                    { start: { line: 181, column: 36 }, end: { line: 181, column: 64 } },
                    { start: { line: 181, column: 68 }, end: { line: 181, column: 75 } }
                  ],
                  line: 181
                },
                '2': {
                  loc: { start: { line: 182, column: 18 }, end: { line: 182, column: 48 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 182, column: 35 }, end: { line: 182, column: 41 } },
                    { start: { line: 182, column: 44 }, end: { line: 182, column: 48 } }
                  ],
                  line: 182
                },
                '3': {
                  loc: { start: { line: 183, column: 2 }, end: { line: 188, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 183, column: 2 }, end: { line: 188, column: 3 } },
                    { start: { line: 183, column: 2 }, end: { line: 188, column: 3 } }
                  ],
                  line: 183
                },
                '4': {
                  loc: { start: { line: 183, column: 6 }, end: { line: 183, column: 61 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 183, column: 6 }, end: { line: 183, column: 46 } },
                    { start: { line: 183, column: 50 }, end: { line: 183, column: 61 } }
                  ],
                  line: 183
                },
                '5': {
                  loc: { start: { line: 185, column: 4 }, end: { line: 187, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 185, column: 4 }, end: { line: 187, column: 5 } },
                    { start: { line: 185, column: 4 }, end: { line: 187, column: 5 } }
                  ],
                  line: 185
                },
                '6': {
                  loc: { start: { line: 224, column: 2 }, end: { line: 227, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 224, column: 2 }, end: { line: 227, column: 3 } },
                    { start: { line: 224, column: 2 }, end: { line: 227, column: 3 } }
                  ],
                  line: 224
                },
                '7': {
                  loc: { start: { line: 231, column: 27 }, end: { line: 231, column: 75 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 231, column: 27 }, end: { line: 231, column: 32 } },
                    { start: { line: 231, column: 36 }, end: { line: 231, column: 64 } },
                    { start: { line: 231, column: 68 }, end: { line: 231, column: 75 } }
                  ],
                  line: 231
                },
                '8': {
                  loc: { start: { line: 234, column: 18 }, end: { line: 234, column: 48 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 234, column: 35 }, end: { line: 234, column: 41 } },
                    { start: { line: 234, column: 44 }, end: { line: 234, column: 48 } }
                  ],
                  line: 234
                },
                '9': {
                  loc: { start: { line: 235, column: 2 }, end: { line: 240, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 235, column: 2 }, end: { line: 240, column: 3 } },
                    { start: { line: 235, column: 2 }, end: { line: 240, column: 3 } }
                  ],
                  line: 235
                },
                '10': {
                  loc: { start: { line: 237, column: 4 }, end: { line: 239, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 237, column: 4 }, end: { line: 239, column: 5 } },
                    { start: { line: 237, column: 4 }, end: { line: 239, column: 5 } }
                  ],
                  line: 237
                },
                '11': {
                  loc: { start: { line: 283, column: 2 }, end: { line: 286, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 283, column: 2 }, end: { line: 286, column: 3 } },
                    { start: { line: 283, column: 2 }, end: { line: 286, column: 3 } }
                  ],
                  line: 283
                },
                '12': {
                  loc: { start: { line: 288, column: 27 }, end: { line: 288, column: 75 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 288, column: 27 }, end: { line: 288, column: 32 } },
                    { start: { line: 288, column: 36 }, end: { line: 288, column: 64 } },
                    { start: { line: 288, column: 68 }, end: { line: 288, column: 75 } }
                  ],
                  line: 288
                },
                '13': {
                  loc: { start: { line: 290, column: 18 }, end: { line: 290, column: 48 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 290, column: 35 }, end: { line: 290, column: 41 } },
                    { start: { line: 290, column: 44 }, end: { line: 290, column: 48 } }
                  ],
                  line: 290
                },
                '14': {
                  loc: { start: { line: 291, column: 2 }, end: { line: 296, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 291, column: 2 }, end: { line: 296, column: 3 } },
                    { start: { line: 291, column: 2 }, end: { line: 296, column: 3 } }
                  ],
                  line: 291
                },
                '15': {
                  loc: { start: { line: 293, column: 4 }, end: { line: 295, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 293, column: 4 }, end: { line: 295, column: 5 } },
                    { start: { line: 293, column: 4 }, end: { line: 295, column: 5 } }
                  ],
                  line: 293
                },
                '16': {
                  loc: { start: { line: 381, column: 9 }, end: { line: 381, column: 38 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 381, column: 9 }, end: { line: 381, column: 29 } },
                    { start: { line: 381, column: 33 }, end: { line: 381, column: 38 } }
                  ],
                  line: 381
                },
                '17': {
                  loc: { start: { line: 395, column: 4 }, end: { line: 397, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 395, column: 4 }, end: { line: 397, column: 5 } },
                    { start: { line: 395, column: 4 }, end: { line: 397, column: 5 } }
                  ],
                  line: 395
                },
                '18': {
                  loc: { start: { line: 395, column: 8 }, end: { line: 395, column: 74 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 395, column: 8 }, end: { line: 395, column: 42 } },
                    { start: { line: 395, column: 46 }, end: { line: 395, column: 74 } }
                  ],
                  line: 395
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0
              },
              f: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0 },
              b: {
                '0': [0, 0],
                '1': [0, 0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: 'ea6caa03e414340dfbe172dd4ac7f7237dcd5226'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_1ca11ygnea.s[0]++;

          /**
           * The boolean system variable <a href="#/p5/keyIsPressed">keyIsPressed</a> is true if any key is pressed
           * and false if no keys are pressed.
           *
           * @property {Boolean} keyIsPressed
           * @readOnly
           * @example
           * <div>
           * <code>
           * function draw() {
           *   if (keyIsPressed === true) {
           *     fill(0);
           *   } else {
           *     fill(255);
           *   }
           *   rect(25, 25, 50, 50);
           * }
           * </code>
           * </div>
           *
           * @alt
           * 50x50 white rect that turns black on keypress.
           */
          _main.default.prototype.isKeyPressed = false;
          cov_1ca11ygnea.s[1]++;
          _main.default.prototype.keyIsPressed = false; // khan

          /**
           * The system variable key always contains the value of the most recent
           * key on the keyboard that was typed. To get the proper capitalization, it
           * is best to use it within <a href="#/p5/keyTyped">keyTyped()</a>. For non-ASCII keys, use the <a href="#/p5/keyCode">keyCode</a>
           * variable.
           *
           * @property {String} key
           * @readOnly
           * @example
           * <div><code>
           * // Click any key to display it!
           * // (Not Guaranteed to be Case Sensitive)
           * function setup() {
           *   fill(245, 123, 158);
           *   textSize(50);
           * }
           *
           * function draw() {
           *   background(200);
           *   text(key, 33, 65); // Display last key pressed.
           * }
           * </code></div>
           *
           * @alt
           * canvas displays any key value that is pressed in pink font.
           */ cov_1ca11ygnea.s[2]++;
          _main.default.prototype.key = '';

          /**
           * The variable keyCode is used to detect special keys such as BACKSPACE,
           * DELETE, ENTER, RETURN, TAB, ESCAPE, SHIFT, CONTROL, OPTION, ALT, UP_ARROW,
           * DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW.
           * You can also check for custom keys by looking up the keyCode of any key
           * on a site like this: <a href="http://keycode.info/">keycode.info</a>.
           *
           * @property {Integer} keyCode
           * @readOnly
           * @example
           * <div><code>
           * let fillVal = 126;
           * function draw() {
           *   fill(fillVal);
           *   rect(25, 25, 50, 50);
           * }
           *
           * function keyPressed() {
           *   if (keyCode === UP_ARROW) {
           *     fillVal = 255;
           *   } else if (keyCode === DOWN_ARROW) {
           *     fillVal = 0;
           *   }
           * }
           * </code></div>
           * <div><code>
           * function draw() {}
           * function keyPressed() {
           *   background('yellow');
           *   text(`${key} ${keyCode}`, 10, 40);
           *   print(key, ' ', keyCode);
           * }
           * </code></div>
           * @alt
           * Grey rect center. turns white when up arrow pressed and black when down
           * Display key pressed and its keyCode in a yellow box
           */ cov_1ca11ygnea.s[3]++;
          _main.default.prototype.keyCode = 0;

          /**
           * The <a href="#/p5/keyPressed">keyPressed()</a> function is called once every time a key is pressed. The
           * keyCode for the key that was pressed is stored in the <a href="#/p5/keyCode">keyCode</a> variable.
           *
           * For non-ASCII keys, use the keyCode variable. You can check if the keyCode
           * equals BACKSPACE, DELETE, ENTER, RETURN, TAB, ESCAPE, SHIFT, CONTROL,
           * OPTION, ALT, UP_ARROW, DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW.
           *
           * For ASCII keys, the key that was pressed is stored in the key variable. However, it
           * does not distinguish between uppercase and lowercase. For this reason, it
           * is recommended to use <a href="#/p5/keyTyped">keyTyped()</a> to read the key variable, in which the
           * case of the variable will be distinguished.
           *
           * Because of how operating systems handle key repeats, holding down a key
           * may cause multiple calls to <a href="#/p5/keyTyped">keyTyped()</a> (and <a href="#/p5/keyReleased">keyReleased()</a> as well). The
           * rate of repeat is set by the operating system and how each computer is
           * configured.<br><br>
           * Browsers may have different default
           * behaviors attached to various key events. To prevent any default
           * behavior for this event, add "return false" to the end of the method.
           *
           * @method keyPressed
           * @param  {Object} [event] optional KeyboardEvent callback argument.
           * @example
           * <div>
           * <code>
           * let value = 0;
           * function draw() {
           *   fill(value);
           *   rect(25, 25, 50, 50);
           * }
           * function keyPressed() {
           *   if (value === 0) {
           *     value = 255;
           *   } else {
           *     value = 0;
           *   }
           * }
           * </code>
           * </div>
           * <div>
           * <code>
           * let value = 0;
           * function draw() {
           *   fill(value);
           *   rect(25, 25, 50, 50);
           * }
           * function keyPressed() {
           *   if (keyCode === LEFT_ARROW) {
           *     value = 255;
           *   } else if (keyCode === RIGHT_ARROW) {
           *     value = 0;
           *   }
           * }
           * </code>
           * </div>
           * <div class="norender">
           * <code>
           * function keyPressed() {
           *   // Do something
           *   return false; // prevent any default behaviour
           * }
           * </code>
           * </div>
           *
           * @alt
           * black rect center. turns white when key pressed and black when released
           * black rect center. turns white when left arrow pressed and black when right.
           */ cov_1ca11ygnea.s[4]++;
          _main.default.prototype._onkeydown = function(e) {
            cov_1ca11ygnea.f[0]++;
            cov_1ca11ygnea.s[5]++;
            if (this._downKeys[e.which]) {
              cov_1ca11ygnea.b[0][0]++;
              cov_1ca11ygnea.s[6]++;
              // prevent multiple firings
              return;
            } else {
              cov_1ca11ygnea.b[0][1]++;
            }
            cov_1ca11ygnea.s[7]++;
            this._setProperty('isKeyPressed', true);
            cov_1ca11ygnea.s[8]++;
            this._setProperty('keyIsPressed', true);
            cov_1ca11ygnea.s[9]++;
            this._setProperty('keyCode', e.which);
            cov_1ca11ygnea.s[10]++;
            this._downKeys[e.which] = true;
            cov_1ca11ygnea.s[11]++;
            this._setProperty(
              'key',
              (cov_1ca11ygnea.b[1][0]++, e.key) ||
                (cov_1ca11ygnea.b[1][1]++, String.fromCharCode(e.which)) ||
                (cov_1ca11ygnea.b[1][2]++, e.which)
            );
            var context = (cov_1ca11ygnea.s[12]++,
            this._isGlobal
              ? (cov_1ca11ygnea.b[2][0]++, window)
              : (cov_1ca11ygnea.b[2][1]++, this));
            cov_1ca11ygnea.s[13]++;
            if (
              (cov_1ca11ygnea.b[4][0]++, typeof context.keyPressed === 'function') &&
              (cov_1ca11ygnea.b[4][1]++, !e.charCode)
            ) {
              cov_1ca11ygnea.b[3][0]++;
              var executeDefault = (cov_1ca11ygnea.s[14]++, context.keyPressed(e));
              cov_1ca11ygnea.s[15]++;
              if (executeDefault === false) {
                cov_1ca11ygnea.b[5][0]++;
                cov_1ca11ygnea.s[16]++;
                e.preventDefault();
              } else {
                cov_1ca11ygnea.b[5][1]++;
              }
            } else {
              cov_1ca11ygnea.b[3][1]++;
            }
          };
          /**
           * The <a href="#/p5/keyReleased">keyReleased()</a> function is called once every time a key is released.
           * See <a href="#/p5/key">key</a> and <a href="#/p5/keyCode">keyCode</a> for more information.<br><br>
           * Browsers may have different default
           * behaviors attached to various key events. To prevent any default
           * behavior for this event, add "return false" to the end of the method.
           *
           * @method keyReleased
           * @param  {Object} [event] optional KeyboardEvent callback argument.
           * @example
           * <div>
           * <code>
           * let value = 0;
           * function draw() {
           *   fill(value);
           *   rect(25, 25, 50, 50);
           * }
           * function keyReleased() {
           *   if (value === 0) {
           *     value = 255;
           *   } else {
           *     value = 0;
           *   }
           *   return false; // prevent any default behavior
           * }
           * </code>
           * </div>
           *
           * @alt
           * black rect center. turns white when key pressed and black when pressed again
           */ cov_1ca11ygnea.s[17]++;
          _main.default.prototype._onkeyup = function(e) {
            cov_1ca11ygnea.f[1]++;
            cov_1ca11ygnea.s[18]++;
            this._downKeys[e.which] = false;
            cov_1ca11ygnea.s[19]++;

            if (!this._areDownKeys()) {
              cov_1ca11ygnea.b[6][0]++;
              cov_1ca11ygnea.s[20]++;
              this._setProperty('isKeyPressed', false);
              cov_1ca11ygnea.s[21]++;
              this._setProperty('keyIsPressed', false);
            } else {
              cov_1ca11ygnea.b[6][1]++;
            }
            cov_1ca11ygnea.s[22]++;

            this._setProperty('_lastKeyCodeTyped', null);
            cov_1ca11ygnea.s[23]++;

            this._setProperty(
              'key',
              (cov_1ca11ygnea.b[7][0]++, e.key) ||
                (cov_1ca11ygnea.b[7][1]++, String.fromCharCode(e.which)) ||
                (cov_1ca11ygnea.b[7][2]++, e.which)
            );
            cov_1ca11ygnea.s[24]++;
            this._setProperty('keyCode', e.which);

            var context = (cov_1ca11ygnea.s[25]++,
            this._isGlobal
              ? (cov_1ca11ygnea.b[8][0]++, window)
              : (cov_1ca11ygnea.b[8][1]++, this));
            cov_1ca11ygnea.s[26]++;
            if (typeof context.keyReleased === 'function') {
              cov_1ca11ygnea.b[9][0]++;
              var executeDefault = (cov_1ca11ygnea.s[27]++, context.keyReleased(e));
              cov_1ca11ygnea.s[28]++;
              if (executeDefault === false) {
                cov_1ca11ygnea.b[10][0]++;
                cov_1ca11ygnea.s[29]++;
                e.preventDefault();
              } else {
                cov_1ca11ygnea.b[10][1]++;
              }
            } else {
              cov_1ca11ygnea.b[9][1]++;
            }
          };

          /**
           * The <a href="#/p5/keyTyped">keyTyped()</a> function is called once every time a key is pressed, but
           * action keys such as Backspace, Delete, Ctrl, Shift, and Alt are ignored. If you are trying to detect
           * a keyCode for one of these keys, use the <a href="#/p5/keyPressed">keyPressed()</a> function instead.
           * The most recent key typed will be stored in the key variable.
           *
           * Because of how operating systems handle key repeats, holding down a key
           * will cause multiple calls to <a href="#/p5/keyTyped">keyTyped()</a> (and <a href="#/p5/keyReleased">keyReleased()</a> as well). The
           * rate of repeat is set by the operating system and how each computer is
           * configured.<br><br>
           * Browsers may have different default behaviors attached to various key
           * events. To prevent any default behavior for this event, add "return false"
           * to the end of the method.
           *
           * @method keyTyped
           * @param  {Object} [event] optional KeyboardEvent callback argument.
           * @example
           * <div>
           * <code>
           * let value = 0;
           * function draw() {
           *   fill(value);
           *   rect(25, 25, 50, 50);
           * }
           * function keyTyped() {
           *   if (key === 'a') {
           *     value = 255;
           *   } else if (key === 'b') {
           *     value = 0;
           *   }
           *   // uncomment to prevent any default behavior
           *   // return false;
           * }
           * </code>
           * </div>
           *
           * @alt
           * black rect center. turns white when 'a' key typed and black when 'b' pressed
           */ cov_1ca11ygnea.s[30]++;
          _main.default.prototype._onkeypress = function(e) {
            cov_1ca11ygnea.f[2]++;
            cov_1ca11ygnea.s[31]++;
            if (e.which === this._lastKeyCodeTyped) {
              cov_1ca11ygnea.b[11][0]++;
              cov_1ca11ygnea.s[32]++;
              // prevent multiple firings
              return;
            } else {
              cov_1ca11ygnea.b[11][1]++;
            }
            cov_1ca11ygnea.s[33]++;
            this._setProperty('_lastKeyCodeTyped', e.which); // track last keyCode
            cov_1ca11ygnea.s[34]++;
            this._setProperty(
              'key',
              (cov_1ca11ygnea.b[12][0]++, e.key) ||
                (cov_1ca11ygnea.b[12][1]++, String.fromCharCode(e.which)) ||
                (cov_1ca11ygnea.b[12][2]++, e.which)
            );

            var context = (cov_1ca11ygnea.s[35]++,
            this._isGlobal
              ? (cov_1ca11ygnea.b[13][0]++, window)
              : (cov_1ca11ygnea.b[13][1]++, this));
            cov_1ca11ygnea.s[36]++;
            if (typeof context.keyTyped === 'function') {
              cov_1ca11ygnea.b[14][0]++;
              var executeDefault = (cov_1ca11ygnea.s[37]++, context.keyTyped(e));
              cov_1ca11ygnea.s[38]++;
              if (executeDefault === false) {
                cov_1ca11ygnea.b[15][0]++;
                cov_1ca11ygnea.s[39]++;
                e.preventDefault();
              } else {
                cov_1ca11ygnea.b[15][1]++;
              }
            } else {
              cov_1ca11ygnea.b[14][1]++;
            }
          };
          /**
           * The onblur function is called when the user is no longer focused
           * on the p5 element. Because the keyup events will not fire if the user is
           * not focused on the element we must assume all keys currently down have
           * been released.
           */ cov_1ca11ygnea.s[40]++;
          _main.default.prototype._onblur = function(e) {
            cov_1ca11ygnea.f[3]++;
            cov_1ca11ygnea.s[41]++;
            this._downKeys = {};
          };

          /**
           * The <a href="#/p5/keyIsDown">keyIsDown()</a> function checks if the key is currently down, i.e. pressed.
           * It can be used if you have an object that moves, and you want several keys
           * to be able to affect its behaviour simultaneously, such as moving a
           * sprite diagonally. You can put in any number representing the keyCode of
           * the key, or use any of the variable <a href="#/p5/keyCode">keyCode</a> names listed
           * <a href="http://p5js.org/reference/#p5/keyCode">here</a>.
           *
           * @method keyIsDown
           * @param {Number}          code The key to check for.
           * @return {Boolean}        whether key is down or not
           * @example
           * <div><code>
           * let x = 100;
           * let y = 100;
           *
           * function setup() {
           *   createCanvas(512, 512);
           *   fill(255, 0, 0);
           * }
           *
           * function draw() {
           *   if (keyIsDown(LEFT_ARROW)) {
           *     x -= 5;
           *   }
           *
           *   if (keyIsDown(RIGHT_ARROW)) {
           *     x += 5;
           *   }
           *
           *   if (keyIsDown(UP_ARROW)) {
           *     y -= 5;
           *   }
           *
           *   if (keyIsDown(DOWN_ARROW)) {
           *     y += 5;
           *   }
           *
           *   clear();
           *   ellipse(x, y, 50, 50);
           * }
           * </code></div>
           *
           * <div><code>
           * let diameter = 50;
           *
           * function setup() {
           *   createCanvas(512, 512);
           * }
           *
           * function draw() {
           *   // 107 and 187 are keyCodes for "+"
           *   if (keyIsDown(107) || keyIsDown(187)) {
           *     diameter += 1;
           *   }
           *
           *   // 109 and 189 are keyCodes for "-"
           *   if (keyIsDown(109) || keyIsDown(189)) {
           *     diameter -= 1;
           *   }
           *
           *   clear();
           *   fill(255, 0, 0);
           *   ellipse(50, 50, diameter, diameter);
           * }
           * </code></div>
           *
           * @alt
           * 50x50 red ellipse moves left, right, up and down with arrow presses.
           * 50x50 red ellipse gets bigger or smaller when + or - are pressed.
           */ cov_1ca11ygnea.s[42]++;
          _main.default.prototype.keyIsDown = function(code) {
            cov_1ca11ygnea.f[4]++;
            cov_1ca11ygnea.s[43]++;
            _main.default._validateParameters('keyIsDown', arguments);
            cov_1ca11ygnea.s[44]++;
            return (
              (cov_1ca11ygnea.b[16][0]++, this._downKeys[code]) ||
              (cov_1ca11ygnea.b[16][1]++, false)
            );
          };

          /**
    * The _areDownKeys function returns a boolean true if any keys pressed
    * and a false if no keys are currently pressed.
   
    * Helps avoid instances where multiple keys are pressed simultaneously and
    * releasing a single key will then switch the
    * keyIsPressed property to true.
    * @private
   **/ cov_1ca11ygnea
            .s[45]++;
          _main.default.prototype._areDownKeys = function() {
            cov_1ca11ygnea.f[5]++;
            cov_1ca11ygnea.s[46]++;
            for (var key in this._downKeys) {
              cov_1ca11ygnea.s[47]++;
              if (
                (cov_1ca11ygnea.b[18][0]++, this._downKeys.hasOwnProperty(key)) &&
                (cov_1ca11ygnea.b[18][1]++, this._downKeys[key] === true)
              ) {
                cov_1ca11ygnea.b[17][0]++;
                cov_1ca11ygnea.s[48]++;
                return true;
              } else {
                cov_1ca11ygnea.b[17][1]++;
              }
            }
            cov_1ca11ygnea.s[49]++;
            return false;
          };
          var _default = _main.default;
          exports.default = _default;
        },
        { '../core/main': 283 }
      ],
      302: [
        function(_dereq_, module, exports) {
          'use strict';
          function _typeof(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof = function _typeof(obj) {
                return typeof obj;
              };
            } else {
              _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof(obj);
          }
          var cov_zu32xmp7i = (function() {
            var path = '/Users/outofambit/src/p5.js/src/events/mouse.js';
            var hash = '125b33389316da03adccab1093521b3d2b841daa';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/events/mouse.js',
              statementMap: {
                '0': { start: { line: 41, column: 0 }, end: { line: 41, column: 24 } },
                '1': { start: { line: 71, column: 0 }, end: { line: 71, column: 24 } },
                '2': { start: { line: 78, column: 0 }, end: { line: 78, column: 41 } },
                '3': { start: { line: 104, column: 0 }, end: { line: 104, column: 24 } },
                '4': { start: { line: 130, column: 0 }, end: { line: 130, column: 24 } },
                '5': { start: { line: 162, column: 0 }, end: { line: 162, column: 25 } },
                '6': { start: { line: 193, column: 0 }, end: { line: 193, column: 25 } },
                '7': { start: { line: 231, column: 0 }, end: { line: 231, column: 27 } },
                '8': { start: { line: 269, column: 0 }, end: { line: 269, column: 27 } },
                '9': { start: { line: 309, column: 0 }, end: { line: 309, column: 28 } },
                '10': { start: { line: 349, column: 0 }, end: { line: 349, column: 28 } },
                '11': { start: { line: 387, column: 0 }, end: { line: 387, column: 29 } },
                '12': { start: { line: 417, column: 0 }, end: { line: 417, column: 36 } },
                '13': { start: { line: 419, column: 0 }, end: { line: 439, column: 2 } },
                '14': { start: { line: 420, column: 2 }, end: { line: 433, column: 3 } },
                '15': { start: { line: 421, column: 21 }, end: { line: 426, column: 5 } },
                '16': { start: { line: 427, column: 4 }, end: { line: 427, column: 45 } },
                '17': { start: { line: 428, column: 4 }, end: { line: 428, column: 45 } },
                '18': { start: { line: 429, column: 4 }, end: { line: 429, column: 44 } },
                '19': { start: { line: 430, column: 4 }, end: { line: 430, column: 44 } },
                '20': { start: { line: 431, column: 4 }, end: { line: 431, column: 50 } },
                '21': { start: { line: 432, column: 4 }, end: { line: 432, column: 50 } },
                '22': { start: { line: 434, column: 2 }, end: { line: 438, column: 3 } },
                '23': { start: { line: 436, column: 4 }, end: { line: 436, column: 30 } },
                '24': { start: { line: 437, column: 4 }, end: { line: 437, column: 51 } },
                '25': { start: { line: 441, column: 0 }, end: { line: 448, column: 2 } },
                '26': { start: { line: 442, column: 2 }, end: { line: 442, column: 44 } },
                '27': { start: { line: 443, column: 2 }, end: { line: 443, column: 44 } },
                '28': { start: { line: 444, column: 2 }, end: { line: 444, column: 50 } },
                '29': { start: { line: 445, column: 2 }, end: { line: 445, column: 50 } },
                '30': { start: { line: 447, column: 2 }, end: { line: 447, column: 66 } },
                '31': { start: { line: 451, column: 2 }, end: { line: 458, column: 3 } },
                '32': { start: { line: 453, column: 4 }, end: { line: 457, column: 5 } },
                '33': { start: { line: 454, column: 6 }, end: { line: 454, column: 27 } },
                '34': { start: { line: 455, column: 11 }, end: { line: 457, column: 5 } },
                '35': { start: { line: 456, column: 6 }, end: { line: 456, column: 34 } },
                '36': { start: { line: 459, column: 15 }, end: { line: 459, column: 45 } },
                '37': { start: { line: 460, column: 13 }, end: { line: 460, column: 40 } },
                '38': { start: { line: 461, column: 13 }, end: { line: 461, column: 41 } },
                '39': { start: { line: 462, column: 2 }, end: { line: 468, column: 4 } },
                '40': { start: { line: 471, column: 0 }, end: { line: 479, column: 2 } },
                '41': { start: { line: 472, column: 2 }, end: { line: 478, column: 3 } },
                '42': { start: { line: 473, column: 4 }, end: { line: 473, column: 55 } },
                '43': { start: { line: 474, column: 9 }, end: { line: 478, column: 3 } },
                '44': { start: { line: 475, column: 4 }, end: { line: 475, column: 54 } },
                '45': { start: { line: 477, column: 4 }, end: { line: 477, column: 53 } },
                '46': { start: { line: 589, column: 0 }, end: { line: 613, column: 2 } },
                '47': { start: { line: 590, column: 18 }, end: { line: 590, column: 48 } },
                '48': { start: { line: 592, column: 2 }, end: { line: 592, column: 33 } },
                '49': { start: { line: 593, column: 2 }, end: { line: 612, column: 3 } },
                '50': { start: { line: 594, column: 4 }, end: { line: 599, column: 5 } },
                '51': { start: { line: 595, column: 6 }, end: { line: 595, column: 45 } },
                '52': { start: { line: 596, column: 6 }, end: { line: 598, column: 7 } },
                '53': { start: { line: 597, column: 8 }, end: { line: 597, column: 27 } },
                '54': { start: { line: 601, column: 4 }, end: { line: 611, column: 5 } },
                '55': { start: { line: 602, column: 6 }, end: { line: 602, column: 47 } },
                '56': { start: { line: 603, column: 6 }, end: { line: 605, column: 7 } },
                '57': { start: { line: 604, column: 8 }, end: { line: 604, column: 27 } },
                '58': { start: { line: 606, column: 11 }, end: { line: 611, column: 5 } },
                '59': { start: { line: 607, column: 6 }, end: { line: 607, column: 45 } },
                '60': { start: { line: 608, column: 6 }, end: { line: 610, column: 7 } },
                '61': { start: { line: 609, column: 8 }, end: { line: 609, column: 27 } },
                '62': { start: { line: 672, column: 0 }, end: { line: 694, column: 2 } },
                '63': { start: { line: 673, column: 18 }, end: { line: 673, column: 48 } },
                '64': { start: { line: 675, column: 2 }, end: { line: 675, column: 44 } },
                '65': { start: { line: 676, column: 2 }, end: { line: 676, column: 26 } },
                '66': { start: { line: 677, column: 2 }, end: { line: 677, column: 33 } },
                '67': { start: { line: 679, column: 2 }, end: { line: 693, column: 3 } },
                '68': { start: { line: 680, column: 4 }, end: { line: 680, column: 45 } },
                '69': { start: { line: 681, column: 4 }, end: { line: 683, column: 5 } },
                '70': { start: { line: 682, column: 6 }, end: { line: 682, column: 25 } },
                '71': { start: { line: 685, column: 9 }, end: { line: 693, column: 3 } },
                '72': { start: { line: 689, column: 4 }, end: { line: 689, column: 45 } },
                '73': { start: { line: 690, column: 4 }, end: { line: 692, column: 5 } },
                '74': { start: { line: 691, column: 6 }, end: { line: 691, column: 25 } },
                '75': { start: { line: 752, column: 0 }, end: { line: 767, column: 2 } },
                '76': { start: { line: 753, column: 18 }, end: { line: 753, column: 48 } },
                '77': { start: { line: 755, column: 2 }, end: { line: 755, column: 45 } },
                '78': { start: { line: 756, column: 2 }, end: { line: 766, column: 3 } },
                '79': { start: { line: 757, column: 4 }, end: { line: 757, column: 46 } },
                '80': { start: { line: 758, column: 4 }, end: { line: 760, column: 5 } },
                '81': { start: { line: 759, column: 6 }, end: { line: 759, column: 25 } },
                '82': { start: { line: 761, column: 9 }, end: { line: 766, column: 3 } },
                '83': { start: { line: 762, column: 4 }, end: { line: 762, column: 43 } },
                '84': { start: { line: 763, column: 4 }, end: { line: 765, column: 5 } },
                '85': { start: { line: 764, column: 6 }, end: { line: 764, column: 25 } },
                '86': { start: { line: 769, column: 0 }, end: { line: 769, column: 50 } },
                '87': { start: { line: 770, column: 0 }, end: { line: 770, column: 53 } },
                '88': { start: { line: 831, column: 0 }, end: { line: 839, column: 2 } },
                '89': { start: { line: 832, column: 18 }, end: { line: 832, column: 48 } },
                '90': { start: { line: 833, column: 2 }, end: { line: 838, column: 3 } },
                '91': { start: { line: 834, column: 27 }, end: { line: 834, column: 50 } },
                '92': { start: { line: 835, column: 4 }, end: { line: 837, column: 5 } },
                '93': { start: { line: 836, column: 6 }, end: { line: 836, column: 25 } },
                '94': { start: { line: 900, column: 0 }, end: { line: 908, column: 2 } },
                '95': { start: { line: 901, column: 18 }, end: { line: 901, column: 48 } },
                '96': { start: { line: 902, column: 2 }, end: { line: 907, column: 3 } },
                '97': { start: { line: 903, column: 27 }, end: { line: 903, column: 51 } },
                '98': { start: { line: 904, column: 4 }, end: { line: 906, column: 5 } },
                '99': { start: { line: 905, column: 6 }, end: { line: 905, column: 25 } },
                '100': { start: { line: 916, column: 0 }, end: { line: 916, column: 35 } },
                '101': { start: { line: 924, column: 0 }, end: { line: 924, column: 36 } },
                '102': { start: { line: 967, column: 0 }, end: { line: 977, column: 2 } },
                '103': { start: { line: 968, column: 18 }, end: { line: 968, column: 48 } },
                '104': { start: { line: 969, column: 2 }, end: { line: 969, column: 51 } },
                '105': { start: { line: 970, column: 2 }, end: { line: 976, column: 3 } },
                '106': { start: { line: 971, column: 4 }, end: { line: 971, column: 23 } },
                '107': { start: { line: 972, column: 27 }, end: { line: 972, column: 48 } },
                '108': { start: { line: 973, column: 4 }, end: { line: 975, column: 5 } },
                '109': { start: { line: 974, column: 6 }, end: { line: 974, column: 25 } },
                '110': { start: { line: 1012, column: 0 }, end: { line: 1023, column: 2 } },
                '111': {
                  start: { line: 1014, column: 17 },
                  end: { line: 1014, column: 37 }
                },
                '112': {
                  start: { line: 1015, column: 2 },
                  end: { line: 1016, column: 62 }
                },
                '113': { start: { line: 1017, column: 2 }, end: { line: 1020, column: 3 } },
                '114': {
                  start: { line: 1018, column: 4 },
                  end: { line: 1018, column: 73 }
                },
                '115': {
                  start: { line: 1019, column: 4 },
                  end: { line: 1019, column: 17 }
                },
                '116': {
                  start: { line: 1021, column: 2 },
                  end: { line: 1021, column: 30 }
                },
                '117': {
                  start: { line: 1022, column: 2 },
                  end: { line: 1022, column: 14 }
                },
                '118': { start: { line: 1055, column: 0 }, end: { line: 1057, column: 2 } },
                '119': { start: { line: 1056, column: 2 }, end: { line: 1056, column: 29 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: {
                    start: { line: 419, column: 38 },
                    end: { line: 419, column: 39 }
                  },
                  loc: { start: { line: 419, column: 50 }, end: { line: 439, column: 1 } },
                  line: 419
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: {
                    start: { line: 441, column: 34 },
                    end: { line: 441, column: 35 }
                  },
                  loc: { start: { line: 441, column: 45 }, end: { line: 448, column: 1 } },
                  line: 441
                },
                '2': {
                  name: 'getMousePos',
                  decl: { start: { line: 450, column: 9 }, end: { line: 450, column: 20 } },
                  loc: { start: { line: 450, column: 40 }, end: { line: 469, column: 1 } },
                  line: 450
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 471, column: 31 },
                    end: { line: 471, column: 32 }
                  },
                  loc: { start: { line: 471, column: 43 }, end: { line: 479, column: 1 } },
                  line: 471
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 589, column: 28 },
                    end: { line: 589, column: 29 }
                  },
                  loc: { start: { line: 589, column: 40 }, end: { line: 613, column: 1 } },
                  line: 589
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 672, column: 28 },
                    end: { line: 672, column: 29 }
                  },
                  loc: { start: { line: 672, column: 40 }, end: { line: 694, column: 1 } },
                  line: 672
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 752, column: 26 },
                    end: { line: 752, column: 27 }
                  },
                  loc: { start: { line: 752, column: 38 }, end: { line: 767, column: 1 } },
                  line: 752
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 831, column: 24 },
                    end: { line: 831, column: 25 }
                  },
                  loc: { start: { line: 831, column: 36 }, end: { line: 839, column: 1 } },
                  line: 831
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 900, column: 27 },
                    end: { line: 900, column: 28 }
                  },
                  loc: { start: { line: 900, column: 39 }, end: { line: 908, column: 1 } },
                  line: 900
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 967, column: 24 },
                    end: { line: 967, column: 25 }
                  },
                  loc: { start: { line: 967, column: 36 }, end: { line: 977, column: 1 } },
                  line: 967
                },
                '10': {
                  name: '(anonymous_10)',
                  decl: {
                    start: { line: 1012, column: 34 },
                    end: { line: 1012, column: 35 }
                  },
                  loc: {
                    start: { line: 1012, column: 45 },
                    end: { line: 1023, column: 1 }
                  },
                  line: 1012
                },
                '11': {
                  name: '(anonymous_11)',
                  decl: {
                    start: { line: 1055, column: 31 },
                    end: { line: 1055, column: 32 }
                  },
                  loc: {
                    start: { line: 1055, column: 42 },
                    end: { line: 1057, column: 1 }
                  },
                  line: 1055
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 420, column: 2 }, end: { line: 433, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 420, column: 2 }, end: { line: 433, column: 3 } },
                    { start: { line: 420, column: 2 }, end: { line: 433, column: 3 } }
                  ],
                  line: 420
                },
                '1': {
                  loc: { start: { line: 420, column: 6 }, end: { line: 420, column: 71 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 420, column: 6 }, end: { line: 420, column: 31 } },
                    { start: { line: 420, column: 36 }, end: { line: 420, column: 46 } },
                    { start: { line: 420, column: 50 }, end: { line: 420, column: 70 } }
                  ],
                  line: 420
                },
                '2': {
                  loc: { start: { line: 434, column: 2 }, end: { line: 438, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 434, column: 2 }, end: { line: 438, column: 3 } },
                    { start: { line: 434, column: 2 }, end: { line: 438, column: 3 } }
                  ],
                  line: 434
                },
                '3': {
                  loc: { start: { line: 451, column: 2 }, end: { line: 458, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 451, column: 2 }, end: { line: 458, column: 3 } },
                    { start: { line: 451, column: 2 }, end: { line: 458, column: 3 } }
                  ],
                  line: 451
                },
                '4': {
                  loc: { start: { line: 451, column: 6 }, end: { line: 451, column: 25 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 451, column: 6 }, end: { line: 451, column: 9 } },
                    { start: { line: 451, column: 13 }, end: { line: 451, column: 25 } }
                  ],
                  line: 451
                },
                '5': {
                  loc: { start: { line: 453, column: 4 }, end: { line: 457, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 453, column: 4 }, end: { line: 457, column: 5 } },
                    { start: { line: 453, column: 4 }, end: { line: 457, column: 5 } }
                  ],
                  line: 453
                },
                '6': {
                  loc: { start: { line: 455, column: 11 }, end: { line: 457, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 455, column: 11 }, end: { line: 457, column: 5 } },
                    { start: { line: 455, column: 11 }, end: { line: 457, column: 5 } }
                  ],
                  line: 455
                },
                '7': {
                  loc: { start: { line: 460, column: 13 }, end: { line: 460, column: 40 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 460, column: 13 }, end: { line: 460, column: 35 } },
                    { start: { line: 460, column: 39 }, end: { line: 460, column: 40 } }
                  ],
                  line: 460
                },
                '8': {
                  loc: { start: { line: 461, column: 13 }, end: { line: 461, column: 41 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 461, column: 13 }, end: { line: 461, column: 36 } },
                    { start: { line: 461, column: 40 }, end: { line: 461, column: 41 } }
                  ],
                  line: 461
                },
                '9': {
                  loc: { start: { line: 472, column: 2 }, end: { line: 478, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 472, column: 2 }, end: { line: 478, column: 3 } },
                    { start: { line: 472, column: 2 }, end: { line: 478, column: 3 } }
                  ],
                  line: 472
                },
                '10': {
                  loc: { start: { line: 474, column: 9 }, end: { line: 478, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 474, column: 9 }, end: { line: 478, column: 3 } },
                    { start: { line: 474, column: 9 }, end: { line: 478, column: 3 } }
                  ],
                  line: 474
                },
                '11': {
                  loc: { start: { line: 590, column: 18 }, end: { line: 590, column: 48 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 590, column: 35 }, end: { line: 590, column: 41 } },
                    { start: { line: 590, column: 44 }, end: { line: 590, column: 48 } }
                  ],
                  line: 590
                },
                '12': {
                  loc: { start: { line: 593, column: 2 }, end: { line: 612, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 593, column: 2 }, end: { line: 612, column: 3 } },
                    { start: { line: 593, column: 2 }, end: { line: 612, column: 3 } }
                  ],
                  line: 593
                },
                '13': {
                  loc: { start: { line: 594, column: 4 }, end: { line: 599, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 594, column: 4 }, end: { line: 599, column: 5 } },
                    { start: { line: 594, column: 4 }, end: { line: 599, column: 5 } }
                  ],
                  line: 594
                },
                '14': {
                  loc: { start: { line: 596, column: 6 }, end: { line: 598, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 596, column: 6 }, end: { line: 598, column: 7 } },
                    { start: { line: 596, column: 6 }, end: { line: 598, column: 7 } }
                  ],
                  line: 596
                },
                '15': {
                  loc: { start: { line: 601, column: 4 }, end: { line: 611, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 601, column: 4 }, end: { line: 611, column: 5 } },
                    { start: { line: 601, column: 4 }, end: { line: 611, column: 5 } }
                  ],
                  line: 601
                },
                '16': {
                  loc: { start: { line: 603, column: 6 }, end: { line: 605, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 603, column: 6 }, end: { line: 605, column: 7 } },
                    { start: { line: 603, column: 6 }, end: { line: 605, column: 7 } }
                  ],
                  line: 603
                },
                '17': {
                  loc: { start: { line: 606, column: 11 }, end: { line: 611, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 606, column: 11 }, end: { line: 611, column: 5 } },
                    { start: { line: 606, column: 11 }, end: { line: 611, column: 5 } }
                  ],
                  line: 606
                },
                '18': {
                  loc: { start: { line: 608, column: 6 }, end: { line: 610, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 608, column: 6 }, end: { line: 610, column: 7 } },
                    { start: { line: 608, column: 6 }, end: { line: 610, column: 7 } }
                  ],
                  line: 608
                },
                '19': {
                  loc: { start: { line: 673, column: 18 }, end: { line: 673, column: 48 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 673, column: 35 }, end: { line: 673, column: 41 } },
                    { start: { line: 673, column: 44 }, end: { line: 673, column: 48 } }
                  ],
                  line: 673
                },
                '20': {
                  loc: { start: { line: 679, column: 2 }, end: { line: 693, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 679, column: 2 }, end: { line: 693, column: 3 } },
                    { start: { line: 679, column: 2 }, end: { line: 693, column: 3 } }
                  ],
                  line: 679
                },
                '21': {
                  loc: { start: { line: 681, column: 4 }, end: { line: 683, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 681, column: 4 }, end: { line: 683, column: 5 } },
                    { start: { line: 681, column: 4 }, end: { line: 683, column: 5 } }
                  ],
                  line: 681
                },
                '22': {
                  loc: { start: { line: 685, column: 9 }, end: { line: 693, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 685, column: 9 }, end: { line: 693, column: 3 } },
                    { start: { line: 685, column: 9 }, end: { line: 693, column: 3 } }
                  ],
                  line: 685
                },
                '23': {
                  loc: { start: { line: 686, column: 4 }, end: { line: 687, column: 46 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 686, column: 4 }, end: { line: 686, column: 56 } },
                    { start: { line: 687, column: 4 }, end: { line: 687, column: 46 } }
                  ],
                  line: 686
                },
                '24': {
                  loc: { start: { line: 690, column: 4 }, end: { line: 692, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 690, column: 4 }, end: { line: 692, column: 5 } },
                    { start: { line: 690, column: 4 }, end: { line: 692, column: 5 } }
                  ],
                  line: 690
                },
                '25': {
                  loc: { start: { line: 753, column: 18 }, end: { line: 753, column: 48 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 753, column: 35 }, end: { line: 753, column: 41 } },
                    { start: { line: 753, column: 44 }, end: { line: 753, column: 48 } }
                  ],
                  line: 753
                },
                '26': {
                  loc: { start: { line: 756, column: 2 }, end: { line: 766, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 756, column: 2 }, end: { line: 766, column: 3 } },
                    { start: { line: 756, column: 2 }, end: { line: 766, column: 3 } }
                  ],
                  line: 756
                },
                '27': {
                  loc: { start: { line: 758, column: 4 }, end: { line: 760, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 758, column: 4 }, end: { line: 760, column: 5 } },
                    { start: { line: 758, column: 4 }, end: { line: 760, column: 5 } }
                  ],
                  line: 758
                },
                '28': {
                  loc: { start: { line: 761, column: 9 }, end: { line: 766, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 761, column: 9 }, end: { line: 766, column: 3 } },
                    { start: { line: 761, column: 9 }, end: { line: 766, column: 3 } }
                  ],
                  line: 761
                },
                '29': {
                  loc: { start: { line: 763, column: 4 }, end: { line: 765, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 763, column: 4 }, end: { line: 765, column: 5 } },
                    { start: { line: 763, column: 4 }, end: { line: 765, column: 5 } }
                  ],
                  line: 763
                },
                '30': {
                  loc: { start: { line: 832, column: 18 }, end: { line: 832, column: 48 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 832, column: 35 }, end: { line: 832, column: 41 } },
                    { start: { line: 832, column: 44 }, end: { line: 832, column: 48 } }
                  ],
                  line: 832
                },
                '31': {
                  loc: { start: { line: 833, column: 2 }, end: { line: 838, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 833, column: 2 }, end: { line: 838, column: 3 } },
                    { start: { line: 833, column: 2 }, end: { line: 838, column: 3 } }
                  ],
                  line: 833
                },
                '32': {
                  loc: { start: { line: 835, column: 4 }, end: { line: 837, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 835, column: 4 }, end: { line: 837, column: 5 } },
                    { start: { line: 835, column: 4 }, end: { line: 837, column: 5 } }
                  ],
                  line: 835
                },
                '33': {
                  loc: { start: { line: 901, column: 18 }, end: { line: 901, column: 48 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 901, column: 35 }, end: { line: 901, column: 41 } },
                    { start: { line: 901, column: 44 }, end: { line: 901, column: 48 } }
                  ],
                  line: 901
                },
                '34': {
                  loc: { start: { line: 902, column: 2 }, end: { line: 907, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 902, column: 2 }, end: { line: 907, column: 3 } },
                    { start: { line: 902, column: 2 }, end: { line: 907, column: 3 } }
                  ],
                  line: 902
                },
                '35': {
                  loc: { start: { line: 904, column: 4 }, end: { line: 906, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 904, column: 4 }, end: { line: 906, column: 5 } },
                    { start: { line: 904, column: 4 }, end: { line: 906, column: 5 } }
                  ],
                  line: 904
                },
                '36': {
                  loc: { start: { line: 968, column: 18 }, end: { line: 968, column: 48 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 968, column: 35 }, end: { line: 968, column: 41 } },
                    { start: { line: 968, column: 44 }, end: { line: 968, column: 48 } }
                  ],
                  line: 968
                },
                '37': {
                  loc: { start: { line: 970, column: 2 }, end: { line: 976, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 970, column: 2 }, end: { line: 976, column: 3 } },
                    { start: { line: 970, column: 2 }, end: { line: 976, column: 3 } }
                  ],
                  line: 970
                },
                '38': {
                  loc: { start: { line: 973, column: 4 }, end: { line: 975, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 973, column: 4 }, end: { line: 975, column: 5 } },
                    { start: { line: 973, column: 4 }, end: { line: 975, column: 5 } }
                  ],
                  line: 973
                },
                '39': {
                  loc: {
                    start: { line: 1016, column: 4 },
                    end: { line: 1016, column: 61 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1016, column: 4 }, end: { line: 1016, column: 29 } },
                    { start: { line: 1016, column: 33 }, end: { line: 1016, column: 61 } }
                  ],
                  line: 1016
                },
                '40': {
                  loc: { start: { line: 1017, column: 2 }, end: { line: 1020, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1017, column: 2 }, end: { line: 1020, column: 3 } },
                    { start: { line: 1017, column: 2 }, end: { line: 1020, column: 3 } }
                  ],
                  line: 1017
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0,
                '118': 0,
                '119': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0],
                '20': [0, 0],
                '21': [0, 0],
                '22': [0, 0],
                '23': [0, 0],
                '24': [0, 0],
                '25': [0, 0],
                '26': [0, 0],
                '27': [0, 0],
                '28': [0, 0],
                '29': [0, 0],
                '30': [0, 0],
                '31': [0, 0],
                '32': [0, 0],
                '33': [0, 0],
                '34': [0, 0],
                '35': [0, 0],
                '36': [0, 0],
                '37': [0, 0],
                '38': [0, 0],
                '39': [0, 0],
                '40': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '125b33389316da03adccab1093521b3d2b841daa'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.includes');
          _dereq_('core-js/modules/es.string.includes');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          var constants = _interopRequireWildcard(_dereq_('../core/constants'));
          function _getRequireWildcardCache() {
            if (typeof WeakMap !== 'function') return null;
            var cache = new WeakMap();
            _getRequireWildcardCache = function _getRequireWildcardCache() {
              return cache;
            };
            return cache;
          }
          function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
              return obj;
            }
            if (obj === null || (_typeof(obj) !== 'object' && typeof obj !== 'function')) {
              return { default: obj };
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
              return cache.get(obj);
            }
            var newObj = {};
            var hasPropertyDescriptor =
              Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
              if (Object.prototype.hasOwnProperty.call(obj, key)) {
                var desc = hasPropertyDescriptor
                  ? Object.getOwnPropertyDescriptor(obj, key)
                  : null;
                if (desc && (desc.get || desc.set)) {
                  Object.defineProperty(newObj, key, desc);
                } else {
                  newObj[key] = obj[key];
                }
              }
            }
            newObj.default = obj;
            if (cache) {
              cache.set(obj, newObj);
            }
            return newObj;
          }
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_zu32xmp7i.s[0]++;

          /**
           *
           * The variable movedX contains the horizontal movement of the mouse since the last frame
           * @property {Number} movedX
           * @readOnly
           * @example
           * <div class="notest">
           * <code>
           * let x = 50;
           * function setup() {
           *   rectMode(CENTER);
           * }
           *
           * function draw() {
           *   if (x > 48) {
           *     x -= 2;
           *   } else if (x < 48) {
           *     x += 2;
           *   }
           *   x += floor(movedX / 5);
           *   background(237, 34, 93);
           *   fill(0);
           *   rect(x, 50, 50, 50);
           * }
           * </code>
           * </div>
           * @alt
           * box moves left and right according to mouse movement then slowly back towards the center
           */
          _main.default.prototype.movedX = 0;

          /**
           * The variable movedY contains the vertical movement of the mouse since the last frame
           * @property {Number} movedY
           * @readOnly
           * @example
           * <div class="notest">
           * <code>
           * let y = 50;
           * function setup() {
           *   rectMode(CENTER);
           * }
           *
           * function draw() {
           *   if (y > 48) {
           *     y -= 2;
           *   } else if (y < 48) {
           *     y += 2;
           *   }
           *   y += floor(movedY / 5);
           *   background(237, 34, 93);
           *   fill(0);
           *   rect(y, 50, 50, 50);
           * }
           * </code>
           * </div>
           * @alt
           * box moves up and down according to mouse movement then slowly back towards the center
           */ cov_zu32xmp7i.s[1]++;
          _main.default.prototype.movedY = 0;
          /*
                                     * This is a flag which is false until the first time
                                     * we receive a mouse event. The pmouseX and pmouseY
                                     * values will match the mouseX and mouseY values until
                                     * this interaction takes place.
                                     */ cov_zu32xmp7i
            .s[2]++;
          _main.default.prototype._hasMouseInteracted = false;

          /**
           * The system variable mouseX always contains the current horizontal
           * position of the mouse, relative to (0, 0) of the canvas. The value at
           * the top-left corner is (0, 0) for 2-D and (-width/2, -height/2) for WebGL.
           * If touch is used instead of mouse input, mouseX will hold the x value
           * of the most recent touch point.
           *
           * @property {Number} mouseX
           * @readOnly
           *
           * @example
           * <div>
           * <code>
           * // Move the mouse across the canvas
           * function draw() {
           *   background(244, 248, 252);
           *   line(mouseX, 0, mouseX, 100);
           * }
           * </code>
           * </div>
           *
           * @alt
           * horizontal black line moves left and right with mouse x-position
           */ cov_zu32xmp7i.s[3]++;
          _main.default.prototype.mouseX = 0;

          /**
           * The system variable mouseY always contains the current vertical
           * position of the mouse, relative to (0, 0) of the canvas. The value at
           * the top-left corner is (0, 0) for 2-D and (-width/2, -height/2) for WebGL.
           * If touch is used instead of mouse input, mouseY will hold the y value
           * of the most recent touch point.
           *
           * @property {Number} mouseY
           * @readOnly
           *
           * @example
           * <div>
           * <code>
           * // Move the mouse across the canvas
           * function draw() {
           *   background(244, 248, 252);
           *   line(0, mouseY, 100, mouseY);
           * }
           * </code>
           * </div>
           *
           * @alt
           * vertical black line moves up and down with mouse y-position
           */ cov_zu32xmp7i.s[4]++;
          _main.default.prototype.mouseY = 0;

          /**
           * The system variable pmouseX always contains the horizontal position of
           * the mouse or finger in the frame previous to the current frame, relative to
           * (0, 0) of the canvas. The value at the top-left corner is (0, 0) for 2-D and
           * (-width/2, -height/2) for WebGL. Note: pmouseX will be reset to the current mouseX
           * value at the start of each touch event.
           *
           * @property {Number} pmouseX
           * @readOnly
           *
           * @example
           * <div>
           * <code>
           * // Move the mouse across the canvas to leave a trail
           * function setup() {
           *   //slow down the frameRate to make it more visible
           *   frameRate(10);
           * }
           *
           * function draw() {
           *   background(244, 248, 252);
           *   line(mouseX, mouseY, pmouseX, pmouseY);
           *   print(pmouseX + ' -> ' + mouseX);
           * }
           * </code>
           * </div>
           *
           * @alt
           * line trail is created from cursor movements. faster movement make longer line.
           */ cov_zu32xmp7i.s[5]++;
          _main.default.prototype.pmouseX = 0;

          /**
           * The system variable pmouseY always contains the vertical position of
           * the mouse or finger in the frame previous to the current frame, relative to
           * (0, 0) of the canvas. The value at the top-left corner is (0, 0) for 2-D and
           * (-width/2, -height/2) for WebGL. Note: pmouseY will be reset to the current mouseY
           * value at the start of each touch event.
           *
           * @property {Number} pmouseY
           * @readOnly
           *
           * @example
           * <div>
           * <code>
           * function draw() {
           *   background(237, 34, 93);
           *   fill(0);
           *   //draw a square only if the mouse is not moving
           *   if (mouseY === pmouseY && mouseX === pmouseX) {
           *     rect(20, 20, 60, 60);
           *   }
           *
           *   print(pmouseY + ' -> ' + mouseY);
           * }
           * </code>
           * </div>
           *
           * @alt
           * 60x60 black rect center, fuchsia background. rect flickers on mouse movement
           */ cov_zu32xmp7i.s[6]++;
          _main.default.prototype.pmouseY = 0;

          /**
           * The system variable winMouseX always contains the current horizontal
           * position of the mouse, relative to (0, 0) of the window.
           *
           * @property {Number} winMouseX
           * @readOnly
           *
           * @example
           * <div>
           * <code>
           * let myCanvas;
           *
           * function setup() {
           *   //use a variable to store a pointer to the canvas
           *   myCanvas = createCanvas(100, 100);
           *   let body = document.getElementsByTagName('body')[0];
           *   myCanvas.parent(body);
           * }
           *
           * function draw() {
           *   background(237, 34, 93);
           *   fill(0);
           *
           *   //move the canvas to the horizontal mouse position
           *   //relative to the window
           *   myCanvas.position(winMouseX + 1, windowHeight / 2);
           *
           *   //the y of the square is relative to the canvas
           *   rect(20, mouseY, 60, 60);
           * }
           * </code>
           * </div>
           *
           * @alt
           * 60x60 black rect y moves with mouse y and fuchsia canvas moves with mouse x
           */ cov_zu32xmp7i.s[7]++;
          _main.default.prototype.winMouseX = 0;

          /**
           * The system variable winMouseY always contains the current vertical
           * position of the mouse, relative to (0, 0) of the window.
           *
           * @property {Number} winMouseY
           * @readOnly
           *
           * @example
           * <div>
           * <code>
           * let myCanvas;
           *
           * function setup() {
           *   //use a variable to store a pointer to the canvas
           *   myCanvas = createCanvas(100, 100);
           *   let body = document.getElementsByTagName('body')[0];
           *   myCanvas.parent(body);
           * }
           *
           * function draw() {
           *   background(237, 34, 93);
           *   fill(0);
           *
           *   //move the canvas to the vertical mouse position
           *   //relative to the window
           *   myCanvas.position(windowWidth / 2, winMouseY + 1);
           *
           *   //the x of the square is relative to the canvas
           *   rect(mouseX, 20, 60, 60);
           * }
           * </code>
           * </div>
           *
           * @alt
           * 60x60 black rect x moves with mouse x and fuchsia canvas y moves with mouse y
           */ cov_zu32xmp7i.s[8]++;
          _main.default.prototype.winMouseY = 0;

          /**
           * The system variable pwinMouseX always contains the horizontal position
           * of the mouse in the frame previous to the current frame, relative to
           * (0, 0) of the window. Note: pwinMouseX will be reset to the current winMouseX
           * value at the start of each touch event.
           *
           * @property {Number} pwinMouseX
           * @readOnly
           *
           * @example
           * <div>
           * <code>
           * let myCanvas;
           *
           * function setup() {
           *   //use a variable to store a pointer to the canvas
           *   myCanvas = createCanvas(100, 100);
           *   noStroke();
           *   fill(237, 34, 93);
           * }
           *
           * function draw() {
           *   clear();
           *   //the difference between previous and
           *   //current x position is the horizontal mouse speed
           *   let speed = abs(winMouseX - pwinMouseX);
           *   //change the size of the circle
           *   //according to the horizontal speed
           *   ellipse(50, 50, 10 + speed * 5, 10 + speed * 5);
           *   //move the canvas to the mouse position
           *   myCanvas.position(winMouseX + 1, winMouseY + 1);
           * }
           * </code>
           * </div>
           *
           * @alt
           * fuchsia ellipse moves with mouse x and y. Grows and shrinks with mouse speed
           */ cov_zu32xmp7i.s[9]++;
          _main.default.prototype.pwinMouseX = 0;

          /**
           * The system variable pwinMouseY always contains the vertical position of
           * the mouse in the frame previous to the current frame, relative to (0, 0)
           * of the window. Note: pwinMouseY will be reset to the current winMouseY
           * value at the start of each touch event.
           *
           * @property {Number} pwinMouseY
           * @readOnly
           *
           * @example
           * <div>
           * <code>
           * let myCanvas;
           *
           * function setup() {
           *   //use a variable to store a pointer to the canvas
           *   myCanvas = createCanvas(100, 100);
           *   noStroke();
           *   fill(237, 34, 93);
           * }
           *
           * function draw() {
           *   clear();
           *   //the difference between previous and
           *   //current y position is the vertical mouse speed
           *   let speed = abs(winMouseY - pwinMouseY);
           *   //change the size of the circle
           *   //according to the vertical speed
           *   ellipse(50, 50, 10 + speed * 5, 10 + speed * 5);
           *   //move the canvas to the mouse position
           *   myCanvas.position(winMouseX + 1, winMouseY + 1);
           * }
           * </code>
           * </div>
           *
           * @alt
           * fuchsia ellipse moves with mouse x and y. Grows and shrinks with mouse speed
           */ cov_zu32xmp7i.s[10]++;
          _main.default.prototype.pwinMouseY = 0;

          /**
           * p5 automatically tracks if the mouse button is pressed and which
           * button is pressed. The value of the system variable mouseButton is either
           * LEFT, RIGHT, or CENTER depending on which button was pressed last.
           * Warning: different browsers may track mouseButton differently.
           *
           * @property {Constant} mouseButton
           * @readOnly
           *
           * @example
           * <div>
           * <code>
           * function draw() {
           *   background(237, 34, 93);
           *   fill(0);
           *
           *   if (mouseIsPressed) {
           *     if (mouseButton === LEFT) {
           *       ellipse(50, 50, 50, 50);
           *     }
           *     if (mouseButton === RIGHT) {
           *       rect(25, 25, 50, 50);
           *     }
           *     if (mouseButton === CENTER) {
           *       triangle(23, 75, 50, 20, 78, 75);
           *     }
           *   }
           *
           *   print(mouseButton);
           * }
           * </code>
           * </div>
           *
           * @alt
           * 50x50 black ellipse appears on center of fuchsia canvas on mouse click/press.
           */ cov_zu32xmp7i.s[11]++;
          _main.default.prototype.mouseButton = 0;

          /**
           * The boolean system variable mouseIsPressed is true if the mouse is pressed
           * and false if not.
           *
           * @property {Boolean} mouseIsPressed
           * @readOnly
           *
           * @example
           * <div>
           * <code>
           * function draw() {
           *   background(237, 34, 93);
           *   fill(0);
           *
           *   if (mouseIsPressed) {
           *     ellipse(50, 50, 50, 50);
           *   } else {
           *     rect(25, 25, 50, 50);
           *   }
           *
           *   print(mouseIsPressed);
           * }
           * </code>
           * </div>
           *
           * @alt
           * black 50x50 rect becomes ellipse with mouse click/press. fuchsia background.
           */ cov_zu32xmp7i.s[12]++;
          _main.default.prototype.mouseIsPressed = false;
          cov_zu32xmp7i.s[13]++;

          _main.default.prototype._updateNextMouseCoords = function(e) {
            cov_zu32xmp7i.f[0]++;
            cov_zu32xmp7i.s[14]++;
            if (
              (cov_zu32xmp7i.b[1][0]++, this._curElement !== null) &&
              ((cov_zu32xmp7i.b[1][1]++, !e.touches) ||
                (cov_zu32xmp7i.b[1][2]++, e.touches.length > 0))
            ) {
              cov_zu32xmp7i.b[0][0]++;
              var mousePos = (cov_zu32xmp7i.s[15]++,
              getMousePos(this._curElement.elt, this.width, this.height, e));
              cov_zu32xmp7i.s[16]++;

              this._setProperty('movedX', e.movementX);
              cov_zu32xmp7i.s[17]++;
              this._setProperty('movedY', e.movementY);
              cov_zu32xmp7i.s[18]++;
              this._setProperty('mouseX', mousePos.x);
              cov_zu32xmp7i.s[19]++;
              this._setProperty('mouseY', mousePos.y);
              cov_zu32xmp7i.s[20]++;
              this._setProperty('winMouseX', mousePos.winX);
              cov_zu32xmp7i.s[21]++;
              this._setProperty('winMouseY', mousePos.winY);
            } else {
              cov_zu32xmp7i.b[0][1]++;
            }
            cov_zu32xmp7i.s[22]++;
            if (!this._hasMouseInteracted) {
              cov_zu32xmp7i.b[2][0]++;
              cov_zu32xmp7i.s[23]++;
              // For first draw, make previous and next equal
              this._updateMouseCoords();
              cov_zu32xmp7i.s[24]++;
              this._setProperty('_hasMouseInteracted', true);
            } else {
              cov_zu32xmp7i.b[2][1]++;
            }
          };
          cov_zu32xmp7i.s[25]++;

          _main.default.prototype._updateMouseCoords = function() {
            cov_zu32xmp7i.f[1]++;
            cov_zu32xmp7i.s[26]++;
            this._setProperty('pmouseX', this.mouseX);
            cov_zu32xmp7i.s[27]++;
            this._setProperty('pmouseY', this.mouseY);
            cov_zu32xmp7i.s[28]++;
            this._setProperty('pwinMouseX', this.winMouseX);
            cov_zu32xmp7i.s[29]++;
            this._setProperty('pwinMouseY', this.winMouseY);
            cov_zu32xmp7i.s[30]++;

            this._setProperty('_pmouseWheelDeltaY', this._mouseWheelDeltaY);
          };

          function getMousePos(canvas, w, h, evt) {
            cov_zu32xmp7i.f[2]++;
            cov_zu32xmp7i.s[31]++;
            if ((cov_zu32xmp7i.b[4][0]++, evt) && (cov_zu32xmp7i.b[4][1]++, !evt.clientX)) {
              cov_zu32xmp7i.b[3][0]++;
              cov_zu32xmp7i.s[32]++;
              // use touches if touch and not mouse
              if (evt.touches) {
                cov_zu32xmp7i.b[5][0]++;
                cov_zu32xmp7i.s[33]++;
                evt = evt.touches[0];
              } else {
                cov_zu32xmp7i.b[5][1]++;
                cov_zu32xmp7i.s[34]++;
                if (evt.changedTouches) {
                  cov_zu32xmp7i.b[6][0]++;
                  cov_zu32xmp7i.s[35]++;
                  evt = evt.changedTouches[0];
                } else {
                  cov_zu32xmp7i.b[6][1]++;
                }
              }
            } else {
              cov_zu32xmp7i.b[3][1]++;
            }
            var rect = (cov_zu32xmp7i.s[36]++, canvas.getBoundingClientRect());
            var sx = (cov_zu32xmp7i.s[37]++,
            (cov_zu32xmp7i.b[7][0]++, canvas.scrollWidth / w) ||
              (cov_zu32xmp7i.b[7][1]++, 1));
            var sy = (cov_zu32xmp7i.s[38]++,
            (cov_zu32xmp7i.b[8][0]++, canvas.scrollHeight / h) ||
              (cov_zu32xmp7i.b[8][1]++, 1));
            cov_zu32xmp7i.s[39]++;
            return {
              x: (evt.clientX - rect.left) / sx,
              y: (evt.clientY - rect.top) / sy,
              winX: evt.clientX,
              winY: evt.clientY,
              id: evt.identifier
            };
          }
          cov_zu32xmp7i.s[40]++;

          _main.default.prototype._setMouseButton = function(e) {
            cov_zu32xmp7i.f[3]++;
            cov_zu32xmp7i.s[41]++;
            if (e.button === 1) {
              cov_zu32xmp7i.b[9][0]++;
              cov_zu32xmp7i.s[42]++;
              this._setProperty('mouseButton', constants.CENTER);
            } else {
              cov_zu32xmp7i.b[9][1]++;
              cov_zu32xmp7i.s[43]++;
              if (e.button === 2) {
                cov_zu32xmp7i.b[10][0]++;
                cov_zu32xmp7i.s[44]++;
                this._setProperty('mouseButton', constants.RIGHT);
              } else {
                cov_zu32xmp7i.b[10][1]++;
                cov_zu32xmp7i.s[45]++;
                this._setProperty('mouseButton', constants.LEFT);
              }
            }
          };

          /**
           * The <a href="#/p5/mouseMoved">mouseMoved()</a> function is called every time the mouse moves and a mouse
           * button is not pressed.<br><br>
           * Browsers may have different default
           * behaviors attached to various mouse events. To prevent any default
           * behavior for this event, add "return false" to the end of the method.
           *
           * @method mouseMoved
           * @param  {Object} [event] optional MouseEvent callback argument.
           * @example
           * <div>
           * <code>
           * // Move the mouse across the page
           * // to change its value
           *
           * let value = 0;
           * function draw() {
           *   fill(value);
           *   rect(25, 25, 50, 50);
           * }
           * function mouseMoved() {
           *   value = value + 5;
           *   if (value > 255) {
           *     value = 0;
           *   }
           * }
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * function mouseMoved() {
           *   ellipse(mouseX, mouseY, 5, 5);
           *   // prevent default
           *   return false;
           * }
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * // returns a MouseEvent object
           * // as a callback argument
           * function mouseMoved(event) {
           *   console.log(event);
           * }
           * </code>
           * </div>
           *
           * @alt
           * black 50x50 rect becomes lighter with mouse movements until white then resets
           * no image displayed
           */

          /**
           * The <a href="#/p5/mouseDragged">mouseDragged()</a> function is called once every time the mouse moves and
           * a mouse button is pressed. If no <a href="#/p5/mouseDragged">mouseDragged()</a> function is defined, the
           * <a href="#/p5/touchMoved">touchMoved()</a> function will be called instead if it is defined.<br><br>
           * Browsers may have different default
           * behaviors attached to various mouse events. To prevent any default
           * behavior for this event, add "return false" to the end of the method.
           *
           * @method mouseDragged
           * @param  {Object} [event] optional MouseEvent callback argument.
           * @example
           * <div>
           * <code>
           * // Drag the mouse across the page
           * // to change its value
           *
           * let value = 0;
           * function draw() {
           *   fill(value);
           *   rect(25, 25, 50, 50);
           * }
           * function mouseDragged() {
           *   value = value + 5;
           *   if (value > 255) {
           *     value = 0;
           *   }
           * }
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * function mouseDragged() {
           *   ellipse(mouseX, mouseY, 5, 5);
           *   // prevent default
           *   return false;
           * }
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * // returns a MouseEvent object
           * // as a callback argument
           * function mouseDragged(event) {
           *   console.log(event);
           * }
           * </code>
           * </div>
           *
           * @alt
           * black 50x50 rect turns lighter with mouse click and drag until white, resets
           * no image displayed
           */ cov_zu32xmp7i.s[46]++;
          _main.default.prototype._onmousemove = function(e) {
            cov_zu32xmp7i.f[4]++;
            var context = (cov_zu32xmp7i.s[47]++,
            this._isGlobal
              ? (cov_zu32xmp7i.b[11][0]++, window)
              : (cov_zu32xmp7i.b[11][1]++, this));
            var executeDefault;
            cov_zu32xmp7i.s[48]++;
            this._updateNextMouseCoords(e);
            cov_zu32xmp7i.s[49]++;
            if (!this.mouseIsPressed) {
              cov_zu32xmp7i.b[12][0]++;
              cov_zu32xmp7i.s[50]++;
              if (typeof context.mouseMoved === 'function') {
                cov_zu32xmp7i.b[13][0]++;
                cov_zu32xmp7i.s[51]++;
                executeDefault = context.mouseMoved(e);
                cov_zu32xmp7i.s[52]++;
                if (executeDefault === false) {
                  cov_zu32xmp7i.b[14][0]++;
                  cov_zu32xmp7i.s[53]++;
                  e.preventDefault();
                } else {
                  cov_zu32xmp7i.b[14][1]++;
                }
              } else {
                cov_zu32xmp7i.b[13][1]++;
              }
            } else {
              cov_zu32xmp7i.b[12][1]++;
              cov_zu32xmp7i.s[54]++;
              if (typeof context.mouseDragged === 'function') {
                cov_zu32xmp7i.b[15][0]++;
                cov_zu32xmp7i.s[55]++;
                executeDefault = context.mouseDragged(e);
                cov_zu32xmp7i.s[56]++;
                if (executeDefault === false) {
                  cov_zu32xmp7i.b[16][0]++;
                  cov_zu32xmp7i.s[57]++;
                  e.preventDefault();
                } else {
                  cov_zu32xmp7i.b[16][1]++;
                }
              } else {
                cov_zu32xmp7i.b[15][1]++;
                cov_zu32xmp7i.s[58]++;
                if (typeof context.touchMoved === 'function') {
                  cov_zu32xmp7i.b[17][0]++;
                  cov_zu32xmp7i.s[59]++;
                  executeDefault = context.touchMoved(e);
                  cov_zu32xmp7i.s[60]++;
                  if (executeDefault === false) {
                    cov_zu32xmp7i.b[18][0]++;
                    cov_zu32xmp7i.s[61]++;
                    e.preventDefault();
                  } else {
                    cov_zu32xmp7i.b[18][1]++;
                  }
                } else {
                  cov_zu32xmp7i.b[17][1]++;
                }
              }
            }
          };

          /**
           * The <a href="#/p5/mousePressed">mousePressed()</a> function is called once after every time a mouse button
           * is pressed. The mouseButton variable (see the related reference entry)
           * can be used to determine which button has been pressed. If no
           * <a href="#/p5/mousePressed">mousePressed()</a> function is defined, the <a href="#/p5/touchStarted">touchStarted()</a> function will be
           * called instead if it is defined.<br><br>
           * Browsers may have different default
           * behaviors attached to various mouse events. To prevent any default
           * behavior for this event, add "return false" to the end of the method.
           *
           * @method mousePressed
           * @param  {Object} [event] optional MouseEvent callback argument.
           * @example
           * <div>
           * <code>
           * // Click within the image to change
           * // the value of the rectangle
           *
           * let value = 0;
           * function draw() {
           *   fill(value);
           *   rect(25, 25, 50, 50);
           * }
           * function mousePressed() {
           *   if (value === 0) {
           *     value = 255;
           *   } else {
           *     value = 0;
           *   }
           * }
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * function mousePressed() {
           *   ellipse(mouseX, mouseY, 5, 5);
           *   // prevent default
           *   return false;
           * }
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * // returns a MouseEvent object
           * // as a callback argument
           * function mousePressed(event) {
           *   console.log(event);
           * }
           * </code>
           * </div>
           *
           * @alt
           * black 50x50 rect turns white with mouse click/press.
           * no image displayed
           */ cov_zu32xmp7i.s[62]++;
          _main.default.prototype._onmousedown = function(e) {
            cov_zu32xmp7i.f[5]++;
            var context = (cov_zu32xmp7i.s[63]++,
            this._isGlobal
              ? (cov_zu32xmp7i.b[19][0]++, window)
              : (cov_zu32xmp7i.b[19][1]++, this));
            var executeDefault;
            cov_zu32xmp7i.s[64]++;
            this._setProperty('mouseIsPressed', true);
            cov_zu32xmp7i.s[65]++;
            this._setMouseButton(e);
            cov_zu32xmp7i.s[66]++;
            this._updateNextMouseCoords(e);
            cov_zu32xmp7i.s[67]++;

            if (typeof context.mousePressed === 'function') {
              cov_zu32xmp7i.b[20][0]++;
              cov_zu32xmp7i.s[68]++;
              executeDefault = context.mousePressed(e);
              cov_zu32xmp7i.s[69]++;
              if (executeDefault === false) {
                cov_zu32xmp7i.b[21][0]++;
                cov_zu32xmp7i.s[70]++;
                e.preventDefault();
              } else {
                cov_zu32xmp7i.b[21][1]++;
              }
              // only safari needs this manual fallback for consistency
            } else {
              cov_zu32xmp7i.b[20][1]++;
              cov_zu32xmp7i.s[71]++;
              if (
                (cov_zu32xmp7i.b[23][0]++,
                navigator.userAgent.toLowerCase().includes('safari')) &&
                (cov_zu32xmp7i.b[23][1]++, typeof context.touchStarted === 'function')
              ) {
                cov_zu32xmp7i.b[22][0]++;
                cov_zu32xmp7i.s[72]++;
                executeDefault = context.touchStarted(e);
                cov_zu32xmp7i.s[73]++;
                if (executeDefault === false) {
                  cov_zu32xmp7i.b[24][0]++;
                  cov_zu32xmp7i.s[74]++;
                  e.preventDefault();
                } else {
                  cov_zu32xmp7i.b[24][1]++;
                }
              } else {
                cov_zu32xmp7i.b[22][1]++;
              }
            }
          };

          /**
           * The <a href="#/p5/mouseReleased">mouseReleased()</a> function is called every time a mouse button is
           * released. If no <a href="#/p5/mouseReleased">mouseReleased()</a> function is defined, the <a href="#/p5/touchEnded">touchEnded()</a>
           * function will be called instead if it is defined.<br><br>
           * Browsers may have different default
           * behaviors attached to various mouse events. To prevent any default
           * behavior for this event, add "return false" to the end of the method.
           *
           * @method mouseReleased
           * @param  {Object} [event] optional MouseEvent callback argument.
           * @example
           * <div>
           * <code>
           * // Click within the image to change
           * // the value of the rectangle
           * // after the mouse has been clicked
           *
           * let value = 0;
           * function draw() {
           *   fill(value);
           *   rect(25, 25, 50, 50);
           * }
           * function mouseReleased() {
           *   if (value === 0) {
           *     value = 255;
           *   } else {
           *     value = 0;
           *   }
           * }
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * function mouseReleased() {
           *   ellipse(mouseX, mouseY, 5, 5);
           *   // prevent default
           *   return false;
           * }
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * // returns a MouseEvent object
           * // as a callback argument
           * function mouseReleased(event) {
           *   console.log(event);
           * }
           * </code>
           * </div>
           *
           * @alt
           * black 50x50 rect turns white with mouse click/press.
           * no image displayed
           */ cov_zu32xmp7i.s[75]++;
          _main.default.prototype._onmouseup = function(e) {
            cov_zu32xmp7i.f[6]++;
            var context = (cov_zu32xmp7i.s[76]++,
            this._isGlobal
              ? (cov_zu32xmp7i.b[25][0]++, window)
              : (cov_zu32xmp7i.b[25][1]++, this));
            var executeDefault;
            cov_zu32xmp7i.s[77]++;
            this._setProperty('mouseIsPressed', false);
            cov_zu32xmp7i.s[78]++;
            if (typeof context.mouseReleased === 'function') {
              cov_zu32xmp7i.b[26][0]++;
              cov_zu32xmp7i.s[79]++;
              executeDefault = context.mouseReleased(e);
              cov_zu32xmp7i.s[80]++;
              if (executeDefault === false) {
                cov_zu32xmp7i.b[27][0]++;
                cov_zu32xmp7i.s[81]++;
                e.preventDefault();
              } else {
                cov_zu32xmp7i.b[27][1]++;
              }
            } else {
              cov_zu32xmp7i.b[26][1]++;
              cov_zu32xmp7i.s[82]++;
              if (typeof context.touchEnded === 'function') {
                cov_zu32xmp7i.b[28][0]++;
                cov_zu32xmp7i.s[83]++;
                executeDefault = context.touchEnded(e);
                cov_zu32xmp7i.s[84]++;
                if (executeDefault === false) {
                  cov_zu32xmp7i.b[29][0]++;
                  cov_zu32xmp7i.s[85]++;
                  e.preventDefault();
                } else {
                  cov_zu32xmp7i.b[29][1]++;
                }
              } else {
                cov_zu32xmp7i.b[28][1]++;
              }
            }
          };
          cov_zu32xmp7i.s[86]++;

          _main.default.prototype._ondragend = _main.default.prototype._onmouseup;
          cov_zu32xmp7i.s[87]++;
          _main.default.prototype._ondragover = _main.default.prototype._onmousemove;

          /**
           * The <a href="#/p5/mouseClicked">mouseClicked()</a> function is called once after a mouse button has been
           * pressed and then released.<br><br>
           * Browsers handle clicks differently, so this function is only guaranteed to be
           * run when the left mouse button is clicked. To handle other mouse buttons
           * being pressed or released, see <a href="#/p5/mousePressed">mousePressed()</a> or <a href="#/p5/mouseReleased">mouseReleased()</a>.<br><br>
           * Browsers may have different default
           * behaviors attached to various mouse events. To prevent any default
           * behavior for this event, add "return false" to the end of the method.
           *
           * @method mouseClicked
           * @param  {Object} [event] optional MouseEvent callback argument.
           * @example
           * <div>
           * <code>
           * // Click within the image to change
           * // the value of the rectangle
           * // after the mouse has been clicked
           *
           * let value = 0;
           * function draw() {
           *   fill(value);
           *   rect(25, 25, 50, 50);
           * }
           *
           * function mouseClicked() {
           *   if (value === 0) {
           *     value = 255;
           *   } else {
           *     value = 0;
           *   }
           * }
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * function mouseClicked() {
           *   ellipse(mouseX, mouseY, 5, 5);
           *   // prevent default
           *   return false;
           * }
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * // returns a MouseEvent object
           * // as a callback argument
           * function mouseClicked(event) {
           *   console.log(event);
           * }
           * </code>
           * </div>
           *
           * @alt
           * black 50x50 rect turns white with mouse click/press.
           * no image displayed
           */ cov_zu32xmp7i.s[88]++;
          _main.default.prototype._onclick = function(e) {
            cov_zu32xmp7i.f[7]++;
            var context = (cov_zu32xmp7i.s[89]++,
            this._isGlobal
              ? (cov_zu32xmp7i.b[30][0]++, window)
              : (cov_zu32xmp7i.b[30][1]++, this));
            cov_zu32xmp7i.s[90]++;
            if (typeof context.mouseClicked === 'function') {
              cov_zu32xmp7i.b[31][0]++;
              var executeDefault = (cov_zu32xmp7i.s[91]++, context.mouseClicked(e));
              cov_zu32xmp7i.s[92]++;
              if (executeDefault === false) {
                cov_zu32xmp7i.b[32][0]++;
                cov_zu32xmp7i.s[93]++;
                e.preventDefault();
              } else {
                cov_zu32xmp7i.b[32][1]++;
              }
            } else {
              cov_zu32xmp7i.b[31][1]++;
            }
          };

          /**
           * The <a href="#/p5/doubleClicked">doubleClicked()</a> function is executed every time a event
           * listener has detected a dblclick event which is a part of the
           * DOM L3 specification. The doubleClicked event is fired when a
           * pointing device button (usually a mouse's primary button)
           * is clicked twice on a single element. For more info on the
           * dblclick event refer to mozilla's documentation here:
           * https://developer.mozilla.org/en-US/docs/Web/Events/dblclick
           *
           * @method doubleClicked
           * @param  {Object} [event] optional MouseEvent callback argument.
           * @example
           * <div>
           * <code>
           * // Click within the image to change
           * // the value of the rectangle
           * // after the mouse has been double clicked
           *
           * let value = 0;
           * function draw() {
           *   fill(value);
           *   rect(25, 25, 50, 50);
           * }
           *
           * function doubleClicked() {
           *   if (value === 0) {
           *     value = 255;
           *   } else {
           *     value = 0;
           *   }
           * }
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * function doubleClicked() {
           *   ellipse(mouseX, mouseY, 5, 5);
           *   // prevent default
           *   return false;
           * }
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * // returns a MouseEvent object
           * // as a callback argument
           * function doubleClicked(event) {
           *   console.log(event);
           * }
           * </code>
           * </div>
           *
           * @alt
           * black 50x50 rect turns white with mouse doubleClick/press.
           * no image displayed
           */ cov_zu32xmp7i.s[94]++;

          _main.default.prototype._ondblclick = function(e) {
            cov_zu32xmp7i.f[8]++;
            var context = (cov_zu32xmp7i.s[95]++,
            this._isGlobal
              ? (cov_zu32xmp7i.b[33][0]++, window)
              : (cov_zu32xmp7i.b[33][1]++, this));
            cov_zu32xmp7i.s[96]++;
            if (typeof context.doubleClicked === 'function') {
              cov_zu32xmp7i.b[34][0]++;
              var executeDefault = (cov_zu32xmp7i.s[97]++, context.doubleClicked(e));
              cov_zu32xmp7i.s[98]++;
              if (executeDefault === false) {
                cov_zu32xmp7i.b[35][0]++;
                cov_zu32xmp7i.s[99]++;
                e.preventDefault();
              } else {
                cov_zu32xmp7i.b[35][1]++;
              }
            } else {
              cov_zu32xmp7i.b[34][1]++;
            }
          };

          /**
           * For use with WebGL orbitControl.
           * @property {Number} _mouseWheelDeltaY
           * @readOnly
           * @private
           */ cov_zu32xmp7i.s[100]++;
          _main.default.prototype._mouseWheelDeltaY = 0;

          /**
           * For use with WebGL orbitControl.
           * @property {Number} _pmouseWheelDeltaY
           * @readOnly
           * @private
           */ cov_zu32xmp7i.s[101]++;
          _main.default.prototype._pmouseWheelDeltaY = 0;

          /**
           * The function <a href="#/p5/mouseWheel">mouseWheel()</a> is executed every time a vertical mouse wheel
           * event is detected either triggered by an actual mouse wheel or by a
           * touchpad.<br><br>
           * The event.delta property returns the amount the mouse wheel
           * have scrolled. The values can be positive or negative depending on the
           * scroll direction (on OS X with "natural" scrolling enabled, the signs
           * are inverted).<br><br>
           * Browsers may have different default behaviors attached to various
           * mouse events. To prevent any default behavior for this event, add
           * "return false" to the end of the method.<br><br>
           * Due to the current support of the "wheel" event on Safari, the function
           * may only work as expected if "return false" is included while using Safari.
           *
           * @method mouseWheel
           * @param  {Object} [event] optional WheelEvent callback argument.
           *
           * @example
           * <div>
           * <code>
           * let pos = 25;
           *
           * function draw() {
           *   background(237, 34, 93);
           *   fill(0);
           *   rect(25, pos, 50, 50);
           * }
           *
           * function mouseWheel(event) {
           *   print(event.delta);
           *   //move the square according to the vertical scroll amount
           *   pos += event.delta;
           *   //uncomment to block page scrolling
           *   //return false;
           * }
           * </code>
           * </div>
           *
           * @alt
           * black 50x50 rect moves up and down with vertical scroll. fuchsia background
           */ cov_zu32xmp7i.s[102]++;
          _main.default.prototype._onwheel = function(e) {
            cov_zu32xmp7i.f[9]++;
            var context = (cov_zu32xmp7i.s[103]++,
            this._isGlobal
              ? (cov_zu32xmp7i.b[36][0]++, window)
              : (cov_zu32xmp7i.b[36][1]++, this));
            cov_zu32xmp7i.s[104]++;
            this._setProperty('_mouseWheelDeltaY', e.deltaY);
            cov_zu32xmp7i.s[105]++;
            if (typeof context.mouseWheel === 'function') {
              cov_zu32xmp7i.b[37][0]++;
              cov_zu32xmp7i.s[106]++;
              e.delta = e.deltaY;
              var executeDefault = (cov_zu32xmp7i.s[107]++, context.mouseWheel(e));
              cov_zu32xmp7i.s[108]++;
              if (executeDefault === false) {
                cov_zu32xmp7i.b[38][0]++;
                cov_zu32xmp7i.s[109]++;
                e.preventDefault();
              } else {
                cov_zu32xmp7i.b[38][1]++;
              }
            } else {
              cov_zu32xmp7i.b[37][1]++;
            }
          };

          /**
           * The function <a href="#/p5/requestPointerLock">requestPointerLock()</a>
           * locks the pointer to its current position and makes it invisible.
           * Use <a href="#/p5/movedX">movedX</a> and <a href="#/p5/movedY">movedY</a> to get the difference the mouse was moved since
           * the last call of draw.
           * Note that not all browsers support this feature.
           * This enables you to create experiences that aren't limited by the mouse moving out of the screen
           * even if it is repeatedly moved into one direction.
           * For example, a first person perspective experience.
           *
           * @method requestPointerLock
           * @example
           * <div class="notest">
           * <code>
           * let cam;
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   requestPointerLock();
           *   cam = createCamera();
           * }
           *
           * function draw() {
           *   background(255);
           *   cam.pan(-movedX * 0.001);
           *   cam.tilt(movedY * 0.001);
           *   sphere(25);
           * }
           * </code>
           * </div>
           *
           * @alt
           * 3D scene moves according to mouse mouse movement in a first person perspective
           */ cov_zu32xmp7i.s[110]++;
          _main.default.prototype.requestPointerLock = function() {
            cov_zu32xmp7i.f[10]++;
            // pointer lock object forking for cross browser
            var canvas = (cov_zu32xmp7i.s[111]++, this._curElement.elt);
            cov_zu32xmp7i.s[112]++;
            canvas.requestPointerLock =
              (cov_zu32xmp7i.b[39][0]++, canvas.requestPointerLock) ||
              (cov_zu32xmp7i.b[39][1]++, canvas.mozRequestPointerLock);
            cov_zu32xmp7i.s[113]++;
            if (!canvas.requestPointerLock) {
              cov_zu32xmp7i.b[40][0]++;
              cov_zu32xmp7i.s[114]++;
              console.log('requestPointerLock is not implemented in this browser');
              cov_zu32xmp7i.s[115]++;
              return false;
            } else {
              cov_zu32xmp7i.b[40][1]++;
            }
            cov_zu32xmp7i.s[116]++;
            canvas.requestPointerLock();
            cov_zu32xmp7i.s[117]++;
            return true;
          };

          /**
           * The function <a href="#/p5/exitPointerLock">exitPointerLock()</a>
           * exits a previously triggered <a href="#/p5/requestPointerLock">pointer Lock</a>
           * for example to make ui elements usable etc
           *
           * @method exitPointerLock
           * @example
           * <div class="notest">
           * <code>
           * //click the canvas to lock the pointer
           * //click again to exit (otherwise escape)
           * let locked = false;
           * function draw() {
           *   background(237, 34, 93);
           * }
           * function mouseClicked() {
           *   if (!locked) {
           *     locked = true;
           *     requestPointerLock();
           *   } else {
           *     exitPointerLock();
           *     locked = false;
           *   }
           * }
           * </code>
           * </div>
           *
           * @alt
           * cursor gets locked / unlocked on mouse-click
           */ cov_zu32xmp7i.s[118]++;
          _main.default.prototype.exitPointerLock = function() {
            cov_zu32xmp7i.f[11]++;
            cov_zu32xmp7i.s[119]++;
            document.exitPointerLock();
          };
          var _default = _main.default;
          exports.default = _default;
        },
        {
          '../core/constants': 272,
          '../core/main': 283,
          'core-js/modules/es.array.includes': 172,
          'core-js/modules/es.string.includes': 200
        }
      ],
      303: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_1sno2ujyov = (function() {
            var path = '/Users/outofambit/src/p5.js/src/events/touch.js';
            var hash = '1a3c4635c54e323d24558bb49d1e7f2a55350419';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/events/touch.js',
              statementMap: {
                '0': { start: { line: 39, column: 0 }, end: { line: 39, column: 26 } },
                '1': { start: { line: 41, column: 0 }, end: { line: 55, column: 2 } },
                '2': { start: { line: 42, column: 2 }, end: { line: 54, column: 3 } },
                '3': { start: { line: 43, column: 20 }, end: { line: 43, column: 22 } },
                '4': { start: { line: 44, column: 4 }, end: { line: 52, column: 5 } },
                '5': { start: { line: 44, column: 17 }, end: { line: 44, column: 18 } },
                '6': { start: { line: 45, column: 6 }, end: { line: 51, column: 8 } },
                '7': { start: { line: 53, column: 4 }, end: { line: 53, column: 42 } },
                '8': { start: { line: 58, column: 15 }, end: { line: 58, column: 45 } },
                '9': { start: { line: 59, column: 13 }, end: { line: 59, column: 40 } },
                '10': { start: { line: 60, column: 13 }, end: { line: 60, column: 41 } },
                '11': { start: { line: 61, column: 16 }, end: { line: 61, column: 51 } },
                '12': { start: { line: 62, column: 2 }, end: { line: 68, column: 4 } },
                '13': { start: { line: 126, column: 0 }, end: { line: 149, column: 2 } },
                '14': { start: { line: 127, column: 18 }, end: { line: 127, column: 48 } },
                '15': { start: { line: 129, column: 2 }, end: { line: 129, column: 44 } },
                '16': { start: { line: 130, column: 2 }, end: { line: 130, column: 29 } },
                '17': { start: { line: 131, column: 2 }, end: { line: 131, column: 33 } },
                '18': { start: { line: 132, column: 2 }, end: { line: 132, column: 28 } },
                '19': { start: { line: 134, column: 2 }, end: { line: 148, column: 3 } },
                '20': { start: { line: 135, column: 4 }, end: { line: 135, column: 45 } },
                '21': { start: { line: 136, column: 4 }, end: { line: 138, column: 5 } },
                '22': { start: { line: 137, column: 6 }, end: { line: 137, column: 25 } },
                '23': { start: { line: 140, column: 9 }, end: { line: 148, column: 3 } },
                '24': { start: { line: 144, column: 4 }, end: { line: 144, column: 45 } },
                '25': { start: { line: 145, column: 4 }, end: { line: 147, column: 5 } },
                '26': { start: { line: 146, column: 6 }, end: { line: 146, column: 25 } },
                '27': { start: { line: 205, column: 0 }, end: { line: 221, column: 2 } },
                '28': { start: { line: 206, column: 18 }, end: { line: 206, column: 48 } },
                '29': { start: { line: 208, column: 2 }, end: { line: 208, column: 29 } },
                '30': { start: { line: 209, column: 2 }, end: { line: 209, column: 33 } },
                '31': { start: { line: 210, column: 2 }, end: { line: 220, column: 3 } },
                '32': { start: { line: 211, column: 4 }, end: { line: 211, column: 43 } },
                '33': { start: { line: 212, column: 4 }, end: { line: 214, column: 5 } },
                '34': { start: { line: 213, column: 6 }, end: { line: 213, column: 25 } },
                '35': { start: { line: 215, column: 9 }, end: { line: 220, column: 3 } },
                '36': { start: { line: 216, column: 4 }, end: { line: 216, column: 45 } },
                '37': { start: { line: 217, column: 4 }, end: { line: 219, column: 5 } },
                '38': { start: { line: 218, column: 6 }, end: { line: 218, column: 25 } },
                '39': { start: { line: 278, column: 0 }, end: { line: 295, column: 2 } },
                '40': { start: { line: 279, column: 2 }, end: { line: 279, column: 45 } },
                '41': { start: { line: 280, column: 2 }, end: { line: 280, column: 29 } },
                '42': { start: { line: 281, column: 2 }, end: { line: 281, column: 33 } },
                '43': { start: { line: 282, column: 18 }, end: { line: 282, column: 48 } },
                '44': { start: { line: 284, column: 2 }, end: { line: 294, column: 3 } },
                '45': { start: { line: 285, column: 4 }, end: { line: 285, column: 43 } },
                '46': { start: { line: 286, column: 4 }, end: { line: 288, column: 5 } },
                '47': { start: { line: 287, column: 6 }, end: { line: 287, column: 25 } },
                '48': { start: { line: 289, column: 9 }, end: { line: 294, column: 3 } },
                '49': { start: { line: 290, column: 4 }, end: { line: 290, column: 46 } },
                '50': { start: { line: 291, column: 4 }, end: { line: 293, column: 5 } },
                '51': { start: { line: 292, column: 6 }, end: { line: 292, column: 25 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 41, column: 34 }, end: { line: 41, column: 35 } },
                  loc: { start: { line: 41, column: 46 }, end: { line: 55, column: 1 } },
                  line: 41
                },
                '1': {
                  name: 'getTouchInfo',
                  decl: { start: { line: 57, column: 9 }, end: { line: 57, column: 21 } },
                  loc: { start: { line: 57, column: 46 }, end: { line: 69, column: 1 } },
                  line: 57
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 126, column: 29 },
                    end: { line: 126, column: 30 }
                  },
                  loc: { start: { line: 126, column: 41 }, end: { line: 149, column: 1 } },
                  line: 126
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 205, column: 28 },
                    end: { line: 205, column: 29 }
                  },
                  loc: { start: { line: 205, column: 40 }, end: { line: 221, column: 1 } },
                  line: 205
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 278, column: 27 },
                    end: { line: 278, column: 28 }
                  },
                  loc: { start: { line: 278, column: 39 }, end: { line: 295, column: 1 } },
                  line: 278
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 42, column: 2 }, end: { line: 54, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 42, column: 2 }, end: { line: 54, column: 3 } },
                    { start: { line: 42, column: 2 }, end: { line: 54, column: 3 } }
                  ],
                  line: 42
                },
                '1': {
                  loc: { start: { line: 57, column: 39 }, end: { line: 57, column: 44 } },
                  type: 'default-arg',
                  locations: [
                    { start: { line: 57, column: 43 }, end: { line: 57, column: 44 } }
                  ],
                  line: 57
                },
                '2': {
                  loc: { start: { line: 59, column: 13 }, end: { line: 59, column: 40 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 59, column: 13 }, end: { line: 59, column: 35 } },
                    { start: { line: 59, column: 39 }, end: { line: 59, column: 40 } }
                  ],
                  line: 59
                },
                '3': {
                  loc: { start: { line: 60, column: 13 }, end: { line: 60, column: 41 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 60, column: 13 }, end: { line: 60, column: 36 } },
                    { start: { line: 60, column: 40 }, end: { line: 60, column: 41 } }
                  ],
                  line: 60
                },
                '4': {
                  loc: { start: { line: 61, column: 16 }, end: { line: 61, column: 51 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 61, column: 16 }, end: { line: 61, column: 28 } },
                    { start: { line: 61, column: 32 }, end: { line: 61, column: 51 } }
                  ],
                  line: 61
                },
                '5': {
                  loc: { start: { line: 127, column: 18 }, end: { line: 127, column: 48 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 127, column: 35 }, end: { line: 127, column: 41 } },
                    { start: { line: 127, column: 44 }, end: { line: 127, column: 48 } }
                  ],
                  line: 127
                },
                '6': {
                  loc: { start: { line: 134, column: 2 }, end: { line: 148, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 134, column: 2 }, end: { line: 148, column: 3 } },
                    { start: { line: 134, column: 2 }, end: { line: 148, column: 3 } }
                  ],
                  line: 134
                },
                '7': {
                  loc: { start: { line: 136, column: 4 }, end: { line: 138, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 136, column: 4 }, end: { line: 138, column: 5 } },
                    { start: { line: 136, column: 4 }, end: { line: 138, column: 5 } }
                  ],
                  line: 136
                },
                '8': {
                  loc: { start: { line: 140, column: 9 }, end: { line: 148, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 140, column: 9 }, end: { line: 148, column: 3 } },
                    { start: { line: 140, column: 9 }, end: { line: 148, column: 3 } }
                  ],
                  line: 140
                },
                '9': {
                  loc: { start: { line: 141, column: 4 }, end: { line: 142, column: 46 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 141, column: 4 }, end: { line: 141, column: 56 } },
                    { start: { line: 142, column: 4 }, end: { line: 142, column: 46 } }
                  ],
                  line: 141
                },
                '10': {
                  loc: { start: { line: 145, column: 4 }, end: { line: 147, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 145, column: 4 }, end: { line: 147, column: 5 } },
                    { start: { line: 145, column: 4 }, end: { line: 147, column: 5 } }
                  ],
                  line: 145
                },
                '11': {
                  loc: { start: { line: 206, column: 18 }, end: { line: 206, column: 48 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 206, column: 35 }, end: { line: 206, column: 41 } },
                    { start: { line: 206, column: 44 }, end: { line: 206, column: 48 } }
                  ],
                  line: 206
                },
                '12': {
                  loc: { start: { line: 210, column: 2 }, end: { line: 220, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 210, column: 2 }, end: { line: 220, column: 3 } },
                    { start: { line: 210, column: 2 }, end: { line: 220, column: 3 } }
                  ],
                  line: 210
                },
                '13': {
                  loc: { start: { line: 212, column: 4 }, end: { line: 214, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 212, column: 4 }, end: { line: 214, column: 5 } },
                    { start: { line: 212, column: 4 }, end: { line: 214, column: 5 } }
                  ],
                  line: 212
                },
                '14': {
                  loc: { start: { line: 215, column: 9 }, end: { line: 220, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 215, column: 9 }, end: { line: 220, column: 3 } },
                    { start: { line: 215, column: 9 }, end: { line: 220, column: 3 } }
                  ],
                  line: 215
                },
                '15': {
                  loc: { start: { line: 217, column: 4 }, end: { line: 219, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 217, column: 4 }, end: { line: 219, column: 5 } },
                    { start: { line: 217, column: 4 }, end: { line: 219, column: 5 } }
                  ],
                  line: 217
                },
                '16': {
                  loc: { start: { line: 282, column: 18 }, end: { line: 282, column: 48 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 282, column: 35 }, end: { line: 282, column: 41 } },
                    { start: { line: 282, column: 44 }, end: { line: 282, column: 48 } }
                  ],
                  line: 282
                },
                '17': {
                  loc: { start: { line: 284, column: 2 }, end: { line: 294, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 284, column: 2 }, end: { line: 294, column: 3 } },
                    { start: { line: 284, column: 2 }, end: { line: 294, column: 3 } }
                  ],
                  line: 284
                },
                '18': {
                  loc: { start: { line: 286, column: 4 }, end: { line: 288, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 286, column: 4 }, end: { line: 288, column: 5 } },
                    { start: { line: 286, column: 4 }, end: { line: 288, column: 5 } }
                  ],
                  line: 286
                },
                '19': {
                  loc: { start: { line: 289, column: 9 }, end: { line: 294, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 289, column: 9 }, end: { line: 294, column: 3 } },
                    { start: { line: 289, column: 9 }, end: { line: 294, column: 3 } }
                  ],
                  line: 289
                },
                '20': {
                  loc: { start: { line: 291, column: 4 }, end: { line: 293, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 291, column: 4 }, end: { line: 293, column: 5 } },
                    { start: { line: 291, column: 4 }, end: { line: 293, column: 5 } }
                  ],
                  line: 291
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0
              },
              f: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0 },
              b: {
                '0': [0, 0],
                '1': [0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0],
                '20': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '1a3c4635c54e323d24558bb49d1e7f2a55350419'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.includes');
          _dereq_('core-js/modules/es.string.includes');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_1sno2ujyov.s[0]++;

          /**
           * The system variable touches[] contains an array of the positions of all
           * current touch points, relative to (0, 0) of the canvas, and IDs identifying a
           * unique touch as it moves. Each element in the array is an object with x, y,
           * and id properties.
           *
           * The touches[] array is not supported on Safari and IE on touch-based
           * desktops (laptops).
           *
           * @property {Object[]} touches
           * @readOnly
           *
           * @example
           * <div>
           * <code>
           * // On a touchscreen device, touch
           * // the canvas using one or more fingers
           * // at the same time
           * function draw() {
           *   clear();
           *   let display = touches.length + ' touches';
           *   text(display, 5, 10);
           * }
           * </code>
           * </div>
           *
           * @alt
           * Number of touches currently registered are displayed on the canvas
           */
          _main.default.prototype.touches = [];
          cov_1sno2ujyov.s[1]++;

          _main.default.prototype._updateTouchCoords = function(e) {
            cov_1sno2ujyov.f[0]++;
            cov_1sno2ujyov.s[2]++;
            if (this._curElement !== null) {
              cov_1sno2ujyov.b[0][0]++;
              var touches = (cov_1sno2ujyov.s[3]++, []);
              cov_1sno2ujyov.s[4]++;
              for (var i = (cov_1sno2ujyov.s[5]++, 0); i < e.touches.length; i++) {
                cov_1sno2ujyov.s[6]++;
                touches[i] = getTouchInfo(
                  this._curElement.elt,
                  this.width,
                  this.height,
                  e,
                  i
                );
              }
              cov_1sno2ujyov.s[7]++;
              this._setProperty('touches', touches);
            } else {
              cov_1sno2ujyov.b[0][1]++;
            }
          };

          function getTouchInfo(canvas, w, h, e) {
            var i =
              arguments.length > 4 && arguments[4] !== undefined
                ? arguments[4]
                : (cov_1sno2ujyov.b[1][0]++, 0);
            cov_1sno2ujyov.f[1]++;
            var rect = (cov_1sno2ujyov.s[8]++, canvas.getBoundingClientRect());
            var sx = (cov_1sno2ujyov.s[9]++,
            (cov_1sno2ujyov.b[2][0]++, canvas.scrollWidth / w) ||
              (cov_1sno2ujyov.b[2][1]++, 1));
            var sy = (cov_1sno2ujyov.s[10]++,
            (cov_1sno2ujyov.b[3][0]++, canvas.scrollHeight / h) ||
              (cov_1sno2ujyov.b[3][1]++, 1));
            var touch = (cov_1sno2ujyov.s[11]++,
            (cov_1sno2ujyov.b[4][0]++, e.touches[i]) ||
              (cov_1sno2ujyov.b[4][1]++, e.changedTouches[i]));
            cov_1sno2ujyov.s[12]++;
            return {
              x: (touch.clientX - rect.left) / sx,
              y: (touch.clientY - rect.top) / sy,
              winX: touch.clientX,
              winY: touch.clientY,
              id: touch.identifier
            };
          }

          /**
           * The touchStarted() function is called once after every time a touch is
           * registered. If no <a href="#/p5/touchStarted">touchStarted()</a> function is defined, the <a href="#/p5/mousePressed">mousePressed()</a>
           * function will be called instead if it is defined.<br><br>
           * Browsers may have different default behaviors attached to various touch
           * events. To prevent any default behavior for this event, add "return false"
           * to the end of the method.
           *
           * @method touchStarted
           * @param  {Object} [event] optional TouchEvent callback argument.
           * @example
           * <div>
           * <code>
           * // Touch within the image to change
           * // the value of the rectangle
           *
           * let value = 0;
           * function draw() {
           *   fill(value);
           *   rect(25, 25, 50, 50);
           * }
           * function touchStarted() {
           *   if (value === 0) {
           *     value = 255;
           *   } else {
           *     value = 0;
           *   }
           * }
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * function touchStarted() {
           *   ellipse(mouseX, mouseY, 5, 5);
           *   // prevent default
           *   return false;
           * }
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * // returns a TouchEvent object
           * // as a callback argument
           * function touchStarted(event) {
           *   console.log(event);
           * }
           * </code>
           * </div>
           *
           * @alt
           * 50x50 black rect turns white with touch event.
           * no image displayed
           */ cov_1sno2ujyov.s[13]++;
          _main.default.prototype._ontouchstart = function(e) {
            cov_1sno2ujyov.f[2]++;
            var context = (cov_1sno2ujyov.s[14]++,
            this._isGlobal
              ? (cov_1sno2ujyov.b[5][0]++, window)
              : (cov_1sno2ujyov.b[5][1]++, this));
            var executeDefault;
            cov_1sno2ujyov.s[15]++;
            this._setProperty('mouseIsPressed', true);
            cov_1sno2ujyov.s[16]++;
            this._updateTouchCoords(e);
            cov_1sno2ujyov.s[17]++;
            this._updateNextMouseCoords(e);
            cov_1sno2ujyov.s[18]++;
            this._updateMouseCoords(); // reset pmouseXY at the start of each touch event
            cov_1sno2ujyov.s[19]++;
            if (typeof context.touchStarted === 'function') {
              cov_1sno2ujyov.b[6][0]++;
              cov_1sno2ujyov.s[20]++;
              executeDefault = context.touchStarted(e);
              cov_1sno2ujyov.s[21]++;
              if (executeDefault === false) {
                cov_1sno2ujyov.b[7][0]++;
                cov_1sno2ujyov.s[22]++;
                e.preventDefault();
              } else {
                cov_1sno2ujyov.b[7][1]++;
              }
              // only safari needs this manual fallback for consistency
            } else {
              cov_1sno2ujyov.b[6][1]++;
              cov_1sno2ujyov.s[23]++;
              if (
                (cov_1sno2ujyov.b[9][0]++,
                navigator.userAgent.toLowerCase().includes('safari')) &&
                (cov_1sno2ujyov.b[9][1]++, typeof context.mousePressed === 'function')
              ) {
                cov_1sno2ujyov.b[8][0]++;
                cov_1sno2ujyov.s[24]++;
                executeDefault = context.mousePressed(e);
                cov_1sno2ujyov.s[25]++;
                if (executeDefault === false) {
                  cov_1sno2ujyov.b[10][0]++;
                  cov_1sno2ujyov.s[26]++;
                  e.preventDefault();
                } else {
                  cov_1sno2ujyov.b[10][1]++;
                }
              } else {
                cov_1sno2ujyov.b[8][1]++;
              }
            }
          };

          /**
           * The <a href="#/p5/touchMoved">touchMoved()</a> function is called every time a touch move is registered.
           * If no <a href="#/p5/touchMoved">touchMoved()</a> function is defined, the <a href="#/p5/mouseDragged">mouseDragged()</a> function will
           * be called instead if it is defined.<br><br>
           * Browsers may have different default behaviors attached to various touch
           * events. To prevent any default behavior for this event, add "return false"
           * to the end of the method.
           *
           * @method touchMoved
           * @param  {Object} [event] optional TouchEvent callback argument.
           * @example
           * <div>
           * <code>
           * // Move your finger across the page
           * // to change its value
           *
           * let value = 0;
           * function draw() {
           *   fill(value);
           *   rect(25, 25, 50, 50);
           * }
           * function touchMoved() {
           *   value = value + 5;
           *   if (value > 255) {
           *     value = 0;
           *   }
           * }
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * function touchMoved() {
           *   ellipse(mouseX, mouseY, 5, 5);
           *   // prevent default
           *   return false;
           * }
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * // returns a TouchEvent object
           * // as a callback argument
           * function touchMoved(event) {
           *   console.log(event);
           * }
           * </code>
           * </div>
           *
           * @alt
           * 50x50 black rect turns lighter with touch until white. resets
           * no image displayed
           */ cov_1sno2ujyov.s[27]++;
          _main.default.prototype._ontouchmove = function(e) {
            cov_1sno2ujyov.f[3]++;
            var context = (cov_1sno2ujyov.s[28]++,
            this._isGlobal
              ? (cov_1sno2ujyov.b[11][0]++, window)
              : (cov_1sno2ujyov.b[11][1]++, this));
            var executeDefault;
            cov_1sno2ujyov.s[29]++;
            this._updateTouchCoords(e);
            cov_1sno2ujyov.s[30]++;
            this._updateNextMouseCoords(e);
            cov_1sno2ujyov.s[31]++;
            if (typeof context.touchMoved === 'function') {
              cov_1sno2ujyov.b[12][0]++;
              cov_1sno2ujyov.s[32]++;
              executeDefault = context.touchMoved(e);
              cov_1sno2ujyov.s[33]++;
              if (executeDefault === false) {
                cov_1sno2ujyov.b[13][0]++;
                cov_1sno2ujyov.s[34]++;
                e.preventDefault();
              } else {
                cov_1sno2ujyov.b[13][1]++;
              }
            } else {
              cov_1sno2ujyov.b[12][1]++;
              cov_1sno2ujyov.s[35]++;
              if (typeof context.mouseDragged === 'function') {
                cov_1sno2ujyov.b[14][0]++;
                cov_1sno2ujyov.s[36]++;
                executeDefault = context.mouseDragged(e);
                cov_1sno2ujyov.s[37]++;
                if (executeDefault === false) {
                  cov_1sno2ujyov.b[15][0]++;
                  cov_1sno2ujyov.s[38]++;
                  e.preventDefault();
                } else {
                  cov_1sno2ujyov.b[15][1]++;
                }
              } else {
                cov_1sno2ujyov.b[14][1]++;
              }
            }
          };

          /**
           * The <a href="#/p5/touchEnded">touchEnded()</a> function is called every time a touch ends. If no
           * <a href="#/p5/touchEnded">touchEnded()</a> function is defined, the <a href="#/p5/mouseReleased">mouseReleased()</a> function will be
           * called instead if it is defined.<br><br>
           * Browsers may have different default behaviors attached to various touch
           * events. To prevent any default behavior for this event, add "return false"
           * to the end of the method.
           *
           * @method touchEnded
           * @param  {Object} [event] optional TouchEvent callback argument.
           * @example
           * <div>
           * <code>
           * // Release touch within the image to
           * // change the value of the rectangle
           *
           * let value = 0;
           * function draw() {
           *   fill(value);
           *   rect(25, 25, 50, 50);
           * }
           * function touchEnded() {
           *   if (value === 0) {
           *     value = 255;
           *   } else {
           *     value = 0;
           *   }
           * }
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * function touchEnded() {
           *   ellipse(mouseX, mouseY, 5, 5);
           *   // prevent default
           *   return false;
           * }
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * // returns a TouchEvent object
           * // as a callback argument
           * function touchEnded(event) {
           *   console.log(event);
           * }
           * </code>
           * </div>
           *
           * @alt
           * 50x50 black rect turns white with touch.
           * no image displayed
           */ cov_1sno2ujyov.s[39]++;
          _main.default.prototype._ontouchend = function(e) {
            cov_1sno2ujyov.f[4]++;
            cov_1sno2ujyov.s[40]++;
            this._setProperty('mouseIsPressed', false);
            cov_1sno2ujyov.s[41]++;
            this._updateTouchCoords(e);
            cov_1sno2ujyov.s[42]++;
            this._updateNextMouseCoords(e);
            var context = (cov_1sno2ujyov.s[43]++,
            this._isGlobal
              ? (cov_1sno2ujyov.b[16][0]++, window)
              : (cov_1sno2ujyov.b[16][1]++, this));
            var executeDefault;
            cov_1sno2ujyov.s[44]++;
            if (typeof context.touchEnded === 'function') {
              cov_1sno2ujyov.b[17][0]++;
              cov_1sno2ujyov.s[45]++;
              executeDefault = context.touchEnded(e);
              cov_1sno2ujyov.s[46]++;
              if (executeDefault === false) {
                cov_1sno2ujyov.b[18][0]++;
                cov_1sno2ujyov.s[47]++;
                e.preventDefault();
              } else {
                cov_1sno2ujyov.b[18][1]++;
              }
            } else {
              cov_1sno2ujyov.b[17][1]++;
              cov_1sno2ujyov.s[48]++;
              if (typeof context.mouseReleased === 'function') {
                cov_1sno2ujyov.b[19][0]++;
                cov_1sno2ujyov.s[49]++;
                executeDefault = context.mouseReleased(e);
                cov_1sno2ujyov.s[50]++;
                if (executeDefault === false) {
                  cov_1sno2ujyov.b[20][0]++;
                  cov_1sno2ujyov.s[51]++;
                  e.preventDefault();
                } else {
                  cov_1sno2ujyov.b[20][1]++;
                }
              } else {
                cov_1sno2ujyov.b[19][1]++;
              }
            }
          };
          var _default = _main.default;
          exports.default = _default;
        },
        {
          '../core/main': 283,
          'core-js/modules/es.array.includes': 172,
          'core-js/modules/es.string.includes': 200
        }
      ],
      304: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_2x55mw1zb = (function() {
            var path = '/Users/outofambit/src/p5.js/src/image/filters.js';
            var hash = '74688143f0bc53c5026f22df81b9d49712334065';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/image/filters.js',
              statementMap: {
                '0': { start: { line: 18, column: 16 }, end: { line: 18, column: 18 } },
                '1': { start: { line: 34, column: 0 }, end: { line: 58, column: 2 } },
                '2': { start: { line: 35, column: 2 }, end: { line: 57, column: 3 } },
                '3': { start: { line: 36, column: 4 }, end: { line: 36, column: 23 } },
                '4': { start: { line: 38, column: 4 }, end: { line: 56, column: 5 } },
                '5': { start: { line: 39, column: 6 }, end: { line: 41, column: 62 } },
                '6': { start: { line: 42, column: 11 }, end: { line: 56, column: 5 } },
                '7': { start: { line: 43, column: 17 }, end: { line: 43, column: 43 } },
                '8': { start: { line: 44, column: 18 }, end: { line: 44, column: 68 } },
                '9': { start: { line: 45, column: 19 }, end: { line: 45, column: 38 } },
                '10': { start: { line: 46, column: 6 }, end: { line: 54, column: 8 } },
                '11': { start: { line: 55, column: 6 }, end: { line: 55, column: 18 } },
                '12': { start: { line: 71, column: 0 }, end: { line: 79, column: 2 } },
                '13': { start: { line: 72, column: 17 }, end: { line: 72, column: 22 } },
                '14': { start: { line: 73, column: 2 }, end: { line: 78, column: 4 } },
                '15': { start: { line: 90, column: 0 }, end: { line: 99, column: 2 } },
                '16': { start: { line: 91, column: 15 }, end: { line: 91, column: 16 } },
                '17': { start: { line: 92, column: 2 }, end: { line: 98, column: 3 } },
                '18': { start: { line: 92, column: 15 }, end: { line: 92, column: 16 } },
                '19': { start: { line: 92, column: 23 }, end: { line: 92, column: 36 } },
                '20': { start: { line: 93, column: 4 }, end: { line: 93, column: 19 } },
                '21': { start: { line: 94, column: 4 }, end: { line: 94, column: 55 } },
                '22': { start: { line: 95, column: 4 }, end: { line: 95, column: 54 } },
                '23': { start: { line: 96, column: 4 }, end: { line: 96, column: 46 } },
                '24': { start: { line: 97, column: 4 }, end: { line: 97, column: 55 } },
                '25': { start: { line: 111, column: 0 }, end: { line: 119, column: 2 } },
                '26': { start: { line: 112, column: 2 }, end: { line: 118, column: 3 } },
                '27': { start: { line: 113, column: 4 }, end: { line: 113, column: 18 } },
                '28': { start: { line: 115, column: 4 }, end: { line: 117, column: 55 } },
                '29': { start: { line: 130, column: 0 }, end: { line: 134, column: 2 } },
                '30': { start: { line: 131, column: 2 }, end: { line: 131, column: 56 } },
                '31': { start: { line: 132, column: 2 }, end: { line: 132, column: 56 } },
                '32': { start: { line: 133, column: 2 }, end: { line: 133, column: 53 } },
                '33': { start: { line: 155, column: 0 }, end: { line: 183, column: 2 } },
                '34': { start: { line: 156, column: 22 }, end: { line: 156, column: 45 } },
                '35': { start: { line: 157, column: 20 }, end: { line: 157, column: 79 } },
                '36': { start: { line: 161, column: 23 }, end: { line: 161, column: 51 } },
                '37': { start: { line: 162, column: 2 }, end: { line: 182, column: 3 } },
                '38': { start: { line: 163, column: 4 }, end: { line: 171, column: 6 } },
                '39': { start: { line: 173, column: 4 }, end: { line: 181, column: 6 } },
                '40': { start: { line: 200, column: 0 }, end: { line: 221, column: 2 } },
                '41': { start: { line: 201, column: 17 }, end: { line: 201, column: 42 } },
                '42': { start: { line: 203, column: 2 }, end: { line: 205, column: 3 } },
                '43': { start: { line: 204, column: 4 }, end: { line: 204, column: 16 } },
                '44': { start: { line: 206, column: 17 }, end: { line: 206, column: 40 } },
                '45': { start: { line: 208, column: 2 }, end: { line: 220, column: 3 } },
                '46': { start: { line: 208, column: 15 }, end: { line: 208, column: 16 } },
                '47': { start: { line: 209, column: 14 }, end: { line: 209, column: 23 } },
                '48': { start: { line: 210, column: 14 }, end: { line: 210, column: 27 } },
                '49': { start: { line: 211, column: 14 }, end: { line: 211, column: 27 } },
                '50': { start: { line: 212, column: 17 }, end: { line: 212, column: 53 } },
                '51': { start: { line: 214, column: 4 }, end: { line: 218, column: 5 } },
                '52': { start: { line: 215, column: 6 }, end: { line: 215, column: 16 } },
                '53': { start: { line: 217, column: 6 }, end: { line: 217, column: 14 } },
                '54': { start: { line: 219, column: 4 }, end: { line: 219, column: 52 } },
                '55': { start: { line: 232, column: 0 }, end: { line: 244, column: 2 } },
                '56': { start: { line: 233, column: 17 }, end: { line: 233, column: 42 } },
                '57': { start: { line: 235, column: 2 }, end: { line: 243, column: 3 } },
                '58': { start: { line: 235, column: 15 }, end: { line: 235, column: 16 } },
                '59': { start: { line: 236, column: 14 }, end: { line: 236, column: 23 } },
                '60': { start: { line: 237, column: 14 }, end: { line: 237, column: 27 } },
                '61': { start: { line: 238, column: 14 }, end: { line: 238, column: 27 } },
                '62': { start: { line: 241, column: 17 }, end: { line: 241, column: 53 } },
                '63': { start: { line: 242, column: 4 }, end: { line: 242, column: 53 } },
                '64': { start: { line: 252, column: 0 }, end: { line: 260, column: 2 } },
                '65': { start: { line: 253, column: 17 }, end: { line: 253, column: 42 } },
                '66': { start: { line: 255, column: 2 }, end: { line: 257, column: 3 } },
                '67': { start: { line: 255, column: 15 }, end: { line: 255, column: 16 } },
                '68': { start: { line: 256, column: 4 }, end: { line: 256, column: 24 } },
                '69': { start: { line: 259, column: 2 }, end: { line: 259, column: 16 } },
                '70': { start: { line: 267, column: 0 }, end: { line: 275, column: 2 } },
                '71': { start: { line: 268, column: 17 }, end: { line: 268, column: 42 } },
                '72': { start: { line: 270, column: 2 }, end: { line: 274, column: 3 } },
                '73': { start: { line: 270, column: 15 }, end: { line: 270, column: 16 } },
                '74': { start: { line: 271, column: 4 }, end: { line: 271, column: 32 } },
                '75': { start: { line: 272, column: 4 }, end: { line: 272, column: 40 } },
                '76': { start: { line: 273, column: 4 }, end: { line: 273, column: 40 } },
                '77': { start: { line: 288, column: 0 }, end: { line: 307, column: 2 } },
                '78': { start: { line: 289, column: 17 }, end: { line: 289, column: 42 } },
                '79': { start: { line: 291, column: 2 }, end: { line: 295, column: 3 } },
                '80': { start: { line: 292, column: 4 }, end: { line: 294, column: 6 } },
                '81': { start: { line: 297, column: 18 }, end: { line: 297, column: 27 } },
                '82': { start: { line: 298, column: 2 }, end: { line: 306, column: 3 } },
                '83': { start: { line: 298, column: 15 }, end: { line: 298, column: 16 } },
                '84': { start: { line: 299, column: 19 }, end: { line: 299, column: 28 } },
                '85': { start: { line: 300, column: 19 }, end: { line: 300, column: 32 } },
                '86': { start: { line: 301, column: 19 }, end: { line: 301, column: 32 } },
                '87': { start: { line: 303, column: 4 }, end: { line: 303, column: 56 } },
                '88': { start: { line: 304, column: 4 }, end: { line: 304, column: 60 } },
                '89': { start: { line: 305, column: 4 }, end: { line: 305, column: 60 } },
                '90': { start: { line: 314, column: 0 }, end: { line: 394, column: 2 } },
                '91': { start: { line: 315, column: 17 }, end: { line: 315, column: 42 } },
                '92': { start: { line: 316, column: 16 }, end: { line: 316, column: 17 } },
                '93': { start: { line: 317, column: 17 }, end: { line: 317, column: 54 } },
                '94': { start: { line: 318, column: 14 }, end: { line: 318, column: 36 } },
                '95': { start: { line: 325, column: 2 }, end: { line: 392, column: 3 } },
                '96': { start: { line: 326, column: 4 }, end: { line: 326, column: 25 } },
                '97': { start: { line: 327, column: 4 }, end: { line: 327, column: 39 } },
                '98': { start: { line: 328, column: 4 }, end: { line: 391, column: 5 } },
                '99': { start: { line: 329, column: 6 }, end: { line: 329, column: 59 } },
                '100': { start: { line: 330, column: 6 }, end: { line: 330, column: 28 } },
                '101': { start: { line: 331, column: 6 }, end: { line: 331, column: 29 } },
                '102': { start: { line: 332, column: 6 }, end: { line: 332, column: 37 } },
                '103': { start: { line: 333, column: 6 }, end: { line: 333, column: 39 } },
                '104': { start: { line: 335, column: 6 }, end: { line: 337, column: 7 } },
                '105': { start: { line: 336, column: 8 }, end: { line: 336, column: 26 } },
                '106': { start: { line: 338, column: 6 }, end: { line: 340, column: 7 } },
                '107': { start: { line: 339, column: 8 }, end: { line: 339, column: 27 } },
                '108': { start: { line: 341, column: 6 }, end: { line: 343, column: 7 } },
                '109': { start: { line: 342, column: 8 }, end: { line: 342, column: 18 } },
                '110': { start: { line: 344, column: 6 }, end: { line: 346, column: 7 } },
                '111': { start: { line: 345, column: 8 }, end: { line: 345, column: 26 } },
                '112': { start: { line: 347, column: 6 }, end: { line: 347, column: 46 } },
                '113': { start: { line: 348, column: 6 }, end: { line: 348, column: 50 } },
                '114': { start: { line: 349, column: 6 }, end: { line: 349, column: 50 } },
                '115': { start: { line: 350, column: 6 }, end: { line: 350, column: 52 } },
                '116': { start: { line: 353, column: 6 }, end: { line: 356, column: 30 } },
                '117': { start: { line: 357, column: 6 }, end: { line: 360, column: 30 } },
                '118': { start: { line: 361, column: 6 }, end: { line: 364, column: 31 } },
                '119': { start: { line: 365, column: 6 }, end: { line: 368, column: 28 } },
                '120': { start: { line: 369, column: 6 }, end: { line: 372, column: 30 } },
                '121': { start: { line: 374, column: 6 }, end: { line: 377, column: 7 } },
                '122': { start: { line: 375, column: 8 }, end: { line: 375, column: 25 } },
                '123': { start: { line: 376, column: 8 }, end: { line: 376, column: 26 } },
                '124': { start: { line: 378, column: 6 }, end: { line: 381, column: 7 } },
                '125': { start: { line: 379, column: 8 }, end: { line: 379, column: 26 } },
                '126': { start: { line: 380, column: 8 }, end: { line: 380, column: 27 } },
                '127': { start: { line: 382, column: 6 }, end: { line: 385, column: 7 } },
                '128': { start: { line: 383, column: 8 }, end: { line: 383, column: 23 } },
                '129': { start: { line: 384, column: 8 }, end: { line: 384, column: 24 } },
                '130': { start: { line: 386, column: 6 }, end: { line: 389, column: 7 } },
                '131': { start: { line: 387, column: 8 }, end: { line: 387, column: 25 } },
                '132': { start: { line: 388, column: 8 }, end: { line: 388, column: 26 } },
                '133': { start: { line: 390, column: 6 }, end: { line: 390, column: 30 } },
                '134': { start: { line: 393, column: 2 }, end: { line: 393, column: 34 } },
                '135': { start: { line: 401, column: 0 }, end: { line: 481, column: 2 } },
                '136': { start: { line: 402, column: 17 }, end: { line: 402, column: 42 } },
                '137': { start: { line: 403, column: 16 }, end: { line: 403, column: 17 } },
                '138': { start: { line: 404, column: 17 }, end: { line: 404, column: 54 } },
                '139': { start: { line: 405, column: 14 }, end: { line: 405, column: 36 } },
                '140': { start: { line: 411, column: 2 }, end: { line: 479, column: 3 } },
                '141': { start: { line: 412, column: 4 }, end: { line: 412, column: 25 } },
                '142': { start: { line: 413, column: 4 }, end: { line: 413, column: 39 } },
                '143': { start: { line: 414, column: 4 }, end: { line: 478, column: 5 } },
                '144': { start: { line: 415, column: 6 }, end: { line: 415, column: 59 } },
                '145': { start: { line: 416, column: 6 }, end: { line: 416, column: 28 } },
                '146': { start: { line: 417, column: 6 }, end: { line: 417, column: 29 } },
                '147': { start: { line: 418, column: 6 }, end: { line: 418, column: 37 } },
                '148': { start: { line: 419, column: 6 }, end: { line: 419, column: 39 } },
                '149': { start: { line: 421, column: 6 }, end: { line: 423, column: 7 } },
                '150': { start: { line: 422, column: 8 }, end: { line: 422, column: 26 } },
                '151': { start: { line: 424, column: 6 }, end: { line: 426, column: 7 } },
                '152': { start: { line: 425, column: 8 }, end: { line: 425, column: 27 } },
                '153': { start: { line: 427, column: 6 }, end: { line: 429, column: 7 } },
                '154': { start: { line: 428, column: 8 }, end: { line: 428, column: 18 } },
                '155': { start: { line: 430, column: 6 }, end: { line: 432, column: 7 } },
                '156': { start: { line: 431, column: 8 }, end: { line: 431, column: 26 } },
                '157': { start: { line: 433, column: 6 }, end: { line: 433, column: 46 } },
                '158': { start: { line: 434, column: 6 }, end: { line: 434, column: 50 } },
                '159': { start: { line: 435, column: 6 }, end: { line: 435, column: 50 } },
                '160': { start: { line: 436, column: 6 }, end: { line: 436, column: 52 } },
                '161': { start: { line: 439, column: 6 }, end: { line: 442, column: 30 } },
                '162': { start: { line: 443, column: 6 }, end: { line: 446, column: 30 } },
                '163': { start: { line: 447, column: 6 }, end: { line: 450, column: 31 } },
                '164': { start: { line: 451, column: 6 }, end: { line: 454, column: 28 } },
                '165': { start: { line: 455, column: 6 }, end: { line: 458, column: 30 } },
                '166': { start: { line: 460, column: 6 }, end: { line: 463, column: 7 } },
                '167': { start: { line: 461, column: 8 }, end: { line: 461, column: 25 } },
                '168': { start: { line: 462, column: 8 }, end: { line: 462, column: 26 } },
                '169': { start: { line: 464, column: 6 }, end: { line: 467, column: 7 } },
                '170': { start: { line: 465, column: 8 }, end: { line: 465, column: 26 } },
                '171': { start: { line: 466, column: 8 }, end: { line: 466, column: 27 } },
                '172': { start: { line: 468, column: 6 }, end: { line: 471, column: 7 } },
                '173': { start: { line: 469, column: 8 }, end: { line: 469, column: 23 } },
                '174': { start: { line: 470, column: 8 }, end: { line: 470, column: 24 } },
                '175': { start: { line: 472, column: 6 }, end: { line: 475, column: 7 } },
                '176': { start: { line: 473, column: 8 }, end: { line: 473, column: 25 } },
                '177': { start: { line: 474, column: 8 }, end: { line: 474, column: 26 } },
                '178': { start: { line: 477, column: 6 }, end: { line: 477, column: 30 } },
                '179': { start: { line: 480, column: 2 }, end: { line: 480, column: 34 } },
                '180': { start: { line: 502, column: 15 }, end: { line: 502, column: 28 } },
                '181': { start: { line: 503, column: 2 }, end: { line: 503, column: 56 } },
                '182': { start: { line: 505, column: 2 }, end: { line: 531, column: 3 } },
                '183': { start: { line: 506, column: 4 }, end: { line: 506, column: 24 } },
                '184': { start: { line: 507, column: 4 }, end: { line: 507, column: 43 } },
                '185': { start: { line: 508, column: 4 }, end: { line: 508, column: 48 } },
                '186': { start: { line: 509, column: 4 }, end: { line: 509, column: 41 } },
                '187': { start: { line: 510, column: 4 }, end: { line: 512, column: 5 } },
                '188': { start: { line: 510, column: 17 }, end: { line: 510, column: 18 } },
                '189': { start: { line: 511, column: 6 }, end: { line: 511, column: 40 } },
                '190': { start: { line: 517, column: 4 }, end: { line: 524, column: 5 } },
                '191': { start: { line: 517, column: 17 }, end: { line: 517, column: 18 } },
                '192': { start: { line: 517, column: 30 }, end: { line: 517, column: 40 } },
                '193': { start: { line: 518, column: 6 }, end: { line: 518, column: 77 } },
                '194': { start: { line: 519, column: 6 }, end: { line: 519, column: 32 } },
                '195': { start: { line: 520, column: 6 }, end: { line: 520, column: 32 } },
                '196': { start: { line: 521, column: 6 }, end: { line: 523, column: 7 } },
                '197': { start: { line: 521, column: 19 }, end: { line: 521, column: 20 } },
                '198': { start: { line: 522, column: 8 }, end: { line: 522, column: 33 } },
                '199': { start: { line: 525, column: 4 }, end: { line: 525, column: 46 } },
                '200': { start: { line: 526, column: 4 }, end: { line: 526, column: 26 } },
                '201': { start: { line: 528, column: 4 }, end: { line: 530, column: 5 } },
                '202': { start: { line: 528, column: 17 }, end: { line: 528, column: 18 } },
                '203': { start: { line: 529, column: 6 }, end: { line: 529, column: 21 } },
                '204': { start: { line: 537, column: 17 }, end: { line: 537, column: 42 } },
                '205': { start: { line: 538, column: 16 }, end: { line: 538, column: 28 } },
                '206': { start: { line: 539, column: 17 }, end: { line: 539, column: 30 } },
                '207': { start: { line: 540, column: 26 }, end: { line: 540, column: 40 } },
                '208': { start: { line: 541, column: 15 }, end: { line: 541, column: 46 } },
                '209': { start: { line: 542, column: 2 }, end: { line: 544, column: 3 } },
                '210': { start: { line: 542, column: 15 }, end: { line: 542, column: 16 } },
                '211': { start: { line: 543, column: 4 }, end: { line: 543, column: 42 } },
                '212': { start: { line: 547, column: 13 }, end: { line: 547, column: 44 } },
                '213': { start: { line: 548, column: 13 }, end: { line: 548, column: 44 } },
                '214': { start: { line: 549, column: 13 }, end: { line: 549, column: 44 } },
                '215': { start: { line: 550, column: 13 }, end: { line: 550, column: 44 } },
                '216': { start: { line: 551, column: 11 }, end: { line: 551, column: 12 } },
                '217': { start: { line: 552, column: 2 }, end: { line: 552, column: 26 } },
                '218': { start: { line: 555, column: 2 }, end: { line: 588, column: 3 } },
                '219': { start: { line: 556, column: 4 }, end: { line: 586, column: 5 } },
                '220': { start: { line: 557, column: 6 }, end: { line: 557, column: 34 } },
                '221': { start: { line: 558, column: 6 }, end: { line: 558, column: 28 } },
                '222': { start: { line: 559, column: 6 }, end: { line: 567, column: 7 } },
                '223': { start: { line: 560, column: 8 }, end: { line: 560, column: 20 } },
                '224': { start: { line: 561, column: 8 }, end: { line: 561, column: 17 } },
                '225': { start: { line: 563, column: 8 }, end: { line: 565, column: 9 } },
                '226': { start: { line: 564, column: 10 }, end: { line: 564, column: 16 } },
                '227': { start: { line: 566, column: 8 }, end: { line: 566, column: 16 } },
                '228': { start: { line: 568, column: 6 }, end: { line: 580, column: 7 } },
                '229': { start: { line: 569, column: 8 }, end: { line: 571, column: 9 } },
                '230': { start: { line: 570, column: 10 }, end: { line: 570, column: 16 } },
                '231': { start: { line: 572, column: 18 }, end: { line: 572, column: 33 } },
                '232': { start: { line: 573, column: 8 }, end: { line: 573, column: 25 } },
                '233': { start: { line: 574, column: 8 }, end: { line: 574, column: 41 } },
                '234': { start: { line: 575, column: 8 }, end: { line: 575, column: 39 } },
                '235': { start: { line: 576, column: 8 }, end: { line: 576, column: 35 } },
                '236': { start: { line: 577, column: 8 }, end: { line: 577, column: 26 } },
                '237': { start: { line: 578, column: 8 }, end: { line: 578, column: 29 } },
                '238': { start: { line: 579, column: 8 }, end: { line: 579, column: 15 } },
                '239': { start: { line: 581, column: 6 }, end: { line: 581, column: 18 } },
                '240': { start: { line: 582, column: 6 }, end: { line: 582, column: 24 } },
                '241': { start: { line: 583, column: 6 }, end: { line: 583, column: 24 } },
                '242': { start: { line: 584, column: 6 }, end: { line: 584, column: 24 } },
                '243': { start: { line: 585, column: 6 }, end: { line: 585, column: 24 } },
                '244': { start: { line: 587, column: 4 }, end: { line: 587, column: 16 } },
                '245': { start: { line: 589, column: 2 }, end: { line: 589, column: 9 } },
                '246': { start: { line: 590, column: 2 }, end: { line: 590, column: 19 } },
                '247': { start: { line: 591, column: 2 }, end: { line: 591, column: 19 } },
                '248': { start: { line: 592, column: 2 }, end: { line: 628, column: 3 } },
                '249': { start: { line: 593, column: 4 }, end: { line: 624, column: 5 } },
                '250': { start: { line: 594, column: 6 }, end: { line: 594, column: 34 } },
                '251': { start: { line: 595, column: 6 }, end: { line: 605, column: 7 } },
                '252': { start: { line: 596, column: 8 }, end: { line: 596, column: 23 } },
                '253': { start: { line: 597, column: 8 }, end: { line: 597, column: 17 } },
                '254': { start: { line: 599, column: 8 }, end: { line: 601, column: 9 } },
                '255': { start: { line: 600, column: 10 }, end: { line: 600, column: 16 } },
                '256': { start: { line: 602, column: 8 }, end: { line: 602, column: 16 } },
                '257': { start: { line: 603, column: 8 }, end: { line: 603, column: 16 } },
                '258': { start: { line: 604, column: 8 }, end: { line: 604, column: 23 } },
                '259': { start: { line: 606, column: 6 }, end: { line: 618, column: 7 } },
                '260': { start: { line: 607, column: 8 }, end: { line: 609, column: 9 } },
                '261': { start: { line: 608, column: 10 }, end: { line: 608, column: 16 } },
                '262': { start: { line: 610, column: 8 }, end: { line: 610, column: 25 } },
                '263': { start: { line: 611, column: 8 }, end: { line: 611, column: 27 } },
                '264': { start: { line: 612, column: 8 }, end: { line: 612, column: 27 } },
                '265': { start: { line: 613, column: 8 }, end: { line: 613, column: 27 } },
                '266': { start: { line: 614, column: 8 }, end: { line: 614, column: 27 } },
                '267': { start: { line: 615, column: 8 }, end: { line: 615, column: 29 } },
                '268': { start: { line: 616, column: 8 }, end: { line: 616, column: 13 } },
                '269': { start: { line: 617, column: 8 }, end: { line: 617, column: 22 } },
                '270': { start: { line: 619, column: 6 }, end: { line: 623, column: 19 } },
                '271': { start: { line: 625, column: 4 }, end: { line: 625, column: 16 } },
                '272': { start: { line: 626, column: 4 }, end: { line: 626, column: 17 } },
                '273': { start: { line: 627, column: 4 }, end: { line: 627, column: 9 } },
                '274': { start: { line: 629, column: 2 }, end: { line: 629, column: 35 } },
                '275': { start: { line: 632, column: 0 }, end: { line: 634, column: 2 } },
                '276': { start: { line: 633, column: 2 }, end: { line: 633, column: 27 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 34, column: 20 }, end: { line: 34, column: 21 } },
                  loc: { start: { line: 34, column: 37 }, end: { line: 58, column: 1 } },
                  line: 34
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 71, column: 19 }, end: { line: 71, column: 20 } },
                  loc: { start: { line: 71, column: 37 }, end: { line: 79, column: 1 } },
                  line: 71
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: { start: { line: 90, column: 21 }, end: { line: 90, column: 22 } },
                  loc: { start: { line: 90, column: 44 }, end: { line: 99, column: 1 } },
                  line: 90
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 111, column: 23 },
                    end: { line: 111, column: 24 }
                  },
                  loc: { start: { line: 111, column: 40 }, end: { line: 119, column: 1 } },
                  line: 111
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 130, column: 27 },
                    end: { line: 130, column: 28 }
                  },
                  loc: { start: { line: 130, column: 51 }, end: { line: 134, column: 1 } },
                  line: 130
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 155, column: 16 },
                    end: { line: 155, column: 17 }
                  },
                  loc: { start: { line: 155, column: 52 }, end: { line: 183, column: 1 } },
                  line: 155
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 200, column: 20 },
                    end: { line: 200, column: 21 }
                  },
                  loc: { start: { line: 200, column: 44 }, end: { line: 221, column: 1 } },
                  line: 200
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 232, column: 15 },
                    end: { line: 232, column: 16 }
                  },
                  loc: { start: { line: 232, column: 32 }, end: { line: 244, column: 1 } },
                  line: 232
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 252, column: 17 },
                    end: { line: 252, column: 18 }
                  },
                  loc: { start: { line: 252, column: 34 }, end: { line: 260, column: 1 } },
                  line: 252
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 267, column: 17 },
                    end: { line: 267, column: 18 }
                  },
                  loc: { start: { line: 267, column: 34 }, end: { line: 275, column: 1 } },
                  line: 267
                },
                '10': {
                  name: '(anonymous_10)',
                  decl: {
                    start: { line: 288, column: 20 },
                    end: { line: 288, column: 21 }
                  },
                  loc: { start: { line: 288, column: 44 }, end: { line: 307, column: 1 } },
                  line: 288
                },
                '11': {
                  name: '(anonymous_11)',
                  decl: {
                    start: { line: 314, column: 17 },
                    end: { line: 314, column: 18 }
                  },
                  loc: { start: { line: 314, column: 34 }, end: { line: 394, column: 1 } },
                  line: 314
                },
                '12': {
                  name: '(anonymous_12)',
                  decl: {
                    start: { line: 401, column: 16 },
                    end: { line: 401, column: 17 }
                  },
                  loc: { start: { line: 401, column: 33 }, end: { line: 481, column: 1 } },
                  line: 401
                },
                '13': {
                  name: 'buildBlurKernel',
                  decl: { start: { line: 501, column: 9 }, end: { line: 501, column: 24 } },
                  loc: { start: { line: 501, column: 28 }, end: { line: 532, column: 1 } },
                  line: 501
                },
                '14': {
                  name: 'blurARGB',
                  decl: { start: { line: 536, column: 9 }, end: { line: 536, column: 17 } },
                  loc: { start: { line: 536, column: 34 }, end: { line: 630, column: 1 } },
                  line: 536
                },
                '15': {
                  name: '(anonymous_15)',
                  decl: {
                    start: { line: 632, column: 15 },
                    end: { line: 632, column: 16 }
                  },
                  loc: { start: { line: 632, column: 40 }, end: { line: 634, column: 1 } },
                  line: 632
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 35, column: 2 }, end: { line: 57, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 35, column: 2 }, end: { line: 57, column: 3 } },
                    { start: { line: 35, column: 2 }, end: { line: 57, column: 3 } }
                  ],
                  line: 35
                },
                '1': {
                  loc: { start: { line: 38, column: 4 }, end: { line: 56, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 38, column: 4 }, end: { line: 56, column: 5 } },
                    { start: { line: 38, column: 4 }, end: { line: 56, column: 5 } }
                  ],
                  line: 38
                },
                '2': {
                  loc: { start: { line: 42, column: 11 }, end: { line: 56, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 42, column: 11 }, end: { line: 56, column: 5 } },
                    { start: { line: 42, column: 11 }, end: { line: 56, column: 5 } }
                  ],
                  line: 42
                },
                '3': {
                  loc: { start: { line: 112, column: 2 }, end: { line: 118, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 112, column: 2 }, end: { line: 118, column: 3 } },
                    { start: { line: 112, column: 2 }, end: { line: 118, column: 3 } }
                  ],
                  line: 112
                },
                '4': {
                  loc: { start: { line: 162, column: 2 }, end: { line: 182, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 162, column: 2 }, end: { line: 182, column: 3 } },
                    { start: { line: 162, column: 2 }, end: { line: 182, column: 3 } }
                  ],
                  line: 162
                },
                '5': {
                  loc: { start: { line: 203, column: 2 }, end: { line: 205, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 203, column: 2 }, end: { line: 205, column: 3 } },
                    { start: { line: 203, column: 2 }, end: { line: 205, column: 3 } }
                  ],
                  line: 203
                },
                '6': {
                  loc: { start: { line: 214, column: 4 }, end: { line: 218, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 214, column: 4 }, end: { line: 218, column: 5 } },
                    { start: { line: 214, column: 4 }, end: { line: 218, column: 5 } }
                  ],
                  line: 214
                },
                '7': {
                  loc: { start: { line: 291, column: 2 }, end: { line: 295, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 291, column: 2 }, end: { line: 295, column: 3 } },
                    { start: { line: 291, column: 2 }, end: { line: 295, column: 3 } }
                  ],
                  line: 291
                },
                '8': {
                  loc: { start: { line: 291, column: 6 }, end: { line: 291, column: 30 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 291, column: 6 }, end: { line: 291, column: 15 } },
                    { start: { line: 291, column: 19 }, end: { line: 291, column: 30 } }
                  ],
                  line: 291
                },
                '9': {
                  loc: { start: { line: 317, column: 17 }, end: { line: 317, column: 54 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 317, column: 33 }, end: { line: 317, column: 50 } },
                    { start: { line: 317, column: 53 }, end: { line: 317, column: 54 } }
                  ],
                  line: 317
                },
                '10': {
                  loc: { start: { line: 335, column: 6 }, end: { line: 337, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 335, column: 6 }, end: { line: 337, column: 7 } },
                    { start: { line: 335, column: 6 }, end: { line: 337, column: 7 } }
                  ],
                  line: 335
                },
                '11': {
                  loc: { start: { line: 338, column: 6 }, end: { line: 340, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 338, column: 6 }, end: { line: 340, column: 7 } },
                    { start: { line: 338, column: 6 }, end: { line: 340, column: 7 } }
                  ],
                  line: 338
                },
                '12': {
                  loc: { start: { line: 341, column: 6 }, end: { line: 343, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 341, column: 6 }, end: { line: 343, column: 7 } },
                    { start: { line: 341, column: 6 }, end: { line: 343, column: 7 } }
                  ],
                  line: 341
                },
                '13': {
                  loc: { start: { line: 344, column: 6 }, end: { line: 346, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 344, column: 6 }, end: { line: 346, column: 7 } },
                    { start: { line: 344, column: 6 }, end: { line: 346, column: 7 } }
                  ],
                  line: 344
                },
                '14': {
                  loc: { start: { line: 374, column: 6 }, end: { line: 377, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 374, column: 6 }, end: { line: 377, column: 7 } },
                    { start: { line: 374, column: 6 }, end: { line: 377, column: 7 } }
                  ],
                  line: 374
                },
                '15': {
                  loc: { start: { line: 378, column: 6 }, end: { line: 381, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 378, column: 6 }, end: { line: 381, column: 7 } },
                    { start: { line: 378, column: 6 }, end: { line: 381, column: 7 } }
                  ],
                  line: 378
                },
                '16': {
                  loc: { start: { line: 382, column: 6 }, end: { line: 385, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 382, column: 6 }, end: { line: 385, column: 7 } },
                    { start: { line: 382, column: 6 }, end: { line: 385, column: 7 } }
                  ],
                  line: 382
                },
                '17': {
                  loc: { start: { line: 386, column: 6 }, end: { line: 389, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 386, column: 6 }, end: { line: 389, column: 7 } },
                    { start: { line: 386, column: 6 }, end: { line: 389, column: 7 } }
                  ],
                  line: 386
                },
                '18': {
                  loc: { start: { line: 404, column: 17 }, end: { line: 404, column: 54 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 404, column: 33 }, end: { line: 404, column: 50 } },
                    { start: { line: 404, column: 53 }, end: { line: 404, column: 54 } }
                  ],
                  line: 404
                },
                '19': {
                  loc: { start: { line: 421, column: 6 }, end: { line: 423, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 421, column: 6 }, end: { line: 423, column: 7 } },
                    { start: { line: 421, column: 6 }, end: { line: 423, column: 7 } }
                  ],
                  line: 421
                },
                '20': {
                  loc: { start: { line: 424, column: 6 }, end: { line: 426, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 424, column: 6 }, end: { line: 426, column: 7 } },
                    { start: { line: 424, column: 6 }, end: { line: 426, column: 7 } }
                  ],
                  line: 424
                },
                '21': {
                  loc: { start: { line: 427, column: 6 }, end: { line: 429, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 427, column: 6 }, end: { line: 429, column: 7 } },
                    { start: { line: 427, column: 6 }, end: { line: 429, column: 7 } }
                  ],
                  line: 427
                },
                '22': {
                  loc: { start: { line: 430, column: 6 }, end: { line: 432, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 430, column: 6 }, end: { line: 432, column: 7 } },
                    { start: { line: 430, column: 6 }, end: { line: 432, column: 7 } }
                  ],
                  line: 430
                },
                '23': {
                  loc: { start: { line: 460, column: 6 }, end: { line: 463, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 460, column: 6 }, end: { line: 463, column: 7 } },
                    { start: { line: 460, column: 6 }, end: { line: 463, column: 7 } }
                  ],
                  line: 460
                },
                '24': {
                  loc: { start: { line: 464, column: 6 }, end: { line: 467, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 464, column: 6 }, end: { line: 467, column: 7 } },
                    { start: { line: 464, column: 6 }, end: { line: 467, column: 7 } }
                  ],
                  line: 464
                },
                '25': {
                  loc: { start: { line: 468, column: 6 }, end: { line: 471, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 468, column: 6 }, end: { line: 471, column: 7 } },
                    { start: { line: 468, column: 6 }, end: { line: 471, column: 7 } }
                  ],
                  line: 468
                },
                '26': {
                  loc: { start: { line: 472, column: 6 }, end: { line: 475, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 472, column: 6 }, end: { line: 475, column: 7 } },
                    { start: { line: 472, column: 6 }, end: { line: 475, column: 7 } }
                  ],
                  line: 472
                },
                '27': {
                  loc: { start: { line: 503, column: 11 }, end: { line: 503, column: 55 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 503, column: 24 }, end: { line: 503, column: 25 } },
                    { start: { line: 503, column: 28 }, end: { line: 503, column: 55 } }
                  ],
                  line: 503
                },
                '28': {
                  loc: { start: { line: 503, column: 28 }, end: { line: 503, column: 55 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 503, column: 43 }, end: { line: 503, column: 49 } },
                    { start: { line: 503, column: 52 }, end: { line: 503, column: 55 } }
                  ],
                  line: 503
                },
                '29': {
                  loc: { start: { line: 505, column: 2 }, end: { line: 531, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 505, column: 2 }, end: { line: 531, column: 3 } },
                    { start: { line: 505, column: 2 }, end: { line: 531, column: 3 } }
                  ],
                  line: 505
                },
                '30': {
                  loc: { start: { line: 559, column: 6 }, end: { line: 567, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 559, column: 6 }, end: { line: 567, column: 7 } },
                    { start: { line: 559, column: 6 }, end: { line: 567, column: 7 } }
                  ],
                  line: 559
                },
                '31': {
                  loc: { start: { line: 563, column: 8 }, end: { line: 565, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 563, column: 8 }, end: { line: 565, column: 9 } },
                    { start: { line: 563, column: 8 }, end: { line: 565, column: 9 } }
                  ],
                  line: 563
                },
                '32': {
                  loc: { start: { line: 569, column: 8 }, end: { line: 571, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 569, column: 8 }, end: { line: 571, column: 9 } },
                    { start: { line: 569, column: 8 }, end: { line: 571, column: 9 } }
                  ],
                  line: 569
                },
                '33': {
                  loc: { start: { line: 595, column: 6 }, end: { line: 605, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 595, column: 6 }, end: { line: 605, column: 7 } },
                    { start: { line: 595, column: 6 }, end: { line: 605, column: 7 } }
                  ],
                  line: 595
                },
                '34': {
                  loc: { start: { line: 599, column: 8 }, end: { line: 601, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 599, column: 8 }, end: { line: 601, column: 9 } },
                    { start: { line: 599, column: 8 }, end: { line: 601, column: 9 } }
                  ],
                  line: 599
                },
                '35': {
                  loc: { start: { line: 607, column: 8 }, end: { line: 609, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 607, column: 8 }, end: { line: 609, column: 9 } },
                    { start: { line: 607, column: 8 }, end: { line: 609, column: 9 } }
                  ],
                  line: 607
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0,
                '118': 0,
                '119': 0,
                '120': 0,
                '121': 0,
                '122': 0,
                '123': 0,
                '124': 0,
                '125': 0,
                '126': 0,
                '127': 0,
                '128': 0,
                '129': 0,
                '130': 0,
                '131': 0,
                '132': 0,
                '133': 0,
                '134': 0,
                '135': 0,
                '136': 0,
                '137': 0,
                '138': 0,
                '139': 0,
                '140': 0,
                '141': 0,
                '142': 0,
                '143': 0,
                '144': 0,
                '145': 0,
                '146': 0,
                '147': 0,
                '148': 0,
                '149': 0,
                '150': 0,
                '151': 0,
                '152': 0,
                '153': 0,
                '154': 0,
                '155': 0,
                '156': 0,
                '157': 0,
                '158': 0,
                '159': 0,
                '160': 0,
                '161': 0,
                '162': 0,
                '163': 0,
                '164': 0,
                '165': 0,
                '166': 0,
                '167': 0,
                '168': 0,
                '169': 0,
                '170': 0,
                '171': 0,
                '172': 0,
                '173': 0,
                '174': 0,
                '175': 0,
                '176': 0,
                '177': 0,
                '178': 0,
                '179': 0,
                '180': 0,
                '181': 0,
                '182': 0,
                '183': 0,
                '184': 0,
                '185': 0,
                '186': 0,
                '187': 0,
                '188': 0,
                '189': 0,
                '190': 0,
                '191': 0,
                '192': 0,
                '193': 0,
                '194': 0,
                '195': 0,
                '196': 0,
                '197': 0,
                '198': 0,
                '199': 0,
                '200': 0,
                '201': 0,
                '202': 0,
                '203': 0,
                '204': 0,
                '205': 0,
                '206': 0,
                '207': 0,
                '208': 0,
                '209': 0,
                '210': 0,
                '211': 0,
                '212': 0,
                '213': 0,
                '214': 0,
                '215': 0,
                '216': 0,
                '217': 0,
                '218': 0,
                '219': 0,
                '220': 0,
                '221': 0,
                '222': 0,
                '223': 0,
                '224': 0,
                '225': 0,
                '226': 0,
                '227': 0,
                '228': 0,
                '229': 0,
                '230': 0,
                '231': 0,
                '232': 0,
                '233': 0,
                '234': 0,
                '235': 0,
                '236': 0,
                '237': 0,
                '238': 0,
                '239': 0,
                '240': 0,
                '241': 0,
                '242': 0,
                '243': 0,
                '244': 0,
                '245': 0,
                '246': 0,
                '247': 0,
                '248': 0,
                '249': 0,
                '250': 0,
                '251': 0,
                '252': 0,
                '253': 0,
                '254': 0,
                '255': 0,
                '256': 0,
                '257': 0,
                '258': 0,
                '259': 0,
                '260': 0,
                '261': 0,
                '262': 0,
                '263': 0,
                '264': 0,
                '265': 0,
                '266': 0,
                '267': 0,
                '268': 0,
                '269': 0,
                '270': 0,
                '271': 0,
                '272': 0,
                '273': 0,
                '274': 0,
                '275': 0,
                '276': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0],
                '20': [0, 0],
                '21': [0, 0],
                '22': [0, 0],
                '23': [0, 0],
                '24': [0, 0],
                '25': [0, 0],
                '26': [0, 0],
                '27': [0, 0],
                '28': [0, 0],
                '29': [0, 0],
                '30': [0, 0],
                '31': [0, 0],
                '32': [0, 0],
                '33': [0, 0],
                '34': [0, 0],
                '35': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '74688143f0bc53c5026f22df81b9d49712334065'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.iterator');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.typed-array.int32-array');
          _dereq_('core-js/modules/es.typed-array.uint8-array');
          _dereq_('core-js/modules/es.typed-array.copy-within');
          _dereq_('core-js/modules/es.typed-array.every');
          _dereq_('core-js/modules/es.typed-array.fill');
          _dereq_('core-js/modules/es.typed-array.filter');
          _dereq_('core-js/modules/es.typed-array.find');
          _dereq_('core-js/modules/es.typed-array.find-index');
          _dereq_('core-js/modules/es.typed-array.for-each');
          _dereq_('core-js/modules/es.typed-array.includes');
          _dereq_('core-js/modules/es.typed-array.index-of');
          _dereq_('core-js/modules/es.typed-array.iterator');
          _dereq_('core-js/modules/es.typed-array.join');
          _dereq_('core-js/modules/es.typed-array.last-index-of');
          _dereq_('core-js/modules/es.typed-array.map');
          _dereq_('core-js/modules/es.typed-array.reduce');
          _dereq_('core-js/modules/es.typed-array.reduce-right');
          _dereq_('core-js/modules/es.typed-array.reverse');
          _dereq_('core-js/modules/es.typed-array.set');
          _dereq_('core-js/modules/es.typed-array.slice');
          _dereq_('core-js/modules/es.typed-array.some');
          _dereq_('core-js/modules/es.typed-array.sort');
          _dereq_('core-js/modules/es.typed-array.subarray');
          _dereq_('core-js/modules/es.typed-array.to-locale-string');
          _dereq_('core-js/modules/es.typed-array.to-string');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0; /*global ImageData:false */

          /**
           * This module defines the filters for use with image buffers.
           *
           * This module is basically a collection of functions stored in an object
           * as opposed to modules. The functions are destructive, modifying
           * the passed in canvas rather than creating a copy.
           *
           * Generally speaking users of this module will use the Filters.apply method
           * on a canvas to create an effect.
           *
           * A number of functions are borrowed/adapted from
           * http://www.html5rocks.com/en/tutorials/canvas/imagefilters/
           * or the java processing implementation.
           */

          var Filters = (cov_2x55mw1zb.s[0]++, {});

          /*
                                           * Helper functions
                                           */

          /**
           * Returns the pixel buffer for a canvas
           *
           * @private
           *
           * @param  {Canvas|ImageData} canvas the canvas to get pixels from
           * @return {Uint8ClampedArray}       a one-dimensional array containing
           *                                   the data in thc RGBA order, with integer
           *                                   values between 0 and 255
           */ cov_2x55mw1zb.s[1]++;
          Filters._toPixels = function(canvas) {
            cov_2x55mw1zb.f[0]++;
            cov_2x55mw1zb.s[2]++;
            if (canvas instanceof ImageData) {
              cov_2x55mw1zb.b[0][0]++;
              cov_2x55mw1zb.s[3]++;
              return canvas.data;
            } else {
              cov_2x55mw1zb.b[0][1]++;
              cov_2x55mw1zb.s[4]++;
              if (canvas.getContext('2d')) {
                cov_2x55mw1zb.b[1][0]++;
                cov_2x55mw1zb.s[5]++;
                return canvas
                  .getContext('2d')
                  .getImageData(0, 0, canvas.width, canvas.height).data;
              } else {
                cov_2x55mw1zb.b[1][1]++;
                cov_2x55mw1zb.s[6]++;
                if (canvas.getContext('webgl')) {
                  cov_2x55mw1zb.b[2][0]++;
                  var gl = (cov_2x55mw1zb.s[7]++, canvas.getContext('webgl'));
                  var len = (cov_2x55mw1zb.s[8]++,
                  gl.drawingBufferWidth * gl.drawingBufferHeight * 4);
                  var data = (cov_2x55mw1zb.s[9]++, new Uint8Array(len));
                  cov_2x55mw1zb.s[10]++;
                  gl.readPixels(
                    0,
                    0,
                    canvas.width,
                    canvas.height,
                    gl.RGBA,
                    gl.UNSIGNED_BYTE,
                    data
                  );
                  cov_2x55mw1zb.s[11]++;

                  return data;
                } else {
                  cov_2x55mw1zb.b[2][1]++;
                }
              }
            }
          };

          /**
           * Returns a 32 bit number containing ARGB data at ith pixel in the
           * 1D array containing pixels data.
           *
           * @private
           *
           * @param  {Uint8ClampedArray} data array returned by _toPixels()
           * @param  {Integer}           i    index of a 1D Image Array
           * @return {Integer}                32 bit integer value representing
           *                                  ARGB value.
           */ cov_2x55mw1zb.s[12]++;
          Filters._getARGB = function(data, i) {
            cov_2x55mw1zb.f[1]++;
            var offset = (cov_2x55mw1zb.s[13]++, i * 4);
            cov_2x55mw1zb.s[14]++;
            return (
              ((data[offset + 3] << 24) & 0xff000000) |
              ((data[offset] << 16) & 0x00ff0000) |
              ((data[offset + 1] << 8) & 0x0000ff00) |
              (data[offset + 2] & 0x000000ff)
            );
          };

          /**
           * Modifies pixels RGBA values to values contained in the data object.
           *
           * @private
           *
           * @param {Uint8ClampedArray} pixels array returned by _toPixels()
           * @param {Int32Array}        data   source 1D array where each value
           *                                   represents ARGB values
           */ cov_2x55mw1zb.s[15]++;
          Filters._setPixels = function(pixels, data) {
            cov_2x55mw1zb.f[2]++;
            var offset = (cov_2x55mw1zb.s[16]++, 0);
            cov_2x55mw1zb.s[17]++;
            for (
              var i = (cov_2x55mw1zb.s[18]++, 0),
                al = (cov_2x55mw1zb.s[19]++, pixels.length);
              i < al;
              i++
            ) {
              cov_2x55mw1zb.s[20]++;
              offset = i * 4;
              cov_2x55mw1zb.s[21]++;
              pixels[offset + 0] = (data[i] & 0x00ff0000) >>> 16;
              cov_2x55mw1zb.s[22]++;
              pixels[offset + 1] = (data[i] & 0x0000ff00) >>> 8;
              cov_2x55mw1zb.s[23]++;
              pixels[offset + 2] = data[i] & 0x000000ff;
              cov_2x55mw1zb.s[24]++;
              pixels[offset + 3] = (data[i] & 0xff000000) >>> 24;
            }
          };

          /**
           * Returns the ImageData object for a canvas
           * https://developer.mozilla.org/en-US/docs/Web/API/ImageData
           *
           * @private
           *
           * @param  {Canvas|ImageData} canvas canvas to get image data from
           * @return {ImageData}               Holder of pixel data (and width and
           *                                   height) for a canvas
           */ cov_2x55mw1zb.s[25]++;
          Filters._toImageData = function(canvas) {
            cov_2x55mw1zb.f[3]++;
            cov_2x55mw1zb.s[26]++;
            if (canvas instanceof ImageData) {
              cov_2x55mw1zb.b[3][0]++;
              cov_2x55mw1zb.s[27]++;
              return canvas;
            } else {
              cov_2x55mw1zb.b[3][1]++;
              cov_2x55mw1zb.s[28]++;
              return canvas
                .getContext('2d')
                .getImageData(0, 0, canvas.width, canvas.height);
            }
          };

          /**
           * Returns a blank ImageData object.
           *
           * @private
           *
           * @param  {Integer} width
           * @param  {Integer} height
           * @return {ImageData}
           */ cov_2x55mw1zb.s[29]++;
          Filters._createImageData = function(width, height) {
            cov_2x55mw1zb.f[4]++;
            cov_2x55mw1zb.s[30]++;
            Filters._tmpCanvas = document.createElement('canvas');
            cov_2x55mw1zb.s[31]++;
            Filters._tmpCtx = Filters._tmpCanvas.getContext('2d');
            cov_2x55mw1zb.s[32]++;
            return this._tmpCtx.createImageData(width, height);
          };

          /**
           * Applys a filter function to a canvas.
           *
           * The difference between this and the actual filter functions defined below
           * is that the filter functions generally modify the pixel buffer but do
           * not actually put that data back to the canvas (where it would actually
           * update what is visible). By contrast this method does make the changes
           * actually visible in the canvas.
           *
           * The apply method is the method that callers of this module would generally
           * use. It has been separated from the actual filters to support an advanced
           * use case of creating a filter chain that executes without actually updating
           * the canvas in between everystep.
           *
           * @private
           * @param  {HTMLCanvasElement} canvas [description]
           * @param  {function(ImageData,Object)} func   [description]
           * @param  {Object} filterParam  [description]
           */ cov_2x55mw1zb.s[33]++;
          Filters.apply = function(canvas, func, filterParam) {
            cov_2x55mw1zb.f[5]++;
            var pixelsState = (cov_2x55mw1zb.s[34]++, canvas.getContext('2d'));
            var imageData = (cov_2x55mw1zb.s[35]++,
            pixelsState.getImageData(0, 0, canvas.width, canvas.height));

            //Filters can either return a new ImageData object, or just modify
            //the one they received.
            var newImageData = (cov_2x55mw1zb.s[36]++, func(imageData, filterParam));
            cov_2x55mw1zb.s[37]++;
            if (newImageData instanceof ImageData) {
              cov_2x55mw1zb.b[4][0]++;
              cov_2x55mw1zb.s[38]++;
              pixelsState.putImageData(
                newImageData,
                0,
                0,
                0,
                0,
                canvas.width,
                canvas.height
              );
            } else {
              cov_2x55mw1zb.b[4][1]++;
              cov_2x55mw1zb.s[39]++;
              pixelsState.putImageData(imageData, 0, 0, 0, 0, canvas.width, canvas.height);
            }
          };

          /*
    * Filters
    */

          /**
           * Converts the image to black and white pixels depending if they are above or
           * below the threshold defined by the level parameter. The parameter must be
           * between 0.0 (black) and 1.0 (white). If no level is specified, 0.5 is used.
           *
           * Borrowed from http://www.html5rocks.com/en/tutorials/canvas/imagefilters/
           *
           * @private
           * @param  {Canvas} canvas
           * @param  {Float} level
           */ cov_2x55mw1zb.s[40]++;
          Filters.threshold = function(canvas, level) {
            cov_2x55mw1zb.f[6]++;
            var pixels = (cov_2x55mw1zb.s[41]++, Filters._toPixels(canvas));
            cov_2x55mw1zb.s[42]++;

            if (level === undefined) {
              cov_2x55mw1zb.b[5][0]++;
              cov_2x55mw1zb.s[43]++;
              level = 0.5;
            } else {
              cov_2x55mw1zb.b[5][1]++;
            }
            var thresh = (cov_2x55mw1zb.s[44]++, Math.floor(level * 255));
            cov_2x55mw1zb.s[45]++;

            for (var i = (cov_2x55mw1zb.s[46]++, 0); i < pixels.length; i += 4) {
              var r = (cov_2x55mw1zb.s[47]++, pixels[i]);
              var g = (cov_2x55mw1zb.s[48]++, pixels[i + 1]);
              var b = (cov_2x55mw1zb.s[49]++, pixels[i + 2]);
              var gray = (cov_2x55mw1zb.s[50]++, 0.2126 * r + 0.7152 * g + 0.0722 * b);
              var val = void 0;
              cov_2x55mw1zb.s[51]++;
              if (gray >= thresh) {
                cov_2x55mw1zb.b[6][0]++;
                cov_2x55mw1zb.s[52]++;
                val = 255;
              } else {
                cov_2x55mw1zb.b[6][1]++;
                cov_2x55mw1zb.s[53]++;
                val = 0;
              }
              cov_2x55mw1zb.s[54]++;
              pixels[i] = pixels[i + 1] = pixels[i + 2] = val;
            }
          };

          /**
           * Converts any colors in the image to grayscale equivalents.
           * No parameter is used.
           *
           * Borrowed from http://www.html5rocks.com/en/tutorials/canvas/imagefilters/
           *
           * @private
           * @param {Canvas} canvas
           */ cov_2x55mw1zb.s[55]++;
          Filters.gray = function(canvas) {
            cov_2x55mw1zb.f[7]++;
            var pixels = (cov_2x55mw1zb.s[56]++, Filters._toPixels(canvas));
            cov_2x55mw1zb.s[57]++;

            for (var i = (cov_2x55mw1zb.s[58]++, 0); i < pixels.length; i += 4) {
              var r = (cov_2x55mw1zb.s[59]++, pixels[i]);
              var g = (cov_2x55mw1zb.s[60]++, pixels[i + 1]);
              var b = (cov_2x55mw1zb.s[61]++, pixels[i + 2]);

              // CIE luminance for RGB
              var gray = (cov_2x55mw1zb.s[62]++, 0.2126 * r + 0.7152 * g + 0.0722 * b);
              cov_2x55mw1zb.s[63]++;
              pixels[i] = pixels[i + 1] = pixels[i + 2] = gray;
            }
          };

          /**
           * Sets the alpha channel to entirely opaque. No parameter is used.
           *
           * @private
           * @param {Canvas} canvas
           */ cov_2x55mw1zb.s[64]++;
          Filters.opaque = function(canvas) {
            cov_2x55mw1zb.f[8]++;
            var pixels = (cov_2x55mw1zb.s[65]++, Filters._toPixels(canvas));
            cov_2x55mw1zb.s[66]++;

            for (var i = (cov_2x55mw1zb.s[67]++, 0); i < pixels.length; i += 4) {
              cov_2x55mw1zb.s[68]++;
              pixels[i + 3] = 255;
            }
            cov_2x55mw1zb.s[69]++;

            return pixels;
          };

          /**
           * Sets each pixel to its inverse value. No parameter is used.
           * @private
           * @param  {Canvas} canvas
           */ cov_2x55mw1zb.s[70]++;
          Filters.invert = function(canvas) {
            cov_2x55mw1zb.f[9]++;
            var pixels = (cov_2x55mw1zb.s[71]++, Filters._toPixels(canvas));
            cov_2x55mw1zb.s[72]++;

            for (var i = (cov_2x55mw1zb.s[73]++, 0); i < pixels.length; i += 4) {
              cov_2x55mw1zb.s[74]++;
              pixels[i] = 255 - pixels[i];
              cov_2x55mw1zb.s[75]++;
              pixels[i + 1] = 255 - pixels[i + 1];
              cov_2x55mw1zb.s[76]++;
              pixels[i + 2] = 255 - pixels[i + 2];
            }
          };

          /**
           * Limits each channel of the image to the number of colors specified as
           * the parameter. The parameter can be set to values between 2 and 255, but
           * results are most noticeable in the lower ranges.
           *
           * Adapted from java based processing implementation
           *
           * @private
           * @param  {Canvas} canvas
           * @param  {Integer} level
           */ cov_2x55mw1zb.s[77]++;
          Filters.posterize = function(canvas, level) {
            cov_2x55mw1zb.f[10]++;
            var pixels = (cov_2x55mw1zb.s[78]++, Filters._toPixels(canvas));
            cov_2x55mw1zb.s[79]++;

            if (
              (cov_2x55mw1zb.b[8][0]++, level < 2) ||
              (cov_2x55mw1zb.b[8][1]++, level > 255)
            ) {
              cov_2x55mw1zb.b[7][0]++;
              cov_2x55mw1zb.s[80]++;
              throw new Error(
                'Level must be greater than 2 and less than 255 for posterize'
              );
            } else {
              cov_2x55mw1zb.b[7][1]++;
            }

            var levels1 = (cov_2x55mw1zb.s[81]++, level - 1);
            cov_2x55mw1zb.s[82]++;
            for (var i = (cov_2x55mw1zb.s[83]++, 0); i < pixels.length; i += 4) {
              var rlevel = (cov_2x55mw1zb.s[84]++, pixels[i]);
              var glevel = (cov_2x55mw1zb.s[85]++, pixels[i + 1]);
              var blevel = (cov_2x55mw1zb.s[86]++, pixels[i + 2]);
              cov_2x55mw1zb.s[87]++;

              pixels[i] = ((rlevel * level) >> 8) * 255 / levels1;
              cov_2x55mw1zb.s[88]++;
              pixels[i + 1] = ((glevel * level) >> 8) * 255 / levels1;
              cov_2x55mw1zb.s[89]++;
              pixels[i + 2] = ((blevel * level) >> 8) * 255 / levels1;
            }
          };

          /**
           * reduces the bright areas in an image
           * @private
           * @param  {Canvas} canvas
           */ cov_2x55mw1zb.s[90]++;
          Filters.dilate = function(canvas) {
            cov_2x55mw1zb.f[11]++;
            var pixels = (cov_2x55mw1zb.s[91]++, Filters._toPixels(canvas));
            var currIdx = (cov_2x55mw1zb.s[92]++, 0);
            var maxIdx = (cov_2x55mw1zb.s[93]++,
            pixels.length
              ? (cov_2x55mw1zb.b[9][0]++, pixels.length / 4)
              : (cov_2x55mw1zb.b[9][1]++, 0));
            var out = (cov_2x55mw1zb.s[94]++, new Int32Array(maxIdx));
            var currRowIdx, maxRowIdx, colOrig, colOut, currLum;

            var idxRight, idxLeft, idxUp, idxDown;
            var colRight, colLeft, colUp, colDown;
            var lumRight, lumLeft, lumUp, lumDown;
            cov_2x55mw1zb.s[95]++;

            while (currIdx < maxIdx) {
              cov_2x55mw1zb.s[96]++;
              currRowIdx = currIdx;
              cov_2x55mw1zb.s[97]++;
              maxRowIdx = currIdx + canvas.width;
              cov_2x55mw1zb.s[98]++;
              while (currIdx < maxRowIdx) {
                cov_2x55mw1zb.s[99]++;
                colOrig = colOut = Filters._getARGB(pixels, currIdx);
                cov_2x55mw1zb.s[100]++;
                idxLeft = currIdx - 1;
                cov_2x55mw1zb.s[101]++;
                idxRight = currIdx + 1;
                cov_2x55mw1zb.s[102]++;
                idxUp = currIdx - canvas.width;
                cov_2x55mw1zb.s[103]++;
                idxDown = currIdx + canvas.width;
                cov_2x55mw1zb.s[104]++;

                if (idxLeft < currRowIdx) {
                  cov_2x55mw1zb.b[10][0]++;
                  cov_2x55mw1zb.s[105]++;
                  idxLeft = currIdx;
                } else {
                  cov_2x55mw1zb.b[10][1]++;
                }
                cov_2x55mw1zb.s[106]++;
                if (idxRight >= maxRowIdx) {
                  cov_2x55mw1zb.b[11][0]++;
                  cov_2x55mw1zb.s[107]++;
                  idxRight = currIdx;
                } else {
                  cov_2x55mw1zb.b[11][1]++;
                }
                cov_2x55mw1zb.s[108]++;
                if (idxUp < 0) {
                  cov_2x55mw1zb.b[12][0]++;
                  cov_2x55mw1zb.s[109]++;
                  idxUp = 0;
                } else {
                  cov_2x55mw1zb.b[12][1]++;
                }
                cov_2x55mw1zb.s[110]++;
                if (idxDown >= maxIdx) {
                  cov_2x55mw1zb.b[13][0]++;
                  cov_2x55mw1zb.s[111]++;
                  idxDown = currIdx;
                } else {
                  cov_2x55mw1zb.b[13][1]++;
                }
                cov_2x55mw1zb.s[112]++;
                colUp = Filters._getARGB(pixels, idxUp);
                cov_2x55mw1zb.s[113]++;
                colLeft = Filters._getARGB(pixels, idxLeft);
                cov_2x55mw1zb.s[114]++;
                colDown = Filters._getARGB(pixels, idxDown);
                cov_2x55mw1zb.s[115]++;
                colRight = Filters._getARGB(pixels, idxRight);

                //compute luminance
                cov_2x55mw1zb.s[116]++;
                currLum =
                  77 * ((colOrig >> 16) & 0xff) +
                  151 * ((colOrig >> 8) & 0xff) +
                  28 * (colOrig & 0xff);
                cov_2x55mw1zb.s[117]++;
                lumLeft =
                  77 * ((colLeft >> 16) & 0xff) +
                  151 * ((colLeft >> 8) & 0xff) +
                  28 * (colLeft & 0xff);
                cov_2x55mw1zb.s[118]++;
                lumRight =
                  77 * ((colRight >> 16) & 0xff) +
                  151 * ((colRight >> 8) & 0xff) +
                  28 * (colRight & 0xff);
                cov_2x55mw1zb.s[119]++;
                lumUp =
                  77 * ((colUp >> 16) & 0xff) +
                  151 * ((colUp >> 8) & 0xff) +
                  28 * (colUp & 0xff);
                cov_2x55mw1zb.s[120]++;
                lumDown =
                  77 * ((colDown >> 16) & 0xff) +
                  151 * ((colDown >> 8) & 0xff) +
                  28 * (colDown & 0xff);
                cov_2x55mw1zb.s[121]++;

                if (lumLeft > currLum) {
                  cov_2x55mw1zb.b[14][0]++;
                  cov_2x55mw1zb.s[122]++;
                  colOut = colLeft;
                  cov_2x55mw1zb.s[123]++;
                  currLum = lumLeft;
                } else {
                  cov_2x55mw1zb.b[14][1]++;
                }
                cov_2x55mw1zb.s[124]++;
                if (lumRight > currLum) {
                  cov_2x55mw1zb.b[15][0]++;
                  cov_2x55mw1zb.s[125]++;
                  colOut = colRight;
                  cov_2x55mw1zb.s[126]++;
                  currLum = lumRight;
                } else {
                  cov_2x55mw1zb.b[15][1]++;
                }
                cov_2x55mw1zb.s[127]++;
                if (lumUp > currLum) {
                  cov_2x55mw1zb.b[16][0]++;
                  cov_2x55mw1zb.s[128]++;
                  colOut = colUp;
                  cov_2x55mw1zb.s[129]++;
                  currLum = lumUp;
                } else {
                  cov_2x55mw1zb.b[16][1]++;
                }
                cov_2x55mw1zb.s[130]++;
                if (lumDown > currLum) {
                  cov_2x55mw1zb.b[17][0]++;
                  cov_2x55mw1zb.s[131]++;
                  colOut = colDown;
                  cov_2x55mw1zb.s[132]++;
                  currLum = lumDown;
                } else {
                  cov_2x55mw1zb.b[17][1]++;
                }
                cov_2x55mw1zb.s[133]++;
                out[currIdx++] = colOut;
              }
            }
            cov_2x55mw1zb.s[134]++;
            Filters._setPixels(pixels, out);
          };

          /**
           * increases the bright areas in an image
           * @private
           * @param  {Canvas} canvas
           */ cov_2x55mw1zb.s[135]++;
          Filters.erode = function(canvas) {
            cov_2x55mw1zb.f[12]++;
            var pixels = (cov_2x55mw1zb.s[136]++, Filters._toPixels(canvas));
            var currIdx = (cov_2x55mw1zb.s[137]++, 0);
            var maxIdx = (cov_2x55mw1zb.s[138]++,
            pixels.length
              ? (cov_2x55mw1zb.b[18][0]++, pixels.length / 4)
              : (cov_2x55mw1zb.b[18][1]++, 0));
            var out = (cov_2x55mw1zb.s[139]++, new Int32Array(maxIdx));
            var currRowIdx, maxRowIdx, colOrig, colOut, currLum;
            var idxRight, idxLeft, idxUp, idxDown;
            var colRight, colLeft, colUp, colDown;
            var lumRight, lumLeft, lumUp, lumDown;
            cov_2x55mw1zb.s[140]++;

            while (currIdx < maxIdx) {
              cov_2x55mw1zb.s[141]++;
              currRowIdx = currIdx;
              cov_2x55mw1zb.s[142]++;
              maxRowIdx = currIdx + canvas.width;
              cov_2x55mw1zb.s[143]++;
              while (currIdx < maxRowIdx) {
                cov_2x55mw1zb.s[144]++;
                colOrig = colOut = Filters._getARGB(pixels, currIdx);
                cov_2x55mw1zb.s[145]++;
                idxLeft = currIdx - 1;
                cov_2x55mw1zb.s[146]++;
                idxRight = currIdx + 1;
                cov_2x55mw1zb.s[147]++;
                idxUp = currIdx - canvas.width;
                cov_2x55mw1zb.s[148]++;
                idxDown = currIdx + canvas.width;
                cov_2x55mw1zb.s[149]++;

                if (idxLeft < currRowIdx) {
                  cov_2x55mw1zb.b[19][0]++;
                  cov_2x55mw1zb.s[150]++;
                  idxLeft = currIdx;
                } else {
                  cov_2x55mw1zb.b[19][1]++;
                }
                cov_2x55mw1zb.s[151]++;
                if (idxRight >= maxRowIdx) {
                  cov_2x55mw1zb.b[20][0]++;
                  cov_2x55mw1zb.s[152]++;
                  idxRight = currIdx;
                } else {
                  cov_2x55mw1zb.b[20][1]++;
                }
                cov_2x55mw1zb.s[153]++;
                if (idxUp < 0) {
                  cov_2x55mw1zb.b[21][0]++;
                  cov_2x55mw1zb.s[154]++;
                  idxUp = 0;
                } else {
                  cov_2x55mw1zb.b[21][1]++;
                }
                cov_2x55mw1zb.s[155]++;
                if (idxDown >= maxIdx) {
                  cov_2x55mw1zb.b[22][0]++;
                  cov_2x55mw1zb.s[156]++;
                  idxDown = currIdx;
                } else {
                  cov_2x55mw1zb.b[22][1]++;
                }
                cov_2x55mw1zb.s[157]++;
                colUp = Filters._getARGB(pixels, idxUp);
                cov_2x55mw1zb.s[158]++;
                colLeft = Filters._getARGB(pixels, idxLeft);
                cov_2x55mw1zb.s[159]++;
                colDown = Filters._getARGB(pixels, idxDown);
                cov_2x55mw1zb.s[160]++;
                colRight = Filters._getARGB(pixels, idxRight);

                //compute luminance
                cov_2x55mw1zb.s[161]++;
                currLum =
                  77 * ((colOrig >> 16) & 0xff) +
                  151 * ((colOrig >> 8) & 0xff) +
                  28 * (colOrig & 0xff);
                cov_2x55mw1zb.s[162]++;
                lumLeft =
                  77 * ((colLeft >> 16) & 0xff) +
                  151 * ((colLeft >> 8) & 0xff) +
                  28 * (colLeft & 0xff);
                cov_2x55mw1zb.s[163]++;
                lumRight =
                  77 * ((colRight >> 16) & 0xff) +
                  151 * ((colRight >> 8) & 0xff) +
                  28 * (colRight & 0xff);
                cov_2x55mw1zb.s[164]++;
                lumUp =
                  77 * ((colUp >> 16) & 0xff) +
                  151 * ((colUp >> 8) & 0xff) +
                  28 * (colUp & 0xff);
                cov_2x55mw1zb.s[165]++;
                lumDown =
                  77 * ((colDown >> 16) & 0xff) +
                  151 * ((colDown >> 8) & 0xff) +
                  28 * (colDown & 0xff);
                cov_2x55mw1zb.s[166]++;

                if (lumLeft < currLum) {
                  cov_2x55mw1zb.b[23][0]++;
                  cov_2x55mw1zb.s[167]++;
                  colOut = colLeft;
                  cov_2x55mw1zb.s[168]++;
                  currLum = lumLeft;
                } else {
                  cov_2x55mw1zb.b[23][1]++;
                }
                cov_2x55mw1zb.s[169]++;
                if (lumRight < currLum) {
                  cov_2x55mw1zb.b[24][0]++;
                  cov_2x55mw1zb.s[170]++;
                  colOut = colRight;
                  cov_2x55mw1zb.s[171]++;
                  currLum = lumRight;
                } else {
                  cov_2x55mw1zb.b[24][1]++;
                }
                cov_2x55mw1zb.s[172]++;
                if (lumUp < currLum) {
                  cov_2x55mw1zb.b[25][0]++;
                  cov_2x55mw1zb.s[173]++;
                  colOut = colUp;
                  cov_2x55mw1zb.s[174]++;
                  currLum = lumUp;
                } else {
                  cov_2x55mw1zb.b[25][1]++;
                }
                cov_2x55mw1zb.s[175]++;
                if (lumDown < currLum) {
                  cov_2x55mw1zb.b[26][0]++;
                  cov_2x55mw1zb.s[176]++;
                  colOut = colDown;
                  cov_2x55mw1zb.s[177]++;
                  currLum = lumDown;
                } else {
                  cov_2x55mw1zb.b[26][1]++;
                }
                cov_2x55mw1zb.s[178]++;

                out[currIdx++] = colOut;
              }
            }
            cov_2x55mw1zb.s[179]++;
            Filters._setPixels(pixels, out);
          };

          // BLUR

          // internal kernel stuff for the gaussian blur filter
          var blurRadius;
          var blurKernelSize;
          var blurKernel;
          var blurMult;

          /*
               * Port of https://github.com/processing/processing/blob/
               * main/core/src/processing/core/PImage.java#L1250
               *
               * Optimized code for building the blur kernel.
               * further optimized blur code (approx. 15% for radius=20)
               * bigger speed gains for larger radii (~30%)
               * added support for various image types (ALPHA, RGB, ARGB)
               * [toxi 050728]
               */
          function buildBlurKernel(r) {
            cov_2x55mw1zb.f[13]++;
            var radius = (cov_2x55mw1zb.s[180]++, (r * 3.5) | 0);
            cov_2x55mw1zb.s[181]++;
            radius =
              radius < 1
                ? (cov_2x55mw1zb.b[27][0]++, 1)
                : (cov_2x55mw1zb.b[27][1]++,
                  radius < 248
                    ? (cov_2x55mw1zb.b[28][0]++, radius)
                    : (cov_2x55mw1zb.b[28][1]++, 248));
            cov_2x55mw1zb.s[182]++;

            if (blurRadius !== radius) {
              cov_2x55mw1zb.b[29][0]++;
              cov_2x55mw1zb.s[183]++;
              blurRadius = radius;
              cov_2x55mw1zb.s[184]++;
              blurKernelSize = (1 + blurRadius) << 1;
              cov_2x55mw1zb.s[185]++;
              blurKernel = new Int32Array(blurKernelSize);
              cov_2x55mw1zb.s[186]++;
              blurMult = new Array(blurKernelSize);
              cov_2x55mw1zb.s[187]++;
              for (var l = (cov_2x55mw1zb.s[188]++, 0); l < blurKernelSize; l++) {
                cov_2x55mw1zb.s[189]++;
                blurMult[l] = new Int32Array(256);
              }

              var bk, bki;
              var bm, bmi;
              cov_2x55mw1zb.s[190]++;

              for (
                var i = (cov_2x55mw1zb.s[191]++, 1),
                  radiusi = (cov_2x55mw1zb.s[192]++, radius - 1);
                i < radius;
                i++
              ) {
                cov_2x55mw1zb.s[193]++;
                blurKernel[radius + i] = blurKernel[radiusi] = bki = radiusi * radiusi;
                cov_2x55mw1zb.s[194]++;
                bm = blurMult[radius + i];
                cov_2x55mw1zb.s[195]++;
                bmi = blurMult[radiusi--];
                cov_2x55mw1zb.s[196]++;
                for (var j = (cov_2x55mw1zb.s[197]++, 0); j < 256; j++) {
                  cov_2x55mw1zb.s[198]++;
                  bm[j] = bmi[j] = bki * j;
                }
              }
              cov_2x55mw1zb.s[199]++;
              bk = blurKernel[radius] = radius * radius;
              cov_2x55mw1zb.s[200]++;
              bm = blurMult[radius];
              cov_2x55mw1zb.s[201]++;

              for (var k = (cov_2x55mw1zb.s[202]++, 0); k < 256; k++) {
                cov_2x55mw1zb.s[203]++;
                bm[k] = bk * k;
              }
            } else {
              cov_2x55mw1zb.b[29][1]++;
            }
          }

          // Port of https://github.com/processing/processing/blob/
          // main/core/src/processing/core/PImage.java#L1433
          function blurARGB(canvas, radius) {
            cov_2x55mw1zb.f[14]++;
            var pixels = (cov_2x55mw1zb.s[204]++, Filters._toPixels(canvas));
            var width = (cov_2x55mw1zb.s[205]++, canvas.width);
            var height = (cov_2x55mw1zb.s[206]++, canvas.height);
            var numPackedPixels = (cov_2x55mw1zb.s[207]++, width * height);
            var argb = (cov_2x55mw1zb.s[208]++, new Int32Array(numPackedPixels));
            cov_2x55mw1zb.s[209]++;
            for (var j = (cov_2x55mw1zb.s[210]++, 0); j < numPackedPixels; j++) {
              cov_2x55mw1zb.s[211]++;
              argb[j] = Filters._getARGB(pixels, j);
            }
            var sum, cr, cg, cb, ca;
            var read, ri, ym, ymi, bk0;
            var a2 = (cov_2x55mw1zb.s[212]++, new Int32Array(numPackedPixels));
            var r2 = (cov_2x55mw1zb.s[213]++, new Int32Array(numPackedPixels));
            var g2 = (cov_2x55mw1zb.s[214]++, new Int32Array(numPackedPixels));
            var b2 = (cov_2x55mw1zb.s[215]++, new Int32Array(numPackedPixels));
            var yi = (cov_2x55mw1zb.s[216]++, 0);
            cov_2x55mw1zb.s[217]++;
            buildBlurKernel(radius);
            var x, y, i;
            var bm;
            cov_2x55mw1zb.s[218]++;
            for (y = 0; y < height; y++) {
              cov_2x55mw1zb.s[219]++;
              for (x = 0; x < width; x++) {
                cov_2x55mw1zb.s[220]++;
                cb = cg = cr = ca = sum = 0;
                cov_2x55mw1zb.s[221]++;
                read = x - blurRadius;
                cov_2x55mw1zb.s[222]++;
                if (read < 0) {
                  cov_2x55mw1zb.b[30][0]++;
                  cov_2x55mw1zb.s[223]++;
                  bk0 = -read;
                  cov_2x55mw1zb.s[224]++;
                  read = 0;
                } else {
                  cov_2x55mw1zb.b[30][1]++;
                  cov_2x55mw1zb.s[225]++;
                  if (read >= width) {
                    cov_2x55mw1zb.b[31][0]++;
                    cov_2x55mw1zb.s[226]++;
                    break;
                  } else {
                    cov_2x55mw1zb.b[31][1]++;
                  }
                  cov_2x55mw1zb.s[227]++;
                  bk0 = 0;
                }
                cov_2x55mw1zb.s[228]++;
                for (i = bk0; i < blurKernelSize; i++) {
                  cov_2x55mw1zb.s[229]++;
                  if (read >= width) {
                    cov_2x55mw1zb.b[32][0]++;
                    cov_2x55mw1zb.s[230]++;
                    break;
                  } else {
                    cov_2x55mw1zb.b[32][1]++;
                  }
                  var c = (cov_2x55mw1zb.s[231]++, argb[read + yi]);
                  cov_2x55mw1zb.s[232]++;
                  bm = blurMult[i];
                  cov_2x55mw1zb.s[233]++;
                  ca += bm[(c & -16777216) >>> 24];
                  cov_2x55mw1zb.s[234]++;
                  cr += bm[(c & 16711680) >> 16];
                  cov_2x55mw1zb.s[235]++;
                  cg += bm[(c & 65280) >> 8];
                  cov_2x55mw1zb.s[236]++;
                  cb += bm[c & 255];
                  cov_2x55mw1zb.s[237]++;
                  sum += blurKernel[i];
                  cov_2x55mw1zb.s[238]++;
                  read++;
                }
                cov_2x55mw1zb.s[239]++;
                ri = yi + x;
                cov_2x55mw1zb.s[240]++;
                a2[ri] = ca / sum;
                cov_2x55mw1zb.s[241]++;
                r2[ri] = cr / sum;
                cov_2x55mw1zb.s[242]++;
                g2[ri] = cg / sum;
                cov_2x55mw1zb.s[243]++;
                b2[ri] = cb / sum;
              }
              cov_2x55mw1zb.s[244]++;
              yi += width;
            }
            cov_2x55mw1zb.s[245]++;
            yi = 0;
            cov_2x55mw1zb.s[246]++;
            ym = -blurRadius;
            cov_2x55mw1zb.s[247]++;
            ymi = ym * width;
            cov_2x55mw1zb.s[248]++;
            for (y = 0; y < height; y++) {
              cov_2x55mw1zb.s[249]++;
              for (x = 0; x < width; x++) {
                cov_2x55mw1zb.s[250]++;
                cb = cg = cr = ca = sum = 0;
                cov_2x55mw1zb.s[251]++;
                if (ym < 0) {
                  cov_2x55mw1zb.b[33][0]++;
                  cov_2x55mw1zb.s[252]++;
                  bk0 = ri = -ym;
                  cov_2x55mw1zb.s[253]++;
                  read = x;
                } else {
                  cov_2x55mw1zb.b[33][1]++;
                  cov_2x55mw1zb.s[254]++;
                  if (ym >= height) {
                    cov_2x55mw1zb.b[34][0]++;
                    cov_2x55mw1zb.s[255]++;
                    break;
                  } else {
                    cov_2x55mw1zb.b[34][1]++;
                  }
                  cov_2x55mw1zb.s[256]++;
                  bk0 = 0;
                  cov_2x55mw1zb.s[257]++;
                  ri = ym;
                  cov_2x55mw1zb.s[258]++;
                  read = x + ymi;
                }
                cov_2x55mw1zb.s[259]++;
                for (i = bk0; i < blurKernelSize; i++) {
                  cov_2x55mw1zb.s[260]++;
                  if (ri >= height) {
                    cov_2x55mw1zb.b[35][0]++;
                    cov_2x55mw1zb.s[261]++;
                    break;
                  } else {
                    cov_2x55mw1zb.b[35][1]++;
                  }
                  cov_2x55mw1zb.s[262]++;
                  bm = blurMult[i];
                  cov_2x55mw1zb.s[263]++;
                  ca += bm[a2[read]];
                  cov_2x55mw1zb.s[264]++;
                  cr += bm[r2[read]];
                  cov_2x55mw1zb.s[265]++;
                  cg += bm[g2[read]];
                  cov_2x55mw1zb.s[266]++;
                  cb += bm[b2[read]];
                  cov_2x55mw1zb.s[267]++;
                  sum += blurKernel[i];
                  cov_2x55mw1zb.s[268]++;
                  ri++;
                  cov_2x55mw1zb.s[269]++;
                  read += width;
                }
                cov_2x55mw1zb.s[270]++;
                argb[x + yi] =
                  ((ca / sum) << 24) | ((cr / sum) << 16) | ((cg / sum) << 8) | (cb / sum);
              }
              cov_2x55mw1zb.s[271]++;
              yi += width;
              cov_2x55mw1zb.s[272]++;
              ymi += width;
              cov_2x55mw1zb.s[273]++;
              ym++;
            }
            cov_2x55mw1zb.s[274]++;
            Filters._setPixels(pixels, argb);
          }
          cov_2x55mw1zb.s[275]++;

          Filters.blur = function(canvas, radius) {
            cov_2x55mw1zb.f[15]++;
            cov_2x55mw1zb.s[276]++;
            blurARGB(canvas, radius);
          };
          var _default = Filters;
          exports.default = _default;
        },
        {
          'core-js/modules/es.array.iterator': 174,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.typed-array.copy-within': 212,
          'core-js/modules/es.typed-array.every': 213,
          'core-js/modules/es.typed-array.fill': 214,
          'core-js/modules/es.typed-array.filter': 215,
          'core-js/modules/es.typed-array.find': 217,
          'core-js/modules/es.typed-array.find-index': 216,
          'core-js/modules/es.typed-array.for-each': 220,
          'core-js/modules/es.typed-array.includes': 221,
          'core-js/modules/es.typed-array.index-of': 222,
          'core-js/modules/es.typed-array.int32-array': 224,
          'core-js/modules/es.typed-array.iterator': 225,
          'core-js/modules/es.typed-array.join': 226,
          'core-js/modules/es.typed-array.last-index-of': 227,
          'core-js/modules/es.typed-array.map': 228,
          'core-js/modules/es.typed-array.reduce': 230,
          'core-js/modules/es.typed-array.reduce-right': 229,
          'core-js/modules/es.typed-array.reverse': 231,
          'core-js/modules/es.typed-array.set': 232,
          'core-js/modules/es.typed-array.slice': 233,
          'core-js/modules/es.typed-array.some': 234,
          'core-js/modules/es.typed-array.sort': 235,
          'core-js/modules/es.typed-array.subarray': 236,
          'core-js/modules/es.typed-array.to-locale-string': 237,
          'core-js/modules/es.typed-array.to-string': 238,
          'core-js/modules/es.typed-array.uint8-array': 241
        }
      ],
      305: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_1r2cl8ltdv = (function() {
            var path = '/Users/outofambit/src/p5.js/src/image/image.js';
            var hash = '4a7c07aec0c2bc27c61ae42064ac91e97b42629a';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/image/image.js',
              statementMap: {
                '0': { start: { line: 89, column: 0 }, end: { line: 92, column: 2 } },
                '1': { start: { line: 90, column: 2 }, end: { line: 90, column: 51 } },
                '2': { start: { line: 91, column: 2 }, end: { line: 91, column: 37 } },
                '3': { start: { line: 141, column: 0 }, end: { line: 185, column: 2 } },
                '4': { start: { line: 142, column: 2 }, end: { line: 142, column: 50 } },
                '5': { start: { line: 145, column: 15 }, end: { line: 145, column: 39 } },
                '6': { start: { line: 148, column: 2 }, end: { line: 156, column: 3 } },
                '7': { start: { line: 149, column: 4 }, end: { line: 149, column: 30 } },
                '8': { start: { line: 150, column: 4 }, end: { line: 150, column: 17 } },
                '9': { start: { line: 151, column: 9 }, end: { line: 156, column: 3 } },
                '10': { start: { line: 152, column: 4 }, end: { line: 152, column: 34 } },
                '11': { start: { line: 153, column: 4 }, end: { line: 153, column: 17 } },
                '12': { start: { line: 155, column: 4 }, end: { line: 155, column: 58 } },
                '13': { start: { line: 158, column: 2 }, end: { line: 160, column: 3 } },
                '14': { start: { line: 159, column: 4 }, end: { line: 159, column: 23 } },
                '15': { start: { line: 161, column: 2 }, end: { line: 163, column: 3 } },
                '16': { start: { line: 162, column: 4 }, end: { line: 162, column: 24 } },
                '17': { start: { line: 165, column: 2 }, end: { line: 168, column: 10 } },
                '18': { start: { line: 171, column: 2 }, end: { line: 180, column: 3 } },
                '19': { start: { line: 174, column: 6 }, end: { line: 174, column: 29 } },
                '20': { start: { line: 175, column: 6 }, end: { line: 175, column: 12 } },
                '21': { start: { line: 178, column: 6 }, end: { line: 178, column: 30 } },
                '22': { start: { line: 179, column: 6 }, end: { line: 179, column: 12 } },
                '23': { start: { line: 182, column: 2 }, end: { line: 184, column: 15 } },
                '24': { start: { line: 183, column: 4 }, end: { line: 183, column: 57 } },
                '25': { start: { line: 187, column: 0 }, end: { line: 411, column: 2 } },
                '26': { start: { line: 188, column: 16 }, end: { line: 188, column: 34 } },
                '27': { start: { line: 191, column: 18 }, end: { line: 191, column: 33 } },
                '28': { start: { line: 192, column: 2 }, end: { line: 196, column: 3 } },
                '29': { start: { line: 193, column: 4 }, end: { line: 193, column: 21 } },
                '30': { start: { line: 194, column: 9 }, end: { line: 196, column: 3 } },
                '31': { start: { line: 195, column: 4 }, end: { line: 195, column: 18 } },
                '32': { start: { line: 197, column: 17 }, end: { line: 197, column: 75 } },
                '33': { start: { line: 199, column: 31 }, end: { line: 199, column: 33 } },
                '34': { start: { line: 203, column: 32 }, end: { line: 203, column: 34 } },
                '35': { start: { line: 207, column: 2 }, end: { line: 234, column: 3 } },
                '36': { start: { line: 207, column: 15 }, end: { line: 207, column: 16 } },
                '37': { start: { line: 208, column: 23 }, end: { line: 208, column: 32 } },
                '38': { start: { line: 209, column: 17 }, end: { line: 209, column: 43 } },
                '39': { start: { line: 210, column: 23 }, end: { line: 210, column: 34 } },
                '40': { start: { line: 212, column: 24 }, end: { line: 212, column: 65 } },
                '41': { start: { line: 213, column: 4 }, end: { line: 222, column: 5 } },
                '42': { start: { line: 213, column: 17 }, end: { line: 213, column: 18 } },
                '43': { start: { line: 213, column: 24 }, end: { line: 213, column: 25 } },
                '44': { start: { line: 214, column: 16 }, end: { line: 214, column: 27 } },
                '45': { start: { line: 215, column: 16 }, end: { line: 215, column: 27 } },
                '46': { start: { line: 216, column: 16 }, end: { line: 216, column: 27 } },
                '47': { start: { line: 217, column: 20 }, end: { line: 217, column: 51 } },
                '48': { start: { line: 218, column: 6 }, end: { line: 218, column: 28 } },
                '49': { start: { line: 221, column: 6 }, end: { line: 221, column: 29 } },
                '50': { start: { line: 225, column: 23 }, end: { line: 225, column: 56 } },
                '51': { start: { line: 226, column: 4 }, end: { line: 231, column: 5 } },
                '52': { start: { line: 227, column: 6 }, end: { line: 227, column: 67 } },
                '53': { start: { line: 229, column: 6 }, end: { line: 229, column: 50 } },
                '54': { start: { line: 230, column: 6 }, end: { line: 230, column: 55 } },
                '55': { start: { line: 233, column: 4 }, end: { line: 233, column: 43 } },
                '56': { start: { line: 236, column: 33 }, end: { line: 236, column: 35 } },
                '57': { start: { line: 240, column: 31 }, end: { line: 245, column: 4 } },
                '58': { start: { line: 244, column: 4 }, end: { line: 244, column: 73 } },
                '59': { start: { line: 248, column: 24 }, end: { line: 250, column: 26 } },
                '60': { start: { line: 250, column: 14 }, end: { line: 250, column: 25 } },
                '61': { start: { line: 252, column: 2 }, end: { line: 254, column: 4 } },
                '62': { start: { line: 256, column: 27 }, end: { line: 256, column: 49 } },
                '63': { start: { line: 263, column: 2 }, end: { line: 278, column: 3 } },
                '64': { start: { line: 263, column: 15 }, end: { line: 263, column: 16 } },
                '65': { start: { line: 264, column: 20 }, end: { line: 264, column: 76 } },
                '66': { start: { line: 264, column: 64 }, end: { line: 264, column: 75 } },
                '67': { start: { line: 266, column: 23 }, end: { line: 266, column: 68 } },
                '68': { start: { line: 266, column: 43 }, end: { line: 266, column: 67 } },
                '69': { start: { line: 267, column: 4 }, end: { line: 277, column: 5 } },
                '70': { start: { line: 268, column: 6 }, end: { line: 271, column: 7 } },
                '71': { start: { line: 268, column: 19 }, end: { line: 268, column: 20 } },
                '72': { start: { line: 269, column: 8 }, end: { line: 269, column: 42 } },
                '73': { start: { line: 270, column: 8 }, end: { line: 270, column: 44 } },
                '74': { start: { line: 274, column: 6 }, end: { line: 276, column: 8 } },
                '75': { start: { line: 280, column: 2 }, end: { line: 280, column: 63 } },
                '76': { start: { line: 284, column: 30 }, end: { line: 284, column: 32 } },
                '77': { start: { line: 285, column: 2 }, end: { line: 289, column: 3 } },
                '78': { start: { line: 285, column: 15 }, end: { line: 285, column: 16 } },
                '79': { start: { line: 286, column: 4 }, end: { line: 288, column: 5 } },
                '80': { start: { line: 287, column: 6 }, end: { line: 287, column: 48 } },
                '81': { start: { line: 292, column: 15 }, end: { line: 292, column: 16 } },
                '82': { start: { line: 293, column: 2 }, end: { line: 295, column: 3 } },
                '83': { start: { line: 294, column: 4 }, end: { line: 294, column: 17 } },
                '84': { start: { line: 296, column: 2 }, end: { line: 296, column: 32 } },
                '85': { start: { line: 299, column: 15 }, end: { line: 302, column: 3 } },
                '86': { start: { line: 303, column: 20 }, end: { line: 303, column: 79 } },
                '87': { start: { line: 304, column: 22 }, end: { line: 304, column: 24 } },
                '88': { start: { line: 313, column: 2 }, end: { line: 393, column: 3 } },
                '89': { start: { line: 313, column: 15 }, end: { line: 313, column: 16 } },
                '90': { start: { line: 314, column: 33 }, end: { line: 314, column: 65 } },
                '91': { start: { line: 315, column: 20 }, end: { line: 315, column: 61 } },
                '92': { start: { line: 316, column: 30 }, end: { line: 316, column: 70 } },
                '93': { start: { line: 319, column: 31 }, end: { line: 319, column: 33 } },
                '94': { start: { line: 322, column: 32 }, end: { line: 322, column: 41 } },
                '95': { start: { line: 324, column: 4 }, end: { line: 343, column: 5 } },
                '96': { start: { line: 324, column: 17 }, end: { line: 324, column: 18 } },
                '97': { start: { line: 325, column: 20 }, end: { line: 325, column: 46 } },
                '98': { start: { line: 326, column: 6 }, end: { line: 334, column: 7 } },
                '99': { start: { line: 327, column: 8 }, end: { line: 330, column: 9 } },
                '100': { start: { line: 328, column: 10 }, end: { line: 328, column: 53 } },
                '101': { start: { line: 329, column: 10 }, end: { line: 329, column: 30 } },
                '102': { start: { line: 331, column: 8 }, end: { line: 331, column: 57 } },
                '103': { start: { line: 333, column: 8 }, end: { line: 333, column: 58 } },
                '104': { start: { line: 336, column: 6 }, end: { line: 342, column: 7 } },
                '105': { start: { line: 339, column: 8 }, end: { line: 341, column: 9 } },
                '106': { start: { line: 340, column: 10 }, end: { line: 340, column: 41 } },
                '107': { start: { line: 345, column: 22 }, end: { line: 345, column: 24 } },
                '108': { start: { line: 348, column: 29 }, end: { line: 348, column: 77 } },
                '109': { start: { line: 348, column: 49 }, end: { line: 348, column: 76 } },
                '110': { start: { line: 349, column: 4 }, end: { line: 366, column: 5 } },
                '111': { start: { line: 351, column: 26 }, end: { line: 351, column: 45 } },
                '112': { start: { line: 352, column: 31 }, end: { line: 354, column: 42 } },
                '113': { start: { line: 355, column: 6 }, end: { line: 365, column: 7 } },
                '114': { start: { line: 356, column: 8 }, end: { line: 361, column: 9 } },
                '115': { start: { line: 356, column: 21 }, end: { line: 356, column: 22 } },
                '116': { start: { line: 358, column: 10 }, end: { line: 360, column: 11 } },
                '117': { start: { line: 359, column: 12 }, end: { line: 359, column: 52 } },
                '118': { start: { line: 362, column: 8 }, end: { line: 362, column: 49 } },
                '119': { start: { line: 364, column: 8 }, end: { line: 364, column: 45 } },
                '120': { start: { line: 367, column: 4 }, end: { line: 367, column: 49 } },
                '121': { start: { line: 368, column: 4 }, end: { line: 376, column: 5 } },
                '122': { start: { line: 370, column: 19 }, end: { line: 370, column: 20 } },
                '123': { start: { line: 371, column: 6 }, end: { line: 373, column: 7 } },
                '124': { start: { line: 372, column: 8 }, end: { line: 372, column: 21 } },
                '125': { start: { line: 374, column: 6 }, end: { line: 374, column: 30 } },
                '126': { start: { line: 375, column: 6 }, end: { line: 375, column: 51 } },
                '127': { start: { line: 377, column: 4 }, end: { line: 387, column: 5 } },
                '128': { start: { line: 379, column: 6 }, end: { line: 386, column: 8 } },
                '129': { start: { line: 389, column: 4 }, end: { line: 392, column: 6 } },
                '130': { start: { line: 395, column: 2 }, end: { line: 395, column: 39 } },
                '131': { start: { line: 397, column: 2 }, end: { line: 404, column: 4 } },
                '132': { start: { line: 406, column: 20 }, end: { line: 406, column: 25 } },
                '133': { start: { line: 407, column: 15 }, end: { line: 409, column: 4 } },
                '134': { start: { line: 410, column: 2 }, end: { line: 410, column: 55 } },
                '135': { start: { line: 455, column: 0 }, end: { line: 483, column: 2 } },
                '136': { start: { line: 456, column: 2 }, end: { line: 456, column: 50 } },
                '137': { start: { line: 457, column: 17 }, end: { line: 457, column: 31 } },
                '138': { start: { line: 458, column: 2 }, end: { line: 458, column: 53 } },
                '139': { start: { line: 459, column: 2 }, end: { line: 459, column: 29 } },
                '140': { start: { line: 460, column: 12 }, end: { line: 460, column: 22 } },
                '141': { start: { line: 461, column: 2 }, end: { line: 461, column: 43 } },
                '142': { start: { line: 462, column: 14 }, end: { line: 462, column: 15 } },
                '143': { start: { line: 464, column: 20 }, end: { line: 464, column: 43 } },
                '144': { start: { line: 465, column: 14 }, end: { line: 465, column: 34 } },
                '145': { start: { line: 466, column: 15 }, end: { line: 466, column: 17 } },
                '146': { start: { line: 467, column: 23 }, end: { line: 470, column: 16 } },
                '147': { start: { line: 468, column: 4 }, end: { line: 468, column: 52 } },
                '148': { start: { line: 469, column: 4 }, end: { line: 469, column: 12 } },
                '149': { start: { line: 472, column: 2 }, end: { line: 482, column: 22 } },
                '150': { start: { line: 473, column: 4 }, end: { line: 473, column: 32 } },
                '151': { start: { line: 474, column: 4 }, end: { line: 480, column: 5 } },
                '152': { start: { line: 475, column: 6 }, end: { line: 475, column: 23 } },
                '153': { start: { line: 477, column: 6 }, end: { line: 479, column: 7 } },
                '154': { start: { line: 478, column: 8 }, end: { line: 478, column: 66 } },
                '155': { start: { line: 481, column: 4 }, end: { line: 481, column: 16 } },
                '156': { start: { line: 485, column: 0 }, end: { line: 521, column: 2 } },
                '157': { start: { line: 487, column: 2 }, end: { line: 491, column: 3 } },
                '158': { start: { line: 488, column: 4 }, end: { line: 488, column: 31 } },
                '159': { start: { line: 490, column: 4 }, end: { line: 490, column: 15 } },
                '160': { start: { line: 493, column: 2 }, end: { line: 511, column: 3 } },
                '161': { start: { line: 494, column: 4 }, end: { line: 494, column: 22 } },
                '162': { start: { line: 495, column: 4 }, end: { line: 495, column: 27 } },
                '163': { start: { line: 497, column: 4 }, end: { line: 510, column: 5 } },
                '164': { start: { line: 499, column: 8 }, end: { line: 499, column: 31 } },
                '165': { start: { line: 500, column: 8 }, end: { line: 500, column: 14 } },
                '166': { start: { line: 502, column: 8 }, end: { line: 502, column: 32 } },
                '167': { start: { line: 503, column: 8 }, end: { line: 503, column: 14 } },
                '168': { start: { line: 505, column: 8 }, end: { line: 505, column: 32 } },
                '169': { start: { line: 506, column: 8 }, end: { line: 506, column: 14 } },
                '170': { start: { line: 508, column: 8 }, end: { line: 508, column: 31 } },
                '171': { start: { line: 509, column: 8 }, end: { line: 509, column: 14 } },
                '172': { start: { line: 512, column: 23 }, end: { line: 512, column: 43 } },
                '173': { start: { line: 513, column: 18 }, end: { line: 513, column: 41 } },
                '174': { start: { line: 514, column: 2 }, end: { line: 514, column: 56 } },
                '175': { start: { line: 516, column: 20 }, end: { line: 516, column: 22 } },
                '176': { start: { line: 517, column: 2 }, end: { line: 517, column: 34 } },
                '177': { start: { line: 518, column: 2 }, end: { line: 518, column: 32 } },
                '178': { start: { line: 519, column: 2 }, end: { line: 519, column: 28 } },
                '179': { start: { line: 520, column: 2 }, end: { line: 520, column: 19 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 89, column: 27 }, end: { line: 89, column: 28 } },
                  loc: { start: { line: 89, column: 51 }, end: { line: 92, column: 1 } },
                  line: 89
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: {
                    start: { line: 141, column: 26 },
                    end: { line: 141, column: 27 }
                  },
                  loc: { start: { line: 141, column: 37 }, end: { line: 185, column: 1 } },
                  line: 141
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 182, column: 20 },
                    end: { line: 182, column: 21 }
                  },
                  loc: { start: { line: 182, column: 28 }, end: { line: 184, column: 3 } },
                  line: 182
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 187, column: 23 },
                    end: { line: 187, column: 24 }
                  },
                  loc: { start: { line: 187, column: 48 }, end: { line: 411, column: 1 } },
                  line: 187
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 240, column: 71 },
                    end: { line: 240, column: 72 }
                  },
                  loc: { start: { line: 243, column: 4 }, end: { line: 245, column: 3 } },
                  line: 243
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: { start: { line: 250, column: 9 }, end: { line: 250, column: 10 } },
                  loc: { start: { line: 250, column: 14 }, end: { line: 250, column: 25 } },
                  line: 250
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 264, column: 59 },
                    end: { line: 264, column: 60 }
                  },
                  loc: { start: { line: 264, column: 64 }, end: { line: 264, column: 75 } },
                  line: 264
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 266, column: 38 },
                    end: { line: 266, column: 39 }
                  },
                  loc: { start: { line: 266, column: 43 }, end: { line: 266, column: 67 } },
                  line: 266
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 348, column: 44 },
                    end: { line: 348, column: 45 }
                  },
                  loc: { start: { line: 348, column: 49 }, end: { line: 348, column: 76 } },
                  line: 348
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 455, column: 26 },
                    end: { line: 455, column: 27 }
                  },
                  loc: { start: { line: 455, column: 74 }, end: { line: 483, column: 1 } },
                  line: 455
                },
                '10': {
                  name: '(anonymous_10)',
                  decl: {
                    start: { line: 467, column: 35 },
                    end: { line: 467, column: 36 }
                  },
                  loc: { start: { line: 467, column: 41 }, end: { line: 470, column: 3 } },
                  line: 467
                },
                '11': {
                  name: '(anonymous_11)',
                  decl: {
                    start: { line: 472, column: 13 },
                    end: { line: 472, column: 14 }
                  },
                  loc: { start: { line: 472, column: 19 }, end: { line: 482, column: 3 } },
                  line: 472
                },
                '12': {
                  name: '(anonymous_12)',
                  decl: {
                    start: { line: 485, column: 26 },
                    end: { line: 485, column: 27 }
                  },
                  loc: { start: { line: 485, column: 62 }, end: { line: 521, column: 1 } },
                  line: 485
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 148, column: 2 }, end: { line: 156, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 148, column: 2 }, end: { line: 156, column: 3 } },
                    { start: { line: 148, column: 2 }, end: { line: 156, column: 3 } }
                  ],
                  line: 148
                },
                '1': {
                  loc: { start: { line: 151, column: 9 }, end: { line: 156, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 151, column: 9 }, end: { line: 156, column: 3 } },
                    { start: { line: 151, column: 9 }, end: { line: 156, column: 3 } }
                  ],
                  line: 151
                },
                '2': {
                  loc: { start: { line: 155, column: 17 }, end: { line: 155, column: 57 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 155, column: 17 }, end: { line: 155, column: 33 } },
                    { start: { line: 155, column: 37 }, end: { line: 155, column: 57 } }
                  ],
                  line: 155
                },
                '3': {
                  loc: { start: { line: 158, column: 2 }, end: { line: 160, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 158, column: 2 }, end: { line: 160, column: 3 } },
                    { start: { line: 158, column: 2 }, end: { line: 160, column: 3 } }
                  ],
                  line: 158
                },
                '4': {
                  loc: { start: { line: 161, column: 2 }, end: { line: 163, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 161, column: 2 }, end: { line: 163, column: 3 } },
                    { start: { line: 161, column: 2 }, end: { line: 163, column: 3 } }
                  ],
                  line: 161
                },
                '5': {
                  loc: { start: { line: 166, column: 4 }, end: { line: 168, column: 9 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 166, column: 4 }, end: { line: 166, column: 13 } },
                    { start: { line: 167, column: 4 }, end: { line: 167, column: 60 } },
                    { start: { line: 168, column: 4 }, end: { line: 168, column: 9 } }
                  ],
                  line: 166
                },
                '6': {
                  loc: { start: { line: 171, column: 2 }, end: { line: 180, column: 3 } },
                  type: 'switch',
                  locations: [
                    { start: { line: 172, column: 4 }, end: { line: 175, column: 12 } },
                    { start: { line: 176, column: 4 }, end: { line: 176, column: 16 } },
                    { start: { line: 177, column: 4 }, end: { line: 179, column: 12 } }
                  ],
                  line: 171
                },
                '7': {
                  loc: { start: { line: 192, column: 2 }, end: { line: 196, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 192, column: 2 }, end: { line: 196, column: 3 } },
                    { start: { line: 192, column: 2 }, end: { line: 196, column: 3 } }
                  ],
                  line: 192
                },
                '8': {
                  loc: { start: { line: 194, column: 9 }, end: { line: 196, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 194, column: 9 }, end: { line: 196, column: 3 } },
                    { start: { line: 194, column: 9 }, end: { line: 196, column: 3 } }
                  ],
                  line: 194
                },
                '9': {
                  loc: { start: { line: 226, column: 4 }, end: { line: 231, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 226, column: 4 }, end: { line: 231, column: 5 } },
                    { start: { line: 226, column: 4 }, end: { line: 231, column: 5 } }
                  ],
                  line: 226
                },
                '10': {
                  loc: { start: { line: 267, column: 4 }, end: { line: 277, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 267, column: 4 }, end: { line: 277, column: 5 } },
                    { start: { line: 267, column: 4 }, end: { line: 277, column: 5 } }
                  ],
                  line: 267
                },
                '11': {
                  loc: { start: { line: 286, column: 4 }, end: { line: 288, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 286, column: 4 }, end: { line: 288, column: 5 } },
                    { start: { line: 286, column: 4 }, end: { line: 288, column: 5 } }
                  ],
                  line: 286
                },
                '12': {
                  loc: { start: { line: 315, column: 20 }, end: { line: 315, column: 61 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 315, column: 43 }, end: { line: 315, column: 45 } },
                    { start: { line: 315, column: 48 }, end: { line: 315, column: 61 } }
                  ],
                  line: 315
                },
                '13': {
                  loc: { start: { line: 326, column: 6 }, end: { line: 334, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 326, column: 6 }, end: { line: 334, column: 7 } },
                    { start: { line: 326, column: 6 }, end: { line: 334, column: 7 } }
                  ],
                  line: 326
                },
                '14': {
                  loc: { start: { line: 327, column: 8 }, end: { line: 330, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 327, column: 8 }, end: { line: 330, column: 9 } },
                    { start: { line: 327, column: 8 }, end: { line: 330, column: 9 } }
                  ],
                  line: 327
                },
                '15': {
                  loc: { start: { line: 336, column: 6 }, end: { line: 342, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 336, column: 6 }, end: { line: 342, column: 7 } },
                    { start: { line: 336, column: 6 }, end: { line: 342, column: 7 } }
                  ],
                  line: 336
                },
                '16': {
                  loc: { start: { line: 339, column: 8 }, end: { line: 341, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 339, column: 8 }, end: { line: 341, column: 9 } },
                    { start: { line: 339, column: 8 }, end: { line: 341, column: 9 } }
                  ],
                  line: 339
                },
                '17': {
                  loc: { start: { line: 349, column: 4 }, end: { line: 366, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 349, column: 4 }, end: { line: 366, column: 5 } },
                    { start: { line: 349, column: 4 }, end: { line: 366, column: 5 } }
                  ],
                  line: 349
                },
                '18': {
                  loc: { start: { line: 352, column: 31 }, end: { line: 354, column: 42 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 353, column: 10 }, end: { line: 353, column: 41 } },
                    { start: { line: 354, column: 10 }, end: { line: 354, column: 42 } }
                  ],
                  line: 352
                },
                '19': {
                  loc: { start: { line: 355, column: 6 }, end: { line: 365, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 355, column: 6 }, end: { line: 365, column: 7 } },
                    { start: { line: 355, column: 6 }, end: { line: 365, column: 7 } }
                  ],
                  line: 355
                },
                '20': {
                  loc: { start: { line: 358, column: 10 }, end: { line: 360, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 358, column: 10 }, end: { line: 360, column: 11 } },
                    { start: { line: 358, column: 10 }, end: { line: 360, column: 11 } }
                  ],
                  line: 358
                },
                '21': {
                  loc: { start: { line: 368, column: 4 }, end: { line: 376, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 368, column: 4 }, end: { line: 376, column: 5 } },
                    { start: { line: 368, column: 4 }, end: { line: 376, column: 5 } }
                  ],
                  line: 368
                },
                '22': {
                  loc: { start: { line: 377, column: 4 }, end: { line: 387, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 377, column: 4 }, end: { line: 387, column: 5 } },
                    { start: { line: 377, column: 4 }, end: { line: 387, column: 5 } }
                  ],
                  line: 377
                },
                '23': {
                  loc: { start: { line: 457, column: 17 }, end: { line: 457, column: 31 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 457, column: 17 }, end: { line: 457, column: 26 } },
                    { start: { line: 457, column: 30 }, end: { line: 457, column: 31 } }
                  ],
                  line: 457
                },
                '24': {
                  loc: { start: { line: 460, column: 12 }, end: { line: 460, column: 22 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 460, column: 12 }, end: { line: 460, column: 16 } },
                    { start: { line: 460, column: 20 }, end: { line: 460, column: 22 } }
                  ],
                  line: 460
                },
                '25': {
                  loc: { start: { line: 474, column: 4 }, end: { line: 480, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 474, column: 4 }, end: { line: 480, column: 5 } },
                    { start: { line: 474, column: 4 }, end: { line: 480, column: 5 } }
                  ],
                  line: 474
                },
                '26': {
                  loc: { start: { line: 487, column: 2 }, end: { line: 491, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 487, column: 2 }, end: { line: 491, column: 3 } },
                    { start: { line: 487, column: 2 }, end: { line: 491, column: 3 } }
                  ],
                  line: 487
                },
                '27': {
                  loc: { start: { line: 493, column: 2 }, end: { line: 511, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 493, column: 2 }, end: { line: 511, column: 3 } },
                    { start: { line: 493, column: 2 }, end: { line: 511, column: 3 } }
                  ],
                  line: 493
                },
                '28': {
                  loc: { start: { line: 497, column: 4 }, end: { line: 510, column: 5 } },
                  type: 'switch',
                  locations: [
                    { start: { line: 498, column: 6 }, end: { line: 500, column: 14 } },
                    { start: { line: 501, column: 6 }, end: { line: 503, column: 14 } },
                    { start: { line: 504, column: 6 }, end: { line: 506, column: 14 } },
                    { start: { line: 507, column: 6 }, end: { line: 509, column: 14 } }
                  ],
                  line: 497
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0,
                '118': 0,
                '119': 0,
                '120': 0,
                '121': 0,
                '122': 0,
                '123': 0,
                '124': 0,
                '125': 0,
                '126': 0,
                '127': 0,
                '128': 0,
                '129': 0,
                '130': 0,
                '131': 0,
                '132': 0,
                '133': 0,
                '134': 0,
                '135': 0,
                '136': 0,
                '137': 0,
                '138': 0,
                '139': 0,
                '140': 0,
                '141': 0,
                '142': 0,
                '143': 0,
                '144': 0,
                '145': 0,
                '146': 0,
                '147': 0,
                '148': 0,
                '149': 0,
                '150': 0,
                '151': 0,
                '152': 0,
                '153': 0,
                '154': 0,
                '155': 0,
                '156': 0,
                '157': 0,
                '158': 0,
                '159': 0,
                '160': 0,
                '161': 0,
                '162': 0,
                '163': 0,
                '164': 0,
                '165': 0,
                '166': 0,
                '167': 0,
                '168': 0,
                '169': 0,
                '170': 0,
                '171': 0,
                '172': 0,
                '173': 0,
                '174': 0,
                '175': 0,
                '176': 0,
                '177': 0,
                '178': 0,
                '179': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0, 0],
                '6': [0, 0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0],
                '20': [0, 0],
                '21': [0, 0],
                '22': [0, 0],
                '23': [0, 0],
                '24': [0, 0],
                '25': [0, 0],
                '26': [0, 0],
                '27': [0, 0],
                '28': [0, 0, 0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '4a7c07aec0c2bc27c61ae42064ac91e97b42629a'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.symbol');
          _dereq_('core-js/modules/es.symbol.description');
          _dereq_('core-js/modules/es.symbol.iterator');
          _dereq_('core-js/modules/es.array.concat');
          _dereq_('core-js/modules/es.array.filter');
          _dereq_('core-js/modules/es.array.from');
          _dereq_('core-js/modules/es.array.iterator');
          _dereq_('core-js/modules/es.array.map');
          _dereq_('core-js/modules/es.array.slice');
          _dereq_('core-js/modules/es.object.keys');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.regexp.exec');
          _dereq_('core-js/modules/es.regexp.to-string');
          _dereq_('core-js/modules/es.set');
          _dereq_('core-js/modules/es.string.iterator');
          _dereq_('core-js/modules/es.string.replace');
          _dereq_('core-js/modules/es.string.split');
          _dereq_('core-js/modules/es.typed-array.uint8-array');
          _dereq_('core-js/modules/es.typed-array.uint32-array');
          _dereq_('core-js/modules/es.typed-array.copy-within');
          _dereq_('core-js/modules/es.typed-array.every');
          _dereq_('core-js/modules/es.typed-array.fill');
          _dereq_('core-js/modules/es.typed-array.filter');
          _dereq_('core-js/modules/es.typed-array.find');
          _dereq_('core-js/modules/es.typed-array.find-index');
          _dereq_('core-js/modules/es.typed-array.for-each');
          _dereq_('core-js/modules/es.typed-array.includes');
          _dereq_('core-js/modules/es.typed-array.index-of');
          _dereq_('core-js/modules/es.typed-array.iterator');
          _dereq_('core-js/modules/es.typed-array.join');
          _dereq_('core-js/modules/es.typed-array.last-index-of');
          _dereq_('core-js/modules/es.typed-array.map');
          _dereq_('core-js/modules/es.typed-array.reduce');
          _dereq_('core-js/modules/es.typed-array.reduce-right');
          _dereq_('core-js/modules/es.typed-array.reverse');
          _dereq_('core-js/modules/es.typed-array.set');
          _dereq_('core-js/modules/es.typed-array.slice');
          _dereq_('core-js/modules/es.typed-array.some');
          _dereq_('core-js/modules/es.typed-array.sort');
          _dereq_('core-js/modules/es.typed-array.subarray');
          _dereq_('core-js/modules/es.typed-array.to-locale-string');
          _dereq_('core-js/modules/es.typed-array.to-string');
          _dereq_('core-js/modules/web.dom-collections.iterator');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          var _omggif = _interopRequireDefault(_dereq_('omggif'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          function _toConsumableArray(arr) {
            return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();
          }
          function _nonIterableSpread() {
            throw new TypeError('Invalid attempt to spread non-iterable instance');
          }
          function _iterableToArray(iter) {
            if (
              Symbol.iterator in Object(iter) ||
              Object.prototype.toString.call(iter) === '[object Arguments]'
            )
              return Array.from(iter);
          }
          function _arrayWithoutHoles(arr) {
            if (Array.isArray(arr)) {
              for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {
                arr2[i] = arr[i];
              }
              return arr2;
            }
          }
          cov_1r2cl8ltdv.s[0]++;

          /**
           * Creates a new <a href="#/p5.Image">p5.Image</a> (the datatype for storing images). This provides a
           * fresh buffer of pixels to play with. Set the size of the buffer with the
           * width and height parameters.
           *
           * .<a href="#/p5.Image/pixels">pixels</a> gives access to an array containing the values for all the pixels
           * in the display window.
           * These values are numbers. This array is the size (including an appropriate
           * factor for the <a href="#/p5/pixelDensity">pixelDensity</a>) of the display window x4,
           * representing the R, G, B, A values in order for each pixel, moving from
           * left to right across each row, then down each column. See .<a href="#/p5.Image/pixels">pixels</a> for
           * more info. It may also be simpler to use <a href="#/p5.Image/set">set()</a> or <a href="#/p5.Image/get">get()</a>.
           *
           * Before accessing the pixels of an image, the data must loaded with the
           * <a href="#/p5.Image/loadPixels">loadPixels()</a> function. After the array data has been modified, the
           * <a href="#/p5.Image/updatePixels">updatePixels()</a> function must be run to update the changes.
           *
           * @method createImage
           * @param  {Integer} width  width in pixels
           * @param  {Integer} height height in pixels
           * @return {p5.Image}       the <a href="#/p5.Image">p5.Image</a> object
           * @example
           * <div>
           * <code>
           * let img = createImage(66, 66);
           * img.loadPixels();
           * for (let i = 0; i < img.width; i++) {
           *   for (let j = 0; j < img.height; j++) {
           *     img.set(i, j, color(0, 90, 102));
           *   }
           * }
           * img.updatePixels();
           * image(img, 17, 17);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * let img = createImage(66, 66);
           * img.loadPixels();
           * for (let i = 0; i < img.width; i++) {
           *   for (let j = 0; j < img.height; j++) {
           *     img.set(i, j, color(0, 90, 102, (i % img.width) * 2));
           *   }
           * }
           * img.updatePixels();
           * image(img, 17, 17);
           * image(img, 34, 34);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * let pink = color(255, 102, 204);
           * let img = createImage(66, 66);
           * img.loadPixels();
           * let d = pixelDensity();
           * let halfImage = 4 * (img.width * d) * (img.height / 2 * d);
           * for (let i = 0; i < halfImage; i += 4) {
           *   img.pixels[i] = red(pink);
           *   img.pixels[i + 1] = green(pink);
           *   img.pixels[i + 2] = blue(pink);
           *   img.pixels[i + 3] = alpha(pink);
           * }
           * img.updatePixels();
           * image(img, 17, 17);
           * </code>
           * </div>
           *
           * @alt
           * 66x66 dark turquoise rect in center of canvas.
           * 2 gradated dark turquoise rects fade left. 1 center 1 bottom right of canvas
           * no image displayed
           */
          _main.default.prototype.createImage = function(width, height) {
            cov_1r2cl8ltdv.f[0]++;
            cov_1r2cl8ltdv.s[1]++;
            _main.default._validateParameters('createImage', arguments);
            cov_1r2cl8ltdv.s[2]++;
            return new _main.default.Image(width, height);
          };

          /**
           *  Save the current canvas as an image. The browser will either save the
           *  file immediately, or prompt the user with a dialogue window.
           *
           *  @method saveCanvas
           *  @param  {p5.Element|HTMLCanvasElement} selectedCanvas   a variable
           *                                  representing a specific html5 canvas (optional)
           *  @param  {String} [filename]
           *  @param  {String} [extension]      'jpg' or 'png'
           *
           *  @example
           * <div class='norender notest'><code>
           * function setup() {
           *   let c = createCanvas(100, 100);
           *   background(255, 0, 0);
           *   saveCanvas(c, 'myCanvas', 'jpg');
           * }
           * </code></div>
           * <div class='norender notest'><code>
           * // note that this example has the same result as above
           * // if no canvas is specified, defaults to main canvas
           * function setup() {
           *   let c = createCanvas(100, 100);
           *   background(255, 0, 0);
           *   saveCanvas('myCanvas', 'jpg');
           *
           *   // all of the following are valid
           *   saveCanvas(c, 'myCanvas', 'jpg');
           *   saveCanvas(c, 'myCanvas.jpg');
           *   saveCanvas(c, 'myCanvas');
           *   saveCanvas(c);
           *   saveCanvas('myCanvas', 'png');
           *   saveCanvas('myCanvas');
           *   saveCanvas();
           * }
           * </code></div>
           *
           * @alt
           * no image displayed
           * no image displayed
           * no image displayed
           */
          /**
           *  @method saveCanvas
           *  @param  {String} [filename]
           *  @param  {String} [extension]
           */ cov_1r2cl8ltdv.s[3]++;
          _main.default.prototype.saveCanvas = function() {
            cov_1r2cl8ltdv.f[1]++;
            cov_1r2cl8ltdv.s[4]++;
            _main.default._validateParameters('saveCanvas', arguments);

            // copy arguments to array
            var args = (cov_1r2cl8ltdv.s[5]++, [].slice.call(arguments));
            var htmlCanvas, filename, extension;
            cov_1r2cl8ltdv.s[6]++;

            if (arguments[0] instanceof HTMLCanvasElement) {
              cov_1r2cl8ltdv.b[0][0]++;
              cov_1r2cl8ltdv.s[7]++;
              htmlCanvas = arguments[0];
              cov_1r2cl8ltdv.s[8]++;
              args.shift();
            } else {
              cov_1r2cl8ltdv.b[0][1]++;
              cov_1r2cl8ltdv.s[9]++;
              if (arguments[0] instanceof _main.default.Element) {
                cov_1r2cl8ltdv.b[1][0]++;
                cov_1r2cl8ltdv.s[10]++;
                htmlCanvas = arguments[0].elt;
                cov_1r2cl8ltdv.s[11]++;
                args.shift();
              } else {
                cov_1r2cl8ltdv.b[1][1]++;
                cov_1r2cl8ltdv.s[12]++;
                htmlCanvas =
                  (cov_1r2cl8ltdv.b[2][0]++, this._curElement) &&
                  (cov_1r2cl8ltdv.b[2][1]++, this._curElement.elt);
              }
            }
            cov_1r2cl8ltdv.s[13]++;

            if (args.length >= 1) {
              cov_1r2cl8ltdv.b[3][0]++;
              cov_1r2cl8ltdv.s[14]++;
              filename = args[0];
            } else {
              cov_1r2cl8ltdv.b[3][1]++;
            }
            cov_1r2cl8ltdv.s[15]++;
            if (args.length >= 2) {
              cov_1r2cl8ltdv.b[4][0]++;
              cov_1r2cl8ltdv.s[16]++;
              extension = args[1];
            } else {
              cov_1r2cl8ltdv.b[4][1]++;
            }
            cov_1r2cl8ltdv.s[17]++;

            extension =
              (cov_1r2cl8ltdv.b[5][0]++, extension) ||
              (cov_1r2cl8ltdv.b[5][1]++,
              _main.default.prototype._checkFileExtension(filename, extension)[1]) ||
              (cov_1r2cl8ltdv.b[5][2]++, 'png');

            var mimeType;
            cov_1r2cl8ltdv.s[18]++;
            switch (extension) {
              default:
                cov_1r2cl8ltdv.b[6][0]++;
                cov_1r2cl8ltdv.s[19]++;
                //case 'png':
                mimeType = 'image/png';
                cov_1r2cl8ltdv.s[20]++;
                break;
              case 'jpeg':
                cov_1r2cl8ltdv.b[6][1]++;
              case 'jpg':
                cov_1r2cl8ltdv.b[6][2]++;
                cov_1r2cl8ltdv.s[21]++;
                mimeType = 'image/jpeg';
                cov_1r2cl8ltdv.s[22]++;
                break;
            }
            cov_1r2cl8ltdv.s[23]++;

            htmlCanvas.toBlob(function(blob) {
              cov_1r2cl8ltdv.f[2]++;
              cov_1r2cl8ltdv.s[24]++;
              _main.default.prototype.downloadFile(blob, filename, extension);
            }, mimeType);
          };
          cov_1r2cl8ltdv.s[25]++;

          _main.default.prototype.saveGif = function(pImg, filename) {
            cov_1r2cl8ltdv.f[3]++;
            var props = (cov_1r2cl8ltdv.s[26]++, pImg.gifProperties);

            //convert loopLimit back into Netscape Block formatting
            var loopLimit = (cov_1r2cl8ltdv.s[27]++, props.loopLimit);
            cov_1r2cl8ltdv.s[28]++;
            if (loopLimit === 1) {
              cov_1r2cl8ltdv.b[7][0]++;
              cov_1r2cl8ltdv.s[29]++;
              loopLimit = null;
            } else {
              cov_1r2cl8ltdv.b[7][1]++;
              cov_1r2cl8ltdv.s[30]++;
              if (loopLimit === null) {
                cov_1r2cl8ltdv.b[8][0]++;
                cov_1r2cl8ltdv.s[31]++;
                loopLimit = 0;
              } else {
                cov_1r2cl8ltdv.b[8][1]++;
              }
            }
            var buffer = (cov_1r2cl8ltdv.s[32]++,
            new Uint8Array(pImg.width * pImg.height * props.numFrames));

            var allFramesPixelColors = (cov_1r2cl8ltdv.s[33]++, []);

            // Used to determine the occurrence of unique palettes and the frames
            // which use them
            var paletteFreqsAndFrames = (cov_1r2cl8ltdv.s[34]++, {});

            // Pass 1:
            //loop over frames and get the frequency of each palette
            cov_1r2cl8ltdv.s[35]++;
            for (var i = (cov_1r2cl8ltdv.s[36]++, 0); i < props.numFrames; i++) {
              var paletteSet = (cov_1r2cl8ltdv.s[37]++, new Set());
              var data = (cov_1r2cl8ltdv.s[38]++, props.frames[i].image.data);
              var dataLength = (cov_1r2cl8ltdv.s[39]++, data.length);
              // The color for each pixel in this frame ( for easier lookup later )
              var pixelColors = (cov_1r2cl8ltdv.s[40]++,
              new Uint32Array(pImg.width * pImg.height));
              cov_1r2cl8ltdv.s[41]++;
              for (
                var j = (cov_1r2cl8ltdv.s[42]++, 0), k = (cov_1r2cl8ltdv.s[43]++, 0);
                j < dataLength;
                j += 4, k++
              ) {
                var r = (cov_1r2cl8ltdv.s[44]++, data[j + 0]);
                var g = (cov_1r2cl8ltdv.s[45]++, data[j + 1]);
                var b = (cov_1r2cl8ltdv.s[46]++, data[j + 2]);
                var color = (cov_1r2cl8ltdv.s[47]++, (r << 16) | (g << 8) | (b << 0));
                cov_1r2cl8ltdv.s[48]++;
                paletteSet.add(color);

                // What color does this pixel have in this frame ?
                cov_1r2cl8ltdv.s[49]++;
                pixelColors[k] = color;
              }

              // A way to put use the entire palette as an object key
              var paletteStr = (cov_1r2cl8ltdv.s[50]++,
              _toConsumableArray(paletteSet)
                .sort()
                .toString());
              cov_1r2cl8ltdv.s[51]++;
              if (paletteFreqsAndFrames[paletteStr] === undefined) {
                cov_1r2cl8ltdv.b[9][0]++;
                cov_1r2cl8ltdv.s[52]++;
                paletteFreqsAndFrames[paletteStr] = { freq: 1, frames: [i] };
              } else {
                cov_1r2cl8ltdv.b[9][1]++;
                cov_1r2cl8ltdv.s[53]++;
                paletteFreqsAndFrames[paletteStr].freq += 1;
                cov_1r2cl8ltdv.s[54]++;
                paletteFreqsAndFrames[paletteStr].frames.push(i);
              }
              cov_1r2cl8ltdv.s[55]++;

              allFramesPixelColors.push(pixelColors);
            }

            var framesUsingGlobalPalette = (cov_1r2cl8ltdv.s[56]++, []);

            // Now to build the global palette
            // Sort all the unique palettes in descending order of their occurence
            var palettesSortedByFreq = (cov_1r2cl8ltdv.s[57]++,
            Object.keys(paletteFreqsAndFrames).sort(function(a, b) {
              cov_1r2cl8ltdv.f[4]++;
              cov_1r2cl8ltdv.s[58]++;
              return paletteFreqsAndFrames[b].freq - paletteFreqsAndFrames[a].freq;
            }));

            // The initial global palette is the one with the most occurence
            var globalPalette = (cov_1r2cl8ltdv.s[59]++,
            palettesSortedByFreq[0].split(',').map(function(a) {
              cov_1r2cl8ltdv.f[5]++;
              cov_1r2cl8ltdv.s[60]++;
              return parseInt(a);
            }));
            cov_1r2cl8ltdv.s[61]++;

            framesUsingGlobalPalette = framesUsingGlobalPalette.concat(
              paletteFreqsAndFrames[globalPalette].frames
            );

            var globalPaletteSet = (cov_1r2cl8ltdv.s[62]++, new Set(globalPalette));

            // Build a more complete global palette
            // Iterate over the remaining palettes in the order of
            // their occurence and see if the colors in this palette which are
            // not in the global palette can be added there, while keeping the length
            // of the global palette <= 256
            cov_1r2cl8ltdv.s[63]++;
            for (
              var _i = (cov_1r2cl8ltdv.s[64]++, 1);
              _i < palettesSortedByFreq.length;
              _i++
            ) {
              var palette = (cov_1r2cl8ltdv.s[65]++,
              palettesSortedByFreq[_i].split(',').map(function(a) {
                cov_1r2cl8ltdv.f[6]++;
                cov_1r2cl8ltdv.s[66]++;
                return parseInt(a);
              }));

              var difference = (cov_1r2cl8ltdv.s[67]++,
              palette.filter(function(x) {
                cov_1r2cl8ltdv.f[7]++;
                cov_1r2cl8ltdv.s[68]++;
                return !globalPaletteSet.has(x);
              }));
              cov_1r2cl8ltdv.s[69]++;
              if (globalPalette.length + difference.length <= 256) {
                cov_1r2cl8ltdv.b[10][0]++;
                cov_1r2cl8ltdv.s[70]++;
                for (var _j = (cov_1r2cl8ltdv.s[71]++, 0); _j < difference.length; _j++) {
                  cov_1r2cl8ltdv.s[72]++;
                  globalPalette.push(difference[_j]);
                  cov_1r2cl8ltdv.s[73]++;
                  globalPaletteSet.add(difference[_j]);
                }

                // All frames using this palette now use the global palette
                cov_1r2cl8ltdv.s[74]++;
                framesUsingGlobalPalette = framesUsingGlobalPalette.concat(
                  paletteFreqsAndFrames[palettesSortedByFreq[_i]].frames
                );
              } else {
                cov_1r2cl8ltdv.b[10][1]++;
              }
            }
            cov_1r2cl8ltdv.s[75]++;

            framesUsingGlobalPalette = new Set(framesUsingGlobalPalette);

            // Build a lookup table of the index of each color in the global palette
            // Maps a color to its index
            var globalIndicesLookup = (cov_1r2cl8ltdv.s[76]++, {});
            cov_1r2cl8ltdv.s[77]++;
            for (var _i2 = (cov_1r2cl8ltdv.s[78]++, 0); _i2 < globalPalette.length; _i2++) {
              cov_1r2cl8ltdv.s[79]++;
              if (!globalIndicesLookup[globalPalette[_i2]]) {
                cov_1r2cl8ltdv.b[11][0]++;
                cov_1r2cl8ltdv.s[80]++;
                globalIndicesLookup[globalPalette[_i2]] = _i2;
              } else {
                cov_1r2cl8ltdv.b[11][1]++;
              }
            }

            // force palette to be power of 2
            var powof2 = (cov_1r2cl8ltdv.s[81]++, 1);
            cov_1r2cl8ltdv.s[82]++;
            while (powof2 < globalPalette.length) {
              cov_1r2cl8ltdv.s[83]++;
              powof2 <<= 1;
            }
            cov_1r2cl8ltdv.s[84]++;
            globalPalette.length = powof2;

            // global opts
            var opts = (cov_1r2cl8ltdv.s[85]++,
            {
              loop: loopLimit,
              palette: new Uint32Array(globalPalette)
            });

            var gifWriter = (cov_1r2cl8ltdv.s[86]++,
            new _omggif.default.GifWriter(buffer, pImg.width, pImg.height, opts));
            var previousFrame = (cov_1r2cl8ltdv.s[87]++, {});

            // Pass 2
            // Determine if the frame needs a local palette
            // Also apply transparency optimization. This function will often blow up
            // the size of a GIF if not for transparency. If a pixel in one frame has
            // the same color in the previous frame, that pixel can be marked as
            // transparent. We decide one particular color as transparent and make all
            // transparent pixels take this color. This helps in later in compression.
            cov_1r2cl8ltdv.s[88]++;
            var _loop = function _loop(_i3) {
              var localPaletteRequired = (cov_1r2cl8ltdv.s[90]++,
              !framesUsingGlobalPalette.has(_i3));
              var palette = (cov_1r2cl8ltdv.s[91]++,
              localPaletteRequired
                ? (cov_1r2cl8ltdv.b[12][0]++, [])
                : (cov_1r2cl8ltdv.b[12][1]++, globalPalette));
              var pixelPaletteIndex = (cov_1r2cl8ltdv.s[92]++,
              new Uint8Array(pImg.width * pImg.height));

              // Lookup table mapping color to its indices
              var colorIndicesLookup = (cov_1r2cl8ltdv.s[93]++, {});

              // All the colors that cannot be marked transparent in this frame
              var cannotBeTransparent = (cov_1r2cl8ltdv.s[94]++, new Set());
              cov_1r2cl8ltdv.s[95]++;

              for (
                var _k = (cov_1r2cl8ltdv.s[96]++, 0);
                _k < allFramesPixelColors[_i3].length;
                _k++
              ) {
                var _color = (cov_1r2cl8ltdv.s[97]++, allFramesPixelColors[_i3][_k]);
                cov_1r2cl8ltdv.s[98]++;
                if (localPaletteRequired) {
                  cov_1r2cl8ltdv.b[13][0]++;
                  cov_1r2cl8ltdv.s[99]++;
                  if (colorIndicesLookup[_color] === undefined) {
                    cov_1r2cl8ltdv.b[14][0]++;
                    cov_1r2cl8ltdv.s[100]++;
                    colorIndicesLookup[_color] = palette.length;
                    cov_1r2cl8ltdv.s[101]++;
                    palette.push(_color);
                  } else {
                    cov_1r2cl8ltdv.b[14][1]++;
                  }
                  cov_1r2cl8ltdv.s[102]++;
                  pixelPaletteIndex[_k] = colorIndicesLookup[_color];
                } else {
                  cov_1r2cl8ltdv.b[13][1]++;
                  cov_1r2cl8ltdv.s[103]++;
                  pixelPaletteIndex[_k] = globalIndicesLookup[_color];
                }
                cov_1r2cl8ltdv.s[104]++;

                if (_i3 > 0) {
                  cov_1r2cl8ltdv.b[15][0]++;
                  cov_1r2cl8ltdv.s[105]++;
                  // If even one pixel of this color has changed in this frame
                  // from the previous frame, we cannot mark it as transparent
                  if (allFramesPixelColors[_i3 - 1][_k] !== _color) {
                    cov_1r2cl8ltdv.b[16][0]++;
                    cov_1r2cl8ltdv.s[106]++;
                    cannotBeTransparent.add(_color);
                  } else {
                    cov_1r2cl8ltdv.b[16][1]++;
                  }
                } else {
                  cov_1r2cl8ltdv.b[15][1]++;
                }
              }

              var frameOpts = (cov_1r2cl8ltdv.s[107]++, {});

              // Transparency optimization
              var canBeTransparent = (cov_1r2cl8ltdv.s[108]++,
              palette.filter(function(a) {
                cov_1r2cl8ltdv.f[8]++;
                cov_1r2cl8ltdv.s[109]++;
                return !cannotBeTransparent.has(a);
              }));
              cov_1r2cl8ltdv.s[110]++;
              if (canBeTransparent.length > 0) {
                cov_1r2cl8ltdv.b[17][0]++;
                // Select a color to mark as transparent
                var transparent = (cov_1r2cl8ltdv.s[111]++, canBeTransparent[0]);
                var transparentIndex = (cov_1r2cl8ltdv.s[112]++,
                localPaletteRequired
                  ? (cov_1r2cl8ltdv.b[18][0]++, colorIndicesLookup[transparent])
                  : (cov_1r2cl8ltdv.b[18][1]++, globalIndicesLookup[transparent]));
                cov_1r2cl8ltdv.s[113]++;
                if (_i3 > 0) {
                  cov_1r2cl8ltdv.b[19][0]++;
                  cov_1r2cl8ltdv.s[114]++;
                  for (
                    var _k2 = (cov_1r2cl8ltdv.s[115]++, 0);
                    _k2 < allFramesPixelColors[_i3].length;
                    _k2++
                  ) {
                    cov_1r2cl8ltdv.s[116]++;
                    // If this pixel in this frame has the same color in previous frame
                    if (
                      allFramesPixelColors[_i3 - 1][_k2] === allFramesPixelColors[_i3][_k2]
                    ) {
                      cov_1r2cl8ltdv.b[20][0]++;
                      cov_1r2cl8ltdv.s[117]++;
                      pixelPaletteIndex[_k2] = transparentIndex;
                    } else {
                      cov_1r2cl8ltdv.b[20][1]++;
                    }
                  }
                  cov_1r2cl8ltdv.s[118]++;
                  frameOpts.transparent = transparentIndex;
                  // If this frame has any transparency, do not dispose the previous frame
                  cov_1r2cl8ltdv.s[119]++;
                  previousFrame.frameOpts.disposal = 1;
                } else {
                  cov_1r2cl8ltdv.b[19][1]++;
                }
              } else {
                cov_1r2cl8ltdv.b[17][1]++;
              }
              cov_1r2cl8ltdv.s[120]++;
              frameOpts.delay = props.frames[_i3].delay / 10; // Move timing back into GIF formatting
              cov_1r2cl8ltdv.s[121]++;
              if (localPaletteRequired) {
                cov_1r2cl8ltdv.b[21][0]++;
                // force palette to be power of 2
                var _powof = (cov_1r2cl8ltdv.s[122]++, 1);
                cov_1r2cl8ltdv.s[123]++;
                while (_powof < palette.length) {
                  cov_1r2cl8ltdv.s[124]++;
                  _powof <<= 1;
                }
                cov_1r2cl8ltdv.s[125]++;
                palette.length = _powof;
                cov_1r2cl8ltdv.s[126]++;
                frameOpts.palette = new Uint32Array(palette);
              } else {
                cov_1r2cl8ltdv.b[21][1]++;
              }
              cov_1r2cl8ltdv.s[127]++;
              if (_i3 > 0) {
                cov_1r2cl8ltdv.b[22][0]++;
                cov_1r2cl8ltdv.s[128]++;
                // add the frame that came before the current one
                gifWriter.addFrame(
                  0,
                  0,
                  pImg.width,
                  pImg.height,
                  previousFrame.pixelPaletteIndex,
                  previousFrame.frameOpts
                );
              } else {
                cov_1r2cl8ltdv.b[22][1]++;
              }
              // previous frame object should now have details of this frame
              cov_1r2cl8ltdv.s[129]++;
              previousFrame = {
                pixelPaletteIndex: pixelPaletteIndex,
                frameOpts: frameOpts
              };
            };
            for (var _i3 = (cov_1r2cl8ltdv.s[89]++, 0); _i3 < props.numFrames; _i3++) {
              _loop(_i3);
            }
            cov_1r2cl8ltdv.s[130]++;

            previousFrame.frameOpts.disposal = 1;
            // add the last frame
            cov_1r2cl8ltdv.s[131]++;
            gifWriter.addFrame(
              0,
              0,
              pImg.width,
              pImg.height,
              previousFrame.pixelPaletteIndex,
              previousFrame.frameOpts
            );

            var extension = (cov_1r2cl8ltdv.s[132]++, 'gif');
            var blob = (cov_1r2cl8ltdv.s[133]++,
            new Blob([buffer.slice(0, gifWriter.end())], {
              type: 'image/gif'
            }));
            cov_1r2cl8ltdv.s[134]++;

            _main.default.prototype.downloadFile(blob, filename, extension);
          };

          /**
    *  Capture a sequence of frames that can be used to create a movie.
    *  Accepts a callback. For example, you may wish to send the frames
    *  to a server where they can be stored or converted into a movie.
    *  If no callback is provided, the browser will pop up save dialogues in an
    *  attempt to download all of the images that have just been created. With the
    *  callback provided the image data isn't saved by default but instead passed
    *  as an argument to the callback function as an array of objects, with the
    *  size of array equal to the total number of frames.
    *
    *  Note that <a href="#/p5.Image/saveFrames">saveFrames()</a> will only save the first 15 frames of an animation.
    *  To export longer animations, you might look into a library like
    *  <a href="https://github.com/spite/ccapture.js/">ccapture.js</a>.
    *
    *  @method saveFrames
    *  @param  {String}   filename
    *  @param  {String}   extension 'jpg' or 'png'
    *  @param  {Number}   duration  Duration in seconds to save the frames for.
    *  @param  {Number}   framerate  Framerate to save the frames in.
    *  @param  {function(Array)} [callback] A callback function that will be executed
                                     to handle the image data. This function
                                     should accept an array as argument. The
                                     array will contain the specified number of
                                     frames of objects. Each object has three
                                     properties: imageData - an
                                     image/octet-stream, filename and extension.
    *  @example
    *  <div><code>
    * function draw() {
    *   background(mouseX);
    * }
    *
    * function mousePressed() {
    *   saveFrames('out', 'png', 1, 25, data => {
    *     print(data);
    *   });
    * }
   </code></div>
    *
    * @alt
    * canvas background goes from light to dark with mouse x.
    */ cov_1r2cl8ltdv
            .s[135]++;
          _main.default.prototype.saveFrames = function(
            fName,
            ext,
            _duration,
            _fps,
            callback
          ) {
            cov_1r2cl8ltdv.f[9]++;
            cov_1r2cl8ltdv.s[136]++;
            _main.default._validateParameters('saveFrames', arguments);
            var duration = (cov_1r2cl8ltdv.s[137]++,
            (cov_1r2cl8ltdv.b[23][0]++, _duration) || (cov_1r2cl8ltdv.b[23][1]++, 3));
            cov_1r2cl8ltdv.s[138]++;
            duration = _main.default.prototype.constrain(duration, 0, 15);
            cov_1r2cl8ltdv.s[139]++;
            duration = duration * 1000;
            var fps = (cov_1r2cl8ltdv.s[140]++,
            (cov_1r2cl8ltdv.b[24][0]++, _fps) || (cov_1r2cl8ltdv.b[24][1]++, 15));
            cov_1r2cl8ltdv.s[141]++;
            fps = _main.default.prototype.constrain(fps, 0, 22);
            var count = (cov_1r2cl8ltdv.s[142]++, 0);

            var makeFrame = (cov_1r2cl8ltdv.s[143]++, _main.default.prototype._makeFrame);
            var cnv = (cov_1r2cl8ltdv.s[144]++, this._curElement.elt);
            var frames = (cov_1r2cl8ltdv.s[145]++, []);
            var frameFactory = (cov_1r2cl8ltdv.s[146]++,
            setInterval(function() {
              cov_1r2cl8ltdv.f[10]++;
              cov_1r2cl8ltdv.s[147]++;
              frames.push(makeFrame(fName + count, ext, cnv));
              cov_1r2cl8ltdv.s[148]++;
              count++;
            }, 1000 / fps));
            cov_1r2cl8ltdv.s[149]++;

            setTimeout(function() {
              cov_1r2cl8ltdv.f[11]++;
              cov_1r2cl8ltdv.s[150]++;
              clearInterval(frameFactory);
              cov_1r2cl8ltdv.s[151]++;
              if (callback) {
                cov_1r2cl8ltdv.b[25][0]++;
                cov_1r2cl8ltdv.s[152]++;
                callback(frames);
              } else {
                cov_1r2cl8ltdv.b[25][1]++;
                cov_1r2cl8ltdv.s[153]++;
                var _iteratorNormalCompletion = true;
                var _didIteratorError = false;
                var _iteratorError = undefined;
                try {
                  for (
                    var _iterator = frames[Symbol.iterator](), _step;
                    !(_iteratorNormalCompletion = (_step = _iterator.next()).done);
                    _iteratorNormalCompletion = true
                  ) {
                    var f = _step.value;
                    cov_1r2cl8ltdv.s[154]++;
                    _main.default.prototype.downloadFile(f.imageData, f.filename, f.ext);
                  }
                } catch (err) {
                  _didIteratorError = true;
                  _iteratorError = err;
                } finally {
                  try {
                    if (!_iteratorNormalCompletion && _iterator.return != null) {
                      _iterator.return();
                    }
                  } finally {
                    if (_didIteratorError) {
                      throw _iteratorError;
                    }
                  }
                }
              }
              cov_1r2cl8ltdv.s[155]++;
              frames = []; // clear frames
            }, duration + 0.01);
          };
          cov_1r2cl8ltdv.s[156]++;

          _main.default.prototype._makeFrame = function(filename, extension, _cnv) {
            cov_1r2cl8ltdv.f[12]++;
            var cnv;
            cov_1r2cl8ltdv.s[157]++;
            if (this) {
              cov_1r2cl8ltdv.b[26][0]++;
              cov_1r2cl8ltdv.s[158]++;
              cnv = this._curElement.elt;
            } else {
              cov_1r2cl8ltdv.b[26][1]++;
              cov_1r2cl8ltdv.s[159]++;
              cnv = _cnv;
            }
            var mimeType;
            cov_1r2cl8ltdv.s[160]++;
            if (!extension) {
              cov_1r2cl8ltdv.b[27][0]++;
              cov_1r2cl8ltdv.s[161]++;
              extension = 'png';
              cov_1r2cl8ltdv.s[162]++;
              mimeType = 'image/png';
            } else {
              cov_1r2cl8ltdv.b[27][1]++;
              cov_1r2cl8ltdv.s[163]++;
              switch (extension.toLowerCase()) {
                case 'png':
                  cov_1r2cl8ltdv.b[28][0]++;
                  cov_1r2cl8ltdv.s[164]++;
                  mimeType = 'image/png';
                  cov_1r2cl8ltdv.s[165]++;
                  break;
                case 'jpeg':
                  cov_1r2cl8ltdv.b[28][1]++;
                  cov_1r2cl8ltdv.s[166]++;
                  mimeType = 'image/jpeg';
                  cov_1r2cl8ltdv.s[167]++;
                  break;
                case 'jpg':
                  cov_1r2cl8ltdv.b[28][2]++;
                  cov_1r2cl8ltdv.s[168]++;
                  mimeType = 'image/jpeg';
                  cov_1r2cl8ltdv.s[169]++;
                  break;
                default:
                  cov_1r2cl8ltdv.b[28][3]++;
                  cov_1r2cl8ltdv.s[170]++;
                  mimeType = 'image/png';
                  cov_1r2cl8ltdv.s[171]++;
                  break;
              }
            }
            var downloadMime = (cov_1r2cl8ltdv.s[172]++, 'image/octet-stream');
            var imageData = (cov_1r2cl8ltdv.s[173]++, cnv.toDataURL(mimeType));
            cov_1r2cl8ltdv.s[174]++;
            imageData = imageData.replace(mimeType, downloadMime);

            var thisFrame = (cov_1r2cl8ltdv.s[175]++, {});
            cov_1r2cl8ltdv.s[176]++;
            thisFrame.imageData = imageData;
            cov_1r2cl8ltdv.s[177]++;
            thisFrame.filename = filename;
            cov_1r2cl8ltdv.s[178]++;
            thisFrame.ext = extension;
            cov_1r2cl8ltdv.s[179]++;
            return thisFrame;
          };
          var _default = _main.default;
          exports.default = _default;
        },
        {
          '../core/main': 283,
          'core-js/modules/es.array.concat': 166,
          'core-js/modules/es.array.filter': 169,
          'core-js/modules/es.array.from': 171,
          'core-js/modules/es.array.iterator': 174,
          'core-js/modules/es.array.map': 177,
          'core-js/modules/es.array.slice': 178,
          'core-js/modules/es.object.keys': 191,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.regexp.exec': 196,
          'core-js/modules/es.regexp.to-string': 197,
          'core-js/modules/es.set': 198,
          'core-js/modules/es.string.iterator': 201,
          'core-js/modules/es.string.replace': 204,
          'core-js/modules/es.string.split': 206,
          'core-js/modules/es.symbol': 211,
          'core-js/modules/es.symbol.description': 209,
          'core-js/modules/es.symbol.iterator': 210,
          'core-js/modules/es.typed-array.copy-within': 212,
          'core-js/modules/es.typed-array.every': 213,
          'core-js/modules/es.typed-array.fill': 214,
          'core-js/modules/es.typed-array.filter': 215,
          'core-js/modules/es.typed-array.find': 217,
          'core-js/modules/es.typed-array.find-index': 216,
          'core-js/modules/es.typed-array.for-each': 220,
          'core-js/modules/es.typed-array.includes': 221,
          'core-js/modules/es.typed-array.index-of': 222,
          'core-js/modules/es.typed-array.iterator': 225,
          'core-js/modules/es.typed-array.join': 226,
          'core-js/modules/es.typed-array.last-index-of': 227,
          'core-js/modules/es.typed-array.map': 228,
          'core-js/modules/es.typed-array.reduce': 230,
          'core-js/modules/es.typed-array.reduce-right': 229,
          'core-js/modules/es.typed-array.reverse': 231,
          'core-js/modules/es.typed-array.set': 232,
          'core-js/modules/es.typed-array.slice': 233,
          'core-js/modules/es.typed-array.some': 234,
          'core-js/modules/es.typed-array.sort': 235,
          'core-js/modules/es.typed-array.subarray': 236,
          'core-js/modules/es.typed-array.to-locale-string': 237,
          'core-js/modules/es.typed-array.to-string': 238,
          'core-js/modules/es.typed-array.uint32-array': 240,
          'core-js/modules/es.typed-array.uint8-array': 241,
          'core-js/modules/web.dom-collections.iterator': 244,
          omggif: 257
        }
      ],
      306: [
        function(_dereq_, module, exports) {
          'use strict';
          function _typeof(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof = function _typeof(obj) {
                return typeof obj;
              };
            } else {
              _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof(obj);
          }
          var cov_1il1alsp6u = (function() {
            var path = '/Users/outofambit/src/p5.js/src/image/loading_displaying.js';
            var hash = 'a167da816a2062d98f124ef76ce72207604f6edf';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/image/loading_displaying.js',
              statementMap: {
                '0': { start: { line: 69, column: 0 }, end: { line: 160, column: 2 } },
                '1': { start: { line: 70, column: 2 }, end: { line: 70, column: 49 } },
                '2': { start: { line: 71, column: 15 }, end: { line: 71, column: 39 } },
                '3': { start: { line: 72, column: 15 }, end: { line: 72, column: 19 } },
                '4': { start: { line: 74, column: 14 }, end: { line: 77, column: 4 } },
                '5': { start: { line: 79, column: 2 }, end: { line: 158, column: 7 } },
                '6': { start: { line: 82, column: 26 }, end: { line: 82, column: 62 } },
                '7': { start: { line: 83, column: 6 }, end: { line: 87, column: 7 } },
                '8': { start: { line: 84, column: 8 }, end: { line: 86, column: 10 } },
                '9': { start: { line: 88, column: 6 }, end: { line: 148, column: 7 } },
                '10': { start: { line: 89, column: 8 }, end: { line: 111, column: 10 } },
                '11': { start: { line: 91, column: 12 }, end: { line: 102, column: 13 } },
                '12': { start: { line: 92, column: 32 }, end: { line: 92, column: 59 } },
                '13': { start: { line: 93, column: 14 }, end: { line: 101, column: 16 } },
                '14': { start: { line: 99, column: 18 }, end: { line: 99, column: 43 } },
                '15': { start: { line: 105, column: 12 }, end: { line: 109, column: 13 } },
                '16': { start: { line: 106, column: 14 }, end: { line: 106, column: 33 } },
                '17': { start: { line: 108, column: 14 }, end: { line: 108, column: 31 } },
                '18': { start: { line: 114, column: 20 }, end: { line: 114, column: 31 } },
                '19': { start: { line: 116, column: 8 }, end: { line: 127, column: 10 } },
                '20': { start: { line: 117, column: 10 }, end: { line: 117, column: 53 } },
                '21': { start: { line: 118, column: 10 }, end: { line: 118, column: 56 } },
                '22': { start: { line: 121, column: 10 }, end: { line: 121, column: 51 } },
                '23': { start: { line: 122, column: 10 }, end: { line: 122, column: 31 } },
                '24': { start: { line: 123, column: 10 }, end: { line: 125, column: 11 } },
                '25': { start: { line: 124, column: 12 }, end: { line: 124, column: 34 } },
                '26': { start: { line: 126, column: 10 }, end: { line: 126, column: 35 } },
                '27': { start: { line: 129, column: 8 }, end: { line: 136, column: 10 } },
                '28': { start: { line: 130, column: 10 }, end: { line: 130, column: 48 } },
                '29': { start: { line: 131, column: 10 }, end: { line: 135, column: 11 } },
                '30': { start: { line: 132, column: 12 }, end: { line: 132, column: 31 } },
                '31': { start: { line: 134, column: 12 }, end: { line: 134, column: 29 } },
                '32': { start: { line: 143, column: 8 }, end: { line: 145, column: 9 } },
                '33': { start: { line: 144, column: 10 }, end: { line: 144, column: 40 } },
                '34': { start: { line: 147, column: 8 }, end: { line: 147, column: 23 } },
                '35': { start: { line: 149, column: 6 }, end: { line: 149, column: 27 } },
                '36': { start: { line: 152, column: 6 }, end: { line: 152, column: 41 } },
                '37': { start: { line: 153, column: 6 }, end: { line: 157, column: 7 } },
                '38': { start: { line: 154, column: 8 }, end: { line: 154, column: 27 } },
                '39': { start: { line: 156, column: 8 }, end: { line: 156, column: 25 } },
                '40': { start: { line: 159, column: 2 }, end: { line: 159, column: 14 } },
                '41': { start: { line: 172, column: 20 }, end: { line: 172, column: 53 } },
                '42': { start: { line: 173, column: 2 }, end: { line: 173, column: 51 } },
                '43': { start: { line: 174, column: 2 }, end: { line: 174, column: 54 } },
                '44': { start: { line: 175, column: 17 }, end: { line: 175, column: 19 } },
                '45': { start: { line: 176, column: 20 }, end: { line: 176, column: 41 } },
                '46': { start: { line: 177, column: 20 }, end: { line: 177, column: 71 } },
                '47': { start: { line: 178, column: 2 }, end: { line: 276, column: 3 } },
                '48': { start: { line: 179, column: 34 }, end: { line: 190, column: 5 } },
                '49': { start: { line: 180, column: 6 }, end: { line: 189, column: 7 } },
                '50': { start: { line: 181, column: 8 }, end: { line: 181, column: 64 } },
                '51': { start: { line: 183, column: 8 }, end: { line: 183, column: 47 } },
                '52': { start: { line: 184, column: 8 }, end: { line: 188, column: 9 } },
                '53': { start: { line: 185, column: 10 }, end: { line: 185, column: 29 } },
                '54': { start: { line: 187, column: 10 }, end: { line: 187, column: 27 } },
                '55': { start: { line: 191, column: 4 }, end: { line: 246, column: 5 } },
                '56': { start: { line: 191, column: 17 }, end: { line: 191, column: 18 } },
                '57': { start: { line: 192, column: 24 }, end: { line: 192, column: 46 } },
                '58': { start: { line: 193, column: 28 }, end: { line: 198, column: 7 } },
                '59': { start: { line: 199, column: 6 }, end: { line: 199, column: 47 } },
                '60': { start: { line: 200, column: 6 }, end: { line: 200, column: 42 } },
                '61': { start: { line: 201, column: 24 }, end: { line: 201, column: 75 } },
                '62': { start: { line: 202, column: 6 }, end: { line: 202, column: 56 } },
                '63': { start: { line: 203, column: 23 }, end: { line: 203, column: 38 } },
                '64': { start: { line: 205, column: 6 }, end: { line: 207, column: 7 } },
                '65': { start: { line: 206, column: 8 }, end: { line: 206, column: 24 } },
                '66': { start: { line: 208, column: 6 }, end: { line: 211, column: 9 } },
                '67': { start: { line: 226, column: 6 }, end: { line: 245, column: 7 } },
                '68': { start: { line: 228, column: 8 }, end: { line: 233, column: 10 } },
                '69': { start: { line: 234, column: 13 }, end: { line: 245, column: 7 } },
                '70': { start: { line: 236, column: 8 }, end: { line: 244, column: 10 } },
                '71': { start: { line: 255, column: 20 }, end: { line: 255, column: 41 } },
                '72': { start: { line: 256, column: 4 }, end: { line: 260, column: 5 } },
                '73': { start: { line: 257, column: 6 }, end: { line: 257, column: 20 } },
                '74': { start: { line: 258, column: 11 }, end: { line: 260, column: 5 } },
                '75': { start: { line: 259, column: 6 }, end: { line: 259, column: 23 } },
                '76': { start: { line: 264, column: 4 }, end: { line: 264, column: 60 } },
                '77': { start: { line: 266, column: 4 }, end: { line: 275, column: 6 } },
                '78': { start: { line: 278, column: 2 }, end: { line: 280, column: 3 } },
                '79': { start: { line: 279, column: 4 }, end: { line: 279, column: 26 } },
                '80': { start: { line: 281, column: 2 }, end: { line: 281, column: 19 } },
                '81': { start: { line: 294, column: 2 }, end: { line: 298, column: 3 } },
                '82': { start: { line: 295, column: 4 }, end: { line: 295, column: 16 } },
                '83': { start: { line: 297, column: 4 }, end: { line: 297, column: 16 } },
                '84': { start: { line: 407, column: 0 }, end: { line: 469, column: 2 } },
                '85': { start: { line: 420, column: 2 }, end: { line: 420, column: 45 } },
                '86': { start: { line: 422, column: 13 }, end: { line: 422, column: 22 } },
                '87': { start: { line: 423, column: 13 }, end: { line: 423, column: 23 } },
                '88': { start: { line: 425, column: 2 }, end: { line: 429, column: 3 } },
                '89': { start: { line: 427, column: 4 }, end: { line: 427, column: 30 } },
                '90': { start: { line: 428, column: 4 }, end: { line: 428, column: 31 } },
                '91': { start: { line: 431, column: 14 }, end: { line: 431, column: 16 } },
                '92': { start: { line: 432, column: 14 }, end: { line: 432, column: 16 } },
                '93': { start: { line: 433, column: 14 }, end: { line: 433, column: 28 } },
                '94': { start: { line: 434, column: 14 }, end: { line: 434, column: 29 } },
                '95': { start: { line: 435, column: 12 }, end: { line: 435, column: 19 } },
                '96': { start: { line: 436, column: 12 }, end: { line: 436, column: 19 } },
                '97': { start: { line: 437, column: 12 }, end: { line: 437, column: 26 } },
                '98': { start: { line: 438, column: 12 }, end: { line: 438, column: 27 } },
                '99': { start: { line: 440, column: 2 }, end: { line: 440, column: 28 } },
                '100': { start: { line: 441, column: 2 }, end: { line: 441, column: 28 } },
                '101': { start: { line: 446, column: 11 }, end: { line: 446, column: 12 } },
                '102': { start: { line: 448, column: 2 }, end: { line: 458, column: 3 } },
                '103': { start: { line: 451, column: 4 }, end: { line: 456, column: 5 } },
                '104': { start: { line: 452, column: 6 }, end: { line: 452, column: 30 } },
                '105': { start: { line: 455, column: 6 }, end: { line: 455, column: 25 } },
                '106': { start: { line: 457, column: 4 }, end: { line: 457, column: 44 } },
                '107': { start: { line: 460, column: 2 }, end: { line: 460, column: 12 } },
                '108': { start: { line: 461, column: 2 }, end: { line: 461, column: 12 } },
                '109': { start: { line: 462, column: 2 }, end: { line: 462, column: 12 } },
                '110': { start: { line: 463, column: 2 }, end: { line: 463, column: 12 } },
                '111': { start: { line: 465, column: 15 }, end: { line: 465, column: 79 } },
                '112': { start: { line: 468, column: 2 }, end: { line: 468, column: 80 } },
                '113': { start: { line: 563, column: 0 }, end: { line: 567, column: 2 } },
                '114': { start: { line: 564, column: 2 }, end: { line: 564, column: 39 } },
                '115': { start: { line: 565, column: 12 }, end: { line: 565, column: 31 } },
                '116': { start: { line: 566, column: 2 }, end: { line: 566, column: 34 } },
                '117': { start: { line: 593, column: 0 }, end: { line: 595, column: 2 } },
                '118': { start: { line: 594, column: 2 }, end: { line: 594, column: 30 } },
                '119': { start: { line: 605, column: 0 }, end: { line: 631, column: 2 } },
                '120': { start: { line: 606, column: 2 }, end: { line: 608, column: 3 } },
                '121': { start: { line: 607, column: 4 }, end: { line: 607, column: 15 } },
                '122': { start: { line: 609, column: 17 }, end: { line: 609, column: 46 } },
                '123': { start: { line: 610, column: 20 }, end: { line: 610, column: 52 } },
                '124': { start: { line: 611, column: 2 }, end: { line: 611, column: 37 } },
                '125': { start: { line: 612, column: 2 }, end: { line: 612, column: 39 } },
                '126': { start: { line: 613, column: 17 }, end: { line: 613, column: 43 } },
                '127': { start: { line: 614, column: 13 }, end: { line: 614, column: 72 } },
                '128': { start: { line: 615, column: 20 }, end: { line: 615, column: 27 } },
                '129': { start: { line: 617, column: 2 }, end: { line: 627, column: 3 } },
                '130': { start: { line: 617, column: 15 }, end: { line: 617, column: 16 } },
                '131': { start: { line: 618, column: 14 }, end: { line: 618, column: 23 } },
                '132': { start: { line: 619, column: 14 }, end: { line: 619, column: 27 } },
                '133': { start: { line: 620, column: 14 }, end: { line: 620, column: 27 } },
                '134': { start: { line: 621, column: 14 }, end: { line: 621, column: 27 } },
                '135': { start: { line: 623, column: 4 }, end: { line: 623, column: 53 } },
                '136': { start: { line: 624, column: 4 }, end: { line: 624, column: 57 } },
                '137': { start: { line: 625, column: 4 }, end: { line: 625, column: 57 } },
                '138': { start: { line: 626, column: 4 }, end: { line: 626, column: 57 } },
                '139': { start: { line: 629, column: 2 }, end: { line: 629, column: 32 } },
                '140': { start: { line: 630, column: 2 }, end: { line: 630, column: 19 } },
                '141': { start: { line: 697, column: 0 }, end: { line: 706, column: 2 } },
                '142': { start: { line: 698, column: 2 }, end: { line: 698, column: 49 } },
                '143': { start: { line: 699, column: 2 }, end: { line: 705, column: 3 } },
                '144': { start: { line: 704, column: 4 }, end: { line: 704, column: 34 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 69, column: 25 }, end: { line: 69, column: 26 } },
                  loc: { start: { line: 69, column: 74 }, end: { line: 160, column: 1 } },
                  line: 69
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 80, column: 10 }, end: { line: 80, column: 11 } },
                  loc: { start: { line: 80, column: 22 }, end: { line: 150, column: 5 } },
                  line: 80
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: { start: { line: 90, column: 10 }, end: { line: 90, column: 11 } },
                  loc: { start: { line: 90, column: 25 }, end: { line: 103, column: 11 } },
                  line: 90
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: { start: { line: 98, column: 17 }, end: { line: 98, column: 18 } },
                  loc: { start: { line: 98, column: 25 }, end: { line: 100, column: 17 } },
                  line: 98
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 104, column: 10 },
                    end: { line: 104, column: 11 }
                  },
                  loc: { start: { line: 104, column: 15 }, end: { line: 110, column: 11 } },
                  line: 104
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 116, column: 21 },
                    end: { line: 116, column: 22 }
                  },
                  loc: { start: { line: 116, column: 27 }, end: { line: 127, column: 9 } },
                  line: 116
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 129, column: 22 },
                    end: { line: 129, column: 23 }
                  },
                  loc: { start: { line: 129, column: 27 }, end: { line: 136, column: 9 } },
                  line: 129
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 151, column: 11 },
                    end: { line: 151, column: 12 }
                  },
                  loc: { start: { line: 151, column: 16 }, end: { line: 158, column: 5 } },
                  line: 151
                },
                '8': {
                  name: '_createGif',
                  decl: { start: { line: 165, column: 9 }, end: { line: 165, column: 19 } },
                  loc: { start: { line: 171, column: 2 }, end: { line: 282, column: 1 } },
                  line: 171
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 179, column: 34 },
                    end: { line: 179, column: 35 }
                  },
                  loc: { start: { line: 179, column: 59 }, end: { line: 190, column: 5 } },
                  line: 179
                },
                '10': {
                  name: '_sAssign',
                  decl: { start: { line: 293, column: 9 }, end: { line: 293, column: 17 } },
                  loc: { start: { line: 293, column: 30 }, end: { line: 299, column: 1 } },
                  line: 293
                },
                '11': {
                  name: '(anonymous_11)',
                  decl: {
                    start: { line: 407, column: 21 },
                    end: { line: 407, column: 22 }
                  },
                  loc: { start: { line: 417, column: 2 }, end: { line: 469, column: 1 } },
                  line: 417
                },
                '12': {
                  name: '(anonymous_12)',
                  decl: {
                    start: { line: 563, column: 20 },
                    end: { line: 563, column: 21 }
                  },
                  loc: { start: { line: 563, column: 38 }, end: { line: 567, column: 1 } },
                  line: 563
                },
                '13': {
                  name: '(anonymous_13)',
                  decl: {
                    start: { line: 593, column: 22 },
                    end: { line: 593, column: 23 }
                  },
                  loc: { start: { line: 593, column: 33 }, end: { line: 595, column: 1 } },
                  line: 593
                },
                '14': {
                  name: '(anonymous_14)',
                  decl: {
                    start: { line: 605, column: 37 },
                    end: { line: 605, column: 38 }
                  },
                  loc: { start: { line: 605, column: 51 }, end: { line: 631, column: 1 } },
                  line: 605
                },
                '15': {
                  name: '(anonymous_15)',
                  decl: {
                    start: { line: 697, column: 25 },
                    end: { line: 697, column: 26 }
                  },
                  loc: { start: { line: 697, column: 37 }, end: { line: 706, column: 1 } },
                  line: 697
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 83, column: 6 }, end: { line: 87, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 83, column: 6 }, end: { line: 87, column: 7 } },
                    { start: { line: 83, column: 6 }, end: { line: 87, column: 7 } }
                  ],
                  line: 83
                },
                '1': {
                  loc: { start: { line: 88, column: 6 }, end: { line: 148, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 88, column: 6 }, end: { line: 148, column: 7 } },
                    { start: { line: 88, column: 6 }, end: { line: 148, column: 7 } }
                  ],
                  line: 88
                },
                '2': {
                  loc: { start: { line: 88, column: 10 }, end: { line: 88, column: 58 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 88, column: 10 }, end: { line: 88, column: 21 } },
                    { start: { line: 88, column: 25 }, end: { line: 88, column: 58 } }
                  ],
                  line: 88
                },
                '3': {
                  loc: { start: { line: 91, column: 12 }, end: { line: 102, column: 13 } },
                  type: 'if',
                  locations: [
                    { start: { line: 91, column: 12 }, end: { line: 102, column: 13 } },
                    { start: { line: 91, column: 12 }, end: { line: 102, column: 13 } }
                  ],
                  line: 91
                },
                '4': {
                  loc: { start: { line: 105, column: 12 }, end: { line: 109, column: 13 } },
                  type: 'if',
                  locations: [
                    { start: { line: 105, column: 12 }, end: { line: 109, column: 13 } },
                    { start: { line: 105, column: 12 }, end: { line: 109, column: 13 } }
                  ],
                  line: 105
                },
                '5': {
                  loc: { start: { line: 123, column: 10 }, end: { line: 125, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 123, column: 10 }, end: { line: 125, column: 11 } },
                    { start: { line: 123, column: 10 }, end: { line: 125, column: 11 } }
                  ],
                  line: 123
                },
                '6': {
                  loc: { start: { line: 131, column: 10 }, end: { line: 135, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 131, column: 10 }, end: { line: 135, column: 11 } },
                    { start: { line: 131, column: 10 }, end: { line: 135, column: 11 } }
                  ],
                  line: 131
                },
                '7': {
                  loc: { start: { line: 143, column: 8 }, end: { line: 145, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 143, column: 8 }, end: { line: 145, column: 9 } },
                    { start: { line: 143, column: 8 }, end: { line: 145, column: 9 } }
                  ],
                  line: 143
                },
                '8': {
                  loc: { start: { line: 153, column: 6 }, end: { line: 157, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 153, column: 6 }, end: { line: 157, column: 7 } },
                    { start: { line: 153, column: 6 }, end: { line: 157, column: 7 } }
                  ],
                  line: 153
                },
                '9': {
                  loc: { start: { line: 178, column: 2 }, end: { line: 276, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 178, column: 2 }, end: { line: 276, column: 3 } },
                    { start: { line: 178, column: 2 }, end: { line: 276, column: 3 } }
                  ],
                  line: 178
                },
                '10': {
                  loc: { start: { line: 184, column: 8 }, end: { line: 188, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 184, column: 8 }, end: { line: 188, column: 9 } },
                    { start: { line: 184, column: 8 }, end: { line: 188, column: 9 } }
                  ],
                  line: 184
                },
                '11': {
                  loc: { start: { line: 205, column: 6 }, end: { line: 207, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 205, column: 6 }, end: { line: 207, column: 7 } },
                    { start: { line: 205, column: 6 }, end: { line: 207, column: 7 } }
                  ],
                  line: 205
                },
                '12': {
                  loc: { start: { line: 226, column: 6 }, end: { line: 245, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 226, column: 6 }, end: { line: 245, column: 7 } },
                    { start: { line: 226, column: 6 }, end: { line: 245, column: 7 } }
                  ],
                  line: 226
                },
                '13': {
                  loc: { start: { line: 234, column: 13 }, end: { line: 245, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 234, column: 13 }, end: { line: 245, column: 7 } },
                    { start: { line: 234, column: 13 }, end: { line: 245, column: 7 } }
                  ],
                  line: 234
                },
                '14': {
                  loc: { start: { line: 256, column: 4 }, end: { line: 260, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 256, column: 4 }, end: { line: 260, column: 5 } },
                    { start: { line: 256, column: 4 }, end: { line: 260, column: 5 } }
                  ],
                  line: 256
                },
                '15': {
                  loc: { start: { line: 258, column: 11 }, end: { line: 260, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 258, column: 11 }, end: { line: 260, column: 5 } },
                    { start: { line: 258, column: 11 }, end: { line: 260, column: 5 } }
                  ],
                  line: 258
                },
                '16': {
                  loc: { start: { line: 278, column: 2 }, end: { line: 280, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 278, column: 2 }, end: { line: 280, column: 3 } },
                    { start: { line: 278, column: 2 }, end: { line: 280, column: 3 } }
                  ],
                  line: 278
                },
                '17': {
                  loc: { start: { line: 294, column: 2 }, end: { line: 298, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 294, column: 2 }, end: { line: 298, column: 3 } },
                    { start: { line: 294, column: 2 }, end: { line: 298, column: 3 } }
                  ],
                  line: 294
                },
                '18': {
                  loc: { start: { line: 294, column: 6 }, end: { line: 294, column: 29 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 294, column: 6 }, end: { line: 294, column: 14 } },
                    { start: { line: 294, column: 18 }, end: { line: 294, column: 29 } }
                  ],
                  line: 294
                },
                '19': {
                  loc: { start: { line: 425, column: 2 }, end: { line: 429, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 425, column: 2 }, end: { line: 429, column: 3 } },
                    { start: { line: 425, column: 2 }, end: { line: 429, column: 3 } }
                  ],
                  line: 425
                },
                '20': {
                  loc: { start: { line: 425, column: 6 }, end: { line: 425, column: 50 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 425, column: 6 }, end: { line: 425, column: 13 } },
                    { start: { line: 425, column: 17 }, end: { line: 425, column: 35 } },
                    { start: { line: 425, column: 39 }, end: { line: 425, column: 50 } }
                  ],
                  line: 425
                },
                '21': {
                  loc: { start: { line: 433, column: 14 }, end: { line: 433, column: 28 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 433, column: 14 }, end: { line: 433, column: 20 } },
                    { start: { line: 433, column: 24 }, end: { line: 433, column: 28 } }
                  ],
                  line: 433
                },
                '22': {
                  loc: { start: { line: 434, column: 14 }, end: { line: 434, column: 29 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 434, column: 14 }, end: { line: 434, column: 21 } },
                    { start: { line: 434, column: 25 }, end: { line: 434, column: 29 } }
                  ],
                  line: 434
                },
                '23': {
                  loc: { start: { line: 435, column: 12 }, end: { line: 435, column: 19 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 435, column: 12 }, end: { line: 435, column: 14 } },
                    { start: { line: 435, column: 18 }, end: { line: 435, column: 19 } }
                  ],
                  line: 435
                },
                '24': {
                  loc: { start: { line: 436, column: 12 }, end: { line: 436, column: 19 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 436, column: 12 }, end: { line: 436, column: 14 } },
                    { start: { line: 436, column: 18 }, end: { line: 436, column: 19 } }
                  ],
                  line: 436
                },
                '25': {
                  loc: { start: { line: 437, column: 12 }, end: { line: 437, column: 26 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 437, column: 12 }, end: { line: 437, column: 18 } },
                    { start: { line: 437, column: 22 }, end: { line: 437, column: 26 } }
                  ],
                  line: 437
                },
                '26': {
                  loc: { start: { line: 438, column: 12 }, end: { line: 438, column: 27 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 438, column: 12 }, end: { line: 438, column: 19 } },
                    { start: { line: 438, column: 23 }, end: { line: 438, column: 27 } }
                  ],
                  line: 438
                },
                '27': {
                  loc: { start: { line: 448, column: 2 }, end: { line: 458, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 448, column: 2 }, end: { line: 458, column: 3 } },
                    { start: { line: 448, column: 2 }, end: { line: 458, column: 3 } }
                  ],
                  line: 448
                },
                '28': {
                  loc: { start: { line: 448, column: 6 }, end: { line: 448, column: 51 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 448, column: 6 }, end: { line: 448, column: 13 } },
                    { start: { line: 448, column: 17 }, end: { line: 448, column: 28 } },
                    { start: { line: 448, column: 32 }, end: { line: 448, column: 51 } }
                  ],
                  line: 448
                },
                '29': {
                  loc: { start: { line: 451, column: 4 }, end: { line: 456, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 451, column: 4 }, end: { line: 456, column: 5 } },
                    { start: { line: 451, column: 4 }, end: { line: 456, column: 5 } }
                  ],
                  line: 451
                },
                '30': {
                  loc: { start: { line: 451, column: 8 }, end: { line: 451, column: 37 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 451, column: 8 }, end: { line: 451, column: 26 } },
                    { start: { line: 451, column: 30 }, end: { line: 451, column: 37 } }
                  ],
                  line: 451
                },
                '31': {
                  loc: { start: { line: 606, column: 2 }, end: { line: 608, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 606, column: 2 }, end: { line: 608, column: 3 } },
                    { start: { line: 606, column: 2 }, end: { line: 608, column: 3 } }
                  ],
                  line: 606
                },
                '32': {
                  loc: { start: { line: 699, column: 2 }, end: { line: 705, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 699, column: 2 }, end: { line: 705, column: 3 } },
                    { start: { line: 699, column: 2 }, end: { line: 705, column: 3 } }
                  ],
                  line: 699
                },
                '33': {
                  loc: { start: { line: 700, column: 4 }, end: { line: 702, column: 26 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 700, column: 4 }, end: { line: 700, column: 26 } },
                    { start: { line: 701, column: 4 }, end: { line: 701, column: 27 } },
                    { start: { line: 702, column: 4 }, end: { line: 702, column: 26 } }
                  ],
                  line: 700
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0,
                '118': 0,
                '119': 0,
                '120': 0,
                '121': 0,
                '122': 0,
                '123': 0,
                '124': 0,
                '125': 0,
                '126': 0,
                '127': 0,
                '128': 0,
                '129': 0,
                '130': 0,
                '131': 0,
                '132': 0,
                '133': 0,
                '134': 0,
                '135': 0,
                '136': 0,
                '137': 0,
                '138': 0,
                '139': 0,
                '140': 0,
                '141': 0,
                '142': 0,
                '143': 0,
                '144': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0],
                '20': [0, 0, 0],
                '21': [0, 0],
                '22': [0, 0],
                '23': [0, 0],
                '24': [0, 0],
                '25': [0, 0],
                '26': [0, 0],
                '27': [0, 0],
                '28': [0, 0, 0],
                '29': [0, 0],
                '30': [0, 0],
                '31': [0, 0],
                '32': [0, 0],
                '33': [0, 0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: 'a167da816a2062d98f124ef76ce72207604f6edf'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.includes');
          _dereq_('core-js/modules/es.array.index-of');
          _dereq_('core-js/modules/es.array.iterator');
          _dereq_('core-js/modules/es.array.slice');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.promise');
          _dereq_('core-js/modules/es.string.includes');
          _dereq_('core-js/modules/es.typed-array.uint8-array');
          _dereq_('core-js/modules/es.typed-array.uint8-clamped-array');
          _dereq_('core-js/modules/es.typed-array.copy-within');
          _dereq_('core-js/modules/es.typed-array.every');
          _dereq_('core-js/modules/es.typed-array.fill');
          _dereq_('core-js/modules/es.typed-array.filter');
          _dereq_('core-js/modules/es.typed-array.find');
          _dereq_('core-js/modules/es.typed-array.find-index');
          _dereq_('core-js/modules/es.typed-array.for-each');
          _dereq_('core-js/modules/es.typed-array.includes');
          _dereq_('core-js/modules/es.typed-array.index-of');
          _dereq_('core-js/modules/es.typed-array.iterator');
          _dereq_('core-js/modules/es.typed-array.join');
          _dereq_('core-js/modules/es.typed-array.last-index-of');
          _dereq_('core-js/modules/es.typed-array.map');
          _dereq_('core-js/modules/es.typed-array.reduce');
          _dereq_('core-js/modules/es.typed-array.reduce-right');
          _dereq_('core-js/modules/es.typed-array.reverse');
          _dereq_('core-js/modules/es.typed-array.set');
          _dereq_('core-js/modules/es.typed-array.slice');
          _dereq_('core-js/modules/es.typed-array.some');
          _dereq_('core-js/modules/es.typed-array.sort');
          _dereq_('core-js/modules/es.typed-array.subarray');
          _dereq_('core-js/modules/es.typed-array.to-locale-string');
          _dereq_('core-js/modules/es.typed-array.to-string');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          var _filters = _interopRequireDefault(_dereq_('./filters'));
          var _helpers = _interopRequireDefault(_dereq_('../core/helpers'));
          var constants = _interopRequireWildcard(_dereq_('../core/constants'));
          var _omggif = _interopRequireDefault(_dereq_('omggif'));

          _dereq_('../core/friendly_errors/validate_params');
          _dereq_('../core/friendly_errors/file_errors');
          _dereq_('../core/friendly_errors/fes_core');
          function _getRequireWildcardCache() {
            if (typeof WeakMap !== 'function') return null;
            var cache = new WeakMap();
            _getRequireWildcardCache = function _getRequireWildcardCache() {
              return cache;
            };
            return cache;
          }
          function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
              return obj;
            }
            if (obj === null || (_typeof(obj) !== 'object' && typeof obj !== 'function')) {
              return { default: obj };
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
              return cache.get(obj);
            }
            var newObj = {};
            var hasPropertyDescriptor =
              Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
              if (Object.prototype.hasOwnProperty.call(obj, key)) {
                var desc = hasPropertyDescriptor
                  ? Object.getOwnPropertyDescriptor(obj, key)
                  : null;
                if (desc && (desc.get || desc.set)) {
                  Object.defineProperty(newObj, key, desc);
                } else {
                  newObj[key] = obj[key];
                }
              }
            }
            newObj.default = obj;
            if (cache) {
              cache.set(obj, newObj);
            }
            return newObj;
          }
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_1il1alsp6u.s[0]++;

          /**
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * Loads an image from a path and creates a <a href="#/p5.Image">p5.Image</a> from it.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         *
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * The image may not be immediately available for rendering.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * If you want to ensure that the image is ready before doing
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * anything with it, place the <a href="#/p5/loadImage">loadImage()</a> call in <a href="#/p5/preload">preload()</a>.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * You may also supply a callback function to handle the image when it's ready.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         *
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * The path to the image should be relative to the HTML file
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * that links in your sketch. Loading an image from a URL or other
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * remote location may be blocked due to your browser's built-in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * security.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * You can also pass in a string of a base64 encoded image as an alternative to the file path.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * Remember to add "data:image/png;base64," in front of the string.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         *
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * @method loadImage
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * @param  {String} path Path of the image to be loaded
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * @param  {function(p5.Image)} [successCallback] Function to be called once
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         *                                the image is loaded. Will be passed the
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         *                                <a href="#/p5.Image">p5.Image</a>.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * @param  {function(Event)}    [failureCallback] called with event error if
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         *                                the image fails to load.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * @return {p5.Image}             the <a href="#/p5.Image">p5.Image</a> object
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * @example
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * <div>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * <code>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * let img;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * function preload() {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         *   img = loadImage('assets/laDefense.jpg');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * function setup() {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         *   image(img, 0, 0);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * </code>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * </div>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * <div>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * <code>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * function setup() {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         *   // here we use a callback to display the image after loading
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         *   loadImage('assets/laDefense.jpg', img => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         *     image(img, 0, 0);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         *   });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * </code>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * </div>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         *
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * @alt
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * image of the underside of a white umbrella and grided ceililng above
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         * image of the underside of a white umbrella and grided ceililng above
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         */
          _main.default.prototype.loadImage = function(
            path,
            successCallback,
            failureCallback
          ) {
            cov_1il1alsp6u.f[0]++;
            cov_1il1alsp6u.s[1]++;
            _main.default._validateParameters('loadImage', arguments);
            var pImg = (cov_1il1alsp6u.s[2]++, new _main.default.Image(1, 1, this));
            var self = (cov_1il1alsp6u.s[3]++, this);

            var req = (cov_1il1alsp6u.s[4]++,
            new Request(path, {
              method: 'GET',
              mode: 'cors'
            }));
            cov_1il1alsp6u.s[5]++;

            fetch(path, req)
              .then(function(response) {
                cov_1il1alsp6u.f[1]++;
                // GIF section
                var contentType = (cov_1il1alsp6u.s[6]++,
                response.headers.get('content-type'));
                cov_1il1alsp6u.s[7]++;
                if (contentType === null) {
                  cov_1il1alsp6u.b[0][0]++;
                  cov_1il1alsp6u.s[8]++;
                  console.warn(
                    'The image you loaded does not have a Content-Type header. If you are using the online editor consider reuploading the asset.'
                  );
                } else {
                  cov_1il1alsp6u.b[0][1]++;
                }
                cov_1il1alsp6u.s[9]++;
                if (
                  (cov_1il1alsp6u.b[2][0]++, contentType) &&
                  (cov_1il1alsp6u.b[2][1]++, contentType.includes('image/gif'))
                ) {
                  cov_1il1alsp6u.b[1][0]++;
                  cov_1il1alsp6u.s[10]++;
                  response.arrayBuffer().then(
                    function(arrayBuffer) {
                      cov_1il1alsp6u.f[2]++;
                      cov_1il1alsp6u.s[11]++;
                      if (arrayBuffer) {
                        cov_1il1alsp6u.b[3][0]++;
                        var byteArray = (cov_1il1alsp6u.s[12]++,
                        new Uint8Array(arrayBuffer));
                        cov_1il1alsp6u.s[13]++;
                        _createGif(
                          byteArray,
                          pImg,
                          successCallback,
                          failureCallback,
                          function(pImg) {
                            cov_1il1alsp6u.f[3]++;
                            cov_1il1alsp6u.s[14]++;
                            self._decrementPreload();
                          }.bind(self)
                        );
                      } else {
                        cov_1il1alsp6u.b[3][1]++;
                      }
                    },
                    function(e) {
                      cov_1il1alsp6u.f[4]++;
                      cov_1il1alsp6u.s[15]++;
                      if (typeof failureCallback === 'function') {
                        cov_1il1alsp6u.b[4][0]++;
                        cov_1il1alsp6u.s[16]++;
                        failureCallback(e);
                      } else {
                        cov_1il1alsp6u.b[4][1]++;
                        cov_1il1alsp6u.s[17]++;
                        console.error(e);
                      }
                    }
                  );
                } else {
                  cov_1il1alsp6u.b[1][1]++;
                  // Non-GIF Section
                  var img = (cov_1il1alsp6u.s[18]++, new Image());
                  cov_1il1alsp6u.s[19]++;

                  img.onload = function() {
                    cov_1il1alsp6u.f[5]++;
                    cov_1il1alsp6u.s[20]++;
                    pImg.width = pImg.canvas.width = img.width;
                    cov_1il1alsp6u.s[21]++;
                    pImg.height = pImg.canvas.height = img.height;

                    // Draw the image into the backing canvas of the p5.Image
                    cov_1il1alsp6u.s[22]++;
                    pImg.drawingContext.drawImage(img, 0, 0);
                    cov_1il1alsp6u.s[23]++;
                    pImg.modified = true;
                    cov_1il1alsp6u.s[24]++;
                    if (typeof successCallback === 'function') {
                      cov_1il1alsp6u.b[5][0]++;
                      cov_1il1alsp6u.s[25]++;
                      successCallback(pImg);
                    } else {
                      cov_1il1alsp6u.b[5][1]++;
                    }
                    cov_1il1alsp6u.s[26]++;
                    self._decrementPreload();
                  };
                  cov_1il1alsp6u.s[27]++;

                  img.onerror = function(e) {
                    cov_1il1alsp6u.f[6]++;
                    cov_1il1alsp6u.s[28]++;
                    _main.default._friendlyFileLoadError(0, img.src);
                    cov_1il1alsp6u.s[29]++;
                    if (typeof failureCallback === 'function') {
                      cov_1il1alsp6u.b[6][0]++;
                      cov_1il1alsp6u.s[30]++;
                      failureCallback(e);
                    } else {
                      cov_1il1alsp6u.b[6][1]++;
                      cov_1il1alsp6u.s[31]++;
                      console.error(e);
                    }
                  };

                  // Set crossOrigin in case image is served with CORS headers.
                  // This will let us draw to the canvas without tainting it.
                  // See https://developer.mozilla.org/en-US/docs/HTML/CORS_Enabled_Image
                  // When using data-uris the file will be loaded locally
                  // so we don't need to worry about crossOrigin with base64 file types.
                  cov_1il1alsp6u.s[32]++;
                  if (path.indexOf('data:image/') !== 0) {
                    cov_1il1alsp6u.b[7][0]++;
                    cov_1il1alsp6u.s[33]++;
                    img.crossOrigin = 'Anonymous';
                  } else {
                    cov_1il1alsp6u.b[7][1]++;
                  }
                  // start loading the image
                  cov_1il1alsp6u.s[34]++;
                  img.src = path;
                }
                cov_1il1alsp6u.s[35]++;
                pImg.modified = true;
              })
              .catch(function(e) {
                cov_1il1alsp6u.f[7]++;
                cov_1il1alsp6u.s[36]++;
                _main.default._friendlyFileLoadError(0, path);
                cov_1il1alsp6u.s[37]++;
                if (typeof failureCallback === 'function') {
                  cov_1il1alsp6u.b[8][0]++;
                  cov_1il1alsp6u.s[38]++;
                  failureCallback(e);
                } else {
                  cov_1il1alsp6u.b[8][1]++;
                  cov_1il1alsp6u.s[39]++;
                  console.error(e);
                }
              });
            cov_1il1alsp6u.s[40]++;
            return pImg;
          };

          /**
           * Helper function for loading GIF-based images
           */
          function _createGif(
            arrayBuffer,
            pImg,
            successCallback,
            failureCallback,
            finishCallback
          ) {
            cov_1il1alsp6u.f[8]++;
            var gifReader = (cov_1il1alsp6u.s[41]++,
            new _omggif.default.GifReader(arrayBuffer));
            cov_1il1alsp6u.s[42]++;
            pImg.width = pImg.canvas.width = gifReader.width;
            cov_1il1alsp6u.s[43]++;
            pImg.height = pImg.canvas.height = gifReader.height;
            var frames = (cov_1il1alsp6u.s[44]++, []);
            var numFrames = (cov_1il1alsp6u.s[45]++, gifReader.numFrames());
            var framePixels = (cov_1il1alsp6u.s[46]++,
            new Uint8ClampedArray(pImg.width * pImg.height * 4));
            cov_1il1alsp6u.s[47]++;
            if (numFrames > 1) {
              cov_1il1alsp6u.b[9][0]++;
              cov_1il1alsp6u.s[48]++;
              var loadGIFFrameIntoImage = function loadGIFFrameIntoImage(
                frameNum,
                gifReader
              ) {
                cov_1il1alsp6u.f[9]++;
                cov_1il1alsp6u.s[49]++;
                try {
                  cov_1il1alsp6u.s[50]++;
                  gifReader.decodeAndBlitFrameRGBA(frameNum, framePixels);
                } catch (e) {
                  cov_1il1alsp6u.s[51]++;
                  _main.default._friendlyFileLoadError(8, pImg.src);
                  cov_1il1alsp6u.s[52]++;
                  if (typeof failureCallback === 'function') {
                    cov_1il1alsp6u.b[10][0]++;
                    cov_1il1alsp6u.s[53]++;
                    failureCallback(e);
                  } else {
                    cov_1il1alsp6u.b[10][1]++;
                    cov_1il1alsp6u.s[54]++;
                    console.error(e);
                  }
                }
              };
              cov_1il1alsp6u.s[55]++;
              for (var j = (cov_1il1alsp6u.s[56]++, 0); j < numFrames; j++) {
                var frameInfo = (cov_1il1alsp6u.s[57]++, gifReader.frameInfo(j));
                var prevFrameData = (cov_1il1alsp6u.s[58]++,
                pImg.drawingContext.getImageData(0, 0, pImg.width, pImg.height));
                cov_1il1alsp6u.s[59]++;

                framePixels = prevFrameData.data.slice();
                cov_1il1alsp6u.s[60]++;
                loadGIFFrameIntoImage(j, gifReader);
                var imageData = (cov_1il1alsp6u.s[61]++,
                new ImageData(framePixels, pImg.width, pImg.height));
                cov_1il1alsp6u.s[62]++;
                pImg.drawingContext.putImageData(imageData, 0, 0);
                var frameDelay = (cov_1il1alsp6u.s[63]++, frameInfo.delay);
                // To maintain the default of 10FPS when frameInfo.delay equals to 0
                cov_1il1alsp6u.s[64]++;
                if (frameDelay === 0) {
                  cov_1il1alsp6u.b[11][0]++;
                  cov_1il1alsp6u.s[65]++;
                  frameDelay = 10;
                } else {
                  cov_1il1alsp6u.b[11][1]++;
                }
                cov_1il1alsp6u.s[66]++;
                frames.push({
                  image: pImg.drawingContext.getImageData(0, 0, pImg.width, pImg.height),
                  delay: frameDelay * 10 //GIF stores delay in one-hundredth of a second, shift to ms
                });

                // Some GIFs are encoded so that they expect the previous frame
                // to be under the current frame. This can occur at a sub-frame level
                //
                // Values :    0 -   No disposal specified. The decoder is
                //                   not required to take any action.
                //             1 -   Do not dispose. The graphic is to be left
                //                   in place.
                //             2 -   Restore to background color. The area used by the
                //                   graphic must be restored to the background color.
                //             3 -   Restore to previous. The decoder is required to
                //                   restore the area overwritten by the graphic with
                //                   what was there prior to rendering the graphic.
                //          4-7 -    To be defined.
                cov_1il1alsp6u.s[67]++;
                if (frameInfo.disposal === 2) {
                  cov_1il1alsp6u.b[12][0]++;
                  cov_1il1alsp6u.s[68]++;
                  // Restore background color
                  pImg.drawingContext.clearRect(
                    frameInfo.x,
                    frameInfo.y,
                    frameInfo.width,
                    frameInfo.height
                  );
                } else {
                  cov_1il1alsp6u.b[12][1]++;
                  cov_1il1alsp6u.s[69]++;
                  if (frameInfo.disposal === 3) {
                    cov_1il1alsp6u.b[13][0]++;
                    cov_1il1alsp6u.s[70]++;
                    // Restore previous
                    pImg.drawingContext.putImageData(
                      prevFrameData,
                      0,
                      0,
                      frameInfo.x,
                      frameInfo.y,
                      frameInfo.width,
                      frameInfo.height
                    );
                  } else {
                    cov_1il1alsp6u.b[13][1]++;
                  }
                }
              }

              //Uses Netscape block encoding
              //to repeat forever, this will be 0
              //to repeat just once, this will be null
              //to repeat N times (1<N), should contain integer for loop number
              //this is changed to more usable values for us
              //to repeat forever, loopCount = null
              //everything else is just the number of loops
              var loopLimit = (cov_1il1alsp6u.s[71]++, gifReader.loopCount());
              cov_1il1alsp6u.s[72]++;
              if (loopLimit === null) {
                cov_1il1alsp6u.b[14][0]++;
                cov_1il1alsp6u.s[73]++;
                loopLimit = 1;
              } else {
                cov_1il1alsp6u.b[14][1]++;
                cov_1il1alsp6u.s[74]++;
                if (loopLimit === 0) {
                  cov_1il1alsp6u.b[15][0]++;
                  cov_1il1alsp6u.s[75]++;
                  loopLimit = null;
                } else {
                  cov_1il1alsp6u.b[15][1]++;
                }
              }

              // we used the pImg for painting and saving during load
              // so we have to reset it to the first frame
              cov_1il1alsp6u.s[76]++;
              pImg.drawingContext.putImageData(frames[0].image, 0, 0);
              cov_1il1alsp6u.s[77]++;

              pImg.gifProperties = {
                displayIndex: 0,
                loopLimit: loopLimit,
                loopCount: 0,
                frames: frames,
                numFrames: numFrames,
                playing: true,
                timeDisplayed: 0,
                lastChangeTime: 0
              };
            } else {
              cov_1il1alsp6u.b[9][1]++;
            }
            cov_1il1alsp6u.s[78]++;

            if (typeof successCallback === 'function') {
              cov_1il1alsp6u.b[16][0]++;
              cov_1il1alsp6u.s[79]++;
              successCallback(pImg);
            } else {
              cov_1il1alsp6u.b[16][1]++;
            }
            cov_1il1alsp6u.s[80]++;
            finishCallback();
          }

          /**
           * Validates clipping params. Per drawImage spec sWidth and sHight cannot be
           * negative or greater than image intrinsic width and height
           * @private
           * @param {Number} sVal
           * @param {Number} iVal
           * @returns {Number}
           * @private
           */
          function _sAssign(sVal, iVal) {
            cov_1il1alsp6u.f[10]++;
            cov_1il1alsp6u.s[81]++;
            if (
              (cov_1il1alsp6u.b[18][0]++, sVal > 0) &&
              (cov_1il1alsp6u.b[18][1]++, sVal < iVal)
            ) {
              cov_1il1alsp6u.b[17][0]++;
              cov_1il1alsp6u.s[82]++;
              return sVal;
            } else {
              cov_1il1alsp6u.b[17][1]++;
              cov_1il1alsp6u.s[83]++;
              return iVal;
            }
          }

          /**
           * Draw an image to the p5.js canvas.
           *
           * This function can be used with different numbers of parameters. The
           * simplest use requires only three parameters: img, x, and y—where (x, y) is
           * the position of the image. Two more parameters can optionally be added to
           * specify the width and height of the image.
           *
           * This function can also be used with all eight Number parameters. To
           * differentiate between all these parameters, p5.js uses the language of
           * "destination rectangle" (which corresponds to "dx", "dy", etc.) and "source
           * image" (which corresponds to "sx", "sy", etc.) below. Specifying the
           * "source image" dimensions can be useful when you want to display a
           * subsection of the source image instead of the whole thing. Here's a diagram
           * to explain further:
           * <img src="assets/drawImage.png"></img>
           *
           * @method image
           * @param  {p5.Image|p5.Element} img    the image to display
           * @param  {Number}   x     the x-coordinate of the top-left corner of the image
           * @param  {Number}   y     the y-coordinate of the top-left corner of the image
           * @param  {Number}   [width]  the width to draw the image
           * @param  {Number}   [height] the height to draw the image
           * @example
           * <div>
           * <code>
           * let img;
           * function preload() {
           *   img = loadImage('assets/laDefense.jpg');
           * }
           * function setup() {
           *   // Top-left corner of the img is at (0, 0)
           *   // Width and height are the img's original width and height
           *   image(img, 0, 0);
           * }
           * </code>
           * </div>
           * <div>
           * <code>
           * let img;
           * function preload() {
           *   img = loadImage('assets/laDefense.jpg');
           * }
           * function setup() {
           *   background(50);
           *   // Top-left corner of the img is at (10, 10)
           *   // Width and height are 50 x 50
           *   image(img, 10, 10, 50, 50);
           * }
           * </code>
           * </div>
           * <div>
           * <code>
           * function setup() {
           *   // Here, we use a callback to display the image after loading
           *   loadImage('assets/laDefense.jpg', img => {
           *     image(img, 0, 0);
           *   });
           * }
           * </code>
           * </div>
           * <div>
           * <code>
           * let img;
           * function preload() {
           *   img = loadImage('assets/gradient.png');
           * }
           * function setup() {
           *   // 1. Background image
           *   // Top-left corner of the img is at (0, 0)
           *   // Width and height are the img's original width and height, 100 x 100
           *   image(img, 0, 0);
           *   // 2. Top right image
           *   // Top-left corner of destination rectangle is at (50, 0)
           *   // Destination rectangle width and height are 40 x 20
           *   // The next parameters are relative to the source image:
           *   // - Starting at position (50, 50) on the source image, capture a 50 x 50
           *   // subsection
           *   // - Draw this subsection to fill the dimensions of the destination rectangle
           *   image(img, 50, 0, 40, 20, 50, 50, 50, 50);
           * }
           * </code>
           * </div>
           * @alt
           * image of the underside of a white umbrella and gridded ceiling above
           * image of the underside of a white umbrella and gridded ceiling above
           */
          /**
           * @method image
           * @param  {p5.Image|p5.Element} img
           * @param  {Number}   dx     the x-coordinate of the destination
           *                           rectangle in which to draw the source image
           * @param  {Number}   dy     the y-coordinate of the destination
           *                           rectangle in which to draw the source image
           * @param  {Number}   dWidth  the width of the destination rectangle
           * @param  {Number}   dHeight the height of the destination rectangle
           * @param  {Number}   sx     the x-coordinate of the subsection of the source
           * image to draw into the destination rectangle
           * @param  {Number}   sy     the y-coordinate of the subsection of the source
           * image to draw into the destination rectangle
           * @param {Number}    [sWidth] the width of the subsection of the
           *                           source image to draw into the destination
           *                           rectangle
           * @param {Number}    [sHeight] the height of the subsection of the
           *                            source image to draw into the destination rectangle
           */ cov_1il1alsp6u.s[84]++;
          _main.default.prototype.image = function(
            img,
            dx,
            dy,
            dWidth,
            dHeight,
            sx,
            sy,
            sWidth,
            sHeight
          ) {
            cov_1il1alsp6u.f[11]++;
            cov_1il1alsp6u.s[85]++;
            // set defaults per spec: https://goo.gl/3ykfOq

            _main.default._validateParameters('image', arguments);

            var defW = (cov_1il1alsp6u.s[86]++, img.width);
            var defH = (cov_1il1alsp6u.s[87]++, img.height);
            cov_1il1alsp6u.s[88]++;

            if (
              (cov_1il1alsp6u.b[20][0]++, img.elt) &&
              (cov_1il1alsp6u.b[20][1]++, img.elt.videoWidth) &&
              (cov_1il1alsp6u.b[20][2]++, !img.canvas)
            ) {
              cov_1il1alsp6u.b[19][0]++;
              cov_1il1alsp6u.s[89]++;
              // video no canvas
              defW = img.elt.videoWidth;
              cov_1il1alsp6u.s[90]++;
              defH = img.elt.videoHeight;
            } else {
              cov_1il1alsp6u.b[19][1]++;
            }

            var _dx = (cov_1il1alsp6u.s[91]++, dx);
            var _dy = (cov_1il1alsp6u.s[92]++, dy);
            var _dw = (cov_1il1alsp6u.s[93]++,
            (cov_1il1alsp6u.b[21][0]++, dWidth) || (cov_1il1alsp6u.b[21][1]++, defW));
            var _dh = (cov_1il1alsp6u.s[94]++,
            (cov_1il1alsp6u.b[22][0]++, dHeight) || (cov_1il1alsp6u.b[22][1]++, defH));
            var _sx = (cov_1il1alsp6u.s[95]++,
            (cov_1il1alsp6u.b[23][0]++, sx) || (cov_1il1alsp6u.b[23][1]++, 0));
            var _sy = (cov_1il1alsp6u.s[96]++,
            (cov_1il1alsp6u.b[24][0]++, sy) || (cov_1il1alsp6u.b[24][1]++, 0));
            var _sw = (cov_1il1alsp6u.s[97]++,
            (cov_1il1alsp6u.b[25][0]++, sWidth) || (cov_1il1alsp6u.b[25][1]++, defW));
            var _sh = (cov_1il1alsp6u.s[98]++,
            (cov_1il1alsp6u.b[26][0]++, sHeight) || (cov_1il1alsp6u.b[26][1]++, defH));
            cov_1il1alsp6u.s[99]++;

            _sw = _sAssign(_sw, defW);
            cov_1il1alsp6u.s[100]++;
            _sh = _sAssign(_sh, defH);

            // This part needs cleanup and unit tests
            // see issues https://github.com/processing/p5.js/issues/1741
            // and https://github.com/processing/p5.js/issues/1673
            var pd = (cov_1il1alsp6u.s[101]++, 1);
            cov_1il1alsp6u.s[102]++;

            if (
              (cov_1il1alsp6u.b[28][0]++, img.elt) &&
              (cov_1il1alsp6u.b[28][1]++, !img.canvas) &&
              (cov_1il1alsp6u.b[28][2]++, img.elt.style.width)
            ) {
              cov_1il1alsp6u.b[27][0]++;
              cov_1il1alsp6u.s[103]++;
              //if img is video and img.elt.size() has been used and
              //no width passed to image()
              if (
                (cov_1il1alsp6u.b[30][0]++, img.elt.videoWidth) &&
                (cov_1il1alsp6u.b[30][1]++, !dWidth)
              ) {
                cov_1il1alsp6u.b[29][0]++;
                cov_1il1alsp6u.s[104]++;
                pd = img.elt.videoWidth;
              } else {
                cov_1il1alsp6u.b[29][1]++;
                cov_1il1alsp6u.s[105]++;
                //all other cases
                pd = img.elt.width;
              }
              cov_1il1alsp6u.s[106]++;
              pd /= parseInt(img.elt.style.width, 10);
            } else {
              cov_1il1alsp6u.b[27][1]++;
            }
            cov_1il1alsp6u.s[107]++;

            _sx *= pd;
            cov_1il1alsp6u.s[108]++;
            _sy *= pd;
            cov_1il1alsp6u.s[109]++;
            _sh *= pd;
            cov_1il1alsp6u.s[110]++;
            _sw *= pd;

            var vals = (cov_1il1alsp6u.s[111]++,
            _helpers.default.modeAdjust(_dx, _dy, _dw, _dh, this._renderer._imageMode));

            // tint the image if there is a tint
            cov_1il1alsp6u.s[112]++;
            this._renderer.image(img, _sx, _sy, _sw, _sh, vals.x, vals.y, vals.w, vals.h);
          };

          /**
           * Sets the fill value for displaying images. Images can be tinted to
           * specified colors or made transparent by including an alpha value.
           *
           * To apply transparency to an image without affecting its color, use
           * white as the tint color and specify an alpha value. For instance,
           * tint(255, 128) will make an image 50% transparent (assuming the default
           * alpha range of 0-255, which can be changed with <a href="#/p5/colorMode">colorMode()</a>).
           *
           * The value for the gray parameter must be less than or equal to the current
           * maximum value as specified by <a href="#/p5/colorMode">colorMode()</a>. The default maximum value is
           * 255.
           *
           * @method tint
           * @param  {Number}        v1      red or hue value relative to
           *                                 the current color range
           * @param  {Number}        v2      green or saturation value
           *                                 relative to the current color range
           * @param  {Number}        v3      blue or brightness value
           *                                 relative to the current color range
           * @param  {Number}        [alpha]
           *
           * @example
           * <div>
           * <code>
           * let img;
           * function preload() {
           *   img = loadImage('assets/laDefense.jpg');
           * }
           * function setup() {
           *   image(img, 0, 0);
           *   tint(0, 153, 204); // Tint blue
           *   image(img, 50, 0);
           * }
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * let img;
           * function preload() {
           *   img = loadImage('assets/laDefense.jpg');
           * }
           * function setup() {
           *   image(img, 0, 0);
           *   tint(0, 153, 204, 126); // Tint blue and set transparency
           *   image(img, 50, 0);
           * }
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * let img;
           * function preload() {
           *   img = loadImage('assets/laDefense.jpg');
           * }
           * function setup() {
           *   image(img, 0, 0);
           *   tint(255, 126); // Apply transparency without changing color
           *   image(img, 50, 0);
           * }
           * </code>
           * </div>
           *
           * @alt
           * 2 side by side images of umbrella and ceiling, one image with blue tint
           * Images of umbrella and ceiling, one half of image with blue tint
           * 2 side by side images of umbrella and ceiling, one image translucent
           */

          /**
           * @method tint
           * @param  {String}        value   a color string
           */

          /**
           * @method tint
           * @param  {Number}        gray   a gray value
           * @param  {Number}        [alpha]
           */

          /**
           * @method tint
           * @param  {Number[]}      values  an array containing the red,green,blue &
           *                                 and alpha components of the color
           */

          /**
           * @method tint
           * @param  {p5.Color}      color   the tint color
           */ cov_1il1alsp6u.s[113]++;
          _main.default.prototype.tint = function() {
            cov_1il1alsp6u.f[12]++;
            cov_1il1alsp6u.s[114]++;
            for (
              var _len = arguments.length, args = new Array(_len), _key = 0;
              _key < _len;
              _key++
            ) {
              args[_key] = arguments[_key];
            }
            _main.default._validateParameters('tint', args);
            var c = (cov_1il1alsp6u.s[115]++, this.color.apply(this, args));
            cov_1il1alsp6u.s[116]++;
            this._renderer._tint = c.levels;
          };

          /**
           * Removes the current fill value for displaying images and reverts to
           * displaying images with their original hues.
           *
           * @method noTint
           * @example
           * <div>
           * <code>
           * let img;
           * function preload() {
           *   img = loadImage('assets/bricks.jpg');
           * }
           * function setup() {
           *   tint(0, 153, 204); // Tint blue
           *   image(img, 0, 0);
           *   noTint(); // Disable tint
           *   image(img, 50, 0);
           * }
           * </code>
           * </div>
           *
           * @alt
           * 2 side by side images of bricks, left image with blue tint
           */ cov_1il1alsp6u.s[117]++;
          _main.default.prototype.noTint = function() {
            cov_1il1alsp6u.f[13]++;
            cov_1il1alsp6u.s[118]++;
            this._renderer._tint = null;
          };

          /**
           * Apply the current tint color to the input image, return the resulting
           * canvas.
           *
           * @private
           * @param {p5.Image} The image to be tinted
           * @return {canvas} The resulting tinted canvas
           */ cov_1il1alsp6u.s[119]++;
          _main.default.prototype._getTintedImageCanvas = function(img) {
            cov_1il1alsp6u.f[14]++;
            cov_1il1alsp6u.s[120]++;
            if (!img.canvas) {
              cov_1il1alsp6u.b[31][0]++;
              cov_1il1alsp6u.s[121]++;
              return img;
            } else {
              cov_1il1alsp6u.b[31][1]++;
            }
            var pixels = (cov_1il1alsp6u.s[122]++, _filters.default._toPixels(img.canvas));
            var tmpCanvas = (cov_1il1alsp6u.s[123]++, document.createElement('canvas'));
            cov_1il1alsp6u.s[124]++;
            tmpCanvas.width = img.canvas.width;
            cov_1il1alsp6u.s[125]++;
            tmpCanvas.height = img.canvas.height;
            var tmpCtx = (cov_1il1alsp6u.s[126]++, tmpCanvas.getContext('2d'));
            var id = (cov_1il1alsp6u.s[127]++,
            tmpCtx.createImageData(img.canvas.width, img.canvas.height));
            var newPixels = (cov_1il1alsp6u.s[128]++, id.data);
            cov_1il1alsp6u.s[129]++;

            for (var i = (cov_1il1alsp6u.s[130]++, 0); i < pixels.length; i += 4) {
              var r = (cov_1il1alsp6u.s[131]++, pixels[i]);
              var g = (cov_1il1alsp6u.s[132]++, pixels[i + 1]);
              var b = (cov_1il1alsp6u.s[133]++, pixels[i + 2]);
              var a = (cov_1il1alsp6u.s[134]++, pixels[i + 3]);
              cov_1il1alsp6u.s[135]++;

              newPixels[i] = r * this._renderer._tint[0] / 255;
              cov_1il1alsp6u.s[136]++;
              newPixels[i + 1] = g * this._renderer._tint[1] / 255;
              cov_1il1alsp6u.s[137]++;
              newPixels[i + 2] = b * this._renderer._tint[2] / 255;
              cov_1il1alsp6u.s[138]++;
              newPixels[i + 3] = a * this._renderer._tint[3] / 255;
            }
            cov_1il1alsp6u.s[139]++;

            tmpCtx.putImageData(id, 0, 0);
            cov_1il1alsp6u.s[140]++;
            return tmpCanvas;
          };

          /**
           * Set image mode. Modifies the location from which images are drawn by
           * changing the way in which parameters given to <a href="#/p5/image">image()</a> are interpreted.
           * The default mode is imageMode(CORNER), which interprets the second and
           * third parameters of <a href="#/p5/image">image()</a> as the upper-left corner of the image. If
           * two additional parameters are specified, they are used to set the image's
           * width and height.
           *
           * imageMode(CORNERS) interprets the second and third parameters of <a href="#/p5/image">image()</a>
           * as the location of one corner, and the fourth and fifth parameters as the
           * opposite corner.
           *
           * imageMode(CENTER) interprets the second and third parameters of <a href="#/p5/image">image()</a>
           * as the image's center point. If two additional parameters are specified,
           * they are used to set the image's width and height.
           *
           * @method imageMode
           * @param {Constant} mode either CORNER, CORNERS, or CENTER
           * @example
           *
           * <div>
           * <code>
           * let img;
           * function preload() {
           *   img = loadImage('assets/bricks.jpg');
           * }
           * function setup() {
           *   imageMode(CORNER);
           *   image(img, 10, 10, 50, 50);
           * }
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * let img;
           * function preload() {
           *   img = loadImage('assets/bricks.jpg');
           * }
           * function setup() {
           *   imageMode(CORNERS);
           *   image(img, 10, 10, 90, 40);
           * }
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * let img;
           * function preload() {
           *   img = loadImage('assets/bricks.jpg');
           * }
           * function setup() {
           *   imageMode(CENTER);
           *   image(img, 50, 50, 80, 80);
           * }
           * </code>
           * </div>
           *
           * @alt
           * small square image of bricks
           * horizontal rectangle image of bricks
           * large square image of bricks
           */ cov_1il1alsp6u.s[141]++;
          _main.default.prototype.imageMode = function(m) {
            cov_1il1alsp6u.f[15]++;
            cov_1il1alsp6u.s[142]++;
            _main.default._validateParameters('imageMode', arguments);
            cov_1il1alsp6u.s[143]++;
            if (
              (cov_1il1alsp6u.b[33][0]++, m === constants.CORNER) ||
              (cov_1il1alsp6u.b[33][1]++, m === constants.CORNERS) ||
              (cov_1il1alsp6u.b[33][2]++, m === constants.CENTER)
            ) {
              cov_1il1alsp6u.b[32][0]++;
              cov_1il1alsp6u.s[144]++;
              this._renderer._imageMode = m;
            } else {
              cov_1il1alsp6u.b[32][1]++;
            }
          };
          var _default = _main.default;
          exports.default = _default;
        },
        {
          '../core/constants': 272,
          '../core/friendly_errors/fes_core': 275,
          '../core/friendly_errors/file_errors': 276,
          '../core/friendly_errors/validate_params': 278,
          '../core/helpers': 279,
          '../core/main': 283,
          './filters': 304,
          'core-js/modules/es.array.includes': 172,
          'core-js/modules/es.array.index-of': 173,
          'core-js/modules/es.array.iterator': 174,
          'core-js/modules/es.array.slice': 178,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.promise': 193,
          'core-js/modules/es.string.includes': 200,
          'core-js/modules/es.typed-array.copy-within': 212,
          'core-js/modules/es.typed-array.every': 213,
          'core-js/modules/es.typed-array.fill': 214,
          'core-js/modules/es.typed-array.filter': 215,
          'core-js/modules/es.typed-array.find': 217,
          'core-js/modules/es.typed-array.find-index': 216,
          'core-js/modules/es.typed-array.for-each': 220,
          'core-js/modules/es.typed-array.includes': 221,
          'core-js/modules/es.typed-array.index-of': 222,
          'core-js/modules/es.typed-array.iterator': 225,
          'core-js/modules/es.typed-array.join': 226,
          'core-js/modules/es.typed-array.last-index-of': 227,
          'core-js/modules/es.typed-array.map': 228,
          'core-js/modules/es.typed-array.reduce': 230,
          'core-js/modules/es.typed-array.reduce-right': 229,
          'core-js/modules/es.typed-array.reverse': 231,
          'core-js/modules/es.typed-array.set': 232,
          'core-js/modules/es.typed-array.slice': 233,
          'core-js/modules/es.typed-array.some': 234,
          'core-js/modules/es.typed-array.sort': 235,
          'core-js/modules/es.typed-array.subarray': 236,
          'core-js/modules/es.typed-array.to-locale-string': 237,
          'core-js/modules/es.typed-array.to-string': 238,
          'core-js/modules/es.typed-array.uint8-array': 241,
          'core-js/modules/es.typed-array.uint8-clamped-array': 242,
          omggif: 257
        }
      ],
      307: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_2qks0q05q8 = (function() {
            var path = '/Users/outofambit/src/p5.js/src/image/p5.Image.js';
            var hash = '120fd5a228ef48aa61255f8f3663742f59a41e3e';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/image/p5.Image.js',
              statementMap: {
                '0': { start: { line: 87, column: 0 }, end: { line: 220, column: 2 } },
                '1': { start: { line: 114, column: 2 }, end: { line: 114, column: 21 } },
                '2': { start: { line: 141, column: 2 }, end: { line: 141, column: 23 } },
                '3': { start: { line: 142, column: 2 }, end: { line: 142, column: 49 } },
                '4': { start: { line: 143, column: 2 }, end: { line: 143, column: 33 } },
                '5': { start: { line: 144, column: 2 }, end: { line: 144, column: 35 } },
                '6': { start: { line: 145, column: 2 }, end: { line: 145, column: 53 } },
                '7': { start: { line: 146, column: 2 }, end: { line: 146, column: 27 } },
                '8': { start: { line: 147, column: 2 }, end: { line: 147, column: 25 } },
                '9': { start: { line: 149, column: 2 }, end: { line: 149, column: 28 } },
                '10': { start: { line: 151, column: 2 }, end: { line: 151, column: 25 } },
                '11': { start: { line: 219, column: 2 }, end: { line: 219, column: 19 } },
                '12': { start: { line: 225, column: 0 }, end: { line: 251, column: 2 } },
                '13': { start: { line: 226, column: 16 }, end: { line: 226, column: 34 } },
                '14': { start: { line: 227, column: 18 }, end: { line: 227, column: 56 } },
                '15': { start: { line: 228, column: 2 }, end: { line: 230, column: 3 } },
                '16': { start: { line: 229, column: 4 }, end: { line: 229, column: 35 } },
                '17': { start: { line: 231, column: 2 }, end: { line: 250, column: 3 } },
                '18': { start: { line: 232, column: 4 }, end: { line: 232, column: 57 } },
                '19': { start: { line: 233, column: 21 }, end: { line: 233, column: 59 } },
                '20': { start: { line: 234, column: 4 }, end: { line: 249, column: 5 } },
                '21': { start: { line: 236, column: 20 }, end: { line: 236, column: 62 } },
                '22': { start: { line: 237, column: 6 }, end: { line: 237, column: 30 } },
                '23': { start: { line: 238, column: 6 }, end: { line: 238, column: 37 } },
                '24': { start: { line: 239, column: 6 }, end: { line: 239, column: 34 } },
                '25': { start: { line: 240, column: 6 }, end: { line: 240, column: 73 } },
                '26': { start: { line: 241, column: 6 }, end: { line: 248, column: 7 } },
                '27': { start: { line: 242, column: 8 }, end: { line: 242, column: 30 } },
                '28': { start: { line: 244, column: 20 }, end: { line: 244, column: 56 } },
                '29': { start: { line: 245, column: 8 }, end: { line: 245, column: 72 } },
                '30': { start: { line: 246, column: 8 }, end: { line: 246, column: 33 } },
                '31': { start: { line: 247, column: 8 }, end: { line: 247, column: 31 } },
                '32': { start: { line: 256, column: 0 }, end: { line: 259, column: 2 } },
                '33': { start: { line: 257, column: 2 }, end: { line: 257, column: 21 } },
                '34': { start: { line: 258, column: 2 }, end: { line: 258, column: 25 } },
                '35': { start: { line: 291, column: 0 }, end: { line: 294, column: 2 } },
                '36': { start: { line: 292, column: 2 }, end: { line: 292, column: 48 } },
                '37': { start: { line: 293, column: 2 }, end: { line: 293, column: 25 } },
                '38': { start: { line: 341, column: 0 }, end: { line: 344, column: 2 } },
                '39': { start: { line: 342, column: 2 }, end: { line: 342, column: 62 } },
                '40': { start: { line: 343, column: 2 }, end: { line: 343, column: 25 } },
                '41': { start: { line: 393, column: 0 }, end: { line: 396, column: 2 } },
                '42': { start: { line: 394, column: 2 }, end: { line: 394, column: 52 } },
                '43': { start: { line: 395, column: 2 }, end: { line: 395, column: 60 } },
                '44': { start: { line: 398, column: 0 }, end: { line: 398, column: 65 } },
                '45': { start: { line: 432, column: 0 }, end: { line: 435, column: 2 } },
                '46': { start: { line: 433, column: 2 }, end: { line: 433, column: 57 } },
                '47': { start: { line: 434, column: 2 }, end: { line: 434, column: 25 } },
                '48': { start: { line: 466, column: 0 }, end: { line: 546, column: 2 } },
                '49': { start: { line: 478, column: 2 }, end: { line: 485, column: 3 } },
                '50': { start: { line: 479, column: 4 }, end: { line: 479, column: 30 } },
                '51': { start: { line: 480, column: 4 }, end: { line: 480, column: 32 } },
                '52': { start: { line: 481, column: 9 }, end: { line: 485, column: 3 } },
                '53': { start: { line: 482, column: 4 }, end: { line: 482, column: 60 } },
                '54': { start: { line: 483, column: 9 }, end: { line: 485, column: 3 } },
                '55': { start: { line: 484, column: 4 }, end: { line: 484, column: 60 } },
                '56': { start: { line: 487, column: 2 }, end: { line: 487, column: 28 } },
                '57': { start: { line: 488, column: 2 }, end: { line: 488, column: 30 } },
                '58': { start: { line: 490, column: 21 }, end: { line: 490, column: 53 } },
                '59': { start: { line: 491, column: 2 }, end: { line: 491, column: 27 } },
                '60': { start: { line: 492, column: 2 }, end: { line: 492, column: 29 } },
                '61': { start: { line: 494, column: 2 }, end: { line: 519, column: 3 } },
                '62': { start: { line: 495, column: 18 }, end: { line: 495, column: 36 } },
                '63': { start: { line: 497, column: 28 }, end: { line: 510, column: 5 } },
                '64': { start: { line: 498, column: 16 }, end: { line: 498, column: 17 } },
                '65': { start: { line: 499, column: 6 }, end: { line: 509, column: 7 } },
                '66': { start: { line: 499, column: 19 }, end: { line: 499, column: 20 } },
                '67': { start: { line: 500, column: 8 }, end: { line: 508, column: 9 } },
                '68': { start: { line: 500, column: 21 }, end: { line: 500, column: 22 } },
                '69': { start: { line: 501, column: 23 }, end: { line: 501, column: 60 } },
                '70': { start: { line: 502, column: 23 }, end: { line: 502, column: 62 } },
                '71': { start: { line: 503, column: 23 }, end: { line: 503, column: 52 } },
                '72': { start: { line: 504, column: 10 }, end: { line: 504, column: 47 } },
                '73': { start: { line: 505, column: 10 }, end: { line: 505, column: 47 } },
                '74': { start: { line: 506, column: 10 }, end: { line: 506, column: 47 } },
                '75': { start: { line: 507, column: 10 }, end: { line: 507, column: 47 } },
                '76': { start: { line: 511, column: 4 }, end: { line: 518, column: 5 } },
                '77': { start: { line: 511, column: 17 }, end: { line: 511, column: 18 } },
                '78': { start: { line: 512, column: 31 }, end: { line: 515, column: 7 } },
                '79': { start: { line: 516, column: 6 }, end: { line: 516, column: 63 } },
                '80': { start: { line: 517, column: 6 }, end: { line: 517, column: 47 } },
                '81': { start: { line: 522, column: 2 }, end: { line: 526, column: 4 } },
                '82': { start: { line: 529, column: 2 }, end: { line: 529, column: 41 } },
                '83': { start: { line: 530, column: 2 }, end: { line: 530, column: 44 } },
                '84': { start: { line: 535, column: 2 }, end: { line: 539, column: 4 } },
                '85': { start: { line: 541, column: 2 }, end: { line: 543, column: 3 } },
                '86': { start: { line: 542, column: 4 }, end: { line: 542, column: 22 } },
                '87': { start: { line: 545, column: 2 }, end: { line: 545, column: 25 } },
                '88': { start: { line: 599, column: 0 }, end: { line: 601, column: 2 } },
                '89': { start: { line: 600, column: 2 }, end: { line: 600, column: 38 } },
                '90': { start: { line: 636, column: 0 }, end: { line: 663, column: 2 } },
                '91': { start: { line: 637, column: 2 }, end: { line: 639, column: 3 } },
                '92': { start: { line: 638, column: 4 }, end: { line: 638, column: 19 } },
                '93': { start: { line: 640, column: 20 }, end: { line: 640, column: 64 } },
                '94': { start: { line: 642, column: 20 }, end: { line: 642, column: 21 } },
                '95': { start: { line: 643, column: 2 }, end: { line: 645, column: 3 } },
                '96': { start: { line: 644, column: 4 }, end: { line: 644, column: 47 } },
                '97': { start: { line: 647, column: 19 }, end: { line: 657, column: 3 } },
                '98': { start: { line: 659, column: 2 }, end: { line: 659, column: 66 } },
                '99': { start: { line: 660, column: 2 }, end: { line: 660, column: 48 } },
                '100': { start: { line: 661, column: 2 }, end: { line: 661, column: 59 } },
                '101': { start: { line: 662, column: 2 }, end: { line: 662, column: 25 } },
                '102': { start: { line: 733, column: 0 }, end: { line: 736, column: 2 } },
                '103': { start: { line: 734, column: 2 }, end: { line: 734, column: 56 } },
                '104': { start: { line: 735, column: 2 }, end: { line: 735, column: 25 } },
                '105': { start: { line: 827, column: 0 }, end: { line: 831, column: 2 } },
                '106': { start: { line: 828, column: 2 }, end: { line: 828, column: 54 } },
                '107': { start: { line: 829, column: 2 }, end: { line: 829, column: 39 } },
                '108': { start: { line: 830, column: 2 }, end: { line: 830, column: 25 } },
                '109': { start: { line: 842, column: 0 }, end: { line: 844, column: 2 } },
                '110': { start: { line: 843, column: 2 }, end: { line: 843, column: 23 } },
                '111': { start: { line: 855, column: 0 }, end: { line: 857, column: 2 } },
                '112': { start: { line: 856, column: 2 }, end: { line: 856, column: 24 } },
                '113': { start: { line: 891, column: 0 }, end: { line: 897, column: 2 } },
                '114': { start: { line: 892, column: 2 }, end: { line: 896, column: 3 } },
                '115': { start: { line: 893, column: 4 }, end: { line: 893, column: 41 } },
                '116': { start: { line: 895, column: 4 }, end: { line: 895, column: 62 } },
                '117': { start: { line: 928, column: 0 }, end: { line: 939, column: 2 } },
                '118': { start: { line: 929, column: 2 }, end: { line: 938, column: 3 } },
                '119': { start: { line: 930, column: 18 }, end: { line: 930, column: 36 } },
                '120': { start: { line: 931, column: 4 }, end: { line: 931, column: 25 } },
                '121': { start: { line: 932, column: 4 }, end: { line: 932, column: 29 } },
                '122': { start: { line: 933, column: 4 }, end: { line: 933, column: 28 } },
                '123': { start: { line: 934, column: 4 }, end: { line: 934, column: 29 } },
                '124': { start: { line: 935, column: 4 }, end: { line: 935, column: 24 } },
                '125': { start: { line: 936, column: 4 }, end: { line: 936, column: 27 } },
                '126': { start: { line: 937, column: 4 }, end: { line: 937, column: 66 } },
                '127': { start: { line: 965, column: 0 }, end: { line: 970, column: 2 } },
                '128': { start: { line: 966, column: 2 }, end: { line: 969, column: 3 } },
                '129': { start: { line: 967, column: 18 }, end: { line: 967, column: 36 } },
                '130': { start: { line: 968, column: 4 }, end: { line: 968, column: 48 } },
                '131': { start: { line: 1001, column: 0 }, end: { line: 1015, column: 2 } },
                '132': { start: { line: 1002, column: 2 }, end: { line: 1014, column: 3 } },
                '133': {
                  start: { line: 1003, column: 18 },
                  end: { line: 1003, column: 36 }
                },
                '134': { start: { line: 1004, column: 4 }, end: { line: 1013, column: 5 } },
                '135': {
                  start: { line: 1005, column: 6 },
                  end: { line: 1005, column: 30 }
                },
                '136': {
                  start: { line: 1006, column: 6 },
                  end: { line: 1006, column: 31 }
                },
                '137': {
                  start: { line: 1007, column: 6 },
                  end: { line: 1007, column: 33 }
                },
                '138': {
                  start: { line: 1008, column: 6 },
                  end: { line: 1008, column: 72 }
                },
                '139': { start: { line: 1010, column: 6 }, end: { line: 1012, column: 8 } },
                '140': { start: { line: 1046, column: 0 }, end: { line: 1050, column: 2 } },
                '141': { start: { line: 1047, column: 2 }, end: { line: 1049, column: 3 } },
                '142': {
                  start: { line: 1048, column: 4 },
                  end: { line: 1048, column: 40 }
                },
                '143': { start: { line: 1083, column: 0 }, end: { line: 1087, column: 2 } },
                '144': { start: { line: 1084, column: 2 }, end: { line: 1086, column: 3 } },
                '145': {
                  start: { line: 1085, column: 4 },
                  end: { line: 1085, column: 38 }
                },
                '146': { start: { line: 1119, column: 0 }, end: { line: 1123, column: 2 } },
                '147': { start: { line: 1120, column: 2 }, end: { line: 1122, column: 3 } },
                '148': {
                  start: { line: 1121, column: 4 },
                  end: { line: 1121, column: 39 }
                },
                '149': { start: { line: 1162, column: 0 }, end: { line: 1174, column: 2 } },
                '150': { start: { line: 1163, column: 2 }, end: { line: 1173, column: 3 } },
                '151': {
                  start: { line: 1164, column: 18 },
                  end: { line: 1164, column: 36 }
                },
                '152': { start: { line: 1165, column: 4 }, end: { line: 1172, column: 5 } },
                '153': {
                  start: { line: 1166, column: 6 },
                  end: { line: 1166, column: 36 }
                },
                '154': { start: { line: 1169, column: 6 }, end: { line: 1171, column: 7 } },
                '155': { start: { line: 1170, column: 8 }, end: { line: 1170, column: 24 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 87, column: 11 }, end: { line: 87, column: 12 } },
                  loc: { start: { line: 87, column: 35 }, end: { line: 220, column: 1 } },
                  line: 87
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: {
                    start: { line: 225, column: 33 },
                    end: { line: 225, column: 34 }
                  },
                  loc: { start: { line: 225, column: 49 }, end: { line: 251, column: 1 } },
                  line: 225
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 256, column: 34 },
                    end: { line: 256, column: 35 }
                  },
                  loc: { start: { line: 256, column: 56 }, end: { line: 259, column: 1 } },
                  line: 256
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 291, column: 32 },
                    end: { line: 291, column: 33 }
                  },
                  loc: { start: { line: 291, column: 43 }, end: { line: 294, column: 1 } },
                  line: 291
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 341, column: 34 },
                    end: { line: 341, column: 35 }
                  },
                  loc: { start: { line: 341, column: 55 }, end: { line: 344, column: 1 } },
                  line: 341
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 393, column: 25 },
                    end: { line: 393, column: 26 }
                  },
                  loc: { start: { line: 393, column: 46 }, end: { line: 396, column: 1 } },
                  line: 393
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 432, column: 25 },
                    end: { line: 432, column: 26 }
                  },
                  loc: { start: { line: 432, column: 50 }, end: { line: 435, column: 1 } },
                  line: 432
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 466, column: 28 },
                    end: { line: 466, column: 29 }
                  },
                  loc: { start: { line: 466, column: 52 }, end: { line: 546, column: 1 } },
                  line: 466
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 497, column: 28 },
                    end: { line: 497, column: 29 }
                  },
                  loc: { start: { line: 497, column: 42 }, end: { line: 510, column: 5 } },
                  line: 497
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 599, column: 26 },
                    end: { line: 599, column: 27 }
                  },
                  loc: { start: { line: 599, column: 44 }, end: { line: 601, column: 1 } },
                  line: 599
                },
                '10': {
                  name: '(anonymous_10)',
                  decl: {
                    start: { line: 636, column: 26 },
                    end: { line: 636, column: 27 }
                  },
                  loc: { start: { line: 636, column: 44 }, end: { line: 663, column: 1 } },
                  line: 636
                },
                '11': {
                  name: '(anonymous_11)',
                  decl: {
                    start: { line: 733, column: 28 },
                    end: { line: 733, column: 29 }
                  },
                  loc: { start: { line: 733, column: 55 }, end: { line: 736, column: 1 } },
                  line: 733
                },
                '12': {
                  name: '(anonymous_12)',
                  decl: {
                    start: { line: 827, column: 27 },
                    end: { line: 827, column: 28 }
                  },
                  loc: { start: { line: 827, column: 45 }, end: { line: 831, column: 1 } },
                  line: 827
                },
                '13': {
                  name: '(anonymous_13)',
                  decl: {
                    start: { line: 842, column: 33 },
                    end: { line: 842, column: 34 }
                  },
                  loc: { start: { line: 842, column: 47 }, end: { line: 844, column: 1 } },
                  line: 842
                },
                '14': {
                  name: '(anonymous_14)',
                  decl: {
                    start: { line: 855, column: 32 },
                    end: { line: 855, column: 33 }
                  },
                  loc: { start: { line: 855, column: 43 }, end: { line: 857, column: 1 } },
                  line: 855
                },
                '15': {
                  name: '(anonymous_15)',
                  decl: {
                    start: { line: 891, column: 26 },
                    end: { line: 891, column: 27 }
                  },
                  loc: { start: { line: 891, column: 56 }, end: { line: 897, column: 1 } },
                  line: 891
                },
                '16': {
                  name: '(anonymous_16)',
                  decl: {
                    start: { line: 928, column: 27 },
                    end: { line: 928, column: 28 }
                  },
                  loc: { start: { line: 928, column: 38 }, end: { line: 939, column: 1 } },
                  line: 928
                },
                '17': {
                  name: '(anonymous_17)',
                  decl: {
                    start: { line: 965, column: 37 },
                    end: { line: 965, column: 38 }
                  },
                  loc: { start: { line: 965, column: 48 }, end: { line: 970, column: 1 } },
                  line: 965
                },
                '18': {
                  name: '(anonymous_18)',
                  decl: {
                    start: { line: 1001, column: 30 },
                    end: { line: 1001, column: 31 }
                  },
                  loc: {
                    start: { line: 1001, column: 46 },
                    end: { line: 1015, column: 1 }
                  },
                  line: 1001
                },
                '19': {
                  name: '(anonymous_19)',
                  decl: {
                    start: { line: 1046, column: 31 },
                    end: { line: 1046, column: 32 }
                  },
                  loc: {
                    start: { line: 1046, column: 42 },
                    end: { line: 1050, column: 1 }
                  },
                  line: 1046
                },
                '20': {
                  name: '(anonymous_20)',
                  decl: {
                    start: { line: 1083, column: 26 },
                    end: { line: 1083, column: 27 }
                  },
                  loc: {
                    start: { line: 1083, column: 37 },
                    end: { line: 1087, column: 1 }
                  },
                  line: 1083
                },
                '21': {
                  name: '(anonymous_21)',
                  decl: {
                    start: { line: 1119, column: 27 },
                    end: { line: 1119, column: 28 }
                  },
                  loc: {
                    start: { line: 1119, column: 38 },
                    end: { line: 1123, column: 1 }
                  },
                  line: 1119
                },
                '22': {
                  name: '(anonymous_22)',
                  decl: {
                    start: { line: 1162, column: 27 },
                    end: { line: 1162, column: 28 }
                  },
                  loc: {
                    start: { line: 1162, column: 46 },
                    end: { line: 1174, column: 1 }
                  },
                  line: 1162
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 228, column: 2 }, end: { line: 230, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 228, column: 2 }, end: { line: 230, column: 3 } },
                    { start: { line: 228, column: 2 }, end: { line: 230, column: 3 } }
                  ],
                  line: 228
                },
                '1': {
                  loc: { start: { line: 231, column: 2 }, end: { line: 250, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 231, column: 2 }, end: { line: 250, column: 3 } },
                    { start: { line: 231, column: 2 }, end: { line: 250, column: 3 } }
                  ],
                  line: 231
                },
                '2': {
                  loc: { start: { line: 234, column: 4 }, end: { line: 249, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 234, column: 4 }, end: { line: 249, column: 5 } },
                    { start: { line: 234, column: 4 }, end: { line: 249, column: 5 } }
                  ],
                  line: 234
                },
                '3': {
                  loc: { start: { line: 241, column: 6 }, end: { line: 248, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 241, column: 6 }, end: { line: 248, column: 7 } },
                    { start: { line: 241, column: 6 }, end: { line: 248, column: 7 } }
                  ],
                  line: 241
                },
                '4': {
                  loc: { start: { line: 241, column: 10 }, end: { line: 241, column: 72 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 241, column: 10 }, end: { line: 241, column: 34 } },
                    { start: { line: 241, column: 38 }, end: { line: 241, column: 72 } }
                  ],
                  line: 241
                },
                '5': {
                  loc: { start: { line: 478, column: 2 }, end: { line: 485, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 478, column: 2 }, end: { line: 485, column: 3 } },
                    { start: { line: 478, column: 2 }, end: { line: 485, column: 3 } }
                  ],
                  line: 478
                },
                '6': {
                  loc: { start: { line: 478, column: 6 }, end: { line: 478, column: 33 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 478, column: 6 }, end: { line: 478, column: 17 } },
                    { start: { line: 478, column: 21 }, end: { line: 478, column: 33 } }
                  ],
                  line: 478
                },
                '7': {
                  loc: { start: { line: 481, column: 9 }, end: { line: 485, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 481, column: 9 }, end: { line: 485, column: 3 } },
                    { start: { line: 481, column: 9 }, end: { line: 485, column: 3 } }
                  ],
                  line: 481
                },
                '8': {
                  loc: { start: { line: 483, column: 9 }, end: { line: 485, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 483, column: 9 }, end: { line: 485, column: 3 } },
                    { start: { line: 483, column: 9 }, end: { line: 485, column: 3 } }
                  ],
                  line: 483
                },
                '9': {
                  loc: { start: { line: 494, column: 2 }, end: { line: 519, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 494, column: 2 }, end: { line: 519, column: 3 } },
                    { start: { line: 494, column: 2 }, end: { line: 519, column: 3 } }
                  ],
                  line: 494
                },
                '10': {
                  loc: { start: { line: 541, column: 2 }, end: { line: 543, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 541, column: 2 }, end: { line: 543, column: 3 } },
                    { start: { line: 541, column: 2 }, end: { line: 543, column: 3 } }
                  ],
                  line: 541
                },
                '11': {
                  loc: { start: { line: 637, column: 2 }, end: { line: 639, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 637, column: 2 }, end: { line: 639, column: 3 } },
                    { start: { line: 637, column: 2 }, end: { line: 639, column: 3 } }
                  ],
                  line: 637
                },
                '12': {
                  loc: { start: { line: 643, column: 2 }, end: { line: 645, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 643, column: 2 }, end: { line: 645, column: 3 } },
                    { start: { line: 643, column: 2 }, end: { line: 645, column: 3 } }
                  ],
                  line: 643
                },
                '13': {
                  loc: { start: { line: 892, column: 2 }, end: { line: 896, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 892, column: 2 }, end: { line: 896, column: 3 } },
                    { start: { line: 892, column: 2 }, end: { line: 896, column: 3 } }
                  ],
                  line: 892
                },
                '14': {
                  loc: { start: { line: 929, column: 2 }, end: { line: 938, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 929, column: 2 }, end: { line: 938, column: 3 } },
                    { start: { line: 929, column: 2 }, end: { line: 938, column: 3 } }
                  ],
                  line: 929
                },
                '15': {
                  loc: { start: { line: 966, column: 2 }, end: { line: 969, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 966, column: 2 }, end: { line: 969, column: 3 } },
                    { start: { line: 966, column: 2 }, end: { line: 969, column: 3 } }
                  ],
                  line: 966
                },
                '16': {
                  loc: { start: { line: 1002, column: 2 }, end: { line: 1014, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1002, column: 2 }, end: { line: 1014, column: 3 } },
                    { start: { line: 1002, column: 2 }, end: { line: 1014, column: 3 } }
                  ],
                  line: 1002
                },
                '17': {
                  loc: { start: { line: 1004, column: 4 }, end: { line: 1013, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1004, column: 4 }, end: { line: 1013, column: 5 } },
                    { start: { line: 1004, column: 4 }, end: { line: 1013, column: 5 } }
                  ],
                  line: 1004
                },
                '18': {
                  loc: {
                    start: { line: 1004, column: 8 },
                    end: { line: 1004, column: 45 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1004, column: 8 }, end: { line: 1004, column: 31 } },
                    { start: { line: 1004, column: 35 }, end: { line: 1004, column: 45 } }
                  ],
                  line: 1004
                },
                '19': {
                  loc: { start: { line: 1047, column: 2 }, end: { line: 1049, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1047, column: 2 }, end: { line: 1049, column: 3 } },
                    { start: { line: 1047, column: 2 }, end: { line: 1049, column: 3 } }
                  ],
                  line: 1047
                },
                '20': {
                  loc: { start: { line: 1084, column: 2 }, end: { line: 1086, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1084, column: 2 }, end: { line: 1086, column: 3 } },
                    { start: { line: 1084, column: 2 }, end: { line: 1086, column: 3 } }
                  ],
                  line: 1084
                },
                '21': {
                  loc: { start: { line: 1120, column: 2 }, end: { line: 1122, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1120, column: 2 }, end: { line: 1122, column: 3 } },
                    { start: { line: 1120, column: 2 }, end: { line: 1122, column: 3 } }
                  ],
                  line: 1120
                },
                '22': {
                  loc: { start: { line: 1163, column: 2 }, end: { line: 1173, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1163, column: 2 }, end: { line: 1173, column: 3 } },
                    { start: { line: 1163, column: 2 }, end: { line: 1173, column: 3 } }
                  ],
                  line: 1163
                },
                '23': {
                  loc: { start: { line: 1165, column: 4 }, end: { line: 1172, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1165, column: 4 }, end: { line: 1172, column: 5 } },
                    { start: { line: 1165, column: 4 }, end: { line: 1172, column: 5 } }
                  ],
                  line: 1165
                },
                '24': {
                  loc: {
                    start: { line: 1165, column: 8 },
                    end: { line: 1165, column: 45 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1165, column: 8 }, end: { line: 1165, column: 31 } },
                    { start: { line: 1165, column: 35 }, end: { line: 1165, column: 45 } }
                  ],
                  line: 1165
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0,
                '118': 0,
                '119': 0,
                '120': 0,
                '121': 0,
                '122': 0,
                '123': 0,
                '124': 0,
                '125': 0,
                '126': 0,
                '127': 0,
                '128': 0,
                '129': 0,
                '130': 0,
                '131': 0,
                '132': 0,
                '133': 0,
                '134': 0,
                '135': 0,
                '136': 0,
                '137': 0,
                '138': 0,
                '139': 0,
                '140': 0,
                '141': 0,
                '142': 0,
                '143': 0,
                '144': 0,
                '145': 0,
                '146': 0,
                '147': 0,
                '148': 0,
                '149': 0,
                '150': 0,
                '151': 0,
                '152': 0,
                '153': 0,
                '154': 0,
                '155': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0],
                '20': [0, 0],
                '21': [0, 0],
                '22': [0, 0],
                '23': [0, 0],
                '24': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '120fd5a228ef48aa61255f8f3663742f59a41e3e'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.symbol');
          _dereq_('core-js/modules/es.symbol.description');
          _dereq_('core-js/modules/es.symbol.iterator');
          _dereq_('core-js/modules/es.array.filter');
          _dereq_('core-js/modules/es.array.iterator');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.string.iterator');
          _dereq_('core-js/modules/web.dom-collections.iterator');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          var _filters = _interopRequireDefault(_dereq_('./filters'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_2qks0q05q8.s[0]++;

          /*
                                                                                                                                                                                 * Class methods
                                                                                                                                                                                 */

          /**
           * Creates a new <a href="#/p5.Image">p5.Image</a>. A <a href="#/p5.Image">p5.Image</a> is a canvas backed representation of an
           * image.
           *
           * p5 can display .gif, .jpg and .png images. Images may be displayed
           * in 2D and 3D space. Before an image is used, it must be loaded with the
           * <a href="#/p5/loadImage">loadImage()</a> function. The <a href="#/p5.Image">p5.Image</a> class contains fields for the width and
           * height of the image, as well as an array called <a href="#/p5.Image/pixels">pixels[]</a> that contains the
           * values for every pixel in the image.
           *
           * The methods described below allow easy access to the image's pixels and
           * alpha channel and simplify the process of compositing.
           *
           * Before using the <a href="#/p5.Image/pixels">pixels[]</a> array, be sure to use the <a href="#/p5.Image/loadPixels">loadPixels()</a> method on
           * the image to make sure that the pixel data is properly loaded.
           * @example
           * <div><code>
           * function setup() {
           *   let img = createImage(100, 100); // same as new p5.Image(100, 100);
           *   img.loadPixels();
           *   createCanvas(100, 100);
           *   background(0);
           *
           *   // helper for writing color to array
           *   function writeColor(image, x, y, red, green, blue, alpha) {
           *     let index = (x + y * width) * 4;
           *     image.pixels[index] = red;
           *     image.pixels[index + 1] = green;
           *     image.pixels[index + 2] = blue;
           *     image.pixels[index + 3] = alpha;
           *   }
           *
           *   let x, y;
           *   // fill with random colors
           *   for (y = 0; y < img.height; y++) {
           *     for (x = 0; x < img.width; x++) {
           *       let red = random(255);
           *       let green = random(255);
           *       let blue = random(255);
           *       let alpha = 255;
           *       writeColor(img, x, y, red, green, blue, alpha);
           *     }
           *   }
           *
           *   // draw a red line
           *   y = 0;
           *   for (x = 0; x < img.width; x++) {
           *     writeColor(img, x, y, 255, 0, 0, 255);
           *   }
           *
           *   // draw a green line
           *   y = img.height - 1;
           *   for (x = 0; x < img.width; x++) {
           *     writeColor(img, x, y, 0, 255, 0, 255);
           *   }
           *
           *   img.updatePixels();
           *   image(img, 0, 0);
           * }
           * </code></div>
           *
           * @class p5.Image
           * @constructor
           * @param {Number} width
           * @param {Number} height
           */
          _main.default.Image = function(width, height) {
            cov_2qks0q05q8.f[0]++;
            cov_2qks0q05q8.s[1]++;
            /**
             * Image width.
             * @property {Number} width
             * @readOnly
             * @example
             * <div><code>
             * let img;
             * function preload() {
             *   img = loadImage('assets/rockies.jpg');
             * }
             *
             * function setup() {
             *   createCanvas(100, 100);
             *   image(img, 0, 0);
             *   for (let i = 0; i < img.width; i++) {
             *     let c = img.get(i, img.height / 2);
             *     stroke(c);
             *     line(i, height / 2, i, height);
             *   }
             * }
             * </code></div>
             *
             * @alt
             * rocky mountains in top and horizontal lines in corresponding colors in bottom.
             *
             */
            this.width = width;
            /**
             * Image height.
             * @property {Number} height
             * @readOnly
             * @example
             * <div><code>
             * let img;
             * function preload() {
             *   img = loadImage('assets/rockies.jpg');
             * }
             *
             * function setup() {
             *   createCanvas(100, 100);
             *   image(img, 0, 0);
             *   for (let i = 0; i < img.height; i++) {
             *     let c = img.get(img.width / 2, i);
             *     stroke(c);
             *     line(0, i, width / 2, i);
             *   }
             * }
             * </code></div>
             *
             * @alt
             * rocky mountains on right and vertical lines in corresponding colors on left.
             *
             */ cov_2qks0q05q8.s[2]++;
            this.height = height;
            cov_2qks0q05q8.s[3]++;
            this.canvas = document.createElement('canvas');
            cov_2qks0q05q8.s[4]++;
            this.canvas.width = this.width;
            cov_2qks0q05q8.s[5]++;
            this.canvas.height = this.height;
            cov_2qks0q05q8.s[6]++;
            this.drawingContext = this.canvas.getContext('2d');
            cov_2qks0q05q8.s[7]++;
            this._pixelsState = this;
            cov_2qks0q05q8.s[8]++;
            this._pixelDensity = 1;
            //Object for working with GIFs, defaults to null
            cov_2qks0q05q8.s[9]++;
            this.gifProperties = null;
            //For WebGL Texturing only: used to determine whether to reupload texture to GPU
            cov_2qks0q05q8.s[10]++;
            this._modified = false;
            /**
             * Array containing the values for all the pixels in the display window.
             * These values are numbers. This array is the size (include an appropriate
             * factor for pixelDensity) of the display window x4,
             * representing the R, G, B, A values in order for each pixel, moving from
             * left to right across each row, then down each column. Retina and other
             * high density displays may have more pixels (by a factor of
             * pixelDensity^2).
             * For example, if the image is 100x100 pixels, there will be 40,000. With
             * pixelDensity = 2, there will be 160,000. The first four values
             * (indices 0-3) in the array will be the R, G, B, A values of the pixel at
             * (0, 0). The second four values (indices 4-7) will contain the R, G, B, A
             * values of the pixel at (1, 0). More generally, to set values for a pixel
             * at (x, y):
             * ```javascript
             * let d = pixelDensity();
             * for (let i = 0; i < d; i++) {
             *   for (let j = 0; j < d; j++) {
             *     // loop over
             *     index = 4 * ((y * d + j) * width * d + (x * d + i));
             *     pixels[index] = r;
             *     pixels[index+1] = g;
             *     pixels[index+2] = b;
             *     pixels[index+3] = a;
             *   }
             * }
             * ```
             *
             * Before accessing this array, the data must loaded with the <a href="#/p5.Image/loadPixels">loadPixels()</a>
             * function. After the array data has been modified, the <a href="#/p5.Image/updatePixels">updatePixels()</a>
             * function must be run to update the changes.
             * @property {Number[]} pixels
             * @example
             * <div>
             * <code>
             * let img = createImage(66, 66);
             * img.loadPixels();
             * for (let i = 0; i < img.width; i++) {
             *   for (let j = 0; j < img.height; j++) {
             *     img.set(i, j, color(0, 90, 102));
             *   }
             * }
             * img.updatePixels();
             * image(img, 17, 17);
             * </code>
             * </div>
             * <div>
             * <code>
             * let pink = color(255, 102, 204);
             * let img = createImage(66, 66);
             * img.loadPixels();
             * for (let i = 0; i < 4 * (width * height / 2); i += 4) {
             *   img.pixels[i] = red(pink);
             *   img.pixels[i + 1] = green(pink);
             *   img.pixels[i + 2] = blue(pink);
             *   img.pixels[i + 3] = alpha(pink);
             * }
             * img.updatePixels();
             * image(img, 17, 17);
             * </code>
             * </div>
             *
             * @alt
             * 66x66 turquoise rect in center of canvas
             * 66x66 pink rect in center of canvas
             *
             */ cov_2qks0q05q8.s[11]++;
            this.pixels = [];
          };

          /**
           * Helper function for animating GIF-based images with time
           */ cov_2qks0q05q8.s[12]++;
          _main.default.Image.prototype._animateGif = function(pInst) {
            cov_2qks0q05q8.f[1]++;
            var props = (cov_2qks0q05q8.s[13]++, this.gifProperties);
            var curTime = (cov_2qks0q05q8.s[14]++, pInst._lastFrameTime + pInst.deltaTime);
            cov_2qks0q05q8.s[15]++;
            if (props.lastChangeTime === 0) {
              cov_2qks0q05q8.b[0][0]++;
              cov_2qks0q05q8.s[16]++;
              props.lastChangeTime = curTime;
            } else {
              cov_2qks0q05q8.b[0][1]++;
            }
            cov_2qks0q05q8.s[17]++;
            if (props.playing) {
              cov_2qks0q05q8.b[1][0]++;
              cov_2qks0q05q8.s[18]++;
              props.timeDisplayed = curTime - props.lastChangeTime;
              var curDelay = (cov_2qks0q05q8.s[19]++,
              props.frames[props.displayIndex].delay);
              cov_2qks0q05q8.s[20]++;
              if (props.timeDisplayed >= curDelay) {
                cov_2qks0q05q8.b[2][0]++;
                //GIF is bound to 'realtime' so can skip frames
                var skips = (cov_2qks0q05q8.s[21]++,
                Math.floor(props.timeDisplayed / curDelay));
                cov_2qks0q05q8.s[22]++;
                props.timeDisplayed = 0;
                cov_2qks0q05q8.s[23]++;
                props.lastChangeTime = curTime;
                cov_2qks0q05q8.s[24]++;
                props.displayIndex += skips;
                cov_2qks0q05q8.s[25]++;
                props.loopCount = Math.floor(props.displayIndex / props.numFrames);
                cov_2qks0q05q8.s[26]++;
                if (
                  (cov_2qks0q05q8.b[4][0]++, props.loopLimit !== null) &&
                  (cov_2qks0q05q8.b[4][1]++, props.loopCount >= props.loopLimit)
                ) {
                  cov_2qks0q05q8.b[3][0]++;
                  cov_2qks0q05q8.s[27]++;
                  props.playing = false;
                } else {
                  cov_2qks0q05q8.b[3][1]++;
                  var ind = (cov_2qks0q05q8.s[28]++, props.displayIndex % props.numFrames);
                  cov_2qks0q05q8.s[29]++;
                  this.drawingContext.putImageData(props.frames[ind].image, 0, 0);
                  cov_2qks0q05q8.s[30]++;
                  props.displayIndex = ind;
                  cov_2qks0q05q8.s[31]++;
                  this.setModified(true);
                }
              } else {
                cov_2qks0q05q8.b[2][1]++;
              }
            } else {
              cov_2qks0q05q8.b[1][1]++;
            }
          };

          /**
           * Helper fxn for sharing pixel methods
           */ cov_2qks0q05q8.s[32]++;
          _main.default.Image.prototype._setProperty = function(prop, value) {
            cov_2qks0q05q8.f[2]++;
            cov_2qks0q05q8.s[33]++;
            this[prop] = value;
            cov_2qks0q05q8.s[34]++;
            this.setModified(true);
          };

          /**
           * Loads the pixels data for this image into the [pixels] attribute.
           *
           * @method loadPixels
           * @example
           * <div><code>
           * let myImage;
           * let halfImage;
           *
           * function preload() {
           *   myImage = loadImage('assets/rockies.jpg');
           * }
           *
           * function setup() {
           *   myImage.loadPixels();
           *   halfImage = 4 * myImage.width * myImage.height / 2;
           *   for (let i = 0; i < halfImage; i++) {
           *     myImage.pixels[i + halfImage] = myImage.pixels[i];
           *   }
           *   myImage.updatePixels();
           * }
           *
           * function draw() {
           *   image(myImage, 0, 0, width, height);
           * }
           * </code></div>
           *
           * @alt
           * 2 images of rocky mountains vertically stacked
           */ cov_2qks0q05q8.s[35]++;
          _main.default.Image.prototype.loadPixels = function() {
            cov_2qks0q05q8.f[3]++;
            cov_2qks0q05q8.s[36]++;
            _main.default.Renderer2D.prototype.loadPixels.call(this);
            cov_2qks0q05q8.s[37]++;
            this.setModified(true);
          };

          /**
           * Updates the backing canvas for this image with the contents of
           * the [pixels] array.
           *
           * If this image is an animated GIF then the pixels will be updated
           * in the frame that is currently displayed.
           *
           * @method updatePixels
           * @param {Integer} x x-offset of the target update area for the
           *                              underlying canvas
           * @param {Integer} y y-offset of the target update area for the
           *                              underlying canvas
           * @param {Integer} w height of the target update area for the
           *                              underlying canvas
           * @param {Integer} h height of the target update area for the
           *                              underlying canvas
           * @example
           * <div><code>
           * let myImage;
           * let halfImage;
           *
           * function preload() {
           *   myImage = loadImage('assets/rockies.jpg');
           * }
           *
           * function setup() {
           *   myImage.loadPixels();
           *   halfImage = 4 * myImage.width * myImage.height / 2;
           *   for (let i = 0; i < halfImage; i++) {
           *     myImage.pixels[i + halfImage] = myImage.pixels[i];
           *   }
           *   myImage.updatePixels();
           * }
           *
           * function draw() {
           *   image(myImage, 0, 0, width, height);
           * }
           * </code></div>
           *
           * @alt
           * 2 images of rocky mountains vertically stacked
           */
          /**
           * @method updatePixels
           */ cov_2qks0q05q8.s[38]++;
          _main.default.Image.prototype.updatePixels = function(x, y, w, h) {
            cov_2qks0q05q8.f[4]++;
            cov_2qks0q05q8.s[39]++;
            _main.default.Renderer2D.prototype.updatePixels.call(this, x, y, w, h);
            cov_2qks0q05q8.s[40]++;
            this.setModified(true);
          };

          /**
           * Get a region of pixels from an image.
           *
           * If no params are passed, the whole image is returned.
           * If x and y are the only params passed a single pixel is extracted.
           * If all params are passed a rectangle region is extracted and a <a href="#/p5.Image">p5.Image</a>
           * is returned.
           *
           * @method get
           * @param  {Number}               x x-coordinate of the pixel
           * @param  {Number}               y y-coordinate of the pixel
           * @param  {Number}               w width
           * @param  {Number}               h height
           * @return {p5.Image}             the rectangle <a href="#/p5.Image">p5.Image</a>
           * @example
           * <div><code>
           * let myImage;
           * let c;
           *
           * function preload() {
           *   myImage = loadImage('assets/rockies.jpg');
           * }
           *
           * function setup() {
           *   background(myImage);
           *   noStroke();
           *   c = myImage.get(60, 90);
           *   fill(c);
           *   rect(25, 25, 50, 50);
           * }
           *
           * //get() returns color here
           * </code></div>
           *
           * @alt
           * image of rocky mountains with 50x50 green rect in front
           */
          /**
           * @method get
           * @return {p5.Image}      the whole <a href="#/p5.Image">p5.Image</a>
           */
          /**
           * @method get
           * @param  {Number}        x
           * @param  {Number}        y
           * @return {Number[]}      color of pixel at x,y in array format [R, G, B, A]
           */ cov_2qks0q05q8.s[41]++;
          _main.default.Image.prototype.get = function(x, y, w, h) {
            cov_2qks0q05q8.f[5]++;
            cov_2qks0q05q8.s[42]++;
            _main.default._validateParameters('p5.Image.get', arguments);
            cov_2qks0q05q8.s[43]++;
            return _main.default.Renderer2D.prototype.get.apply(this, arguments);
          };
          cov_2qks0q05q8.s[44]++;

          _main.default.Image.prototype._getPixel =
            _main.default.Renderer2D.prototype._getPixel;

          /**
           * Set the color of a single pixel or write an image into
           * this <a href="#/p5.Image">p5.Image</a>.
           *
           * Note that for a large number of pixels this will
           * be slower than directly manipulating the pixels array
           * and then calling <a href="#/p5.Image/updatePixels">updatePixels()</a>.
           *
           * @method set
           * @param {Number}              x x-coordinate of the pixel
           * @param {Number}              y y-coordinate of the pixel
           * @param {Number|Number[]|Object}   a grayscale value | pixel array |
           *                                a <a href="#/p5.Color">p5.Color</a> | image to copy
           * @example
           * <div>
           * <code>
           * let img = createImage(66, 66);
           * img.loadPixels();
           * for (let i = 0; i < img.width; i++) {
           *   for (let j = 0; j < img.height; j++) {
           *     img.set(i, j, color(0, 90, 102, (i % img.width) * 2));
           *   }
           * }
           * img.updatePixels();
           * image(img, 17, 17);
           * image(img, 34, 34);
           * </code>
           * </div>
           *
           * @alt
           * 2 gradated dark turquoise rects fade left. 1 center 1 bottom right of canvas
           */ cov_2qks0q05q8.s[45]++;
          _main.default.Image.prototype.set = function(x, y, imgOrCol) {
            cov_2qks0q05q8.f[6]++;
            cov_2qks0q05q8.s[46]++;
            _main.default.Renderer2D.prototype.set.call(this, x, y, imgOrCol);
            cov_2qks0q05q8.s[47]++;
            this.setModified(true);
          };

          /**
    * Resize the image to a new width and height. To make the image scale
    * proportionally, use 0 as the value for the wide or high parameter.
    * For instance, to make the width of an image 150 pixels, and change
    * the height using the same proportion, use resize(150, 0).
    *
    * @method resize
    * @param {Number} width the resized image width
    * @param {Number} height the resized image height
    * @example
    * <div><code>
    * let img;
    *
    * function preload() {
    *   img = loadImage('assets/rockies.jpg');
    * }
   
    * function draw() {
    *   image(img, 0, 0);
    * }
    *
    * function mousePressed() {
    *   img.resize(50, 100);
    * }
    * </code></div>
    *
    * @alt
    * image of rocky mountains. zoomed in
    */ cov_2qks0q05q8
            .s[48]++;
          _main.default.Image.prototype.resize = function(width, height) {
            cov_2qks0q05q8.f[7]++;
            cov_2qks0q05q8.s[49]++;
            // Copy contents to a temporary canvas, resize the original
            // and then copy back.
            //
            // There is a faster approach that involves just one copy and swapping the
            // this.canvas reference. We could switch to that approach if (as i think
            // is the case) there an expectation that the user would not hold a
            // reference to the backing canvas of a p5.Image. But since we do not
            // enforce that at the moment, I am leaving in the slower, but safer
            // implementation.

            // auto-resize
            if (
              (cov_2qks0q05q8.b[6][0]++, width === 0) &&
              (cov_2qks0q05q8.b[6][1]++, height === 0)
            ) {
              cov_2qks0q05q8.b[5][0]++;
              cov_2qks0q05q8.s[50]++;
              width = this.canvas.width;
              cov_2qks0q05q8.s[51]++;
              height = this.canvas.height;
            } else {
              cov_2qks0q05q8.b[5][1]++;
              cov_2qks0q05q8.s[52]++;
              if (width === 0) {
                cov_2qks0q05q8.b[7][0]++;
                cov_2qks0q05q8.s[53]++;
                width = this.canvas.width * height / this.canvas.height;
              } else {
                cov_2qks0q05q8.b[7][1]++;
                cov_2qks0q05q8.s[54]++;
                if (height === 0) {
                  cov_2qks0q05q8.b[8][0]++;
                  cov_2qks0q05q8.s[55]++;
                  height = this.canvas.height * width / this.canvas.width;
                } else {
                  cov_2qks0q05q8.b[8][1]++;
                }
              }
            }
            cov_2qks0q05q8.s[56]++;

            width = Math.floor(width);
            cov_2qks0q05q8.s[57]++;
            height = Math.floor(height);

            var tempCanvas = (cov_2qks0q05q8.s[58]++, document.createElement('canvas'));
            cov_2qks0q05q8.s[59]++;
            tempCanvas.width = width;
            cov_2qks0q05q8.s[60]++;
            tempCanvas.height = height;
            cov_2qks0q05q8.s[61]++;

            if (this.gifProperties) {
              cov_2qks0q05q8.b[9][0]++;
              var props = (cov_2qks0q05q8.s[62]++, this.gifProperties);
              //adapted from github.com/LinusU/resize-image-data
              cov_2qks0q05q8.s[63]++;
              var nearestNeighbor = function nearestNeighbor(src, dst) {
                cov_2qks0q05q8.f[8]++;
                var pos = (cov_2qks0q05q8.s[64]++, 0);
                cov_2qks0q05q8.s[65]++;
                for (var y = (cov_2qks0q05q8.s[66]++, 0); y < dst.height; y++) {
                  cov_2qks0q05q8.s[67]++;
                  for (var x = (cov_2qks0q05q8.s[68]++, 0); x < dst.width; x++) {
                    var srcX = (cov_2qks0q05q8.s[69]++,
                    Math.floor(x * src.width / dst.width));
                    var srcY = (cov_2qks0q05q8.s[70]++,
                    Math.floor(y * src.height / dst.height));
                    var srcPos = (cov_2qks0q05q8.s[71]++, (srcY * src.width + srcX) * 4);
                    cov_2qks0q05q8.s[72]++;
                    dst.data[pos++] = src.data[srcPos++]; // R
                    cov_2qks0q05q8.s[73]++;
                    dst.data[pos++] = src.data[srcPos++]; // G
                    cov_2qks0q05q8.s[74]++;
                    dst.data[pos++] = src.data[srcPos++]; // B
                    cov_2qks0q05q8.s[75]++;
                    dst.data[pos++] = src.data[srcPos++]; // A
                  }
                }
              };
              cov_2qks0q05q8.s[76]++;
              for (var i = (cov_2qks0q05q8.s[77]++, 0); i < props.numFrames; i++) {
                var resizedImageData = (cov_2qks0q05q8.s[78]++,
                this.drawingContext.createImageData(width, height));
                cov_2qks0q05q8.s[79]++;

                nearestNeighbor(props.frames[i].image, resizedImageData);
                cov_2qks0q05q8.s[80]++;
                props.frames[i].image = resizedImageData;
              }
            } else {
              cov_2qks0q05q8.b[9][1]++;
            }

            // prettier-ignore
            cov_2qks0q05q8.s[81]++;
            tempCanvas
              .getContext('2d')
              .drawImage(
                this.canvas,
                0,
                0,
                this.canvas.width,
                this.canvas.height,
                0,
                0,
                tempCanvas.width,
                tempCanvas.height
              );

            // Resize the original canvas, which will clear its contents
            cov_2qks0q05q8.s[82]++;
            this.canvas.width = this.width = width;
            cov_2qks0q05q8.s[83]++;
            this.canvas.height = this.height = height;

            //Copy the image back

            // prettier-ignore
            cov_2qks0q05q8.s[84]++;
            this.drawingContext.drawImage(
              tempCanvas,
              0,
              0,
              width,
              height,
              0,
              0,
              width,
              height
            );
            cov_2qks0q05q8.s[85]++;

            if (this.pixels.length > 0) {
              cov_2qks0q05q8.b[10][0]++;
              cov_2qks0q05q8.s[86]++;
              this.loadPixels();
            } else {
              cov_2qks0q05q8.b[10][1]++;
            }
            cov_2qks0q05q8.s[87]++;

            this.setModified(true);
          };

          /**
           * Copies a region of pixels from one image to another. If no
           * srcImage is specified this is used as the source. If the source
           * and destination regions aren't the same size, it will
           * automatically resize source pixels to fit the specified
           * target region.
           *
           * @method copy
           * @param  {p5.Image|p5.Element} srcImage source image
           * @param  {Integer} sx X coordinate of the source's upper left corner
           * @param  {Integer} sy Y coordinate of the source's upper left corner
           * @param  {Integer} sw source image width
           * @param  {Integer} sh source image height
           * @param  {Integer} dx X coordinate of the destination's upper left corner
           * @param  {Integer} dy Y coordinate of the destination's upper left corner
           * @param  {Integer} dw destination image width
           * @param  {Integer} dh destination image height
           * @example
           * <div><code>
           * let photo;
           * let bricks;
           * let x;
           * let y;
           *
           * function preload() {
           *   photo = loadImage('assets/rockies.jpg');
           *   bricks = loadImage('assets/bricks.jpg');
           * }
           *
           * function setup() {
           *   x = bricks.width / 2;
           *   y = bricks.height / 2;
           *   photo.copy(bricks, 0, 0, x, y, 0, 0, x, y);
           *   image(photo, 0, 0);
           * }
           * </code></div>
           *
           * @alt
           * image of rocky mountains and smaller image on top of bricks at top left
           */
          /**
           * @method copy
           * @param  {Integer} sx
           * @param  {Integer} sy
           * @param  {Integer} sw
           * @param  {Integer} sh
           * @param  {Integer} dx
           * @param  {Integer} dy
           * @param  {Integer} dw
           * @param  {Integer} dh
           */ cov_2qks0q05q8.s[88]++;
          _main.default.Image.prototype.copy = function() {
            cov_2qks0q05q8.f[9]++;
            cov_2qks0q05q8.s[89]++;
            for (
              var _len = arguments.length, args = new Array(_len), _key = 0;
              _key < _len;
              _key++
            ) {
              args[_key] = arguments[_key];
            }
            _main.default.prototype.copy.apply(this, args);
          };

          /**
           * Masks part of an image from displaying by loading another
           * image and using its alpha channel as an alpha channel for
           * this image. Masks are cumulative, one applied to an image
           * object, they cannot be removed.
           *
           * @method mask
           * @param {p5.Image} srcImage source image
           * @example
           * <div><code>
           * let photo, maskImage;
           * function preload() {
           *   photo = loadImage('assets/rockies.jpg');
           *   maskImage = loadImage('assets/mask2.png');
           * }
           *
           * function setup() {
           *   createCanvas(100, 100);
           *   photo.mask(maskImage);
           *   image(photo, 0, 0);
           * }
           * </code></div>
           *
           * @alt
           * image of rocky mountains with white at right
           *
           * http://blogs.adobe.com/webplatform/2013/01/28/blending-features-in-canvas/
           */
          // TODO: - Accept an array of alpha values.
          //       - Use other channels of an image. p5 uses the
          //       blue channel (which feels kind of arbitrary). Note: at the
          //       moment this method does not match native processing's original
          //       functionality exactly.
          cov_2qks0q05q8.s[90]++;
          _main.default.Image.prototype.mask = function(p5Image) {
            cov_2qks0q05q8.f[10]++;
            cov_2qks0q05q8.s[91]++;
            if (p5Image === undefined) {
              cov_2qks0q05q8.b[11][0]++;
              cov_2qks0q05q8.s[92]++;
              p5Image = this;
            } else {
              cov_2qks0q05q8.b[11][1]++;
            }
            var currBlend = (cov_2qks0q05q8.s[93]++,
            this.drawingContext.globalCompositeOperation);

            var scaleFactor = (cov_2qks0q05q8.s[94]++, 1);
            cov_2qks0q05q8.s[95]++;
            if (p5Image instanceof _main.default.Renderer) {
              cov_2qks0q05q8.b[12][0]++;
              cov_2qks0q05q8.s[96]++;
              scaleFactor = p5Image._pInst._pixelDensity;
            } else {
              cov_2qks0q05q8.b[12][1]++;
            }

            var copyArgs = (cov_2qks0q05q8.s[97]++,
            [
              p5Image,
              0,
              0,
              scaleFactor * p5Image.width,
              scaleFactor * p5Image.height,
              0,
              0,
              this.width,
              this.height
            ]);
            cov_2qks0q05q8.s[98]++;

            this.drawingContext.globalCompositeOperation = 'destination-in';
            cov_2qks0q05q8.s[99]++;
            _main.default.Image.prototype.copy.apply(this, copyArgs);
            cov_2qks0q05q8.s[100]++;
            this.drawingContext.globalCompositeOperation = currBlend;
            cov_2qks0q05q8.s[101]++;
            this.setModified(true);
          };

          /**
           * Applies an image filter to a <a href="#/p5.Image">p5.Image</a>
           *
           * THRESHOLD
           * Converts the image to black and white pixels depending if they are above or
           * below the threshold defined by the level parameter. The parameter must be
           * between 0.0 (black) and 1.0 (white). If no level is specified, 0.5 is used.
           *
           * GRAY
           * Converts any colors in the image to grayscale equivalents. No parameter
           * is used.
           *
           * OPAQUE
           * Sets the alpha channel to entirely opaque. No parameter is used.
           *
           * INVERT
           * Sets each pixel to its inverse value. No parameter is used.
           *
           * POSTERIZE
           * Limits each channel of the image to the number of colors specified as the
           * parameter. The parameter can be set to values between 2 and 255, but
           * results are most noticeable in the lower ranges.
           *
           * BLUR
           * Executes a Gaussian blur with the level parameter specifying the extent
           * of the blurring. If no parameter is used, the blur is equivalent to
           * Gaussian blur of radius 1. Larger values increase the blur.
           *
           * ERODE
           * Reduces the light areas. No parameter is used.
           *
           * DILATE
           * Increases the light areas. No parameter is used.
           *
           * filter() does not work in WEBGL mode.
           * A similar effect can be achieved in WEBGL mode using custom
           * shaders. Adam Ferriss has written
           * a <a href="https://github.com/aferriss/p5jsShaderExamples"
           * target='_blank'>selection of shader examples</a> that contains many
           * of the effects present in the filter examples.
           *
           * @method filter
           * @param  {Constant} filterType  either THRESHOLD, GRAY, OPAQUE, INVERT,
           *                                POSTERIZE, ERODE, DILATE or BLUR.
           *                                See Filters.js for docs on
           *                                each available filter
           * @param  {Number} [filterParam] an optional parameter unique
           *                                to each filter, see above
           * @example
           * <div><code>
           * let photo1;
           * let photo2;
           *
           * function preload() {
           *   photo1 = loadImage('assets/rockies.jpg');
           *   photo2 = loadImage('assets/rockies.jpg');
           * }
           *
           * function setup() {
           *   photo2.filter(GRAY);
           *   image(photo1, 0, 0);
           *   image(photo2, width / 2, 0);
           * }
           * </code></div>
           *
           * @alt
           * 2 images of rocky mountains left one in color, right in black and white
           */ cov_2qks0q05q8.s[102]++;
          _main.default.Image.prototype.filter = function(operation, value) {
            cov_2qks0q05q8.f[11]++;
            cov_2qks0q05q8.s[103]++;
            _filters.default.apply(this.canvas, _filters.default[operation], value);
            cov_2qks0q05q8.s[104]++;
            this.setModified(true);
          };

          /**
           * Copies a region of pixels from one image to another, using a specified
           * blend mode to do the operation.
           *
           * @method blend
           * @param  {p5.Image} srcImage source image
           * @param  {Integer} sx X coordinate of the source's upper left corner
           * @param  {Integer} sy Y coordinate of the source's upper left corner
           * @param  {Integer} sw source image width
           * @param  {Integer} sh source image height
           * @param  {Integer} dx X coordinate of the destination's upper left corner
           * @param  {Integer} dy Y coordinate of the destination's upper left corner
           * @param  {Integer} dw destination image width
           * @param  {Integer} dh destination image height
           * @param  {Constant} blendMode the blend mode. either
           *     BLEND, DARKEST, LIGHTEST, DIFFERENCE,
           *     MULTIPLY, EXCLUSION, SCREEN, REPLACE, OVERLAY, HARD_LIGHT,
           *     SOFT_LIGHT, DODGE, BURN, ADD or NORMAL.
           *
           * Available blend modes are: normal | multiply | screen | overlay |
           *            darken | lighten | color-dodge | color-burn | hard-light |
           *            soft-light | difference | exclusion | hue | saturation |
           *            color | luminosity
           *
           * http://blogs.adobe.com/webplatform/2013/01/28/blending-features-in-canvas/
           * @example
           * <div><code>
           * let mountains;
           * let bricks;
           *
           * function preload() {
           *   mountains = loadImage('assets/rockies.jpg');
           *   bricks = loadImage('assets/bricks_third.jpg');
           * }
           *
           * function setup() {
           *   mountains.blend(bricks, 0, 0, 33, 100, 67, 0, 33, 100, ADD);
           *   image(mountains, 0, 0);
           *   image(bricks, 0, 0);
           * }
           * </code></div>
           * <div><code>
           * let mountains;
           * let bricks;
           *
           * function preload() {
           *   mountains = loadImage('assets/rockies.jpg');
           *   bricks = loadImage('assets/bricks_third.jpg');
           * }
           *
           * function setup() {
           *   mountains.blend(bricks, 0, 0, 33, 100, 67, 0, 33, 100, DARKEST);
           *   image(mountains, 0, 0);
           *   image(bricks, 0, 0);
           * }
           * </code></div>
           * <div><code>
           * let mountains;
           * let bricks;
           *
           * function preload() {
           *   mountains = loadImage('assets/rockies.jpg');
           *   bricks = loadImage('assets/bricks_third.jpg');
           * }
           *
           * function setup() {
           *   mountains.blend(bricks, 0, 0, 33, 100, 67, 0, 33, 100, LIGHTEST);
           *   image(mountains, 0, 0);
           *   image(bricks, 0, 0);
           * }
           * </code></div>
           *
           * @alt
           * image of rocky mountains. Brick images on left and right. Right overexposed
           * image of rockies. Brickwall images on left and right. Right mortar transparent
           * image of rockies. Brickwall images on left and right. Right translucent
           */
          /**
           * @method blend
           * @param  {Integer} sx
           * @param  {Integer} sy
           * @param  {Integer} sw
           * @param  {Integer} sh
           * @param  {Integer} dx
           * @param  {Integer} dy
           * @param  {Integer} dw
           * @param  {Integer} dh
           * @param  {Constant} blendMode
           */ cov_2qks0q05q8.s[105]++;
          _main.default.Image.prototype.blend = function() {
            for (
              var _len2 = arguments.length, args = new Array(_len2), _key2 = 0;
              _key2 < _len2;
              _key2++
            ) {
              args[_key2] = arguments[_key2];
            }
            cov_2qks0q05q8.f[12]++;
            cov_2qks0q05q8.s[106]++;
            _main.default._validateParameters('p5.Image.blend', arguments);
            cov_2qks0q05q8.s[107]++;
            _main.default.prototype.blend.apply(this, args);
            cov_2qks0q05q8.s[108]++;
            this.setModified(true);
          };

          /**
           * helper method for web GL mode to indicate that an image has been
           * changed or unchanged since last upload. gl texture upload will
           * set this value to false after uploading the texture.
           * @method setModified
           * @param {boolean} val sets whether or not the image has been
           * modified.
           * @private
           */ cov_2qks0q05q8.s[109]++;
          _main.default.Image.prototype.setModified = function(val) {
            cov_2qks0q05q8.f[13]++;
            cov_2qks0q05q8.s[110]++;
            this._modified = val; //enforce boolean?
          };

          /**
           * helper method for web GL mode to figure out if the image
           * has been modified and might need to be re-uploaded to texture
           * memory between frames.
           * @method isModified
           * @private
           * @return {boolean} a boolean indicating whether or not the
           * image has been updated or modified since last texture upload.
           */ cov_2qks0q05q8.s[111]++;
          _main.default.Image.prototype.isModified = function() {
            cov_2qks0q05q8.f[14]++;
            cov_2qks0q05q8.s[112]++;
            return this._modified;
          };

          /**
           * Saves the image to a file and force the browser to download it.
           * Accepts two strings for filename and file extension
           * Supports png (default), jpg, and gif
           *<br><br>
           * Note that the file will only be downloaded as an animated GIF
           * if the p5.Image was loaded from a GIF file.
           * @method save
           * @param {String} filename give your file a name
           * @param  {String} extension 'png' or 'jpg'
           * @example
           * <div><code>
           * let photo;
           *
           * function preload() {
           *   photo = loadImage('assets/rockies.jpg');
           * }
           *
           * function draw() {
           *   image(photo, 0, 0);
           * }
           *
           * function keyTyped() {
           *   if (key === 's') {
           *     photo.save('photo', 'png');
           *   }
           * }
           * </code></div>
           *
           * @alt
           * image of rocky mountains.
           */ cov_2qks0q05q8.s[113]++;
          _main.default.Image.prototype.save = function(filename, extension) {
            cov_2qks0q05q8.f[15]++;
            cov_2qks0q05q8.s[114]++;
            if (this.gifProperties) {
              cov_2qks0q05q8.b[13][0]++;
              cov_2qks0q05q8.s[115]++;
              _main.default.prototype.saveGif(this, filename);
            } else {
              cov_2qks0q05q8.b[13][1]++;
              cov_2qks0q05q8.s[116]++;
              _main.default.prototype.saveCanvas(this.canvas, filename, extension);
            }
          };

          // GIF Section
          /**
           * Starts an animated GIF over at the beginning state.
           *
           * @method reset
           * @example
           * <div><code>
           * let gif;
           *
           * function preload() {
           *   gif = loadImage('assets/arnott-wallace-wink-loop-once.gif');
           * }
           *
           * function draw() {
           *   background(255);
           *   // The GIF file that we loaded only loops once
           *   // so it freezes on the last frame after playing through
           *   image(gif, 0, 0);
           * }
           *
           * function mousePressed() {
           *   // Click to reset the GIF and begin playback from start
           *   gif.reset();
           * }
           * </code></div>
           * @alt
           * Animated image of a cartoon face that winks once and then freezes
           * When you click it animates again, winks once and freezes
           */ cov_2qks0q05q8.s[117]++;
          _main.default.Image.prototype.reset = function() {
            cov_2qks0q05q8.f[16]++;
            cov_2qks0q05q8.s[118]++;
            if (this.gifProperties) {
              cov_2qks0q05q8.b[14][0]++;
              var props = (cov_2qks0q05q8.s[119]++, this.gifProperties);
              cov_2qks0q05q8.s[120]++;
              props.playing = true;
              cov_2qks0q05q8.s[121]++;
              props.timeSinceStart = 0;
              cov_2qks0q05q8.s[122]++;
              props.timeDisplayed = 0;
              cov_2qks0q05q8.s[123]++;
              props.lastChangeTime = 0;
              cov_2qks0q05q8.s[124]++;
              props.loopCount = 0;
              cov_2qks0q05q8.s[125]++;
              props.displayIndex = 0;
              cov_2qks0q05q8.s[126]++;
              this.drawingContext.putImageData(props.frames[0].image, 0, 0);
            } else {
              cov_2qks0q05q8.b[14][1]++;
            }
          };

          /**
           * Gets the index for the frame that is currently visible in an animated GIF.
           *
           * @method getCurrentFrame
           * @return {Number}       The index for the currently displaying frame in animated GIF
           * @example
           * <div><code>
           * let gif;
           *
           * function preload() {
           *   gif = loadImage('assets/arnott-wallace-eye-loop-forever.gif');
           * }
           *
           * function draw() {
           *   let frame = gif.getCurrentFrame();
           *   image(gif, 0, 0);
           *   text(frame, 10, 90);
           * }
           * </code></div>
           * @alt
           * Animated image of a cartoon eye looking around and then
           * looking outwards, in the lower-left hand corner a number counts
           * up quickly to 124 and then starts back over at 0
           */ cov_2qks0q05q8.s[127]++;
          _main.default.Image.prototype.getCurrentFrame = function() {
            cov_2qks0q05q8.f[17]++;
            cov_2qks0q05q8.s[128]++;
            if (this.gifProperties) {
              cov_2qks0q05q8.b[15][0]++;
              var props = (cov_2qks0q05q8.s[129]++, this.gifProperties);
              cov_2qks0q05q8.s[130]++;
              return props.displayIndex % props.numFrames;
            } else {
              cov_2qks0q05q8.b[15][1]++;
            }
          };

          /**
           * Sets the index of the frame that is currently visible in an animated GIF
           *
           * @method setFrame
           * @param {Number}       index the index for the frame that should be displayed
           * @example
           * <div><code>
           * let gif;
           *
           * function preload() {
           *   gif = loadImage('assets/arnott-wallace-eye-loop-forever.gif');
           * }
           *
           * // Move your mouse up and down over canvas to see the GIF
           * // frames animate
           * function draw() {
           *   gif.pause();
           *   image(gif, 0, 0);
           *   // Get the highest frame number which is the number of frames - 1
           *   let maxFrame = gif.numFrames() - 1;
           *   // Set the current frame that is mapped to be relative to mouse position
           *   let frameNumber = floor(map(mouseY, 0, height, 0, maxFrame, true));
           *   gif.setFrame(frameNumber);
           * }
           * </code></div>
           * @alt
           * A still image of a cartoon eye that looks around when you move your mouse
           * up and down over the canvas
           */ cov_2qks0q05q8.s[131]++;
          _main.default.Image.prototype.setFrame = function(index) {
            cov_2qks0q05q8.f[18]++;
            cov_2qks0q05q8.s[132]++;
            if (this.gifProperties) {
              cov_2qks0q05q8.b[16][0]++;
              var props = (cov_2qks0q05q8.s[133]++, this.gifProperties);
              cov_2qks0q05q8.s[134]++;
              if (
                (cov_2qks0q05q8.b[18][0]++, index < props.numFrames) &&
                (cov_2qks0q05q8.b[18][1]++, index >= 0)
              ) {
                cov_2qks0q05q8.b[17][0]++;
                cov_2qks0q05q8.s[135]++;
                props.timeDisplayed = 0;
                cov_2qks0q05q8.s[136]++;
                props.lastChangeTime = 0;
                cov_2qks0q05q8.s[137]++;
                props.displayIndex = index;
                cov_2qks0q05q8.s[138]++;
                this.drawingContext.putImageData(props.frames[index].image, 0, 0);
              } else {
                cov_2qks0q05q8.b[17][1]++;
                cov_2qks0q05q8.s[139]++;
                console.log(
                  'Cannot set GIF to a frame number that is higher than total number of frames or below zero.'
                );
              }
            } else {
              cov_2qks0q05q8.b[16][1]++;
            }
          };

          /**
           * Returns the number of frames in an animated GIF
           *
           * @method numFrames
           * @return {Number}
           * @example     The number of frames in the animated GIF
           * <div><code>
           * let gif;
           *
           * function preload() {
           *   gif = loadImage('assets/arnott-wallace-eye-loop-forever.gif');
           * }
           *
           * // Move your mouse up and down over canvas to see the GIF
           * // frames animate
           * function draw() {
           *   gif.pause();
           *   image(gif, 0, 0);
           *   // Get the highest frame number which is the number of frames - 1
           *   let maxFrame = gif.numFrames() - 1;
           *   // Set the current frame that is mapped to be relative to mouse position
           *   let frameNumber = floor(map(mouseY, 0, height, 0, maxFrame, true));
           *   gif.setFrame(frameNumber);
           * }
           * </code></div>
           * @alt
           * A still image of a cartoon eye that looks around when you move your mouse
           * up and down over the canvas
           */ cov_2qks0q05q8.s[140]++;
          _main.default.Image.prototype.numFrames = function() {
            cov_2qks0q05q8.f[19]++;
            cov_2qks0q05q8.s[141]++;
            if (this.gifProperties) {
              cov_2qks0q05q8.b[19][0]++;
              cov_2qks0q05q8.s[142]++;
              return this.gifProperties.numFrames;
            } else {
              cov_2qks0q05q8.b[19][1]++;
            }
          };

          /**
           * Plays an animated GIF that was paused with
           * <a href="#/p5.Image/pause">pause()</a>
           *
           * @method play
           * @example
           * <div><code>
           * let gif;
           *
           * function preload() {
           *   gif = loadImage('assets/nancy-liang-wind-loop-forever.gif');
           * }
           *
           * function draw() {
           *   background(255);
           *   image(gif, 0, 0);
           * }
           *
           * function mousePressed() {
           *   gif.pause();
           * }
           *
           * function mouseReleased() {
           *   gif.play();
           * }
           * </code></div>
           * @alt
           * An animated GIF of a drawing of small child with
           * hair blowing in the wind, when you click the image
           * freezes when you release it animates again
           */ cov_2qks0q05q8.s[143]++;
          _main.default.Image.prototype.play = function() {
            cov_2qks0q05q8.f[20]++;
            cov_2qks0q05q8.s[144]++;
            if (this.gifProperties) {
              cov_2qks0q05q8.b[20][0]++;
              cov_2qks0q05q8.s[145]++;
              this.gifProperties.playing = true;
            } else {
              cov_2qks0q05q8.b[20][1]++;
            }
          };

          /**
           * Pauses an animated GIF.
           *
           * @method pause
           * @example
           * <div><code>
           * let gif;
           *
           * function preload() {
           *   gif = loadImage('assets/nancy-liang-wind-loop-forever.gif');
           * }
           *
           * function draw() {
           *   background(255);
           *   image(gif, 0, 0);
           * }
           *
           * function mousePressed() {
           *   gif.pause();
           * }
           *
           * function mouseReleased() {
           *   gif.play();
           * }
           * </code></div>
           * @alt
           * An animated GIF of a drawing of small child with
           * hair blowing in the wind, when you click the image
           * freezes when you release it animates again
           */ cov_2qks0q05q8.s[146]++;
          _main.default.Image.prototype.pause = function() {
            cov_2qks0q05q8.f[21]++;
            cov_2qks0q05q8.s[147]++;
            if (this.gifProperties) {
              cov_2qks0q05q8.b[21][0]++;
              cov_2qks0q05q8.s[148]++;
              this.gifProperties.playing = false;
            } else {
              cov_2qks0q05q8.b[21][1]++;
            }
          };

          /**
           * Changes the delay between frames in an animated GIF. There is an optional second parameter that
           * indicates an index for a specific frame that should have its delay modified. If no index is given, all frames
           * will have the new delay.
           *
           * @method delay
           * @param {Number}    d the amount in milliseconds to delay between switching frames
           * @param {Number}    [index] the index of the frame that should have the new delay value {optional}
           * @example
           * <div><code>
           * let gifFast, gifSlow;
           *
           * function preload() {
           *   gifFast = loadImage('assets/arnott-wallace-eye-loop-forever.gif');
           *   gifSlow = loadImage('assets/arnott-wallace-eye-loop-forever.gif');
           * }
           *
           * function setup() {
           *   gifFast.resize(width / 2, height / 2);
           *   gifSlow.resize(width / 2, height / 2);
           *
           *   //Change the delay here
           *   gifFast.delay(10);
           *   gifSlow.delay(100);
           * }
           *
           * function draw() {
           *   background(255);
           *   image(gifFast, 0, 0);
           *   image(gifSlow, width / 2, 0);
           * }
           * </code></div>
           * @alt
           * Two animated gifs of cartoon eyes looking around
           * The gif on the left animates quickly, on the right
           * the animation is much slower
           */ cov_2qks0q05q8.s[149]++;
          _main.default.Image.prototype.delay = function(d, index) {
            cov_2qks0q05q8.f[22]++;
            cov_2qks0q05q8.s[150]++;
            if (this.gifProperties) {
              cov_2qks0q05q8.b[22][0]++;
              var props = (cov_2qks0q05q8.s[151]++, this.gifProperties);
              cov_2qks0q05q8.s[152]++;
              if (
                (cov_2qks0q05q8.b[24][0]++, index < props.numFrames) &&
                (cov_2qks0q05q8.b[24][1]++, index >= 0)
              ) {
                cov_2qks0q05q8.b[23][0]++;
                cov_2qks0q05q8.s[153]++;
                props.frames[index].delay = d;
              } else {
                cov_2qks0q05q8.b[23][1]++;
                cov_2qks0q05q8.s[154]++;
                // change all frames
                var _iteratorNormalCompletion = true;
                var _didIteratorError = false;
                var _iteratorError = undefined;
                try {
                  for (
                    var _iterator = props.frames[Symbol.iterator](), _step;
                    !(_iteratorNormalCompletion = (_step = _iterator.next()).done);
                    _iteratorNormalCompletion = true
                  ) {
                    var frame = _step.value;
                    cov_2qks0q05q8.s[155]++;
                    frame.delay = d;
                  }
                } catch (err) {
                  _didIteratorError = true;
                  _iteratorError = err;
                } finally {
                  try {
                    if (!_iteratorNormalCompletion && _iterator.return != null) {
                      _iterator.return();
                    }
                  } finally {
                    if (_didIteratorError) {
                      throw _iteratorError;
                    }
                  }
                }
              }
            } else {
              cov_2qks0q05q8.b[22][1]++;
            }
          };
          var _default = _main.default.Image;
          exports.default = _default;
        },
        {
          '../core/main': 283,
          './filters': 304,
          'core-js/modules/es.array.filter': 169,
          'core-js/modules/es.array.iterator': 174,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.string.iterator': 201,
          'core-js/modules/es.symbol': 211,
          'core-js/modules/es.symbol.description': 209,
          'core-js/modules/es.symbol.iterator': 210,
          'core-js/modules/web.dom-collections.iterator': 244
        }
      ],
      308: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_201an2rxi6 = (function() {
            var path = '/Users/outofambit/src/p5.js/src/image/pixels.js';
            var hash = 'de057b63f54b84c063b7258dc5a7a66ecfc2fceb';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/image/pixels.js',
              statementMap: {
                '0': { start: { line: 78, column: 0 }, end: { line: 78, column: 25 } },
                '1': { start: { line: 164, column: 0 }, end: { line: 171, column: 2 } },
                '2': { start: { line: 165, column: 2 }, end: { line: 165, column: 40 } },
                '3': { start: { line: 166, column: 2 }, end: { line: 170, column: 3 } },
                '4': { start: { line: 167, column: 4 }, end: { line: 167, column: 34 } },
                '5': { start: { line: 169, column: 4 }, end: { line: 169, column: 52 } },
                '6': { start: { line: 226, column: 0 }, end: { line: 255, column: 2 } },
                '7': { start: { line: 227, column: 2 }, end: { line: 227, column: 39 } },
                '8': { start: { line: 230, column: 2 }, end: { line: 252, column: 3 } },
                '9': { start: { line: 231, column: 4 }, end: { line: 231, column: 23 } },
                '10': { start: { line: 232, column: 4 }, end: { line: 232, column: 17 } },
                '11': { start: { line: 233, column: 4 }, end: { line: 233, column: 17 } },
                '12': { start: { line: 234, column: 4 }, end: { line: 234, column: 17 } },
                '13': { start: { line: 235, column: 4 }, end: { line: 235, column: 17 } },
                '14': { start: { line: 236, column: 4 }, end: { line: 236, column: 17 } },
                '15': { start: { line: 237, column: 4 }, end: { line: 237, column: 17 } },
                '16': { start: { line: 238, column: 4 }, end: { line: 238, column: 17 } },
                '17': { start: { line: 239, column: 4 }, end: { line: 239, column: 17 } },
                '18': { start: { line: 240, column: 9 }, end: { line: 252, column: 3 } },
                '19': { start: { line: 241, column: 4 }, end: { line: 241, column: 20 } },
                '20': { start: { line: 242, column: 4 }, end: { line: 242, column: 17 } },
                '21': { start: { line: 243, column: 4 }, end: { line: 243, column: 17 } },
                '22': { start: { line: 244, column: 4 }, end: { line: 244, column: 17 } },
                '23': { start: { line: 245, column: 4 }, end: { line: 245, column: 17 } },
                '24': { start: { line: 246, column: 4 }, end: { line: 246, column: 17 } },
                '25': { start: { line: 247, column: 4 }, end: { line: 247, column: 17 } },
                '26': { start: { line: 248, column: 4 }, end: { line: 248, column: 17 } },
                '27': { start: { line: 249, column: 4 }, end: { line: 249, column: 17 } },
                '28': { start: { line: 251, column: 4 }, end: { line: 251, column: 47 } },
                '29': { start: { line: 254, column: 2 }, end: { line: 254, column: 75 } },
                '30': { start: { line: 257, column: 0 }, end: { line: 305, column: 2 } },
                '31': { start: { line: 269, column: 2 }, end: { line: 269, column: 24 } },
                '32': { start: { line: 270, column: 12 }, end: { line: 270, column: 50 } },
                '33': { start: { line: 273, column: 14 }, end: { line: 273, column: 15 } },
                '34': { start: { line: 274, column: 14 }, end: { line: 274, column: 15 } },
                '35': { start: { line: 275, column: 2 }, end: { line: 278, column: 3 } },
                '36': { start: { line: 276, column: 4 }, end: { line: 276, column: 31 } },
                '37': { start: { line: 277, column: 4 }, end: { line: 277, column: 32 } },
                '38': { start: { line: 279, column: 2 }, end: { line: 304, column: 3 } },
                '39': { start: { line: 280, column: 4 }, end: { line: 291, column: 6 } },
                '40': { start: { line: 293, column: 4 }, end: { line: 303, column: 6 } },
                '41': { start: { line: 472, column: 0 }, end: { line: 479, column: 2 } },
                '42': { start: { line: 473, column: 2 }, end: { line: 473, column: 46 } },
                '43': { start: { line: 474, column: 2 }, end: { line: 478, column: 3 } },
                '44': { start: { line: 475, column: 4 }, end: { line: 475, column: 58 } },
                '45': { start: { line: 477, column: 4 }, end: { line: 477, column: 55 } },
                '46': { start: { line: 561, column: 0 }, end: { line: 564, column: 2 } },
                '47': { start: { line: 562, column: 2 }, end: { line: 562, column: 43 } },
                '48': { start: { line: 563, column: 2 }, end: { line: 563, column: 42 } },
                '49': { start: { line: 597, column: 0 }, end: { line: 600, column: 2 } },
                '50': { start: { line: 598, column: 2 }, end: { line: 598, column: 45 } },
                '51': { start: { line: 599, column: 2 }, end: { line: 599, column: 30 } },
                '52': { start: { line: 671, column: 0 }, end: { line: 673, column: 2 } },
                '53': { start: { line: 672, column: 2 }, end: { line: 672, column: 37 } },
                '54': { start: { line: 712, column: 0 }, end: { line: 720, column: 2 } },
                '55': { start: { line: 713, column: 2 }, end: { line: 713, column: 52 } },
                '56': { start: { line: 716, column: 2 }, end: { line: 718, column: 3 } },
                '57': { start: { line: 717, column: 4 }, end: { line: 717, column: 11 } },
                '58': { start: { line: 719, column: 2 }, end: { line: 719, column: 42 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: {
                    start: { line: 164, column: 21 },
                    end: { line: 164, column: 22 }
                  },
                  loc: { start: { line: 164, column: 39 }, end: { line: 171, column: 1 } },
                  line: 164
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: {
                    start: { line: 226, column: 20 },
                    end: { line: 226, column: 21 }
                  },
                  loc: { start: { line: 226, column: 38 }, end: { line: 255, column: 1 } },
                  line: 226
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 257, column: 27 },
                    end: { line: 257, column: 28 }
                  },
                  loc: { start: { line: 268, column: 5 }, end: { line: 305, column: 1 } },
                  line: 268
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 472, column: 22 },
                    end: { line: 472, column: 23 }
                  },
                  loc: { start: { line: 472, column: 49 }, end: { line: 479, column: 1 } },
                  line: 472
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 561, column: 19 },
                    end: { line: 561, column: 20 }
                  },
                  loc: { start: { line: 561, column: 40 }, end: { line: 564, column: 1 } },
                  line: 561
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 597, column: 26 },
                    end: { line: 597, column: 27 }
                  },
                  loc: { start: { line: 597, column: 44 }, end: { line: 600, column: 1 } },
                  line: 597
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 671, column: 19 },
                    end: { line: 671, column: 20 }
                  },
                  loc: { start: { line: 671, column: 44 }, end: { line: 673, column: 1 } },
                  line: 671
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 712, column: 28 },
                    end: { line: 712, column: 29 }
                  },
                  loc: { start: { line: 712, column: 49 }, end: { line: 720, column: 1 } },
                  line: 712
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 166, column: 2 }, end: { line: 170, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 166, column: 2 }, end: { line: 170, column: 3 } },
                    { start: { line: 166, column: 2 }, end: { line: 170, column: 3 } }
                  ],
                  line: 166
                },
                '1': {
                  loc: { start: { line: 230, column: 2 }, end: { line: 252, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 230, column: 2 }, end: { line: 252, column: 3 } },
                    { start: { line: 230, column: 2 }, end: { line: 252, column: 3 } }
                  ],
                  line: 230
                },
                '2': {
                  loc: { start: { line: 240, column: 9 }, end: { line: 252, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 240, column: 9 }, end: { line: 252, column: 3 } },
                    { start: { line: 240, column: 9 }, end: { line: 252, column: 3 } }
                  ],
                  line: 240
                },
                '3': {
                  loc: { start: { line: 275, column: 2 }, end: { line: 278, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 275, column: 2 }, end: { line: 278, column: 3 } },
                    { start: { line: 275, column: 2 }, end: { line: 278, column: 3 } }
                  ],
                  line: 275
                },
                '4': {
                  loc: { start: { line: 275, column: 6 }, end: { line: 275, column: 52 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 275, column: 6 }, end: { line: 275, column: 24 } },
                    { start: { line: 275, column: 28 }, end: { line: 275, column: 52 } }
                  ],
                  line: 275
                },
                '5': {
                  loc: { start: { line: 279, column: 2 }, end: { line: 304, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 279, column: 2 }, end: { line: 304, column: 3 } },
                    { start: { line: 279, column: 2 }, end: { line: 304, column: 3 } }
                  ],
                  line: 279
                },
                '6': {
                  loc: { start: { line: 279, column: 6 }, end: { line: 279, column: 52 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 279, column: 6 }, end: { line: 279, column: 24 } },
                    { start: { line: 279, column: 28 }, end: { line: 279, column: 52 } }
                  ],
                  line: 279
                },
                '7': {
                  loc: { start: { line: 474, column: 2 }, end: { line: 478, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 474, column: 2 }, end: { line: 478, column: 3 } },
                    { start: { line: 474, column: 2 }, end: { line: 478, column: 3 } }
                  ],
                  line: 474
                },
                '8': {
                  loc: { start: { line: 716, column: 2 }, end: { line: 718, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 716, column: 2 }, end: { line: 718, column: 3 } },
                    { start: { line: 716, column: 2 }, end: { line: 718, column: 3 } }
                  ],
                  line: 716
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0
              },
              f: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0 },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: 'de057b63f54b84c063b7258dc5a7a66ecfc2fceb'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.filter');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          var _filters = _interopRequireDefault(_dereq_('./filters'));
          _dereq_('../color/p5.Color');
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_201an2rxi6.s[0]++;

          /**
           * <a href='https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference
           * /Global_Objects/Uint8ClampedArray' target='_blank'>Uint8ClampedArray</a>
           * containing the values for all the pixels in the display window.
           * These values are numbers. This array is the size (include an appropriate
           * factor for <a href="#/p5/pixelDensity">pixelDensity</a>) of the display window x4,
           * representing the R, G, B, A values in order for each pixel, moving from
           * left to right across each row, then down each column. Retina and other
           * high density displays will have more pixels[] (by a factor of
           * pixelDensity^2).
           * For example, if the image is 100x100 pixels, there will be 40,000. On a
           * retina display, there will be 160,000.
           *
           * The first four values (indices 0-3) in the array will be the R, G, B, A
           * values of the pixel at (0, 0). The second four values (indices 4-7) will
           * contain the R, G, B, A values of the pixel at (1, 0). More generally, to
           * set values for a pixel at (x, y):
           * ```javascript
           * let d = pixelDensity();
           * for (let i = 0; i < d; i++) {
           *   for (let j = 0; j < d; j++) {
           *     // loop over
           *     index = 4 * ((y * d + j) * width * d + (x * d + i));
           *     pixels[index] = r;
           *     pixels[index+1] = g;
           *     pixels[index+2] = b;
           *     pixels[index+3] = a;
           *   }
           * }
           * ```
           * While the above method is complex, it is flexible enough to work with
           * any pixelDensity. Note that <a href="#/p5/set">set()</a> will automatically take care of
           * setting all the appropriate values in <a href="#/p5/pixels">pixels[]</a> for a given (x, y) at
           * any pixelDensity, but the performance may not be as fast when lots of
           * modifications are made to the pixel array.
           *
           * Before accessing this array, the data must loaded with the <a href="#/p5/loadPixels">loadPixels()</a>
           * function. After the array data has been modified, the <a href="#/p5/updatePixels">updatePixels()</a>
           * function must be run to update the changes.
           *
           * Note that this is not a standard javascript array.  This means that
           * standard javascript functions such as <a href="#/p5/slice">slice()</a> or
           * <a href="#/p5/arrayCopy">arrayCopy()</a> do not
           * work.
           *
           * @property {Number[]} pixels
           * @example
           * <div>
           * <code>
           * let pink = color(255, 102, 204);
           * loadPixels();
           * let d = pixelDensity();
           * let halfImage = 4 * (width * d) * (height / 2 * d);
           * for (let i = 0; i < halfImage; i += 4) {
           *   pixels[i] = red(pink);
           *   pixels[i + 1] = green(pink);
           *   pixels[i + 2] = blue(pink);
           *   pixels[i + 3] = alpha(pink);
           * }
           * updatePixels();
           * </code>
           * </div>
           *
           * @alt
           * top half of canvas pink, bottom grey
           */
          _main.default.prototype.pixels = [];

          /**
           * Copies a region of pixels from one image to another, using a specified
           * blend mode to do the operation.
           *
           * @method blend
           * @param  {p5.Image} srcImage source image
           * @param  {Integer} sx X coordinate of the source's upper left corner
           * @param  {Integer} sy Y coordinate of the source's upper left corner
           * @param  {Integer} sw source image width
           * @param  {Integer} sh source image height
           * @param  {Integer} dx X coordinate of the destination's upper left corner
           * @param  {Integer} dy Y coordinate of the destination's upper left corner
           * @param  {Integer} dw destination image width
           * @param  {Integer} dh destination image height
           * @param  {Constant} blendMode the blend mode. either
           *     BLEND, DARKEST, LIGHTEST, DIFFERENCE,
           *     MULTIPLY, EXCLUSION, SCREEN, REPLACE, OVERLAY, HARD_LIGHT,
           *     SOFT_LIGHT, DODGE, BURN, ADD or NORMAL.
           *
           * @example
           * <div><code>
           * let img0;
           * let img1;
           *
           * function preload() {
           *   img0 = loadImage('assets/rockies.jpg');
           *   img1 = loadImage('assets/bricks_third.jpg');
           * }
           *
           * function setup() {
           *   background(img0);
           *   image(img1, 0, 0);
           *   blend(img1, 0, 0, 33, 100, 67, 0, 33, 100, LIGHTEST);
           * }
           * </code></div>
           * <div><code>
           * let img0;
           * let img1;
           *
           * function preload() {
           *   img0 = loadImage('assets/rockies.jpg');
           *   img1 = loadImage('assets/bricks_third.jpg');
           * }
           *
           * function setup() {
           *   background(img0);
           *   image(img1, 0, 0);
           *   blend(img1, 0, 0, 33, 100, 67, 0, 33, 100, DARKEST);
           * }
           * </code></div>
           * <div><code>
           * let img0;
           * let img1;
           *
           * function preload() {
           *   img0 = loadImage('assets/rockies.jpg');
           *   img1 = loadImage('assets/bricks_third.jpg');
           * }
           *
           * function setup() {
           *   background(img0);
           *   image(img1, 0, 0);
           *   blend(img1, 0, 0, 33, 100, 67, 0, 33, 100, ADD);
           * }
           * </code></div>
           *
           * @alt
           * image of rocky mountains. Brick images on left and right. Right overexposed
           * image of rockies. Brickwall images on left and right. Right mortar transparent
           * image of rockies. Brickwall images on left and right. Right translucent
           *
           */
          /**
           * @method blend
           * @param  {Integer} sx
           * @param  {Integer} sy
           * @param  {Integer} sw
           * @param  {Integer} sh
           * @param  {Integer} dx
           * @param  {Integer} dy
           * @param  {Integer} dw
           * @param  {Integer} dh
           * @param  {Constant} blendMode
           */ cov_201an2rxi6.s[1]++;
          _main.default.prototype.blend = function() {
            cov_201an2rxi6.f[0]++;
            cov_201an2rxi6.s[2]++;
            for (
              var _len = arguments.length, args = new Array(_len), _key = 0;
              _key < _len;
              _key++
            ) {
              args[_key] = arguments[_key];
            }
            _main.default._validateParameters('blend', args);
            cov_201an2rxi6.s[3]++;
            if (this._renderer) {
              var _this$_renderer;
              cov_201an2rxi6.b[0][0]++;
              cov_201an2rxi6.s[4]++;
              (_this$_renderer = this._renderer).blend.apply(_this$_renderer, args);
            } else {
              cov_201an2rxi6.b[0][1]++;
              cov_201an2rxi6.s[5]++;
              _main.default.Renderer2D.prototype.blend.apply(this, args);
            }
          };

          /**
           * Copies a region of the canvas to another region of the canvas
           * and copies a region of pixels from an image used as the srcImg parameter
           * into the canvas srcImage is specified this is used as the source. If
           * the source and destination regions aren't the same size, it will
           * automatically resize source pixels to fit the specified
           * target region.
           *
           * @method copy
           * @param  {p5.Image|p5.Element} srcImage source image
           * @param  {Integer} sx X coordinate of the source's upper left corner
           * @param  {Integer} sy Y coordinate of the source's upper left corner
           * @param  {Integer} sw source image width
           * @param  {Integer} sh source image height
           * @param  {Integer} dx X coordinate of the destination's upper left corner
           * @param  {Integer} dy Y coordinate of the destination's upper left corner
           * @param  {Integer} dw destination image width
           * @param  {Integer} dh destination image height
           *
           * @example
           * <div><code>
           * let img;
           *
           * function preload() {
           *   img = loadImage('assets/rockies.jpg');
           * }
           *
           * function setup() {
           *   background(img);
           *   copy(img, 7, 22, 10, 10, 35, 25, 50, 50);
           *   stroke(255);
           *   noFill();
           *   // Rectangle shows area being copied
           *   rect(7, 22, 10, 10);
           * }
           * </code></div>
           *
           * @alt
           * image of rocky mountains. Brick images on left and right. Right overexposed
           * image of rockies. Brickwall images on left and right. Right mortar transparent
           * image of rockies. Brickwall images on left and right. Right translucent
           */
          /**
           * @method copy
           * @param  {Integer} sx
           * @param  {Integer} sy
           * @param  {Integer} sw
           * @param  {Integer} sh
           * @param  {Integer} dx
           * @param  {Integer} dy
           * @param  {Integer} dw
           * @param  {Integer} dh
           */ cov_201an2rxi6.s[6]++;
          _main.default.prototype.copy = function() {
            cov_201an2rxi6.f[1]++;
            cov_201an2rxi6.s[7]++;
            for (
              var _len2 = arguments.length, args = new Array(_len2), _key2 = 0;
              _key2 < _len2;
              _key2++
            ) {
              args[_key2] = arguments[_key2];
            }
            _main.default._validateParameters('copy', args);

            var srcImage, sx, sy, sw, sh, dx, dy, dw, dh;
            cov_201an2rxi6.s[8]++;
            if (args.length === 9) {
              cov_201an2rxi6.b[1][0]++;
              cov_201an2rxi6.s[9]++;
              srcImage = args[0];
              cov_201an2rxi6.s[10]++;
              sx = args[1];
              cov_201an2rxi6.s[11]++;
              sy = args[2];
              cov_201an2rxi6.s[12]++;
              sw = args[3];
              cov_201an2rxi6.s[13]++;
              sh = args[4];
              cov_201an2rxi6.s[14]++;
              dx = args[5];
              cov_201an2rxi6.s[15]++;
              dy = args[6];
              cov_201an2rxi6.s[16]++;
              dw = args[7];
              cov_201an2rxi6.s[17]++;
              dh = args[8];
            } else {
              cov_201an2rxi6.b[1][1]++;
              cov_201an2rxi6.s[18]++;
              if (args.length === 8) {
                cov_201an2rxi6.b[2][0]++;
                cov_201an2rxi6.s[19]++;
                srcImage = this;
                cov_201an2rxi6.s[20]++;
                sx = args[0];
                cov_201an2rxi6.s[21]++;
                sy = args[1];
                cov_201an2rxi6.s[22]++;
                sw = args[2];
                cov_201an2rxi6.s[23]++;
                sh = args[3];
                cov_201an2rxi6.s[24]++;
                dx = args[4];
                cov_201an2rxi6.s[25]++;
                dy = args[5];
                cov_201an2rxi6.s[26]++;
                dw = args[6];
                cov_201an2rxi6.s[27]++;
                dh = args[7];
              } else {
                cov_201an2rxi6.b[2][1]++;
                cov_201an2rxi6.s[28]++;
                throw new Error('Signature not supported');
              }
            }
            cov_201an2rxi6.s[29]++;

            _main.default.prototype._copyHelper(
              this,
              srcImage,
              sx,
              sy,
              sw,
              sh,
              dx,
              dy,
              dw,
              dh
            );
          };
          cov_201an2rxi6.s[30]++;

          _main.default.prototype._copyHelper = function(
            dstImage,
            srcImage,
            sx,
            sy,
            sw,
            sh,
            dx,
            dy,
            dw,
            dh
          ) {
            cov_201an2rxi6.f[2]++;
            cov_201an2rxi6.s[31]++;
            srcImage.loadPixels();
            var s = (cov_201an2rxi6.s[32]++, srcImage.canvas.width / srcImage.width);
            // adjust coord system for 3D when renderer
            // ie top-left = -width/2, -height/2
            var sxMod = (cov_201an2rxi6.s[33]++, 0);
            var syMod = (cov_201an2rxi6.s[34]++, 0);
            cov_201an2rxi6.s[35]++;
            if (
              (cov_201an2rxi6.b[4][0]++, srcImage._renderer) &&
              (cov_201an2rxi6.b[4][1]++, srcImage._renderer.isP3D)
            ) {
              cov_201an2rxi6.b[3][0]++;
              cov_201an2rxi6.s[36]++;
              sxMod = srcImage.width / 2;
              cov_201an2rxi6.s[37]++;
              syMod = srcImage.height / 2;
            } else {
              cov_201an2rxi6.b[3][1]++;
            }
            cov_201an2rxi6.s[38]++;
            if (
              (cov_201an2rxi6.b[6][0]++, dstImage._renderer) &&
              (cov_201an2rxi6.b[6][1]++, dstImage._renderer.isP3D)
            ) {
              cov_201an2rxi6.b[5][0]++;
              cov_201an2rxi6.s[39]++;
              _main.default.RendererGL.prototype.image.call(
                dstImage._renderer,
                srcImage,
                sx + sxMod,
                sy + syMod,
                sw,
                sh,
                dx,
                dy,
                dw,
                dh
              );
            } else {
              cov_201an2rxi6.b[5][1]++;
              cov_201an2rxi6.s[40]++;
              dstImage.drawingContext.drawImage(
                srcImage.canvas,
                s * (sx + sxMod),
                s * (sy + syMod),
                s * sw,
                s * sh,
                dx,
                dy,
                dw,
                dh
              );
            }
          };

          /**
           * Applies a filter to the canvas. The presets options are:
           *
           * THRESHOLD
           * Converts the image to black and white pixels depending if they are above or
           * below the threshold defined by the level parameter. The parameter must be
           * between 0.0 (black) and 1.0 (white). If no level is specified, 0.5 is used.
           *
           * GRAY
           * Converts any colors in the image to grayscale equivalents. No parameter
           * is used.
           *
           * OPAQUE
           * Sets the alpha channel to entirely opaque. No parameter is used.
           *
           * INVERT
           * Sets each pixel to its inverse value. No parameter is used.
           *
           * POSTERIZE
           * Limits each channel of the image to the number of colors specified as the
           * parameter. The parameter can be set to values between 2 and 255, but
           * results are most noticeable in the lower ranges.
           *
           * BLUR
           * Executes a Gaussian blur with the level parameter specifying the extent
           * of the blurring. If no parameter is used, the blur is equivalent to
           * Gaussian blur of radius 1. Larger values increase the blur.
           *
           * ERODE
           * Reduces the light areas. No parameter is used.
           *
           * DILATE
           * Increases the light areas. No parameter is used.
           *
           * filter() does not work in WEBGL mode.
           * A similar effect can be achieved in WEBGL mode using custom
           * shaders. Adam Ferriss has written
           * a <a href="https://github.com/aferriss/p5jsShaderExamples"
           * target='_blank'>selection of shader examples</a> that contains many
           * of the effects present in the filter examples.
           *
           * @method filter
           * @param  {Constant} filterType  either THRESHOLD, GRAY, OPAQUE, INVERT,
           *                                POSTERIZE, BLUR, ERODE, DILATE or BLUR.
           *                                See Filters.js for docs on
           *                                each available filter
           * @param  {Number} [filterParam] an optional parameter unique
           *                                to each filter, see above
           *
           * @example
           * <div>
           * <code>
           * let img;
           * function preload() {
           *   img = loadImage('assets/bricks.jpg');
           * }
           * function setup() {
           *   image(img, 0, 0);
           *   filter(THRESHOLD);
           * }
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * let img;
           * function preload() {
           *   img = loadImage('assets/bricks.jpg');
           * }
           * function setup() {
           *   image(img, 0, 0);
           *   filter(GRAY);
           * }
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * let img;
           * function preload() {
           *   img = loadImage('assets/bricks.jpg');
           * }
           * function setup() {
           *   image(img, 0, 0);
           *   filter(OPAQUE);
           * }
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * let img;
           * function preload() {
           *   img = loadImage('assets/bricks.jpg');
           * }
           * function setup() {
           *   image(img, 0, 0);
           *   filter(INVERT);
           * }
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * let img;
           * function preload() {
           *   img = loadImage('assets/bricks.jpg');
           * }
           * function setup() {
           *   image(img, 0, 0);
           *   filter(POSTERIZE, 3);
           * }
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * let img;
           * function preload() {
           *   img = loadImage('assets/bricks.jpg');
           * }
           * function setup() {
           *   image(img, 0, 0);
           *   filter(DILATE);
           * }
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * let img;
           * function preload() {
           *   img = loadImage('assets/bricks.jpg');
           * }
           * function setup() {
           *   image(img, 0, 0);
           *   filter(BLUR, 3);
           * }
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * let img;
           * function preload() {
           *   img = loadImage('assets/bricks.jpg');
           * }
           * function setup() {
           *   image(img, 0, 0);
           *   filter(ERODE);
           * }
           * </code>
           * </div>
           *
           * @alt
           * black and white image of a brick wall.
           * greyscale image of a brickwall
           * image of a brickwall
           * jade colored image of a brickwall
           * red and pink image of a brickwall
           * image of a brickwall
           * blurry image of a brickwall
           * image of a brickwall
           * image of a brickwall with less detail
           */ cov_201an2rxi6.s[41]++;
          _main.default.prototype.filter = function(operation, value) {
            cov_201an2rxi6.f[3]++;
            cov_201an2rxi6.s[42]++;
            _main.default._validateParameters('filter', arguments);
            cov_201an2rxi6.s[43]++;
            if (this.canvas !== undefined) {
              cov_201an2rxi6.b[7][0]++;
              cov_201an2rxi6.s[44]++;
              _filters.default.apply(this.canvas, _filters.default[operation], value);
            } else {
              cov_201an2rxi6.b[7][1]++;
              cov_201an2rxi6.s[45]++;
              _filters.default.apply(this.elt, _filters.default[operation], value);
            }
          };

          /**
           * Get a region of pixels, or a single pixel, from the canvas.
           *
           * Returns an array of [R,G,B,A] values for any pixel or grabs a section of
           * an image. If no parameters are specified, the entire image is returned.
           * Use the x and y parameters to get the value of one pixel. Get a section of
           * the display window by specifying additional w and h parameters. When
           * getting an image, the x and y parameters define the coordinates for the
           * upper-left corner of the image, regardless of the current <a href="#/p5/imageMode">imageMode()</a>.
           *
           * Getting the color of a single pixel with get(x, y) is easy, but not as fast
           * as grabbing the data directly from <a href="#/p5/pixels">pixels[]</a>. The equivalent statement to
           * get(x, y) using <a href="#/p5/pixels">pixels[]</a> with pixel density d is
           * ```javascript
           * let x, y, d; // set these to the coordinates
           * let off = (y * width + x) * d * 4;
           * let components = [
           *   pixels[off],
           *   pixels[off + 1],
           *   pixels[off + 2],
           *   pixels[off + 3]
           * ];
           * print(components);
           * ```
           * See the reference for <a href="#/p5/pixels">pixels[]</a> for more information.
           *
           * If you want to extract an array of colors or a subimage from an p5.Image object,
           * take a look at <a href="#/p5.Image/get">p5.Image.get()</a>
           *
           * @method get
           * @param  {Number}         x x-coordinate of the pixel
           * @param  {Number}         y y-coordinate of the pixel
           * @param  {Number}         w width
           * @param  {Number}         h height
           * @return {p5.Image}       the rectangle <a href="#/p5.Image">p5.Image</a>
           * @example
           * <div>
           * <code>
           * let img;
           * function preload() {
           *   img = loadImage('assets/rockies.jpg');
           * }
           * function setup() {
           *   image(img, 0, 0);
           *   let c = get();
           *   image(c, width / 2, 0);
           * }
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * let img;
           * function preload() {
           *   img = loadImage('assets/rockies.jpg');
           * }
           * function setup() {
           *   image(img, 0, 0);
           *   let c = get(50, 90);
           *   fill(c);
           *   noStroke();
           *   rect(25, 25, 50, 50);
           * }
           * </code>
           * </div>
           *
           * @alt
           * 2 images of the rocky mountains, side-by-side
           * Image of the rocky mountains with 50x50 green rect in center of canvas
           */
          /**
           * @method get
           * @return {p5.Image}      the whole <a href="#/p5.Image">p5.Image</a>
           */
          /**
           * @method get
           * @param  {Number}        x
           * @param  {Number}        y
           * @return {Number[]}      color of pixel at x,y in array format [R, G, B, A]
           */ cov_201an2rxi6.s[46]++;
          _main.default.prototype.get = function(x, y, w, h) {
            var _this$_renderer2;
            cov_201an2rxi6.f[4]++;
            cov_201an2rxi6.s[47]++;
            _main.default._validateParameters('get', arguments);
            cov_201an2rxi6.s[48]++;
            return (_this$_renderer2 = this._renderer).get.apply(
              _this$_renderer2,
              arguments
            );
          };

          /**
           * Loads the pixel data for the display window into the <a href="#/p5/pixels">pixels[]</a> array. This
           * function must always be called before reading from or writing to <a href="#/p5/pixels">pixels[]</a>.
           * Note that only changes made with <a href="#/p5/set">set()</a> or direct manipulation of <a href="#/p5/pixels">pixels[]</a>
           * will occur.
           *
           * @method loadPixels
           * @example
           * <div>
           * <code>
           * let img;
           * function preload() {
           *   img = loadImage('assets/rockies.jpg');
           * }
           *
           * function setup() {
           *   image(img, 0, 0, width, height);
           *   let d = pixelDensity();
           *   let halfImage = 4 * (width * d) * (height * d / 2);
           *   loadPixels();
           *   for (let i = 0; i < halfImage; i++) {
           *     pixels[i + halfImage] = pixels[i];
           *   }
           *   updatePixels();
           * }
           * </code>
           * </div>
           *
           * @alt
           * two images of the rocky mountains. one on top, one on bottom of canvas.
           */ cov_201an2rxi6.s[49]++;
          _main.default.prototype.loadPixels = function() {
            cov_201an2rxi6.f[5]++;
            cov_201an2rxi6.s[50]++;
            for (
              var _len3 = arguments.length, args = new Array(_len3), _key3 = 0;
              _key3 < _len3;
              _key3++
            ) {
              args[_key3] = arguments[_key3];
            }
            _main.default._validateParameters('loadPixels', args);
            cov_201an2rxi6.s[51]++;
            this._renderer.loadPixels();
          };

          /**
           * Changes the color of any pixel, or writes an image directly to the
           * display window.
           * The x and y parameters specify the pixel to change and the c parameter
           * specifies the color value. This can be a <a href="#/p5.Color">p5.Color</a> object, or [R, G, B, A]
           * pixel array. It can also be a single grayscale value.
           * When setting an image, the x and y parameters define the coordinates for
           * the upper-left corner of the image, regardless of the current <a href="#/p5/imageMode">imageMode()</a>.
           *
           * After using <a href="#/p5/set">set()</a>, you must call <a href="#/p5/updatePixels">updatePixels()</a> for your changes to appear.
           * This should be called once all pixels have been set, and must be called before
           * calling .<a href="#/p5/get">get()</a> or drawing the image.
           *
           * Setting the color of a single pixel with set(x, y) is easy, but not as
           * fast as putting the data directly into <a href="#/p5/pixels">pixels[]</a>. Setting the <a href="#/p5/pixels">pixels[]</a>
           * values directly may be complicated when working with a retina display,
           * but will perform better when lots of pixels need to be set directly on
           * every loop. See the reference for <a href="#/p5/pixels">pixels[]</a> for more information.
           *
           * @method set
           * @param {Number}              x x-coordinate of the pixel
           * @param {Number}              y y-coordinate of the pixel
           * @param {Number|Number[]|Object} c insert a grayscale value | a pixel array |
           *                                a <a href="#/p5.Color">p5.Color</a> object | a <a href="#/p5.Image">p5.Image</a> to copy
           * @example
           * <div>
           * <code>
           * let black = color(0);
           * set(30, 20, black);
           * set(85, 20, black);
           * set(85, 75, black);
           * set(30, 75, black);
           * updatePixels();
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * for (let i = 30; i < width - 15; i++) {
           *   for (let j = 20; j < height - 25; j++) {
           *     let c = color(204 - j, 153 - i, 0);
           *     set(i, j, c);
           *   }
           * }
           * updatePixels();
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * let img;
           * function preload() {
           *   img = loadImage('assets/rockies.jpg');
           * }
           *
           * function setup() {
           *   set(0, 0, img);
           *   updatePixels();
           *   line(0, 0, width, height);
           *   line(0, height, width, 0);
           * }
           * </code>
           * </div>
           *
           * @alt
           * 4 black points in the shape of a square middle-right of canvas.
           * square with orangey-brown gradient lightening at bottom right.
           * image of the rocky mountains. with lines like an 'x' through the center.
           */ cov_201an2rxi6.s[52]++;
          _main.default.prototype.set = function(x, y, imgOrCol) {
            cov_201an2rxi6.f[6]++;
            cov_201an2rxi6.s[53]++;
            this._renderer.set(x, y, imgOrCol);
          };
          /**
           * Updates the display window with the data in the <a href="#/p5/pixels">pixels[]</a> array.
           * Use in conjunction with <a href="#/p5/loadPixels">loadPixels()</a>. If you're only reading pixels from
           * the array, there's no need to call <a href="#/p5/updatePixels">updatePixels()</a> — updating is only
           * necessary to apply changes. <a href="#/p5/updatePixels">updatePixels()</a> should be called anytime the
           * pixels array is manipulated or <a href="#/p5/set">set()</a> is called, and only changes made with
           * <a href="#/p5/set">set()</a> or direct changes to <a href="#/p5/pixels">pixels[]</a> will occur.
           *
           * @method updatePixels
           * @param  {Number} [x]    x-coordinate of the upper-left corner of region
           *                         to update
           * @param  {Number} [y]    y-coordinate of the upper-left corner of region
           *                         to update
           * @param  {Number} [w]    width of region to update
           * @param  {Number} [h]    height of region to update
           * @example
           * <div>
           * <code>
           * let img;
           * function preload() {
           *   img = loadImage('assets/rockies.jpg');
           * }
           *
           * function setup() {
           *   image(img, 0, 0, width, height);
           *   let d = pixelDensity();
           *   let halfImage = 4 * (width * d) * (height * d / 2);
           *   loadPixels();
           *   for (let i = 0; i < halfImage; i++) {
           *     pixels[i + halfImage] = pixels[i];
           *   }
           *   updatePixels();
           * }
           * </code>
           * </div>
           * @alt
           * two images of the rocky mountains. one on top, one on bottom of canvas.
           */ cov_201an2rxi6.s[54]++;
          _main.default.prototype.updatePixels = function(x, y, w, h) {
            cov_201an2rxi6.f[7]++;
            cov_201an2rxi6.s[55]++;
            _main.default._validateParameters('updatePixels', arguments);
            // graceful fail - if loadPixels() or set() has not been called, pixel
            // array will be empty, ignore call to updatePixels()
            cov_201an2rxi6.s[56]++;
            if (this.pixels.length === 0) {
              cov_201an2rxi6.b[8][0]++;
              cov_201an2rxi6.s[57]++;
              return;
            } else {
              cov_201an2rxi6.b[8][1]++;
            }
            cov_201an2rxi6.s[58]++;
            this._renderer.updatePixels(x, y, w, h);
          };
          var _default = _main.default;
          exports.default = _default;
        },
        {
          '../color/p5.Color': 270,
          '../core/main': 283,
          './filters': 304,
          'core-js/modules/es.array.filter': 169
        }
      ],
      309: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_et3brlpgs = (function() {
            var path = '/Users/outofambit/src/p5.js/src/io/files.js';
            var hash = '23c1fc48bd35842398175f97cf7c04aba994fa20';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/io/files.js',
              statementMap: {
                '0': { start: { line: 119, column: 0 }, end: { line: 181, column: 2 } },
                '1': { start: { line: 120, column: 2 }, end: { line: 120, column: 43 } },
                '2': { start: { line: 121, column: 15 }, end: { line: 121, column: 22 } },
                '3': { start: { line: 126, column: 14 }, end: { line: 126, column: 16 } },
                '4': { start: { line: 127, column: 10 }, end: { line: 127, column: 16 } },
                '5': { start: { line: 130, column: 2 }, end: { line: 150, column: 3 } },
                '6': { start: { line: 130, column: 15 }, end: { line: 130, column: 16 } },
                '7': { start: { line: 131, column: 16 }, end: { line: 131, column: 23 } },
                '8': { start: { line: 132, column: 4 }, end: { line: 149, column: 5 } },
                '9': { start: { line: 133, column: 6 }, end: { line: 135, column: 7 } },
                '10': { start: { line: 134, column: 8 }, end: { line: 134, column: 16 } },
                '11': { start: { line: 136, column: 11 }, end: { line: 149, column: 5 } },
                '12': { start: { line: 137, column: 6 }, end: { line: 141, column: 7 } },
                '13': { start: { line: 138, column: 8 }, end: { line: 138, column: 23 } },
                '14': { start: { line: 140, column: 8 }, end: { line: 140, column: 28 } },
                '15': { start: { line: 142, column: 11 }, end: { line: 149, column: 5 } },
                '16': { start: { line: 147, column: 6 }, end: { line: 147, column: 18 } },
                '17': { start: { line: 148, column: 6 }, end: { line: 148, column: 20 } },
                '18': { start: { line: 152, column: 15 }, end: { line: 152, column: 19 } },
                '19': { start: { line: 153, column: 2 }, end: { line: 178, column: 4 } },
                '20': { start: { line: 159, column: 6 }, end: { line: 161, column: 7 } },
                '21': { start: { line: 160, column: 8 }, end: { line: 160, column: 25 } },
                '22': { start: { line: 162, column: 6 }, end: { line: 164, column: 7 } },
                '23': { start: { line: 163, column: 8 }, end: { line: 163, column: 23 } },
                '24': { start: { line: 166, column: 6 }, end: { line: 166, column: 31 } },
                '25': { start: { line: 170, column: 6 }, end: { line: 170, column: 41 } },
                '26': { start: { line: 172, column: 6 }, end: { line: 176, column: 7 } },
                '27': { start: { line: 173, column: 8 }, end: { line: 173, column: 27 } },
                '28': { start: { line: 175, column: 8 }, end: { line: 175, column: 18 } },
                '29': { start: { line: 180, column: 2 }, end: { line: 180, column: 13 } },
                '30': { start: { line: 241, column: 0 }, end: { line: 301, column: 2 } },
                '31': { start: { line: 242, column: 2 }, end: { line: 242, column: 46 } },
                '32': { start: { line: 244, column: 14 }, end: { line: 244, column: 16 } },
                '33': { start: { line: 247, column: 2 }, end: { line: 256, column: 3 } },
                '34': { start: { line: 247, column: 15 }, end: { line: 247, column: 16 } },
                '35': { start: { line: 248, column: 16 }, end: { line: 248, column: 23 } },
                '36': { start: { line: 249, column: 4 }, end: { line: 255, column: 5 } },
                '37': { start: { line: 250, column: 6 }, end: { line: 254, column: 7 } },
                '38': { start: { line: 251, column: 8 }, end: { line: 251, column: 23 } },
                '39': { start: { line: 252, column: 13 }, end: { line: 254, column: 7 } },
                '40': { start: { line: 253, column: 8 }, end: { line: 253, column: 28 } },
                '41': { start: { line: 258, column: 15 }, end: { line: 258, column: 19 } },
                '42': { start: { line: 259, column: 2 }, end: { line: 298, column: 4 } },
                '43': { start: { line: 266, column: 20 }, end: { line: 269, column: 20 } },
                '44': { start: { line: 274, column: 22 }, end: { line: 274, column: 27 } },
                '45': { start: { line: 275, column: 6 }, end: { line: 280, column: 7 } },
                '46': { start: { line: 275, column: 19 }, end: { line: 275, column: 20 } },
                '47': { start: { line: 275, column: 28 }, end: { line: 275, column: 40 } },
                '48': { start: { line: 276, column: 8 }, end: { line: 279, column: 10 } },
                '49': { start: { line: 282, column: 6 }, end: { line: 284, column: 7 } },
                '50': { start: { line: 283, column: 8 }, end: { line: 283, column: 22 } },
                '51': { start: { line: 286, column: 6 }, end: { line: 286, column: 31 } },
                '52': { start: { line: 290, column: 6 }, end: { line: 290, column: 49 } },
                '53': { start: { line: 292, column: 6 }, end: { line: 296, column: 7 } },
                '54': { start: { line: 293, column: 8 }, end: { line: 293, column: 27 } },
                '55': { start: { line: 295, column: 8 }, end: { line: 295, column: 18 } },
                '56': { start: { line: 300, column: 2 }, end: { line: 300, column: 13 } },
                '57': { start: { line: 375, column: 0 }, end: { line: 564, column: 2 } },
                '58': { start: { line: 379, column: 18 }, end: { line: 379, column: 20 } },
                '59': { start: { line: 380, column: 15 }, end: { line: 380, column: 20 } },
                '60': { start: { line: 381, column: 14 }, end: { line: 381, column: 68 } },
                '61': { start: { line: 384, column: 2 }, end: { line: 390, column: 3 } },
                '62': { start: { line: 385, column: 4 }, end: { line: 385, column: 14 } },
                '63': { start: { line: 386, column: 9 }, end: { line: 390, column: 3 } },
                '64': { start: { line: 387, column: 4 }, end: { line: 387, column: 14 } },
                '65': { start: { line: 388, column: 9 }, end: { line: 390, column: 3 } },
                '66': { start: { line: 389, column: 4 }, end: { line: 389, column: 15 } },
                '67': { start: { line: 392, column: 2 }, end: { line: 412, column: 3 } },
                '68': { start: { line: 392, column: 15 }, end: { line: 392, column: 16 } },
                '69': { start: { line: 393, column: 4 }, end: { line: 411, column: 5 } },
                '70': { start: { line: 394, column: 6 }, end: { line: 398, column: 7 } },
                '71': { start: { line: 395, column: 8 }, end: { line: 395, column: 32 } },
                '72': { start: { line: 396, column: 13 }, end: { line: 398, column: 7 } },
                '73': { start: { line: 397, column: 8 }, end: { line: 397, column: 37 } },
                '74': { start: { line: 399, column: 11 }, end: { line: 411, column: 5 } },
                '75': { start: { line: 400, column: 6 }, end: { line: 400, column: 33 } },
                '76': { start: { line: 401, column: 6 }, end: { line: 403, column: 7 } },
                '77': { start: { line: 402, column: 8 }, end: { line: 402, column: 22 } },
                '78': { start: { line: 404, column: 6 }, end: { line: 410, column: 7 } },
                '79': { start: { line: 405, column: 8 }, end: { line: 405, column: 18 } },
                '80': { start: { line: 406, column: 13 }, end: { line: 410, column: 7 } },
                '81': { start: { line: 407, column: 8 }, end: { line: 407, column: 18 } },
                '82': { start: { line: 408, column: 13 }, end: { line: 410, column: 7 } },
                '83': { start: { line: 409, column: 8 }, end: { line: 409, column: 19 } },
                '84': { start: { line: 414, column: 12 }, end: { line: 414, column: 26 } },
                '85': { start: { line: 416, column: 15 }, end: { line: 416, column: 19 } },
                '86': { start: { line: 417, column: 2 }, end: { line: 561, column: 4 } },
                '87': { start: { line: 422, column: 20 }, end: { line: 422, column: 22 } },
                '88': { start: { line: 425, column: 24 }, end: { line: 425, column: 25 } },
                '89': { start: { line: 426, column: 20 }, end: { line: 426, column: 21 } },
                '90': { start: { line: 427, column: 21 }, end: { line: 427, column: 22 } },
                '91': { start: { line: 428, column: 22 }, end: { line: 428, column: 23 } },
                '92': { start: { line: 430, column: 20 }, end: { line: 430, column: 23 } },
                '93': { start: { line: 431, column: 13 }, end: { line: 431, column: 17 } },
                '94': { start: { line: 432, column: 13 }, end: { line: 432, column: 17 } },
                '95': { start: { line: 434, column: 22 }, end: { line: 434, column: 24 } },
                '96': { start: { line: 435, column: 19 }, end: { line: 435, column: 20 } },
                '97': { start: { line: 436, column: 26 }, end: { line: 436, column: 30 } },
                '98': { start: { line: 439, column: 25 }, end: { line: 442, column: 7 } },
                '99': { start: { line: 440, column: 8 }, end: { line: 440, column: 39 } },
                '100': { start: { line: 441, column: 8 }, end: { line: 441, column: 25 } },
                '101': { start: { line: 444, column: 23 }, end: { line: 447, column: 7 } },
                '102': { start: { line: 445, column: 8 }, end: { line: 445, column: 40 } },
                '103': { start: { line: 446, column: 8 }, end: { line: 446, column: 21 } },
                '104': { start: { line: 449, column: 26 }, end: { line: 453, column: 7 } },
                '105': { start: { line: 450, column: 8 }, end: { line: 450, column: 30 } },
                '106': { start: { line: 451, column: 8 }, end: { line: 451, column: 27 } },
                '107': { start: { line: 452, column: 8 }, end: { line: 452, column: 21 } },
                '108': { start: { line: 455, column: 24 }, end: { line: 459, column: 7 } },
                '109': { start: { line: 456, column: 8 }, end: { line: 456, column: 41 } },
                '110': { start: { line: 457, column: 8 }, end: { line: 457, column: 36 } },
                '111': { start: { line: 458, column: 8 }, end: { line: 458, column: 29 } },
                '112': { start: { line: 461, column: 6 }, end: { line: 522, column: 7 } },
                '113': { start: { line: 462, column: 8 }, end: { line: 462, column: 37 } },
                '114': { start: { line: 465, column: 8 }, end: { line: 474, column: 9 } },
                '115': { start: { line: 466, column: 10 }, end: { line: 468, column: 11 } },
                '116': { start: { line: 467, column: 12 }, end: { line: 467, column: 55 } },
                '117': { start: { line: 469, column: 10 }, end: { line: 473, column: 11 } },
                '118': { start: { line: 470, column: 12 }, end: { line: 470, column: 23 } },
                '119': { start: { line: 471, column: 12 }, end: { line: 471, column: 24 } },
                '120': { start: { line: 472, column: 12 }, end: { line: 472, column: 18 } },
                '121': { start: { line: 475, column: 8 }, end: { line: 477, column: 9 } },
                '122': { start: { line: 476, column: 10 }, end: { line: 476, column: 24 } },
                '123': { start: { line: 480, column: 8 }, end: { line: 487, column: 9 } },
                '124': { start: { line: 481, column: 10 }, end: { line: 485, column: 11 } },
                '125': { start: { line: 482, column: 12 }, end: { line: 482, column: 33 } },
                '126': { start: { line: 483, column: 12 }, end: { line: 483, column: 43 } },
                '127': { start: { line: 484, column: 12 }, end: { line: 484, column: 21 } },
                '128': { start: { line: 486, column: 10 }, end: { line: 486, column: 41 } },
                '129': { start: { line: 490, column: 8 }, end: { line: 505, column: 9 } },
                '130': { start: { line: 491, column: 10 }, end: { line: 503, column: 11 } },
                '131': { start: { line: 492, column: 12 }, end: { line: 498, column: 13 } },
                '132': { start: { line: 493, column: 14 }, end: { line: 493, column: 35 } },
                '133': { start: { line: 494, column: 14 }, end: { line: 494, column: 23 } },
                '134': { start: { line: 496, column: 14 }, end: { line: 496, column: 36 } },
                '135': { start: { line: 497, column: 14 }, end: { line: 497, column: 46 } },
                '136': { start: { line: 499, column: 17 }, end: { line: 503, column: 11 } },
                '137': { start: { line: 500, column: 12 }, end: { line: 500, column: 21 } },
                '138': { start: { line: 502, column: 12 }, end: { line: 502, column: 39 } },
                '139': { start: { line: 504, column: 10 }, end: { line: 504, column: 19 } },
                '140': { start: { line: 508, column: 8 }, end: { line: 521, column: 9 } },
                '141': { start: { line: 509, column: 10 }, end: { line: 511, column: 11 } },
                '142': { start: { line: 510, column: 12 }, end: { line: 510, column: 21 } },
                '143': { start: { line: 512, column: 10 }, end: { line: 512, column: 21 } },
                '144': { start: { line: 513, column: 10 }, end: { line: 513, column: 22 } },
                '145': { start: { line: 514, column: 15 }, end: { line: 521, column: 9 } },
                '146': { start: { line: 515, column: 10 }, end: { line: 515, column: 21 } },
                '147': { start: { line: 516, column: 10 }, end: { line: 516, column: 22 } },
                '148': { start: { line: 517, column: 15 }, end: { line: 521, column: 9 } },
                '149': { start: { line: 518, column: 10 }, end: { line: 518, column: 21 } },
                '150': { start: { line: 519, column: 15 }, end: { line: 521, column: 9 } },
                '151': { start: { line: 520, column: 10 }, end: { line: 520, column: 37 } },
                '152': { start: { line: 525, column: 6 }, end: { line: 531, column: 7 } },
                '153': { start: { line: 526, column: 8 }, end: { line: 526, column: 36 } },
                '154': { start: { line: 528, column: 8 }, end: { line: 530, column: 9 } },
                '155': { start: { line: 528, column: 21 }, end: { line: 528, column: 22 } },
                '156': { start: { line: 529, column: 10 }, end: { line: 529, column: 32 } },
                '157': { start: { line: 533, column: 6 }, end: { line: 544, column: 7 } },
                '158': { start: { line: 533, column: 19 }, end: { line: 533, column: 20 } },
                '159': { start: { line: 535, column: 8 }, end: { line: 539, column: 9 } },
                '160': { start: { line: 536, column: 10 }, end: { line: 538, column: 11 } },
                '161': { start: { line: 537, column: 12 }, end: { line: 537, column: 21 } },
                '162': { start: { line: 540, column: 8 }, end: { line: 540, column: 32 } },
                '163': { start: { line: 541, column: 8 }, end: { line: 541, column: 29 } },
                '164': { start: { line: 542, column: 8 }, end: { line: 542, column: 52 } },
                '165': { start: { line: 543, column: 8 }, end: { line: 543, column: 22 } },
                '166': { start: { line: 545, column: 6 }, end: { line: 547, column: 7 } },
                '167': { start: { line: 546, column: 8 }, end: { line: 546, column: 20 } },
                '168': { start: { line: 549, column: 6 }, end: { line: 549, column: 31 } },
                '169': { start: { line: 553, column: 6 }, end: { line: 553, column: 41 } },
                '170': { start: { line: 555, column: 6 }, end: { line: 559, column: 7 } },
                '171': { start: { line: 556, column: 8 }, end: { line: 556, column: 27 } },
                '172': { start: { line: 558, column: 8 }, end: { line: 558, column: 27 } },
                '173': { start: { line: 563, column: 2 }, end: { line: 563, column: 11 } },
                '174': { start: { line: 568, column: 14 }, end: { line: 568, column: 16 } },
                '175': { start: { line: 569, column: 2 }, end: { line: 569, column: 26 } },
                '176': { start: { line: 570, column: 2 }, end: { line: 574, column: 3 } },
                '177': { start: { line: 571, column: 4 }, end: { line: 573, column: 5 } },
                '178': { start: { line: 571, column: 17 }, end: { line: 571, column: 18 } },
                '179': { start: { line: 572, column: 6 }, end: { line: 572, column: 32 } },
                '180': { start: { line: 575, column: 2 }, end: { line: 579, column: 3 } },
                '181': { start: { line: 575, column: 15 }, end: { line: 575, column: 16 } },
                '182': { start: { line: 576, column: 16 }, end: { line: 576, column: 26 } },
                '183': { start: { line: 577, column: 16 }, end: { line: 577, column: 22 } },
                '184': { start: { line: 578, column: 4 }, end: { line: 578, column: 19 } },
                '185': { start: { line: 580, column: 2 }, end: { line: 580, column: 13 } },
                '186': { start: { line: 648, column: 0 }, end: { line: 691, column: 2 } },
                '187': { start: { line: 649, column: 14 }, end: { line: 649, column: 26 } },
                '188': { start: { line: 652, column: 2 }, end: { line: 661, column: 3 } },
                '189': { start: { line: 652, column: 15 }, end: { line: 652, column: 16 } },
                '190': { start: { line: 653, column: 16 }, end: { line: 653, column: 23 } },
                '191': { start: { line: 654, column: 4 }, end: { line: 660, column: 5 } },
                '192': { start: { line: 655, column: 6 }, end: { line: 659, column: 7 } },
                '193': { start: { line: 656, column: 8 }, end: { line: 656, column: 23 } },
                '194': { start: { line: 657, column: 13 }, end: { line: 659, column: 7 } },
                '195': { start: { line: 658, column: 8 }, end: { line: 658, column: 28 } },
                '196': { start: { line: 663, column: 15 }, end: { line: 663, column: 19 } },
                '197': { start: { line: 664, column: 2 }, end: { line: 688, column: 4 } },
                '198': { start: { line: 669, column: 6 }, end: { line: 671, column: 7 } },
                '199': { start: { line: 670, column: 8 }, end: { line: 670, column: 28 } },
                '200': { start: { line: 672, column: 6 }, end: { line: 674, column: 7 } },
                '201': { start: { line: 673, column: 8 }, end: { line: 673, column: 22 } },
                '202': { start: { line: 676, column: 6 }, end: { line: 676, column: 31 } },
                '203': { start: { line: 680, column: 6 }, end: { line: 680, column: 49 } },
                '204': { start: { line: 682, column: 6 }, end: { line: 686, column: 7 } },
                '205': { start: { line: 683, column: 8 }, end: { line: 683, column: 27 } },
                '206': { start: { line: 685, column: 8 }, end: { line: 685, column: 18 } },
                '207': { start: { line: 690, column: 2 }, end: { line: 690, column: 13 } },
                '208': { start: { line: 721, column: 0 }, end: { line: 750, column: 2 } },
                '209': { start: { line: 722, column: 14 }, end: { line: 722, column: 16 } },
                '210': { start: { line: 724, column: 15 }, end: { line: 724, column: 19 } },
                '211': { start: { line: 725, column: 2 }, end: { line: 748, column: 4 } },
                '212': { start: { line: 730, column: 6 }, end: { line: 730, column: 46 } },
                '213': { start: { line: 732, column: 6 }, end: { line: 734, column: 7 } },
                '214': { start: { line: 733, column: 8 }, end: { line: 733, column: 22 } },
                '215': { start: { line: 736, column: 6 }, end: { line: 736, column: 31 } },
                '216': { start: { line: 740, column: 6 }, end: { line: 740, column: 41 } },
                '217': { start: { line: 742, column: 6 }, end: { line: 746, column: 7 } },
                '218': { start: { line: 743, column: 8 }, end: { line: 743, column: 27 } },
                '219': { start: { line: 745, column: 8 }, end: { line: 745, column: 18 } },
                '220': { start: { line: 749, column: 2 }, end: { line: 749, column: 13 } },
                '221': { start: { line: 821, column: 0 }, end: { line: 827, column: 2 } },
                '222': { start: { line: 822, column: 2 }, end: { line: 822, column: 47 } },
                '223': { start: { line: 824, column: 15 }, end: { line: 824, column: 52 } },
                '224': { start: { line: 825, column: 2 }, end: { line: 825, column: 27 } },
                '225': { start: { line: 826, column: 2 }, end: { line: 826, column: 47 } },
                '226': { start: { line: 911, column: 0 }, end: { line: 917, column: 2 } },
                '227': { start: { line: 912, column: 2 }, end: { line: 912, column: 48 } },
                '228': { start: { line: 914, column: 15 }, end: { line: 914, column: 52 } },
                '229': { start: { line: 915, column: 2 }, end: { line: 915, column: 28 } },
                '230': { start: { line: 916, column: 2 }, end: { line: 916, column: 47 } },
                '231': { start: { line: 1000, column: 0 }, end: { line: 1142, column: 2 } },
                '232': {
                  start: { line: 1006, column: 23 },
                  end: { line: 1006, column: 25 }
                },
                '233': {
                  start: { line: 1007, column: 16 },
                  end: { line: 1007, column: 17 }
                },
                '234': {
                  start: { line: 1008, column: 20 },
                  end: { line: 1008, column: 32 }
                },
                '235': { start: { line: 1010, column: 2 }, end: { line: 1016, column: 3 } },
                '236': {
                  start: { line: 1010, column: 15 },
                  end: { line: 1010, column: 30 }
                },
                '237': { start: { line: 1011, column: 4 }, end: { line: 1015, column: 5 } },
                '238': {
                  start: { line: 1012, column: 6 },
                  end: { line: 1012, column: 16 }
                },
                '239': {
                  start: { line: 1014, column: 6 },
                  end: { line: 1014, column: 12 }
                },
                '240': {
                  start: { line: 1018, column: 20 },
                  end: { line: 1018, column: 41 }
                },
                '241': {
                  start: { line: 1019, column: 15 },
                  end: { line: 1019, column: 22 }
                },
                '242': { start: { line: 1020, column: 2 }, end: { line: 1089, column: 3 } },
                '243': {
                  start: { line: 1026, column: 4 },
                  end: { line: 1026, column: 41 }
                },
                '244': {
                  start: { line: 1027, column: 4 },
                  end: { line: 1027, column: 23 }
                },
                '245': {
                  start: { line: 1028, column: 4 },
                  end: { line: 1028, column: 28 }
                },
                '246': {
                  start: { line: 1031, column: 17 },
                  end: { line: 1031, column: 22 }
                },
                '247': { start: { line: 1034, column: 4 }, end: { line: 1076, column: 5 } },
                '248': {
                  start: { line: 1034, column: 17 },
                  end: { line: 1034, column: 18 }
                },
                '249': {
                  start: { line: 1035, column: 16 },
                  end: { line: 1035, column: 23 }
                },
                '250': { start: { line: 1036, column: 6 }, end: { line: 1075, column: 7 } },
                '251': { start: { line: 1037, column: 8 }, end: { line: 1051, column: 9 } },
                '252': {
                  start: { line: 1038, column: 10 },
                  end: { line: 1038, column: 21 }
                },
                '253': {
                  start: { line: 1039, column: 15 },
                  end: { line: 1051, column: 9 }
                },
                '254': {
                  start: { line: 1048, column: 10 },
                  end: { line: 1048, column: 19 }
                },
                '255': {
                  start: { line: 1050, column: 10 },
                  end: { line: 1050, column: 19 }
                },
                '256': {
                  start: { line: 1052, column: 13 },
                  end: { line: 1075, column: 7 }
                },
                '257': {
                  start: { line: 1053, column: 8 },
                  end: { line: 1053, column: 28 }
                },
                '258': {
                  start: { line: 1054, column: 13 },
                  end: { line: 1075, column: 7 }
                },
                '259': { start: { line: 1055, column: 8 }, end: { line: 1068, column: 9 } },
                '260': {
                  start: { line: 1059, column: 10 },
                  end: { line: 1061, column: 11 }
                },
                '261': {
                  start: { line: 1060, column: 12 },
                  end: { line: 1060, column: 41 }
                },
                '262': {
                  start: { line: 1062, column: 15 },
                  end: { line: 1068, column: 9 }
                },
                '263': {
                  start: { line: 1063, column: 10 },
                  end: { line: 1063, column: 31 }
                },
                '264': {
                  start: { line: 1064, column: 10 },
                  end: { line: 1064, column: 42 }
                },
                '265': {
                  start: { line: 1066, column: 10 },
                  end: { line: 1066, column: 35 }
                },
                '266': {
                  start: { line: 1067, column: 10 },
                  end: { line: 1067, column: 43 }
                },
                '267': {
                  start: { line: 1069, column: 13 },
                  end: { line: 1075, column: 7 }
                },
                '268': { start: { line: 1070, column: 8 }, end: { line: 1074, column: 9 } },
                '269': {
                  start: { line: 1071, column: 10 },
                  end: { line: 1071, column: 23 }
                },
                '270': {
                  start: { line: 1073, column: 10 },
                  end: { line: 1073, column: 28 }
                },
                '271': {
                  start: { line: 1079, column: 6 },
                  end: { line: 1081, column: 54 }
                },
                '272': { start: { line: 1083, column: 4 }, end: { line: 1088, column: 7 } },
                '273': { start: { line: 1091, column: 2 }, end: { line: 1099, column: 3 } },
                '274': { start: { line: 1092, column: 4 }, end: { line: 1098, column: 5 } },
                '275': {
                  start: { line: 1093, column: 6 },
                  end: { line: 1093, column: 20 }
                },
                '276': {
                  start: { line: 1094, column: 11 },
                  end: { line: 1098, column: 5 }
                },
                '277': {
                  start: { line: 1095, column: 6 },
                  end: { line: 1095, column: 19 }
                },
                '278': {
                  start: { line: 1097, column: 6 },
                  end: { line: 1097, column: 20 }
                },
                '279': { start: { line: 1101, column: 2 }, end: { line: 1105, column: 3 } },
                '280': {
                  start: { line: 1102, column: 4 },
                  end: { line: 1102, column: 45 }
                },
                '281': {
                  start: { line: 1104, column: 4 },
                  end: { line: 1104, column: 29 }
                },
                '282': { start: { line: 1106, column: 2 }, end: { line: 1138, column: 5 } },
                '283': { start: { line: 1107, column: 4 }, end: { line: 1137, column: 5 } },
                '284': {
                  start: { line: 1108, column: 18 },
                  end: { line: 1108, column: 37 }
                },
                '285': {
                  start: { line: 1109, column: 6 },
                  end: { line: 1109, column: 30 }
                },
                '286': {
                  start: { line: 1110, column: 6 },
                  end: { line: 1110, column: 21 }
                },
                '287': {
                  start: { line: 1111, column: 6 },
                  end: { line: 1111, column: 16 }
                },
                '288': {
                  start: { line: 1113, column: 21 },
                  end: { line: 1113, column: 22 }
                },
                '289': { start: { line: 1114, column: 6 }, end: { line: 1116, column: 7 } },
                '290': {
                  start: { line: 1115, column: 8 },
                  end: { line: 1115, column: 53 }
                },
                '291': { start: { line: 1117, column: 6 }, end: { line: 1119, column: 7 } },
                '292': {
                  start: { line: 1118, column: 8 },
                  end: { line: 1118, column: 43 }
                },
                '293': { start: { line: 1120, column: 6 }, end: { line: 1136, column: 7 } },
                '294': {
                  start: { line: 1123, column: 10 },
                  end: { line: 1123, column: 28 }
                },
                '295': {
                  start: { line: 1125, column: 10 },
                  end: { line: 1125, column: 28 }
                },
                '296': {
                  start: { line: 1127, column: 10 },
                  end: { line: 1127, column: 35 }
                },
                '297': {
                  start: { line: 1129, column: 10 },
                  end: { line: 1133, column: 13 }
                },
                '298': {
                  start: { line: 1130, column: 27 },
                  end: { line: 1130, column: 42 }
                },
                '299': {
                  start: { line: 1131, column: 24 },
                  end: { line: 1131, column: 64 }
                },
                '300': {
                  start: { line: 1132, column: 12 },
                  end: { line: 1132, column: 51 }
                },
                '301': {
                  start: { line: 1135, column: 10 },
                  end: { line: 1135, column: 28 }
                },
                '302': {
                  start: { line: 1139, column: 2 },
                  end: { line: 1139, column: 39 }
                },
                '303': {
                  start: { line: 1140, column: 2 },
                  end: { line: 1140, column: 48 }
                },
                '304': {
                  start: { line: 1141, column: 2 },
                  end: { line: 1141, column: 17 }
                },
                '305': {
                  start: { line: 1150, column: 0 },
                  end: { line: 1150, column: 44 }
                },
                '306': {
                  start: { line: 1153, column: 0 },
                  end: { line: 1153, column: 28 }
                },
                '307': { start: { line: 1182, column: 0 }, end: { line: 1198, column: 2 } },
                '308': { start: { line: 1185, column: 2 }, end: { line: 1194, column: 3 } },
                '309': { start: { line: 1186, column: 4 }, end: { line: 1193, column: 5 } },
                '310': {
                  start: { line: 1190, column: 6 },
                  end: { line: 1190, column: 66 }
                },
                '311': {
                  start: { line: 1191, column: 6 },
                  end: { line: 1191, column: 41 }
                },
                '312': {
                  start: { line: 1192, column: 6 },
                  end: { line: 1192, column: 19 }
                },
                '313': {
                  start: { line: 1195, column: 2 },
                  end: { line: 1195, column: 46 }
                },
                '314': {
                  start: { line: 1196, column: 2 },
                  end: { line: 1196, column: 37 }
                },
                '315': {
                  start: { line: 1197, column: 2 },
                  end: { line: 1197, column: 15 }
                },
                '316': { start: { line: 1205, column: 0 }, end: { line: 1382, column: 2 } },
                '317': {
                  start: { line: 1206, column: 13 },
                  end: { line: 1206, column: 17 }
                },
                '318': {
                  start: { line: 1207, column: 2 },
                  end: { line: 1207, column: 23 }
                },
                '319': {
                  start: { line: 1208, column: 2 },
                  end: { line: 1208, column: 20 }
                },
                '320': { start: { line: 1266, column: 2 }, end: { line: 1268, column: 4 } },
                '321': {
                  start: { line: 1267, column: 4 },
                  end: { line: 1267, column: 25 }
                },
                '322': { start: { line: 1307, column: 2 }, end: { line: 1309, column: 4 } },
                '323': {
                  start: { line: 1308, column: 4 },
                  end: { line: 1308, column: 32 }
                },
                '324': { start: { line: 1341, column: 2 }, end: { line: 1343, column: 4 } },
                '325': {
                  start: { line: 1342, column: 4 },
                  end: { line: 1342, column: 22 }
                },
                '326': { start: { line: 1367, column: 2 }, end: { line: 1381, column: 4 } },
                '327': {
                  start: { line: 1369, column: 16 },
                  end: { line: 1369, column: 18 }
                },
                '328': {
                  start: { line: 1370, column: 4 },
                  end: { line: 1370, column: 27 }
                },
                '329': {
                  start: { line: 1371, column: 4 },
                  end: { line: 1371, column: 53 }
                },
                '330': { start: { line: 1373, column: 4 }, end: { line: 1378, column: 5 } },
                '331': { start: { line: 1374, column: 6 }, end: { line: 1377, column: 7 } },
                '332': {
                  start: { line: 1376, column: 8 },
                  end: { line: 1376, column: 44 }
                },
                '333': {
                  start: { line: 1379, column: 4 },
                  end: { line: 1379, column: 17 }
                },
                '334': {
                  start: { line: 1380, column: 4 },
                  end: { line: 1380, column: 14 }
                },
                '335': { start: { line: 1488, column: 0 }, end: { line: 1533, column: 2 } },
                '336': {
                  start: { line: 1490, column: 15 },
                  end: { line: 1490, column: 24 }
                },
                '337': {
                  start: { line: 1495, column: 14 },
                  end: { line: 1495, column: 64 }
                },
                '338': { start: { line: 1496, column: 2 }, end: { line: 1532, column: 3 } },
                '339': {
                  start: { line: 1497, column: 4 },
                  end: { line: 1497, column: 33 }
                },
                '340': {
                  start: { line: 1498, column: 4 },
                  end: { line: 1498, column: 11 }
                },
                '341': { start: { line: 1499, column: 9 }, end: { line: 1532, column: 3 } },
                '342': {
                  start: { line: 1503, column: 4 },
                  end: { line: 1503, column: 59 }
                },
                '343': {
                  start: { line: 1504, column: 4 },
                  end: { line: 1504, column: 11 }
                },
                '344': { start: { line: 1505, column: 9 }, end: { line: 1532, column: 3 } },
                '345': {
                  start: { line: 1507, column: 4 },
                  end: { line: 1507, column: 42 }
                },
                '346': {
                  start: { line: 1511, column: 22 },
                  end: { line: 1511, column: 62 }
                },
                '347': { start: { line: 1512, column: 4 }, end: { line: 1531, column: 5 } },
                '348': {
                  start: { line: 1514, column: 8 },
                  end: { line: 1514, column: 57 }
                },
                '349': {
                  start: { line: 1515, column: 8 },
                  end: { line: 1515, column: 15 }
                },
                '350': {
                  start: { line: 1517, column: 8 },
                  end: { line: 1517, column: 60 }
                },
                '351': {
                  start: { line: 1518, column: 8 },
                  end: { line: 1518, column: 15 }
                },
                '352': { start: { line: 1522, column: 8 }, end: { line: 1530, column: 9 } },
                '353': {
                  start: { line: 1523, column: 10 },
                  end: { line: 1523, column: 62 }
                },
                '354': {
                  start: { line: 1524, column: 15 },
                  end: { line: 1530, column: 9 }
                },
                '355': {
                  start: { line: 1525, column: 10 },
                  end: { line: 1525, column: 60 }
                },
                '356': {
                  start: { line: 1526, column: 15 },
                  end: { line: 1530, column: 9 }
                },
                '357': {
                  start: { line: 1527, column: 10 },
                  end: { line: 1527, column: 59 }
                },
                '358': {
                  start: { line: 1528, column: 15 },
                  end: { line: 1530, column: 9 }
                },
                '359': {
                  start: { line: 1529, column: 10 },
                  end: { line: 1529, column: 69 }
                },
                '360': { start: { line: 1578, column: 0 }, end: { line: 1587, column: 2 } },
                '361': {
                  start: { line: 1579, column: 2 },
                  end: { line: 1579, column: 48 }
                },
                '362': { start: { line: 1581, column: 2 }, end: { line: 1585, column: 3 } },
                '363': {
                  start: { line: 1582, column: 4 },
                  end: { line: 1582, column: 37 }
                },
                '364': {
                  start: { line: 1584, column: 4 },
                  end: { line: 1584, column: 51 }
                },
                '365': {
                  start: { line: 1586, column: 2 },
                  end: { line: 1586, column: 60 }
                },
                '366': {
                  start: { line: 1589, column: 0 },
                  end: { line: 1589, column: 52 }
                },
                '367': {
                  start: { line: 1590, column: 0 },
                  end: { line: 1590, column: 51 }
                },
                '368': { start: { line: 1632, column: 0 }, end: { line: 1641, column: 2 } },
                '369': {
                  start: { line: 1633, column: 2 },
                  end: { line: 1633, column: 51 }
                },
                '370': {
                  start: { line: 1634, column: 14 },
                  end: { line: 1634, column: 32 }
                },
                '371': {
                  start: { line: 1635, column: 18 },
                  end: { line: 1635, column: 50 }
                },
                '372': { start: { line: 1636, column: 2 }, end: { line: 1638, column: 3 } },
                '373': {
                  start: { line: 1636, column: 15 },
                  end: { line: 1636, column: 16 }
                },
                '374': {
                  start: { line: 1637, column: 4 },
                  end: { line: 1637, column: 77 }
                },
                '375': {
                  start: { line: 1639, column: 2 },
                  end: { line: 1639, column: 18 }
                },
                '376': {
                  start: { line: 1640, column: 2 },
                  end: { line: 1640, column: 18 }
                },
                '377': {
                  start: { line: 1648, column: 2 },
                  end: { line: 1653, column: 29 }
                },
                '378': { start: { line: 1695, column: 0 }, end: { line: 1787, column: 2 } },
                '379': {
                  start: { line: 1696, column: 2 },
                  end: { line: 1696, column: 49 }
                },
                '380': { start: { line: 1698, column: 2 }, end: { line: 1702, column: 3 } },
                '381': {
                  start: { line: 1699, column: 4 },
                  end: { line: 1699, column: 77 }
                },
                '382': {
                  start: { line: 1701, column: 4 },
                  end: { line: 1701, column: 18 }
                },
                '383': {
                  start: { line: 1703, column: 18 },
                  end: { line: 1703, column: 50 }
                },
                '384': {
                  start: { line: 1705, column: 17 },
                  end: { line: 1705, column: 30 }
                },
                '385': {
                  start: { line: 1707, column: 12 },
                  end: { line: 1707, column: 15 }
                },
                '386': { start: { line: 1708, column: 2 }, end: { line: 1710, column: 3 } },
                '387': {
                  start: { line: 1709, column: 4 },
                  end: { line: 1709, column: 15 }
                },
                '388': { start: { line: 1711, column: 2 }, end: { line: 1783, column: 3 } },
                '389': { start: { line: 1713, column: 4 }, end: { line: 1722, column: 5 } },
                '390': { start: { line: 1714, column: 6 }, end: { line: 1720, column: 7 } },
                '391': {
                  start: { line: 1714, column: 19 },
                  end: { line: 1714, column: 20 }
                },
                '392': { start: { line: 1715, column: 8 }, end: { line: 1719, column: 9 } },
                '393': {
                  start: { line: 1716, column: 10 },
                  end: { line: 1716, column: 41 }
                },
                '394': {
                  start: { line: 1718, column: 10 },
                  end: { line: 1718, column: 35 }
                },
                '395': {
                  start: { line: 1721, column: 6 },
                  end: { line: 1721, column: 26 }
                },
                '396': { start: { line: 1725, column: 4 }, end: { line: 1745, column: 5 } },
                '397': {
                  start: { line: 1725, column: 17 },
                  end: { line: 1725, column: 18 }
                },
                '398': { start: { line: 1727, column: 6 }, end: { line: 1743, column: 7 } },
                '399': { start: { line: 1728, column: 8 }, end: { line: 1742, column: 9 } },
                '400': {
                  start: { line: 1730, column: 10 },
                  end: { line: 1734, column: 11 }
                },
                '401': {
                  start: { line: 1731, column: 12 },
                  end: { line: 1731, column: 66 }
                },
                '402': {
                  start: { line: 1733, column: 12 },
                  end: { line: 1733, column: 54 }
                },
                '403': {
                  start: { line: 1737, column: 10 },
                  end: { line: 1741, column: 11 }
                },
                '404': {
                  start: { line: 1738, column: 12 },
                  end: { line: 1738, column: 60 }
                },
                '405': {
                  start: { line: 1740, column: 12 },
                  end: { line: 1740, column: 48 }
                },
                '406': {
                  start: { line: 1744, column: 6 },
                  end: { line: 1744, column: 26 }
                },
                '407': {
                  start: { line: 1748, column: 4 },
                  end: { line: 1748, column: 28 }
                },
                '408': {
                  start: { line: 1749, column: 4 },
                  end: { line: 1749, column: 28 }
                },
                '409': {
                  start: { line: 1750, column: 14 },
                  end: { line: 1750, column: 57 }
                },
                '410': {
                  start: { line: 1751, column: 4 },
                  end: { line: 1751, column: 43 }
                },
                '411': {
                  start: { line: 1752, column: 4 },
                  end: { line: 1752, column: 23 }
                },
                '412': {
                  start: { line: 1753, column: 4 },
                  end: { line: 1753, column: 29 }
                },
                '413': {
                  start: { line: 1755, column: 4 },
                  end: { line: 1755, column: 28 }
                },
                '414': {
                  start: { line: 1756, column: 4 },
                  end: { line: 1756, column: 31 }
                },
                '415': { start: { line: 1759, column: 4 }, end: { line: 1767, column: 5 } },
                '416': {
                  start: { line: 1760, column: 6 },
                  end: { line: 1760, column: 32 }
                },
                '417': { start: { line: 1761, column: 6 }, end: { line: 1765, column: 7 } },
                '418': {
                  start: { line: 1761, column: 19 },
                  end: { line: 1761, column: 20 }
                },
                '419': {
                  start: { line: 1762, column: 18 },
                  end: { line: 1762, column: 41 }
                },
                '420': {
                  start: { line: 1763, column: 8 },
                  end: { line: 1763, column: 40 }
                },
                '421': {
                  start: { line: 1764, column: 8 },
                  end: { line: 1764, column: 37 }
                },
                '422': {
                  start: { line: 1766, column: 6 },
                  end: { line: 1766, column: 33 }
                },
                '423': { start: { line: 1770, column: 4 }, end: { line: 1779, column: 5 } },
                '424': {
                  start: { line: 1770, column: 19 },
                  end: { line: 1770, column: 20 }
                },
                '425': {
                  start: { line: 1771, column: 6 },
                  end: { line: 1771, column: 32 }
                },
                '426': { start: { line: 1772, column: 6 }, end: { line: 1777, column: 7 } },
                '427': {
                  start: { line: 1772, column: 21 },
                  end: { line: 1772, column: 22 }
                },
                '428': {
                  start: { line: 1773, column: 22 },
                  end: { line: 1773, column: 52 }
                },
                '429': {
                  start: { line: 1774, column: 26 },
                  end: { line: 1774, column: 45 }
                },
                '430': {
                  start: { line: 1775, column: 8 },
                  end: { line: 1775, column: 48 }
                },
                '431': {
                  start: { line: 1776, column: 8 },
                  end: { line: 1776, column: 37 }
                },
                '432': {
                  start: { line: 1778, column: 6 },
                  end: { line: 1778, column: 33 }
                },
                '433': {
                  start: { line: 1780, column: 4 },
                  end: { line: 1780, column: 32 }
                },
                '434': {
                  start: { line: 1781, column: 4 },
                  end: { line: 1781, column: 29 }
                },
                '435': {
                  start: { line: 1782, column: 4 },
                  end: { line: 1782, column: 29 }
                },
                '436': {
                  start: { line: 1785, column: 2 },
                  end: { line: 1785, column: 18 }
                },
                '437': {
                  start: { line: 1786, column: 2 },
                  end: { line: 1786, column: 18 }
                },
                '438': { start: { line: 1800, column: 0 }, end: { line: 1809, column: 2 } },
                '439': {
                  start: { line: 1801, column: 13 },
                  end: { line: 1801, column: 39 }
                },
                '440': { start: { line: 1802, column: 2 }, end: { line: 1804, column: 3 } },
                '441': {
                  start: { line: 1803, column: 4 },
                  end: { line: 1803, column: 24 }
                },
                '442': {
                  start: { line: 1805, column: 15 },
                  end: { line: 1807, column: 4 }
                },
                '443': {
                  start: { line: 1808, column: 2 },
                  end: { line: 1808, column: 55 }
                },
                '444': { start: { line: 1824, column: 0 }, end: { line: 1855, column: 2 } },
                '445': {
                  start: { line: 1825, column: 13 },
                  end: { line: 1825, column: 50 }
                },
                '446': {
                  start: { line: 1826, column: 19 },
                  end: { line: 1826, column: 24 }
                },
                '447': { start: { line: 1828, column: 2 }, end: { line: 1831, column: 3 } },
                '448': {
                  start: { line: 1829, column: 4 },
                  end: { line: 1829, column: 37 }
                },
                '449': {
                  start: { line: 1830, column: 4 },
                  end: { line: 1830, column: 11 }
                },
                '450': {
                  start: { line: 1833, column: 12 },
                  end: { line: 1833, column: 39 }
                },
                '451': {
                  start: { line: 1834, column: 2 },
                  end: { line: 1834, column: 16 }
                },
                '452': {
                  start: { line: 1835, column: 2 },
                  end: { line: 1835, column: 24 }
                },
                '453': { start: { line: 1838, column: 2 }, end: { line: 1841, column: 4 } },
                '454': {
                  start: { line: 1839, column: 4 },
                  end: { line: 1839, column: 29 }
                },
                '455': {
                  start: { line: 1840, column: 4 },
                  end: { line: 1840, column: 24 }
                },
                '456': {
                  start: { line: 1843, column: 2 },
                  end: { line: 1843, column: 27 }
                },
                '457': {
                  start: { line: 1844, column: 2 },
                  end: { line: 1844, column: 31 }
                },
                '458': { start: { line: 1847, column: 2 }, end: { line: 1853, column: 3 } },
                '459': {
                  start: { line: 1848, column: 16 },
                  end: { line: 1848, column: 64 }
                },
                '460': {
                  start: { line: 1849, column: 4 },
                  end: { line: 1849, column: 44 }
                },
                '461': {
                  start: { line: 1850, column: 4 },
                  end: { line: 1850, column: 56 }
                },
                '462': {
                  start: { line: 1851, column: 4 },
                  end: { line: 1851, column: 59 }
                },
                '463': {
                  start: { line: 1852, column: 4 },
                  end: { line: 1852, column: 17 }
                },
                '464': {
                  start: { line: 1854, column: 2 },
                  end: { line: 1854, column: 12 }
                },
                '465': { start: { line: 1868, column: 2 }, end: { line: 1870, column: 3 } },
                '466': {
                  start: { line: 1869, column: 4 },
                  end: { line: 1869, column: 19 }
                },
                '467': { start: { line: 1871, column: 2 }, end: { line: 1873, column: 3 } },
                '468': {
                  start: { line: 1872, column: 4 },
                  end: { line: 1872, column: 26 }
                },
                '469': {
                  start: { line: 1874, column: 12 },
                  end: { line: 1874, column: 14 }
                },
                '470': { start: { line: 1876, column: 2 }, end: { line: 1878, column: 3 } },
                '471': {
                  start: { line: 1877, column: 4 },
                  end: { line: 1877, column: 36 }
                },
                '472': { start: { line: 1880, column: 2 }, end: { line: 1885, column: 3 } },
                '473': { start: { line: 1881, column: 4 }, end: { line: 1884, column: 5 } },
                '474': {
                  start: { line: 1882, column: 6 },
                  end: { line: 1882, column: 22 }
                },
                '475': {
                  start: { line: 1883, column: 6 },
                  end: { line: 1883, column: 38 }
                },
                '476': {
                  start: { line: 1886, column: 2 },
                  end: { line: 1886, column: 25 }
                },
                '477': {
                  start: { line: 1888, column: 0 },
                  end: { line: 1888, column: 55 }
                },
                '478': { start: { line: 1897, column: 0 }, end: { line: 1900, column: 2 } },
                '479': {
                  start: { line: 1898, column: 12 },
                  end: { line: 1898, column: 62 }
                },
                '480': {
                  start: { line: 1899, column: 2 },
                  end: { line: 1899, column: 38 }
                },
                '481': { start: { line: 1910, column: 2 }, end: { line: 1910, column: 42 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: {
                    start: { line: 119, column: 24 },
                    end: { line: 119, column: 25 }
                  },
                  loc: { start: { line: 119, column: 42 }, end: { line: 181, column: 1 } },
                  line: 119
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 158, column: 4 }, end: { line: 158, column: 5 } },
                  loc: { start: { line: 158, column: 12 }, end: { line: 167, column: 5 } },
                  line: 158
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: { start: { line: 168, column: 4 }, end: { line: 168, column: 5 } },
                  loc: { start: { line: 168, column: 11 }, end: { line: 177, column: 5 } },
                  line: 168
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 241, column: 27 },
                    end: { line: 241, column: 28 }
                  },
                  loc: { start: { line: 241, column: 45 }, end: { line: 301, column: 1 } },
                  line: 241
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: { start: { line: 264, column: 4 }, end: { line: 264, column: 5 } },
                  loc: { start: { line: 264, column: 12 }, end: { line: 287, column: 5 } },
                  line: 264
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: { start: { line: 288, column: 4 }, end: { line: 288, column: 5 } },
                  loc: { start: { line: 288, column: 18 }, end: { line: 297, column: 5 } },
                  line: 288
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 375, column: 25 },
                    end: { line: 375, column: 26 }
                  },
                  loc: { start: { line: 375, column: 40 }, end: { line: 564, column: 1 } },
                  line: 375
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: { start: { line: 421, column: 4 }, end: { line: 421, column: 5 } },
                  loc: { start: { line: 421, column: 12 }, end: { line: 550, column: 5 } },
                  line: 421
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 439, column: 25 },
                    end: { line: 439, column: 26 }
                  },
                  loc: { start: { line: 439, column: 31 }, end: { line: 442, column: 7 } },
                  line: 439
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 444, column: 23 },
                    end: { line: 444, column: 24 }
                  },
                  loc: { start: { line: 444, column: 29 }, end: { line: 447, column: 7 } },
                  line: 444
                },
                '10': {
                  name: '(anonymous_10)',
                  decl: {
                    start: { line: 449, column: 26 },
                    end: { line: 449, column: 27 }
                  },
                  loc: { start: { line: 449, column: 32 }, end: { line: 453, column: 7 } },
                  line: 449
                },
                '11': {
                  name: '(anonymous_11)',
                  decl: {
                    start: { line: 455, column: 24 },
                    end: { line: 455, column: 25 }
                  },
                  loc: { start: { line: 455, column: 30 }, end: { line: 459, column: 7 } },
                  line: 455
                },
                '12': {
                  name: '(anonymous_12)',
                  decl: { start: { line: 551, column: 4 }, end: { line: 551, column: 5 } },
                  loc: { start: { line: 551, column: 11 }, end: { line: 560, column: 5 } },
                  line: 551
                },
                '13': {
                  name: 'makeObject',
                  decl: { start: { line: 567, column: 9 }, end: { line: 567, column: 19 } },
                  loc: { start: { line: 567, column: 34 }, end: { line: 581, column: 1 } },
                  line: 567
                },
                '14': {
                  name: '(anonymous_14)',
                  decl: {
                    start: { line: 648, column: 23 },
                    end: { line: 648, column: 24 }
                  },
                  loc: { start: { line: 648, column: 41 }, end: { line: 691, column: 1 } },
                  line: 648
                },
                '15': {
                  name: '(anonymous_15)',
                  decl: { start: { line: 668, column: 4 }, end: { line: 668, column: 5 } },
                  loc: { start: { line: 668, column: 11 }, end: { line: 677, column: 5 } },
                  line: 668
                },
                '16': {
                  name: '(anonymous_16)',
                  decl: { start: { line: 678, column: 4 }, end: { line: 678, column: 5 } },
                  loc: { start: { line: 678, column: 18 }, end: { line: 687, column: 5 } },
                  line: 678
                },
                '17': {
                  name: '(anonymous_17)',
                  decl: {
                    start: { line: 721, column: 25 },
                    end: { line: 721, column: 26 }
                  },
                  loc: { start: { line: 721, column: 65 }, end: { line: 750, column: 1 } },
                  line: 721
                },
                '18': {
                  name: '(anonymous_18)',
                  decl: { start: { line: 729, column: 4 }, end: { line: 729, column: 5 } },
                  loc: { start: { line: 729, column: 19 }, end: { line: 737, column: 5 } },
                  line: 729
                },
                '19': {
                  name: '(anonymous_19)',
                  decl: { start: { line: 738, column: 4 }, end: { line: 738, column: 5 } },
                  loc: { start: { line: 738, column: 11 }, end: { line: 747, column: 5 } },
                  line: 738
                },
                '20': {
                  name: '(anonymous_20)',
                  decl: {
                    start: { line: 821, column: 23 },
                    end: { line: 821, column: 24 }
                  },
                  loc: { start: { line: 821, column: 34 }, end: { line: 827, column: 1 } },
                  line: 821
                },
                '21': {
                  name: '(anonymous_21)',
                  decl: {
                    start: { line: 911, column: 24 },
                    end: { line: 911, column: 25 }
                  },
                  loc: { start: { line: 911, column: 35 }, end: { line: 917, column: 1 } },
                  line: 911
                },
                '22': {
                  name: '(anonymous_22)',
                  decl: {
                    start: { line: 1000, column: 22 },
                    end: { line: 1000, column: 23 }
                  },
                  loc: {
                    start: { line: 1000, column: 40 },
                    end: { line: 1142, column: 1 }
                  },
                  line: 1000
                },
                '23': {
                  name: '(anonymous_23)',
                  decl: {
                    start: { line: 1106, column: 25 },
                    end: { line: 1106, column: 26 }
                  },
                  loc: {
                    start: { line: 1106, column: 32 },
                    end: { line: 1138, column: 3 }
                  },
                  line: 1106
                },
                '24': {
                  name: '(anonymous_24)',
                  decl: {
                    start: { line: 1129, column: 33 },
                    end: { line: 1129, column: 34 }
                  },
                  loc: {
                    start: { line: 1129, column: 41 },
                    end: { line: 1133, column: 11 }
                  },
                  line: 1129
                },
                '25': {
                  name: '(anonymous_25)',
                  decl: {
                    start: { line: 1139, column: 28 },
                    end: { line: 1139, column: 29 }
                  },
                  loc: {
                    start: { line: 1139, column: 34 },
                    end: { line: 1139, column: 36 }
                  },
                  line: 1139
                },
                '26': {
                  name: '(anonymous_26)',
                  decl: {
                    start: { line: 1182, column: 28 },
                    end: { line: 1182, column: 29 }
                  },
                  loc: {
                    start: { line: 1182, column: 54 },
                    end: { line: 1198, column: 1 }
                  },
                  line: 1182
                },
                '27': {
                  name: '(anonymous_27)',
                  decl: {
                    start: { line: 1205, column: 17 },
                    end: { line: 1205, column: 18 }
                  },
                  loc: {
                    start: { line: 1205, column: 47 },
                    end: { line: 1382, column: 1 }
                  },
                  line: 1205
                },
                '28': {
                  name: '(anonymous_28)',
                  decl: {
                    start: { line: 1266, column: 15 },
                    end: { line: 1266, column: 16 }
                  },
                  loc: {
                    start: { line: 1266, column: 30 },
                    end: { line: 1268, column: 3 }
                  },
                  line: 1266
                },
                '29': {
                  name: '(anonymous_29)',
                  decl: {
                    start: { line: 1307, column: 15 },
                    end: { line: 1307, column: 16 }
                  },
                  loc: {
                    start: { line: 1307, column: 30 },
                    end: { line: 1309, column: 3 }
                  },
                  line: 1307
                },
                '30': {
                  name: '(anonymous_30)',
                  decl: {
                    start: { line: 1341, column: 15 },
                    end: { line: 1341, column: 16 }
                  },
                  loc: {
                    start: { line: 1341, column: 26 },
                    end: { line: 1343, column: 3 }
                  },
                  line: 1341
                },
                '31': {
                  name: '(anonymous_31)',
                  decl: {
                    start: { line: 1367, column: 15 },
                    end: { line: 1367, column: 16 }
                  },
                  loc: {
                    start: { line: 1367, column: 26 },
                    end: { line: 1381, column: 3 }
                  },
                  line: 1367
                },
                '32': {
                  name: '(anonymous_32)',
                  decl: {
                    start: { line: 1488, column: 20 },
                    end: { line: 1488, column: 21 }
                  },
                  loc: {
                    start: { line: 1488, column: 58 },
                    end: { line: 1533, column: 1 }
                  },
                  line: 1488
                },
                '33': {
                  name: '(anonymous_33)',
                  decl: {
                    start: { line: 1578, column: 24 },
                    end: { line: 1578, column: 25 }
                  },
                  loc: {
                    start: { line: 1578, column: 54 },
                    end: { line: 1587, column: 1 }
                  },
                  line: 1578
                },
                '34': {
                  name: '(anonymous_34)',
                  decl: {
                    start: { line: 1632, column: 27 },
                    end: { line: 1632, column: 28 }
                  },
                  loc: {
                    start: { line: 1632, column: 71 },
                    end: { line: 1641, column: 1 }
                  },
                  line: 1632
                },
                '35': {
                  name: 'escapeHelper',
                  decl: {
                    start: { line: 1647, column: 9 },
                    end: { line: 1647, column: 21 }
                  },
                  loc: {
                    start: { line: 1647, column: 31 },
                    end: { line: 1654, column: 1 }
                  },
                  line: 1647
                },
                '36': {
                  name: '(anonymous_36)',
                  decl: {
                    start: { line: 1695, column: 25 },
                    end: { line: 1695, column: 26 }
                  },
                  loc: {
                    start: { line: 1695, column: 60 },
                    end: { line: 1787, column: 1 }
                  },
                  line: 1695
                },
                '37': {
                  name: '(anonymous_37)',
                  decl: {
                    start: { line: 1800, column: 25 },
                    end: { line: 1800, column: 26 }
                  },
                  loc: {
                    start: { line: 1800, column: 71 },
                    end: { line: 1809, column: 1 }
                  },
                  line: 1800
                },
                '38': {
                  name: '(anonymous_38)',
                  decl: {
                    start: { line: 1824, column: 28 },
                    end: { line: 1824, column: 29 }
                  },
                  loc: {
                    start: { line: 1824, column: 61 },
                    end: { line: 1855, column: 1 }
                  },
                  line: 1824
                },
                '39': {
                  name: '(anonymous_39)',
                  decl: {
                    start: { line: 1838, column: 14 },
                    end: { line: 1838, column: 15 }
                  },
                  loc: {
                    start: { line: 1838, column: 19 },
                    end: { line: 1841, column: 3 }
                  },
                  line: 1838
                },
                '40': {
                  name: '_checkFileExtension',
                  decl: {
                    start: { line: 1867, column: 9 },
                    end: { line: 1867, column: 28 }
                  },
                  loc: {
                    start: { line: 1867, column: 50 },
                    end: { line: 1887, column: 1 }
                  },
                  line: 1867
                },
                '41': {
                  name: '(anonymous_41)',
                  decl: {
                    start: { line: 1897, column: 25 },
                    end: { line: 1897, column: 26 }
                  },
                  loc: {
                    start: { line: 1897, column: 36 },
                    end: { line: 1900, column: 1 }
                  },
                  line: 1897
                },
                '42': {
                  name: 'destroyClickedElement',
                  decl: {
                    start: { line: 1909, column: 9 },
                    end: { line: 1909, column: 30 }
                  },
                  loc: {
                    start: { line: 1909, column: 38 },
                    end: { line: 1911, column: 1 }
                  },
                  line: 1909
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 132, column: 4 }, end: { line: 149, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 132, column: 4 }, end: { line: 149, column: 5 } },
                    { start: { line: 132, column: 4 }, end: { line: 149, column: 5 } }
                  ],
                  line: 132
                },
                '1': {
                  loc: { start: { line: 133, column: 6 }, end: { line: 135, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 133, column: 6 }, end: { line: 135, column: 7 } },
                    { start: { line: 133, column: 6 }, end: { line: 135, column: 7 } }
                  ],
                  line: 133
                },
                '2': {
                  loc: { start: { line: 133, column: 10 }, end: { line: 133, column: 43 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 133, column: 10 }, end: { line: 133, column: 25 } },
                    { start: { line: 133, column: 29 }, end: { line: 133, column: 43 } }
                  ],
                  line: 133
                },
                '3': {
                  loc: { start: { line: 136, column: 11 }, end: { line: 149, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 136, column: 11 }, end: { line: 149, column: 5 } },
                    { start: { line: 136, column: 11 }, end: { line: 149, column: 5 } }
                  ],
                  line: 136
                },
                '4': {
                  loc: { start: { line: 137, column: 6 }, end: { line: 141, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 137, column: 6 }, end: { line: 141, column: 7 } },
                    { start: { line: 137, column: 6 }, end: { line: 141, column: 7 } }
                  ],
                  line: 137
                },
                '5': {
                  loc: { start: { line: 142, column: 11 }, end: { line: 149, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 142, column: 11 }, end: { line: 149, column: 5 } },
                    { start: { line: 142, column: 11 }, end: { line: 149, column: 5 } }
                  ],
                  line: 142
                },
                '6': {
                  loc: { start: { line: 143, column: 6 }, end: { line: 145, column: 52 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 143, column: 6 }, end: { line: 143, column: 29 } },
                    { start: { line: 144, column: 7 }, end: { line: 144, column: 42 } },
                    { start: { line: 145, column: 8 }, end: { line: 145, column: 51 } }
                  ],
                  line: 143
                },
                '7': {
                  loc: { start: { line: 162, column: 6 }, end: { line: 164, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 162, column: 6 }, end: { line: 164, column: 7 } },
                    { start: { line: 162, column: 6 }, end: { line: 164, column: 7 } }
                  ],
                  line: 162
                },
                '8': {
                  loc: { start: { line: 172, column: 6 }, end: { line: 176, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 172, column: 6 }, end: { line: 176, column: 7 } },
                    { start: { line: 172, column: 6 }, end: { line: 176, column: 7 } }
                  ],
                  line: 172
                },
                '9': {
                  loc: { start: { line: 249, column: 4 }, end: { line: 255, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 249, column: 4 }, end: { line: 255, column: 5 } },
                    { start: { line: 249, column: 4 }, end: { line: 255, column: 5 } }
                  ],
                  line: 249
                },
                '10': {
                  loc: { start: { line: 250, column: 6 }, end: { line: 254, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 250, column: 6 }, end: { line: 254, column: 7 } },
                    { start: { line: 250, column: 6 }, end: { line: 254, column: 7 } }
                  ],
                  line: 250
                },
                '11': {
                  loc: { start: { line: 252, column: 13 }, end: { line: 254, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 252, column: 13 }, end: { line: 254, column: 7 } },
                    { start: { line: 252, column: 13 }, end: { line: 254, column: 7 } }
                  ],
                  line: 252
                },
                '12': {
                  loc: { start: { line: 282, column: 6 }, end: { line: 284, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 282, column: 6 }, end: { line: 284, column: 7 } },
                    { start: { line: 282, column: 6 }, end: { line: 284, column: 7 } }
                  ],
                  line: 282
                },
                '13': {
                  loc: { start: { line: 292, column: 6 }, end: { line: 296, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 292, column: 6 }, end: { line: 296, column: 7 } },
                    { start: { line: 292, column: 6 }, end: { line: 296, column: 7 } }
                  ],
                  line: 292
                },
                '14': {
                  loc: { start: { line: 384, column: 2 }, end: { line: 390, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 384, column: 2 }, end: { line: 390, column: 3 } },
                    { start: { line: 384, column: 2 }, end: { line: 390, column: 3 } }
                  ],
                  line: 384
                },
                '15': {
                  loc: { start: { line: 386, column: 9 }, end: { line: 390, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 386, column: 9 }, end: { line: 390, column: 3 } },
                    { start: { line: 386, column: 9 }, end: { line: 390, column: 3 } }
                  ],
                  line: 386
                },
                '16': {
                  loc: { start: { line: 388, column: 9 }, end: { line: 390, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 388, column: 9 }, end: { line: 390, column: 3 } },
                    { start: { line: 388, column: 9 }, end: { line: 390, column: 3 } }
                  ],
                  line: 388
                },
                '17': {
                  loc: { start: { line: 393, column: 4 }, end: { line: 411, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 393, column: 4 }, end: { line: 411, column: 5 } },
                    { start: { line: 393, column: 4 }, end: { line: 411, column: 5 } }
                  ],
                  line: 393
                },
                '18': {
                  loc: { start: { line: 394, column: 6 }, end: { line: 398, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 394, column: 6 }, end: { line: 398, column: 7 } },
                    { start: { line: 394, column: 6 }, end: { line: 398, column: 7 } }
                  ],
                  line: 394
                },
                '19': {
                  loc: { start: { line: 396, column: 13 }, end: { line: 398, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 396, column: 13 }, end: { line: 398, column: 7 } },
                    { start: { line: 396, column: 13 }, end: { line: 398, column: 7 } }
                  ],
                  line: 396
                },
                '20': {
                  loc: { start: { line: 399, column: 11 }, end: { line: 411, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 399, column: 11 }, end: { line: 411, column: 5 } },
                    { start: { line: 399, column: 11 }, end: { line: 411, column: 5 } }
                  ],
                  line: 399
                },
                '21': {
                  loc: { start: { line: 401, column: 6 }, end: { line: 403, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 401, column: 6 }, end: { line: 403, column: 7 } },
                    { start: { line: 401, column: 6 }, end: { line: 403, column: 7 } }
                  ],
                  line: 401
                },
                '22': {
                  loc: { start: { line: 404, column: 6 }, end: { line: 410, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 404, column: 6 }, end: { line: 410, column: 7 } },
                    { start: { line: 404, column: 6 }, end: { line: 410, column: 7 } }
                  ],
                  line: 404
                },
                '23': {
                  loc: { start: { line: 406, column: 13 }, end: { line: 410, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 406, column: 13 }, end: { line: 410, column: 7 } },
                    { start: { line: 406, column: 13 }, end: { line: 410, column: 7 } }
                  ],
                  line: 406
                },
                '24': {
                  loc: { start: { line: 408, column: 13 }, end: { line: 410, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 408, column: 13 }, end: { line: 410, column: 7 } },
                    { start: { line: 408, column: 13 }, end: { line: 410, column: 7 } }
                  ],
                  line: 408
                },
                '25': {
                  loc: { start: { line: 465, column: 8 }, end: { line: 474, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 465, column: 8 }, end: { line: 474, column: 9 } },
                    { start: { line: 465, column: 8 }, end: { line: 474, column: 9 } }
                  ],
                  line: 465
                },
                '26': {
                  loc: { start: { line: 466, column: 10 }, end: { line: 468, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 466, column: 10 }, end: { line: 468, column: 11 } },
                    { start: { line: 466, column: 10 }, end: { line: 468, column: 11 } }
                  ],
                  line: 466
                },
                '27': {
                  loc: { start: { line: 469, column: 10 }, end: { line: 473, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 469, column: 10 }, end: { line: 473, column: 11 } },
                    { start: { line: 469, column: 10 }, end: { line: 473, column: 11 } }
                  ],
                  line: 469
                },
                '28': {
                  loc: { start: { line: 475, column: 8 }, end: { line: 477, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 475, column: 8 }, end: { line: 477, column: 9 } },
                    { start: { line: 475, column: 8 }, end: { line: 477, column: 9 } }
                  ],
                  line: 475
                },
                '29': {
                  loc: { start: { line: 480, column: 8 }, end: { line: 487, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 480, column: 8 }, end: { line: 487, column: 9 } },
                    { start: { line: 480, column: 8 }, end: { line: 487, column: 9 } }
                  ],
                  line: 480
                },
                '30': {
                  loc: { start: { line: 481, column: 10 }, end: { line: 485, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 481, column: 10 }, end: { line: 485, column: 11 } },
                    { start: { line: 481, column: 10 }, end: { line: 485, column: 11 } }
                  ],
                  line: 481
                },
                '31': {
                  loc: { start: { line: 490, column: 8 }, end: { line: 505, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 490, column: 8 }, end: { line: 505, column: 9 } },
                    { start: { line: 490, column: 8 }, end: { line: 505, column: 9 } }
                  ],
                  line: 490
                },
                '32': {
                  loc: { start: { line: 490, column: 12 }, end: { line: 490, column: 61 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 490, column: 12 }, end: { line: 490, column: 44 } },
                    { start: { line: 490, column: 48 }, end: { line: 490, column: 61 } }
                  ],
                  line: 490
                },
                '33': {
                  loc: { start: { line: 491, column: 10 }, end: { line: 503, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 491, column: 10 }, end: { line: 503, column: 11 } },
                    { start: { line: 491, column: 10 }, end: { line: 503, column: 11 } }
                  ],
                  line: 491
                },
                '34': {
                  loc: { start: { line: 492, column: 12 }, end: { line: 498, column: 13 } },
                  type: 'if',
                  locations: [
                    { start: { line: 492, column: 12 }, end: { line: 498, column: 13 } },
                    { start: { line: 492, column: 12 }, end: { line: 498, column: 13 } }
                  ],
                  line: 492
                },
                '35': {
                  loc: { start: { line: 499, column: 17 }, end: { line: 503, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 499, column: 17 }, end: { line: 503, column: 11 } },
                    { start: { line: 499, column: 17 }, end: { line: 503, column: 11 } }
                  ],
                  line: 499
                },
                '36': {
                  loc: { start: { line: 508, column: 8 }, end: { line: 521, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 508, column: 8 }, end: { line: 521, column: 9 } },
                    { start: { line: 508, column: 8 }, end: { line: 521, column: 9 } }
                  ],
                  line: 508
                },
                '37': {
                  loc: { start: { line: 509, column: 10 }, end: { line: 511, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 509, column: 10 }, end: { line: 511, column: 11 } },
                    { start: { line: 509, column: 10 }, end: { line: 511, column: 11 } }
                  ],
                  line: 509
                },
                '38': {
                  loc: { start: { line: 514, column: 15 }, end: { line: 521, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 514, column: 15 }, end: { line: 521, column: 9 } },
                    { start: { line: 514, column: 15 }, end: { line: 521, column: 9 } }
                  ],
                  line: 514
                },
                '39': {
                  loc: { start: { line: 517, column: 15 }, end: { line: 521, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 517, column: 15 }, end: { line: 521, column: 9 } },
                    { start: { line: 517, column: 15 }, end: { line: 521, column: 9 } }
                  ],
                  line: 517
                },
                '40': {
                  loc: { start: { line: 519, column: 15 }, end: { line: 521, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 519, column: 15 }, end: { line: 521, column: 9 } },
                    { start: { line: 519, column: 15 }, end: { line: 521, column: 9 } }
                  ],
                  line: 519
                },
                '41': {
                  loc: { start: { line: 525, column: 6 }, end: { line: 531, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 525, column: 6 }, end: { line: 531, column: 7 } },
                    { start: { line: 525, column: 6 }, end: { line: 531, column: 7 } }
                  ],
                  line: 525
                },
                '42': {
                  loc: { start: { line: 535, column: 8 }, end: { line: 539, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 535, column: 8 }, end: { line: 539, column: 9 } },
                    { start: { line: 535, column: 8 }, end: { line: 539, column: 9 } }
                  ],
                  line: 535
                },
                '43': {
                  loc: { start: { line: 536, column: 10 }, end: { line: 538, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 536, column: 10 }, end: { line: 538, column: 11 } },
                    { start: { line: 536, column: 10 }, end: { line: 538, column: 11 } }
                  ],
                  line: 536
                },
                '44': {
                  loc: { start: { line: 536, column: 14 }, end: { line: 536, column: 67 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 536, column: 14 }, end: { line: 536, column: 43 } },
                    { start: { line: 536, column: 47 }, end: { line: 536, column: 67 } }
                  ],
                  line: 536
                },
                '45': {
                  loc: { start: { line: 545, column: 6 }, end: { line: 547, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 545, column: 6 }, end: { line: 547, column: 7 } },
                    { start: { line: 545, column: 6 }, end: { line: 547, column: 7 } }
                  ],
                  line: 545
                },
                '46': {
                  loc: { start: { line: 555, column: 6 }, end: { line: 559, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 555, column: 6 }, end: { line: 559, column: 7 } },
                    { start: { line: 555, column: 6 }, end: { line: 559, column: 7 } }
                  ],
                  line: 555
                },
                '47': {
                  loc: { start: { line: 569, column: 12 }, end: { line: 569, column: 25 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 569, column: 12 }, end: { line: 569, column: 19 } },
                    { start: { line: 569, column: 23 }, end: { line: 569, column: 25 } }
                  ],
                  line: 569
                },
                '48': {
                  loc: { start: { line: 570, column: 2 }, end: { line: 574, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 570, column: 2 }, end: { line: 574, column: 3 } },
                    { start: { line: 570, column: 2 }, end: { line: 574, column: 3 } }
                  ],
                  line: 570
                },
                '49': {
                  loc: { start: { line: 654, column: 4 }, end: { line: 660, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 654, column: 4 }, end: { line: 660, column: 5 } },
                    { start: { line: 654, column: 4 }, end: { line: 660, column: 5 } }
                  ],
                  line: 654
                },
                '50': {
                  loc: { start: { line: 655, column: 6 }, end: { line: 659, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 655, column: 6 }, end: { line: 659, column: 7 } },
                    { start: { line: 655, column: 6 }, end: { line: 659, column: 7 } }
                  ],
                  line: 655
                },
                '51': {
                  loc: { start: { line: 657, column: 13 }, end: { line: 659, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 657, column: 13 }, end: { line: 659, column: 7 } },
                    { start: { line: 657, column: 13 }, end: { line: 659, column: 7 } }
                  ],
                  line: 657
                },
                '52': {
                  loc: { start: { line: 672, column: 6 }, end: { line: 674, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 672, column: 6 }, end: { line: 674, column: 7 } },
                    { start: { line: 672, column: 6 }, end: { line: 674, column: 7 } }
                  ],
                  line: 672
                },
                '53': {
                  loc: { start: { line: 682, column: 6 }, end: { line: 686, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 682, column: 6 }, end: { line: 686, column: 7 } },
                    { start: { line: 682, column: 6 }, end: { line: 686, column: 7 } }
                  ],
                  line: 682
                },
                '54': {
                  loc: { start: { line: 732, column: 6 }, end: { line: 734, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 732, column: 6 }, end: { line: 734, column: 7 } },
                    { start: { line: 732, column: 6 }, end: { line: 734, column: 7 } }
                  ],
                  line: 732
                },
                '55': {
                  loc: { start: { line: 742, column: 6 }, end: { line: 746, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 742, column: 6 }, end: { line: 746, column: 7 } },
                    { start: { line: 742, column: 6 }, end: { line: 746, column: 7 } }
                  ],
                  line: 742
                },
                '56': {
                  loc: { start: { line: 1011, column: 4 }, end: { line: 1015, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1011, column: 4 }, end: { line: 1015, column: 5 } },
                    { start: { line: 1011, column: 4 }, end: { line: 1015, column: 5 } }
                  ],
                  line: 1011
                },
                '57': {
                  loc: { start: { line: 1020, column: 2 }, end: { line: 1089, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1020, column: 2 }, end: { line: 1089, column: 3 } },
                    { start: { line: 1020, column: 2 }, end: { line: 1089, column: 3 } }
                  ],
                  line: 1020
                },
                '58': {
                  loc: {
                    start: { line: 1021, column: 4 },
                    end: { line: 1023, column: 31 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1021, column: 4 }, end: { line: 1021, column: 19 } },
                    { start: { line: 1022, column: 4 }, end: { line: 1022, column: 28 } },
                    { start: { line: 1023, column: 4 }, end: { line: 1023, column: 31 } }
                  ],
                  line: 1021
                },
                '59': {
                  loc: { start: { line: 1036, column: 6 }, end: { line: 1075, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1036, column: 6 }, end: { line: 1075, column: 7 } },
                    { start: { line: 1036, column: 6 }, end: { line: 1075, column: 7 } }
                  ],
                  line: 1036
                },
                '60': {
                  loc: { start: { line: 1037, column: 8 }, end: { line: 1051, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1037, column: 8 }, end: { line: 1051, column: 9 } },
                    { start: { line: 1037, column: 8 }, end: { line: 1051, column: 9 } }
                  ],
                  line: 1037
                },
                '61': {
                  loc: {
                    start: { line: 1037, column: 12 },
                    end: { line: 1037, column: 72 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1037, column: 12 }, end: { line: 1037, column: 23 } },
                    { start: { line: 1037, column: 27 }, end: { line: 1037, column: 39 } },
                    { start: { line: 1037, column: 43 }, end: { line: 1037, column: 54 } },
                    { start: { line: 1037, column: 58 }, end: { line: 1037, column: 72 } }
                  ],
                  line: 1037
                },
                '62': {
                  loc: {
                    start: { line: 1039, column: 15 },
                    end: { line: 1051, column: 9 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1039, column: 15 }, end: { line: 1051, column: 9 } },
                    { start: { line: 1039, column: 15 }, end: { line: 1051, column: 9 } }
                  ],
                  line: 1039
                },
                '63': {
                  loc: {
                    start: { line: 1040, column: 10 },
                    end: { line: 1046, column: 23 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1040, column: 10 }, end: { line: 1040, column: 22 } },
                    { start: { line: 1041, column: 10 }, end: { line: 1041, column: 23 } },
                    { start: { line: 1042, column: 10 }, end: { line: 1042, column: 24 } },
                    { start: { line: 1043, column: 10 }, end: { line: 1043, column: 29 } },
                    { start: { line: 1044, column: 10 }, end: { line: 1044, column: 21 } },
                    { start: { line: 1045, column: 10 }, end: { line: 1045, column: 22 } },
                    { start: { line: 1046, column: 10 }, end: { line: 1046, column: 23 } }
                  ],
                  line: 1040
                },
                '64': {
                  loc: {
                    start: { line: 1052, column: 13 },
                    end: { line: 1075, column: 7 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1052, column: 13 }, end: { line: 1075, column: 7 } },
                    { start: { line: 1052, column: 13 }, end: { line: 1075, column: 7 } }
                  ],
                  line: 1052
                },
                '65': {
                  loc: {
                    start: { line: 1054, column: 13 },
                    end: { line: 1075, column: 7 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1054, column: 13 }, end: { line: 1075, column: 7 } },
                    { start: { line: 1054, column: 13 }, end: { line: 1075, column: 7 } }
                  ],
                  line: 1054
                },
                '66': {
                  loc: { start: { line: 1055, column: 8 }, end: { line: 1068, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1055, column: 8 }, end: { line: 1068, column: 9 } },
                    { start: { line: 1055, column: 8 }, end: { line: 1068, column: 9 } }
                  ],
                  line: 1055
                },
                '67': {
                  loc: {
                    start: { line: 1056, column: 10 },
                    end: { line: 1057, column: 51 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1056, column: 10 }, end: { line: 1056, column: 43 } },
                    { start: { line: 1057, column: 10 }, end: { line: 1057, column: 51 } }
                  ],
                  line: 1056
                },
                '68': {
                  loc: {
                    start: { line: 1062, column: 15 },
                    end: { line: 1068, column: 9 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1062, column: 15 }, end: { line: 1068, column: 9 } },
                    { start: { line: 1062, column: 15 }, end: { line: 1068, column: 9 } }
                  ],
                  line: 1062
                },
                '69': {
                  loc: {
                    start: { line: 1069, column: 13 },
                    end: { line: 1075, column: 7 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1069, column: 13 }, end: { line: 1075, column: 7 } },
                    { start: { line: 1069, column: 13 }, end: { line: 1075, column: 7 } }
                  ],
                  line: 1069
                },
                '70': {
                  loc: { start: { line: 1070, column: 8 }, end: { line: 1074, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1070, column: 8 }, end: { line: 1074, column: 9 } },
                    { start: { line: 1070, column: 8 }, end: { line: 1074, column: 9 } }
                  ],
                  line: 1070
                },
                '71': {
                  loc: {
                    start: { line: 1079, column: 6 },
                    end: { line: 1081, column: 54 }
                  },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 1080, column: 10 }, end: { line: 1080, column: 23 } },
                    { start: { line: 1081, column: 10 }, end: { line: 1081, column: 54 } }
                  ],
                  line: 1079
                },
                '72': {
                  loc: { start: { line: 1091, column: 2 }, end: { line: 1099, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1091, column: 2 }, end: { line: 1099, column: 3 } },
                    { start: { line: 1091, column: 2 }, end: { line: 1099, column: 3 } }
                  ],
                  line: 1091
                },
                '73': {
                  loc: { start: { line: 1092, column: 4 }, end: { line: 1098, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1092, column: 4 }, end: { line: 1098, column: 5 } },
                    { start: { line: 1092, column: 4 }, end: { line: 1098, column: 5 } }
                  ],
                  line: 1092
                },
                '74': {
                  loc: {
                    start: { line: 1094, column: 11 },
                    end: { line: 1098, column: 5 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1094, column: 11 }, end: { line: 1098, column: 5 } },
                    { start: { line: 1094, column: 11 }, end: { line: 1098, column: 5 } }
                  ],
                  line: 1094
                },
                '75': {
                  loc: { start: { line: 1101, column: 2 }, end: { line: 1105, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1101, column: 2 }, end: { line: 1105, column: 3 } },
                    { start: { line: 1101, column: 2 }, end: { line: 1105, column: 3 } }
                  ],
                  line: 1101
                },
                '76': {
                  loc: { start: { line: 1107, column: 4 }, end: { line: 1137, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1107, column: 4 }, end: { line: 1137, column: 5 } },
                    { start: { line: 1107, column: 4 }, end: { line: 1137, column: 5 } }
                  ],
                  line: 1107
                },
                '77': {
                  loc: { start: { line: 1114, column: 6 }, end: { line: 1116, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1114, column: 6 }, end: { line: 1116, column: 7 } },
                    { start: { line: 1114, column: 6 }, end: { line: 1116, column: 7 } }
                  ],
                  line: 1114
                },
                '78': {
                  loc: { start: { line: 1117, column: 6 }, end: { line: 1119, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1117, column: 6 }, end: { line: 1119, column: 7 } },
                    { start: { line: 1117, column: 6 }, end: { line: 1119, column: 7 } }
                  ],
                  line: 1117
                },
                '79': {
                  loc: {
                    start: { line: 1117, column: 10 },
                    end: { line: 1117, column: 41 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1117, column: 10 }, end: { line: 1117, column: 18 } },
                    { start: { line: 1117, column: 22 }, end: { line: 1117, column: 41 } }
                  ],
                  line: 1117
                },
                '80': {
                  loc: { start: { line: 1120, column: 6 }, end: { line: 1136, column: 7 } },
                  type: 'switch',
                  locations: [
                    { start: { line: 1121, column: 8 }, end: { line: 1121, column: 20 } },
                    { start: { line: 1122, column: 8 }, end: { line: 1123, column: 28 } },
                    { start: { line: 1124, column: 8 }, end: { line: 1125, column: 28 } },
                    { start: { line: 1126, column: 8 }, end: { line: 1127, column: 35 } },
                    { start: { line: 1128, column: 8 }, end: { line: 1133, column: 13 } },
                    { start: { line: 1134, column: 8 }, end: { line: 1135, column: 28 } }
                  ],
                  line: 1120
                },
                '81': {
                  loc: {
                    start: { line: 1139, column: 15 },
                    end: { line: 1139, column: 37 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1139, column: 15 }, end: { line: 1139, column: 23 } },
                    { start: { line: 1139, column: 28 }, end: { line: 1139, column: 36 } }
                  ],
                  line: 1139
                },
                '82': {
                  loc: {
                    start: { line: 1140, column: 16 },
                    end: { line: 1140, column: 46 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1140, column: 16 }, end: { line: 1140, column: 29 } },
                    { start: { line: 1140, column: 33 }, end: { line: 1140, column: 46 } }
                  ],
                  line: 1140
                },
                '83': {
                  loc: {
                    start: { line: 1150, column: 13 },
                    end: { line: 1150, column: 43 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1150, column: 13 }, end: { line: 1150, column: 23 } },
                    { start: { line: 1150, column: 27 }, end: { line: 1150, column: 43 } }
                  ],
                  line: 1150
                },
                '84': {
                  loc: { start: { line: 1186, column: 4 }, end: { line: 1193, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1186, column: 4 }, end: { line: 1193, column: 5 } },
                    { start: { line: 1186, column: 4 }, end: { line: 1193, column: 5 } }
                  ],
                  line: 1186
                },
                '85': {
                  loc: { start: { line: 1374, column: 6 }, end: { line: 1377, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1374, column: 6 }, end: { line: 1377, column: 7 } },
                    { start: { line: 1374, column: 6 }, end: { line: 1377, column: 7 } }
                  ],
                  line: 1374
                },
                '86': {
                  loc: {
                    start: { line: 1495, column: 14 },
                    end: { line: 1495, column: 64 }
                  },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 1495, column: 33 }, end: { line: 1495, column: 53 } },
                    { start: { line: 1495, column: 56 }, end: { line: 1495, column: 64 } }
                  ],
                  line: 1495
                },
                '87': {
                  loc: { start: { line: 1496, column: 2 }, end: { line: 1532, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1496, column: 2 }, end: { line: 1532, column: 3 } },
                    { start: { line: 1496, column: 2 }, end: { line: 1532, column: 3 } }
                  ],
                  line: 1496
                },
                '88': {
                  loc: { start: { line: 1499, column: 9 }, end: { line: 1532, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1499, column: 9 }, end: { line: 1532, column: 3 } },
                    { start: { line: 1499, column: 9 }, end: { line: 1532, column: 3 } }
                  ],
                  line: 1499
                },
                '89': {
                  loc: {
                    start: { line: 1499, column: 13 },
                    end: { line: 1499, column: 77 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1499, column: 13 }, end: { line: 1499, column: 43 } },
                    { start: { line: 1499, column: 47 }, end: { line: 1499, column: 77 } }
                  ],
                  line: 1499
                },
                '90': {
                  loc: { start: { line: 1505, column: 9 }, end: { line: 1532, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1505, column: 9 }, end: { line: 1532, column: 3 } },
                    { start: { line: 1505, column: 9 }, end: { line: 1532, column: 3 } }
                  ],
                  line: 1505
                },
                '91': {
                  loc: {
                    start: { line: 1505, column: 13 },
                    end: { line: 1505, column: 61 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1505, column: 13 }, end: { line: 1505, column: 30 } },
                    { start: { line: 1505, column: 34 }, end: { line: 1505, column: 61 } }
                  ],
                  line: 1505
                },
                '92': {
                  loc: { start: { line: 1512, column: 4 }, end: { line: 1531, column: 5 } },
                  type: 'switch',
                  locations: [
                    { start: { line: 1513, column: 6 }, end: { line: 1515, column: 15 } },
                    { start: { line: 1516, column: 6 }, end: { line: 1518, column: 15 } },
                    { start: { line: 1521, column: 6 }, end: { line: 1530, column: 9 } }
                  ],
                  line: 1512
                },
                '93': {
                  loc: { start: { line: 1522, column: 8 }, end: { line: 1530, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1522, column: 8 }, end: { line: 1530, column: 9 } },
                    { start: { line: 1522, column: 8 }, end: { line: 1530, column: 9 } }
                  ],
                  line: 1522
                },
                '94': {
                  loc: {
                    start: { line: 1524, column: 15 },
                    end: { line: 1530, column: 9 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1524, column: 15 }, end: { line: 1530, column: 9 } },
                    { start: { line: 1524, column: 15 }, end: { line: 1530, column: 9 } }
                  ],
                  line: 1524
                },
                '95': {
                  loc: {
                    start: { line: 1526, column: 15 },
                    end: { line: 1530, column: 9 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1526, column: 15 }, end: { line: 1530, column: 9 } },
                    { start: { line: 1526, column: 15 }, end: { line: 1530, column: 9 } }
                  ],
                  line: 1526
                },
                '96': {
                  loc: {
                    start: { line: 1528, column: 15 },
                    end: { line: 1530, column: 9 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1528, column: 15 }, end: { line: 1530, column: 9 } },
                    { start: { line: 1528, column: 15 }, end: { line: 1530, column: 9 } }
                  ],
                  line: 1528
                },
                '97': {
                  loc: { start: { line: 1581, column: 2 }, end: { line: 1585, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1581, column: 2 }, end: { line: 1585, column: 3 } },
                    { start: { line: 1581, column: 2 }, end: { line: 1585, column: 3 } }
                  ],
                  line: 1581
                },
                '98': {
                  loc: {
                    start: { line: 1634, column: 14 },
                    end: { line: 1634, column: 32 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1634, column: 14 }, end: { line: 1634, column: 23 } },
                    { start: { line: 1634, column: 27 }, end: { line: 1634, column: 32 } }
                  ],
                  line: 1634
                },
                '99': {
                  loc: {
                    start: { line: 1637, column: 4 },
                    end: { line: 1637, column: 76 }
                  },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 1637, column: 13 }, end: { line: 1637, column: 44 } },
                    { start: { line: 1637, column: 47 }, end: { line: 1637, column: 76 } }
                  ],
                  line: 1637
                },
                '100': {
                  loc: { start: { line: 1698, column: 2 }, end: { line: 1702, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1698, column: 2 }, end: { line: 1702, column: 3 } },
                    { start: { line: 1698, column: 2 }, end: { line: 1702, column: 3 } }
                  ],
                  line: 1698
                },
                '101': {
                  loc: { start: { line: 1708, column: 2 }, end: { line: 1710, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1708, column: 2 }, end: { line: 1710, column: 3 } },
                    { start: { line: 1708, column: 2 }, end: { line: 1710, column: 3 } }
                  ],
                  line: 1708
                },
                '102': {
                  loc: { start: { line: 1711, column: 2 }, end: { line: 1783, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1711, column: 2 }, end: { line: 1783, column: 3 } },
                    { start: { line: 1711, column: 2 }, end: { line: 1783, column: 3 } }
                  ],
                  line: 1711
                },
                '103': {
                  loc: { start: { line: 1713, column: 4 }, end: { line: 1722, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1713, column: 4 }, end: { line: 1722, column: 5 } },
                    { start: { line: 1713, column: 4 }, end: { line: 1722, column: 5 } }
                  ],
                  line: 1713
                },
                '104': {
                  loc: { start: { line: 1715, column: 8 }, end: { line: 1719, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1715, column: 8 }, end: { line: 1719, column: 9 } },
                    { start: { line: 1715, column: 8 }, end: { line: 1719, column: 9 } }
                  ],
                  line: 1715
                },
                '105': {
                  loc: { start: { line: 1728, column: 8 }, end: { line: 1742, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1728, column: 8 }, end: { line: 1742, column: 9 } },
                    { start: { line: 1728, column: 8 }, end: { line: 1742, column: 9 } }
                  ],
                  line: 1728
                },
                '106': {
                  loc: {
                    start: { line: 1730, column: 10 },
                    end: { line: 1734, column: 11 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1730, column: 10 }, end: { line: 1734, column: 11 } },
                    { start: { line: 1730, column: 10 }, end: { line: 1734, column: 11 } }
                  ],
                  line: 1730
                },
                '107': {
                  loc: {
                    start: { line: 1730, column: 14 },
                    end: { line: 1730, column: 73 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1730, column: 14 }, end: { line: 1730, column: 27 } },
                    { start: { line: 1730, column: 31 }, end: { line: 1730, column: 73 } }
                  ],
                  line: 1730
                },
                '108': {
                  loc: {
                    start: { line: 1737, column: 10 },
                    end: { line: 1741, column: 11 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1737, column: 10 }, end: { line: 1741, column: 11 } },
                    { start: { line: 1737, column: 10 }, end: { line: 1741, column: 11 } }
                  ],
                  line: 1737
                },
                '109': {
                  loc: {
                    start: { line: 1737, column: 14 },
                    end: { line: 1737, column: 73 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1737, column: 14 }, end: { line: 1737, column: 27 } },
                    { start: { line: 1737, column: 31 }, end: { line: 1737, column: 73 } }
                  ],
                  line: 1737
                },
                '110': {
                  loc: { start: { line: 1759, column: 4 }, end: { line: 1767, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1759, column: 4 }, end: { line: 1767, column: 5 } },
                    { start: { line: 1759, column: 4 }, end: { line: 1767, column: 5 } }
                  ],
                  line: 1759
                },
                '111': {
                  loc: { start: { line: 1802, column: 2 }, end: { line: 1804, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1802, column: 2 }, end: { line: 1804, column: 3 } },
                    { start: { line: 1802, column: 2 }, end: { line: 1804, column: 3 } }
                  ],
                  line: 1802
                },
                '112': {
                  loc: { start: { line: 1828, column: 2 }, end: { line: 1831, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1828, column: 2 }, end: { line: 1831, column: 3 } },
                    { start: { line: 1828, column: 2 }, end: { line: 1831, column: 3 } }
                  ],
                  line: 1828
                },
                '113': {
                  loc: { start: { line: 1847, column: 2 }, end: { line: 1853, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1847, column: 2 }, end: { line: 1853, column: 3 } },
                    { start: { line: 1847, column: 2 }, end: { line: 1853, column: 3 } }
                  ],
                  line: 1847
                },
                '114': {
                  loc: { start: { line: 1868, column: 2 }, end: { line: 1870, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1868, column: 2 }, end: { line: 1870, column: 3 } },
                    { start: { line: 1868, column: 2 }, end: { line: 1870, column: 3 } }
                  ],
                  line: 1868
                },
                '115': {
                  loc: {
                    start: { line: 1868, column: 6 },
                    end: { line: 1868, column: 62 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1868, column: 6 }, end: { line: 1868, column: 16 } },
                    { start: { line: 1868, column: 20 }, end: { line: 1868, column: 38 } },
                    { start: { line: 1868, column: 42 }, end: { line: 1868, column: 62 } }
                  ],
                  line: 1868
                },
                '116': {
                  loc: { start: { line: 1871, column: 2 }, end: { line: 1873, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1871, column: 2 }, end: { line: 1873, column: 3 } },
                    { start: { line: 1871, column: 2 }, end: { line: 1873, column: 3 } }
                  ],
                  line: 1871
                },
                '117': {
                  loc: { start: { line: 1876, column: 2 }, end: { line: 1878, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1876, column: 2 }, end: { line: 1878, column: 3 } },
                    { start: { line: 1876, column: 2 }, end: { line: 1878, column: 3 } }
                  ],
                  line: 1876
                },
                '118': {
                  loc: {
                    start: { line: 1876, column: 6 },
                    end: { line: 1876, column: 40 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1876, column: 6 }, end: { line: 1876, column: 14 } },
                    { start: { line: 1876, column: 18 }, end: { line: 1876, column: 40 } }
                  ],
                  line: 1876
                },
                '119': {
                  loc: { start: { line: 1880, column: 2 }, end: { line: 1885, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1880, column: 2 }, end: { line: 1885, column: 3 } },
                    { start: { line: 1880, column: 2 }, end: { line: 1885, column: 3 } }
                  ],
                  line: 1880
                },
                '120': {
                  loc: { start: { line: 1881, column: 4 }, end: { line: 1884, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1881, column: 4 }, end: { line: 1884, column: 5 } },
                    { start: { line: 1881, column: 4 }, end: { line: 1884, column: 5 } }
                  ],
                  line: 1881
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0,
                '118': 0,
                '119': 0,
                '120': 0,
                '121': 0,
                '122': 0,
                '123': 0,
                '124': 0,
                '125': 0,
                '126': 0,
                '127': 0,
                '128': 0,
                '129': 0,
                '130': 0,
                '131': 0,
                '132': 0,
                '133': 0,
                '134': 0,
                '135': 0,
                '136': 0,
                '137': 0,
                '138': 0,
                '139': 0,
                '140': 0,
                '141': 0,
                '142': 0,
                '143': 0,
                '144': 0,
                '145': 0,
                '146': 0,
                '147': 0,
                '148': 0,
                '149': 0,
                '150': 0,
                '151': 0,
                '152': 0,
                '153': 0,
                '154': 0,
                '155': 0,
                '156': 0,
                '157': 0,
                '158': 0,
                '159': 0,
                '160': 0,
                '161': 0,
                '162': 0,
                '163': 0,
                '164': 0,
                '165': 0,
                '166': 0,
                '167': 0,
                '168': 0,
                '169': 0,
                '170': 0,
                '171': 0,
                '172': 0,
                '173': 0,
                '174': 0,
                '175': 0,
                '176': 0,
                '177': 0,
                '178': 0,
                '179': 0,
                '180': 0,
                '181': 0,
                '182': 0,
                '183': 0,
                '184': 0,
                '185': 0,
                '186': 0,
                '187': 0,
                '188': 0,
                '189': 0,
                '190': 0,
                '191': 0,
                '192': 0,
                '193': 0,
                '194': 0,
                '195': 0,
                '196': 0,
                '197': 0,
                '198': 0,
                '199': 0,
                '200': 0,
                '201': 0,
                '202': 0,
                '203': 0,
                '204': 0,
                '205': 0,
                '206': 0,
                '207': 0,
                '208': 0,
                '209': 0,
                '210': 0,
                '211': 0,
                '212': 0,
                '213': 0,
                '214': 0,
                '215': 0,
                '216': 0,
                '217': 0,
                '218': 0,
                '219': 0,
                '220': 0,
                '221': 0,
                '222': 0,
                '223': 0,
                '224': 0,
                '225': 0,
                '226': 0,
                '227': 0,
                '228': 0,
                '229': 0,
                '230': 0,
                '231': 0,
                '232': 0,
                '233': 0,
                '234': 0,
                '235': 0,
                '236': 0,
                '237': 0,
                '238': 0,
                '239': 0,
                '240': 0,
                '241': 0,
                '242': 0,
                '243': 0,
                '244': 0,
                '245': 0,
                '246': 0,
                '247': 0,
                '248': 0,
                '249': 0,
                '250': 0,
                '251': 0,
                '252': 0,
                '253': 0,
                '254': 0,
                '255': 0,
                '256': 0,
                '257': 0,
                '258': 0,
                '259': 0,
                '260': 0,
                '261': 0,
                '262': 0,
                '263': 0,
                '264': 0,
                '265': 0,
                '266': 0,
                '267': 0,
                '268': 0,
                '269': 0,
                '270': 0,
                '271': 0,
                '272': 0,
                '273': 0,
                '274': 0,
                '275': 0,
                '276': 0,
                '277': 0,
                '278': 0,
                '279': 0,
                '280': 0,
                '281': 0,
                '282': 0,
                '283': 0,
                '284': 0,
                '285': 0,
                '286': 0,
                '287': 0,
                '288': 0,
                '289': 0,
                '290': 0,
                '291': 0,
                '292': 0,
                '293': 0,
                '294': 0,
                '295': 0,
                '296': 0,
                '297': 0,
                '298': 0,
                '299': 0,
                '300': 0,
                '301': 0,
                '302': 0,
                '303': 0,
                '304': 0,
                '305': 0,
                '306': 0,
                '307': 0,
                '308': 0,
                '309': 0,
                '310': 0,
                '311': 0,
                '312': 0,
                '313': 0,
                '314': 0,
                '315': 0,
                '316': 0,
                '317': 0,
                '318': 0,
                '319': 0,
                '320': 0,
                '321': 0,
                '322': 0,
                '323': 0,
                '324': 0,
                '325': 0,
                '326': 0,
                '327': 0,
                '328': 0,
                '329': 0,
                '330': 0,
                '331': 0,
                '332': 0,
                '333': 0,
                '334': 0,
                '335': 0,
                '336': 0,
                '337': 0,
                '338': 0,
                '339': 0,
                '340': 0,
                '341': 0,
                '342': 0,
                '343': 0,
                '344': 0,
                '345': 0,
                '346': 0,
                '347': 0,
                '348': 0,
                '349': 0,
                '350': 0,
                '351': 0,
                '352': 0,
                '353': 0,
                '354': 0,
                '355': 0,
                '356': 0,
                '357': 0,
                '358': 0,
                '359': 0,
                '360': 0,
                '361': 0,
                '362': 0,
                '363': 0,
                '364': 0,
                '365': 0,
                '366': 0,
                '367': 0,
                '368': 0,
                '369': 0,
                '370': 0,
                '371': 0,
                '372': 0,
                '373': 0,
                '374': 0,
                '375': 0,
                '376': 0,
                '377': 0,
                '378': 0,
                '379': 0,
                '380': 0,
                '381': 0,
                '382': 0,
                '383': 0,
                '384': 0,
                '385': 0,
                '386': 0,
                '387': 0,
                '388': 0,
                '389': 0,
                '390': 0,
                '391': 0,
                '392': 0,
                '393': 0,
                '394': 0,
                '395': 0,
                '396': 0,
                '397': 0,
                '398': 0,
                '399': 0,
                '400': 0,
                '401': 0,
                '402': 0,
                '403': 0,
                '404': 0,
                '405': 0,
                '406': 0,
                '407': 0,
                '408': 0,
                '409': 0,
                '410': 0,
                '411': 0,
                '412': 0,
                '413': 0,
                '414': 0,
                '415': 0,
                '416': 0,
                '417': 0,
                '418': 0,
                '419': 0,
                '420': 0,
                '421': 0,
                '422': 0,
                '423': 0,
                '424': 0,
                '425': 0,
                '426': 0,
                '427': 0,
                '428': 0,
                '429': 0,
                '430': 0,
                '431': 0,
                '432': 0,
                '433': 0,
                '434': 0,
                '435': 0,
                '436': 0,
                '437': 0,
                '438': 0,
                '439': 0,
                '440': 0,
                '441': 0,
                '442': 0,
                '443': 0,
                '444': 0,
                '445': 0,
                '446': 0,
                '447': 0,
                '448': 0,
                '449': 0,
                '450': 0,
                '451': 0,
                '452': 0,
                '453': 0,
                '454': 0,
                '455': 0,
                '456': 0,
                '457': 0,
                '458': 0,
                '459': 0,
                '460': 0,
                '461': 0,
                '462': 0,
                '463': 0,
                '464': 0,
                '465': 0,
                '466': 0,
                '467': 0,
                '468': 0,
                '469': 0,
                '470': 0,
                '471': 0,
                '472': 0,
                '473': 0,
                '474': 0,
                '475': 0,
                '476': 0,
                '477': 0,
                '478': 0,
                '479': 0,
                '480': 0,
                '481': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0],
                '20': [0, 0],
                '21': [0, 0],
                '22': [0, 0],
                '23': [0, 0],
                '24': [0, 0],
                '25': [0, 0],
                '26': [0, 0],
                '27': [0, 0],
                '28': [0, 0],
                '29': [0, 0],
                '30': [0, 0],
                '31': [0, 0],
                '32': [0, 0],
                '33': [0, 0],
                '34': [0, 0],
                '35': [0, 0],
                '36': [0, 0],
                '37': [0, 0],
                '38': [0, 0],
                '39': [0, 0],
                '40': [0, 0],
                '41': [0, 0],
                '42': [0, 0],
                '43': [0, 0],
                '44': [0, 0],
                '45': [0, 0],
                '46': [0, 0],
                '47': [0, 0],
                '48': [0, 0],
                '49': [0, 0],
                '50': [0, 0],
                '51': [0, 0],
                '52': [0, 0],
                '53': [0, 0],
                '54': [0, 0],
                '55': [0, 0],
                '56': [0, 0],
                '57': [0, 0],
                '58': [0, 0, 0],
                '59': [0, 0],
                '60': [0, 0],
                '61': [0, 0, 0, 0],
                '62': [0, 0],
                '63': [0, 0, 0, 0, 0, 0, 0],
                '64': [0, 0],
                '65': [0, 0],
                '66': [0, 0],
                '67': [0, 0],
                '68': [0, 0],
                '69': [0, 0],
                '70': [0, 0],
                '71': [0, 0],
                '72': [0, 0],
                '73': [0, 0],
                '74': [0, 0],
                '75': [0, 0],
                '76': [0, 0],
                '77': [0, 0],
                '78': [0, 0],
                '79': [0, 0],
                '80': [0, 0, 0, 0, 0, 0],
                '81': [0, 0],
                '82': [0, 0],
                '83': [0, 0],
                '84': [0, 0],
                '85': [0, 0],
                '86': [0, 0],
                '87': [0, 0],
                '88': [0, 0],
                '89': [0, 0],
                '90': [0, 0],
                '91': [0, 0],
                '92': [0, 0, 0],
                '93': [0, 0],
                '94': [0, 0],
                '95': [0, 0],
                '96': [0, 0],
                '97': [0, 0],
                '98': [0, 0],
                '99': [0, 0],
                '100': [0, 0],
                '101': [0, 0],
                '102': [0, 0],
                '103': [0, 0],
                '104': [0, 0],
                '105': [0, 0],
                '106': [0, 0],
                '107': [0, 0],
                '108': [0, 0],
                '109': [0, 0],
                '110': [0, 0],
                '111': [0, 0],
                '112': [0, 0],
                '113': [0, 0],
                '114': [0, 0],
                '115': [0, 0, 0],
                '116': [0, 0],
                '117': [0, 0],
                '118': [0, 0],
                '119': [0, 0],
                '120': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '23c1fc48bd35842398175f97cf7c04aba994fa20'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.symbol');
          _dereq_('core-js/modules/es.symbol.description');
          _dereq_('core-js/modules/es.symbol.iterator');
          _dereq_('core-js/modules/es.array.concat');
          _dereq_('core-js/modules/es.array.includes');
          _dereq_('core-js/modules/es.array.index-of');
          _dereq_('core-js/modules/es.array.iterator');
          _dereq_('core-js/modules/es.array.last-index-of');
          _dereq_('core-js/modules/es.array.slice');
          _dereq_('core-js/modules/es.array.splice');
          _dereq_('core-js/modules/es.function.name');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.promise');
          _dereq_('core-js/modules/es.regexp.exec');
          _dereq_('core-js/modules/es.regexp.to-string');
          _dereq_('core-js/modules/es.string.includes');
          _dereq_('core-js/modules/es.string.iterator');
          _dereq_('core-js/modules/es.string.replace');
          _dereq_('core-js/modules/es.string.split');
          _dereq_('core-js/modules/es.typed-array.uint8-array');
          _dereq_('core-js/modules/es.typed-array.copy-within');
          _dereq_('core-js/modules/es.typed-array.every');
          _dereq_('core-js/modules/es.typed-array.fill');
          _dereq_('core-js/modules/es.typed-array.filter');
          _dereq_('core-js/modules/es.typed-array.find');
          _dereq_('core-js/modules/es.typed-array.find-index');
          _dereq_('core-js/modules/es.typed-array.for-each');
          _dereq_('core-js/modules/es.typed-array.includes');
          _dereq_('core-js/modules/es.typed-array.index-of');
          _dereq_('core-js/modules/es.typed-array.iterator');
          _dereq_('core-js/modules/es.typed-array.join');
          _dereq_('core-js/modules/es.typed-array.last-index-of');
          _dereq_('core-js/modules/es.typed-array.map');
          _dereq_('core-js/modules/es.typed-array.reduce');
          _dereq_('core-js/modules/es.typed-array.reduce-right');
          _dereq_('core-js/modules/es.typed-array.reverse');
          _dereq_('core-js/modules/es.typed-array.set');
          _dereq_('core-js/modules/es.typed-array.slice');
          _dereq_('core-js/modules/es.typed-array.some');
          _dereq_('core-js/modules/es.typed-array.sort');
          _dereq_('core-js/modules/es.typed-array.subarray');
          _dereq_('core-js/modules/es.typed-array.to-locale-string');
          _dereq_('core-js/modules/es.typed-array.to-string');
          _dereq_('core-js/modules/web.dom-collections.iterator');
          _dereq_('core-js/modules/web.url');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          _dereq_('whatwg-fetch');
          _dereq_('es6-promise/auto');
          var _fetchJsonp = _interopRequireDefault(_dereq_('fetch-jsonp'));
          var _fileSaver = _interopRequireDefault(_dereq_('file-saver'));
          _dereq_('../core/friendly_errors/validate_params');
          _dereq_('../core/friendly_errors/file_errors');
          _dereq_('../core/friendly_errors/fes_core');
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          function _typeof(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof = function _typeof(obj) {
                return typeof obj;
              };
            } else {
              _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof(obj);
          }
          cov_et3brlpgs.s[0]++;

          /**
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * Loads a JSON file from a file or a URL, and returns an Object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * Note that even if the JSON file contains an Array, an Object will be
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * returned with index numbers as keys.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * This method is asynchronous, meaning it may not finish before the next
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * line in your sketch is executed. JSONP is supported via a polyfill and you
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * can pass in as the second argument an object with definitions of the json
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * callback following the syntax specified <a href="https://github.com/camsong/
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * fetch-jsonp">here</a>.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * This method is suitable for fetching files up to size of 64MB.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * @method loadJSON
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * @param  {String}        path       name of the file or url to load
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * @param  {Object}        [jsonpOptions] options object for jsonp related settings
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * @param  {String}        [datatype] "json" or "jsonp"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * @param  {function}      [callback] function to be executed after
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *                                    <a href="#/p5/loadJSON">loadJSON()</a> completes, data is passed
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *                                    in as first argument
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * @param  {function}      [errorCallback] function to be executed if
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *                                    there is an error, response is passed
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *                                    in as first argument
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * @return {Object|Array}             JSON data
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * @example
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * Calling <a href="#/p5/loadJSON">loadJSON()</a> inside <a href="#/p5/preload">preload()</a> guarantees to complete the
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * operation before <a href="#/p5/setup">setup()</a> and <a href="#/p5/draw">draw()</a> are called.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * <div><code>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * // Examples use USGS Earthquake API:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * //   https://earthquake.usgs.gov/fdsnws/event/1/#methods
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * let earthquakes;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * function preload() {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *   // Get the most recent earthquake in the database
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *   let url =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       'https://earthquake.usgs.gov/earthquakes/feed/v1.0/' +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *     'summary/all_day.geojson';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *   earthquakes = loadJSON(url);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * function setup() {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *   noLoop();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * function draw() {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *   background(200);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *   // Get the magnitude and name of the earthquake out of the loaded JSON
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *   let earthquakeMag = earthquakes.features[0].properties.mag;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *   let earthquakeName = earthquakes.features[0].properties.place;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *   ellipse(width / 2, height / 2, earthquakeMag * 10, earthquakeMag * 10);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *   textAlign(CENTER);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *   text(earthquakeName, 0, height - 30, width, 30);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * </code></div>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * Outside of preload(), you may supply a callback function to handle the
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * object:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * <div><code>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * function setup() {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *   noLoop();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *   let url =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       'https://earthquake.usgs.gov/earthquakes/feed/v1.0/' +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *     'summary/all_day.geojson';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *   loadJSON(url, drawEarthquake);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * function draw() {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *   background(200);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * function drawEarthquake(earthquakes) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *   // Get the magnitude and name of the earthquake out of the loaded JSON
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *   let earthquakeMag = earthquakes.features[0].properties.mag;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *   let earthquakeName = earthquakes.features[0].properties.place;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *   ellipse(width / 2, height / 2, earthquakeMag * 10, earthquakeMag * 10);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *   textAlign(CENTER);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *   text(earthquakeName, 0, height - 30, width, 30);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * </code></div>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    *
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * @alt
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * 50x50 ellipse that changes from black to white depending on the current humidity
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    * 50x50 ellipse that changes from black to white depending on the current humidity
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    */
          /**
           * @method loadJSON
           * @param  {String}        path
           * @param  {String}        datatype
           * @param  {function}      [callback]
           * @param  {function}      [errorCallback]
           * @return {Object|Array}
           */
          /**
           * @method loadJSON
           * @param  {String}        path
           * @param  {function}      callback
           * @param  {function}      [errorCallback]
           * @return {Object|Array}
           */
          _main.default.prototype.loadJSON = function() {
            cov_et3brlpgs.f[0]++;
            cov_et3brlpgs.s[1]++;
            for (
              var _len = arguments.length, args = new Array(_len), _key = 0;
              _key < _len;
              _key++
            ) {
              args[_key] = arguments[_key];
            }
            _main.default._validateParameters('loadJSON', args);
            var path = (cov_et3brlpgs.s[2]++, args[0]);
            var callback;
            var errorCallback;
            var options;

            var ret = (cov_et3brlpgs.s[3]++, {}); // object needed for preload
            var t = (cov_et3brlpgs.s[4]++, 'json');

            // check for explicit data type argument
            cov_et3brlpgs.s[5]++;
            for (var i = (cov_et3brlpgs.s[6]++, 1); i < args.length; i++) {
              var arg = (cov_et3brlpgs.s[7]++, args[i]);
              cov_et3brlpgs.s[8]++;
              if (typeof arg === 'string') {
                cov_et3brlpgs.b[0][0]++;
                cov_et3brlpgs.s[9]++;
                if (
                  (cov_et3brlpgs.b[2][0]++, arg === 'jsonp') ||
                  (cov_et3brlpgs.b[2][1]++, arg === 'json')
                ) {
                  cov_et3brlpgs.b[1][0]++;
                  cov_et3brlpgs.s[10]++;
                  t = arg;
                } else {
                  cov_et3brlpgs.b[1][1]++;
                }
              } else {
                cov_et3brlpgs.b[0][1]++;
                cov_et3brlpgs.s[11]++;
                if (typeof arg === 'function') {
                  cov_et3brlpgs.b[3][0]++;
                  cov_et3brlpgs.s[12]++;
                  if (!callback) {
                    cov_et3brlpgs.b[4][0]++;
                    cov_et3brlpgs.s[13]++;
                    callback = arg;
                  } else {
                    cov_et3brlpgs.b[4][1]++;
                    cov_et3brlpgs.s[14]++;
                    errorCallback = arg;
                  }
                } else {
                  cov_et3brlpgs.b[3][1]++;
                  cov_et3brlpgs.s[15]++;
                  if (
                    (cov_et3brlpgs.b[6][0]++, _typeof(arg) === 'object') &&
                    ((cov_et3brlpgs.b[6][1]++, arg.hasOwnProperty('jsonpCallback')) ||
                      (cov_et3brlpgs.b[6][2]++,
                      arg.hasOwnProperty('jsonpCallbackFunction')))
                  ) {
                    cov_et3brlpgs.b[5][0]++;
                    cov_et3brlpgs.s[16]++;
                    t = 'jsonp';
                    cov_et3brlpgs.s[17]++;
                    options = arg;
                  } else {
                    cov_et3brlpgs.b[5][1]++;
                  }
                }
              }
            }

            var self = (cov_et3brlpgs.s[18]++, this);
            cov_et3brlpgs.s[19]++;
            this.httpDo(
              path,
              'GET',
              options,
              t,
              function(resp) {
                cov_et3brlpgs.f[1]++;
                cov_et3brlpgs.s[20]++;
                for (var k in resp) {
                  cov_et3brlpgs.s[21]++;
                  ret[k] = resp[k];
                }
                cov_et3brlpgs.s[22]++;
                if (typeof callback !== 'undefined') {
                  cov_et3brlpgs.b[7][0]++;
                  cov_et3brlpgs.s[23]++;
                  callback(resp);
                } else {
                  cov_et3brlpgs.b[7][1]++;
                }
                cov_et3brlpgs.s[24]++;

                self._decrementPreload();
              },
              function(err) {
                cov_et3brlpgs.f[2]++;
                cov_et3brlpgs.s[25]++;
                // Error handling
                _main.default._friendlyFileLoadError(5, path);
                cov_et3brlpgs.s[26]++;

                if (errorCallback) {
                  cov_et3brlpgs.b[8][0]++;
                  cov_et3brlpgs.s[27]++;
                  errorCallback(err);
                } else {
                  cov_et3brlpgs.b[8][1]++;
                  cov_et3brlpgs.s[28]++;
                  throw err;
                }
              }
            );
            cov_et3brlpgs.s[29]++;

            return ret;
          };

          /**
    * Reads the contents of a file and creates a String array of its individual
    * lines. If the name of the file is used as the parameter, as in the above
    * example, the file must be located in the sketch directory/folder.
    *
    * Alternatively, the file maybe be loaded from anywhere on the local
    * computer using an absolute path (something that starts with / on Unix and
    * Linux, or a drive letter on Windows), or the filename parameter can be a
    * URL for a file found on a network.
    *
    * This method is asynchronous, meaning it may not finish before the next
    * line in your sketch is executed.
    *
    * This method is suitable for fetching files up to size of 64MB.
    * @method loadStrings
    * @param  {String}   filename   name of the file or url to load
    * @param  {function} [callback] function to be executed after <a href="#/p5/loadStrings">loadStrings()</a>
    *                               completes, Array is passed in as first
    *                               argument
    * @param  {function} [errorCallback] function to be executed if
    *                               there is an error, response is passed
    *                               in as first argument
    * @return {String[]}            Array of Strings
    * @example
    *
    * Calling loadStrings() inside <a href="#/p5/preload">preload()</a> guarantees to complete the
    * operation before <a href="#/p5/setup">setup()</a> and <a href="#/p5/draw">draw()</a> are called.
    *
    * <div><code>
    * let result;
    * function preload() {
    *   result = loadStrings('assets/test.txt');
    * }
   
    * function setup() {
    *   background(200);
    *   text(random(result), 10, 10, 80, 80);
    * }
    * </code></div>
    *
    * Outside of preload(), you may supply a callback function to handle the
    * object:
    *
    * <div><code>
    * function setup() {
    *   loadStrings('assets/test.txt', pickString);
    * }
    *
    * function pickString(result) {
    *   background(200);
    *   text(random(result), 10, 10, 80, 80);
    * }
    * </code></div>
    *
    * @alt
    * randomly generated text from a file, for example "i smell like butter"
    * randomly generated text from a file, for example "i have three feet"
    */ cov_et3brlpgs
            .s[30]++;
          _main.default.prototype.loadStrings = function() {
            for (
              var _len2 = arguments.length, args = new Array(_len2), _key2 = 0;
              _key2 < _len2;
              _key2++
            ) {
              args[_key2] = arguments[_key2];
            }
            cov_et3brlpgs.f[3]++;
            cov_et3brlpgs.s[31]++;
            _main.default._validateParameters('loadStrings', args);

            var ret = (cov_et3brlpgs.s[32]++, []);
            var callback, errorCallback;
            cov_et3brlpgs.s[33]++;

            for (var i = (cov_et3brlpgs.s[34]++, 1); i < args.length; i++) {
              var arg = (cov_et3brlpgs.s[35]++, args[i]);
              cov_et3brlpgs.s[36]++;
              if (typeof arg === 'function') {
                cov_et3brlpgs.b[9][0]++;
                cov_et3brlpgs.s[37]++;
                if (typeof callback === 'undefined') {
                  cov_et3brlpgs.b[10][0]++;
                  cov_et3brlpgs.s[38]++;
                  callback = arg;
                } else {
                  cov_et3brlpgs.b[10][1]++;
                  cov_et3brlpgs.s[39]++;
                  if (typeof errorCallback === 'undefined') {
                    cov_et3brlpgs.b[11][0]++;
                    cov_et3brlpgs.s[40]++;
                    errorCallback = arg;
                  } else {
                    cov_et3brlpgs.b[11][1]++;
                  }
                }
              } else {
                cov_et3brlpgs.b[9][1]++;
              }
            }

            var self = (cov_et3brlpgs.s[41]++, this);
            cov_et3brlpgs.s[42]++;
            _main.default.prototype.httpDo.call(
              this,
              args[0],
              'GET',
              'text',
              function(data) {
                cov_et3brlpgs.f[4]++;
                // split lines handling mac/windows/linux endings
                var lines = (cov_et3brlpgs.s[43]++,
                data
                  .replace(/\r\n/g, '\r')
                  .replace(/\n/g, '\r')
                  .split(/\r/));

                // safe insert approach which will not blow up stack when inserting
                // >100k lines, but still be faster than iterating line-by-line. based on
                // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply#Examples
                var QUANTUM = (cov_et3brlpgs.s[44]++, 32768);
                cov_et3brlpgs.s[45]++;
                for (
                  var _i = (cov_et3brlpgs.s[46]++, 0),
                    len = (cov_et3brlpgs.s[47]++, lines.length);
                  _i < len;
                  _i += QUANTUM
                ) {
                  cov_et3brlpgs.s[48]++;
                  Array.prototype.push.apply(
                    ret,
                    lines.slice(_i, Math.min(_i + QUANTUM, len))
                  );
                }
                cov_et3brlpgs.s[49]++;

                if (typeof callback !== 'undefined') {
                  cov_et3brlpgs.b[12][0]++;
                  cov_et3brlpgs.s[50]++;
                  callback(ret);
                } else {
                  cov_et3brlpgs.b[12][1]++;
                }
                cov_et3brlpgs.s[51]++;

                self._decrementPreload();
              },
              function(err) {
                cov_et3brlpgs.f[5]++;
                cov_et3brlpgs.s[52]++;
                // Error handling
                _main.default._friendlyFileLoadError(3, arguments[0]);
                cov_et3brlpgs.s[53]++;

                if (errorCallback) {
                  cov_et3brlpgs.b[13][0]++;
                  cov_et3brlpgs.s[54]++;
                  errorCallback(err);
                } else {
                  cov_et3brlpgs.b[13][1]++;
                  cov_et3brlpgs.s[55]++;
                  throw err;
                }
              }
            );
            cov_et3brlpgs.s[56]++;

            return ret;
          };

          /**
           * Reads the contents of a file or URL and creates a <a href="#/p5.Table">p5.Table</a> object with
           * its values. If a file is specified, it must be located in the sketch's
           * "data" folder. The filename parameter can also be a URL to a file found
           * online. By default, the file is assumed to be comma-separated (in CSV
           * format). Table only looks for a header row if the 'header' option is
           * included.
           *
           * This method is asynchronous, meaning it may not finish before the next
           * line in your sketch is executed. Calling <a href="#/p5/loadTable">loadTable()</a> inside <a href="#/p5/preload">preload()</a>
           * guarantees to complete the operation before <a href="#/p5/setup">setup()</a> and <a href="#/p5/draw">draw()</a> are called.
           * Outside of <a href="#/p5/preload">preload()</a>, you may supply a callback function to handle the
           * object:
           *
           * All files loaded and saved use UTF-8 encoding. This method is suitable for fetching files up to size of 64MB.
           * @method loadTable
           * @param  {String}         filename    name of the file or URL to load
           * @param  {String}         [extension] parse the table by comma-separated values "csv", semicolon-separated
           *                                      values "ssv", or tab-separated values "tsv"
           * @param  {String}         [header]    "header" to indicate table has header row
           * @param  {function}       [callback]  function to be executed after
           *                                      <a href="#/p5/loadTable">loadTable()</a> completes. On success, the
           *                                      <a href="#/p5.Table">Table</a> object is passed in as the
           *                                      first argument.
           * @param  {function}  [errorCallback]  function to be executed if
           *                                      there is an error, response is passed
           *                                      in as first argument
           * @return {Object}                     <a href="#/p5.Table">Table</a> object containing data
           *
           * @example
           * <div class='norender'>
           * <code>
           * // Given the following CSV file called "mammals.csv"
           * // located in the project's "assets" folder:
           * //
           * // id,species,name
           * // 0,Capra hircus,Goat
           * // 1,Panthera pardus,Leopard
           * // 2,Equus zebra,Zebra
           *
           * let table;
           *
           * function preload() {
           *   //my table is comma separated value "csv"
           *   //and has a header specifying the columns labels
           *   table = loadTable('assets/mammals.csv', 'csv', 'header');
           *   //the file can be remote
           *   //table = loadTable("http://p5js.org/reference/assets/mammals.csv",
           *   //                  "csv", "header");
           * }
           *
           * function setup() {
           *   //count the columns
           *   print(table.getRowCount() + ' total rows in table');
           *   print(table.getColumnCount() + ' total columns in table');
           *
           *   print(table.getColumn('name'));
           *   //["Goat", "Leopard", "Zebra"]
           *
           *   //cycle through the table
           *   for (let r = 0; r < table.getRowCount(); r++)
           *     for (let c = 0; c < table.getColumnCount(); c++) {
           *       print(table.getString(r, c));
           *     }
           * }
           * </code>
           * </div>
           *
           * @alt
           * randomly generated text from a file, for example "i smell like butter"
           * randomly generated text from a file, for example "i have three feet"
           */ cov_et3brlpgs.s[57]++;
          _main.default.prototype.loadTable = function(path) {
            cov_et3brlpgs.f[6]++;
            // p5._validateParameters('loadTable', arguments);
            var callback;
            var errorCallback;
            var options = (cov_et3brlpgs.s[58]++, []);
            var header = (cov_et3brlpgs.s[59]++, false);
            var ext = (cov_et3brlpgs.s[60]++,
            path.substring(path.lastIndexOf('.') + 1, path.length));

            var sep;
            cov_et3brlpgs.s[61]++;
            if (ext === 'csv') {
              cov_et3brlpgs.b[14][0]++;
              cov_et3brlpgs.s[62]++;
              sep = ',';
            } else {
              cov_et3brlpgs.b[14][1]++;
              cov_et3brlpgs.s[63]++;
              if (ext === 'ssv') {
                cov_et3brlpgs.b[15][0]++;
                cov_et3brlpgs.s[64]++;
                sep = ';';
              } else {
                cov_et3brlpgs.b[15][1]++;
                cov_et3brlpgs.s[65]++;
                if (ext === 'tsv') {
                  cov_et3brlpgs.b[16][0]++;
                  cov_et3brlpgs.s[66]++;
                  sep = '\t';
                } else {
                  cov_et3brlpgs.b[16][1]++;
                }
              }
            }
            cov_et3brlpgs.s[67]++;

            for (var i = (cov_et3brlpgs.s[68]++, 1); i < arguments.length; i++) {
              cov_et3brlpgs.s[69]++;
              if (typeof arguments[i] === 'function') {
                cov_et3brlpgs.b[17][0]++;
                cov_et3brlpgs.s[70]++;
                if (typeof callback === 'undefined') {
                  cov_et3brlpgs.b[18][0]++;
                  cov_et3brlpgs.s[71]++;
                  callback = arguments[i];
                } else {
                  cov_et3brlpgs.b[18][1]++;
                  cov_et3brlpgs.s[72]++;
                  if (typeof errorCallback === 'undefined') {
                    cov_et3brlpgs.b[19][0]++;
                    cov_et3brlpgs.s[73]++;
                    errorCallback = arguments[i];
                  } else {
                    cov_et3brlpgs.b[19][1]++;
                  }
                }
              } else {
                cov_et3brlpgs.b[17][1]++;
                cov_et3brlpgs.s[74]++;
                if (typeof arguments[i] === 'string') {
                  cov_et3brlpgs.b[20][0]++;
                  cov_et3brlpgs.s[75]++;
                  options.push(arguments[i]);
                  cov_et3brlpgs.s[76]++;
                  if (arguments[i] === 'header') {
                    cov_et3brlpgs.b[21][0]++;
                    cov_et3brlpgs.s[77]++;
                    header = true;
                  } else {
                    cov_et3brlpgs.b[21][1]++;
                  }
                  cov_et3brlpgs.s[78]++;
                  if (arguments[i] === 'csv') {
                    cov_et3brlpgs.b[22][0]++;
                    cov_et3brlpgs.s[79]++;
                    sep = ',';
                  } else {
                    cov_et3brlpgs.b[22][1]++;
                    cov_et3brlpgs.s[80]++;
                    if (arguments[i] === 'ssv') {
                      cov_et3brlpgs.b[23][0]++;
                      cov_et3brlpgs.s[81]++;
                      sep = ';';
                    } else {
                      cov_et3brlpgs.b[23][1]++;
                      cov_et3brlpgs.s[82]++;
                      if (arguments[i] === 'tsv') {
                        cov_et3brlpgs.b[24][0]++;
                        cov_et3brlpgs.s[83]++;
                        sep = '\t';
                      } else {
                        cov_et3brlpgs.b[24][1]++;
                      }
                    }
                  }
                } else {
                  cov_et3brlpgs.b[20][1]++;
                }
              }
            }

            var t = (cov_et3brlpgs.s[84]++, new _main.default.Table());

            var self = (cov_et3brlpgs.s[85]++, this);
            cov_et3brlpgs.s[86]++;
            this.httpDo(
              path,
              'GET',
              'table',
              function(resp) {
                cov_et3brlpgs.f[7]++;
                var state = (cov_et3brlpgs.s[87]++, {});

                // define constants
                var PRE_TOKEN = (cov_et3brlpgs.s[88]++, 0),
                  MID_TOKEN = (cov_et3brlpgs.s[89]++, 1),
                  POST_TOKEN = (cov_et3brlpgs.s[90]++, 2),
                  POST_RECORD = (cov_et3brlpgs.s[91]++, 4);

                var QUOTE = (cov_et3brlpgs.s[92]++, '"'),
                  CR = (cov_et3brlpgs.s[93]++, '\r'),
                  LF = (cov_et3brlpgs.s[94]++, '\n');

                var records = (cov_et3brlpgs.s[95]++, []);
                var offset = (cov_et3brlpgs.s[96]++, 0);
                var currentRecord = (cov_et3brlpgs.s[97]++, null);
                var currentChar;
                cov_et3brlpgs.s[98]++;

                var tokenBegin = function tokenBegin() {
                  cov_et3brlpgs.f[8]++;
                  cov_et3brlpgs.s[99]++;
                  state.currentState = PRE_TOKEN;
                  cov_et3brlpgs.s[100]++;
                  state.token = '';
                };
                cov_et3brlpgs.s[101]++;

                var tokenEnd = function tokenEnd() {
                  cov_et3brlpgs.f[9]++;
                  cov_et3brlpgs.s[102]++;
                  currentRecord.push(state.token);
                  cov_et3brlpgs.s[103]++;
                  tokenBegin();
                };
                cov_et3brlpgs.s[104]++;

                var recordBegin = function recordBegin() {
                  cov_et3brlpgs.f[10]++;
                  cov_et3brlpgs.s[105]++;
                  state.escaped = false;
                  cov_et3brlpgs.s[106]++;
                  currentRecord = [];
                  cov_et3brlpgs.s[107]++;
                  tokenBegin();
                };
                cov_et3brlpgs.s[108]++;

                var recordEnd = function recordEnd() {
                  cov_et3brlpgs.f[11]++;
                  cov_et3brlpgs.s[109]++;
                  state.currentState = POST_RECORD;
                  cov_et3brlpgs.s[110]++;
                  records.push(currentRecord);
                  cov_et3brlpgs.s[111]++;
                  currentRecord = null;
                };
                cov_et3brlpgs.s[112]++;

                for (;;) {
                  cov_et3brlpgs.s[113]++;
                  currentChar = resp[offset++];

                  // EOF
                  cov_et3brlpgs.s[114]++;
                  if (currentChar == null) {
                    cov_et3brlpgs.b[25][0]++;
                    cov_et3brlpgs.s[115]++;
                    if (state.escaped) {
                      cov_et3brlpgs.b[26][0]++;
                      cov_et3brlpgs.s[116]++;
                      throw new Error('Unclosed quote in file.');
                    } else {
                      cov_et3brlpgs.b[26][1]++;
                    }
                    cov_et3brlpgs.s[117]++;
                    if (currentRecord) {
                      cov_et3brlpgs.b[27][0]++;
                      cov_et3brlpgs.s[118]++;
                      tokenEnd();
                      cov_et3brlpgs.s[119]++;
                      recordEnd();
                      cov_et3brlpgs.s[120]++;
                      break;
                    } else {
                      cov_et3brlpgs.b[27][1]++;
                    }
                  } else {
                    cov_et3brlpgs.b[25][1]++;
                  }
                  cov_et3brlpgs.s[121]++;
                  if (currentRecord === null) {
                    cov_et3brlpgs.b[28][0]++;
                    cov_et3brlpgs.s[122]++;
                    recordBegin();
                  } else {
                    cov_et3brlpgs.b[28][1]++;
                  }

                  // Handle opening quote
                  cov_et3brlpgs.s[123]++;
                  if (state.currentState === PRE_TOKEN) {
                    cov_et3brlpgs.b[29][0]++;
                    cov_et3brlpgs.s[124]++;
                    if (currentChar === QUOTE) {
                      cov_et3brlpgs.b[30][0]++;
                      cov_et3brlpgs.s[125]++;
                      state.escaped = true;
                      cov_et3brlpgs.s[126]++;
                      state.currentState = MID_TOKEN;
                      cov_et3brlpgs.s[127]++;
                      continue;
                    } else {
                      cov_et3brlpgs.b[30][1]++;
                    }
                    cov_et3brlpgs.s[128]++;
                    state.currentState = MID_TOKEN;
                  } else {
                    cov_et3brlpgs.b[29][1]++;
                  }

                  // mid-token and escaped, look for sequences and end quote
                  cov_et3brlpgs.s[129]++;
                  if (
                    (cov_et3brlpgs.b[32][0]++, state.currentState === MID_TOKEN) &&
                    (cov_et3brlpgs.b[32][1]++, state.escaped)
                  ) {
                    cov_et3brlpgs.b[31][0]++;
                    cov_et3brlpgs.s[130]++;
                    if (currentChar === QUOTE) {
                      cov_et3brlpgs.b[33][0]++;
                      cov_et3brlpgs.s[131]++;
                      if (resp[offset] === QUOTE) {
                        cov_et3brlpgs.b[34][0]++;
                        cov_et3brlpgs.s[132]++;
                        state.token += QUOTE;
                        cov_et3brlpgs.s[133]++;
                        offset++;
                      } else {
                        cov_et3brlpgs.b[34][1]++;
                        cov_et3brlpgs.s[134]++;
                        state.escaped = false;
                        cov_et3brlpgs.s[135]++;
                        state.currentState = POST_TOKEN;
                      }
                    } else {
                      cov_et3brlpgs.b[33][1]++;
                      cov_et3brlpgs.s[136]++;
                      if (currentChar === CR) {
                        cov_et3brlpgs.b[35][0]++;
                        cov_et3brlpgs.s[137]++;
                        continue;
                      } else {
                        cov_et3brlpgs.b[35][1]++;
                        cov_et3brlpgs.s[138]++;
                        state.token += currentChar;
                      }
                    }
                    cov_et3brlpgs.s[139]++;
                    continue;
                  } else {
                    cov_et3brlpgs.b[31][1]++;
                  }

                  // fall-through: mid-token or post-token, not escaped
                  cov_et3brlpgs.s[140]++;
                  if (currentChar === CR) {
                    cov_et3brlpgs.b[36][0]++;
                    cov_et3brlpgs.s[141]++;
                    if (resp[offset] === LF) {
                      cov_et3brlpgs.b[37][0]++;
                      cov_et3brlpgs.s[142]++;
                      offset++;
                    } else {
                      cov_et3brlpgs.b[37][1]++;
                    }
                    cov_et3brlpgs.s[143]++;
                    tokenEnd();
                    cov_et3brlpgs.s[144]++;
                    recordEnd();
                  } else {
                    cov_et3brlpgs.b[36][1]++;
                    cov_et3brlpgs.s[145]++;
                    if (currentChar === LF) {
                      cov_et3brlpgs.b[38][0]++;
                      cov_et3brlpgs.s[146]++;
                      tokenEnd();
                      cov_et3brlpgs.s[147]++;
                      recordEnd();
                    } else {
                      cov_et3brlpgs.b[38][1]++;
                      cov_et3brlpgs.s[148]++;
                      if (currentChar === sep) {
                        cov_et3brlpgs.b[39][0]++;
                        cov_et3brlpgs.s[149]++;
                        tokenEnd();
                      } else {
                        cov_et3brlpgs.b[39][1]++;
                        cov_et3brlpgs.s[150]++;
                        if (state.currentState === MID_TOKEN) {
                          cov_et3brlpgs.b[40][0]++;
                          cov_et3brlpgs.s[151]++;
                          state.token += currentChar;
                        } else {
                          cov_et3brlpgs.b[40][1]++;
                        }
                      }
                    }
                  }
                }

                // set up column names
                cov_et3brlpgs.s[152]++;
                if (header) {
                  cov_et3brlpgs.b[41][0]++;
                  cov_et3brlpgs.s[153]++;
                  t.columns = records.shift();
                } else {
                  cov_et3brlpgs.b[41][1]++;
                  cov_et3brlpgs.s[154]++;
                  for (
                    var _i2 = (cov_et3brlpgs.s[155]++, 0);
                    _i2 < records[0].length;
                    _i2++
                  ) {
                    cov_et3brlpgs.s[156]++;
                    t.columns[_i2] = 'null';
                  }
                }
                var row;
                cov_et3brlpgs.s[157]++;
                for (var _i3 = (cov_et3brlpgs.s[158]++, 0); _i3 < records.length; _i3++) {
                  cov_et3brlpgs.s[159]++;
                  //Handles row of 'undefined' at end of some CSVs
                  if (records[_i3].length === 1) {
                    cov_et3brlpgs.b[42][0]++;
                    cov_et3brlpgs.s[160]++;
                    if (
                      (cov_et3brlpgs.b[44][0]++, records[_i3][0] === 'undefined') ||
                      (cov_et3brlpgs.b[44][1]++, records[_i3][0] === '')
                    ) {
                      cov_et3brlpgs.b[43][0]++;
                      cov_et3brlpgs.s[161]++;
                      continue;
                    } else {
                      cov_et3brlpgs.b[43][1]++;
                    }
                  } else {
                    cov_et3brlpgs.b[42][1]++;
                  }
                  cov_et3brlpgs.s[162]++;
                  row = new _main.default.TableRow();
                  cov_et3brlpgs.s[163]++;
                  row.arr = records[_i3];
                  cov_et3brlpgs.s[164]++;
                  row.obj = makeObject(records[_i3], t.columns);
                  cov_et3brlpgs.s[165]++;
                  t.addRow(row);
                }
                cov_et3brlpgs.s[166]++;
                if (typeof callback === 'function') {
                  cov_et3brlpgs.b[45][0]++;
                  cov_et3brlpgs.s[167]++;
                  callback(t);
                } else {
                  cov_et3brlpgs.b[45][1]++;
                }
                cov_et3brlpgs.s[168]++;

                self._decrementPreload();
              },
              function(err) {
                cov_et3brlpgs.f[12]++;
                cov_et3brlpgs.s[169]++;
                // Error handling
                _main.default._friendlyFileLoadError(2, path);
                cov_et3brlpgs.s[170]++;

                if (errorCallback) {
                  cov_et3brlpgs.b[46][0]++;
                  cov_et3brlpgs.s[171]++;
                  errorCallback(err);
                } else {
                  cov_et3brlpgs.b[46][1]++;
                  cov_et3brlpgs.s[172]++;
                  console.error(err);
                }
              }
            );
            cov_et3brlpgs.s[173]++;

            return t;
          };

          // helper function to turn a row into a JSON object
          function makeObject(row, headers) {
            cov_et3brlpgs.f[13]++;
            var ret = (cov_et3brlpgs.s[174]++, {});
            cov_et3brlpgs.s[175]++;
            headers = (cov_et3brlpgs.b[47][0]++, headers) || (cov_et3brlpgs.b[47][1]++, []);
            cov_et3brlpgs.s[176]++;
            if (typeof headers === 'undefined') {
              cov_et3brlpgs.b[48][0]++;
              cov_et3brlpgs.s[177]++;
              for (var j = (cov_et3brlpgs.s[178]++, 0); j < row.length; j++) {
                cov_et3brlpgs.s[179]++;
                headers[j.toString()] = j;
              }
            } else {
              cov_et3brlpgs.b[48][1]++;
            }
            cov_et3brlpgs.s[180]++;
            for (var i = (cov_et3brlpgs.s[181]++, 0); i < headers.length; i++) {
              var key = (cov_et3brlpgs.s[182]++, headers[i]);
              var val = (cov_et3brlpgs.s[183]++, row[i]);
              cov_et3brlpgs.s[184]++;
              ret[key] = val;
            }
            cov_et3brlpgs.s[185]++;
            return ret;
          }

          /**
           * Reads the contents of a file and creates an XML object with its values.
           * If the name of the file is used as the parameter, as in the above example,
           * the file must be located in the sketch directory/folder.
           *
           * Alternatively, the file maybe be loaded from anywhere on the local
           * computer using an absolute path (something that starts with / on Unix and
           * Linux, or a drive letter on Windows), or the filename parameter can be a
           * URL for a file found on a network.
           *
           * This method is asynchronous, meaning it may not finish before the next
           * line in your sketch is executed. Calling <a href="#/p5/loadXML">loadXML()</a> inside <a href="#/p5/preload">preload()</a>
           * guarantees to complete the operation before <a href="#/p5/setup">setup()</a> and <a href="#/p5/draw">draw()</a> are called.
           *
           * Outside of <a href="#/p5/preload">preload()</a>, you may supply a callback function to handle the
           * object.
           *
           * This method is suitable for fetching files up to size of 64MB.
           * @method loadXML
           * @param  {String}   filename   name of the file or URL to load
           * @param  {function} [callback] function to be executed after <a href="#/p5/loadXML">loadXML()</a>
           *                               completes, XML object is passed in as
           *                               first argument
           * @param  {function} [errorCallback] function to be executed if
           *                               there is an error, response is passed
           *                               in as first argument
           * @return {Object}              XML object containing data
           * @example
           * <div class='norender'><code>
           * // The following short XML file called "mammals.xml" is parsed
           * // in the code below.
           * //
           * // <?xml version="1.0"?>
           * // &lt;mammals&gt;
           * //   &lt;animal id="0" species="Capra hircus">Goat&lt;/animal&gt;
           * //   &lt;animal id="1" species="Panthera pardus">Leopard&lt;/animal&gt;
           * //   &lt;animal id="2" species="Equus zebra">Zebra&lt;/animal&gt;
           * // &lt;/mammals&gt;
           *
           * let xml;
           *
           * function preload() {
           *   xml = loadXML('assets/mammals.xml');
           * }
           *
           * function setup() {
           *   let children = xml.getChildren('animal');
           *
           *   for (let i = 0; i < children.length; i++) {
           *     let id = children[i].getNum('id');
           *     let coloring = children[i].getString('species');
           *     let name = children[i].getContent();
           *     print(id + ', ' + coloring + ', ' + name);
           *   }
           * }
           *
           * // Sketch prints:
           * // 0, Capra hircus, Goat
           * // 1, Panthera pardus, Leopard
           * // 2, Equus zebra, Zebra
           * </code></div>
           *
           * @alt
           * no image displayed
           */ cov_et3brlpgs.s[186]++;
          _main.default.prototype.loadXML = function() {
            for (
              var _len3 = arguments.length, args = new Array(_len3), _key3 = 0;
              _key3 < _len3;
              _key3++
            ) {
              args[_key3] = arguments[_key3];
            }
            cov_et3brlpgs.f[14]++;
            var ret = (cov_et3brlpgs.s[187]++, new _main.default.XML());
            var callback, errorCallback;
            cov_et3brlpgs.s[188]++;

            for (var i = (cov_et3brlpgs.s[189]++, 1); i < args.length; i++) {
              var arg = (cov_et3brlpgs.s[190]++, args[i]);
              cov_et3brlpgs.s[191]++;
              if (typeof arg === 'function') {
                cov_et3brlpgs.b[49][0]++;
                cov_et3brlpgs.s[192]++;
                if (typeof callback === 'undefined') {
                  cov_et3brlpgs.b[50][0]++;
                  cov_et3brlpgs.s[193]++;
                  callback = arg;
                } else {
                  cov_et3brlpgs.b[50][1]++;
                  cov_et3brlpgs.s[194]++;
                  if (typeof errorCallback === 'undefined') {
                    cov_et3brlpgs.b[51][0]++;
                    cov_et3brlpgs.s[195]++;
                    errorCallback = arg;
                  } else {
                    cov_et3brlpgs.b[51][1]++;
                  }
                }
              } else {
                cov_et3brlpgs.b[49][1]++;
              }
            }

            var self = (cov_et3brlpgs.s[196]++, this);
            cov_et3brlpgs.s[197]++;
            this.httpDo(
              args[0],
              'GET',
              'xml',
              function(xml) {
                cov_et3brlpgs.f[15]++;
                cov_et3brlpgs.s[198]++;
                for (var key in xml) {
                  cov_et3brlpgs.s[199]++;
                  ret[key] = xml[key];
                }
                cov_et3brlpgs.s[200]++;
                if (typeof callback !== 'undefined') {
                  cov_et3brlpgs.b[52][0]++;
                  cov_et3brlpgs.s[201]++;
                  callback(ret);
                } else {
                  cov_et3brlpgs.b[52][1]++;
                }
                cov_et3brlpgs.s[202]++;

                self._decrementPreload();
              },
              function(err) {
                cov_et3brlpgs.f[16]++;
                cov_et3brlpgs.s[203]++;
                // Error handling
                _main.default._friendlyFileLoadError(1, arguments[0]);
                cov_et3brlpgs.s[204]++;

                if (errorCallback) {
                  cov_et3brlpgs.b[53][0]++;
                  cov_et3brlpgs.s[205]++;
                  errorCallback(err);
                } else {
                  cov_et3brlpgs.b[53][1]++;
                  cov_et3brlpgs.s[206]++;
                  throw err;
                }
              }
            );
            cov_et3brlpgs.s[207]++;

            return ret;
          };

          /**
           * This method is suitable for fetching files up to size of 64MB.
           * @method loadBytes
           * @param {string}   file            name of the file or URL to load
           * @param {function} [callback]      function to be executed after <a href="#/p5/loadBytes">loadBytes()</a>
           *                                    completes
           * @param {function} [errorCallback] function to be executed if there
           *                                    is an error
           * @returns {Object} an object whose 'bytes' property will be the loaded buffer
           *
           * @example
           * <div class='norender'><code>
           * let data;
           *
           * function preload() {
           *   data = loadBytes('assets/mammals.xml');
           * }
           *
           * function setup() {
           *   for (let i = 0; i < 5; i++) {
           *     console.log(data.bytes[i].toString(16));
           *   }
           * }
           * </code></div>
           *
           * @alt
           * no image displayed
           */ cov_et3brlpgs.s[208]++;
          _main.default.prototype.loadBytes = function(file, callback, errorCallback) {
            cov_et3brlpgs.f[17]++;
            var ret = (cov_et3brlpgs.s[209]++, {});

            var self = (cov_et3brlpgs.s[210]++, this);
            cov_et3brlpgs.s[211]++;
            this.httpDo(
              file,
              'GET',
              'arrayBuffer',
              function(arrayBuffer) {
                cov_et3brlpgs.f[18]++;
                cov_et3brlpgs.s[212]++;
                ret.bytes = new Uint8Array(arrayBuffer);
                cov_et3brlpgs.s[213]++;

                if (typeof callback === 'function') {
                  cov_et3brlpgs.b[54][0]++;
                  cov_et3brlpgs.s[214]++;
                  callback(ret);
                } else {
                  cov_et3brlpgs.b[54][1]++;
                }
                cov_et3brlpgs.s[215]++;

                self._decrementPreload();
              },
              function(err) {
                cov_et3brlpgs.f[19]++;
                cov_et3brlpgs.s[216]++;
                // Error handling
                _main.default._friendlyFileLoadError(6, file);
                cov_et3brlpgs.s[217]++;

                if (errorCallback) {
                  cov_et3brlpgs.b[55][0]++;
                  cov_et3brlpgs.s[218]++;
                  errorCallback(err);
                } else {
                  cov_et3brlpgs.b[55][1]++;
                  cov_et3brlpgs.s[219]++;
                  throw err;
                }
              }
            );
            cov_et3brlpgs.s[220]++;

            return ret;
          };

          /**
    * Method for executing an HTTP GET request. If data type is not specified,
    * p5 will try to guess based on the URL, defaulting to text. This is equivalent to
    * calling <code>httpDo(path, 'GET')</code>. The 'binary' datatype will return
    * a Blob object, and the 'arrayBuffer' datatype will return an ArrayBuffer
    * which can be used to initialize typed arrays (such as Uint8Array).
    *
    * @method httpGet
    * @param  {String}        path       name of the file or url to load
    * @param  {String}        [datatype] "json", "jsonp", "binary", "arrayBuffer",
    *                                    "xml", or "text"
    * @param  {Object|Boolean} [data]    param data passed sent with request
    * @param  {function}      [callback] function to be executed after
    *                                    <a href="#/p5/httpGet">httpGet()</a> completes, data is passed in
    *                                    as first argument
    * @param  {function}      [errorCallback] function to be executed if
    *                                    there is an error, response is passed
    *                                    in as first argument
    * @return {Promise} A promise that resolves with the data when the operation
    *                   completes successfully or rejects with the error after
    *                   one occurs.
    * @example
    * <div class='norender'><code>
    * // Examples use USGS Earthquake API:
    * //   https://earthquake.usgs.gov/fdsnws/event/1/#methods
    * let earthquakes;
    * function preload() {
    *   // Get the most recent earthquake in the database
    *   let url =
       'https://earthquake.usgs.gov/fdsnws/event/1/query?' +
    *     'format=geojson&limit=1&orderby=time';
    *   httpGet(url, 'jsonp', false, function(response) {
    *     // when the HTTP request completes, populate the variable that holds the
    *     // earthquake data used in the visualization.
    *     earthquakes = response;
    *   });
    * }
    *
    * function draw() {
    *   if (!earthquakes) {
    *     // Wait until the earthquake data has loaded before drawing.
    *     return;
    *   }
    *   background(200);
    *   // Get the magnitude and name of the earthquake out of the loaded JSON
    *   let earthquakeMag = earthquakes.features[0].properties.mag;
    *   let earthquakeName = earthquakes.features[0].properties.place;
    *   ellipse(width / 2, height / 2, earthquakeMag * 10, earthquakeMag * 10);
    *   textAlign(CENTER);
    *   text(earthquakeName, 0, height - 30, width, 30);
    *   noLoop();
    * }
    * </code></div>
    */
          /**
           * @method httpGet
           * @param  {String}        path
           * @param  {Object|Boolean} data
           * @param  {function}      [callback]
           * @param  {function}      [errorCallback]
           * @return {Promise}
           */
          /**
           * @method httpGet
           * @param  {String}        path
           * @param  {function}      callback
           * @param  {function}      [errorCallback]
           * @return {Promise}
           */ cov_et3brlpgs.s[221]++;
          _main.default.prototype.httpGet = function() {
            cov_et3brlpgs.f[20]++;
            cov_et3brlpgs.s[222]++;
            _main.default._validateParameters('httpGet', arguments);

            var args = (cov_et3brlpgs.s[223]++, Array.prototype.slice.call(arguments));
            cov_et3brlpgs.s[224]++;
            args.splice(1, 0, 'GET');
            cov_et3brlpgs.s[225]++;
            return _main.default.prototype.httpDo.apply(this, args);
          };

          /**
           * Method for executing an HTTP POST request. If data type is not specified,
           * p5 will try to guess based on the URL, defaulting to text. This is equivalent to
           * calling <code>httpDo(path, 'POST')</code>.
           *
           * @method httpPost
           * @param  {String}        path       name of the file or url to load
           * @param  {String}        [datatype] "json", "jsonp", "xml", or "text".
           *                                    If omitted, <a href="#/p5/httpPost">httpPost()</a> will guess.
           * @param  {Object|Boolean} [data]    param data passed sent with request
           * @param  {function}      [callback] function to be executed after
           *                                    <a href="#/p5/httpPost">httpPost()</a> completes, data is passed in
           *                                    as first argument
           * @param  {function}      [errorCallback] function to be executed if
           *                                    there is an error, response is passed
           *                                    in as first argument
           * @return {Promise} A promise that resolves with the data when the operation
           *                   completes successfully or rejects with the error after
           *                   one occurs.
           *
           * @example
           * <div>
           * <code>
           * // Examples use jsonplaceholder.typicode.com for a Mock Data API
           *
           * let url = 'https://jsonplaceholder.typicode.com/posts';
           * let postData = { userId: 1, title: 'p5 Clicked!', body: 'p5.js is very cool.' };
           *
           * function setup() {
           *   createCanvas(100, 100);
           *   background(200);
           * }
           *
           * function mousePressed() {
           *   httpPost(url, 'json', postData, function(result) {
           *     strokeWeight(2);
           *     text(result.body, mouseX, mouseY);
           *   });
           * }
           * </code>
           * </div>
           *
           * <div><code>
           * let url = 'ttps://invalidURL'; // A bad URL that will cause errors
           * let postData = { title: 'p5 Clicked!', body: 'p5.js is very cool.' };
           *
           * function setup() {
           *   createCanvas(100, 100);
           *   background(200);
           * }
           *
           * function mousePressed() {
           *   httpPost(
           *     url,
           *     'json',
           *     postData,
           *     function(result) {
           *       // ... won't be called
           *     },
           *     function(error) {
           *       strokeWeight(2);
           *       text(error.toString(), mouseX, mouseY);
           *     }
           *   );
           * }
           * </code></div>
           */
          /**
           * @method httpPost
           * @param  {String}        path
           * @param  {Object|Boolean} data
           * @param  {function}      [callback]
           * @param  {function}      [errorCallback]
           * @return {Promise}
           */
          /**
           * @method httpPost
           * @param  {String}        path
           * @param  {function}      callback
           * @param  {function}      [errorCallback]
           * @return {Promise}
           */ cov_et3brlpgs.s[226]++;
          _main.default.prototype.httpPost = function() {
            cov_et3brlpgs.f[21]++;
            cov_et3brlpgs.s[227]++;
            _main.default._validateParameters('httpPost', arguments);

            var args = (cov_et3brlpgs.s[228]++, Array.prototype.slice.call(arguments));
            cov_et3brlpgs.s[229]++;
            args.splice(1, 0, 'POST');
            cov_et3brlpgs.s[230]++;
            return _main.default.prototype.httpDo.apply(this, args);
          };

          /**
           * Method for executing an HTTP request. If data type is not specified,
           * p5 will try to guess based on the URL, defaulting to text.<br><br>
           * For more advanced use, you may also pass in the path as the first argument
           * and a object as the second argument, the signature follows the one specified
           * in the Fetch API specification.
           * This method is suitable for fetching files up to size of 64MB when "GET" is used.
           *
           * @method httpDo
           * @param  {String}        path       name of the file or url to load
           * @param  {String}        [method]   either "GET", "POST", or "PUT",
           *                                    defaults to "GET"
           * @param  {String}        [datatype] "json", "jsonp", "xml", or "text"
           * @param  {Object}        [data]     param data passed sent with request
           * @param  {function}      [callback] function to be executed after
           *                                    <a href="#/p5/httpGet">httpGet()</a> completes, data is passed in
           *                                    as first argument
           * @param  {function}      [errorCallback] function to be executed if
           *                                    there is an error, response is passed
           *                                    in as first argument
           * @return {Promise} A promise that resolves with the data when the operation
           *                   completes successfully or rejects with the error after
           *                   one occurs.
           *
           * @example
           * <div>
           * <code>
           * // Examples use USGS Earthquake API:
           * // https://earthquake.usgs.gov/fdsnws/event/1/#methods
           *
           * // displays an animation of all USGS earthquakes
           * let earthquakes;
           * let eqFeatureIndex = 0;
           *
           * function preload() {
           *   let url = 'https://earthquake.usgs.gov/fdsnws/event/1/query?format=geojson';
           *   httpDo(
           *     url,
           *     {
           *       method: 'GET',
           *       // Other Request options, like special headers for apis
           *       headers: { authorization: 'Bearer secretKey' }
           *     },
           *     function(res) {
           *       earthquakes = res;
           *     }
           *   );
           * }
           *
           * function draw() {
           *   // wait until the data is loaded
           *   if (!earthquakes || !earthquakes.features[eqFeatureIndex]) {
           *     return;
           *   }
           *   clear();
           *
           *   let feature = earthquakes.features[eqFeatureIndex];
           *   let mag = feature.properties.mag;
           *   let rad = mag / 11 * ((width + height) / 2);
           *   fill(255, 0, 0, 100);
           *   ellipse(width / 2 + random(-2, 2), height / 2 + random(-2, 2), rad, rad);
           *
           *   if (eqFeatureIndex >= earthquakes.features.length) {
           *     eqFeatureIndex = 0;
           *   } else {
           *     eqFeatureIndex += 1;
           *   }
           * }
           * </code>
           * </div>
           */
          /**
           * @method httpDo
           * @param  {String}        path
           * @param  {Object}        options   Request object options as documented in the
           *                                    "fetch" API
           * <a href="https://developer.mozilla.org/en/docs/Web/API/Fetch_API">reference</a>
           * @param  {function}      [callback]
           * @param  {function}      [errorCallback]
           * @return {Promise}
           */ cov_et3brlpgs.s[231]++;
          _main.default.prototype.httpDo = function() {
            cov_et3brlpgs.f[22]++;
            var type;
            var callback;
            var errorCallback;
            var request;
            var promise;
            var jsonpOptions = (cov_et3brlpgs.s[232]++, {});
            var cbCount = (cov_et3brlpgs.s[233]++, 0);
            var contentType = (cov_et3brlpgs.s[234]++, 'text/plain');
            // Trim the callbacks off the end to get an idea of how many arguments are passed
            cov_et3brlpgs.s[235]++;
            for (var i = (cov_et3brlpgs.s[236]++, arguments.length - 1); i > 0; i--) {
              cov_et3brlpgs.s[237]++;
              if (
                typeof (i < 0 || arguments.length <= i ? undefined : arguments[i]) ===
                'function'
              ) {
                cov_et3brlpgs.b[56][0]++;
                cov_et3brlpgs.s[238]++;
                cbCount++;
              } else {
                cov_et3brlpgs.b[56][1]++;
                cov_et3brlpgs.s[239]++;
                break;
              }
            }
            // The number of arguments minus callbacks
            var argsCount = (cov_et3brlpgs.s[240]++, arguments.length - cbCount);
            var path = (cov_et3brlpgs.s[241]++,
            arguments.length <= 0 ? undefined : arguments[0]);
            cov_et3brlpgs.s[242]++;
            if (
              (cov_et3brlpgs.b[58][0]++, argsCount === 2) &&
              (cov_et3brlpgs.b[58][1]++, typeof path === 'string') &&
              (cov_et3brlpgs.b[58][2]++,
              _typeof(arguments.length <= 1 ? undefined : arguments[1]) === 'object')
            ) {
              cov_et3brlpgs.b[57][0]++;
              cov_et3brlpgs.s[243]++;
              // Intended for more advanced use, pass in Request parameters directly
              request = new Request(path, arguments.length <= 1 ? undefined : arguments[1]);
              cov_et3brlpgs.s[244]++;
              callback = arguments.length <= 2 ? undefined : arguments[2];
              cov_et3brlpgs.s[245]++;
              errorCallback = arguments.length <= 3 ? undefined : arguments[3];
            } else {
              cov_et3brlpgs.b[57][1]++;
              // Provided with arguments
              var method = (cov_et3brlpgs.s[246]++, 'GET');
              var data;
              cov_et3brlpgs.s[247]++;

              for (var j = (cov_et3brlpgs.s[248]++, 1); j < arguments.length; j++) {
                var a = (cov_et3brlpgs.s[249]++,
                j < 0 || arguments.length <= j ? undefined : arguments[j]);
                cov_et3brlpgs.s[250]++;
                if (typeof a === 'string') {
                  cov_et3brlpgs.b[59][0]++;
                  cov_et3brlpgs.s[251]++;
                  if (
                    (cov_et3brlpgs.b[61][0]++, a === 'GET') ||
                    (cov_et3brlpgs.b[61][1]++, a === 'POST') ||
                    (cov_et3brlpgs.b[61][2]++, a === 'PUT') ||
                    (cov_et3brlpgs.b[61][3]++, a === 'DELETE')
                  ) {
                    cov_et3brlpgs.b[60][0]++;
                    cov_et3brlpgs.s[252]++;
                    method = a;
                  } else {
                    cov_et3brlpgs.b[60][1]++;
                    cov_et3brlpgs.s[253]++;
                    if (
                      (cov_et3brlpgs.b[63][0]++, a === 'json') ||
                      (cov_et3brlpgs.b[63][1]++, a === 'jsonp') ||
                      (cov_et3brlpgs.b[63][2]++, a === 'binary') ||
                      (cov_et3brlpgs.b[63][3]++, a === 'arrayBuffer') ||
                      (cov_et3brlpgs.b[63][4]++, a === 'xml') ||
                      (cov_et3brlpgs.b[63][5]++, a === 'text') ||
                      (cov_et3brlpgs.b[63][6]++, a === 'table')
                    ) {
                      cov_et3brlpgs.b[62][0]++;
                      cov_et3brlpgs.s[254]++;
                      type = a;
                    } else {
                      cov_et3brlpgs.b[62][1]++;
                      cov_et3brlpgs.s[255]++;
                      data = a;
                    }
                  }
                } else {
                  cov_et3brlpgs.b[59][1]++;
                  cov_et3brlpgs.s[256]++;
                  if (typeof a === 'number') {
                    cov_et3brlpgs.b[64][0]++;
                    cov_et3brlpgs.s[257]++;
                    data = a.toString();
                  } else {
                    cov_et3brlpgs.b[64][1]++;
                    cov_et3brlpgs.s[258]++;
                    if (_typeof(a) === 'object') {
                      cov_et3brlpgs.b[65][0]++;
                      cov_et3brlpgs.s[259]++;
                      if (
                        (cov_et3brlpgs.b[67][0]++, a.hasOwnProperty('jsonpCallback')) ||
                        (cov_et3brlpgs.b[67][1]++,
                        a.hasOwnProperty('jsonpCallbackFunction'))
                      ) {
                        cov_et3brlpgs.b[66][0]++;
                        cov_et3brlpgs.s[260]++;
                        for (var attr in a) {
                          cov_et3brlpgs.s[261]++;
                          jsonpOptions[attr] = a[attr];
                        }
                      } else {
                        cov_et3brlpgs.b[66][1]++;
                        cov_et3brlpgs.s[262]++;
                        if (a instanceof _main.default.XML) {
                          cov_et3brlpgs.b[68][0]++;
                          cov_et3brlpgs.s[263]++;
                          data = a.serialize();
                          cov_et3brlpgs.s[264]++;
                          contentType = 'application/xml';
                        } else {
                          cov_et3brlpgs.b[68][1]++;
                          cov_et3brlpgs.s[265]++;
                          data = JSON.stringify(a);
                          cov_et3brlpgs.s[266]++;
                          contentType = 'application/json';
                        }
                      }
                    } else {
                      cov_et3brlpgs.b[65][1]++;
                      cov_et3brlpgs.s[267]++;
                      if (typeof a === 'function') {
                        cov_et3brlpgs.b[69][0]++;
                        cov_et3brlpgs.s[268]++;
                        if (!callback) {
                          cov_et3brlpgs.b[70][0]++;
                          cov_et3brlpgs.s[269]++;
                          callback = a;
                        } else {
                          cov_et3brlpgs.b[70][1]++;
                          cov_et3brlpgs.s[270]++;
                          errorCallback = a;
                        }
                      } else {
                        cov_et3brlpgs.b[69][1]++;
                      }
                    }
                  }
                }
              }

              var headers = (cov_et3brlpgs.s[271]++,
              method === 'GET'
                ? (cov_et3brlpgs.b[71][0]++, new Headers())
                : (cov_et3brlpgs.b[71][1]++, new Headers({ 'Content-Type': contentType })));
              cov_et3brlpgs.s[272]++;

              request = new Request(path, {
                method: method,
                mode: 'cors',
                body: data,
                headers: headers
              });
            }
            // do some sort of smart type checking
            cov_et3brlpgs.s[273]++;
            if (!type) {
              cov_et3brlpgs.b[72][0]++;
              cov_et3brlpgs.s[274]++;
              if (path.includes('json')) {
                cov_et3brlpgs.b[73][0]++;
                cov_et3brlpgs.s[275]++;
                type = 'json';
              } else {
                cov_et3brlpgs.b[73][1]++;
                cov_et3brlpgs.s[276]++;
                if (path.includes('xml')) {
                  cov_et3brlpgs.b[74][0]++;
                  cov_et3brlpgs.s[277]++;
                  type = 'xml';
                } else {
                  cov_et3brlpgs.b[74][1]++;
                  cov_et3brlpgs.s[278]++;
                  type = 'text';
                }
              }
            } else {
              cov_et3brlpgs.b[72][1]++;
            }
            cov_et3brlpgs.s[279]++;

            if (type === 'jsonp') {
              cov_et3brlpgs.b[75][0]++;
              cov_et3brlpgs.s[280]++;
              promise = (0, _fetchJsonp.default)(path, jsonpOptions);
            } else {
              cov_et3brlpgs.b[75][1]++;
              cov_et3brlpgs.s[281]++;
              promise = fetch(request);
            }
            cov_et3brlpgs.s[282]++;
            promise = promise.then(function(res) {
              cov_et3brlpgs.f[23]++;
              cov_et3brlpgs.s[283]++;
              if (!res.ok) {
                cov_et3brlpgs.b[76][0]++;
                var err = (cov_et3brlpgs.s[284]++, new Error(res.body));
                cov_et3brlpgs.s[285]++;
                err.status = res.status;
                cov_et3brlpgs.s[286]++;
                err.ok = false;
                cov_et3brlpgs.s[287]++;
                throw err;
              } else {
                cov_et3brlpgs.b[76][1]++;
                var fileSize = (cov_et3brlpgs.s[288]++, 0);
                cov_et3brlpgs.s[289]++;
                if (type !== 'jsonp') {
                  cov_et3brlpgs.b[77][0]++;
                  cov_et3brlpgs.s[290]++;
                  fileSize = res.headers.get('content-length');
                } else {
                  cov_et3brlpgs.b[77][1]++;
                }
                cov_et3brlpgs.s[291]++;
                if (
                  (cov_et3brlpgs.b[79][0]++, fileSize) &&
                  (cov_et3brlpgs.b[79][1]++, fileSize > 64000000)
                ) {
                  cov_et3brlpgs.b[78][0]++;
                  cov_et3brlpgs.s[292]++;
                  _main.default._friendlyFileLoadError(7, path);
                } else {
                  cov_et3brlpgs.b[78][1]++;
                }
                cov_et3brlpgs.s[293]++;
                switch (type) {
                  case 'json':
                    cov_et3brlpgs.b[80][0]++;
                  case 'jsonp':
                    cov_et3brlpgs.b[80][1]++;
                    cov_et3brlpgs.s[294]++;
                    return res.json();
                  case 'binary':
                    cov_et3brlpgs.b[80][2]++;
                    cov_et3brlpgs.s[295]++;
                    return res.blob();
                  case 'arrayBuffer':
                    cov_et3brlpgs.b[80][3]++;
                    cov_et3brlpgs.s[296]++;
                    return res.arrayBuffer();
                  case 'xml':
                    cov_et3brlpgs.b[80][4]++;
                    cov_et3brlpgs.s[297]++;
                    return res.text().then(function(text) {
                      cov_et3brlpgs.f[24]++;
                      var parser = (cov_et3brlpgs.s[298]++, new DOMParser());
                      var xml = (cov_et3brlpgs.s[299]++,
                      parser.parseFromString(text, 'text/xml'));
                      cov_et3brlpgs.s[300]++;
                      return new _main.default.XML(xml.documentElement);
                    });
                  default:
                    cov_et3brlpgs.b[80][5]++;
                    cov_et3brlpgs.s[301]++;
                    return res.text();
                }
              }
            });
            cov_et3brlpgs.s[302]++;
            promise.then(
              (cov_et3brlpgs.b[81][0]++, callback) ||
                (cov_et3brlpgs.b[81][1]++,
                function() {
                  cov_et3brlpgs.f[25]++;
                })
            );
            cov_et3brlpgs.s[303]++;
            promise.catch(
              (cov_et3brlpgs.b[82][0]++, errorCallback) ||
                (cov_et3brlpgs.b[82][1]++, console.error)
            );
            cov_et3brlpgs.s[304]++;
            return promise;
          };

          /**
           * @module IO
           * @submodule Output
           * @for p5
           */ cov_et3brlpgs.s[305]++;

          window.URL =
            (cov_et3brlpgs.b[83][0]++, window.URL) ||
            (cov_et3brlpgs.b[83][1]++, window.webkitURL);

          // private array of p5.PrintWriter objects
          cov_et3brlpgs.s[306]++;
          _main.default.prototype._pWriters = [];

          /**
           * @method createWriter
           * @param {String} name name of the file to be created
           * @param {String} [extension]
           * @return {p5.PrintWriter}
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 100);
           *   background(200);
           *   text('click here to save', 10, 10, 70, 80);
           * }
           *
           * function mousePressed() {
           *   if (mouseX > 0 && mouseX < width && mouseY > 0 && mouseY < height) {
           *     const writer = createWriter('squares.txt');
           *     for (let i = 0; i < 10; i++) {
           *       writer.print(i * i);
           *     }
           *     writer.close();
           *     writer.clear();
           *   }
           * }
           * </code>
           * </div>
           */ cov_et3brlpgs.s[307]++;
          _main.default.prototype.createWriter = function(name, extension) {
            cov_et3brlpgs.f[26]++;
            var newPW;
            // check that it doesn't already exist
            cov_et3brlpgs.s[308]++;
            for (var i in _main.default.prototype._pWriters) {
              cov_et3brlpgs.s[309]++;
              if (_main.default.prototype._pWriters[i].name === name) {
                cov_et3brlpgs.b[84][0]++;
                cov_et3brlpgs.s[310]++;
                // if a p5.PrintWriter w/ this name already exists...
                // return p5.prototype._pWriters[i]; // return it w/ contents intact.
                // or, could return a new, empty one with a unique name:
                newPW = new _main.default.PrintWriter(name + this.millis(), extension);
                cov_et3brlpgs.s[311]++;
                _main.default.prototype._pWriters.push(newPW);
                cov_et3brlpgs.s[312]++;
                return newPW;
              } else {
                cov_et3brlpgs.b[84][1]++;
              }
            }
            cov_et3brlpgs.s[313]++;
            newPW = new _main.default.PrintWriter(name, extension);
            cov_et3brlpgs.s[314]++;
            _main.default.prototype._pWriters.push(newPW);
            cov_et3brlpgs.s[315]++;
            return newPW;
          };

          /**
           *  @class p5.PrintWriter
           *  @param  {String}     filename
           *  @param  {String}     [extension]
           */ cov_et3brlpgs.s[316]++;
          _main.default.PrintWriter = function(filename, extension) {
            cov_et3brlpgs.f[27]++;
            var self = (cov_et3brlpgs.s[317]++, this);
            cov_et3brlpgs.s[318]++;
            this.name = filename;
            cov_et3brlpgs.s[319]++;
            this.content = '';
            //Changed to write because it was being overloaded by function below.
            /**
             * Writes data to the PrintWriter stream
             * @method write
             * @param {Array} data all data to be written by the PrintWriter
             * @example
             * <div class="norender notest">
             * <code>
             * // creates a file called 'newFile.txt'
             * let writer = createWriter('newFile.txt');
             * // write 'Hello world!'' to the file
             * writer.write(['Hello world!']);
             * // close the PrintWriter and save the file
             * writer.close();
             * </code>
             * </div>
             * <div class='norender notest'>
             * <code>
             * // creates a file called 'newFile2.txt'
             * let writer = createWriter('newFile2.txt');
             * // write 'apples,bananas,123' to the file
             * writer.write(['apples', 'bananas', 123]);
             * // close the PrintWriter and save the file
             * writer.close();
             * </code>
             * </div>
             * <div class='norender notest'>
             * <code>
             * // creates a file called 'newFile3.txt'
             * let writer = createWriter('newFile3.txt');
             * // write 'My name is: Teddy' to the file
             * writer.write('My name is:');
             * writer.write(' Teddy');
             * // close the PrintWriter and save the file
             * writer.close();
             * </code>
             * </div>
             * <div>
             * <code>
             * function setup() {
             *   createCanvas(100, 100);
             *   button = createButton('SAVE FILE');
             *   button.position(21, 40);
             *   button.mousePressed(createFile);
             * }
             *
             * function createFile() {
             *   // creates a file called 'newFile.txt'
             *   let writer = createWriter('newFile.txt');
             *   // write 'Hello world!'' to the file
             *   writer.write(['Hello world!']);
             *   // close the PrintWriter and save the file
             *   writer.close();
             * }
             * </code>
             * </div>
             */ cov_et3brlpgs.s[320]++;
            this.write = function(data) {
              cov_et3brlpgs.f[28]++;
              cov_et3brlpgs.s[321]++;
              this.content += data;
            };
            /**
             * Writes data to the PrintWriter stream, and adds a new line at the end
             * @method print
             * @param {Array} data all data to be printed by the PrintWriter
             * @example
             * <div class='norender notest'>
             * <code>
             * // creates a file called 'newFile.txt'
             * let writer = createWriter('newFile.txt');
             * // creates a file containing
             * //  My name is:
             * //  Teddy
             * writer.print('My name is:');
             * writer.print('Teddy');
             * // close the PrintWriter and save the file
             * writer.close();
             * </code>
             * </div>
             * <div class='norender notest'>
             * <code>
             * let writer;
             *
             * function setup() {
             *   createCanvas(400, 400);
             *   // create a PrintWriter
             *   writer = createWriter('newFile.txt');
             * }
             *
             * function draw() {
             *   writer.print([mouseX, mouseY]);
             * }
             *
             * function mouseClicked() {
             *   writer.close();
             * }
             * </code>
             * </div>
             */ cov_et3brlpgs.s[322]++;
            this.print = function(data) {
              cov_et3brlpgs.f[29]++;
              cov_et3brlpgs.s[323]++;
              this.content += ''.concat(data, '\n');
            };
            /**
             * Clears the data already written to the PrintWriter object
             * @method clear
             * @example
             * <div class ="norender notest"><code>
             * // create writer object
             * let writer = createWriter('newFile.txt');
             * writer.write(['clear me']);
             * // clear writer object here
             * writer.clear();
             * // close writer
             * writer.close();
             * </code></div>
             * <div>
             * <code>
             * function setup() {
             *   button = createButton('CLEAR ME');
             *   button.position(21, 40);
             *   button.mousePressed(createFile);
             * }
             *
             * function createFile() {
             *   let writer = createWriter('newFile.txt');
             *   writer.write(['clear me']);
             *   writer.clear();
             *   writer.close();
             * }
             * </code>
             * </div>
             *
             */ cov_et3brlpgs.s[324]++;
            this.clear = function() {
              cov_et3brlpgs.f[30]++;
              cov_et3brlpgs.s[325]++;
              this.content = '';
            };
            /**
             * Closes the PrintWriter
             * @method close
             * @example
             * <div class="norender notest">
             * <code>
             * // create a file called 'newFile.txt'
             * let writer = createWriter('newFile.txt');
             * // close the PrintWriter and save the file
             * writer.close();
             * </code>
             * </div>
             * <div class='norender notest'>
             * <code>
             * // create a file called 'newFile2.txt'
             * let writer = createWriter('newFile2.txt');
             * // write some data to the file
             * writer.write([100, 101, 102]);
             * // close the PrintWriter and save the file
             * writer.close();
             * </code>
             * </div>
             */ cov_et3brlpgs.s[326]++;
            this.close = function() {
              cov_et3brlpgs.f[31]++;
              // convert String to Array for the writeFile Blob
              var arr = (cov_et3brlpgs.s[327]++, []);
              cov_et3brlpgs.s[328]++;
              arr.push(this.content);
              cov_et3brlpgs.s[329]++;
              _main.default.prototype.writeFile(arr, filename, extension);
              // remove from _pWriters array and delete self
              cov_et3brlpgs.s[330]++;
              for (var i in _main.default.prototype._pWriters) {
                cov_et3brlpgs.s[331]++;
                if (_main.default.prototype._pWriters[i].name === this.name) {
                  cov_et3brlpgs.b[85][0]++;
                  cov_et3brlpgs.s[332]++;
                  // remove from _pWriters array
                  _main.default.prototype._pWriters.splice(i, 1);
                } else {
                  cov_et3brlpgs.b[85][1]++;
                }
              }
              cov_et3brlpgs.s[333]++;
              self.clear();
              cov_et3brlpgs.s[334]++;
              self = {};
            };
          };

          /**
           * @module IO
           * @submodule Output
           * @for p5
           */

          // object, filename, options --> saveJSON, saveStrings,
          // filename, [extension] [canvas] --> saveImage

          /**
           *  Saves a given element(image, text, json, csv, wav, or html) to the client's
           *  computer. The first parameter can be a pointer to element we want to save.
           *  The element can be one of <a href="#/p5.Element">p5.Element</a>,an Array of
           *  Strings, an Array of JSON, a JSON object, a <a href="#/p5.Table">p5.Table
           *  </a>, a <a href="#/p5.Image">p5.Image</a>, or a p5.SoundFile (requires
           *  p5.sound). The second parameter is a filename (including extension).The
           *  third parameter is for options specific to this type of object. This method
           *  will save a file that fits the given parameters.
           *  If it is called without specifying an element, by default it will save the
           *  whole canvas as an image file. You can optionally specify a filename as
           *  the first parameter in such a case.
           *  **Note that it is not recommended to
           *  call this method within draw, as it will open a new save dialog on every
           *  render.**
           *
           * @method save
           * @param  {Object|String} [objectOrFilename]  If filename is provided, will
           *                                             save canvas as an image with
           *                                             either png or jpg extension
           *                                             depending on the filename.
           *                                             If object is provided, will
           *                                             save depending on the object
           *                                             and filename (see examples
           *                                             above).
           * @param  {String} [filename] If an object is provided as the first
           *                               parameter, then the second parameter
           *                               indicates the filename,
           *                               and should include an appropriate
           *                               file extension (see examples above).
           * @param  {Boolean|String} [options]  Additional options depend on
           *                            filetype. For example, when saving JSON,
           *                            <code>true</code> indicates that the
           *                            output will be optimized for filesize,
           *                            rather than readability.
           *
           * @example
           * <div class="norender"><code>
           * // Saves the canvas as an image
           * cnv = createCanvas(300, 300);
           * save(cnv, 'myCanvas.jpg');
           *
           * // Saves the canvas as an image by default
           * save('myCanvas.jpg');
           * </code></div>
           *
           *  <div class="norender"><code>
           * // Saves p5.Image as an image
           * img = createImage(10, 10);
           * save(img, 'myImage.png');
           * </code></div>
           *
           * <div class="norender"><code>
           * // Saves p5.Renderer object as an image
           * obj = createGraphics(100, 100);
           * save(obj, 'myObject.png');
           * </code></div>
           *
           * <div class="norender"><code>
           * let myTable = new p5.Table();
           * // Saves table as html file
           * save(myTable, 'myTable.html');
           *
           * // Comma Separated Values
           * save(myTable, 'myTable.csv');
           *
           * // Tab Separated Values
           * save(myTable, 'myTable.tsv');
           * </code></div>
           *
           * <div class="norender"><code>
           * let myJSON = { a: 1, b: true };
           *
           * // Saves pretty JSON
           * save(myJSON, 'my.json');
           *
           * // Optimizes JSON filesize
           * save(myJSON, 'my.json', true);
           * </code></div>
           *
           * <div class="norender"><code>
           * // Saves array of strings to text file with line breaks after each item
           * let arrayOfStrings = ['a', 'b'];
           * save(arrayOfStrings, 'my.txt');
           * </code></div>
           *
           * @alt
           * An example for saving a canvas as an image.
           * An example for saving a p5.Image element as an image.
           * An example for saving a p5.Renderer element.
           * An example showing how to save a table in formats of HTML, CSV and TSV.
           * An example for saving JSON to a txt file with some extra arguments.
           * An example for saving an array of strings to text file with line breaks.
           */ cov_et3brlpgs.s[335]++;

          _main.default.prototype.save = function(object, _filename, _options) {
            cov_et3brlpgs.f[32]++;
            // parse the arguments and figure out which things we are saving
            var args = (cov_et3brlpgs.s[336]++, arguments);
            // =================================================
            // OPTION 1: saveCanvas...

            // if no arguments are provided, save canvas
            var cnv = (cov_et3brlpgs.s[337]++,
            this._curElement
              ? (cov_et3brlpgs.b[86][0]++, this._curElement.elt)
              : (cov_et3brlpgs.b[86][1]++, this.elt));
            cov_et3brlpgs.s[338]++;
            if (args.length === 0) {
              cov_et3brlpgs.b[87][0]++;
              cov_et3brlpgs.s[339]++;
              _main.default.prototype.saveCanvas(cnv);
              cov_et3brlpgs.s[340]++;
              return;
            } else {
              cov_et3brlpgs.b[87][1]++;
              cov_et3brlpgs.s[341]++;
              if (
                (cov_et3brlpgs.b[89][0]++, args[0] instanceof _main.default.Renderer) ||
                (cov_et3brlpgs.b[89][1]++, args[0] instanceof _main.default.Graphics)
              ) {
                cov_et3brlpgs.b[88][0]++;
                cov_et3brlpgs.s[342]++;
                // otherwise, parse the arguments

                // if first param is a p5Graphics, then saveCanvas
                _main.default.prototype.saveCanvas(args[0].elt, args[1], args[2]);
                cov_et3brlpgs.s[343]++;
                return;
              } else {
                cov_et3brlpgs.b[88][1]++;
                cov_et3brlpgs.s[344]++;
                if (
                  (cov_et3brlpgs.b[91][0]++, args.length === 1) &&
                  (cov_et3brlpgs.b[91][1]++, typeof args[0] === 'string')
                ) {
                  cov_et3brlpgs.b[90][0]++;
                  cov_et3brlpgs.s[345]++;
                  // if 1st param is String and only one arg, assume it is canvas filename
                  _main.default.prototype.saveCanvas(cnv, args[0]);
                } else {
                  cov_et3brlpgs.b[90][1]++;
                  // =================================================
                  // OPTION 2: extension clarifies saveStrings vs. saveJSON
                  var extension = (cov_et3brlpgs.s[346]++,
                  _checkFileExtension(args[1], args[2])[1]);
                  cov_et3brlpgs.s[347]++;
                  switch (extension) {
                    case 'json':
                      cov_et3brlpgs.b[92][0]++;
                      cov_et3brlpgs.s[348]++;
                      _main.default.prototype.saveJSON(args[0], args[1], args[2]);
                      cov_et3brlpgs.s[349]++;
                      return;
                    case 'txt':
                      cov_et3brlpgs.b[92][1]++;
                      cov_et3brlpgs.s[350]++;
                      _main.default.prototype.saveStrings(args[0], args[1], args[2]);
                      cov_et3brlpgs.s[351]++;
                      return;
                    // =================================================
                    // OPTION 3: decide based on object...
                    default:
                      cov_et3brlpgs.b[92][2]++;
                      cov_et3brlpgs.s[352]++;
                      if (args[0] instanceof Array) {
                        cov_et3brlpgs.b[93][0]++;
                        cov_et3brlpgs.s[353]++;
                        _main.default.prototype.saveStrings(args[0], args[1], args[2]);
                      } else {
                        cov_et3brlpgs.b[93][1]++;
                        cov_et3brlpgs.s[354]++;
                        if (args[0] instanceof _main.default.Table) {
                          cov_et3brlpgs.b[94][0]++;
                          cov_et3brlpgs.s[355]++;
                          _main.default.prototype.saveTable(args[0], args[1], args[2]);
                        } else {
                          cov_et3brlpgs.b[94][1]++;
                          cov_et3brlpgs.s[356]++;
                          if (args[0] instanceof _main.default.Image) {
                            cov_et3brlpgs.b[95][0]++;
                            cov_et3brlpgs.s[357]++;
                            _main.default.prototype.saveCanvas(args[0].canvas, args[1]);
                          } else {
                            cov_et3brlpgs.b[95][1]++;
                            cov_et3brlpgs.s[358]++;
                            if (args[0] instanceof _main.default.SoundFile) {
                              cov_et3brlpgs.b[96][0]++;
                              cov_et3brlpgs.s[359]++;
                              _main.default.prototype.saveSound(
                                args[0],
                                args[1],
                                args[2],
                                args[3]
                              );
                            } else {
                              cov_et3brlpgs.b[96][1]++;
                            }
                          }
                        }
                      }
                  }
                }
              }
            }
          };

          /**
           *  Writes the contents of an Array or a JSON object to a .json file.
           *  The file saving process and location of the saved file will
           *  vary between web browsers.
           *
           *  @method saveJSON
           *  @param  {Array|Object} json
           *  @param  {String} filename
           *  @param  {Boolean} [optimize]   If true, removes line breaks
           *                                 and spaces from the output
           *                                 file to optimize filesize
           *                                 (but not readability).
           *  @example
           * <div><code>
           * let json = {}; // new  JSON Object
           *
           * json.id = 0;
           * json.species = 'Panthera leo';
           * json.name = 'Lion';
           *
           * function setup() {
           *   createCanvas(100, 100);
           *   background(200);
           *   text('click here to save', 10, 10, 70, 80);
           * }
           *
           * function mousePressed() {
           *   if (mouseX > 0 && mouseX < width && mouseY > 0 && mouseY < height) {
           *     saveJSON(json, 'lion.json');
           *   }
           * }
           *
           * // saves the following to a file called "lion.json":
           * // {
           * //   "id": 0,
           * //   "species": "Panthera leo",
           * //   "name": "Lion"
           * // }
           * </code></div>
           *
           * @alt
           * no image displayed
           */ cov_et3brlpgs.s[360]++;
          _main.default.prototype.saveJSON = function(json, filename, opt) {
            cov_et3brlpgs.f[33]++;
            cov_et3brlpgs.s[361]++;
            _main.default._validateParameters('saveJSON', arguments);
            var stringify;
            cov_et3brlpgs.s[362]++;
            if (opt) {
              cov_et3brlpgs.b[97][0]++;
              cov_et3brlpgs.s[363]++;
              stringify = JSON.stringify(json);
            } else {
              cov_et3brlpgs.b[97][1]++;
              cov_et3brlpgs.s[364]++;
              stringify = JSON.stringify(json, undefined, 2);
            }
            cov_et3brlpgs.s[365]++;
            this.saveStrings(stringify.split('\n'), filename, 'json');
          };
          cov_et3brlpgs.s[366]++;

          _main.default.prototype.saveJSONObject = _main.default.prototype.saveJSON;
          cov_et3brlpgs.s[367]++;
          _main.default.prototype.saveJSONArray = _main.default.prototype.saveJSON;

          /**
           *  Writes an array of Strings to a text file, one line per String.
           *  The file saving process and location of the saved file will
           *  vary between web browsers.
           *
           *  @method saveStrings
           *  @param  {String[]} list   string array to be written
           *  @param  {String} filename filename for output
           *  @param  {String} [extension] the filename's extension
           *  @param  {Boolean} [isCRLF] if true, change line-break to CRLF
           *  @example
           * <div><code>
           * let words = 'apple bear cat dog';
           *
           * // .split() outputs an Array
           * let list = split(words, ' ');
           *
           * function setup() {
           *   createCanvas(100, 100);
           *   background(200);
           *   text('click here to save', 10, 10, 70, 80);
           * }
           *
           * function mousePressed() {
           *   if (mouseX > 0 && mouseX < width && mouseY > 0 && mouseY < height) {
           *     saveStrings(list, 'nouns.txt');
           *   }
           * }
           *
           * // Saves the following to a file called 'nouns.txt':
           * //
           * // apple
           * // bear
           * // cat
           * // dog
           * </code></div>
           *
           * @alt
           * no image displayed
           */ cov_et3brlpgs.s[368]++;
          _main.default.prototype.saveStrings = function(
            list,
            filename,
            extension,
            isCRLF
          ) {
            cov_et3brlpgs.f[34]++;
            cov_et3brlpgs.s[369]++;
            _main.default._validateParameters('saveStrings', arguments);
            var ext = (cov_et3brlpgs.s[370]++,
            (cov_et3brlpgs.b[98][0]++, extension) || (cov_et3brlpgs.b[98][1]++, 'txt'));
            var pWriter = (cov_et3brlpgs.s[371]++, this.createWriter(filename, ext));
            cov_et3brlpgs.s[372]++;
            for (var i = (cov_et3brlpgs.s[373]++, 0); i < list.length; i++) {
              cov_et3brlpgs.s[374]++;
              isCRLF
                ? (cov_et3brlpgs.b[99][0]++, pWriter.write(list[i] + '\r\n'))
                : (cov_et3brlpgs.b[99][1]++, pWriter.write(list[i] + '\n'));
            }
            cov_et3brlpgs.s[375]++;
            pWriter.close();
            cov_et3brlpgs.s[376]++;
            pWriter.clear();
          };

          // =======
          // HELPERS
          // =======

          function escapeHelper(content) {
            cov_et3brlpgs.f[35]++;
            cov_et3brlpgs.s[377]++;
            return content
              .replace(/&/g, '&amp;')
              .replace(/</g, '&lt;')
              .replace(/>/g, '&gt;')
              .replace(/"/g, '&quot;')
              .replace(/'/g, '&#039;');
          }

          /**
           *  Writes the contents of a <a href="#/p5.Table">Table</a> object to a file. Defaults to a
           *  text file with comma-separated-values ('csv') but can also
           *  use tab separation ('tsv'), or generate an HTML table ('html').
           *  The file saving process and location of the saved file will
           *  vary between web browsers.
           *
           *  @method saveTable
           *  @param  {p5.Table} Table  the <a href="#/p5.Table">Table</a> object to save to a file
           *  @param  {String} filename the filename to which the Table should be saved
           *  @param  {String} [options]  can be one of "tsv", "csv", or "html"
           *  @example
           *  <div><code>
           * let table;
           *
           * function setup() {
           *   table = new p5.Table();
           *
           *   table.addColumn('id');
           *   table.addColumn('species');
           *   table.addColumn('name');
           *
           *   let newRow = table.addRow();
           *   newRow.setNum('id', table.getRowCount() - 1);
           *   newRow.setString('species', 'Panthera leo');
           *   newRow.setString('name', 'Lion');
           *
           *   // To save, un-comment next line then click 'run'
           *   // saveTable(table, 'new.csv');
           * }
           *
           * // Saves the following to a file called 'new.csv':
           * // id,species,name
           * // 0,Panthera leo,Lion
           * </code></div>
           *
           * @alt
           * no image displayed
           */ cov_et3brlpgs.s[378]++;
          _main.default.prototype.saveTable = function(table, filename, options) {
            cov_et3brlpgs.f[36]++;
            cov_et3brlpgs.s[379]++;
            _main.default._validateParameters('saveTable', arguments);
            var ext;
            cov_et3brlpgs.s[380]++;
            if (options === undefined) {
              cov_et3brlpgs.b[100][0]++;
              cov_et3brlpgs.s[381]++;
              ext = filename.substring(filename.lastIndexOf('.') + 1, filename.length);
            } else {
              cov_et3brlpgs.b[100][1]++;
              cov_et3brlpgs.s[382]++;
              ext = options;
            }
            var pWriter = (cov_et3brlpgs.s[383]++, this.createWriter(filename, ext));

            var header = (cov_et3brlpgs.s[384]++, table.columns);

            var sep = (cov_et3brlpgs.s[385]++, ','); // default to CSV
            cov_et3brlpgs.s[386]++;
            if (ext === 'tsv') {
              cov_et3brlpgs.b[101][0]++;
              cov_et3brlpgs.s[387]++;
              sep = '\t';
            } else {
              cov_et3brlpgs.b[101][1]++;
            }
            cov_et3brlpgs.s[388]++;
            if (ext !== 'html') {
              cov_et3brlpgs.b[102][0]++;
              cov_et3brlpgs.s[389]++;
              // make header if it has values
              if (header[0] !== '0') {
                cov_et3brlpgs.b[103][0]++;
                cov_et3brlpgs.s[390]++;
                for (var h = (cov_et3brlpgs.s[391]++, 0); h < header.length; h++) {
                  cov_et3brlpgs.s[392]++;
                  if (h < header.length - 1) {
                    cov_et3brlpgs.b[104][0]++;
                    cov_et3brlpgs.s[393]++;
                    pWriter.write(header[h] + sep);
                  } else {
                    cov_et3brlpgs.b[104][1]++;
                    cov_et3brlpgs.s[394]++;
                    pWriter.write(header[h]);
                  }
                }
                cov_et3brlpgs.s[395]++;
                pWriter.write('\n');
              } else {
                cov_et3brlpgs.b[103][1]++;
              }

              // make rows
              cov_et3brlpgs.s[396]++;
              for (var i = (cov_et3brlpgs.s[397]++, 0); i < table.rows.length; i++) {
                var j = void 0;
                cov_et3brlpgs.s[398]++;
                for (j = 0; j < table.rows[i].arr.length; j++) {
                  cov_et3brlpgs.s[399]++;
                  if (j < table.rows[i].arr.length - 1) {
                    cov_et3brlpgs.b[105][0]++;
                    cov_et3brlpgs.s[400]++;
                    //double quotes should be inserted in csv only if contains comma separated single value
                    if (
                      (cov_et3brlpgs.b[107][0]++, ext === 'csv') &&
                      (cov_et3brlpgs.b[107][1]++,
                      String(table.rows[i].arr[j]).includes(','))
                    ) {
                      cov_et3brlpgs.b[106][0]++;
                      cov_et3brlpgs.s[401]++;
                      pWriter.write('"' + table.rows[i].arr[j] + '"' + sep);
                    } else {
                      cov_et3brlpgs.b[106][1]++;
                      cov_et3brlpgs.s[402]++;
                      pWriter.write(table.rows[i].arr[j] + sep);
                    }
                  } else {
                    cov_et3brlpgs.b[105][1]++;
                    cov_et3brlpgs.s[403]++;
                    //double quotes should be inserted in csv only if contains comma separated single value
                    if (
                      (cov_et3brlpgs.b[109][0]++, ext === 'csv') &&
                      (cov_et3brlpgs.b[109][1]++,
                      String(table.rows[i].arr[j]).includes(','))
                    ) {
                      cov_et3brlpgs.b[108][0]++;
                      cov_et3brlpgs.s[404]++;
                      pWriter.write('"' + table.rows[i].arr[j] + '"');
                    } else {
                      cov_et3brlpgs.b[108][1]++;
                      cov_et3brlpgs.s[405]++;
                      pWriter.write(table.rows[i].arr[j]);
                    }
                  }
                }
                cov_et3brlpgs.s[406]++;
                pWriter.write('\n');
              }
            } else {
              cov_et3brlpgs.b[102][1]++;
              cov_et3brlpgs.s[407]++;
              // otherwise, make HTML
              pWriter.print('<html>');
              cov_et3brlpgs.s[408]++;
              pWriter.print('<head>');
              var str = (cov_et3brlpgs.s[409]++,
              '  <meta http-equiv="content-type" content');
              cov_et3brlpgs.s[410]++;
              str += '="text/html;charset=utf-8" />';
              cov_et3brlpgs.s[411]++;
              pWriter.print(str);
              cov_et3brlpgs.s[412]++;
              pWriter.print('</head>');
              cov_et3brlpgs.s[413]++;

              pWriter.print('<body>');
              cov_et3brlpgs.s[414]++;
              pWriter.print('  <table>');

              // make header if it has values
              cov_et3brlpgs.s[415]++;
              if (header[0] !== '0') {
                cov_et3brlpgs.b[110][0]++;
                cov_et3brlpgs.s[416]++;
                pWriter.print('    <tr>');
                cov_et3brlpgs.s[417]++;
                for (var k = (cov_et3brlpgs.s[418]++, 0); k < header.length; k++) {
                  var e = (cov_et3brlpgs.s[419]++, escapeHelper(header[k]));
                  cov_et3brlpgs.s[420]++;
                  pWriter.print('      <td>'.concat(e));
                  cov_et3brlpgs.s[421]++;
                  pWriter.print('      </td>');
                }
                cov_et3brlpgs.s[422]++;
                pWriter.print('    </tr>');
              } else {
                cov_et3brlpgs.b[110][1]++;
              }

              // make rows
              cov_et3brlpgs.s[423]++;
              for (var row = (cov_et3brlpgs.s[424]++, 0); row < table.rows.length; row++) {
                cov_et3brlpgs.s[425]++;
                pWriter.print('    <tr>');
                cov_et3brlpgs.s[426]++;
                for (
                  var col = (cov_et3brlpgs.s[427]++, 0);
                  col < table.columns.length;
                  col++
                ) {
                  var entry = (cov_et3brlpgs.s[428]++, table.rows[row].getString(col));
                  var htmlEntry = (cov_et3brlpgs.s[429]++, escapeHelper(entry));
                  cov_et3brlpgs.s[430]++;
                  pWriter.print('      <td>'.concat(htmlEntry));
                  cov_et3brlpgs.s[431]++;
                  pWriter.print('      </td>');
                }
                cov_et3brlpgs.s[432]++;
                pWriter.print('    </tr>');
              }
              cov_et3brlpgs.s[433]++;
              pWriter.print('  </table>');
              cov_et3brlpgs.s[434]++;
              pWriter.print('</body>');
              cov_et3brlpgs.s[435]++;
              pWriter.print('</html>');
            }
            // close and clear the pWriter
            cov_et3brlpgs.s[436]++;
            pWriter.close();
            cov_et3brlpgs.s[437]++;
            pWriter.clear();
          }; // end saveTable()

          /**
           *  Generate a blob of file data as a url to prepare for download.
           *  Accepts an array of data, a filename, and an extension (optional).
           *  This is a private function because it does not do any formatting,
           *  but it is used by <a href="#/p5/saveStrings">saveStrings</a>, <a href="#/p5/saveJSON">saveJSON</a>, <a href="#/p5/saveTable">saveTable</a> etc.
           *
           *  @param  {Array} dataToDownload
           *  @param  {String} filename
           *  @param  {String} [extension]
           *  @private
           */ cov_et3brlpgs.s[438]++;
          _main.default.prototype.writeFile = function(
            dataToDownload,
            filename,
            extension
          ) {
            cov_et3brlpgs.f[37]++;
            var type = (cov_et3brlpgs.s[439]++, 'application/octet-stream');
            cov_et3brlpgs.s[440]++;
            if (_main.default.prototype._isSafari()) {
              cov_et3brlpgs.b[111][0]++;
              cov_et3brlpgs.s[441]++;
              type = 'text/plain';
            } else {
              cov_et3brlpgs.b[111][1]++;
            }
            var blob = (cov_et3brlpgs.s[442]++,
            new Blob(dataToDownload, {
              type: type
            }));
            cov_et3brlpgs.s[443]++;

            _main.default.prototype.downloadFile(blob, filename, extension);
          };

          /**
           *  Forces download. Accepts a url to filedata/blob, a filename,
           *  and an extension (optional).
           *  This is a private function because it does not do any formatting,
           *  but it is used by <a href="#/p5/saveStrings">saveStrings</a>, <a href="#/p5/saveJSON">saveJSON</a>, <a href="#/p5/saveTable">saveTable</a> etc.
           *
           *  @method downloadFile
           *  @private
           *  @param  {String|Blob} data    either an href generated by createObjectURL,
           *                                or a Blob object containing the data
           *  @param  {String} [filename]
           *  @param  {String} [extension]
           */ cov_et3brlpgs.s[444]++;
          _main.default.prototype.downloadFile = function(data, fName, extension) {
            cov_et3brlpgs.f[38]++;
            var fx = (cov_et3brlpgs.s[445]++, _checkFileExtension(fName, extension));
            var filename = (cov_et3brlpgs.s[446]++, fx[0]);
            cov_et3brlpgs.s[447]++;

            if (data instanceof Blob) {
              cov_et3brlpgs.b[112][0]++;
              cov_et3brlpgs.s[448]++;
              _fileSaver.default.saveAs(data, filename);
              cov_et3brlpgs.s[449]++;
              return;
            } else {
              cov_et3brlpgs.b[112][1]++;
            }

            var a = (cov_et3brlpgs.s[450]++, document.createElement('a'));
            cov_et3brlpgs.s[451]++;
            a.href = data;
            cov_et3brlpgs.s[452]++;
            a.download = filename;

            // Firefox requires the link to be added to the DOM before click()
            cov_et3brlpgs.s[453]++;
            a.onclick = function(e) {
              cov_et3brlpgs.f[39]++;
              cov_et3brlpgs.s[454]++;
              destroyClickedElement(e);
              cov_et3brlpgs.s[455]++;
              e.stopPropagation();
            };
            cov_et3brlpgs.s[456]++;

            a.style.display = 'none';
            cov_et3brlpgs.s[457]++;
            document.body.appendChild(a);

            // Safari will open this file in the same page as a confusing Blob.
            cov_et3brlpgs.s[458]++;
            if (_main.default.prototype._isSafari()) {
              cov_et3brlpgs.b[113][0]++;
              var aText = (cov_et3brlpgs.s[459]++,
              'Hello, Safari user! To download this file...\n');
              cov_et3brlpgs.s[460]++;
              aText += '1. Go to File --> Save As.\n';
              cov_et3brlpgs.s[461]++;
              aText += '2. Choose "Page Source" as the Format.\n';
              cov_et3brlpgs.s[462]++;
              aText += '3. Name it with this extension: ."'.concat(fx[1], '"');
              cov_et3brlpgs.s[463]++;
              alert(aText);
            } else {
              cov_et3brlpgs.b[113][1]++;
            }
            cov_et3brlpgs.s[464]++;
            a.click();
          };

          /**
           *  Returns a file extension, or another string
           *  if the provided parameter has no extension.
           *
           *  @param   {String} filename
           *  @param   {String} [extension]
           *  @return  {String[]} [fileName, fileExtension]
           *
           *  @private
           */
          function _checkFileExtension(filename, extension) {
            cov_et3brlpgs.f[40]++;
            cov_et3brlpgs.s[465]++;
            if (
              (cov_et3brlpgs.b[115][0]++, !extension) ||
              (cov_et3brlpgs.b[115][1]++, extension === true) ||
              (cov_et3brlpgs.b[115][2]++, extension === 'true')
            ) {
              cov_et3brlpgs.b[114][0]++;
              cov_et3brlpgs.s[466]++;
              extension = '';
            } else {
              cov_et3brlpgs.b[114][1]++;
            }
            cov_et3brlpgs.s[467]++;
            if (!filename) {
              cov_et3brlpgs.b[116][0]++;
              cov_et3brlpgs.s[468]++;
              filename = 'untitled';
            } else {
              cov_et3brlpgs.b[116][1]++;
            }
            var ext = (cov_et3brlpgs.s[469]++, '');
            // make sure the file will have a name, see if filename needs extension
            cov_et3brlpgs.s[470]++;
            if (
              (cov_et3brlpgs.b[118][0]++, filename) &&
              (cov_et3brlpgs.b[118][1]++, filename.includes('.'))
            ) {
              cov_et3brlpgs.b[117][0]++;
              cov_et3brlpgs.s[471]++;
              ext = filename.split('.').pop();
            } else {
              cov_et3brlpgs.b[117][1]++;
            }
            // append extension if it doesn't exist
            cov_et3brlpgs.s[472]++;
            if (extension) {
              cov_et3brlpgs.b[119][0]++;
              cov_et3brlpgs.s[473]++;
              if (ext !== extension) {
                cov_et3brlpgs.b[120][0]++;
                cov_et3brlpgs.s[474]++;
                ext = extension;
                cov_et3brlpgs.s[475]++;
                filename = ''.concat(filename, '.').concat(ext);
              } else {
                cov_et3brlpgs.b[120][1]++;
              }
            } else {
              cov_et3brlpgs.b[119][1]++;
            }
            cov_et3brlpgs.s[476]++;
            return [filename, ext];
          }
          cov_et3brlpgs.s[477]++;
          _main.default.prototype._checkFileExtension = _checkFileExtension;

          /**
           *  Returns true if the browser is Safari, false if not.
           *  Safari makes trouble for downloading files.
           *
           *  @return  {Boolean} [description]
           *  @private
           */ cov_et3brlpgs.s[478]++;
          _main.default.prototype._isSafari = function() {
            cov_et3brlpgs.f[41]++;
            var x = (cov_et3brlpgs.s[479]++,
            Object.prototype.toString.call(window.HTMLElement));
            cov_et3brlpgs.s[480]++;
            return x.indexOf('Constructor') > 0;
          };

          /**
           *  Helper function, a callback for download that deletes
           *  an invisible anchor element from the DOM once the file
           *  has been automatically downloaded.
           *
           *  @private
           */
          function destroyClickedElement(event) {
            cov_et3brlpgs.f[42]++;
            cov_et3brlpgs.s[481]++;
            document.body.removeChild(event.target);
          }
          var _default = _main.default;
          exports.default = _default;
        },
        {
          '../core/friendly_errors/fes_core': 275,
          '../core/friendly_errors/file_errors': 276,
          '../core/friendly_errors/validate_params': 278,
          '../core/main': 283,
          'core-js/modules/es.array.concat': 166,
          'core-js/modules/es.array.includes': 172,
          'core-js/modules/es.array.index-of': 173,
          'core-js/modules/es.array.iterator': 174,
          'core-js/modules/es.array.last-index-of': 176,
          'core-js/modules/es.array.slice': 178,
          'core-js/modules/es.array.splice': 180,
          'core-js/modules/es.function.name': 181,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.promise': 193,
          'core-js/modules/es.regexp.exec': 196,
          'core-js/modules/es.regexp.to-string': 197,
          'core-js/modules/es.string.includes': 200,
          'core-js/modules/es.string.iterator': 201,
          'core-js/modules/es.string.replace': 204,
          'core-js/modules/es.string.split': 206,
          'core-js/modules/es.symbol': 211,
          'core-js/modules/es.symbol.description': 209,
          'core-js/modules/es.symbol.iterator': 210,
          'core-js/modules/es.typed-array.copy-within': 212,
          'core-js/modules/es.typed-array.every': 213,
          'core-js/modules/es.typed-array.fill': 214,
          'core-js/modules/es.typed-array.filter': 215,
          'core-js/modules/es.typed-array.find': 217,
          'core-js/modules/es.typed-array.find-index': 216,
          'core-js/modules/es.typed-array.for-each': 220,
          'core-js/modules/es.typed-array.includes': 221,
          'core-js/modules/es.typed-array.index-of': 222,
          'core-js/modules/es.typed-array.iterator': 225,
          'core-js/modules/es.typed-array.join': 226,
          'core-js/modules/es.typed-array.last-index-of': 227,
          'core-js/modules/es.typed-array.map': 228,
          'core-js/modules/es.typed-array.reduce': 230,
          'core-js/modules/es.typed-array.reduce-right': 229,
          'core-js/modules/es.typed-array.reverse': 231,
          'core-js/modules/es.typed-array.set': 232,
          'core-js/modules/es.typed-array.slice': 233,
          'core-js/modules/es.typed-array.some': 234,
          'core-js/modules/es.typed-array.sort': 235,
          'core-js/modules/es.typed-array.subarray': 236,
          'core-js/modules/es.typed-array.to-locale-string': 237,
          'core-js/modules/es.typed-array.to-string': 238,
          'core-js/modules/es.typed-array.uint8-array': 241,
          'core-js/modules/web.dom-collections.iterator': 244,
          'core-js/modules/web.url': 246,
          'es6-promise/auto': 247,
          'fetch-jsonp': 249,
          'file-saver': 250,
          'whatwg-fetch': 261
        }
      ],
      310: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_2obndpo0kl = (function() {
            var path = '/Users/outofambit/src/p5.js/src/io/p5.Table.js';
            var hash = 'cc9c851f97376347f517d48a9b5e1efffc02b20e';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/io/p5.Table.js',
              statementMap: {
                '0': { start: { line: 42, column: 0 }, end: { line: 83, column: 2 } },
                '1': { start: { line: 75, column: 2 }, end: { line: 75, column: 20 } },
                '2': { start: { line: 82, column: 2 }, end: { line: 82, column: 17 } },
                '3': { start: { line: 135, column: 0 }, end: { line: 146, column: 2 } },
                '4': { start: { line: 137, column: 12 }, end: { line: 137, column: 36 } },
                '5': { start: { line: 139, column: 2 }, end: { line: 142, column: 3 } },
                '6': { start: { line: 141, column: 4 }, end: { line: 141, column: 46 } },
                '7': { start: { line: 143, column: 2 }, end: { line: 143, column: 17 } },
                '8': { start: { line: 144, column: 2 }, end: { line: 144, column: 20 } },
                '9': { start: { line: 145, column: 2 }, end: { line: 145, column: 11 } },
                '10': { start: { line: 188, column: 0 }, end: { line: 193, column: 2 } },
                '11': { start: { line: 189, column: 2 }, end: { line: 189, column: 29 } },
                '12': { start: { line: 190, column: 16 }, end: { line: 190, column: 58 } },
                '13': { start: { line: 191, column: 2 }, end: { line: 191, column: 18 } },
                '14': { start: { line: 192, column: 2 }, end: { line: 192, column: 38 } },
                '15': { start: { line: 236, column: 0 }, end: { line: 238, column: 2 } },
                '16': { start: { line: 237, column: 2 }, end: { line: 237, column: 22 } },
                '17': { start: { line: 284, column: 0 }, end: { line: 286, column: 2 } },
                '18': { start: { line: 285, column: 2 }, end: { line: 285, column: 19 } },
                '19': { start: { line: 332, column: 0 }, end: { line: 350, column: 2 } },
                '20': { start: { line: 334, column: 2 }, end: { line: 347, column: 3 } },
                '21': { start: { line: 335, column: 4 }, end: { line: 339, column: 5 } },
                '22': { start: { line: 335, column: 17 }, end: { line: 335, column: 18 } },
                '23': { start: { line: 336, column: 6 }, end: { line: 338, column: 7 } },
                '24': { start: { line: 337, column: 8 }, end: { line: 337, column: 28 } },
                '25': { start: { line: 342, column: 4 }, end: { line: 346, column: 5 } },
                '26': { start: { line: 342, column: 17 }, end: { line: 342, column: 18 } },
                '27': { start: { line: 343, column: 6 }, end: { line: 345, column: 7 } },
                '28': { start: { line: 344, column: 8 }, end: { line: 344, column: 28 } },
                '29': { start: { line: 349, column: 2 }, end: { line: 349, column: 14 } },
                '30': { start: { line: 401, column: 0 }, end: { line: 418, column: 2 } },
                '31': { start: { line: 402, column: 14 }, end: { line: 402, column: 16 } },
                '32': { start: { line: 403, column: 2 }, end: { line: 416, column: 3 } },
                '33': { start: { line: 404, column: 4 }, end: { line: 408, column: 5 } },
                '34': { start: { line: 404, column: 17 }, end: { line: 404, column: 18 } },
                '35': { start: { line: 405, column: 6 }, end: { line: 407, column: 7 } },
                '36': { start: { line: 406, column: 8 }, end: { line: 406, column: 31 } },
                '37': { start: { line: 411, column: 4 }, end: { line: 415, column: 5 } },
                '38': { start: { line: 411, column: 17 }, end: { line: 411, column: 18 } },
                '39': { start: { line: 412, column: 6 }, end: { line: 414, column: 7 } },
                '40': { start: { line: 413, column: 8 }, end: { line: 413, column: 31 } },
                '41': { start: { line: 417, column: 2 }, end: { line: 417, column: 13 } },
                '42': { start: { line: 461, column: 0 }, end: { line: 476, column: 2 } },
                '43': { start: { line: 462, column: 2 }, end: { line: 474, column: 3 } },
                '44': { start: { line: 463, column: 4 }, end: { line: 467, column: 5 } },
                '45': { start: { line: 463, column: 17 }, end: { line: 463, column: 18 } },
                '46': { start: { line: 464, column: 6 }, end: { line: 466, column: 7 } },
                '47': { start: { line: 465, column: 8 }, end: { line: 465, column: 28 } },
                '48': { start: { line: 469, column: 4 }, end: { line: 473, column: 5 } },
                '49': { start: { line: 469, column: 17 }, end: { line: 469, column: 18 } },
                '50': { start: { line: 470, column: 6 }, end: { line: 472, column: 7 } },
                '51': { start: { line: 471, column: 8 }, end: { line: 471, column: 28 } },
                '52': { start: { line: 475, column: 2 }, end: { line: 475, column: 14 } },
                '53': { start: { line: 527, column: 0 }, end: { line: 543, column: 2 } },
                '54': { start: { line: 528, column: 14 }, end: { line: 528, column: 16 } },
                '55': { start: { line: 529, column: 2 }, end: { line: 541, column: 3 } },
                '56': { start: { line: 530, column: 4 }, end: { line: 534, column: 5 } },
                '57': { start: { line: 530, column: 17 }, end: { line: 530, column: 18 } },
                '58': { start: { line: 531, column: 6 }, end: { line: 533, column: 7 } },
                '59': { start: { line: 532, column: 8 }, end: { line: 532, column: 31 } },
                '60': { start: { line: 536, column: 4 }, end: { line: 540, column: 5 } },
                '61': { start: { line: 536, column: 17 }, end: { line: 536, column: 18 } },
                '62': { start: { line: 537, column: 6 }, end: { line: 539, column: 7 } },
                '63': { start: { line: 538, column: 8 }, end: { line: 538, column: 31 } },
                '64': { start: { line: 542, column: 2 }, end: { line: 542, column: 13 } },
                '65': { start: { line: 583, column: 0 }, end: { line: 595, column: 2 } },
                '66': { start: { line: 584, column: 14 }, end: { line: 584, column: 16 } },
                '67': { start: { line: 585, column: 2 }, end: { line: 593, column: 3 } },
                '68': { start: { line: 586, column: 4 }, end: { line: 588, column: 5 } },
                '69': { start: { line: 586, column: 17 }, end: { line: 586, column: 18 } },
                '70': { start: { line: 587, column: 6 }, end: { line: 587, column: 40 } },
                '71': { start: { line: 590, column: 4 }, end: { line: 592, column: 5 } },
                '72': { start: { line: 590, column: 17 }, end: { line: 590, column: 18 } },
                '73': { start: { line: 591, column: 6 }, end: { line: 591, column: 40 } },
                '74': { start: { line: 594, column: 2 }, end: { line: 594, column: 13 } },
                '75': { start: { line: 633, column: 0 }, end: { line: 636, column: 2 } },
                '76': { start: { line: 634, column: 2 }, end: { line: 634, column: 19 } },
                '77': { start: { line: 635, column: 2 }, end: { line: 635, column: 17 } },
                '78': { start: { line: 683, column: 0 }, end: { line: 686, column: 2 } },
                '79': { start: { line: 684, column: 12 }, end: { line: 684, column: 25 } },
                '80': { start: { line: 685, column: 2 }, end: { line: 685, column: 23 } },
                '81': { start: { line: 720, column: 0 }, end: { line: 722, column: 2 } },
                '82': { start: { line: 721, column: 2 }, end: { line: 721, column: 29 } },
                '83': { start: { line: 756, column: 0 }, end: { line: 758, column: 2 } },
                '84': { start: { line: 757, column: 2 }, end: { line: 757, column: 26 } },
                '85': { start: { line: 797, column: 0 }, end: { line: 830, column: 2 } },
                '86': { start: { line: 798, column: 17 }, end: { line: 798, column: 64 } },
                '87': { start: { line: 798, column: 22 }, end: { line: 798, column: 64 } },
                '88': { start: { line: 799, column: 20 }, end: { line: 799, column: 22 } },
                '89': { start: { line: 800, column: 2 }, end: { line: 802, column: 3 } },
                '90': { start: { line: 800, column: 15 }, end: { line: 800, column: 16 } },
                '91': { start: { line: 801, column: 4 }, end: { line: 801, column: 44 } },
                '92': { start: { line: 803, column: 16 }, end: { line: 803, column: 52 } },
                '93': { start: { line: 805, column: 2 }, end: { line: 829, column: 3 } },
                '94': { start: { line: 806, column: 4 }, end: { line: 813, column: 5 } },
                '95': { start: { line: 806, column: 17 }, end: { line: 806, column: 18 } },
                '96': { start: { line: 807, column: 6 }, end: { line: 812, column: 7 } },
                '97': { start: { line: 807, column: 19 }, end: { line: 807, column: 20 } },
                '98': { start: { line: 808, column: 16 }, end: { line: 808, column: 35 } },
                '99': { start: { line: 809, column: 8 }, end: { line: 809, column: 33 } },
                '100': { start: { line: 810, column: 8 }, end: { line: 810, column: 32 } },
                '101': { start: { line: 811, column: 8 }, end: { line: 811, column: 46 } },
                '102': { start: { line: 814, column: 9 }, end: { line: 829, column: 3 } },
                '103': { start: { line: 815, column: 4 }, end: { line: 821, column: 5 } },
                '104': { start: { line: 815, column: 17 }, end: { line: 815, column: 18 } },
                '105': { start: { line: 816, column: 16 }, end: { line: 816, column: 40 } },
                '106': { start: { line: 817, column: 6 }, end: { line: 817, column: 35 } },
                '107': { start: { line: 818, column: 6 }, end: { line: 818, column: 37 } },
                '108': { start: { line: 819, column: 18 }, end: { line: 819, column: 46 } },
                '109': { start: { line: 820, column: 6 }, end: { line: 820, column: 34 } },
                '110': { start: { line: 823, column: 4 }, end: { line: 828, column: 5 } },
                '111': { start: { line: 823, column: 17 }, end: { line: 823, column: 18 } },
                '112': { start: { line: 824, column: 16 }, end: { line: 824, column: 40 } },
                '113': { start: { line: 825, column: 6 }, end: { line: 825, column: 35 } },
                '114': { start: { line: 826, column: 6 }, end: { line: 826, column: 37 } },
                '115': { start: { line: 827, column: 6 }, end: { line: 827, column: 51 } },
                '116': { start: { line: 866, column: 0 }, end: { line: 894, column: 2 } },
                '117': { start: { line: 867, column: 16 }, end: { line: 867, column: 36 } },
                '118': { start: { line: 869, column: 2 }, end: { line: 893, column: 3 } },
                '119': { start: { line: 870, column: 4 }, end: { line: 877, column: 5 } },
                '120': { start: { line: 870, column: 17 }, end: { line: 870, column: 18 } },
                '121': { start: { line: 871, column: 6 }, end: { line: 876, column: 7 } },
                '122': { start: { line: 871, column: 19 }, end: { line: 871, column: 20 } },
                '123': { start: { line: 872, column: 16 }, end: { line: 872, column: 35 } },
                '124': { start: { line: 873, column: 8 }, end: { line: 873, column: 33 } },
                '125': { start: { line: 874, column: 8 }, end: { line: 874, column: 32 } },
                '126': { start: { line: 875, column: 8 }, end: { line: 875, column: 46 } },
                '127': { start: { line: 878, column: 9 }, end: { line: 893, column: 3 } },
                '128': { start: { line: 879, column: 4 }, end: { line: 885, column: 5 } },
                '129': { start: { line: 879, column: 17 }, end: { line: 879, column: 18 } },
                '130': { start: { line: 880, column: 16 }, end: { line: 880, column: 40 } },
                '131': { start: { line: 881, column: 6 }, end: { line: 881, column: 35 } },
                '132': { start: { line: 882, column: 6 }, end: { line: 882, column: 37 } },
                '133': { start: { line: 883, column: 18 }, end: { line: 883, column: 46 } },
                '134': { start: { line: 884, column: 6 }, end: { line: 884, column: 34 } },
                '135': { start: { line: 887, column: 4 }, end: { line: 892, column: 5 } },
                '136': { start: { line: 887, column: 17 }, end: { line: 887, column: 18 } },
                '137': { start: { line: 888, column: 16 }, end: { line: 888, column: 40 } },
                '138': { start: { line: 889, column: 6 }, end: { line: 889, column: 35 } },
                '139': { start: { line: 890, column: 6 }, end: { line: 890, column: 37 } },
                '140': { start: { line: 891, column: 6 }, end: { line: 891, column: 51 } },
                '141': { start: { line: 935, column: 0 }, end: { line: 958, column: 2 } },
                '142': { start: { line: 938, column: 2 }, end: { line: 945, column: 3 } },
                '143': { start: { line: 940, column: 4 }, end: { line: 940, column: 16 } },
                '144': { start: { line: 941, column: 4 }, end: { line: 941, column: 38 } },
                '145': { start: { line: 943, column: 4 }, end: { line: 943, column: 16 } },
                '146': { start: { line: 944, column: 4 }, end: { line: 944, column: 30 } },
                '147': { start: { line: 947, column: 16 }, end: { line: 947, column: 69 } },
                '148': { start: { line: 948, column: 2 }, end: { line: 948, column: 21 } },
                '149': { start: { line: 949, column: 2 }, end: { line: 949, column: 44 } },
                '150': { start: { line: 951, column: 2 }, end: { line: 957, column: 3 } },
                '151': { start: { line: 951, column: 15 }, end: { line: 951, column: 16 } },
                '152': { start: { line: 952, column: 18 }, end: { line: 952, column: 34 } },
                '153': { start: { line: 953, column: 17 }, end: { line: 953, column: 56 } },
                '154': { start: { line: 954, column: 4 }, end: { line: 954, column: 16 } },
                '155': { start: { line: 955, column: 4 }, end: { line: 955, column: 42 } },
                '156': { start: { line: 956, column: 4 }, end: { line: 956, column: 37 } },
                '157': { start: { line: 1005, column: 0 }, end: { line: 1007, column: 2 } },
                '158': {
                  start: { line: 1006, column: 2 },
                  end: { line: 1006, column: 36 }
                },
                '159': { start: { line: 1051, column: 0 }, end: { line: 1053, column: 2 } },
                '160': {
                  start: { line: 1052, column: 2 },
                  end: { line: 1052, column: 39 }
                },
                '161': { start: { line: 1096, column: 0 }, end: { line: 1098, column: 2 } },
                '162': {
                  start: { line: 1097, column: 2 },
                  end: { line: 1097, column: 42 }
                },
                '163': { start: { line: 1142, column: 0 }, end: { line: 1144, column: 2 } },
                '164': {
                  start: { line: 1143, column: 2 },
                  end: { line: 1143, column: 36 }
                },
                '165': { start: { line: 1186, column: 0 }, end: { line: 1188, column: 2 } },
                '166': {
                  start: { line: 1187, column: 2 },
                  end: { line: 1187, column: 39 }
                },
                '167': { start: { line: 1238, column: 0 }, end: { line: 1240, column: 2 } },
                '168': {
                  start: { line: 1239, column: 2 },
                  end: { line: 1239, column: 42 }
                },
                '169': { start: { line: 1283, column: 0 }, end: { line: 1303, column: 2 } },
                '170': {
                  start: { line: 1284, column: 22 },
                  end: { line: 1284, column: 24 }
                },
                '171': { start: { line: 1287, column: 2 }, end: { line: 1301, column: 3 } },
                '172': {
                  start: { line: 1287, column: 15 },
                  end: { line: 1287, column: 16 }
                },
                '173': {
                  start: { line: 1288, column: 4 },
                  end: { line: 1288, column: 27 }
                },
                '174': { start: { line: 1290, column: 4 }, end: { line: 1300, column: 5 } },
                '175': {
                  start: { line: 1291, column: 6 },
                  end: { line: 1291, column: 48 }
                },
                '176': { start: { line: 1292, column: 6 }, end: { line: 1297, column: 7 } },
                '177': {
                  start: { line: 1293, column: 8 },
                  end: { line: 1293, column: 34 }
                },
                '178': {
                  start: { line: 1294, column: 8 },
                  end: { line: 1294, column: 33 }
                },
                '179': {
                  start: { line: 1296, column: 8 },
                  end: { line: 1296, column: 76 }
                },
                '180': {
                  start: { line: 1299, column: 6 },
                  end: { line: 1299, column: 40 }
                },
                '181': {
                  start: { line: 1302, column: 2 },
                  end: { line: 1302, column: 21 }
                },
                '182': { start: { line: 1342, column: 0 }, end: { line: 1348, column: 2 } },
                '183': {
                  start: { line: 1343, column: 21 },
                  end: { line: 1343, column: 23 }
                },
                '184': { start: { line: 1344, column: 2 }, end: { line: 1346, column: 3 } },
                '185': {
                  start: { line: 1344, column: 15 },
                  end: { line: 1344, column: 16 }
                },
                '186': {
                  start: { line: 1345, column: 4 },
                  end: { line: 1345, column: 38 }
                },
                '187': { start: { line: 1347, column: 2 }, end: { line: 1347, column: 20 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 42, column: 11 }, end: { line: 42, column: 12 } },
                  loc: { start: { line: 42, column: 26 }, end: { line: 83, column: 1 } },
                  line: 42
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: {
                    start: { line: 135, column: 28 },
                    end: { line: 135, column: 29 }
                  },
                  loc: { start: { line: 135, column: 42 }, end: { line: 146, column: 1 } },
                  line: 135
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 188, column: 31 },
                    end: { line: 188, column: 32 }
                  },
                  loc: { start: { line: 188, column: 44 }, end: { line: 193, column: 1 } },
                  line: 188
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 236, column: 28 },
                    end: { line: 236, column: 29 }
                  },
                  loc: { start: { line: 236, column: 40 }, end: { line: 238, column: 1 } },
                  line: 236
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 284, column: 29 },
                    end: { line: 284, column: 30 }
                  },
                  loc: { start: { line: 284, column: 40 }, end: { line: 286, column: 1 } },
                  line: 284
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 332, column: 29 },
                    end: { line: 332, column: 30 }
                  },
                  loc: { start: { line: 332, column: 53 }, end: { line: 350, column: 1 } },
                  line: 332
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 401, column: 30 },
                    end: { line: 401, column: 31 }
                  },
                  loc: { start: { line: 401, column: 54 }, end: { line: 418, column: 1 } },
                  line: 401
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 461, column: 30 },
                    end: { line: 461, column: 31 }
                  },
                  loc: { start: { line: 461, column: 55 }, end: { line: 476, column: 1 } },
                  line: 461
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 527, column: 31 },
                    end: { line: 527, column: 32 }
                  },
                  loc: { start: { line: 527, column: 56 }, end: { line: 543, column: 1 } },
                  line: 527
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 583, column: 31 },
                    end: { line: 583, column: 32 }
                  },
                  loc: { start: { line: 583, column: 47 }, end: { line: 595, column: 1 } },
                  line: 583
                },
                '10': {
                  name: '(anonymous_10)',
                  decl: {
                    start: { line: 633, column: 31 },
                    end: { line: 633, column: 32 }
                  },
                  loc: { start: { line: 633, column: 42 }, end: { line: 636, column: 1 } },
                  line: 633
                },
                '11': {
                  name: '(anonymous_11)',
                  decl: {
                    start: { line: 683, column: 31 },
                    end: { line: 683, column: 32 }
                  },
                  loc: { start: { line: 683, column: 47 }, end: { line: 686, column: 1 } },
                  line: 683
                },
                '12': {
                  name: '(anonymous_12)',
                  decl: {
                    start: { line: 720, column: 36 },
                    end: { line: 720, column: 37 }
                  },
                  loc: { start: { line: 720, column: 47 }, end: { line: 722, column: 1 } },
                  line: 720
                },
                '13': {
                  name: '(anonymous_13)',
                  decl: {
                    start: { line: 756, column: 33 },
                    end: { line: 756, column: 34 }
                  },
                  loc: { start: { line: 756, column: 44 }, end: { line: 758, column: 1 } },
                  line: 756
                },
                '14': {
                  name: '(anonymous_14)',
                  decl: {
                    start: { line: 797, column: 34 },
                    end: { line: 797, column: 35 }
                  },
                  loc: { start: { line: 797, column: 58 }, end: { line: 830, column: 1 } },
                  line: 797
                },
                '15': {
                  name: '(anonymous_15)',
                  decl: {
                    start: { line: 798, column: 17 },
                    end: { line: 798, column: 18 }
                  },
                  loc: { start: { line: 798, column: 22 }, end: { line: 798, column: 64 } },
                  line: 798
                },
                '16': {
                  name: '(anonymous_16)',
                  decl: {
                    start: { line: 866, column: 26 },
                    end: { line: 866, column: 27 }
                  },
                  loc: { start: { line: 866, column: 43 }, end: { line: 894, column: 1 } },
                  line: 866
                },
                '17': {
                  name: '(anonymous_17)',
                  decl: {
                    start: { line: 935, column: 34 },
                    end: { line: 935, column: 35 }
                  },
                  loc: { start: { line: 935, column: 46 }, end: { line: 958, column: 1 } },
                  line: 935
                },
                '18': {
                  name: '(anonymous_18)',
                  decl: {
                    start: { line: 1005, column: 25 },
                    end: { line: 1005, column: 26 }
                  },
                  loc: {
                    start: { line: 1005, column: 54 },
                    end: { line: 1007, column: 1 }
                  },
                  line: 1005
                },
                '19': {
                  name: '(anonymous_19)',
                  decl: {
                    start: { line: 1051, column: 28 },
                    end: { line: 1051, column: 29 }
                  },
                  loc: {
                    start: { line: 1051, column: 57 },
                    end: { line: 1053, column: 1 }
                  },
                  line: 1051
                },
                '20': {
                  name: '(anonymous_20)',
                  decl: {
                    start: { line: 1096, column: 31 },
                    end: { line: 1096, column: 32 }
                  },
                  loc: {
                    start: { line: 1096, column: 60 },
                    end: { line: 1098, column: 1 }
                  },
                  line: 1096
                },
                '21': {
                  name: '(anonymous_21)',
                  decl: {
                    start: { line: 1142, column: 25 },
                    end: { line: 1142, column: 26 }
                  },
                  loc: {
                    start: { line: 1142, column: 47 },
                    end: { line: 1144, column: 1 }
                  },
                  line: 1142
                },
                '22': {
                  name: '(anonymous_22)',
                  decl: {
                    start: { line: 1186, column: 28 },
                    end: { line: 1186, column: 29 }
                  },
                  loc: {
                    start: { line: 1186, column: 50 },
                    end: { line: 1188, column: 1 }
                  },
                  line: 1186
                },
                '23': {
                  name: '(anonymous_23)',
                  decl: {
                    start: { line: 1238, column: 31 },
                    end: { line: 1238, column: 32 }
                  },
                  loc: {
                    start: { line: 1238, column: 53 },
                    end: { line: 1240, column: 1 }
                  },
                  line: 1238
                },
                '24': {
                  name: '(anonymous_24)',
                  decl: {
                    start: { line: 1283, column: 31 },
                    end: { line: 1283, column: 32 }
                  },
                  loc: {
                    start: { line: 1283, column: 54 },
                    end: { line: 1303, column: 1 }
                  },
                  line: 1283
                },
                '25': {
                  name: '(anonymous_25)',
                  decl: {
                    start: { line: 1342, column: 30 },
                    end: { line: 1342, column: 31 }
                  },
                  loc: {
                    start: { line: 1342, column: 41 },
                    end: { line: 1348, column: 1 }
                  },
                  line: 1342
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 137, column: 12 }, end: { line: 137, column: 36 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 137, column: 12 }, end: { line: 137, column: 15 } },
                    { start: { line: 137, column: 19 }, end: { line: 137, column: 36 } }
                  ],
                  line: 137
                },
                '1': {
                  loc: { start: { line: 139, column: 2 }, end: { line: 142, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 139, column: 2 }, end: { line: 142, column: 3 } },
                    { start: { line: 139, column: 2 }, end: { line: 142, column: 3 } }
                  ],
                  line: 139
                },
                '2': {
                  loc: { start: { line: 139, column: 6 }, end: { line: 139, column: 66 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 139, column: 6 }, end: { line: 139, column: 34 } },
                    { start: { line: 139, column: 38 }, end: { line: 139, column: 66 } }
                  ],
                  line: 139
                },
                '3': {
                  loc: { start: { line: 334, column: 2 }, end: { line: 347, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 334, column: 2 }, end: { line: 347, column: 3 } },
                    { start: { line: 334, column: 2 }, end: { line: 347, column: 3 } }
                  ],
                  line: 334
                },
                '4': {
                  loc: { start: { line: 336, column: 6 }, end: { line: 338, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 336, column: 6 }, end: { line: 338, column: 7 } },
                    { start: { line: 336, column: 6 }, end: { line: 338, column: 7 } }
                  ],
                  line: 336
                },
                '5': {
                  loc: { start: { line: 343, column: 6 }, end: { line: 345, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 343, column: 6 }, end: { line: 345, column: 7 } },
                    { start: { line: 343, column: 6 }, end: { line: 345, column: 7 } }
                  ],
                  line: 343
                },
                '6': {
                  loc: { start: { line: 403, column: 2 }, end: { line: 416, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 403, column: 2 }, end: { line: 416, column: 3 } },
                    { start: { line: 403, column: 2 }, end: { line: 416, column: 3 } }
                  ],
                  line: 403
                },
                '7': {
                  loc: { start: { line: 405, column: 6 }, end: { line: 407, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 405, column: 6 }, end: { line: 407, column: 7 } },
                    { start: { line: 405, column: 6 }, end: { line: 407, column: 7 } }
                  ],
                  line: 405
                },
                '8': {
                  loc: { start: { line: 412, column: 6 }, end: { line: 414, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 412, column: 6 }, end: { line: 414, column: 7 } },
                    { start: { line: 412, column: 6 }, end: { line: 414, column: 7 } }
                  ],
                  line: 412
                },
                '9': {
                  loc: { start: { line: 462, column: 2 }, end: { line: 474, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 462, column: 2 }, end: { line: 474, column: 3 } },
                    { start: { line: 462, column: 2 }, end: { line: 474, column: 3 } }
                  ],
                  line: 462
                },
                '10': {
                  loc: { start: { line: 464, column: 6 }, end: { line: 466, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 464, column: 6 }, end: { line: 466, column: 7 } },
                    { start: { line: 464, column: 6 }, end: { line: 466, column: 7 } }
                  ],
                  line: 464
                },
                '11': {
                  loc: { start: { line: 470, column: 6 }, end: { line: 472, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 470, column: 6 }, end: { line: 472, column: 7 } },
                    { start: { line: 470, column: 6 }, end: { line: 472, column: 7 } }
                  ],
                  line: 470
                },
                '12': {
                  loc: { start: { line: 529, column: 2 }, end: { line: 541, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 529, column: 2 }, end: { line: 541, column: 3 } },
                    { start: { line: 529, column: 2 }, end: { line: 541, column: 3 } }
                  ],
                  line: 529
                },
                '13': {
                  loc: { start: { line: 531, column: 6 }, end: { line: 533, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 531, column: 6 }, end: { line: 533, column: 7 } },
                    { start: { line: 531, column: 6 }, end: { line: 533, column: 7 } }
                  ],
                  line: 531
                },
                '14': {
                  loc: { start: { line: 537, column: 6 }, end: { line: 539, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 537, column: 6 }, end: { line: 539, column: 7 } },
                    { start: { line: 537, column: 6 }, end: { line: 539, column: 7 } }
                  ],
                  line: 537
                },
                '15': {
                  loc: { start: { line: 585, column: 2 }, end: { line: 593, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 585, column: 2 }, end: { line: 593, column: 3 } },
                    { start: { line: 585, column: 2 }, end: { line: 593, column: 3 } }
                  ],
                  line: 585
                },
                '16': {
                  loc: { start: { line: 684, column: 12 }, end: { line: 684, column: 25 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 684, column: 12 }, end: { line: 684, column: 17 } },
                    { start: { line: 684, column: 21 }, end: { line: 684, column: 25 } }
                  ],
                  line: 684
                },
                '17': {
                  loc: { start: { line: 805, column: 2 }, end: { line: 829, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 805, column: 2 }, end: { line: 829, column: 3 } },
                    { start: { line: 805, column: 2 }, end: { line: 829, column: 3 } }
                  ],
                  line: 805
                },
                '18': {
                  loc: { start: { line: 814, column: 9 }, end: { line: 829, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 814, column: 9 }, end: { line: 829, column: 3 } },
                    { start: { line: 814, column: 9 }, end: { line: 829, column: 3 } }
                  ],
                  line: 814
                },
                '19': {
                  loc: { start: { line: 869, column: 2 }, end: { line: 893, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 869, column: 2 }, end: { line: 893, column: 3 } },
                    { start: { line: 869, column: 2 }, end: { line: 893, column: 3 } }
                  ],
                  line: 869
                },
                '20': {
                  loc: { start: { line: 878, column: 9 }, end: { line: 893, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 878, column: 9 }, end: { line: 893, column: 3 } },
                    { start: { line: 878, column: 9 }, end: { line: 893, column: 3 } }
                  ],
                  line: 878
                },
                '21': {
                  loc: { start: { line: 938, column: 2 }, end: { line: 945, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 938, column: 2 }, end: { line: 945, column: 3 } },
                    { start: { line: 938, column: 2 }, end: { line: 945, column: 3 } }
                  ],
                  line: 938
                },
                '22': {
                  loc: { start: { line: 1290, column: 4 }, end: { line: 1300, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1290, column: 4 }, end: { line: 1300, column: 5 } },
                    { start: { line: 1290, column: 4 }, end: { line: 1300, column: 5 } }
                  ],
                  line: 1290
                },
                '23': {
                  loc: { start: { line: 1292, column: 6 }, end: { line: 1297, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1292, column: 6 }, end: { line: 1297, column: 7 } },
                    { start: { line: 1292, column: 6 }, end: { line: 1297, column: 7 } }
                  ],
                  line: 1292
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0,
                '118': 0,
                '119': 0,
                '120': 0,
                '121': 0,
                '122': 0,
                '123': 0,
                '124': 0,
                '125': 0,
                '126': 0,
                '127': 0,
                '128': 0,
                '129': 0,
                '130': 0,
                '131': 0,
                '132': 0,
                '133': 0,
                '134': 0,
                '135': 0,
                '136': 0,
                '137': 0,
                '138': 0,
                '139': 0,
                '140': 0,
                '141': 0,
                '142': 0,
                '143': 0,
                '144': 0,
                '145': 0,
                '146': 0,
                '147': 0,
                '148': 0,
                '149': 0,
                '150': 0,
                '151': 0,
                '152': 0,
                '153': 0,
                '154': 0,
                '155': 0,
                '156': 0,
                '157': 0,
                '158': 0,
                '159': 0,
                '160': 0,
                '161': 0,
                '162': 0,
                '163': 0,
                '164': 0,
                '165': 0,
                '166': 0,
                '167': 0,
                '168': 0,
                '169': 0,
                '170': 0,
                '171': 0,
                '172': 0,
                '173': 0,
                '174': 0,
                '175': 0,
                '176': 0,
                '177': 0,
                '178': 0,
                '179': 0,
                '180': 0,
                '181': 0,
                '182': 0,
                '183': 0,
                '184': 0,
                '185': 0,
                '186': 0,
                '187': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0],
                '20': [0, 0],
                '21': [0, 0],
                '22': [0, 0],
                '23': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: 'cc9c851f97376347f517d48a9b5e1efffc02b20e'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.concat');
          _dereq_('core-js/modules/es.array.index-of');
          _dereq_('core-js/modules/es.array.join');
          _dereq_('core-js/modules/es.array.splice');
          _dereq_('core-js/modules/es.regexp.constructor');
          _dereq_('core-js/modules/es.regexp.exec');
          _dereq_('core-js/modules/es.regexp.to-string');
          _dereq_('core-js/modules/es.string.match');
          _dereq_('core-js/modules/es.string.replace');
          _dereq_('core-js/modules/es.string.trim');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_2obndpo0kl.s[0]++;

          /**
           *  Table Options
           *  Generic class for handling tabular data, typically from a
           *  CSV, TSV, or other sort of spreadsheet file.
           *  CSV files are
           *  <a href="http://en.wikipedia.org/wiki/Comma-separated_values">
           *  comma separated values</a>, often with the data in quotes. TSV
           *  files use tabs as separators, and usually don't bother with the
           *  quotes.
           *  File names should end with .csv if they're comma separated.
           *  A rough "spec" for CSV can be found
           *  <a href="http://tools.ietf.org/html/rfc4180">here</a>.
           *  To load files, use the <a href="#/p5/loadTable">loadTable</a> method.
           *  To save tables to your computer, use the <a href="#/p5/save">save</a> method
           *   or the <a href="#/p5/saveTable">saveTable</a> method.
           *
           *  Possible options include:
           *  <ul>
           *  <li>csv - parse the table as comma-separated values
           *  <li>tsv - parse the table as tab-separated values
           *  <li>header - this table has a header (title) row
           *  </ul>
           */

          /**
           *  <a href="#/p5.Table">Table</a> objects store data with multiple rows and columns, much
           *  like in a traditional spreadsheet. Tables can be generated from
           *  scratch, dynamically, or using data from an existing file.
           *
           *  @class p5.Table
           *  @constructor
           *  @param  {p5.TableRow[]}     [rows] An array of p5.TableRow objects
           */
          _main.default.Table = function(rows) {
            cov_2obndpo0kl.f[0]++;
            cov_2obndpo0kl.s[1]++;
            /**
             * An array containing the names of the columns in the table, if the "header" the table is
             * loaded with the "header" parameter.
             * @property columns {String[]}
             * @example
             * <div class="norender">
             * <code>
             * // Given the CSV file "mammals.csv"
             * // in the project's "assets" folder:
             * //
             * // id,species,name
             * // 0,Capra hircus,Goat
             * // 1,Panthera pardus,Leopard
             * // 2,Equus zebra,Zebra
             *
             * let table;
             *
             * function preload() {
             *   //my table is comma separated value "csv"
             *   //and has a header specifying the columns labels
             *   table = loadTable('assets/mammals.csv', 'csv', 'header');
             * }
             *
             * function setup() {
             *   //print the column names
             *   for (let c = 0; c < table.getColumnCount(); c++) {
             *     print('column ' + c + ' is named ' + table.columns[c]);
             *   }
             * }
             * </code>
             * </div>
             */
            this.columns = [];

            /**
             * An array containing the <a href="#/p5.Table">p5.TableRow</a> objects that make up the
             * rows of the table. The same result as calling <a href="#/p5/getRows">getRows()</a>
             * @property rows {p5.TableRow[]}
             */ cov_2obndpo0kl.s[2]++;
            this.rows = [];
          };

          /**
           *  Use <a href="#/p5/addRow">addRow()</a> to add a new row of data to a <a href="#/p5.Table">p5.Table</a> object. By default,
           *  an empty row is created. Typically, you would store a reference to
           *  the new row in a TableRow object (see newRow in the example above),
           *  and then set individual values using <a href="#/p5/set">set()</a>.
           *
           *  If a <a href="#/p5.TableRow">p5.TableRow</a> object is included as a parameter, then that row is
           *  duplicated and added to the table.
           *
           *  @method  addRow
           *  @param   {p5.TableRow} [row] row to be added to the table
           *  @return  {p5.TableRow} the row that was added
           *
           * @example
           * <div class="norender">
           * <code>
           * // Given the CSV file "mammals.csv"
           * // in the project's "assets" folder:
           * //
           * // id,species,name
           * // 0,Capra hircus,Goat
           * // 1,Panthera pardus,Leopard
           * // 2,Equus zebra,Zebra
           *
           * let table;
           *
           * function preload() {
           *   //my table is comma separated value "csv"
           *   //and has a header specifying the columns labels
           *   table = loadTable('assets/mammals.csv', 'csv', 'header');
           * }
           *
           * function setup() {
           *   //add a row
           *   let newRow = table.addRow();
           *   newRow.setString('id', table.getRowCount() - 1);
           *   newRow.setString('species', 'Canis Lupus');
           *   newRow.setString('name', 'Wolf');
           *
           *   //print the results
           *   for (let r = 0; r < table.getRowCount(); r++)
           *     for (let c = 0; c < table.getColumnCount(); c++)
           *       print(table.getString(r, c));
           * }
           * </code>
           * </div>
           *
           * @alt
           * no image displayed
           */ cov_2obndpo0kl.s[3]++;
          _main.default.Table.prototype.addRow = function(row) {
            cov_2obndpo0kl.f[1]++;
            // make sure it is a valid TableRow
            var r = (cov_2obndpo0kl.s[4]++,
            (cov_2obndpo0kl.b[0][0]++, row) ||
              (cov_2obndpo0kl.b[0][1]++, new _main.default.TableRow()));
            cov_2obndpo0kl.s[5]++;

            if (
              (cov_2obndpo0kl.b[2][0]++, typeof r.arr === 'undefined') ||
              (cov_2obndpo0kl.b[2][1]++, typeof r.obj === 'undefined')
            ) {
              cov_2obndpo0kl.b[1][0]++;
              cov_2obndpo0kl.s[6]++;
              //r = new p5.prototype.TableRow(r);
              throw new Error('invalid TableRow: '.concat(r));
            } else {
              cov_2obndpo0kl.b[1][1]++;
            }
            cov_2obndpo0kl.s[7]++;
            r.table = this;
            cov_2obndpo0kl.s[8]++;
            this.rows.push(r);
            cov_2obndpo0kl.s[9]++;
            return r;
          };

          /**
           * Removes a row from the table object.
           *
           * @method  removeRow
           * @param   {Integer} id ID number of the row to remove
           *
           * @example
           * <div class="norender">
           * <code>
           * // Given the CSV file "mammals.csv"
           * // in the project's "assets" folder:
           * //
           * // id,species,name
           * // 0,Capra hircus,Goat
           * // 1,Panthera pardus,Leopard
           * // 2,Equus zebra,Zebra
           *
           * let table;
           *
           * function preload() {
           *   //my table is comma separated value "csv"
           *   //and has a header specifying the columns labels
           *   table = loadTable('assets/mammals.csv', 'csv', 'header');
           * }
           *
           * function setup() {
           *   //remove the first row
           *   table.removeRow(0);
           *
           *   //print the results
           *   for (let r = 0; r < table.getRowCount(); r++)
           *     for (let c = 0; c < table.getColumnCount(); c++)
           *       print(table.getString(r, c));
           * }
           * </code>
           * </div>
           *
           * @alt
           * no image displayed
           */ cov_2obndpo0kl.s[10]++;
          _main.default.Table.prototype.removeRow = function(id) {
            cov_2obndpo0kl.f[2]++;
            cov_2obndpo0kl.s[11]++;
            this.rows[id].table = null; // remove reference to table
            var chunk = (cov_2obndpo0kl.s[12]++,
            this.rows.splice(id + 1, this.rows.length));
            cov_2obndpo0kl.s[13]++;
            this.rows.pop();
            cov_2obndpo0kl.s[14]++;
            this.rows = this.rows.concat(chunk);
          };

          /**
           * Returns a reference to the specified <a href="#/p5.TableRow">p5.TableRow</a>. The reference
           * can then be used to get and set values of the selected row.
           *
           * @method  getRow
           * @param  {Integer}   rowID ID number of the row to get
           * @return {p5.TableRow} <a href="#/p5.TableRow">p5.TableRow</a> object
           *
           * @example
           * <div class="norender">
           * <code>
           * // Given the CSV file "mammals.csv"
           * // in the project's "assets" folder:
           * //
           * // id,species,name
           * // 0,Capra hircus,Goat
           * // 1,Panthera pardus,Leopard
           * // 2,Equus zebra,Zebra
           *
           * let table;
           *
           * function preload() {
           *   //my table is comma separated value "csv"
           *   //and has a header specifying the columns labels
           *   table = loadTable('assets/mammals.csv', 'csv', 'header');
           * }
           *
           * function setup() {
           *   let row = table.getRow(1);
           *   //print it column by column
           *   //note: a row is an object, not an array
           *   for (let c = 0; c < table.getColumnCount(); c++) {
           *     print(row.getString(c));
           *   }
           * }
           * </code>
           * </div>
           *
           *@alt
           * no image displayed
           */ cov_2obndpo0kl.s[15]++;
          _main.default.Table.prototype.getRow = function(r) {
            cov_2obndpo0kl.f[3]++;
            cov_2obndpo0kl.s[16]++;
            return this.rows[r];
          };

          /**
           *  Gets all rows from the table. Returns an array of <a href="#/p5.TableRow">p5.TableRow</a>s.
           *
           *  @method  getRows
           *  @return {p5.TableRow[]}   Array of <a href="#/p5.TableRow">p5.TableRow</a>s
           *
           * @example
           * <div class="norender">
           * <code>
           * // Given the CSV file "mammals.csv"
           * // in the project's "assets" folder:
           * //
           * // id,species,name
           * // 0,Capra hircus,Goat
           * // 1,Panthera pardus,Leopard
           * // 2,Equus zebra,Zebra
           *
           * let table;
           *
           * function preload() {
           *   //my table is comma separated value "csv"
           *   //and has a header specifying the columns labels
           *   table = loadTable('assets/mammals.csv', 'csv', 'header');
           * }
           *
           * function setup() {
           *   let rows = table.getRows();
           *
           *   //warning: rows is an array of objects
           *   for (let r = 0; r < rows.length; r++) {
           *     rows[r].set('name', 'Unicorn');
           *   }
           *
           *   //print the results
           *   for (let r = 0; r < table.getRowCount(); r++)
           *     for (let c = 0; c < table.getColumnCount(); c++)
           *       print(table.getString(r, c));
           * }
           * </code>
           * </div>
           *
           * @alt
           * no image displayed
           */ cov_2obndpo0kl.s[17]++;
          _main.default.Table.prototype.getRows = function() {
            cov_2obndpo0kl.f[4]++;
            cov_2obndpo0kl.s[18]++;
            return this.rows;
          };

          /**
           *  Finds the first row in the Table that contains the value
           *  provided, and returns a reference to that row. Even if
           *  multiple rows are possible matches, only the first matching
           *  row is returned. The column to search may be specified by
           *  either its ID or title.
           *
           *  @method  findRow
           *  @param  {String} value  The value to match
           *  @param  {Integer|String} column ID number or title of the
           *                                 column to search
           *  @return {p5.TableRow}
           *
           * @example
           * <div class="norender">
           * <code>
           * // Given the CSV file "mammals.csv"
           * // in the project's "assets" folder:
           * //
           * // id,species,name
           * // 0,Capra hircus,Goat
           * // 1,Panthera pardus,Leopard
           * // 2,Equus zebra,Zebra
           *
           * let table;
           *
           * function preload() {
           *   //my table is comma separated value "csv"
           *   //and has a header specifying the columns labels
           *   table = loadTable('assets/mammals.csv', 'csv', 'header');
           * }
           *
           * function setup() {
           *   //find the animal named zebra
           *   let row = table.findRow('Zebra', 'name');
           *   //find the corresponding species
           *   print(row.getString('species'));
           * }
           * </code>
           * </div>
           *
           * @alt
           * no image displayed
           */ cov_2obndpo0kl.s[19]++;
          _main.default.Table.prototype.findRow = function(value, column) {
            cov_2obndpo0kl.f[5]++;
            cov_2obndpo0kl.s[20]++;
            // try the Object
            if (typeof column === 'string') {
              cov_2obndpo0kl.b[3][0]++;
              cov_2obndpo0kl.s[21]++;
              for (var i = (cov_2obndpo0kl.s[22]++, 0); i < this.rows.length; i++) {
                cov_2obndpo0kl.s[23]++;
                if (this.rows[i].obj[column] === value) {
                  cov_2obndpo0kl.b[4][0]++;
                  cov_2obndpo0kl.s[24]++;
                  return this.rows[i];
                } else {
                  cov_2obndpo0kl.b[4][1]++;
                }
              }
            } else {
              cov_2obndpo0kl.b[3][1]++;
              cov_2obndpo0kl.s[25]++;
              // try the Array
              for (var j = (cov_2obndpo0kl.s[26]++, 0); j < this.rows.length; j++) {
                cov_2obndpo0kl.s[27]++;
                if (this.rows[j].arr[column] === value) {
                  cov_2obndpo0kl.b[5][0]++;
                  cov_2obndpo0kl.s[28]++;
                  return this.rows[j];
                } else {
                  cov_2obndpo0kl.b[5][1]++;
                }
              }
            }
            // otherwise...
            cov_2obndpo0kl.s[29]++;
            return null;
          };

          /**
           *  Finds the rows in the Table that contain the value
           *  provided, and returns references to those rows. Returns an
           *  Array, so for must be used to iterate through all the rows,
           *  as shown in the example above. The column to search may be
           *  specified by either its ID or title.
           *
           *  @method  findRows
           *  @param  {String} value  The value to match
           *  @param  {Integer|String} column ID number or title of the
           *                                 column to search
           *  @return {p5.TableRow[]}        An Array of TableRow objects
           *
           * @example
           * <div class="norender">
           * <code>
           * // Given the CSV file "mammals.csv"
           * // in the project's "assets" folder:
           * //
           * // id,species,name
           * // 0,Capra hircus,Goat
           * // 1,Panthera pardus,Leopard
           * // 2,Equus zebra,Zebra
           *
           * let table;
           *
           * function preload() {
           *   //my table is comma separated value "csv"
           *   //and has a header specifying the columns labels
           *   table = loadTable('assets/mammals.csv', 'csv', 'header');
           * }
           *
           * function setup() {
           *   //add another goat
           *   let newRow = table.addRow();
           *   newRow.setString('id', table.getRowCount() - 1);
           *   newRow.setString('species', 'Scape Goat');
           *   newRow.setString('name', 'Goat');
           *
           *   //find the rows containing animals named Goat
           *   let rows = table.findRows('Goat', 'name');
           *   print(rows.length + ' Goats found');
           * }
           * </code>
           * </div>
           *
           *@alt
           * no image displayed
           */ cov_2obndpo0kl.s[30]++;
          _main.default.Table.prototype.findRows = function(value, column) {
            cov_2obndpo0kl.f[6]++;
            var ret = (cov_2obndpo0kl.s[31]++, []);
            cov_2obndpo0kl.s[32]++;
            if (typeof column === 'string') {
              cov_2obndpo0kl.b[6][0]++;
              cov_2obndpo0kl.s[33]++;
              for (var i = (cov_2obndpo0kl.s[34]++, 0); i < this.rows.length; i++) {
                cov_2obndpo0kl.s[35]++;
                if (this.rows[i].obj[column] === value) {
                  cov_2obndpo0kl.b[7][0]++;
                  cov_2obndpo0kl.s[36]++;
                  ret.push(this.rows[i]);
                } else {
                  cov_2obndpo0kl.b[7][1]++;
                }
              }
            } else {
              cov_2obndpo0kl.b[6][1]++;
              cov_2obndpo0kl.s[37]++;
              // try the Array
              for (var j = (cov_2obndpo0kl.s[38]++, 0); j < this.rows.length; j++) {
                cov_2obndpo0kl.s[39]++;
                if (this.rows[j].arr[column] === value) {
                  cov_2obndpo0kl.b[8][0]++;
                  cov_2obndpo0kl.s[40]++;
                  ret.push(this.rows[j]);
                } else {
                  cov_2obndpo0kl.b[8][1]++;
                }
              }
            }
            cov_2obndpo0kl.s[41]++;
            return ret;
          };

          /**
           * Finds the first row in the Table that matches the regular
           * expression provided, and returns a reference to that row.
           * Even if multiple rows are possible matches, only the first
           * matching row is returned. The column to search may be
           * specified by either its ID or title.
           *
           * @method  matchRow
           * @param  {String|RegExp} regexp The regular expression to match
           * @param  {String|Integer} column The column ID (number) or
           *                                  title (string)
           * @return {p5.TableRow}        TableRow object
           *
           * @example
           * <div class="norender">
           * <code>
           * // Given the CSV file "mammals.csv"
           * // in the project's "assets" folder:
           * //
           * // id,species,name
           * // 0,Capra hircus,Goat
           * // 1,Panthera pardus,Leopard
           * // 2,Equus zebra,Zebra
           *
           * let table;
           *
           * function preload() {
           *   //my table is comma separated value "csv"
           *   //and has a header specifying the columns labels
           *   table = loadTable('assets/mammals.csv', 'csv', 'header');
           * }
           *
           * function setup() {
           *   //Search using specified regex on a given column, return TableRow object
           *   let mammal = table.matchRow(new RegExp('ant'), 1);
           *   print(mammal.getString(1));
           *   //Output "Panthera pardus"
           * }
           * </code>
           * </div>
           */ cov_2obndpo0kl.s[42]++;
          _main.default.Table.prototype.matchRow = function(regexp, column) {
            cov_2obndpo0kl.f[7]++;
            cov_2obndpo0kl.s[43]++;
            if (typeof column === 'number') {
              cov_2obndpo0kl.b[9][0]++;
              cov_2obndpo0kl.s[44]++;
              for (var j = (cov_2obndpo0kl.s[45]++, 0); j < this.rows.length; j++) {
                cov_2obndpo0kl.s[46]++;
                if (this.rows[j].arr[column].match(regexp)) {
                  cov_2obndpo0kl.b[10][0]++;
                  cov_2obndpo0kl.s[47]++;
                  return this.rows[j];
                } else {
                  cov_2obndpo0kl.b[10][1]++;
                }
              }
            } else {
              cov_2obndpo0kl.b[9][1]++;
              cov_2obndpo0kl.s[48]++;
              for (var i = (cov_2obndpo0kl.s[49]++, 0); i < this.rows.length; i++) {
                cov_2obndpo0kl.s[50]++;
                if (this.rows[i].obj[column].match(regexp)) {
                  cov_2obndpo0kl.b[11][0]++;
                  cov_2obndpo0kl.s[51]++;
                  return this.rows[i];
                } else {
                  cov_2obndpo0kl.b[11][1]++;
                }
              }
            }
            cov_2obndpo0kl.s[52]++;
            return null;
          };

          /**
           * Finds the rows in the Table that match the regular expression provided,
           * and returns references to those rows. Returns an array, so for must be
           * used to iterate through all the rows, as shown in the example. The
           * column to search may be specified by either its ID or title.
           *
           * @method  matchRows
           * @param  {String} regexp The regular expression to match
           * @param  {String|Integer} [column] The column ID (number) or
           *                                  title (string)
           * @return {p5.TableRow[]}          An Array of TableRow objects
           * @example
           * <div class="norender">
           * <code>
           * let table;
           *
           * function setup() {
           *   table = new p5.Table();
           *
           *   table.addColumn('name');
           *   table.addColumn('type');
           *
           *   let newRow = table.addRow();
           *   newRow.setString('name', 'Lion');
           *   newRow.setString('type', 'Mammal');
           *
           *   newRow = table.addRow();
           *   newRow.setString('name', 'Snake');
           *   newRow.setString('type', 'Reptile');
           *
           *   newRow = table.addRow();
           *   newRow.setString('name', 'Mosquito');
           *   newRow.setString('type', 'Insect');
           *
           *   newRow = table.addRow();
           *   newRow.setString('name', 'Lizard');
           *   newRow.setString('type', 'Reptile');
           *
           *   let rows = table.matchRows('R.*', 'type');
           *   for (let i = 0; i < rows.length; i++) {
           *     print(rows[i].getString('name') + ': ' + rows[i].getString('type'));
           *   }
           * }
           * // Sketch prints:
           * // Snake: Reptile
           * // Lizard: Reptile
           * </code>
           * </div>
           */ cov_2obndpo0kl.s[53]++;
          _main.default.Table.prototype.matchRows = function(regexp, column) {
            cov_2obndpo0kl.f[8]++;
            var ret = (cov_2obndpo0kl.s[54]++, []);
            cov_2obndpo0kl.s[55]++;
            if (typeof column === 'number') {
              cov_2obndpo0kl.b[12][0]++;
              cov_2obndpo0kl.s[56]++;
              for (var j = (cov_2obndpo0kl.s[57]++, 0); j < this.rows.length; j++) {
                cov_2obndpo0kl.s[58]++;
                if (this.rows[j].arr[column].match(regexp)) {
                  cov_2obndpo0kl.b[13][0]++;
                  cov_2obndpo0kl.s[59]++;
                  ret.push(this.rows[j]);
                } else {
                  cov_2obndpo0kl.b[13][1]++;
                }
              }
            } else {
              cov_2obndpo0kl.b[12][1]++;
              cov_2obndpo0kl.s[60]++;
              for (var i = (cov_2obndpo0kl.s[61]++, 0); i < this.rows.length; i++) {
                cov_2obndpo0kl.s[62]++;
                if (this.rows[i].obj[column].match(regexp)) {
                  cov_2obndpo0kl.b[14][0]++;
                  cov_2obndpo0kl.s[63]++;
                  ret.push(this.rows[i]);
                } else {
                  cov_2obndpo0kl.b[14][1]++;
                }
              }
            }
            cov_2obndpo0kl.s[64]++;
            return ret;
          };

          /**
           *  Retrieves all values in the specified column, and returns them
           *  as an array. The column may be specified by either its ID or title.
           *
           *  @method  getColumn
           *  @param  {String|Number} column String or Number of the column to return
           *  @return {Array}       Array of column values
           *
           * @example
           * <div class="norender">
           * <code>
           * // Given the CSV file "mammals.csv"
           * // in the project's "assets" folder:
           * //
           * // id,species,name
           * // 0,Capra hircus,Goat
           * // 1,Panthera pardus,Leopard
           * // 2,Equus zebra,Zebra
           *
           * let table;
           *
           * function preload() {
           *   //my table is comma separated value "csv"
           *   //and has a header specifying the columns labels
           *   table = loadTable('assets/mammals.csv', 'csv', 'header');
           * }
           *
           * function setup() {
           *   //getColumn returns an array that can be printed directly
           *   print(table.getColumn('species'));
           *   //outputs ["Capra hircus", "Panthera pardus", "Equus zebra"]
           * }
           * </code>
           * </div>
           *
           *@alt
           * no image displayed
           */ cov_2obndpo0kl.s[65]++;
          _main.default.Table.prototype.getColumn = function(value) {
            cov_2obndpo0kl.f[9]++;
            var ret = (cov_2obndpo0kl.s[66]++, []);
            cov_2obndpo0kl.s[67]++;
            if (typeof value === 'string') {
              cov_2obndpo0kl.b[15][0]++;
              cov_2obndpo0kl.s[68]++;
              for (var i = (cov_2obndpo0kl.s[69]++, 0); i < this.rows.length; i++) {
                cov_2obndpo0kl.s[70]++;
                ret.push(this.rows[i].obj[value]);
              }
            } else {
              cov_2obndpo0kl.b[15][1]++;
              cov_2obndpo0kl.s[71]++;
              for (var j = (cov_2obndpo0kl.s[72]++, 0); j < this.rows.length; j++) {
                cov_2obndpo0kl.s[73]++;
                ret.push(this.rows[j].arr[value]);
              }
            }
            cov_2obndpo0kl.s[74]++;
            return ret;
          };

          /**
           *  Removes all rows from a Table. While all rows are removed,
           *  columns and column titles are maintained.
           *
           *  @method  clearRows
           *
           * @example
           * <div class="norender">
           * <code>
           * // Given the CSV file "mammals.csv"
           * // in the project's "assets" folder:
           * //
           * // id,species,name
           * // 0,Capra hircus,Goat
           * // 1,Panthera pardus,Leopard
           * // 2,Equus zebra,Zebra
           *
           * let table;
           *
           * function preload() {
           *   //my table is comma separated value "csv"
           *   //and has a header specifying the columns labels
           *   table = loadTable('assets/mammals.csv', 'csv', 'header');
           * }
           *
           * function setup() {
           *   table.clearRows();
           *   print(table.getRowCount() + ' total rows in table');
           *   print(table.getColumnCount() + ' total columns in table');
           * }
           * </code>
           * </div>
           *
           *@alt
           * no image displayed
           */ cov_2obndpo0kl.s[75]++;
          _main.default.Table.prototype.clearRows = function() {
            cov_2obndpo0kl.f[10]++;
            cov_2obndpo0kl.s[76]++;
            delete this.rows;
            cov_2obndpo0kl.s[77]++;
            this.rows = [];
          };

          /**
           *  Use <a href="#/p5/addColumn">addColumn()</a> to add a new column to a <a href="#/p5.Table">Table</a> object.
           *  Typically, you will want to specify a title, so the column
           *  may be easily referenced later by name. (If no title is
           *  specified, the new column's title will be null.)
           *
           *  @method  addColumn
           *  @param {String} [title] title of the given column
           *
           * @example
           * <div class="norender">
           * <code>
           * // Given the CSV file "mammals.csv"
           * // in the project's "assets" folder:
           * //
           * // id,species,name
           * // 0,Capra hircus,Goat
           * // 1,Panthera pardus,Leopard
           * // 2,Equus zebra,Zebra
           *
           * let table;
           *
           * function preload() {
           *   //my table is comma separated value "csv"
           *   //and has a header specifying the columns labels
           *   table = loadTable('assets/mammals.csv', 'csv', 'header');
           * }
           *
           * function setup() {
           *   table.addColumn('carnivore');
           *   table.set(0, 'carnivore', 'no');
           *   table.set(1, 'carnivore', 'yes');
           *   table.set(2, 'carnivore', 'no');
           *
           *   //print the results
           *   for (let r = 0; r < table.getRowCount(); r++)
           *     for (let c = 0; c < table.getColumnCount(); c++)
           *       print(table.getString(r, c));
           * }
           * </code>
           * </div>
           *
           *@alt
           * no image displayed
           */ cov_2obndpo0kl.s[78]++;
          _main.default.Table.prototype.addColumn = function(title) {
            cov_2obndpo0kl.f[11]++;
            var t = (cov_2obndpo0kl.s[79]++,
            (cov_2obndpo0kl.b[16][0]++, title) || (cov_2obndpo0kl.b[16][1]++, null));
            cov_2obndpo0kl.s[80]++;
            this.columns.push(t);
          };

          /**
           *  Returns the total number of columns in a Table.
           *
           *  @method  getColumnCount
           *  @return {Integer} Number of columns in this table
           * @example
           * <div>
           * <code>
           * // given the cvs file "blobs.csv" in /assets directory
           * // ID, Name, Flavor, Shape, Color
           * // Blob1, Blobby, Sweet, Blob, Pink
           * // Blob2, Saddy, Savory, Blob, Blue
           *
           * let table;
           *
           * function preload() {
           *   table = loadTable('assets/blobs.csv');
           * }
           *
           * function setup() {
           *   createCanvas(200, 100);
           *   textAlign(CENTER);
           *   background(255);
           * }
           *
           * function draw() {
           *   let numOfColumn = table.getColumnCount();
           *   text('There are ' + numOfColumn + ' columns in the table.', 100, 50);
           * }
           * </code>
           * </div>
           */ cov_2obndpo0kl.s[81]++;
          _main.default.Table.prototype.getColumnCount = function() {
            cov_2obndpo0kl.f[12]++;
            cov_2obndpo0kl.s[82]++;
            return this.columns.length;
          };

          /**
           *  Returns the total number of rows in a Table.
           *
           *  @method  getRowCount
           *  @return {Integer} Number of rows in this table
           * @example
           * <div>
           * <code>
           * // given the cvs file "blobs.csv" in /assets directory
           * //
           * // ID, Name, Flavor, Shape, Color
           * // Blob1, Blobby, Sweet, Blob, Pink
           * // Blob2, Saddy, Savory, Blob, Blue
           *
           * let table;
           *
           * function preload() {
           *   table = loadTable('assets/blobs.csv');
           * }
           *
           * function setup() {
           *   createCanvas(200, 100);
           *   textAlign(CENTER);
           *   background(255);
           * }
           *
           * function draw() {
           *   text('There are ' + table.getRowCount() + ' rows in the table.', 100, 50);
           * }
           * </code>
           * </div>
           */ cov_2obndpo0kl.s[83]++;
          _main.default.Table.prototype.getRowCount = function() {
            cov_2obndpo0kl.f[13]++;
            cov_2obndpo0kl.s[84]++;
            return this.rows.length;
          };

          /**
           *  Removes any of the specified characters (or "tokens").
           *
           *  If no column is specified, then the values in all columns and
           *  rows are processed. A specific column may be referenced by
           *  either its ID or title.
           *
           *  @method  removeTokens
           *  @param  {String} chars  String listing characters to be removed
           *  @param  {String|Integer} [column] Column ID (number)
           *                                   or name (string)
           *
           * @example
           * <div class="norender"><code>
           * function setup() {
           *   let table = new p5.Table();
           *
           *   table.addColumn('name');
           *   table.addColumn('type');
           *
           *   let newRow = table.addRow();
           *   newRow.setString('name', '   $Lion  ,');
           *   newRow.setString('type', ',,,Mammal');
           *
           *   newRow = table.addRow();
           *   newRow.setString('name', '$Snake  ');
           *   newRow.setString('type', ',,,Reptile');
           *
           *   table.removeTokens(',$ ');
           *   print(table.getArray());
           * }
           *
           * // prints:
           * //  0  "Lion"   "Mamal"
           * //  1  "Snake"  "Reptile"
           * </code></div>
           */ cov_2obndpo0kl.s[85]++;
          _main.default.Table.prototype.removeTokens = function(chars, column) {
            cov_2obndpo0kl.f[14]++;
            cov_2obndpo0kl.s[86]++;
            var escape = function escape(s) {
              cov_2obndpo0kl.f[15]++;
              cov_2obndpo0kl.s[87]++;
              return s.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&');
            };
            var charArray = (cov_2obndpo0kl.s[88]++, []);
            cov_2obndpo0kl.s[89]++;
            for (var i = (cov_2obndpo0kl.s[90]++, 0); i < chars.length; i++) {
              cov_2obndpo0kl.s[91]++;
              charArray.push(escape(chars.charAt(i)));
            }
            var regex = (cov_2obndpo0kl.s[92]++, new RegExp(charArray.join('|'), 'g'));
            cov_2obndpo0kl.s[93]++;

            if (typeof column === 'undefined') {
              cov_2obndpo0kl.b[17][0]++;
              cov_2obndpo0kl.s[94]++;
              for (var c = (cov_2obndpo0kl.s[95]++, 0); c < this.columns.length; c++) {
                cov_2obndpo0kl.s[96]++;
                for (var d = (cov_2obndpo0kl.s[97]++, 0); d < this.rows.length; d++) {
                  var s = (cov_2obndpo0kl.s[98]++, this.rows[d].arr[c]);
                  cov_2obndpo0kl.s[99]++;
                  s = s.replace(regex, '');
                  cov_2obndpo0kl.s[100]++;
                  this.rows[d].arr[c] = s;
                  cov_2obndpo0kl.s[101]++;
                  this.rows[d].obj[this.columns[c]] = s;
                }
              }
            } else {
              cov_2obndpo0kl.b[17][1]++;
              cov_2obndpo0kl.s[102]++;
              if (typeof column === 'string') {
                cov_2obndpo0kl.b[18][0]++;
                cov_2obndpo0kl.s[103]++;
                for (var j = (cov_2obndpo0kl.s[104]++, 0); j < this.rows.length; j++) {
                  var val = (cov_2obndpo0kl.s[105]++, this.rows[j].obj[column]);
                  cov_2obndpo0kl.s[106]++;
                  val = val.replace(regex, '');
                  cov_2obndpo0kl.s[107]++;
                  this.rows[j].obj[column] = val;
                  var pos = (cov_2obndpo0kl.s[108]++, this.columns.indexOf(column));
                  cov_2obndpo0kl.s[109]++;
                  this.rows[j].arr[pos] = val;
                }
              } else {
                cov_2obndpo0kl.b[18][1]++;
                cov_2obndpo0kl.s[110]++;
                for (var k = (cov_2obndpo0kl.s[111]++, 0); k < this.rows.length; k++) {
                  var str = (cov_2obndpo0kl.s[112]++, this.rows[k].arr[column]);
                  cov_2obndpo0kl.s[113]++;
                  str = str.replace(regex, '');
                  cov_2obndpo0kl.s[114]++;
                  this.rows[k].arr[column] = str;
                  cov_2obndpo0kl.s[115]++;
                  this.rows[k].obj[this.columns[column]] = str;
                }
              }
            }
          };

          /**
           *  Trims leading and trailing whitespace, such as spaces and tabs,
           *  from String table values. If no column is specified, then the
           *  values in all columns and rows are trimmed. A specific column
           *  may be referenced by either its ID or title.
           *
           *  @method  trim
           *  @param  {String|Integer} [column] Column ID (number)
           *                                   or name (string)
           * @example
           * <div class="norender"><code>
           * function setup() {
           *   let table = new p5.Table();
           *
           *   table.addColumn('name');
           *   table.addColumn('type');
           *
           *   let newRow = table.addRow();
           *   newRow.setString('name', '   Lion  ,');
           *   newRow.setString('type', ' Mammal  ');
           *
           *   newRow = table.addRow();
           *   newRow.setString('name', '  Snake  ');
           *   newRow.setString('type', '  Reptile  ');
           *
           *   table.trim();
           *   print(table.getArray());
           * }
           *
           * // prints:
           * //  0  "Lion"   "Mamal"
           * //  1  "Snake"  "Reptile"
           * </code></div>
           */ cov_2obndpo0kl.s[116]++;
          _main.default.Table.prototype.trim = function(column) {
            cov_2obndpo0kl.f[16]++;
            var regex = (cov_2obndpo0kl.s[117]++, new RegExp(' ', 'g'));
            cov_2obndpo0kl.s[118]++;

            if (typeof column === 'undefined') {
              cov_2obndpo0kl.b[19][0]++;
              cov_2obndpo0kl.s[119]++;
              for (var c = (cov_2obndpo0kl.s[120]++, 0); c < this.columns.length; c++) {
                cov_2obndpo0kl.s[121]++;
                for (var d = (cov_2obndpo0kl.s[122]++, 0); d < this.rows.length; d++) {
                  var s = (cov_2obndpo0kl.s[123]++, this.rows[d].arr[c]);
                  cov_2obndpo0kl.s[124]++;
                  s = s.replace(regex, '');
                  cov_2obndpo0kl.s[125]++;
                  this.rows[d].arr[c] = s;
                  cov_2obndpo0kl.s[126]++;
                  this.rows[d].obj[this.columns[c]] = s;
                }
              }
            } else {
              cov_2obndpo0kl.b[19][1]++;
              cov_2obndpo0kl.s[127]++;
              if (typeof column === 'string') {
                cov_2obndpo0kl.b[20][0]++;
                cov_2obndpo0kl.s[128]++;
                for (var j = (cov_2obndpo0kl.s[129]++, 0); j < this.rows.length; j++) {
                  var val = (cov_2obndpo0kl.s[130]++, this.rows[j].obj[column]);
                  cov_2obndpo0kl.s[131]++;
                  val = val.replace(regex, '');
                  cov_2obndpo0kl.s[132]++;
                  this.rows[j].obj[column] = val;
                  var pos = (cov_2obndpo0kl.s[133]++, this.columns.indexOf(column));
                  cov_2obndpo0kl.s[134]++;
                  this.rows[j].arr[pos] = val;
                }
              } else {
                cov_2obndpo0kl.b[20][1]++;
                cov_2obndpo0kl.s[135]++;
                for (var k = (cov_2obndpo0kl.s[136]++, 0); k < this.rows.length; k++) {
                  var str = (cov_2obndpo0kl.s[137]++, this.rows[k].arr[column]);
                  cov_2obndpo0kl.s[138]++;
                  str = str.replace(regex, '');
                  cov_2obndpo0kl.s[139]++;
                  this.rows[k].arr[column] = str;
                  cov_2obndpo0kl.s[140]++;
                  this.rows[k].obj[this.columns[column]] = str;
                }
              }
            }
          };

          /**
           *  Use <a href="#/p5/removeColumn">removeColumn()</a> to remove an existing column from a Table
           *  object. The column to be removed may be identified by either
           *  its title (a String) or its index value (an int).
           *  removeColumn(0) would remove the first column, removeColumn(1)
           *  would remove the second column, and so on.
           *
           *  @method  removeColumn
           *  @param  {String|Integer} column columnName (string) or ID (number)
           *
           * @example
           * <div class="norender">
           * <code>
           * // Given the CSV file "mammals.csv"
           * // in the project's "assets" folder:
           * //
           * // id,species,name
           * // 0,Capra hircus,Goat
           * // 1,Panthera pardus,Leopard
           * // 2,Equus zebra,Zebra
           *
           * let table;
           *
           * function preload() {
           *   //my table is comma separated value "csv"
           *   //and has a header specifying the columns labels
           *   table = loadTable('assets/mammals.csv', 'csv', 'header');
           * }
           *
           * function setup() {
           *   table.removeColumn('id');
           *   print(table.getColumnCount());
           * }
           * </code>
           * </div>
           *
           *@alt
           * no image displayed
           */ cov_2obndpo0kl.s[141]++;
          _main.default.Table.prototype.removeColumn = function(c) {
            cov_2obndpo0kl.f[17]++;
            var cString;
            var cNumber;
            cov_2obndpo0kl.s[142]++;
            if (typeof c === 'string') {
              cov_2obndpo0kl.b[21][0]++;
              cov_2obndpo0kl.s[143]++;
              // find the position of c in the columns
              cString = c;
              cov_2obndpo0kl.s[144]++;
              cNumber = this.columns.indexOf(c);
            } else {
              cov_2obndpo0kl.b[21][1]++;
              cov_2obndpo0kl.s[145]++;
              cNumber = c;
              cov_2obndpo0kl.s[146]++;
              cString = this.columns[c];
            }

            var chunk = (cov_2obndpo0kl.s[147]++,
            this.columns.splice(cNumber + 1, this.columns.length));
            cov_2obndpo0kl.s[148]++;
            this.columns.pop();
            cov_2obndpo0kl.s[149]++;
            this.columns = this.columns.concat(chunk);
            cov_2obndpo0kl.s[150]++;

            for (var i = (cov_2obndpo0kl.s[151]++, 0); i < this.rows.length; i++) {
              var tempR = (cov_2obndpo0kl.s[152]++, this.rows[i].arr);
              var chip = (cov_2obndpo0kl.s[153]++, tempR.splice(cNumber + 1, tempR.length));
              cov_2obndpo0kl.s[154]++;
              tempR.pop();
              cov_2obndpo0kl.s[155]++;
              this.rows[i].arr = tempR.concat(chip);
              cov_2obndpo0kl.s[156]++;
              delete this.rows[i].obj[cString];
            }
          };

          /**
           * Stores a value in the Table's specified row and column.
           * The row is specified by its ID, while the column may be specified
           * by either its ID or title.
           *
           * @method  set
           * @param {Integer} row row ID
           * @param {String|Integer} column column ID (Number)
           *                               or title (String)
           * @param {String|Number} value  value to assign
           *
           * @example
           * <div class="norender">
           * <code>
           * // Given the CSV file "mammals.csv"
           * // in the project's "assets" folder:
           * //
           * // id,species,name
           * // 0,Capra hircus,Goat
           * // 1,Panthera pardus,Leopard
           * // 2,Equus zebra,Zebra
           *
           * let table;
           *
           * function preload() {
           *   //my table is comma separated value "csv"
           *   //and has a header specifying the columns labels
           *   table = loadTable('assets/mammals.csv', 'csv', 'header');
           * }
           *
           * function setup() {
           *   table.set(0, 'species', 'Canis Lupus');
           *   table.set(0, 'name', 'Wolf');
           *
           *   //print the results
           *   for (let r = 0; r < table.getRowCount(); r++)
           *     for (let c = 0; c < table.getColumnCount(); c++)
           *       print(table.getString(r, c));
           * }
           * </code>
           * </div>
           *
           *@alt
           * no image displayed
           */ cov_2obndpo0kl.s[157]++;
          _main.default.Table.prototype.set = function(row, column, value) {
            cov_2obndpo0kl.f[18]++;
            cov_2obndpo0kl.s[158]++;
            this.rows[row].set(column, value);
          };

          /**
           * Stores a Float value in the Table's specified row and column.
           * The row is specified by its ID, while the column may be specified
           * by either its ID or title.
           *
           * @method setNum
           * @param {Integer} row row ID
           * @param {String|Integer} column column ID (Number)
           *                               or title (String)
           * @param {Number} value  value to assign
           *
           * @example
           * <div class="norender">
           * <code>
           * // Given the CSV file "mammals.csv"
           * // in the project's "assets" folder:
           * //
           * // id,species,name
           * // 0,Capra hircus,Goat
           * // 1,Panthera pardus,Leopard
           * // 2,Equus zebra,Zebra
           *
           * let table;
           *
           * function preload() {
           *   //my table is comma separated value "csv"
           *   //and has a header specifying the columns labels
           *   table = loadTable('assets/mammals.csv', 'csv', 'header');
           * }
           *
           * function setup() {
           *   table.setNum(1, 'id', 1);
           *
           *   print(table.getColumn(0));
           *   //["0", 1, "2"]
           * }
           * </code>
           * </div>
           *
           *@alt
           * no image displayed
           */ cov_2obndpo0kl.s[159]++;
          _main.default.Table.prototype.setNum = function(row, column, value) {
            cov_2obndpo0kl.f[19]++;
            cov_2obndpo0kl.s[160]++;
            this.rows[row].setNum(column, value);
          };

          /**
           * Stores a String value in the Table's specified row and column.
           * The row is specified by its ID, while the column may be specified
           * by either its ID or title.
           *
           * @method  setString
           * @param {Integer} row row ID
           * @param {String|Integer} column column ID (Number)
           *                               or title (String)
           * @param {String} value  value to assign
           * @example
           * <div class="norender"><code>
           * // Given the CSV file "mammals.csv" in the project's "assets" folder:
           * //
           * // id,species,name
           * // 0,Capra hircus,Goat
           * // 1,Panthera pardus,Leopard
           * // 2,Equus zebra,Zebra
           *
           * let table;
           *
           * function preload() {
           *   //my table is comma separated value "csv"
           *   //and has a header specifying the columns labels
           *   table = loadTable('assets/mammals.csv', 'csv', 'header');
           * }
           *
           * function setup() {
           *   //add a row
           *   let newRow = table.addRow();
           *   newRow.setString('id', table.getRowCount() - 1);
           *   newRow.setString('species', 'Canis Lupus');
           *   newRow.setString('name', 'Wolf');
           *
           *   print(table.getArray());
           * }
           * </code></div>
           *
           * @alt
           * no image displayed
           */ cov_2obndpo0kl.s[161]++;
          _main.default.Table.prototype.setString = function(row, column, value) {
            cov_2obndpo0kl.f[20]++;
            cov_2obndpo0kl.s[162]++;
            this.rows[row].setString(column, value);
          };

          /**
           * Retrieves a value from the Table's specified row and column.
           * The row is specified by its ID, while the column may be specified by
           * either its ID or title.
           *
           * @method  get
           * @param {Integer} row row ID
           * @param  {String|Integer} column columnName (string) or
           *                                   ID (number)
           * @return {String|Number}
           *
           * @example
           * <div class="norender">
           * <code>
           * // Given the CSV file "mammals.csv"
           * // in the project's "assets" folder:
           * //
           * // id,species,name
           * // 0,Capra hircus,Goat
           * // 1,Panthera pardus,Leopard
           * // 2,Equus zebra,Zebra
           *
           * let table;
           *
           * function preload() {
           *   //my table is comma separated value "csv"
           *   //and has a header specifying the columns labels
           *   table = loadTable('assets/mammals.csv', 'csv', 'header');
           * }
           *
           * function setup() {
           *   print(table.get(0, 1));
           *   //Capra hircus
           *   print(table.get(0, 'species'));
           *   //Capra hircus
           * }
           * </code>
           * </div>
           *
           *@alt
           * no image displayed
           */ cov_2obndpo0kl.s[163]++;
          _main.default.Table.prototype.get = function(row, column) {
            cov_2obndpo0kl.f[21]++;
            cov_2obndpo0kl.s[164]++;
            return this.rows[row].get(column);
          };

          /**
           * Retrieves a Float value from the Table's specified row and column.
           * The row is specified by its ID, while the column may be specified by
           * either its ID or title.
           *
           * @method  getNum
           * @param {Integer} row row ID
           * @param  {String|Integer} column columnName (string) or
           *                                   ID (number)
           * @return {Number}
           *
           * @example
           * <div class="norender">
           * <code>
           * // Given the CSV file "mammals.csv"
           * // in the project's "assets" folder:
           * //
           * // id,species,name
           * // 0,Capra hircus,Goat
           * // 1,Panthera pardus,Leopard
           * // 2,Equus zebra,Zebra
           *
           * let table;
           *
           * function preload() {
           *   //my table is comma separated value "csv"
           *   //and has a header specifying the columns labels
           *   table = loadTable('assets/mammals.csv', 'csv', 'header');
           * }
           *
           * function setup() {
           *   print(table.getNum(1, 0) + 100);
           *   //id 1 + 100 = 101
           * }
           * </code>
           * </div>
           *
           *@alt
           * no image displayed
           */ cov_2obndpo0kl.s[165]++;
          _main.default.Table.prototype.getNum = function(row, column) {
            cov_2obndpo0kl.f[22]++;
            cov_2obndpo0kl.s[166]++;
            return this.rows[row].getNum(column);
          };

          /**
           * Retrieves a String value from the Table's specified row and column.
           * The row is specified by its ID, while the column may be specified by
           * either its ID or title.
           *
           * @method  getString
           * @param {Integer} row row ID
           * @param  {String|Integer} column columnName (string) or
           *                                   ID (number)
           * @return {String}
           *
           * @example
           * <div class="norender">
           * <code>
           * // Given the CSV file "mammals.csv"
           * // in the project's "assets" folder:
           * //
           * // id,species,name
           * // 0,Capra hircus,Goat
           * // 1,Panthera pardus,Leopard
           * // 2,Equus zebra,Zebra
           *
           * let table;
           *
           * function preload() {
           *   // table is comma separated value "CSV"
           *   // and has specifiying header for column labels
           *   table = loadTable('assets/mammals.csv', 'csv', 'header');
           * }
           *
           * function setup() {
           *   print(table.getString(0, 0)); // 0
           *   print(table.getString(0, 1)); // Capra hircus
           *   print(table.getString(0, 2)); // Goat
           *   print(table.getString(1, 0)); // 1
           *   print(table.getString(1, 1)); // Panthera pardus
           *   print(table.getString(1, 2)); // Leopard
           *   print(table.getString(2, 0)); // 2
           *   print(table.getString(2, 1)); // Equus zebra
           *   print(table.getString(2, 2)); // Zebra
           * }
           * </code>
           * </div>
           *
           *@alt
           * no image displayed
           */ cov_2obndpo0kl.s[167]++;

          _main.default.Table.prototype.getString = function(row, column) {
            cov_2obndpo0kl.f[23]++;
            cov_2obndpo0kl.s[168]++;
            return this.rows[row].getString(column);
          };

          /**
           * Retrieves all table data and returns as an object. If a column name is
           * passed in, each row object will be stored with that attribute as its
           * title.
           *
           * @method  getObject
           * @param {String} [headerColumn] Name of the column which should be used to
           *                              title each row object (optional)
           * @return {Object}
           *
           * @example
           * <div class="norender">
           * <code>
           * // Given the CSV file "mammals.csv"
           * // in the project's "assets" folder:
           * //
           * // id,species,name
           * // 0,Capra hircus,Goat
           * // 1,Panthera pardus,Leopard
           * // 2,Equus zebra,Zebra
           *
           * let table;
           *
           * function preload() {
           *   //my table is comma separated value "csv"
           *   //and has a header specifying the columns labels
           *   table = loadTable('assets/mammals.csv', 'csv', 'header');
           * }
           *
           * function setup() {
           *   let tableObject = table.getObject();
           *
           *   print(tableObject);
           *   //outputs an object
           * }
           * </code>
           * </div>
           *
           *@alt
           * no image displayed
           */ cov_2obndpo0kl.s[169]++;
          _main.default.Table.prototype.getObject = function(headerColumn) {
            cov_2obndpo0kl.f[24]++;
            var tableObject = (cov_2obndpo0kl.s[170]++, {});
            var obj, cPos, index;
            cov_2obndpo0kl.s[171]++;

            for (var i = (cov_2obndpo0kl.s[172]++, 0); i < this.rows.length; i++) {
              cov_2obndpo0kl.s[173]++;
              obj = this.rows[i].obj;
              cov_2obndpo0kl.s[174]++;

              if (typeof headerColumn === 'string') {
                cov_2obndpo0kl.b[22][0]++;
                cov_2obndpo0kl.s[175]++;
                cPos = this.columns.indexOf(headerColumn); // index of columnID
                cov_2obndpo0kl.s[176]++;
                if (cPos >= 0) {
                  cov_2obndpo0kl.b[23][0]++;
                  cov_2obndpo0kl.s[177]++;
                  index = obj[headerColumn];
                  cov_2obndpo0kl.s[178]++;
                  tableObject[index] = obj;
                } else {
                  cov_2obndpo0kl.b[23][1]++;
                  cov_2obndpo0kl.s[179]++;
                  throw new Error(
                    'This table has no column named "'.concat(headerColumn, '"')
                  );
                }
              } else {
                cov_2obndpo0kl.b[22][1]++;
                cov_2obndpo0kl.s[180]++;
                tableObject[i] = this.rows[i].obj;
              }
            }
            cov_2obndpo0kl.s[181]++;
            return tableObject;
          };

          /**
           * Retrieves all table data and returns it as a multidimensional array.
           *
           * @method  getArray
           * @return {Array}
           *
           * @example
           * <div class="norender">
           * <code>
           * // Given the CSV file "mammals.csv"
           * // in the project's "assets" folder
           * //
           * // id,species,name
           * // 0,Capra hircus,Goat
           * // 1,Panthera pardus,Leoperd
           * // 2,Equus zebra,Zebra
           *
           * let table;
           *
           * function preload() {
           *   // table is comma separated value "CSV"
           *   // and has specifiying header for column labels
           *   table = loadTable('assets/mammals.csv', 'csv', 'header');
           * }
           *
           * function setup() {
           *   let tableArray = table.getArray();
           *   for (let i = 0; i < tableArray.length; i++) {
           *     print(tableArray[i]);
           *   }
           * }
           * </code>
           * </div>
           *
           *@alt
           * no image displayed
           */ cov_2obndpo0kl.s[182]++;
          _main.default.Table.prototype.getArray = function() {
            cov_2obndpo0kl.f[25]++;
            var tableArray = (cov_2obndpo0kl.s[183]++, []);
            cov_2obndpo0kl.s[184]++;
            for (var i = (cov_2obndpo0kl.s[185]++, 0); i < this.rows.length; i++) {
              cov_2obndpo0kl.s[186]++;
              tableArray.push(this.rows[i].arr);
            }
            cov_2obndpo0kl.s[187]++;
            return tableArray;
          };
          var _default = _main.default;
          exports.default = _default;
        },
        {
          '../core/main': 283,
          'core-js/modules/es.array.concat': 166,
          'core-js/modules/es.array.index-of': 173,
          'core-js/modules/es.array.join': 175,
          'core-js/modules/es.array.splice': 180,
          'core-js/modules/es.regexp.constructor': 195,
          'core-js/modules/es.regexp.exec': 196,
          'core-js/modules/es.regexp.to-string': 197,
          'core-js/modules/es.string.match': 202,
          'core-js/modules/es.string.replace': 204,
          'core-js/modules/es.string.trim': 208
        }
      ],
      311: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_1eza97mw91 = (function() {
            var path = '/Users/outofambit/src/p5.js/src/io/p5.TableRow.js';
            var hash = 'f7f7bbc9e41ff3832743d9f1adda206c2d05e7b9';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/io/p5.TableRow.js',
              statementMap: {
                '0': { start: { line: 23, column: 0 }, end: { line: 38, column: 2 } },
                '1': { start: { line: 24, column: 12 }, end: { line: 24, column: 14 } },
                '2': { start: { line: 25, column: 14 }, end: { line: 25, column: 16 } },
                '3': { start: { line: 26, column: 2 }, end: { line: 29, column: 3 } },
                '4': { start: { line: 27, column: 4 }, end: { line: 27, column: 33 } },
                '5': { start: { line: 28, column: 4 }, end: { line: 28, column: 31 } },
                '6': { start: { line: 30, column: 2 }, end: { line: 34, column: 3 } },
                '7': { start: { line: 30, column: 15 }, end: { line: 30, column: 16 } },
                '8': { start: { line: 31, column: 16 }, end: { line: 31, column: 17 } },
                '9': { start: { line: 32, column: 16 }, end: { line: 32, column: 22 } },
                '10': { start: { line: 33, column: 4 }, end: { line: 33, column: 19 } },
                '11': { start: { line: 35, column: 2 }, end: { line: 35, column: 17 } },
                '12': { start: { line: 36, column: 2 }, end: { line: 36, column: 17 } },
                '13': { start: { line: 37, column: 2 }, end: { line: 37, column: 20 } },
                '14': { start: { line: 80, column: 0 }, end: { line: 100, column: 2 } },
                '15': { start: { line: 82, column: 2 }, end: { line: 99, column: 3 } },
                '16': { start: { line: 83, column: 17 }, end: { line: 83, column: 51 } },
                '17': { start: { line: 84, column: 4 }, end: { line: 89, column: 5 } },
                '18': { start: { line: 85, column: 6 }, end: { line: 85, column: 31 } },
                '19': { start: { line: 86, column: 6 }, end: { line: 86, column: 29 } },
                '20': { start: { line: 88, column: 6 }, end: { line: 88, column: 68 } },
                '21': { start: { line: 92, column: 4 }, end: { line: 98, column: 5 } },
                '22': { start: { line: 93, column: 6 }, end: { line: 93, column: 31 } },
                '23': { start: { line: 94, column: 21 }, end: { line: 94, column: 47 } },
                '24': { start: { line: 95, column: 6 }, end: { line: 95, column: 31 } },
                '25': { start: { line: 97, column: 6 }, end: { line: 97, column: 77 } },
                '26': { start: { line: 141, column: 0 }, end: { line: 144, column: 2 } },
                '27': { start: { line: 142, column: 19 }, end: { line: 142, column: 36 } },
                '28': { start: { line: 143, column: 2 }, end: { line: 143, column: 29 } },
                '29': { start: { line: 186, column: 0 }, end: { line: 189, column: 2 } },
                '30': { start: { line: 187, column: 20 }, end: { line: 187, column: 36 } },
                '31': { start: { line: 188, column: 2 }, end: { line: 188, column: 30 } },
                '32': { start: { line: 231, column: 0 }, end: { line: 237, column: 2 } },
                '33': { start: { line: 232, column: 2 }, end: { line: 236, column: 3 } },
                '34': { start: { line: 233, column: 4 }, end: { line: 233, column: 28 } },
                '35': { start: { line: 235, column: 4 }, end: { line: 235, column: 28 } },
                '36': { start: { line: 281, column: 0 }, end: { line: 293, column: 2 } },
                '37': { start: { line: 283, column: 2 }, end: { line: 287, column: 3 } },
                '38': { start: { line: 284, column: 4 }, end: { line: 284, column: 39 } },
                '39': { start: { line: 286, column: 4 }, end: { line: 286, column: 39 } },
                '40': { start: { line: 289, column: 2 }, end: { line: 291, column: 3 } },
                '41': { start: { line: 290, column: 4 }, end: { line: 290, column: 61 } },
                '42': { start: { line: 292, column: 2 }, end: { line: 292, column: 13 } },
                '43': { start: { line: 338, column: 0 }, end: { line: 344, column: 2 } },
                '44': { start: { line: 339, column: 2 }, end: { line: 343, column: 3 } },
                '45': { start: { line: 340, column: 4 }, end: { line: 340, column: 39 } },
                '46': { start: { line: 342, column: 4 }, end: { line: 342, column: 39 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 23, column: 14 }, end: { line: 23, column: 15 } },
                  loc: { start: { line: 23, column: 39 }, end: { line: 38, column: 1 } },
                  line: 23
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 80, column: 28 }, end: { line: 80, column: 29 } },
                  loc: { start: { line: 80, column: 52 }, end: { line: 100, column: 1 } },
                  line: 80
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 141, column: 31 },
                    end: { line: 141, column: 32 }
                  },
                  loc: { start: { line: 141, column: 55 }, end: { line: 144, column: 1 } },
                  line: 141
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 186, column: 34 },
                    end: { line: 186, column: 35 }
                  },
                  loc: { start: { line: 186, column: 58 }, end: { line: 189, column: 1 } },
                  line: 186
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 231, column: 28 },
                    end: { line: 231, column: 29 }
                  },
                  loc: { start: { line: 231, column: 45 }, end: { line: 237, column: 1 } },
                  line: 231
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 281, column: 31 },
                    end: { line: 281, column: 32 }
                  },
                  loc: { start: { line: 281, column: 48 }, end: { line: 293, column: 1 } },
                  line: 281
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 338, column: 34 },
                    end: { line: 338, column: 35 }
                  },
                  loc: { start: { line: 338, column: 51 }, end: { line: 344, column: 1 } },
                  line: 338
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 26, column: 2 }, end: { line: 29, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 26, column: 2 }, end: { line: 29, column: 3 } },
                    { start: { line: 26, column: 2 }, end: { line: 29, column: 3 } }
                  ],
                  line: 26
                },
                '1': {
                  loc: { start: { line: 27, column: 16 }, end: { line: 27, column: 32 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 27, column: 16 }, end: { line: 27, column: 25 } },
                    { start: { line: 27, column: 29 }, end: { line: 27, column: 32 } }
                  ],
                  line: 27
                },
                '2': {
                  loc: { start: { line: 82, column: 2 }, end: { line: 99, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 82, column: 2 }, end: { line: 99, column: 3 } },
                    { start: { line: 82, column: 2 }, end: { line: 99, column: 3 } }
                  ],
                  line: 82
                },
                '3': {
                  loc: { start: { line: 84, column: 4 }, end: { line: 89, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 84, column: 4 }, end: { line: 89, column: 5 } },
                    { start: { line: 84, column: 4 }, end: { line: 89, column: 5 } }
                  ],
                  line: 84
                },
                '4': {
                  loc: { start: { line: 92, column: 4 }, end: { line: 98, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 92, column: 4 }, end: { line: 98, column: 5 } },
                    { start: { line: 92, column: 4 }, end: { line: 98, column: 5 } }
                  ],
                  line: 92
                },
                '5': {
                  loc: { start: { line: 232, column: 2 }, end: { line: 236, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 232, column: 2 }, end: { line: 236, column: 3 } },
                    { start: { line: 232, column: 2 }, end: { line: 236, column: 3 } }
                  ],
                  line: 232
                },
                '6': {
                  loc: { start: { line: 283, column: 2 }, end: { line: 287, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 283, column: 2 }, end: { line: 287, column: 3 } },
                    { start: { line: 283, column: 2 }, end: { line: 287, column: 3 } }
                  ],
                  line: 283
                },
                '7': {
                  loc: { start: { line: 289, column: 2 }, end: { line: 291, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 289, column: 2 }, end: { line: 291, column: 3 } },
                    { start: { line: 289, column: 2 }, end: { line: 291, column: 3 } }
                  ],
                  line: 289
                },
                '8': {
                  loc: { start: { line: 339, column: 2 }, end: { line: 343, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 339, column: 2 }, end: { line: 343, column: 3 } },
                    { start: { line: 339, column: 2 }, end: { line: 343, column: 3 } }
                  ],
                  line: 339
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0
              },
              f: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0 },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: 'f7f7bbc9e41ff3832743d9f1adda206c2d05e7b9'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.index-of');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.regexp.exec');
          _dereq_('core-js/modules/es.regexp.to-string');
          _dereq_('core-js/modules/es.string.split');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_1eza97mw91.s[0]++;

          /**
           *  A TableRow object represents a single row of data values,
           *  stored in columns, from a table.
           *
           *  A Table Row contains both an ordered array, and an unordered
           *  JSON object.
           *
           *  @class p5.TableRow
           *  @constructor
           *  @param {String} [str]       optional: populate the row with a
           *                              string of values, separated by the
           *                              separator
           *  @param {String} [separator] comma separated values (csv) by default
           */
          _main.default.TableRow = function(str, separator) {
            cov_1eza97mw91.f[0]++;
            var arr = (cov_1eza97mw91.s[1]++, []);
            var obj = (cov_1eza97mw91.s[2]++, {});
            cov_1eza97mw91.s[3]++;
            if (str) {
              cov_1eza97mw91.b[0][0]++;
              cov_1eza97mw91.s[4]++;
              separator =
                (cov_1eza97mw91.b[1][0]++, separator) || (cov_1eza97mw91.b[1][1]++, ',');
              cov_1eza97mw91.s[5]++;
              arr = str.split(separator);
            } else {
              cov_1eza97mw91.b[0][1]++;
            }
            cov_1eza97mw91.s[6]++;
            for (var i = (cov_1eza97mw91.s[7]++, 0); i < arr.length; i++) {
              var key = (cov_1eza97mw91.s[8]++, i);
              var val = (cov_1eza97mw91.s[9]++, arr[i]);
              cov_1eza97mw91.s[10]++;
              obj[key] = val;
            }
            cov_1eza97mw91.s[11]++;
            this.arr = arr;
            cov_1eza97mw91.s[12]++;
            this.obj = obj;
            cov_1eza97mw91.s[13]++;
            this.table = null;
          };

          /**
           *  Stores a value in the TableRow's specified column.
           *  The column may be specified by either its ID or title.
           *
           *  @method  set
           *  @param {String|Integer} column Column ID (Number)
           *                                or Title (String)
           *  @param {String|Number} value  The value to be stored
           *
           * @example
           * <div class="norender"><code>
           * // Given the CSV file "mammals.csv" in the project's "assets" folder:
           * //
           * // id,species,name
           * // 0,Capra hircus,Goat
           * // 1,Panthera pardus,Leopard
           * // 2,Equus zebra,Zebra
           *
           * let table;
           *
           * function preload() {
           *   //my table is comma separated value "csv"
           *   //and has a header specifying the columns labels
           *   table = loadTable('assets/mammals.csv', 'csv', 'header');
           * }
           *
           * function setup() {
           *   let rows = table.getRows();
           *   for (let r = 0; r < rows.length; r++) {
           *     rows[r].set('name', 'Unicorn');
           *   }
           *
           *   //print the results
           *   print(table.getArray());
           * }
           * </code></div>
           *
           * @alt
           * no image displayed
           */ cov_1eza97mw91.s[14]++;
          _main.default.TableRow.prototype.set = function(column, value) {
            cov_1eza97mw91.f[1]++;
            cov_1eza97mw91.s[15]++;
            // if typeof column is string, use .obj
            if (typeof column === 'string') {
              cov_1eza97mw91.b[2][0]++;
              var cPos = (cov_1eza97mw91.s[16]++, this.table.columns.indexOf(column)); // index of columnID
              cov_1eza97mw91.s[17]++;
              if (cPos >= 0) {
                cov_1eza97mw91.b[3][0]++;
                cov_1eza97mw91.s[18]++;
                this.obj[column] = value;
                cov_1eza97mw91.s[19]++;
                this.arr[cPos] = value;
              } else {
                cov_1eza97mw91.b[3][1]++;
                cov_1eza97mw91.s[20]++;
                throw new Error('This table has no column named "'.concat(column, '"'));
              }
            } else {
              cov_1eza97mw91.b[2][1]++;
              cov_1eza97mw91.s[21]++;
              // if typeof column is number, use .arr
              if (column < this.table.columns.length) {
                cov_1eza97mw91.b[4][0]++;
                cov_1eza97mw91.s[22]++;
                this.arr[column] = value;
                var cTitle = (cov_1eza97mw91.s[23]++, this.table.columns[column]);
                cov_1eza97mw91.s[24]++;
                this.obj[cTitle] = value;
              } else {
                cov_1eza97mw91.b[4][1]++;
                cov_1eza97mw91.s[25]++;
                throw new Error(
                  'Column #'.concat(column, ' is out of the range of this table')
                );
              }
            }
          };

          /**
           *  Stores a Float value in the TableRow's specified column.
           *  The column may be specified by either its ID or title.
           *
           *  @method  setNum
           *  @param {String|Integer} column Column ID (Number)
           *                                or Title (String)
           *  @param {Number|String} value  The value to be stored
           *                                as a Float
           * @example
           * <div class="norender"><code>
           * // Given the CSV file "mammals.csv" in the project's "assets" folder:
           * //
           * // id,species,name
           * // 0,Capra hircus,Goat
           * // 1,Panthera pardus,Leopard
           * // 2,Equus zebra,Zebra
           *
           * let table;
           *
           * function preload() {
           *   //my table is comma separated value "csv"
           *   //and has a header specifying the columns labels
           *   table = loadTable('assets/mammals.csv', 'csv', 'header');
           * }
           *
           * function setup() {
           *   let rows = table.getRows();
           *   for (let r = 0; r < rows.length; r++) {
           *     rows[r].setNum('id', r + 10);
           *   }
           *
           *   print(table.getArray());
           * }
           * </code></div>
           *
           * @alt
           * no image displayed
           */ cov_1eza97mw91.s[26]++;
          _main.default.TableRow.prototype.setNum = function(column, value) {
            cov_1eza97mw91.f[2]++;
            var floatVal = (cov_1eza97mw91.s[27]++, parseFloat(value));
            cov_1eza97mw91.s[28]++;
            this.set(column, floatVal);
          };

          /**
           *  Stores a String value in the TableRow's specified column.
           *  The column may be specified by either its ID or title.
           *
           *  @method  setString
           *  @param {String|Integer} column Column ID (Number)
           *                                or Title (String)
           *  @param {String|Number|Boolean|Object} value  The value to be stored
           *                                as a String
           * @example
           * <div class="norender"><code>
           * // Given the CSV file "mammals.csv" in the project's "assets" folder:
           * //
           * // id,species,name
           * // 0,Capra hircus,Goat
           * // 1,Panthera pardus,Leopard
           * // 2,Equus zebra,Zebra
           *
           * let table;
           *
           * function preload() {
           *   //my table is comma separated value "csv"
           *   //and has a header specifying the columns labels
           *   table = loadTable('assets/mammals.csv', 'csv', 'header');
           * }
           *
           * function setup() {
           *   let rows = table.getRows();
           *   for (let r = 0; r < rows.length; r++) {
           *     let name = rows[r].getString('name');
           *     rows[r].setString('name', 'A ' + name + ' named George');
           *   }
           *
           *   print(table.getArray());
           * }
           * </code></div>
           *
           * @alt
           * no image displayed
           */ cov_1eza97mw91.s[29]++;
          _main.default.TableRow.prototype.setString = function(column, value) {
            cov_1eza97mw91.f[3]++;
            var stringVal = (cov_1eza97mw91.s[30]++, value.toString());
            cov_1eza97mw91.s[31]++;
            this.set(column, stringVal);
          };

          /**
           *  Retrieves a value from the TableRow's specified column.
           *  The column may be specified by either its ID or title.
           *
           *  @method  get
           *  @param  {String|Integer} column columnName (string) or
           *                                   ID (number)
           *  @return {String|Number}
           *
           * @example
           * <div class="norender"><code>
           * // Given the CSV file "mammals.csv" in the project's "assets" folder:
           * //
           * // id,species,name
           * // 0,Capra hircus,Goat
           * // 1,Panthera pardus,Leopard
           * // 2,Equus zebra,Zebra
           *
           * let table;
           *
           * function preload() {
           *   //my table is comma separated value "csv"
           *   //and has a header specifying the columns labels
           *   table = loadTable('assets/mammals.csv', 'csv', 'header');
           * }
           *
           * function setup() {
           *   let names = [];
           *   let rows = table.getRows();
           *   for (let r = 0; r < rows.length; r++) {
           *     names.push(rows[r].get('name'));
           *   }
           *
           *   print(names);
           * }
           * </code></div>
           *
           * @alt
           * no image displayed
           */ cov_1eza97mw91.s[32]++;
          _main.default.TableRow.prototype.get = function(column) {
            cov_1eza97mw91.f[4]++;
            cov_1eza97mw91.s[33]++;
            if (typeof column === 'string') {
              cov_1eza97mw91.b[5][0]++;
              cov_1eza97mw91.s[34]++;
              return this.obj[column];
            } else {
              cov_1eza97mw91.b[5][1]++;
              cov_1eza97mw91.s[35]++;
              return this.arr[column];
            }
          };

          /**
           *  Retrieves a Float value from the TableRow's specified
           *  column. The column may be specified by either its ID or
           *  title.
           *
           *  @method  getNum
           *  @param  {String|Integer} column columnName (string) or
           *                                   ID (number)
           *  @return {Number}  Float Floating point number
           * @example
           * <div class="norender"><code>
           * // Given the CSV file "mammals.csv" in the project's "assets" folder:
           * //
           * // id,species,name
           * // 0,Capra hircus,Goat
           * // 1,Panthera pardus,Leopard
           * // 2,Equus zebra,Zebra
           *
           * let table;
           *
           * function preload() {
           *   //my table is comma separated value "csv"
           *   //and has a header specifying the columns labels
           *   table = loadTable('assets/mammals.csv', 'csv', 'header');
           * }
           *
           * function setup() {
           *   let rows = table.getRows();
           *   let minId = Infinity;
           *   let maxId = -Infinity;
           *   for (let r = 0; r < rows.length; r++) {
           *     let id = rows[r].getNum('id');
           *     minId = min(minId, id);
           *     maxId = min(maxId, id);
           *   }
           *   print('minimum id = ' + minId + ', maximum id = ' + maxId);
           * }
           * </code></div>
           *
           * @alt
           * no image displayed
           */ cov_1eza97mw91.s[36]++;
          _main.default.TableRow.prototype.getNum = function(column) {
            cov_1eza97mw91.f[5]++;
            var ret;
            cov_1eza97mw91.s[37]++;
            if (typeof column === 'string') {
              cov_1eza97mw91.b[6][0]++;
              cov_1eza97mw91.s[38]++;
              ret = parseFloat(this.obj[column]);
            } else {
              cov_1eza97mw91.b[6][1]++;
              cov_1eza97mw91.s[39]++;
              ret = parseFloat(this.arr[column]);
            }
            cov_1eza97mw91.s[40]++;

            if (ret.toString() === 'NaN') {
              cov_1eza97mw91.b[7][0]++;
              cov_1eza97mw91.s[41]++;
              throw 'Error: '.concat(this.obj[column], ' is NaN (Not a Number)');
            } else {
              cov_1eza97mw91.b[7][1]++;
            }
            cov_1eza97mw91.s[42]++;
            return ret;
          };

          /**
           *  Retrieves an String value from the TableRow's specified
           *  column. The column may be specified by either its ID or
           *  title.
           *
           *  @method  getString
           *  @param  {String|Integer} column columnName (string) or
           *                                   ID (number)
           *  @return {String}  String
           * @example
           * <div class="norender"><code>
           * // Given the CSV file "mammals.csv" in the project's "assets" folder:
           * //
           * // id,species,name
           * // 0,Capra hircus,Goat
           * // 1,Panthera pardus,Leopard
           * // 2,Equus zebra,Zebra
           *
           * let table;
           *
           * function preload() {
           *   //my table is comma separated value "csv"
           *   //and has a header specifying the columns labels
           *   table = loadTable('assets/mammals.csv', 'csv', 'header');
           * }
           *
           * function setup() {
           *   let rows = table.getRows();
           *   let longest = '';
           *   for (let r = 0; r < rows.length; r++) {
           *     let species = rows[r].getString('species');
           *     if (longest.length < species.length) {
           *       longest = species;
           *     }
           *   }
           *
           *   print('longest: ' + longest);
           * }
           * </code></div>
           *
           * @alt
           * no image displayed
           */ cov_1eza97mw91.s[43]++;
          _main.default.TableRow.prototype.getString = function(column) {
            cov_1eza97mw91.f[6]++;
            cov_1eza97mw91.s[44]++;
            if (typeof column === 'string') {
              cov_1eza97mw91.b[8][0]++;
              cov_1eza97mw91.s[45]++;
              return this.obj[column].toString();
            } else {
              cov_1eza97mw91.b[8][1]++;
              cov_1eza97mw91.s[46]++;
              return this.arr[column].toString();
            }
          };
          var _default = _main.default;
          exports.default = _default;
        },
        {
          '../core/main': 283,
          'core-js/modules/es.array.index-of': 173,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.regexp.exec': 196,
          'core-js/modules/es.regexp.to-string': 197,
          'core-js/modules/es.string.split': 206
        }
      ],
      312: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_olr5g05jx = (function() {
            var path = '/Users/outofambit/src/p5.js/src/io/p5.XML.js';
            var hash = 'c133f458119db32e0e13b6641c5aa4657ed25e1b';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/io/p5.XML.js',
              statementMap: {
                '0': { start: { line: 53, column: 0 }, end: { line: 60, column: 2 } },
                '1': { start: { line: 54, column: 2 }, end: { line: 59, column: 3 } },
                '2': { start: { line: 55, column: 19 }, end: { line: 55, column: 70 } },
                '3': { start: { line: 56, column: 4 }, end: { line: 56, column: 44 } },
                '4': { start: { line: 58, column: 4 }, end: { line: 58, column: 19 } },
                '5': { start: { line: 96, column: 0 }, end: { line: 98, column: 2 } },
                '6': { start: { line: 97, column: 2 }, end: { line: 97, column: 44 } },
                '7': { start: { line: 131, column: 0 }, end: { line: 133, column: 2 } },
                '8': { start: { line: 132, column: 2 }, end: { line: 132, column: 26 } },
                '9': { start: { line: 169, column: 0 }, end: { line: 179, column: 2 } },
                '10': { start: { line: 170, column: 18 }, end: { line: 170, column: 36 } },
                '11': { start: { line: 171, column: 21 }, end: { line: 171, column: 40 } },
                '12': { start: { line: 172, column: 17 }, end: { line: 172, column: 72 } },
                '13': { start: { line: 173, column: 17 }, end: { line: 173, column: 43 } },
                '14': { start: { line: 174, column: 2 }, end: { line: 174, column: 29 } },
                '15': { start: { line: 175, column: 2 }, end: { line: 177, column: 3 } },
                '16': { start: { line: 175, column: 15 }, end: { line: 175, column: 16 } },
                '17': { start: { line: 176, column: 4 }, end: { line: 176, column: 70 } },
                '18': { start: { line: 178, column: 2 }, end: { line: 178, column: 20 } },
                '19': { start: { line: 213, column: 0 }, end: { line: 215, column: 2 } },
                '20': { start: { line: 214, column: 2 }, end: { line: 214, column: 38 } },
                '21': { start: { line: 250, column: 0 }, end: { line: 256, column: 2 } },
                '22': { start: { line: 251, column: 14 }, end: { line: 251, column: 16 } },
                '23': { start: { line: 252, column: 2 }, end: { line: 254, column: 3 } },
                '24': { start: { line: 252, column: 15 }, end: { line: 252, column: 16 } },
                '25': { start: { line: 253, column: 4 }, end: { line: 253, column: 46 } },
                '26': { start: { line: 255, column: 2 }, end: { line: 255, column: 13 } },
                '27': { start: { line: 298, column: 0 }, end: { line: 304, column: 2 } },
                '28': { start: { line: 299, column: 2 }, end: { line: 303, column: 3 } },
                '29': { start: { line: 300, column: 4 }, end: { line: 300, column: 65 } },
                '30': { start: { line: 302, column: 4 }, end: { line: 302, column: 46 } },
                '31': { start: { line: 307, column: 14 }, end: { line: 307, column: 16 } },
                '32': { start: { line: 308, column: 2 }, end: { line: 310, column: 3 } },
                '33': { start: { line: 308, column: 15 }, end: { line: 308, column: 16 } },
                '34': { start: { line: 309, column: 4 }, end: { line: 309, column: 38 } },
                '35': { start: { line: 311, column: 2 }, end: { line: 311, column: 13 } },
                '36': { start: { line: 364, column: 0 }, end: { line: 372, column: 2 } },
                '37': { start: { line: 365, column: 2 }, end: { line: 371, column: 3 } },
                '38': { start: { line: 366, column: 4 }, end: { line: 368, column: 5 } },
                '39': { start: { line: 367, column: 6 }, end: { line: 367, column: 60 } },
                '40': { start: { line: 367, column: 35 }, end: { line: 367, column: 60 } },
                '41': { start: { line: 370, column: 4 }, end: { line: 370, column: 48 } },
                '42': { start: { line: 418, column: 0 }, end: { line: 424, column: 2 } },
                '43': { start: { line: 419, column: 2 }, end: { line: 423, column: 3 } },
                '44': { start: { line: 420, column: 4 }, end: { line: 420, column: 35 } },
                '45': { start: { line: 481, column: 0 }, end: { line: 496, column: 2 } },
                '46': { start: { line: 482, column: 12 }, end: { line: 482, column: 14 } },
                '47': { start: { line: 483, column: 2 }, end: { line: 492, column: 3 } },
                '48': { start: { line: 484, column: 4 }, end: { line: 489, column: 5 } },
                '49': { start: { line: 484, column: 17 }, end: { line: 484, column: 18 } },
                '50': { start: { line: 485, column: 6 }, end: { line: 488, column: 7 } },
                '51': { start: { line: 486, column: 8 }, end: { line: 486, column: 16 } },
                '52': { start: { line: 487, column: 8 }, end: { line: 487, column: 14 } },
                '53': { start: { line: 491, column: 4 }, end: { line: 491, column: 16 } },
                '54': { start: { line: 493, column: 2 }, end: { line: 495, column: 3 } },
                '55': { start: { line: 494, column: 4 }, end: { line: 494, column: 49 } },
                '56': { start: { line: 530, column: 0 }, end: { line: 532, column: 2 } },
                '57': { start: { line: 531, column: 2 }, end: { line: 531, column: 36 } },
                '58': { start: { line: 567, column: 0 }, end: { line: 575, column: 2 } },
                '59': { start: { line: 568, column: 14 }, end: { line: 568, column: 16 } },
                '60': { start: { line: 570, column: 2 }, end: { line: 572, column: 3 } },
                '61': { start: { line: 571, column: 4 }, end: { line: 571, column: 33 } },
                '62': { start: { line: 574, column: 2 }, end: { line: 574, column: 13 } },
                '63': { start: { line: 612, column: 0 }, end: { line: 620, column: 2 } },
                '64': { start: { line: 613, column: 14 }, end: { line: 613, column: 16 } },
                '65': { start: { line: 615, column: 2 }, end: { line: 617, column: 3 } },
                '66': { start: { line: 616, column: 4 }, end: { line: 616, column: 50 } },
                '67': { start: { line: 619, column: 2 }, end: { line: 619, column: 34 } },
                '68': { start: { line: 659, column: 0 }, end: { line: 667, column: 2 } },
                '69': { start: { line: 660, column: 14 }, end: { line: 660, column: 16 } },
                '70': { start: { line: 662, column: 2 }, end: { line: 664, column: 3 } },
                '71': { start: { line: 663, column: 4 }, end: { line: 663, column: 50 } },
                '72': { start: { line: 666, column: 2 }, end: { line: 666, column: 48 } },
                '73': { start: { line: 706, column: 0 }, end: { line: 714, column: 2 } },
                '74': { start: { line: 707, column: 14 }, end: { line: 707, column: 16 } },
                '75': { start: { line: 709, column: 2 }, end: { line: 711, column: 3 } },
                '76': { start: { line: 710, column: 4 }, end: { line: 710, column: 50 } },
                '77': { start: { line: 713, column: 2 }, end: { line: 713, column: 62 } },
                '78': { start: { line: 753, column: 0 }, end: { line: 755, column: 2 } },
                '79': { start: { line: 754, column: 2 }, end: { line: 754, column: 37 } },
                '80': { start: { line: 791, column: 0 }, end: { line: 796, column: 2 } },
                '81': { start: { line: 793, column: 2 }, end: { line: 793, column: 29 } },
                '82': { start: { line: 794, column: 2 }, end: { line: 794, column: 35 } },
                '83': { start: { line: 795, column: 2 }, end: { line: 795, column: 37 } },
                '84': { start: { line: 833, column: 0 }, end: { line: 837, column: 2 } },
                '85': { start: { line: 834, column: 2 }, end: { line: 836, column: 3 } },
                '86': { start: { line: 835, column: 4 }, end: { line: 835, column: 35 } },
                '87': { start: { line: 865, column: 0 }, end: { line: 868, column: 2 } },
                '88': { start: { line: 866, column: 24 }, end: { line: 866, column: 43 } },
                '89': { start: { line: 867, column: 2 }, end: { line: 867, column: 51 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 53, column: 9 }, end: { line: 53, column: 10 } },
                  loc: { start: { line: 53, column: 23 }, end: { line: 60, column: 1 } },
                  line: 53
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 96, column: 29 }, end: { line: 96, column: 30 } },
                  loc: { start: { line: 96, column: 40 }, end: { line: 98, column: 1 } },
                  line: 96
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 131, column: 27 },
                    end: { line: 131, column: 28 }
                  },
                  loc: { start: { line: 131, column: 38 }, end: { line: 133, column: 1 } },
                  line: 131
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 169, column: 27 },
                    end: { line: 169, column: 28 }
                  },
                  loc: { start: { line: 169, column: 42 }, end: { line: 179, column: 1 } },
                  line: 169
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 213, column: 31 },
                    end: { line: 213, column: 32 }
                  },
                  loc: { start: { line: 213, column: 42 }, end: { line: 215, column: 1 } },
                  line: 213
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 250, column: 32 },
                    end: { line: 250, column: 33 }
                  },
                  loc: { start: { line: 250, column: 43 }, end: { line: 256, column: 1 } },
                  line: 250
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 298, column: 31 },
                    end: { line: 298, column: 32 }
                  },
                  loc: { start: { line: 298, column: 47 }, end: { line: 304, column: 1 } },
                  line: 298
                },
                '7': {
                  name: 'elementsToP5XML',
                  decl: { start: { line: 306, column: 9 }, end: { line: 306, column: 24 } },
                  loc: { start: { line: 306, column: 35 }, end: { line: 312, column: 1 } },
                  line: 306
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 364, column: 28 },
                    end: { line: 364, column: 29 }
                  },
                  loc: { start: { line: 364, column: 44 }, end: { line: 372, column: 1 } },
                  line: 364
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 418, column: 28 },
                    end: { line: 418, column: 29 }
                  },
                  loc: { start: { line: 418, column: 43 }, end: { line: 424, column: 1 } },
                  line: 418
                },
                '10': {
                  name: '(anonymous_10)',
                  decl: {
                    start: { line: 481, column: 31 },
                    end: { line: 481, column: 32 }
                  },
                  loc: { start: { line: 481, column: 47 }, end: { line: 496, column: 1 } },
                  line: 481
                },
                '11': {
                  name: '(anonymous_11)',
                  decl: {
                    start: { line: 530, column: 37 },
                    end: { line: 530, column: 38 }
                  },
                  loc: { start: { line: 530, column: 48 }, end: { line: 532, column: 1 } },
                  line: 530
                },
                '12': {
                  name: '(anonymous_12)',
                  decl: {
                    start: { line: 567, column: 34 },
                    end: { line: 567, column: 35 }
                  },
                  loc: { start: { line: 567, column: 45 }, end: { line: 575, column: 1 } },
                  line: 567
                },
                '13': {
                  name: '(anonymous_13)',
                  decl: {
                    start: { line: 612, column: 32 },
                    end: { line: 612, column: 33 }
                  },
                  loc: { start: { line: 612, column: 47 }, end: { line: 620, column: 1 } },
                  line: 612
                },
                '14': {
                  name: '(anonymous_14)',
                  decl: {
                    start: { line: 659, column: 26 },
                    end: { line: 659, column: 27 }
                  },
                  loc: { start: { line: 659, column: 55 }, end: { line: 667, column: 1 } },
                  line: 659
                },
                '15': {
                  name: '(anonymous_15)',
                  decl: {
                    start: { line: 706, column: 29 },
                    end: { line: 706, column: 30 }
                  },
                  loc: { start: { line: 706, column: 58 }, end: { line: 714, column: 1 } },
                  line: 706
                },
                '16': {
                  name: '(anonymous_16)',
                  decl: {
                    start: { line: 753, column: 32 },
                    end: { line: 753, column: 33 }
                  },
                  loc: { start: { line: 753, column: 54 }, end: { line: 755, column: 1 } },
                  line: 753
                },
                '17': {
                  name: '(anonymous_17)',
                  decl: {
                    start: { line: 791, column: 30 },
                    end: { line: 791, column: 31 }
                  },
                  loc: { start: { line: 791, column: 53 }, end: { line: 796, column: 1 } },
                  line: 791
                },
                '18': {
                  name: '(anonymous_18)',
                  decl: {
                    start: { line: 833, column: 30 },
                    end: { line: 833, column: 31 }
                  },
                  loc: { start: { line: 833, column: 48 }, end: { line: 837, column: 1 } },
                  line: 833
                },
                '19': {
                  name: '(anonymous_19)',
                  decl: {
                    start: { line: 865, column: 29 },
                    end: { line: 865, column: 30 }
                  },
                  loc: { start: { line: 865, column: 40 }, end: { line: 868, column: 1 } },
                  line: 865
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 54, column: 2 }, end: { line: 59, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 54, column: 2 }, end: { line: 59, column: 3 } },
                    { start: { line: 54, column: 2 }, end: { line: 59, column: 3 } }
                  ],
                  line: 54
                },
                '1': {
                  loc: { start: { line: 299, column: 2 }, end: { line: 303, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 299, column: 2 }, end: { line: 303, column: 3 } },
                    { start: { line: 299, column: 2 }, end: { line: 303, column: 3 } }
                  ],
                  line: 299
                },
                '2': {
                  loc: { start: { line: 365, column: 2 }, end: { line: 371, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 365, column: 2 }, end: { line: 371, column: 3 } },
                    { start: { line: 365, column: 2 }, end: { line: 371, column: 3 } }
                  ],
                  line: 365
                },
                '3': {
                  loc: { start: { line: 367, column: 6 }, end: { line: 367, column: 60 } },
                  type: 'if',
                  locations: [
                    { start: { line: 367, column: 6 }, end: { line: 367, column: 60 } },
                    { start: { line: 367, column: 6 }, end: { line: 367, column: 60 } }
                  ],
                  line: 367
                },
                '4': {
                  loc: { start: { line: 419, column: 2 }, end: { line: 423, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 419, column: 2 }, end: { line: 423, column: 3 } },
                    { start: { line: 419, column: 2 }, end: { line: 423, column: 3 } }
                  ],
                  line: 419
                },
                '5': {
                  loc: { start: { line: 483, column: 2 }, end: { line: 492, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 483, column: 2 }, end: { line: 492, column: 3 } },
                    { start: { line: 483, column: 2 }, end: { line: 492, column: 3 } }
                  ],
                  line: 483
                },
                '6': {
                  loc: { start: { line: 485, column: 6 }, end: { line: 488, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 485, column: 6 }, end: { line: 488, column: 7 } },
                    { start: { line: 485, column: 6 }, end: { line: 488, column: 7 } }
                  ],
                  line: 485
                },
                '7': {
                  loc: { start: { line: 493, column: 2 }, end: { line: 495, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 493, column: 2 }, end: { line: 495, column: 3 } },
                    { start: { line: 493, column: 2 }, end: { line: 495, column: 3 } }
                  ],
                  line: 493
                },
                '8': {
                  loc: { start: { line: 619, column: 9 }, end: { line: 619, column: 33 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 619, column: 21 }, end: { line: 619, column: 25 } },
                    { start: { line: 619, column: 28 }, end: { line: 619, column: 33 } }
                  ],
                  line: 619
                },
                '9': {
                  loc: { start: { line: 666, column: 9 }, end: { line: 666, column: 47 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 666, column: 9 }, end: { line: 666, column: 26 } },
                    { start: { line: 666, column: 30 }, end: { line: 666, column: 42 } },
                    { start: { line: 666, column: 46 }, end: { line: 666, column: 47 } }
                  ],
                  line: 666
                },
                '10': {
                  loc: { start: { line: 713, column: 9 }, end: { line: 713, column: 61 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 713, column: 21 }, end: { line: 713, column: 38 } },
                    { start: { line: 713, column: 41 }, end: { line: 713, column: 61 } }
                  ],
                  line: 713
                },
                '11': {
                  loc: { start: { line: 713, column: 41 }, end: { line: 713, column: 61 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 713, column: 41 }, end: { line: 713, column: 53 } },
                    { start: { line: 713, column: 57 }, end: { line: 713, column: 61 } }
                  ],
                  line: 713
                },
                '12': {
                  loc: { start: { line: 795, column: 9 }, end: { line: 795, column: 36 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 795, column: 9 }, end: { line: 795, column: 12 } },
                    { start: { line: 795, column: 16 }, end: { line: 795, column: 28 } },
                    { start: { line: 795, column: 32 }, end: { line: 795, column: 36 } }
                  ],
                  line: 795
                },
                '13': {
                  loc: { start: { line: 834, column: 2 }, end: { line: 836, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 834, column: 2 }, end: { line: 836, column: 3 } },
                    { start: { line: 834, column: 2 }, end: { line: 836, column: 3 } }
                  ],
                  line: 834
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0, 0],
                '13': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: 'c133f458119db32e0e13b6641c5aa4657ed25e1b'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.symbol');
          _dereq_('core-js/modules/es.symbol.description');
          _dereq_('core-js/modules/es.symbol.iterator');
          _dereq_('core-js/modules/es.array.iterator');
          _dereq_('core-js/modules/es.number.constructor');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.regexp.exec');
          _dereq_('core-js/modules/es.string.iterator');
          _dereq_('core-js/modules/es.string.replace');
          _dereq_('core-js/modules/web.dom-collections.iterator');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_olr5g05jx.s[0]++;

          /**
           * XML is a representation of an XML object, able to parse XML code. Use
           * <a href="#/p5/loadXML">loadXML()</a> to load external XML files and create XML objects.
           *
           * @class p5.XML
           * @constructor
           * @example
           * <div class='norender'><code>
           * // The following short XML file called "mammals.xml" is parsed
           * // in the code below.
           * //
           * // <?xml version="1.0"?>
           * // &lt;mammals&gt;
           * //   &lt;animal id="0" species="Capra hircus">Goat&lt;/animal&gt;
           * //   &lt;animal id="1" species="Panthera pardus">Leopard&lt;/animal&gt;
           * //   &lt;animal id="2" species="Equus zebra">Zebra&lt;/animal&gt;
           * // &lt;/mammals&gt;
           *
           * let xml;
           *
           * function preload() {
           *   xml = loadXML('assets/mammals.xml');
           * }
           *
           * function setup() {
           *   let children = xml.getChildren('animal');
           *
           *   for (let i = 0; i < children.length; i++) {
           *     let id = children[i].getNum('id');
           *     let coloring = children[i].getString('species');
           *     let name = children[i].getContent();
           *     print(id + ', ' + coloring + ', ' + name);
           *   }
           * }
           *
           * // Sketch prints:
           * // 0, Capra hircus, Goat
           * // 1, Panthera pardus, Leopard
           * // 2, Equus zebra, Zebra
           * </code></div>
           *
           * @alt
           * no image displayed
           */
          _main.default.XML = function(DOM) {
            cov_olr5g05jx.f[0]++;
            cov_olr5g05jx.s[1]++;
            if (!DOM) {
              cov_olr5g05jx.b[0][0]++;
              var xmlDoc = (cov_olr5g05jx.s[2]++,
              document.implementation.createDocument(null, 'doc'));
              cov_olr5g05jx.s[3]++;
              this.DOM = xmlDoc.createElement('root');
            } else {
              cov_olr5g05jx.b[0][1]++;
              cov_olr5g05jx.s[4]++;
              this.DOM = DOM;
            }
          };

          /**
           * Gets a copy of the element's parent. Returns the parent as another
           * <a href="#/p5.XML">p5.XML</a> object.
           *
           * @method getParent
           * @return {p5.XML}   element parent
           * @example
           * <div class='norender'><code>
           * // The following short XML file called "mammals.xml" is parsed
           * // in the code below.
           * //
           * // <?xml version="1.0"?>
           * // &lt;mammals&gt;
           * //   &lt;animal id="0" species="Capra hircus">Goat&lt;/animal&gt;
           * //   &lt;animal id="1" species="Panthera pardus">Leopard&lt;/animal&gt;
           * //   &lt;animal id="2" species="Equus zebra">Zebra&lt;/animal&gt;
           * // &lt;/mammals&gt;
           *
           * let xml;
           *
           * function preload() {
           *   xml = loadXML('assets/mammals.xml');
           * }
           *
           * function setup() {
           *   let children = xml.getChildren('animal');
           *   let parent = children[1].getParent();
           *   print(parent.getName());
           * }
           *
           * // Sketch prints:
           * // mammals
           * </code></div>
           */ cov_olr5g05jx.s[5]++;
          _main.default.XML.prototype.getParent = function() {
            cov_olr5g05jx.f[1]++;
            cov_olr5g05jx.s[6]++;
            return new _main.default.XML(this.DOM.parentElement);
          };

          /**
           *  Gets the element's full name, which is returned as a String.
           *
           * @method getName
           * @return {String} the name of the node
           * @example&lt;animal
           * <div class='norender'><code>
           * // The following short XML file called "mammals.xml" is parsed
           * // in the code below.
           * //
           * // <?xml version="1.0"?>
           * // &lt;mammals&gt;
           * //   &lt;animal id="0" species="Capra hircus">Goat&lt;/animal&gt;
           * //   &lt;animal id="1" species="Panthera pardus">Leopard&lt;/animal&gt;
           * //   &lt;animal id="2" species="Equus zebra">Zebra&lt;/animal&gt;
           * // &lt;/mammals&gt;
           *
           * let xml;
           *
           * function preload() {
           *   xml = loadXML('assets/mammals.xml');
           * }
           *
           * function setup() {
           *   print(xml.getName());
           * }
           *
           * // Sketch prints:
           * // mammals
           * </code></div>
           */ cov_olr5g05jx.s[7]++;
          _main.default.XML.prototype.getName = function() {
            cov_olr5g05jx.f[2]++;
            cov_olr5g05jx.s[8]++;
            return this.DOM.tagName;
          };

          /**
           * Sets the element's name, which is specified as a String.
           *
           * @method setName
           * @param {String} the new name of the node
           * @example&lt;animal
           * <div class='norender'><code>
           * // The following short XML file called "mammals.xml" is parsed
           * // in the code below.
           * //
           * // <?xml version="1.0"?>
           * // &lt;mammals&gt;
           * //   &lt;animal id="0" species="Capra hircus">Goat&lt;/animal&gt;
           * //   &lt;animal id="1" species="Panthera pardus">Leopard&lt;/animal&gt;
           * //   &lt;animal id="2" species="Equus zebra">Zebra&lt;/animal&gt;
           * // &lt;/mammals&gt;
           *
           * let xml;
           *
           * function preload() {
           *   xml = loadXML('assets/mammals.xml');
           * }
           *
           * function setup() {
           *   print(xml.getName());
           *   xml.setName('fish');
           *   print(xml.getName());
           * }
           *
           * // Sketch prints:
           * // mammals
           * // fish
           * </code></div>
           */ cov_olr5g05jx.s[9]++;
          _main.default.XML.prototype.setName = function(name) {
            cov_olr5g05jx.f[3]++;
            var content = (cov_olr5g05jx.s[10]++, this.DOM.innerHTML);
            var attributes = (cov_olr5g05jx.s[11]++, this.DOM.attributes);
            var xmlDoc = (cov_olr5g05jx.s[12]++,
            document.implementation.createDocument(null, 'default'));
            var newDOM = (cov_olr5g05jx.s[13]++, xmlDoc.createElement(name));
            cov_olr5g05jx.s[14]++;
            newDOM.innerHTML = content;
            cov_olr5g05jx.s[15]++;
            for (var i = (cov_olr5g05jx.s[16]++, 0); i < attributes.length; i++) {
              cov_olr5g05jx.s[17]++;
              newDOM.setAttribute(attributes[i].nodeName, attributes.nodeValue);
            }
            cov_olr5g05jx.s[18]++;
            this.DOM = newDOM;
          };

          /**
           * Checks whether or not the element has any children, and returns the result
           * as a boolean.
           *
           * @method hasChildren
           * @return {boolean}
           * @example&lt;animal
           * <div class='norender'><code>
           * // The following short XML file called "mammals.xml" is parsed
           * // in the code below.
           * //
           * // <?xml version="1.0"?>
           * // &lt;mammals&gt;
           * //   &lt;animal id="0" species="Capra hircus">Goat&lt;/animal&gt;
           * //   &lt;animal id="1" species="Panthera pardus">Leopard&lt;/animal&gt;
           * //   &lt;animal id="2" species="Equus zebra">Zebra&lt;/animal&gt;
           * // &lt;/mammals&gt;
           *
           * let xml;
           *
           * function preload() {
           *   xml = loadXML('assets/mammals.xml');
           * }
           *
           * function setup() {
           *   print(xml.hasChildren());
           * }
           *
           * // Sketch prints:
           * // true
           * </code></div>
           */ cov_olr5g05jx.s[19]++;
          _main.default.XML.prototype.hasChildren = function() {
            cov_olr5g05jx.f[4]++;
            cov_olr5g05jx.s[20]++;
            return this.DOM.children.length > 0;
          };

          /**
           * Get the names of all of the element's children, and returns the names as an
           * array of Strings. This is the same as looping through and calling <a href="#/p5.XML/getName">getName()</a>
           * on each child element individually.
           *
           * @method listChildren
           * @return {String[]} names of the children of the element
           * @example&lt;animal
           * <div class='norender'><code>
           * // The following short XML file called "mammals.xml" is parsed
           * // in the code below.
           * //
           * // <?xml version="1.0"?>
           * // &lt;mammals&gt;
           * //   &lt;animal id="0" species="Capra hircus">Goat&lt;/animal&gt;
           * //   &lt;animal id="1" species="Panthera pardus">Leopard&lt;/animal&gt;
           * //   &lt;animal id="2" species="Equus zebra">Zebra&lt;/animal&gt;
           * // &lt;/mammals&gt;
           *
           * let xml;
           *
           * function preload() {
           *   xml = loadXML('assets/mammals.xml');
           * }
           *
           * function setup() {
           *   print(xml.listChildren());
           * }
           *
           * // Sketch prints:
           * // ["animal", "animal", "animal"]
           * </code></div>
           */ cov_olr5g05jx.s[21]++;
          _main.default.XML.prototype.listChildren = function() {
            cov_olr5g05jx.f[5]++;
            var arr = (cov_olr5g05jx.s[22]++, []);
            cov_olr5g05jx.s[23]++;
            for (var i = (cov_olr5g05jx.s[24]++, 0); i < this.DOM.childNodes.length; i++) {
              cov_olr5g05jx.s[25]++;
              arr.push(this.DOM.childNodes[i].nodeName);
            }
            cov_olr5g05jx.s[26]++;
            return arr;
          };

          /**
           * Returns all of the element's children as an array of <a href="#/p5.XML">p5.XML</a> objects. When
           * the name parameter is specified, then it will return all children that match
           * that name.
           *
           * @method getChildren
           * @param {String} [name] element name
           * @return {p5.XML[]} children of the element
           * @example&lt;animal
           * <div class='norender'><code>
           * // The following short XML file called "mammals.xml" is parsed
           * // in the code below.
           * //
           * // <?xml version="1.0"?>
           * // &lt;mammals&gt;
           * //   &lt;animal id="0" species="Capra hircus">Goat&lt;/animal&gt;
           * //   &lt;animal id="1" species="Panthera pardus">Leopard&lt;/animal&gt;
           * //   &lt;animal id="2" species="Equus zebra">Zebra&lt;/animal&gt;
           * // &lt;/mammals&gt;
           *
           * let xml;
           *
           * function preload() {
           *   xml = loadXML('assets/mammals.xml');
           * }
           *
           * function setup() {
           *   let animals = xml.getChildren('animal');
           *
           *   for (let i = 0; i < animals.length; i++) {
           *     print(animals[i].getContent());
           *   }
           * }
           *
           * // Sketch prints:
           * // "Goat"
           * // "Leopard"
           * // "Zebra"
           * </code></div>
           */ cov_olr5g05jx.s[27]++;
          _main.default.XML.prototype.getChildren = function(param) {
            cov_olr5g05jx.f[6]++;
            cov_olr5g05jx.s[28]++;
            if (param) {
              cov_olr5g05jx.b[1][0]++;
              cov_olr5g05jx.s[29]++;
              return elementsToP5XML(this.DOM.getElementsByTagName(param));
            } else {
              cov_olr5g05jx.b[1][1]++;
              cov_olr5g05jx.s[30]++;
              return elementsToP5XML(this.DOM.children);
            }
          };

          function elementsToP5XML(elements) {
            cov_olr5g05jx.f[7]++;
            var arr = (cov_olr5g05jx.s[31]++, []);
            cov_olr5g05jx.s[32]++;
            for (var i = (cov_olr5g05jx.s[33]++, 0); i < elements.length; i++) {
              cov_olr5g05jx.s[34]++;
              arr.push(new _main.default.XML(elements[i]));
            }
            cov_olr5g05jx.s[35]++;
            return arr;
          }

          /**
           * Returns the first of the element's children that matches the name parameter
           * or the child of the given index.It returns undefined if no matching
           * child is found.
           *
           * @method getChild
           * @param {String|Integer} name element name or index
           * @return {p5.XML}
           * @example&lt;animal
           * <div class='norender'><code>
           * // The following short XML file called "mammals.xml" is parsed
           * // in the code below.
           * //
           * // <?xml version="1.0"?>
           * // &lt;mammals&gt;
           * //   &lt;animal id="0" species="Capra hircus">Goat&lt;/animal&gt;
           * //   &lt;animal id="1" species="Panthera pardus">Leopard&lt;/animal&gt;
           * //   &lt;animal id="2" species="Equus zebra">Zebra&lt;/animal&gt;
           * // &lt;/mammals&gt;
           *
           * let xml;
           *
           * function preload() {
           *   xml = loadXML('assets/mammals.xml');
           * }
           *
           * function setup() {
           *   let firstChild = xml.getChild('animal');
           *   print(firstChild.getContent());
           * }
           *
           * // Sketch prints:
           * // "Goat"
           * </code></div>
           * <div class='norender'><code>
           * let xml;
           *
           * function preload() {
           *   xml = loadXML('assets/mammals.xml');
           * }
           *
           * function setup() {
           *   let secondChild = xml.getChild(1);
           *   print(secondChild.getContent());
           * }
           *
           * // Sketch prints:
           * // "Leopard"
           * </code></div>
           */ cov_olr5g05jx.s[36]++;
          _main.default.XML.prototype.getChild = function(param) {
            cov_olr5g05jx.f[8]++;
            cov_olr5g05jx.s[37]++;
            if (typeof param === 'string') {
              cov_olr5g05jx.b[2][0]++;
              cov_olr5g05jx.s[38]++;
              var _iteratorNormalCompletion = true;
              var _didIteratorError = false;
              var _iteratorError = undefined;
              try {
                for (
                  var _iterator = this.DOM.children[Symbol.iterator](), _step;
                  !(_iteratorNormalCompletion = (_step = _iterator.next()).done);
                  _iteratorNormalCompletion = true
                ) {
                  var child = _step.value;
                  cov_olr5g05jx.s[39]++;
                  if (child.tagName === param) {
                    cov_olr5g05jx.b[3][0]++;
                    cov_olr5g05jx.s[40]++;
                    return new _main.default.XML(child);
                  } else {
                    cov_olr5g05jx.b[3][1]++;
                  }
                }
              } catch (err) {
                _didIteratorError = true;
                _iteratorError = err;
              } finally {
                try {
                  if (!_iteratorNormalCompletion && _iterator.return != null) {
                    _iterator.return();
                  }
                } finally {
                  if (_didIteratorError) {
                    throw _iteratorError;
                  }
                }
              }
            } else {
              cov_olr5g05jx.b[2][1]++;
              cov_olr5g05jx.s[41]++;
              return new _main.default.XML(this.DOM.children[param]);
            }
          };

          /**
           * Appends a new child to the element. The child can be specified with
           * either a String, which will be used as the new tag's name, or as a
           * reference to an existing <a href="#/p5.XML">p5.XML</a> object.
           * A reference to the newly created child is returned as an <a href="#/p5.XML">p5.XML</a> object.
           *
           * @method addChild
           * @param {p5.XML} node a <a href="#/p5.XML">p5.XML</a> Object which will be the child to be added
           * @example
           * <div class='norender'><code>
           * // The following short XML file called "mammals.xml" is parsed
           * // in the code below.
           * //
           * // <?xml version="1.0"?>
           * // &lt;mammals&gt;
           * //   &lt;animal id="0" species="Capra hircus">Goat&lt;/animal&gt;
           * //   &lt;animal id="1" species="Panthera pardus">Leopard&lt;/animal&gt;
           * //   &lt;animal id="2" species="Equus zebra">Zebra&lt;/animal&gt;
           * // &lt;/mammals&gt;
           *
           * let xml;
           *
           * function preload() {
           *   xml = loadXML('assets/mammals.xml');
           * }
           *
           * function setup() {
           *   let child = new p5.XML();
           *   child.setName('animal');
           *   child.setAttribute('id', '3');
           *   child.setAttribute('species', 'Ornithorhynchus anatinus');
           *   child.setContent('Platypus');
           *   xml.addChild(child);
           *
           *   let animals = xml.getChildren('animal');
           *   print(animals[animals.length - 1].getContent());
           * }
           *
           * // Sketch prints:
           * // "Goat"
           * // "Leopard"
           * // "Zebra"
           * </code></div>
           */ cov_olr5g05jx.s[42]++;
          _main.default.XML.prototype.addChild = function(node) {
            cov_olr5g05jx.f[9]++;
            cov_olr5g05jx.s[43]++;
            if (node instanceof _main.default.XML) {
              cov_olr5g05jx.b[4][0]++;
              cov_olr5g05jx.s[44]++;
              this.DOM.appendChild(node.DOM);
            } else {
              // PEND
              cov_olr5g05jx.b[4][1]++;
            }
          };

          /**
           * Removes the element specified by name or index.
           *
           * @method removeChild
           * @param {String|Integer} name element name or index
           * @example
           * <div class='norender'><code>
           * // The following short XML file called "mammals.xml" is parsed
           * // in the code below.
           * //
           * // <?xml version="1.0"?>
           * // &lt;mammals&gt;
           * //   &lt;animal id="0" species="Capra hircus">Goat&lt;/animal&gt;
           * //   &lt;animal id="1" species="Panthera pardus">Leopard&lt;/animal&gt;
           * //   &lt;animal id="2" species="Equus zebra">Zebra&lt;/animal&gt;
           * // &lt;/mammals&gt;
           *
           * let xml;
           *
           * function preload() {
           *   xml = loadXML('assets/mammals.xml');
           * }
           *
           * function setup() {
           *   xml.removeChild('animal');
           *   let children = xml.getChildren();
           *   for (let i = 0; i < children.length; i++) {
           *     print(children[i].getContent());
           *   }
           * }
           *
           * // Sketch prints:
           * // "Leopard"
           * // "Zebra"
           * </code></div>
           * <div class='norender'><code>
           * let xml;
           *
           * function preload() {
           *   xml = loadXML('assets/mammals.xml');
           * }
           *
           * function setup() {
           *   xml.removeChild(1);
           *   let children = xml.getChildren();
           *   for (let i = 0; i < children.length; i++) {
           *     print(children[i].getContent());
           *   }
           * }
           *
           * // Sketch prints:
           * // "Goat"
           * // "Zebra"
           * </code></div>
           */ cov_olr5g05jx.s[45]++;
          _main.default.XML.prototype.removeChild = function(param) {
            cov_olr5g05jx.f[10]++;
            var ind = (cov_olr5g05jx.s[46]++, -1);
            cov_olr5g05jx.s[47]++;
            if (typeof param === 'string') {
              cov_olr5g05jx.b[5][0]++;
              cov_olr5g05jx.s[48]++;
              for (var i = (cov_olr5g05jx.s[49]++, 0); i < this.DOM.children.length; i++) {
                cov_olr5g05jx.s[50]++;
                if (this.DOM.children[i].tagName === param) {
                  cov_olr5g05jx.b[6][0]++;
                  cov_olr5g05jx.s[51]++;
                  ind = i;
                  cov_olr5g05jx.s[52]++;
                  break;
                } else {
                  cov_olr5g05jx.b[6][1]++;
                }
              }
            } else {
              cov_olr5g05jx.b[5][1]++;
              cov_olr5g05jx.s[53]++;
              ind = param;
            }
            cov_olr5g05jx.s[54]++;
            if (ind !== -1) {
              cov_olr5g05jx.b[7][0]++;
              cov_olr5g05jx.s[55]++;
              this.DOM.removeChild(this.DOM.children[ind]);
            } else {
              cov_olr5g05jx.b[7][1]++;
            }
          };

          /**
           * Counts the specified element's number of attributes, returned as an Number.
           *
           * @method getAttributeCount
           * @return {Integer}
           * @example
           * <div class='norender'><code>
           * // The following short XML file called "mammals.xml" is parsed
           * // in the code below.
           * //
           * // <?xml version="1.0"?>
           * // &lt;mammals&gt;
           * //   &lt;animal id="0" species="Capra hircus">Goat&lt;/animal&gt;
           * //   &lt;animal id="1" species="Panthera pardus">Leopard&lt;/animal&gt;
           * //   &lt;animal id="2" species="Equus zebra">Zebra&lt;/animal&gt;
           * // &lt;/mammals&gt;
           *
           * let xml;
           *
           * function preload() {
           *   xml = loadXML('assets/mammals.xml');
           * }
           *
           * function setup() {
           *   let firstChild = xml.getChild('animal');
           *   print(firstChild.getAttributeCount());
           * }
           *
           * // Sketch prints:
           * // 2
           * </code></div>
           */ cov_olr5g05jx.s[56]++;
          _main.default.XML.prototype.getAttributeCount = function() {
            cov_olr5g05jx.f[11]++;
            cov_olr5g05jx.s[57]++;
            return this.DOM.attributes.length;
          };

          /**
           * Gets all of the specified element's attributes, and returns them as an
           * array of Strings.
           *
           * @method listAttributes
           * @return {String[]} an array of strings containing the names of attributes
           * @example
           * <div class='norender'><code>
           * // The following short XML file called "mammals.xml" is parsed
           * // in the code below.
           * //
           * // <?xml version="1.0"?>
           * // &lt;mammals&gt;
           * //   &lt;animal id="0" species="Capra hircus">Goat&lt;/animal&gt;
           * //   &lt;animal id="1" species="Panthera pardus">Leopard&lt;/animal&gt;
           * //   &lt;animal id="2" species="Equus zebra">Zebra&lt;/animal&gt;
           * // &lt;/mammals&gt;
           *
           * let xml;
           *
           * function preload() {
           *   xml = loadXML('assets/mammals.xml');
           * }
           *
           * function setup() {
           *   let firstChild = xml.getChild('animal');
           *   print(firstChild.listAttributes());
           * }
           *
           * // Sketch prints:
           * // ["id", "species"]
           * </code></div>
           */ cov_olr5g05jx.s[58]++;
          _main.default.XML.prototype.listAttributes = function() {
            cov_olr5g05jx.f[12]++;
            var arr = (cov_olr5g05jx.s[59]++, []);
            cov_olr5g05jx.s[60]++;
            var _iteratorNormalCompletion2 = true;
            var _didIteratorError2 = false;
            var _iteratorError2 = undefined;
            try {
              for (
                var _iterator2 = this.DOM.attributes[Symbol.iterator](), _step2;
                !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done);
                _iteratorNormalCompletion2 = true
              ) {
                var attribute = _step2.value;
                cov_olr5g05jx.s[61]++;
                arr.push(attribute.nodeName);
              }
            } catch (err) {
              _didIteratorError2 = true;
              _iteratorError2 = err;
            } finally {
              try {
                if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
                  _iterator2.return();
                }
              } finally {
                if (_didIteratorError2) {
                  throw _iteratorError2;
                }
              }
            }
            cov_olr5g05jx.s[62]++;

            return arr;
          };

          /**
           *  Checks whether or not an element has the specified attribute.
           *
           * @method hasAttribute
           * @param {String} the attribute to be checked
           * @return {boolean} true if attribute found else false
           * @example
           * <div class='norender'><code>
           * // The following short XML file called "mammals.xml" is parsed
           * // in the code below.
           * //
           * // <?xml version="1.0"?>
           * // &lt;mammals&gt;
           * //   &lt;animal id="0" species="Capra hircus">Goat&lt;/animal&gt;
           * //   &lt;animal id="1" species="Panthera pardus">Leopard&lt;/animal&gt;
           * //   &lt;animal id="2" species="Equus zebra">Zebra&lt;/animal&gt;
           * // &lt;/mammals&gt;
           *
           * let xml;
           *
           * function preload() {
           *   xml = loadXML('assets/mammals.xml');
           * }
           *
           * function setup() {
           *   let firstChild = xml.getChild('animal');
           *   print(firstChild.hasAttribute('species'));
           *   print(firstChild.hasAttribute('color'));
           * }
           *
           * // Sketch prints:
           * // true
           * // false
           * </code></div>
           */ cov_olr5g05jx.s[63]++;
          _main.default.XML.prototype.hasAttribute = function(name) {
            cov_olr5g05jx.f[13]++;
            var obj = (cov_olr5g05jx.s[64]++, {});
            cov_olr5g05jx.s[65]++;
            var _iteratorNormalCompletion3 = true;
            var _didIteratorError3 = false;
            var _iteratorError3 = undefined;
            try {
              for (
                var _iterator3 = this.DOM.attributes[Symbol.iterator](), _step3;
                !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done);
                _iteratorNormalCompletion3 = true
              ) {
                var attribute = _step3.value;
                cov_olr5g05jx.s[66]++;
                obj[attribute.nodeName] = attribute.nodeValue;
              }
            } catch (err) {
              _didIteratorError3 = true;
              _iteratorError3 = err;
            } finally {
              try {
                if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
                  _iterator3.return();
                }
              } finally {
                if (_didIteratorError3) {
                  throw _iteratorError3;
                }
              }
            }
            cov_olr5g05jx.s[67]++;

            return obj[name]
              ? (cov_olr5g05jx.b[8][0]++, true)
              : (cov_olr5g05jx.b[8][1]++, false);
          };

          /**
           * Returns an attribute value of the element as an Number. If the defaultValue
           * parameter is specified and the attribute doesn't exist, then defaultValue
           * is returned. If no defaultValue is specified and the attribute doesn't
           * exist, the value 0 is returned.
           *
           * @method getNum
           * @param {String} name            the non-null full name of the attribute
           * @param {Number} [defaultValue]  the default value of the attribute
           * @return {Number}
           * @example
           * <div class='norender'><code>
           * // The following short XML file called "mammals.xml" is parsed
           * // in the code below.
           * //
           * // <?xml version="1.0"?>
           * // &lt;mammals&gt;
           * //   &lt;animal id="0" species="Capra hircus">Goat&lt;/animal&gt;
           * //   &lt;animal id="1" species="Panthera pardus">Leopard&lt;/animal&gt;
           * //   &lt;animal id="2" species="Equus zebra">Zebra&lt;/animal&gt;
           * // &lt;/mammals&gt;
           *
           * let xml;
           *
           * function preload() {
           *   xml = loadXML('assets/mammals.xml');
           * }
           *
           * function setup() {
           *   let firstChild = xml.getChild('animal');
           *   print(firstChild.getNum('id'));
           * }
           *
           * // Sketch prints:
           * // 0
           * </code></div>
           */ cov_olr5g05jx.s[68]++;
          _main.default.XML.prototype.getNum = function(name, defaultValue) {
            cov_olr5g05jx.f[14]++;
            var obj = (cov_olr5g05jx.s[69]++, {});
            cov_olr5g05jx.s[70]++;
            var _iteratorNormalCompletion4 = true;
            var _didIteratorError4 = false;
            var _iteratorError4 = undefined;
            try {
              for (
                var _iterator4 = this.DOM.attributes[Symbol.iterator](), _step4;
                !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done);
                _iteratorNormalCompletion4 = true
              ) {
                var attribute = _step4.value;
                cov_olr5g05jx.s[71]++;
                obj[attribute.nodeName] = attribute.nodeValue;
              }
            } catch (err) {
              _didIteratorError4 = true;
              _iteratorError4 = err;
            } finally {
              try {
                if (!_iteratorNormalCompletion4 && _iterator4.return != null) {
                  _iterator4.return();
                }
              } finally {
                if (_didIteratorError4) {
                  throw _iteratorError4;
                }
              }
            }
            cov_olr5g05jx.s[72]++;

            return (
              (cov_olr5g05jx.b[9][0]++, Number(obj[name])) ||
              (cov_olr5g05jx.b[9][1]++, defaultValue) ||
              (cov_olr5g05jx.b[9][2]++, 0)
            );
          };

          /**
           * Returns an attribute value of the element as an String. If the defaultValue
           * parameter is specified and the attribute doesn't exist, then defaultValue
           * is returned. If no defaultValue is specified and the attribute doesn't
           * exist, null is returned.
           *
           * @method getString
           * @param {String} name            the non-null full name of the attribute
           * @param {Number} [defaultValue]  the default value of the attribute
           * @return {String}
           * @example
           * <div class='norender'><code>
           * // The following short XML file called "mammals.xml" is parsed
           * // in the code below.
           * //
           * // <?xml version="1.0"?>
           * // &lt;mammals&gt;
           * //   &lt;animal id="0" species="Capra hircus">Goat&lt;/animal&gt;
           * //   &lt;animal id="1" species="Panthera pardus">Leopard&lt;/animal&gt;
           * //   &lt;animal id="2" species="Equus zebra">Zebra&lt;/animal&gt;
           * // &lt;/mammals&gt;
           *
           * let xml;
           *
           * function preload() {
           *   xml = loadXML('assets/mammals.xml');
           * }
           *
           * function setup() {
           *   let firstChild = xml.getChild('animal');
           *   print(firstChild.getString('species'));
           * }
           *
           * // Sketch prints:
           * // "Capra hircus"
           * </code></div>
           */ cov_olr5g05jx.s[73]++;
          _main.default.XML.prototype.getString = function(name, defaultValue) {
            cov_olr5g05jx.f[15]++;
            var obj = (cov_olr5g05jx.s[74]++, {});
            cov_olr5g05jx.s[75]++;
            var _iteratorNormalCompletion5 = true;
            var _didIteratorError5 = false;
            var _iteratorError5 = undefined;
            try {
              for (
                var _iterator5 = this.DOM.attributes[Symbol.iterator](), _step5;
                !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done);
                _iteratorNormalCompletion5 = true
              ) {
                var attribute = _step5.value;
                cov_olr5g05jx.s[76]++;
                obj[attribute.nodeName] = attribute.nodeValue;
              }
            } catch (err) {
              _didIteratorError5 = true;
              _iteratorError5 = err;
            } finally {
              try {
                if (!_iteratorNormalCompletion5 && _iterator5.return != null) {
                  _iterator5.return();
                }
              } finally {
                if (_didIteratorError5) {
                  throw _iteratorError5;
                }
              }
            }
            cov_olr5g05jx.s[77]++;

            return obj[name]
              ? (cov_olr5g05jx.b[10][0]++, String(obj[name]))
              : (cov_olr5g05jx.b[10][1]++,
                (cov_olr5g05jx.b[11][0]++, defaultValue) ||
                  (cov_olr5g05jx.b[11][1]++, null));
          };

          /**
           * Sets the content of an element's attribute. The first parameter specifies
           * the attribute name, while the second specifies the new content.
           *
           * @method setAttribute
           * @param {String} name            the full name of the attribute
           * @param {Number|String|Boolean} value  the value of the attribute
           * @example
           * <div class='norender'><code>
           * // The following short XML file called "mammals.xml" is parsed
           * // in the code below.
           * //
           * // <?xml version="1.0"?>
           * // &lt;mammals&gt;
           * //   &lt;animal id="0" species="Capra hircus">Goat&lt;/animal&gt;
           * //   &lt;animal id="1" species="Panthera pardus">Leopard&lt;/animal&gt;
           * //   &lt;animal id="2" species="Equus zebra">Zebra&lt;/animal&gt;
           * // &lt;/mammals&gt;
           *
           * let xml;
           *
           * function preload() {
           *   xml = loadXML('assets/mammals.xml');
           * }
           *
           * function setup() {
           *   let firstChild = xml.getChild('animal');
           *   print(firstChild.getString('species'));
           *   firstChild.setAttribute('species', 'Jamides zebra');
           *   print(firstChild.getString('species'));
           * }
           *
           * // Sketch prints:
           * // "Capra hircus"
           * // "Jamides zebra"
           * </code></div>
           */ cov_olr5g05jx.s[78]++;
          _main.default.XML.prototype.setAttribute = function(name, value) {
            cov_olr5g05jx.f[16]++;
            cov_olr5g05jx.s[79]++;
            this.DOM.setAttribute(name, value);
          };

          /**
           * Returns the content of an element. If there is no such content,
           * defaultValue is returned if specified, otherwise null is returned.
           *
           * @method getContent
           * @param {String} [defaultValue] value returned if no content is found
           * @return {String}
           * @example
           * <div class='norender'><code>
           * // The following short XML file called "mammals.xml" is parsed
           * // in the code below.
           * //
           * // <?xml version="1.0"?>
           * // &lt;mammals&gt;
           * //   &lt;animal id="0" species="Capra hircus">Goat&lt;/animal&gt;
           * //   &lt;animal id="1" species="Panthera pardus">Leopard&lt;/animal&gt;
           * //   &lt;animal id="2" species="Equus zebra">Zebra&lt;/animal&gt;
           * // &lt;/mammals&gt;
           *
           * let xml;
           *
           * function preload() {
           *   xml = loadXML('assets/mammals.xml');
           * }
           *
           * function setup() {
           *   let firstChild = xml.getChild('animal');
           *   print(firstChild.getContent());
           * }
           *
           * // Sketch prints:
           * // "Goat"
           * </code></div>
           */ cov_olr5g05jx.s[80]++;
          _main.default.XML.prototype.getContent = function(defaultValue) {
            cov_olr5g05jx.f[17]++;
            var str;
            cov_olr5g05jx.s[81]++;
            str = this.DOM.textContent;
            cov_olr5g05jx.s[82]++;
            str = str.replace(/\s\s+/g, ',');
            cov_olr5g05jx.s[83]++;
            return (
              (cov_olr5g05jx.b[12][0]++, str) ||
              (cov_olr5g05jx.b[12][1]++, defaultValue) ||
              (cov_olr5g05jx.b[12][2]++, null)
            );
          };

          /**
           * Sets the element's content.
           *
           * @method setContent
           * @param {String} text the new content
           * @example
           * <div class='norender'><code>
           * // The following short XML file called "mammals.xml" is parsed
           * // in the code below.
           * //
           * // <?xml version="1.0"?>
           * // &lt;mammals&gt;
           * //   &lt;animal id="0" species="Capra hircus">Goat&lt;/animal&gt;
           * //   &lt;animal id="1" species="Panthera pardus">Leopard&lt;/animal&gt;
           * //   &lt;animal id="2" species="Equus zebra">Zebra&lt;/animal&gt;
           * // &lt;/mammals&gt;
           *
           * let xml;
           *
           * function preload() {
           *   xml = loadXML('assets/mammals.xml');
           * }
           *
           * function setup() {
           *   let firstChild = xml.getChild('animal');
           *   print(firstChild.getContent());
           *   firstChild.setContent('Mountain Goat');
           *   print(firstChild.getContent());
           * }
           *
           * // Sketch prints:
           * // "Goat"
           * // "Mountain Goat"
           * </code></div>
           */ cov_olr5g05jx.s[84]++;
          _main.default.XML.prototype.setContent = function(content) {
            cov_olr5g05jx.f[18]++;
            cov_olr5g05jx.s[85]++;
            if (!this.DOM.children.length) {
              cov_olr5g05jx.b[13][0]++;
              cov_olr5g05jx.s[86]++;
              this.DOM.textContent = content;
            } else {
              cov_olr5g05jx.b[13][1]++;
            }
          };

          /**
           * Serializes the element into a string. This function is useful for preparing
           * the content to be sent over a http request or saved to file.
           *
           * @method serialize
           * @return {String} Serialized string of the element
           * @example
           * <div class='norender'><code>
           * let xml;
           *
           * function preload() {
           *   xml = loadXML('assets/mammals.xml');
           * }
           *
           * function setup() {
           *   print(xml.serialize());
           * }
           *
           * // Sketch prints:
           * // <mammals>
           * //   <animal id="0" species="Capra hircus">Goat</animal>
           * //   <animal id="1" species="Panthera pardus">Leopard</animal>
           * //   <animal id="2" species="Equus zebra">Zebra</animal>
           * // </mammals>
           * </code></div>
           */ cov_olr5g05jx.s[87]++;
          _main.default.XML.prototype.serialize = function() {
            cov_olr5g05jx.f[19]++;
            var xmlSerializer = (cov_olr5g05jx.s[88]++, new XMLSerializer());
            cov_olr5g05jx.s[89]++;
            return xmlSerializer.serializeToString(this.DOM);
          };
          var _default = _main.default;
          exports.default = _default;
        },
        {
          '../core/main': 283,
          'core-js/modules/es.array.iterator': 174,
          'core-js/modules/es.number.constructor': 185,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.regexp.exec': 196,
          'core-js/modules/es.string.iterator': 201,
          'core-js/modules/es.string.replace': 204,
          'core-js/modules/es.symbol': 211,
          'core-js/modules/es.symbol.description': 209,
          'core-js/modules/es.symbol.iterator': 210,
          'core-js/modules/web.dom-collections.iterator': 244
        }
      ],
      313: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_179gyfbins = (function() {
            var path = '/Users/outofambit/src/p5.js/src/math/calculation.js';
            var hash = 'f609f7aa0f75ea9a0ce4a1330f8d6c980436ad42';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/math/calculation.js',
              statementMap: {
                '0': { start: { line: 31, column: 0 }, end: { line: 31, column: 28 } },
                '1': { start: { line: 70, column: 0 }, end: { line: 70, column: 30 } },
                '2': { start: { line: 111, column: 0 }, end: { line: 114, column: 2 } },
                '3': { start: { line: 112, column: 2 }, end: { line: 112, column: 49 } },
                '4': { start: { line: 113, column: 2 }, end: { line: 113, column: 42 } },
                '5': { start: { line: 171, column: 0 }, end: { line: 180, column: 2 } },
                '6': { start: { line: 172, column: 2 }, end: { line: 172, column: 39 } },
                '7': { start: { line: 173, column: 2 }, end: { line: 179, column: 3 } },
                '8': { start: { line: 175, column: 4 }, end: { line: 175, column: 55 } },
                '9': { start: { line: 176, column: 9 }, end: { line: 179, column: 3 } },
                '10': { start: { line: 178, column: 4 }, end: { line: 178, column: 74 } },
                '11': { start: { line: 229, column: 0 }, end: { line: 229, column: 28 } },
                '12': { start: { line: 267, column: 0 }, end: { line: 267, column: 32 } },
                '13': { start: { line: 311, column: 0 }, end: { line: 314, column: 2 } },
                '14': { start: { line: 312, column: 2 }, end: { line: 312, column: 44 } },
                '15': { start: { line: 313, column: 2 }, end: { line: 313, column: 38 } },
                '16': { start: { line: 369, column: 0 }, end: { line: 369, column: 28 } },
                '17': { start: { line: 404, column: 0 }, end: { line: 407, column: 2 } },
                '18': { start: { line: 405, column: 2 }, end: { line: 405, column: 43 } },
                '19': { start: { line: 406, column: 2 }, end: { line: 406, column: 21 } },
                '20': { start: { line: 451, column: 0 }, end: { line: 462, column: 2 } },
                '21': { start: { line: 452, column: 2 }, end: { line: 452, column: 43 } },
                '22': { start: { line: 453, column: 17 }, end: { line: 453, column: 76 } },
                '23': { start: { line: 454, column: 2 }, end: { line: 456, column: 3 } },
                '24': { start: { line: 455, column: 4 }, end: { line: 455, column: 18 } },
                '25': { start: { line: 457, column: 2 }, end: { line: 461, column: 3 } },
                '26': { start: { line: 458, column: 4 }, end: { line: 458, column: 49 } },
                '27': { start: { line: 460, column: 4 }, end: { line: 460, column: 49 } },
                '28': { start: { line: 504, column: 0 }, end: { line: 510, column: 2 } },
                '29': { start: { line: 505, column: 2 }, end: { line: 509, column: 3 } },
                '30': { start: { line: 506, column: 4 }, end: { line: 506, column: 41 } },
                '31': { start: { line: 508, column: 4 }, end: { line: 508, column: 38 } },
                '32': { start: { line: 552, column: 0 }, end: { line: 558, column: 2 } },
                '33': { start: { line: 553, column: 2 }, end: { line: 557, column: 3 } },
                '34': { start: { line: 554, column: 4 }, end: { line: 554, column: 41 } },
                '35': { start: { line: 556, column: 4 }, end: { line: 556, column: 38 } },
                '36': { start: { line: 607, column: 0 }, end: { line: 610, column: 2 } },
                '37': { start: { line: 608, column: 2 }, end: { line: 608, column: 44 } },
                '38': { start: { line: 609, column: 2 }, end: { line: 609, column: 40 } },
                '39': { start: { line: 644, column: 0 }, end: { line: 644, column: 28 } },
                '40': { start: { line: 693, column: 0 }, end: { line: 698, column: 2 } },
                '41': { start: { line: 694, column: 2 }, end: { line: 696, column: 3 } },
                '42': { start: { line: 695, column: 4 }, end: { line: 695, column: 25 } },
                '43': { start: { line: 697, column: 2 }, end: { line: 697, column: 66 } },
                '44': { start: { line: 742, column: 0 }, end: { line: 742, column: 29 } },
                '45': { start: { line: 742, column: 23 }, end: { line: 742, column: 28 } },
                '46': { start: { line: 787, column: 0 }, end: { line: 787, column: 30 } },
                '47': { start: { line: 794, column: 2 }, end: { line: 796, column: 3 } },
                '48': { start: { line: 795, column: 4 }, end: { line: 795, column: 45 } },
                '49': { start: { line: 800, column: 17 }, end: { line: 800, column: 33 } },
                '50': { start: { line: 801, column: 15 }, end: { line: 801, column: 17 } },
                '51': { start: { line: 802, column: 12 }, end: { line: 802, column: 13 } },
                '52': { start: { line: 803, column: 2 }, end: { line: 814, column: 3 } },
                '53': { start: { line: 803, column: 15 }, end: { line: 803, column: 16 } },
                '54': { start: { line: 804, column: 12 }, end: { line: 804, column: 24 } },
                '55': { start: { line: 805, column: 4 }, end: { line: 805, column: 11 } },
                '56': { start: { line: 806, column: 4 }, end: { line: 808, column: 5 } },
                '57': { start: { line: 807, column: 6 }, end: { line: 807, column: 22 } },
                '58': { start: { line: 809, column: 4 }, end: { line: 809, column: 20 } },
                '59': { start: { line: 810, column: 4 }, end: { line: 812, column: 5 } },
                '60': { start: { line: 811, column: 6 }, end: { line: 811, column: 14 } },
                '61': { start: { line: 813, column: 4 }, end: { line: 813, column: 16 } },
                '62': { start: { line: 816, column: 2 }, end: { line: 818, column: 3 } },
                '63': { start: { line: 817, column: 4 }, end: { line: 817, column: 12 } },
                '64': { start: { line: 819, column: 12 }, end: { line: 819, column: 13 } },
                '65': { start: { line: 820, column: 21 }, end: { line: 820, column: 22 } },
                '66': { start: { line: 821, column: 2 }, end: { line: 827, column: 3 } },
                '67': { start: { line: 821, column: 15 }, end: { line: 821, column: 16 } },
                '68': { start: { line: 822, column: 14 }, end: { line: 822, column: 27 } },
                '69': { start: { line: 823, column: 20 }, end: { line: 823, column: 40 } },
                '70': { start: { line: 824, column: 24 }, end: { line: 824, column: 37 } },
                '71': { start: { line: 825, column: 4 }, end: { line: 825, column: 47 } },
                '72': { start: { line: 826, column: 4 }, end: { line: 826, column: 22 } },
                '73': { start: { line: 828, column: 2 }, end: { line: 828, column: 30 } },
                '74': { start: { line: 852, column: 0 }, end: { line: 871, column: 2 } },
                '75': { start: { line: 853, column: 2 }, end: { line: 853, column: 45 } },
                '76': { start: { line: 854, column: 13 }, end: { line: 854, column: 14 } },
                '77': { start: { line: 855, column: 12 }, end: { line: 855, column: 29 } },
                '78': { start: { line: 856, column: 2 }, end: { line: 861, column: 3 } },
                '79': { start: { line: 857, column: 4 }, end: { line: 857, column: 15 } },
                '80': { start: { line: 858, column: 9 }, end: { line: 861, column: 3 } },
                '81': { start: { line: 859, column: 4 }, end: { line: 859, column: 15 } },
                '82': { start: { line: 860, column: 4 }, end: { line: 860, column: 13 } },
                '83': { start: { line: 862, column: 2 }, end: { line: 870, column: 3 } },
                '84': { start: { line: 863, column: 18 }, end: { line: 863, column: 29 } },
                '85': { start: { line: 864, column: 4 }, end: { line: 864, column: 64 } },
                '86': { start: { line: 865, column: 4 }, end: { line: 865, column: 36 } },
                '87': { start: { line: 866, column: 9 }, end: { line: 870, column: 3 } },
                '88': { start: { line: 867, column: 4 }, end: { line: 867, column: 32 } },
                '89': { start: { line: 869, column: 4 }, end: { line: 869, column: 13 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: {
                    start: { line: 111, column: 25 },
                    end: { line: 111, column: 26 }
                  },
                  loc: { start: { line: 111, column: 48 }, end: { line: 114, column: 1 } },
                  line: 111
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: {
                    start: { line: 171, column: 20 },
                    end: { line: 171, column: 21 }
                  },
                  loc: { start: { line: 171, column: 38 }, end: { line: 180, column: 1 } },
                  line: 171
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 311, column: 20 },
                    end: { line: 311, column: 21 }
                  },
                  loc: { start: { line: 311, column: 47 }, end: { line: 314, column: 1 } },
                  line: 311
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 404, column: 19 },
                    end: { line: 404, column: 20 }
                  },
                  loc: { start: { line: 404, column: 34 }, end: { line: 407, column: 1 } },
                  line: 404
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 451, column: 19 },
                    end: { line: 451, column: 20 }
                  },
                  loc: { start: { line: 451, column: 75 }, end: { line: 462, column: 1 } },
                  line: 451
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 504, column: 19 },
                    end: { line: 504, column: 20 }
                  },
                  loc: { start: { line: 504, column: 37 }, end: { line: 510, column: 1 } },
                  line: 504
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 552, column: 19 },
                    end: { line: 552, column: 20 }
                  },
                  loc: { start: { line: 552, column: 37 }, end: { line: 558, column: 1 } },
                  line: 552
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 607, column: 20 },
                    end: { line: 607, column: 21 }
                  },
                  loc: { start: { line: 607, column: 45 }, end: { line: 610, column: 1 } },
                  line: 607
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 693, column: 21 },
                    end: { line: 693, column: 22 }
                  },
                  loc: { start: { line: 693, column: 43 }, end: { line: 698, column: 1 } },
                  line: 693
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 742, column: 18 },
                    end: { line: 742, column: 19 }
                  },
                  loc: { start: { line: 742, column: 23 }, end: { line: 742, column: 28 } },
                  line: 742
                },
                '10': {
                  name: 'hypot',
                  decl: { start: { line: 792, column: 9 }, end: { line: 792, column: 14 } },
                  loc: { start: { line: 792, column: 24 }, end: { line: 829, column: 1 } },
                  line: 792
                },
                '11': {
                  name: '(anonymous_11)',
                  decl: {
                    start: { line: 852, column: 21 },
                    end: { line: 852, column: 22 }
                  },
                  loc: { start: { line: 852, column: 41 }, end: { line: 871, column: 1 } },
                  line: 852
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 173, column: 2 }, end: { line: 179, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 173, column: 2 }, end: { line: 179, column: 3 } },
                    { start: { line: 173, column: 2 }, end: { line: 179, column: 3 } }
                  ],
                  line: 173
                },
                '1': {
                  loc: { start: { line: 176, column: 9 }, end: { line: 179, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 176, column: 9 }, end: { line: 179, column: 3 } },
                    { start: { line: 176, column: 9 }, end: { line: 179, column: 3 } }
                  ],
                  line: 176
                },
                '2': {
                  loc: { start: { line: 454, column: 2 }, end: { line: 456, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 454, column: 2 }, end: { line: 456, column: 3 } },
                    { start: { line: 454, column: 2 }, end: { line: 456, column: 3 } }
                  ],
                  line: 454
                },
                '3': {
                  loc: { start: { line: 457, column: 2 }, end: { line: 461, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 457, column: 2 }, end: { line: 461, column: 3 } },
                    { start: { line: 457, column: 2 }, end: { line: 461, column: 3 } }
                  ],
                  line: 457
                },
                '4': {
                  loc: { start: { line: 505, column: 2 }, end: { line: 509, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 505, column: 2 }, end: { line: 509, column: 3 } },
                    { start: { line: 505, column: 2 }, end: { line: 509, column: 3 } }
                  ],
                  line: 505
                },
                '5': {
                  loc: { start: { line: 553, column: 2 }, end: { line: 557, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 553, column: 2 }, end: { line: 557, column: 3 } },
                    { start: { line: 553, column: 2 }, end: { line: 557, column: 3 } }
                  ],
                  line: 553
                },
                '6': {
                  loc: { start: { line: 694, column: 2 }, end: { line: 696, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 694, column: 2 }, end: { line: 696, column: 3 } },
                    { start: { line: 694, column: 2 }, end: { line: 696, column: 3 } }
                  ],
                  line: 694
                },
                '7': {
                  loc: { start: { line: 794, column: 2 }, end: { line: 796, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 794, column: 2 }, end: { line: 796, column: 3 } },
                    { start: { line: 794, column: 2 }, end: { line: 796, column: 3 } }
                  ],
                  line: 794
                },
                '8': {
                  loc: { start: { line: 806, column: 4 }, end: { line: 808, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 806, column: 4 }, end: { line: 808, column: 5 } },
                    { start: { line: 806, column: 4 }, end: { line: 808, column: 5 } }
                  ],
                  line: 806
                },
                '9': {
                  loc: { start: { line: 806, column: 8 }, end: { line: 806, column: 41 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 806, column: 8 }, end: { line: 806, column: 22 } },
                    { start: { line: 806, column: 26 }, end: { line: 806, column: 41 } }
                  ],
                  line: 806
                },
                '10': {
                  loc: { start: { line: 810, column: 4 }, end: { line: 812, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 810, column: 4 }, end: { line: 812, column: 5 } },
                    { start: { line: 810, column: 4 }, end: { line: 812, column: 5 } }
                  ],
                  line: 810
                },
                '11': {
                  loc: { start: { line: 816, column: 2 }, end: { line: 818, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 816, column: 2 }, end: { line: 818, column: 3 } },
                    { start: { line: 816, column: 2 }, end: { line: 818, column: 3 } }
                  ],
                  line: 816
                },
                '12': {
                  loc: { start: { line: 856, column: 2 }, end: { line: 861, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 856, column: 2 }, end: { line: 861, column: 3 } },
                    { start: { line: 856, column: 2 }, end: { line: 861, column: 3 } }
                  ],
                  line: 856
                },
                '13': {
                  loc: { start: { line: 856, column: 6 }, end: { line: 856, column: 46 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 856, column: 6 }, end: { line: 856, column: 16 } },
                    { start: { line: 856, column: 20 }, end: { line: 856, column: 46 } }
                  ],
                  line: 856
                },
                '14': {
                  loc: { start: { line: 858, column: 9 }, end: { line: 861, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 858, column: 9 }, end: { line: 861, column: 3 } },
                    { start: { line: 858, column: 9 }, end: { line: 861, column: 3 } }
                  ],
                  line: 858
                },
                '15': {
                  loc: { start: { line: 862, column: 2 }, end: { line: 870, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 862, column: 2 }, end: { line: 870, column: 3 } },
                    { start: { line: 862, column: 2 }, end: { line: 870, column: 3 } }
                  ],
                  line: 862
                },
                '16': {
                  loc: { start: { line: 862, column: 6 }, end: { line: 862, column: 61 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 862, column: 6 }, end: { line: 862, column: 31 } },
                    { start: { line: 862, column: 35 }, end: { line: 862, column: 61 } }
                  ],
                  line: 862
                },
                '17': {
                  loc: { start: { line: 866, column: 9 }, end: { line: 870, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 866, column: 9 }, end: { line: 870, column: 3 } },
                    { start: { line: 866, column: 9 }, end: { line: 870, column: 3 } }
                  ],
                  line: 866
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: 'f609f7aa0f75ea9a0ce4a1330f8d6c980436ad42'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.includes');
          _dereq_('core-js/modules/es.array.index-of');
          _dereq_('core-js/modules/es.array.map');
          _dereq_('core-js/modules/es.array.slice');
          _dereq_('core-js/modules/es.math.hypot');
          _dereq_('core-js/modules/es.number.constructor');
          _dereq_('core-js/modules/es.string.includes');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_179gyfbins.s[0]++;

          /**
           * Calculates the absolute value (magnitude) of a number. Maps to Math.abs().
           * The absolute value of a number is always positive.
           *
           * @method abs
           * @param  {Number} n number to compute
           * @return {Number}   absolute value of given number
           * @example
           * <div class = "norender"><code>
           * function setup() {
           *   let x = -3;
           *   let y = abs(x);
           *
           *   print(x); // -3
           *   print(y); // 3
           * }
           * </code></div>
           *
           * @alt
           * no image displayed
           */
          _main.default.prototype.abs = Math.abs;

          /**
           * Calculates the closest int value that is greater than or equal to the
           * value of the parameter. Maps to Math.ceil(). For example, ceil(9.03)
           * returns the value 10.
           *
           * @method ceil
           * @param  {Number} n number to round up
           * @return {Integer}   rounded up number
           * @example
           * <div><code>
           * function draw() {
           *   background(200);
           *   // map, mouseX between 0 and 5.
           *   let ax = map(mouseX, 0, 100, 0, 5);
           *   let ay = 66;
           *
           *   //Get the ceiling of the mapped number.
           *   let bx = ceil(map(mouseX, 0, 100, 0, 5));
           *   let by = 33;
           *
           *   // Multiply the mapped numbers by 20 to more easily
           *   // see the changes.
           *   stroke(0);
           *   fill(0);
           *   line(0, ay, ax * 20, ay);
           *   line(0, by, bx * 20, by);
           *
           *   // Reformat the float returned by map and draw it.
           *   noStroke();
           *   text(nfc(ax, 2), ax, ay - 5);
           *   text(nfc(bx, 1), bx, by - 5);
           * }
           * </code></div>
           *
           * @alt
           * 2 horizontal lines & number sets. increase with mouse x. bottom to 2 decimals
           */ cov_179gyfbins.s[1]++;
          _main.default.prototype.ceil = Math.ceil;

          /**
           * Constrains a value between a minimum and maximum value.
           *
           * @method constrain
           * @param  {Number} n    number to constrain
           * @param  {Number} low  minimum limit
           * @param  {Number} high maximum limit
           * @return {Number}      constrained number
           * @example
           * <div><code>
           * function draw() {
           *   background(200);
           *
           *   let leftWall = 25;
           *   let rightWall = 75;
           *
           *   // xm is just the mouseX, while
           *   // xc is the mouseX, but constrained
           *   // between the leftWall and rightWall!
           *   let xm = mouseX;
           *   let xc = constrain(mouseX, leftWall, rightWall);
           *
           *   // Draw the walls.
           *   stroke(150);
           *   line(leftWall, 0, leftWall, height);
           *   line(rightWall, 0, rightWall, height);
           *
           *   // Draw xm and xc as circles.
           *   noStroke();
           *   fill(150);
           *   ellipse(xm, 33, 9, 9); // Not Constrained
           *   fill(0);
           *   ellipse(xc, 66, 9, 9); // Constrained
           * }
           * </code></div>
           *
           * @alt
           * 2 vertical lines. 2 ellipses move with mouse X 1 does not move passed lines
           */ cov_179gyfbins.s[2]++;
          _main.default.prototype.constrain = function(n, low, high) {
            cov_179gyfbins.f[0]++;
            cov_179gyfbins.s[3]++;
            _main.default._validateParameters('constrain', arguments);
            cov_179gyfbins.s[4]++;
            return Math.max(Math.min(n, high), low);
          };

          /**
           * Calculates the distance between two points, in either two or three dimensions.
           * If you looking for distance between two vectors see <a herf="#/p5.Vector/dist">dist()</a>
           *
           * @method dist
           * @param  {Number} x1 x-coordinate of the first point
           * @param  {Number} y1 y-coordinate of the first point
           * @param  {Number} x2 x-coordinate of the second point
           * @param  {Number} y2 y-coordinate of the second point
           * @return {Number}    distance between the two points
           *
           * @example
           * <div><code>
           * // Move your mouse inside the canvas to see the
           * // change in distance between two points!
           * function draw() {
           *   background(200);
           *   fill(0);
           *
           *   let x1 = 10;
           *   let y1 = 90;
           *   let x2 = mouseX;
           *   let y2 = mouseY;
           *
           *   line(x1, y1, x2, y2);
           *   ellipse(x1, y1, 7, 7);
           *   ellipse(x2, y2, 7, 7);
           *
           *   // d is the length of the line
           *   // the distance from point 1 to point 2.
           *   let d = dist(x1, y1, x2, y2);
           *
           *   // Let's write d along the line we are drawing!
           *   push();
           *   translate((x1 + x2) / 2, (y1 + y2) / 2);
           *   rotate(atan2(y2 - y1, x2 - x1));
           *   text(nfc(d, 1), 0, -5);
           *   pop();
           *   // Fancy!
           * }
           * </code></div>
           *
           * @alt
           * 2 ellipses joined by line. 1 ellipse moves with mouse X&Y. Distance displayed.
           */
          /**
           * @method dist
           * @param  {Number} x1
           * @param  {Number} y1
           * @param  {Number} z1 z-coordinate of the first point
           * @param  {Number} x2
           * @param  {Number} y2
           * @param  {Number} z2 z-coordinate of the second point
           * @return {Number}    distance between the two points
           */ cov_179gyfbins.s[5]++;
          _main.default.prototype.dist = function() {
            cov_179gyfbins.f[1]++;
            cov_179gyfbins.s[6]++;
            for (
              var _len = arguments.length, args = new Array(_len), _key = 0;
              _key < _len;
              _key++
            ) {
              args[_key] = arguments[_key];
            }
            _main.default._validateParameters('dist', args);
            cov_179gyfbins.s[7]++;
            if (args.length === 4) {
              cov_179gyfbins.b[0][0]++;
              cov_179gyfbins.s[8]++;
              //2D
              return hypot(args[2] - args[0], args[3] - args[1]);
            } else {
              cov_179gyfbins.b[0][1]++;
              cov_179gyfbins.s[9]++;
              if (args.length === 6) {
                cov_179gyfbins.b[1][0]++;
                cov_179gyfbins.s[10]++;
                //3D
                return hypot(args[3] - args[0], args[4] - args[1], args[5] - args[2]);
              } else {
                cov_179gyfbins.b[1][1]++;
              }
            }
          };

          /**
           * Returns Euler's number e (2.71828...) raised to the power of the n
           * parameter. Maps to Math.exp().
           *
           * @method exp
           * @param  {Number} n exponent to raise
           * @return {Number}   e^n
           * @example
           * <div><code>
           * function draw() {
           *   background(200);
           *
           *   // Compute the exp() function with a value between 0 and 2
           *   let xValue = map(mouseX, 0, width, 0, 2);
           *   let yValue = exp(xValue);
           *
           *   let y = map(yValue, 0, 8, height, 0);
           *
           *   let legend = 'exp (' + nfc(xValue, 3) + ')\n= ' + nf(yValue, 1, 4);
           *   stroke(150);
           *   line(mouseX, y, mouseX, height);
           *   fill(0);
           *   text(legend, 5, 15);
           *   noStroke();
           *   ellipse(mouseX, y, 7, 7);
           *
           *   // Draw the exp(x) curve,
           *   // over the domain of x from 0 to 2
           *   noFill();
           *   stroke(0);
           *   beginShape();
           *   for (let x = 0; x < width; x++) {
           *     xValue = map(x, 0, width, 0, 2);
           *     yValue = exp(xValue);
           *     y = map(yValue, 0, 8, height, 0);
           *     vertex(x, y);
           *   }
           *
           *   endShape();
           *   line(0, 0, 0, height);
           *   line(0, height - 1, width, height - 1);
           * }
           * </code></div>
           *
           * @alt
           * ellipse moves along a curve with mouse x. e^n displayed.
           */ cov_179gyfbins.s[11]++;
          _main.default.prototype.exp = Math.exp;

          /**
           * Calculates the closest int value that is less than or equal to the
           * value of the parameter. Maps to Math.floor().
           *
           * @method floor
           * @param  {Number} n number to round down
           * @return {Integer}  rounded down number
           * @example
           * <div><code>
           * function draw() {
           *   background(200);
           *   //map, mouseX between 0 and 5.
           *   let ax = map(mouseX, 0, 100, 0, 5);
           *   let ay = 66;
           *
           *   //Get the floor of the mapped number.
           *   let bx = floor(map(mouseX, 0, 100, 0, 5));
           *   let by = 33;
           *
           *   // Multiply the mapped numbers by 20 to more easily
           *   // see the changes.
           *   stroke(0);
           *   fill(0);
           *   line(0, ay, ax * 20, ay);
           *   line(0, by, bx * 20, by);
           *
           *   // Reformat the float returned by map and draw it.
           *   noStroke();
           *   text(nfc(ax, 2), ax, ay - 5);
           *   text(nfc(bx, 1), bx, by - 5);
           * }
           * </code></div>
           *
           * @alt
           * 2 horizontal lines & number sets. increase with mouse x. bottom to 2 decimals
           */ cov_179gyfbins.s[12]++;
          _main.default.prototype.floor = Math.floor;

          /**
           * Calculates a number between two numbers at a specific increment. The amt
           * parameter is the amount to interpolate between the two values where 0.0
           * equal to the first point, 0.1 is very near the first point, 0.5 is
           * half-way in between, and 1.0 is equal to the second point. If the
           * value of amt is more than 1.0 or less than 0.0, the number will be
           * calculated accordingly in the ratio of the two given numbers. The lerp
           * function is convenient for creating motion along a straight
           * path and for drawing dotted lines.
           *
           * @method lerp
           * @param  {Number} start first value
           * @param  {Number} stop  second value
           * @param  {Number} amt   number
           * @return {Number}       lerped value
           * @example
           * <div><code>
           * function setup() {
           *   background(200);
           *   let a = 20;
           *   let b = 80;
           *   let c = lerp(a, b, 0.2);
           *   let d = lerp(a, b, 0.5);
           *   let e = lerp(a, b, 0.8);
           *
           *   let y = 50;
           *
           *   strokeWeight(5);
           *   stroke(0); // Draw the original points in black
           *   point(a, y);
           *   point(b, y);
           *
           *   stroke(100); // Draw the lerp points in gray
           *   point(c, y);
           *   point(d, y);
           *   point(e, y);
           * }
           * </code></div>
           *
           * @alt
           * 5 points horizontally staggered mid-canvas. mid 3 are grey, outer black
           */ cov_179gyfbins.s[13]++;
          _main.default.prototype.lerp = function(start, stop, amt) {
            cov_179gyfbins.f[2]++;
            cov_179gyfbins.s[14]++;
            _main.default._validateParameters('lerp', arguments);
            cov_179gyfbins.s[15]++;
            return amt * (stop - start) + start;
          };

          /**
    * Calculates the natural logarithm (the base-e logarithm) of a number. This
    * function expects the n parameter to be a value greater than 0.0. Maps to
    * Math.log().
    *
    * @method log
    * @param  {Number} n number greater than 0
    * @return {Number}   natural logarithm of n
    * @example
    * <div><code>
    * function draw() {
    *   background(200);
    *   let maxX = 2.8;
    *   let maxY = 1.5;
    *
    *   // Compute the natural log of a value between 0 and maxX
    *   let xValue = map(mouseX, 0, width, 0, maxX);
    *   let yValue, y;
    *   if (xValue > 0) {
       // Cannot take the log of a negative number.
    *     yValue = log(xValue);
    *     y = map(yValue, -maxY, maxY, height, 0);
    *
    *     // Display the calculation occurring.
    *     let legend = 'log(' + nf(xValue, 1, 2) + ')\n= ' + nf(yValue, 1, 3);
    *     stroke(150);
    *     line(mouseX, y, mouseX, height);
    *     fill(0);
    *     text(legend, 5, 15);
    *     noStroke();
    *     ellipse(mouseX, y, 7, 7);
    *   }
    *
    *   // Draw the log(x) curve,
    *   // over the domain of x from 0 to maxX
    *   noFill();
    *   stroke(0);
    *   beginShape();
    *   for (let x = 0; x < width; x++) {
    *     xValue = map(x, 0, width, 0, maxX);
    *     yValue = log(xValue);
    *     y = map(yValue, -maxY, maxY, height, 0);
    *     vertex(x, y);
    *   }
    *   endShape();
    *   line(0, 0, 0, height);
    *   line(0, height / 2, width, height / 2);
    * }
    * </code></div>
    *
    * @alt
    * ellipse moves along a curve with mouse x. natural logarithm of n displayed.
    */ cov_179gyfbins
            .s[16]++;
          _main.default.prototype.log = Math.log;

          /**
           * Calculates the magnitude (or length) of a vector. A vector is a direction
           * in space commonly used in computer graphics and linear algebra. Because it
           * has no "start" position, the magnitude of a vector can be thought of as
           * the distance from the coordinate 0,0 to its x,y value. Therefore, <a href="#/p5/mag">mag()</a> is
           * a shortcut for writing dist(0, 0, x, y).
           *
           * @method mag
           * @param  {Number} a first value
           * @param  {Number} b second value
           * @return {Number}   magnitude of vector from (0,0) to (a,b)
           * @example
           * <div><code>
           * function setup() {
           *   let x1 = 20;
           *   let x2 = 80;
           *   let y1 = 30;
           *   let y2 = 70;
           *
           *   line(0, 0, x1, y1);
           *   print(mag(x1, y1)); // Prints "36.05551275463989"
           *   line(0, 0, x2, y1);
           *   print(mag(x2, y1)); // Prints "85.44003745317531"
           *   line(0, 0, x1, y2);
           *   print(mag(x1, y2)); // Prints "72.80109889280519"
           *   line(0, 0, x2, y2);
           *   print(mag(x2, y2)); // Prints "106.3014581273465"
           * }
           * </code></div>
           *
           * @alt
           * 4 lines of different length radiate from top left of canvas.
           */ cov_179gyfbins.s[17]++;
          _main.default.prototype.mag = function(x, y) {
            cov_179gyfbins.f[3]++;
            cov_179gyfbins.s[18]++;
            _main.default._validateParameters('mag', arguments);
            cov_179gyfbins.s[19]++;
            return hypot(x, y);
          };

          /**
    * Re-maps a number from one range to another.
    *
    * In the first example above, the number 25 is converted from a value in the
    * range of 0 to 100 into a value that ranges from the left edge of the
    * window (0) to the right edge (width).
    *
    * @method map
    * @param  {Number} value  the incoming value to be converted
    * @param  {Number} start1 lower bound of the value's current range
    * @param  {Number} stop1  upper bound of the value's current range
    * @param  {Number} start2 lower bound of the value's target range
    * @param  {Number} stop2  upper bound of the value's target range
    * @param  {Boolean} [withinBounds] constrain the value to the newly mapped range
    * @return {Number}        remapped number
    * @example
    *   <div><code>
    * let value = 25;
    * let m = map(value, 0, 100, 0, width);
    * ellipse(m, 50, 10, 10);
   </code></div>
    *
    *   <div><code>
    * function setup() {
    *   noStroke();
    * }
    *
    * function draw() {
    *   background(204);
    *   let x1 = map(mouseX, 0, width, 25, 75);
    *   ellipse(x1, 25, 25, 25);
    *   //This ellipse is constrained to the 0-100 range
    *   //after setting withinBounds to true
    *   let x2 = map(mouseX, 0, width, 0, 100, true);
    *   ellipse(x2, 75, 25, 25);
    * }
   </code></div>
    *
    * @alt
    * 10 by 10 white ellipse with in mid left canvas
    * 2 25 by 25 white ellipses move with mouse x. Bottom has more range from X
    */ cov_179gyfbins
            .s[20]++;
          _main.default.prototype.map = function(
            n,
            start1,
            stop1,
            start2,
            stop2,
            withinBounds
          ) {
            cov_179gyfbins.f[4]++;
            cov_179gyfbins.s[21]++;
            _main.default._validateParameters('map', arguments);
            var newval = (cov_179gyfbins.s[22]++,
            (n - start1) / (stop1 - start1) * (stop2 - start2) + start2);
            cov_179gyfbins.s[23]++;
            if (!withinBounds) {
              cov_179gyfbins.b[2][0]++;
              cov_179gyfbins.s[24]++;
              return newval;
            } else {
              cov_179gyfbins.b[2][1]++;
            }
            cov_179gyfbins.s[25]++;
            if (start2 < stop2) {
              cov_179gyfbins.b[3][0]++;
              cov_179gyfbins.s[26]++;
              return this.constrain(newval, start2, stop2);
            } else {
              cov_179gyfbins.b[3][1]++;
              cov_179gyfbins.s[27]++;
              return this.constrain(newval, stop2, start2);
            }
          };

          /**
           * Determines the largest value in a sequence of numbers, and then returns
           * that value. <a href="#/p5/max">max()</a> accepts any number of Number parameters, or an Array
           * of any length.
           *
           * @method max
           * @param  {Number} n0 Number to compare
           * @param  {Number} n1 Number to compare
           * @return {Number}             maximum Number
           * @example
           * <div><code>
           * function setup() {
           *   // Change the elements in the array and run the sketch
           *   // to show how max() works!
           *   let numArray = [2, 1, 5, 4, 8, 9];
           *   fill(0);
           *   noStroke();
           *   text('Array Elements', 0, 10);
           *   // Draw all numbers in the array
           *   let spacing = 15;
           *   let elemsY = 25;
           *   for (let i = 0; i < numArray.length; i++) {
           *     text(numArray[i], i * spacing, elemsY);
           *   }
           *   let maxX = 33;
           *   let maxY = 80;
           *   // Draw the Maximum value in the array.
           *   textSize(32);
           *   text(max(numArray), maxX, maxY);
           * }
           * </code></div>
           *
           * @alt
           * Small text at top reads: Array Elements 2 1 5 4 8 9. Large text at center: 9
           */
          /**
           * @method max
           * @param  {Number[]} nums Numbers to compare
           * @return {Number}
           */ cov_179gyfbins.s[28]++;
          _main.default.prototype.max = function() {
            cov_179gyfbins.f[5]++;
            cov_179gyfbins.s[29]++;
            for (
              var _len2 = arguments.length, args = new Array(_len2), _key2 = 0;
              _key2 < _len2;
              _key2++
            ) {
              args[_key2] = arguments[_key2];
            }
            if (args[0] instanceof Array) {
              cov_179gyfbins.b[4][0]++;
              cov_179gyfbins.s[30]++;
              return Math.max.apply(null, args[0]);
            } else {
              cov_179gyfbins.b[4][1]++;
              cov_179gyfbins.s[31]++;
              return Math.max.apply(null, args);
            }
          };

          /**
           * Determines the smallest value in a sequence of numbers, and then returns
           * that value. <a href="#/p5/min">min()</a> accepts any number of Number parameters, or an Array
           * of any length.
           *
           * @method min
           * @param  {Number} n0 Number to compare
           * @param  {Number} n1 Number to compare
           * @return {Number}             minimum Number
           * @example
           * <div><code>
           * function setup() {
           *   // Change the elements in the array and run the sketch
           *   // to show how min() works!
           *   let numArray = [2, 1, 5, 4, 8, 9];
           *   fill(0);
           *   noStroke();
           *   text('Array Elements', 0, 10);
           *   // Draw all numbers in the array
           *   let spacing = 15;
           *   let elemsY = 25;
           *   for (let i = 0; i < numArray.length; i++) {
           *     text(numArray[i], i * spacing, elemsY);
           *   }
           *   let maxX = 33;
           *   let maxY = 80;
           *   // Draw the Minimum value in the array.
           *   textSize(32);
           *   text(min(numArray), maxX, maxY);
           * }
           * </code></div>
           *
           * @alt
           * Small text at top reads: Array Elements 2 1 5 4 8 9. Large text at center: 1
           */
          /**
           * @method min
           * @param  {Number[]} nums Numbers to compare
           * @return {Number}
           */ cov_179gyfbins.s[32]++;
          _main.default.prototype.min = function() {
            cov_179gyfbins.f[6]++;
            cov_179gyfbins.s[33]++;
            for (
              var _len3 = arguments.length, args = new Array(_len3), _key3 = 0;
              _key3 < _len3;
              _key3++
            ) {
              args[_key3] = arguments[_key3];
            }
            if (args[0] instanceof Array) {
              cov_179gyfbins.b[5][0]++;
              cov_179gyfbins.s[34]++;
              return Math.min.apply(null, args[0]);
            } else {
              cov_179gyfbins.b[5][1]++;
              cov_179gyfbins.s[35]++;
              return Math.min.apply(null, args);
            }
          };

          /**
           * Normalizes a number from another range into a value between 0 and 1.
           * Identical to map(value, low, high, 0, 1).
           * Numbers outside of the range are not clamped to 0 and 1, because
           * out-of-range values are often intentional and useful. (See the example above.)
           *
           * @method norm
           * @param  {Number} value incoming value to be normalized
           * @param  {Number} start lower bound of the value's current range
           * @param  {Number} stop  upper bound of the value's current range
           * @return {Number}       normalized number
           * @example
           * <div><code>
           * function draw() {
           *   background(200);
           *   let currentNum = mouseX;
           *   let lowerBound = 0;
           *   let upperBound = width; //100;
           *   let normalized = norm(currentNum, lowerBound, upperBound);
           *   let lineY = 70;
           *   stroke(3);
           *   line(0, lineY, width, lineY);
           *   //Draw an ellipse mapped to the non-normalized value.
           *   noStroke();
           *   fill(50);
           *   let s = 7; // ellipse size
           *   ellipse(currentNum, lineY, s, s);
           *
           *   // Draw the guide
           *   let guideY = lineY + 15;
           *   text('0', 0, guideY);
           *   textAlign(RIGHT);
           *   text('100', width, guideY);
           *
           *   // Draw the normalized value
           *   textAlign(LEFT);
           *   fill(0);
           *   textSize(32);
           *   let normalY = 40;
           *   let normalX = 20;
           *   text(normalized, normalX, normalY);
           * }
           * </code></div>
           *
           * @alt
           * ellipse moves with mouse. 0 shown left & 100 right and updating values center
           */ cov_179gyfbins.s[36]++;
          _main.default.prototype.norm = function(n, start, stop) {
            cov_179gyfbins.f[7]++;
            cov_179gyfbins.s[37]++;
            _main.default._validateParameters('norm', arguments);
            cov_179gyfbins.s[38]++;
            return this.map(n, start, stop, 0, 1);
          };

          /**
           * Facilitates exponential expressions. The <a href="#/p5/pow">pow()</a> function is an efficient
           * way of multiplying numbers by themselves (or their reciprocals) in large
           * quantities. For example, pow(3, 5) is equivalent to the expression
           * 3 &times; 3 &times; 3 &times; 3 &times; 3 and pow(3, -5) is equivalent to 1 /
           * 3 &times; 3 &times; 3 &times; 3 &times; 3. Maps to
           * Math.pow().
           *
           * @method pow
           * @param  {Number} n base of the exponential expression
           * @param  {Number} e power by which to raise the base
           * @return {Number}   n^e
           * @example
           * <div><code>
           * function setup() {
           *   //Exponentially increase the size of an ellipse.
           *   let eSize = 3; // Original Size
           *   let eLoc = 10; // Original Location
           *
           *   ellipse(eLoc, eLoc, eSize, eSize);
           *
           *   ellipse(eLoc * 2, eLoc * 2, pow(eSize, 2), pow(eSize, 2));
           *
           *   ellipse(eLoc * 4, eLoc * 4, pow(eSize, 3), pow(eSize, 3));
           *
           *   ellipse(eLoc * 8, eLoc * 8, pow(eSize, 4), pow(eSize, 4));
           * }
           * </code></div>
           *
           * @alt
           * small to large ellipses radiating from top left of canvas
           */ cov_179gyfbins.s[39]++;
          _main.default.prototype.pow = Math.pow;

          /**
           * Calculates the integer closest to the n parameter. For example,
           * round(133.8) returns the value 134. Maps to Math.round().
           *
           * @method round
           * @param  {Number} n number to round
           * @param  {Number} [decimals] number of decimal places to round to, default is 0
           * @return {Integer}  rounded number
           * @example
           * <div><code>
           * let x = round(3.7);
           * text(x, width / 2, height / 2);
           * </code></div>
           * <div><code>
           * let x = round(12.782383, 2);
           * text(x, width / 2, height / 2);
           * </code></div>
           * <div><code>
           * function draw() {
           *   background(200);
           *   //map, mouseX between 0 and 5.
           *   let ax = map(mouseX, 0, 100, 0, 5);
           *   let ay = 66;
           *
           *   // Round the mapped number.
           *   let bx = round(map(mouseX, 0, 100, 0, 5));
           *   let by = 33;
           *
           *   // Multiply the mapped numbers by 20 to more easily
           *   // see the changes.
           *   stroke(0);
           *   fill(0);
           *   line(0, ay, ax * 20, ay);
           *   line(0, by, bx * 20, by);
           *
           *   // Reformat the float returned by map and draw it.
           *   noStroke();
           *   text(nfc(ax, 2), ax, ay - 5);
           *   text(nfc(bx, 1), bx, by - 5);
           * }
           * </code></div>
           *
           * @alt
           * "4" written in middle of canvas
           * "12.78" written in middle of canvas
           * two horizontal lines rounded values displayed on top.
           */ cov_179gyfbins.s[40]++;
          _main.default.prototype.round = function(n, decimals) {
            cov_179gyfbins.f[8]++;
            cov_179gyfbins.s[41]++;
            if (!decimals) {
              cov_179gyfbins.b[6][0]++;
              cov_179gyfbins.s[42]++;
              return Math.round(n);
            } else {
              cov_179gyfbins.b[6][1]++;
            }
            cov_179gyfbins.s[43]++;
            return Number(Math.round(n + 'e' + decimals) + 'e-' + decimals);
          };

          /**
           * Squares a number (multiplies a number by itself). The result is always a
           * positive number, as multiplying two negative numbers always yields a
           * positive result. For example, -1 * -1 = 1.
           *
           * @method sq
           * @param  {Number} n number to square
           * @return {Number}   squared number
           * @example
           * <div><code>
           * function draw() {
           *   background(200);
           *   let eSize = 7;
           *   let x1 = map(mouseX, 0, width, 0, 10);
           *   let y1 = 80;
           *   let x2 = sq(x1);
           *   let y2 = 20;
           *
           *   // Draw the non-squared.
           *   line(0, y1, width, y1);
           *   ellipse(x1, y1, eSize, eSize);
           *
           *   // Draw the squared.
           *   line(0, y2, width, y2);
           *   ellipse(x2, y2, eSize, eSize);
           *
           *   // Draw dividing line.
           *   stroke(100);
           *   line(0, height / 2, width, height / 2);
           *
           *   // Draw text.
           *   let spacing = 15;
           *   noStroke();
           *   fill(0);
           *   text('x = ' + x1, 0, y1 + spacing);
           *   text('sq(x) = ' + x2, 0, y2 + spacing);
           * }
           * </code></div>
           *
           * @alt
           * horizontal center line squared values displayed on top and regular on bottom.
           */ cov_179gyfbins.s[44]++;
          _main.default.prototype.sq = function(n) {
            cov_179gyfbins.f[9]++;
            cov_179gyfbins.s[45]++;
            return n * n;
          };

          /**
           * Calculates the square root of a number. The square root of a number is
           * always positive, even though there may be a valid negative root. The
           * square root s of number a is such that s*s = a. It is the opposite of
           * squaring. Maps to Math.sqrt().
           *
           * @method sqrt
           * @param  {Number} n non-negative number to square root
           * @return {Number}   square root of number
           * @example
           * <div><code>
           * function draw() {
           *   background(200);
           *   let eSize = 7;
           *   let x1 = mouseX;
           *   let y1 = 80;
           *   let x2 = sqrt(x1);
           *   let y2 = 20;
           *
           *   // Draw the non-squared.
           *   line(0, y1, width, y1);
           *   ellipse(x1, y1, eSize, eSize);
           *
           *   // Draw the squared.
           *   line(0, y2, width, y2);
           *   ellipse(x2, y2, eSize, eSize);
           *
           *   // Draw dividing line.
           *   stroke(100);
           *   line(0, height / 2, width, height / 2);
           *
           *   // Draw text.
           *   noStroke();
           *   fill(0);
           *   let spacing = 15;
           *   text('x = ' + x1, 0, y1 + spacing);
           *   text('sqrt(x) = ' + x2, 0, y2 + spacing);
           * }
           * </code></div>
           *
           * @alt
           * horizontal center line squareroot values displayed on top and regular on bottom.
           */ cov_179gyfbins.s[46]++;
          _main.default.prototype.sqrt = Math.sqrt;

          // Calculate the length of the hypotenuse of a right triangle
          // This won't under- or overflow in intermediate steps
          // https://en.wikipedia.org/wiki/Hypot
          function hypot(x, y, z) {
            cov_179gyfbins.f[10]++;
            cov_179gyfbins.s[47]++;
            // Use the native implementation if it's available
            if (typeof Math.hypot === 'function') {
              cov_179gyfbins.b[7][0]++;
              cov_179gyfbins.s[48]++;
              return Math.hypot.apply(null, arguments);
            } else {
              cov_179gyfbins.b[7][1]++;
            }

            // Otherwise use the V8 implementation
            // https://github.com/v8/v8/blob/8cd3cf297287e581a49e487067f5cbd991b27123/src/js/math.js#L217
            var length = (cov_179gyfbins.s[49]++, arguments.length);
            var args = (cov_179gyfbins.s[50]++, []);
            var max = (cov_179gyfbins.s[51]++, 0);
            cov_179gyfbins.s[52]++;
            for (var i = (cov_179gyfbins.s[53]++, 0); i < length; i++) {
              var n = (cov_179gyfbins.s[54]++, arguments[i]);
              cov_179gyfbins.s[55]++;
              n = +n;
              cov_179gyfbins.s[56]++;
              if (
                (cov_179gyfbins.b[9][0]++, n === Infinity) ||
                (cov_179gyfbins.b[9][1]++, n === -Infinity)
              ) {
                cov_179gyfbins.b[8][0]++;
                cov_179gyfbins.s[57]++;
                return Infinity;
              } else {
                cov_179gyfbins.b[8][1]++;
              }
              cov_179gyfbins.s[58]++;
              n = Math.abs(n);
              cov_179gyfbins.s[59]++;
              if (n > max) {
                cov_179gyfbins.b[10][0]++;
                cov_179gyfbins.s[60]++;
                max = n;
              } else {
                cov_179gyfbins.b[10][1]++;
              }
              cov_179gyfbins.s[61]++;
              args[i] = n;
            }
            cov_179gyfbins.s[62]++;

            if (max === 0) {
              cov_179gyfbins.b[11][0]++;
              cov_179gyfbins.s[63]++;
              max = 1;
            } else {
              cov_179gyfbins.b[11][1]++;
            }
            var sum = (cov_179gyfbins.s[64]++, 0);
            var compensation = (cov_179gyfbins.s[65]++, 0);
            cov_179gyfbins.s[66]++;
            for (var j = (cov_179gyfbins.s[67]++, 0); j < length; j++) {
              var m = (cov_179gyfbins.s[68]++, args[j] / max);
              var summand = (cov_179gyfbins.s[69]++, m * m - compensation);
              var preliminary = (cov_179gyfbins.s[70]++, sum + summand);
              cov_179gyfbins.s[71]++;
              compensation = preliminary - sum - summand;
              cov_179gyfbins.s[72]++;
              sum = preliminary;
            }
            cov_179gyfbins.s[73]++;
            return Math.sqrt(sum) * max;
          }

          /**
           * Calculates the fractional part of a number.
           *
           * @method fract
           * @param {Number} num Number whose fractional part needs to be found out
           * @returns {Number} fractional part of x, i.e, {x}
           * @example
           * <div><code>
           * text(7345.73472742, 10, 25);
           * text(fract(7345.73472742), 10, 75);
           * </code></div>
           *
           * <div><code>
           * text(1.4215e-15, 10, 25);
           * text(fract(1.4215e-15), 10, 75);
           * </code></div>
           *
           * @alt
           * first row having a number and the second having the fractional part of the number
           * first row having a number expressed in scientific notation and the second having the fractional part of the number
           */ cov_179gyfbins.s[74]++;
          _main.default.prototype.fract = function(toConvert) {
            cov_179gyfbins.f[11]++;
            cov_179gyfbins.s[75]++;
            _main.default._validateParameters('fract', arguments);
            var sign = (cov_179gyfbins.s[76]++, 0);
            var num = (cov_179gyfbins.s[77]++, Number(toConvert));
            cov_179gyfbins.s[78]++;
            if (
              (cov_179gyfbins.b[13][0]++, isNaN(num)) ||
              (cov_179gyfbins.b[13][1]++, Math.abs(num) === Infinity)
            ) {
              cov_179gyfbins.b[12][0]++;
              cov_179gyfbins.s[79]++;
              return num;
            } else {
              cov_179gyfbins.b[12][1]++;
              cov_179gyfbins.s[80]++;
              if (num < 0) {
                cov_179gyfbins.b[14][0]++;
                cov_179gyfbins.s[81]++;
                num = -num;
                cov_179gyfbins.s[82]++;
                sign = 1;
              } else {
                cov_179gyfbins.b[14][1]++;
              }
            }
            cov_179gyfbins.s[83]++;
            if (
              (cov_179gyfbins.b[16][0]++, String(num).includes('.')) &&
              (cov_179gyfbins.b[16][1]++, !String(num).includes('e'))
            ) {
              cov_179gyfbins.b[15][0]++;
              var toFract = (cov_179gyfbins.s[84]++, String(num));
              cov_179gyfbins.s[85]++;
              toFract = Number('0' + toFract.slice(toFract.indexOf('.')));
              cov_179gyfbins.s[86]++;
              return Math.abs(sign - toFract);
            } else {
              cov_179gyfbins.b[15][1]++;
              cov_179gyfbins.s[87]++;
              if (num < 1) {
                cov_179gyfbins.b[17][0]++;
                cov_179gyfbins.s[88]++;
                return Math.abs(sign - num);
              } else {
                cov_179gyfbins.b[17][1]++;
                cov_179gyfbins.s[89]++;
                return 0;
              }
            }
          };
          var _default = _main.default;
          exports.default = _default;
        },
        {
          '../core/main': 283,
          'core-js/modules/es.array.includes': 172,
          'core-js/modules/es.array.index-of': 173,
          'core-js/modules/es.array.map': 177,
          'core-js/modules/es.array.slice': 178,
          'core-js/modules/es.math.hypot': 183,
          'core-js/modules/es.number.constructor': 185,
          'core-js/modules/es.string.includes': 200
        }
      ],
      314: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_6fpj52ykt = (function() {
            var path = '/Users/outofambit/src/p5.js/src/math/math.js';
            var hash = '34aaba33ec443f353a45eff0c29519478dfbd46c';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/math/math.js',
              statementMap: {
                '0': { start: { line: 39, column: 0 }, end: { line: 45, column: 2 } },
                '1': { start: { line: 40, column: 2 }, end: { line: 44, column: 3 } },
                '2': { start: { line: 41, column: 4 }, end: { line: 41, column: 42 } },
                '3': { start: { line: 43, column: 4 }, end: { line: 43, column: 34 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 39, column: 28 }, end: { line: 39, column: 29 } },
                  loc: { start: { line: 39, column: 46 }, end: { line: 45, column: 1 } },
                  line: 39
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 40, column: 2 }, end: { line: 44, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 40, column: 2 }, end: { line: 44, column: 3 } },
                    { start: { line: 40, column: 2 }, end: { line: 44, column: 3 } }
                  ],
                  line: 40
                }
              },
              s: { '0': 0, '1': 0, '2': 0, '3': 0 },
              f: { '0': 0 },
              b: { '0': [0, 0] },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '34aaba33ec443f353a45eff0c29519478dfbd46c'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_6fpj52ykt.s[0]++;

          /**
           * Creates a new <a href="#/p5.Vector">p5.Vector</a> (the datatype for storing vectors). This provides a
           * two or three dimensional vector, specifically a Euclidean (also known as
           * geometric) vector. A vector is an entity that has both magnitude and
           * direction.
           *
           * @method createVector
           * @param {Number} [x] x component of the vector
           * @param {Number} [y] y component of the vector
           * @param {Number} [z] z component of the vector
           * @return {p5.Vector}
           * @example
           * <div><code>
           * let v1;
           * function setup() {
           *   createCanvas(100, 100);
           *   stroke(255, 0, 255);
           *   v1 = createVector(width / 2, height / 2);
           * }
           *
           * function draw() {
           *   background(255);
           *   line(v1.x, v1.y, mouseX, mouseY);
           * }
           * </code></div>
           *
           * @alt
           * draws a line from center of canvas to mouse pointer position.
           */
          _main.default.prototype.createVector = function(x, y, z) {
            cov_6fpj52ykt.f[0]++;
            cov_6fpj52ykt.s[1]++;
            if (this instanceof _main.default) {
              cov_6fpj52ykt.b[0][0]++;
              cov_6fpj52ykt.s[2]++;
              return new _main.default.Vector(this, arguments);
            } else {
              cov_6fpj52ykt.b[0][1]++;
              cov_6fpj52ykt.s[3]++;
              return new _main.default.Vector(x, y, z);
            }
          };
          var _default = _main.default;
          exports.default = _default;
        },
        { '../core/main': 283 }
      ],
      315: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_16skfatzck = (function() {
            var path = '/Users/outofambit/src/p5.js/src/math/noise.js';
            var hash = 'dba612adda1e8ab7495bc1d6218bf4045dfed1d2';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/math/noise.js',
              statementMap: {
                '0': { start: { line: 23, column: 22 }, end: { line: 23, column: 23 } },
                '1': { start: { line: 24, column: 21 }, end: { line: 24, column: 39 } },
                '2': { start: { line: 25, column: 22 }, end: { line: 25, column: 23 } },
                '3': { start: { line: 26, column: 21 }, end: { line: 26, column: 39 } },
                '4': { start: { line: 27, column: 20 }, end: { line: 27, column: 24 } },
                '5': { start: { line: 29, column: 21 }, end: { line: 29, column: 22 } },
                '6': { start: { line: 30, column: 25 }, end: { line: 30, column: 28 } },
                '7': { start: { line: 32, column: 22 }, end: { line: 32, column: 62 } },
                '8': { start: { line: 32, column: 27 }, end: { line: 32, column: 62 } },
                '9': { start: { line: 101, column: 0 }, end: { line: 176, column: 2 } },
                '10': { start: { line: 102, column: 2 }, end: { line: 107, column: 3 } },
                '11': { start: { line: 103, column: 4 }, end: { line: 103, column: 40 } },
                '12': { start: { line: 104, column: 4 }, end: { line: 106, column: 5 } },
                '13': { start: { line: 104, column: 17 }, end: { line: 104, column: 18 } },
                '14': { start: { line: 105, column: 6 }, end: { line: 105, column: 32 } },
                '15': { start: { line: 109, column: 2 }, end: { line: 111, column: 3 } },
                '16': { start: { line: 110, column: 4 }, end: { line: 110, column: 11 } },
                '17': { start: { line: 112, column: 2 }, end: { line: 114, column: 3 } },
                '18': { start: { line: 113, column: 4 }, end: { line: 113, column: 11 } },
                '19': { start: { line: 115, column: 2 }, end: { line: 117, column: 3 } },
                '20': { start: { line: 116, column: 4 }, end: { line: 116, column: 11 } },
                '21': { start: { line: 119, column: 11 }, end: { line: 119, column: 24 } },
                '22': { start: { line: 120, column: 9 }, end: { line: 120, column: 22 } },
                '23': { start: { line: 121, column: 9 }, end: { line: 121, column: 22 } },
                '24': { start: { line: 122, column: 11 }, end: { line: 122, column: 17 } },
                '25': { start: { line: 123, column: 11 }, end: { line: 123, column: 17 } },
                '26': { start: { line: 124, column: 11 }, end: { line: 124, column: 17 } },
                '27': { start: { line: 127, column: 10 }, end: { line: 127, column: 11 } },
                '28': { start: { line: 128, column: 13 }, end: { line: 128, column: 16 } },
                '29': { start: { line: 132, column: 2 }, end: { line: 174, column: 3 } },
                '30': { start: { line: 132, column: 15 }, end: { line: 132, column: 16 } },
                '31': { start: { line: 133, column: 13 }, end: { line: 133, column: 63 } },
                '32': { start: { line: 135, column: 4 }, end: { line: 135, column: 28 } },
                '33': { start: { line: 136, column: 4 }, end: { line: 136, column: 28 } },
                '34': { start: { line: 138, column: 4 }, end: { line: 138, column: 34 } },
                '35': { start: { line: 139, column: 4 }, end: { line: 139, column: 54 } },
                '36': { start: { line: 140, column: 4 }, end: { line: 140, column: 51 } },
                '37': { start: { line: 141, column: 4 }, end: { line: 141, column: 69 } },
                '38': { start: { line: 142, column: 4 }, end: { line: 142, column: 26 } },
                '39': { start: { line: 144, column: 4 }, end: { line: 144, column: 23 } },
                '40': { start: { line: 145, column: 4 }, end: { line: 145, column: 34 } },
                '41': { start: { line: 146, column: 4 }, end: { line: 146, column: 54 } },
                '42': { start: { line: 147, column: 4 }, end: { line: 147, column: 51 } },
                '43': { start: { line: 148, column: 4 }, end: { line: 148, column: 69 } },
                '44': { start: { line: 149, column: 4 }, end: { line: 149, column: 26 } },
                '45': { start: { line: 151, column: 4 }, end: { line: 151, column: 40 } },
                '46': { start: { line: 153, column: 4 }, end: { line: 153, column: 19 } },
                '47': { start: { line: 154, column: 4 }, end: { line: 154, column: 31 } },
                '48': { start: { line: 155, column: 4 }, end: { line: 155, column: 13 } },
                '49': { start: { line: 156, column: 4 }, end: { line: 156, column: 12 } },
                '50': { start: { line: 157, column: 4 }, end: { line: 157, column: 13 } },
                '51': { start: { line: 158, column: 4 }, end: { line: 158, column: 12 } },
                '52': { start: { line: 159, column: 4 }, end: { line: 159, column: 13 } },
                '53': { start: { line: 160, column: 4 }, end: { line: 160, column: 12 } },
                '54': { start: { line: 162, column: 4 }, end: { line: 165, column: 5 } },
                '55': { start: { line: 163, column: 6 }, end: { line: 163, column: 11 } },
                '56': { start: { line: 164, column: 6 }, end: { line: 164, column: 11 } },
                '57': { start: { line: 166, column: 4 }, end: { line: 169, column: 5 } },
                '58': { start: { line: 167, column: 6 }, end: { line: 167, column: 11 } },
                '59': { start: { line: 168, column: 6 }, end: { line: 168, column: 11 } },
                '60': { start: { line: 170, column: 4 }, end: { line: 173, column: 5 } },
                '61': { start: { line: 171, column: 6 }, end: { line: 171, column: 11 } },
                '62': { start: { line: 172, column: 6 }, end: { line: 172, column: 11 } },
                '63': { start: { line: 175, column: 2 }, end: { line: 175, column: 11 } },
                '64': { start: { line: 234, column: 0 }, end: { line: 241, column: 2 } },
                '65': { start: { line: 235, column: 2 }, end: { line: 237, column: 3 } },
                '66': { start: { line: 236, column: 4 }, end: { line: 236, column: 25 } },
                '67': { start: { line: 238, column: 2 }, end: { line: 240, column: 3 } },
                '68': { start: { line: 239, column: 4 }, end: { line: 239, column: 33 } },
                '69': { start: { line: 271, column: 0 }, end: { line: 308, column: 2 } },
                '70': { start: { line: 274, column: 14 }, end: { line: 301, column: 6 } },
                '71': { start: { line: 278, column: 14 }, end: { line: 278, column: 24 } },
                '72': { start: { line: 280, column: 14 }, end: { line: 280, column: 21 } },
                '73': { start: { line: 282, column: 14 }, end: { line: 282, column: 24 } },
                '74': { start: { line: 284, column: 4 }, end: { line: 300, column: 6 } },
                '75': { start: { line: 288, column: 8 }, end: { line: 288, column: 65 } },
                '76': { start: { line: 291, column: 8 }, end: { line: 291, column: 20 } },
                '77': { start: { line: 295, column: 8 }, end: { line: 295, column: 28 } },
                '78': { start: { line: 298, column: 8 }, end: { line: 298, column: 21 } },
                '79': { start: { line: 303, column: 2 }, end: { line: 303, column: 20 } },
                '80': { start: { line: 304, column: 2 }, end: { line: 304, column: 38 } },
                '81': { start: { line: 305, column: 2 }, end: { line: 307, column: 3 } },
                '82': { start: { line: 305, column: 15 }, end: { line: 305, column: 16 } },
                '83': { start: { line: 306, column: 4 }, end: { line: 306, column: 27 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 32, column: 22 }, end: { line: 32, column: 23 } },
                  loc: { start: { line: 32, column: 27 }, end: { line: 32, column: 62 } },
                  line: 32
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: {
                    start: { line: 101, column: 21 },
                    end: { line: 101, column: 22 }
                  },
                  loc: { start: { line: 101, column: 47 }, end: { line: 176, column: 1 } },
                  line: 101
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 234, column: 27 },
                    end: { line: 234, column: 28 }
                  },
                  loc: { start: { line: 234, column: 50 }, end: { line: 241, column: 1 } },
                  line: 234
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 271, column: 25 },
                    end: { line: 271, column: 26 }
                  },
                  loc: { start: { line: 271, column: 40 }, end: { line: 308, column: 1 } },
                  line: 271
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 274, column: 15 },
                    end: { line: 274, column: 16 }
                  },
                  loc: { start: { line: 274, column: 21 }, end: { line: 301, column: 3 } },
                  line: 274
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: { start: { line: 285, column: 6 }, end: { line: 285, column: 7 } },
                  loc: { start: { line: 285, column: 19 }, end: { line: 289, column: 7 } },
                  line: 285
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: { start: { line: 290, column: 6 }, end: { line: 290, column: 7 } },
                  loc: { start: { line: 290, column: 16 }, end: { line: 292, column: 7 } },
                  line: 290
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: { start: { line: 293, column: 6 }, end: { line: 293, column: 7 } },
                  loc: { start: { line: 293, column: 13 }, end: { line: 299, column: 7 } },
                  line: 293
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 101, column: 33 }, end: { line: 101, column: 38 } },
                  type: 'default-arg',
                  locations: [
                    { start: { line: 101, column: 37 }, end: { line: 101, column: 38 } }
                  ],
                  line: 101
                },
                '1': {
                  loc: { start: { line: 101, column: 40 }, end: { line: 101, column: 45 } },
                  type: 'default-arg',
                  locations: [
                    { start: { line: 101, column: 44 }, end: { line: 101, column: 45 } }
                  ],
                  line: 101
                },
                '2': {
                  loc: { start: { line: 102, column: 2 }, end: { line: 107, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 102, column: 2 }, end: { line: 107, column: 3 } },
                    { start: { line: 102, column: 2 }, end: { line: 107, column: 3 } }
                  ],
                  line: 102
                },
                '3': {
                  loc: { start: { line: 109, column: 2 }, end: { line: 111, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 109, column: 2 }, end: { line: 111, column: 3 } },
                    { start: { line: 109, column: 2 }, end: { line: 111, column: 3 } }
                  ],
                  line: 109
                },
                '4': {
                  loc: { start: { line: 112, column: 2 }, end: { line: 114, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 112, column: 2 }, end: { line: 114, column: 3 } },
                    { start: { line: 112, column: 2 }, end: { line: 114, column: 3 } }
                  ],
                  line: 112
                },
                '5': {
                  loc: { start: { line: 115, column: 2 }, end: { line: 117, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 115, column: 2 }, end: { line: 117, column: 3 } },
                    { start: { line: 115, column: 2 }, end: { line: 117, column: 3 } }
                  ],
                  line: 115
                },
                '6': {
                  loc: { start: { line: 162, column: 4 }, end: { line: 165, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 162, column: 4 }, end: { line: 165, column: 5 } },
                    { start: { line: 162, column: 4 }, end: { line: 165, column: 5 } }
                  ],
                  line: 162
                },
                '7': {
                  loc: { start: { line: 166, column: 4 }, end: { line: 169, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 166, column: 4 }, end: { line: 169, column: 5 } },
                    { start: { line: 166, column: 4 }, end: { line: 169, column: 5 } }
                  ],
                  line: 166
                },
                '8': {
                  loc: { start: { line: 170, column: 4 }, end: { line: 173, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 170, column: 4 }, end: { line: 173, column: 5 } },
                    { start: { line: 170, column: 4 }, end: { line: 173, column: 5 } }
                  ],
                  line: 170
                },
                '9': {
                  loc: { start: { line: 235, column: 2 }, end: { line: 237, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 235, column: 2 }, end: { line: 237, column: 3 } },
                    { start: { line: 235, column: 2 }, end: { line: 237, column: 3 } }
                  ],
                  line: 235
                },
                '10': {
                  loc: { start: { line: 238, column: 2 }, end: { line: 240, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 238, column: 2 }, end: { line: 240, column: 3 } },
                    { start: { line: 238, column: 2 }, end: { line: 240, column: 3 } }
                  ],
                  line: 238
                },
                '11': {
                  loc: { start: { line: 288, column: 20 }, end: { line: 288, column: 57 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 288, column: 34 }, end: { line: 288, column: 51 } },
                    { start: { line: 288, column: 54 }, end: { line: 288, column: 57 } }
                  ],
                  line: 288
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0
              },
              f: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0 },
              b: {
                '0': [0],
                '1': [0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: 'dba612adda1e8ab7495bc1d6218bf4045dfed1d2'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }

          var PERLIN_YWRAPB = (cov_16skfatzck.s[0]++, 4);
          var PERLIN_YWRAP = (cov_16skfatzck.s[1]++, 1 << PERLIN_YWRAPB);
          var PERLIN_ZWRAPB = (cov_16skfatzck.s[2]++, 8);
          var PERLIN_ZWRAP = (cov_16skfatzck.s[3]++, 1 << PERLIN_ZWRAPB);
          var PERLIN_SIZE = (cov_16skfatzck.s[4]++, 4095);

          var perlin_octaves = (cov_16skfatzck.s[5]++, 4); // default to medium smooth
          var perlin_amp_falloff = (cov_16skfatzck.s[6]++, 0.5); // 50% reduction/octave
          cov_16skfatzck.s[7]++;
          var scaled_cosine = function scaled_cosine(i) {
            cov_16skfatzck.f[0]++;
            cov_16skfatzck.s[8]++;
            return 0.5 * (1.0 - Math.cos(i * Math.PI));
          };

          var perlin; // will be initialized lazily by noise() or noiseSeed()

          /**
           * Returns the Perlin noise value at specified coordinates. Perlin noise is
           * a random sequence generator producing a more naturally ordered, harmonic
           * succession of numbers compared to the standard <b>random()</b> function.
           * It was invented by Ken Perlin in the 1980s and been used since in
           * graphical applications to produce procedural textures, natural motion,
           * shapes, terrains etc.<br /><br /> The main difference to the
           * <b>random()</b> function is that Perlin noise is defined in an infinite
           * n-dimensional space where each pair of coordinates corresponds to a
           * fixed semi-random value (fixed only for the lifespan of the program; see
           * the <a href="#/p5/noiseSeed">noiseSeed()</a> function). p5.js can compute 1D, 2D and 3D noise,
           * depending on the number of coordinates given. The resulting value will
           * always be between 0.0 and 1.0. The noise value can be animated by moving
           * through the noise space as demonstrated in the example above. The 2nd
           * and 3rd dimension can also be interpreted as time.<br /><br />The actual
           * noise is structured similar to an audio signal, in respect to the
           * function's use of frequencies. Similar to the concept of harmonics in
           * physics, perlin noise is computed over several octaves which are added
           * together for the final result. <br /><br />Another way to adjust the
           * character of the resulting sequence is the scale of the input
           * coordinates. As the function works within an infinite space the value of
           * the coordinates doesn't matter as such, only the distance between
           * successive coordinates does (eg. when using <b>noise()</b> within a
           * loop). As a general rule the smaller the difference between coordinates,
           * the smoother the resulting noise sequence will be. Steps of 0.005-0.03
           * work best for most applications, but this will differ depending on use.
           *
           * @method noise
           * @param  {Number} x   x-coordinate in noise space
           * @param  {Number} [y] y-coordinate in noise space
           * @param  {Number} [z] z-coordinate in noise space
           * @return {Number}     Perlin noise value (between 0 and 1) at specified
           *                      coordinates
           * @example
           * <div>
           * <code>
           * let xoff = 0.0;
           *
           * function draw() {
           *   background(204);
           *   xoff = xoff + 0.01;
           *   let n = noise(xoff) * width;
           *   line(n, 0, n, height);
           * }
           * </code>
           * </div>
           * <div>
           * <code>let noiseScale=0.02;
           *
           * function draw() {
           *   background(0);
           *   for (let x=0; x < width; x++) {
           *     let noiseVal = noise((mouseX+x)*noiseScale, mouseY*noiseScale);
           *     stroke(noiseVal*255);
           *     line(x, mouseY+noiseVal*80, x, height);
           *   }
           * }
           * </code>
           * </div>
           *
           * @alt
           * vertical line moves left to right with updating noise values.
           * horizontal wave pattern effected by mouse x-position & updating noise values.
           */ cov_16skfatzck.s[9]++;

          _main.default.prototype.noise = function(x) {
            var y =
              arguments.length > 1 && arguments[1] !== undefined
                ? arguments[1]
                : (cov_16skfatzck.b[0][0]++, 0);
            var z =
              arguments.length > 2 && arguments[2] !== undefined
                ? arguments[2]
                : (cov_16skfatzck.b[1][0]++, 0);
            cov_16skfatzck.f[1]++;
            cov_16skfatzck.s[10]++;
            if (perlin == null) {
              cov_16skfatzck.b[2][0]++;
              cov_16skfatzck.s[11]++;
              perlin = new Array(PERLIN_SIZE + 1);
              cov_16skfatzck.s[12]++;
              for (var i = (cov_16skfatzck.s[13]++, 0); i < PERLIN_SIZE + 1; i++) {
                cov_16skfatzck.s[14]++;
                perlin[i] = Math.random();
              }
            } else {
              cov_16skfatzck.b[2][1]++;
            }
            cov_16skfatzck.s[15]++;

            if (x < 0) {
              cov_16skfatzck.b[3][0]++;
              cov_16skfatzck.s[16]++;
              x = -x;
            } else {
              cov_16skfatzck.b[3][1]++;
            }
            cov_16skfatzck.s[17]++;
            if (y < 0) {
              cov_16skfatzck.b[4][0]++;
              cov_16skfatzck.s[18]++;
              y = -y;
            } else {
              cov_16skfatzck.b[4][1]++;
            }
            cov_16skfatzck.s[19]++;
            if (z < 0) {
              cov_16skfatzck.b[5][0]++;
              cov_16skfatzck.s[20]++;
              z = -z;
            } else {
              cov_16skfatzck.b[5][1]++;
            }

            var xi = (cov_16skfatzck.s[21]++, Math.floor(x)),
              yi = (cov_16skfatzck.s[22]++, Math.floor(y)),
              zi = (cov_16skfatzck.s[23]++, Math.floor(z));
            var xf = (cov_16skfatzck.s[24]++, x - xi);
            var yf = (cov_16skfatzck.s[25]++, y - yi);
            var zf = (cov_16skfatzck.s[26]++, z - zi);
            var rxf, ryf;

            var r = (cov_16skfatzck.s[27]++, 0);
            var ampl = (cov_16skfatzck.s[28]++, 0.5);

            var n1, n2, n3;
            cov_16skfatzck.s[29]++;

            for (var o = (cov_16skfatzck.s[30]++, 0); o < perlin_octaves; o++) {
              var of = (cov_16skfatzck.s[31]++,
              xi + (yi << PERLIN_YWRAPB) + (zi << PERLIN_ZWRAPB));
              cov_16skfatzck.s[32]++;

              rxf = scaled_cosine(xf);
              cov_16skfatzck.s[33]++;
              ryf = scaled_cosine(yf);
              cov_16skfatzck.s[34]++;

              n1 = perlin[of & PERLIN_SIZE];
              cov_16skfatzck.s[35]++;
              n1 += rxf * (perlin[(of + 1) & PERLIN_SIZE] - n1);
              cov_16skfatzck.s[36]++;
              n2 = perlin[(of + PERLIN_YWRAP) & PERLIN_SIZE];
              cov_16skfatzck.s[37]++;
              n2 += rxf * (perlin[(of + PERLIN_YWRAP + 1) & PERLIN_SIZE] - n2);
              cov_16skfatzck.s[38]++;
              n1 += ryf * (n2 - n1);
              cov_16skfatzck.s[39]++;

              of += PERLIN_ZWRAP;
              cov_16skfatzck.s[40]++;
              n2 = perlin[of & PERLIN_SIZE];
              cov_16skfatzck.s[41]++;
              n2 += rxf * (perlin[(of + 1) & PERLIN_SIZE] - n2);
              cov_16skfatzck.s[42]++;
              n3 = perlin[(of + PERLIN_YWRAP) & PERLIN_SIZE];
              cov_16skfatzck.s[43]++;
              n3 += rxf * (perlin[(of + PERLIN_YWRAP + 1) & PERLIN_SIZE] - n3);
              cov_16skfatzck.s[44]++;
              n2 += ryf * (n3 - n2);
              cov_16skfatzck.s[45]++;

              n1 += scaled_cosine(zf) * (n2 - n1);
              cov_16skfatzck.s[46]++;

              r += n1 * ampl;
              cov_16skfatzck.s[47]++;
              ampl *= perlin_amp_falloff;
              cov_16skfatzck.s[48]++;
              xi <<= 1;
              cov_16skfatzck.s[49]++;
              xf *= 2;
              cov_16skfatzck.s[50]++;
              yi <<= 1;
              cov_16skfatzck.s[51]++;
              yf *= 2;
              cov_16skfatzck.s[52]++;
              zi <<= 1;
              cov_16skfatzck.s[53]++;
              zf *= 2;
              cov_16skfatzck.s[54]++;

              if (xf >= 1.0) {
                cov_16skfatzck.b[6][0]++;
                cov_16skfatzck.s[55]++;
                xi++;
                cov_16skfatzck.s[56]++;
                xf--;
              } else {
                cov_16skfatzck.b[6][1]++;
              }
              cov_16skfatzck.s[57]++;
              if (yf >= 1.0) {
                cov_16skfatzck.b[7][0]++;
                cov_16skfatzck.s[58]++;
                yi++;
                cov_16skfatzck.s[59]++;
                yf--;
              } else {
                cov_16skfatzck.b[7][1]++;
              }
              cov_16skfatzck.s[60]++;
              if (zf >= 1.0) {
                cov_16skfatzck.b[8][0]++;
                cov_16skfatzck.s[61]++;
                zi++;
                cov_16skfatzck.s[62]++;
                zf--;
              } else {
                cov_16skfatzck.b[8][1]++;
              }
            }
            cov_16skfatzck.s[63]++;
            return r;
          };

          /**
           *
           * Adjusts the character and level of detail produced by the Perlin noise
           * function. Similar to harmonics in physics, noise is computed over
           * several octaves. Lower octaves contribute more to the output signal and
           * as such define the overall intensity of the noise, whereas higher octaves
           * create finer grained details in the noise sequence.
           *
           * By default, noise is computed over 4 octaves with each octave contributing
           * exactly half than its predecessor, starting at 50% strength for the 1st
           * octave. This falloff amount can be changed by adding an additional function
           * parameter. Eg. a falloff factor of 0.75 means each octave will now have
           * 75% impact (25% less) of the previous lower octave. Any value between
           * 0.0 and 1.0 is valid, however note that values greater than 0.5 might
           * result in greater than 1.0 values returned by <b>noise()</b>.
           *
           * By changing these parameters, the signal created by the <b>noise()</b>
           * function can be adapted to fit very specific needs and characteristics.
           *
           * @method noiseDetail
           * @param {Number} lod number of octaves to be used by the noise
           * @param {Number} falloff falloff factor for each octave
           * @example
           * <div>
           * <code>
           * let noiseVal;
           * let noiseScale = 0.02;
           *
           * function setup() {
           *   createCanvas(100, 100);
           * }
           *
           * function draw() {
           *   background(0);
           *   for (let y = 0; y < height; y++) {
           *     for (let x = 0; x < width / 2; x++) {
           *       noiseDetail(2, 0.2);
           *       noiseVal = noise((mouseX + x) * noiseScale, (mouseY + y) * noiseScale);
           *       stroke(noiseVal * 255);
           *       point(x, y);
           *       noiseDetail(8, 0.65);
           *       noiseVal = noise(
           *         (mouseX + x + width / 2) * noiseScale,
           *         (mouseY + y) * noiseScale
           *       );
           *       stroke(noiseVal * 255);
           *       point(x + width / 2, y);
           *     }
           *   }
           * }
           * </code>
           * </div>
           *
           * @alt
           * 2 vertical grey smokey patterns affected my mouse x-position and noise.
           */ cov_16skfatzck.s[64]++;
          _main.default.prototype.noiseDetail = function(lod, falloff) {
            cov_16skfatzck.f[2]++;
            cov_16skfatzck.s[65]++;
            if (lod > 0) {
              cov_16skfatzck.b[9][0]++;
              cov_16skfatzck.s[66]++;
              perlin_octaves = lod;
            } else {
              cov_16skfatzck.b[9][1]++;
            }
            cov_16skfatzck.s[67]++;
            if (falloff > 0) {
              cov_16skfatzck.b[10][0]++;
              cov_16skfatzck.s[68]++;
              perlin_amp_falloff = falloff;
            } else {
              cov_16skfatzck.b[10][1]++;
            }
          };

          /**
           * Sets the seed value for <b>noise()</b>. By default, <b>noise()</b>
           * produces different results each time the program is run. Set the
           * <b>value</b> parameter to a constant to return the same pseudo-random
           * numbers each time the software is run.
           *
           * @method noiseSeed
           * @param {Number} seed   the seed value
           * @example
           * <div>
           * <code>let xoff = 0.0;
           *
           * function setup() {
           *   noiseSeed(99);
           *   stroke(0, 10);
           * }
           *
           * function draw() {
           *   xoff = xoff + .01;
           *   let n = noise(xoff) * width;
           *   line(n, 0, n, height);
           * }
           * </code>
           * </div>
           *
           * @alt
           * vertical grey lines drawing in pattern affected by noise.
           */ cov_16skfatzck.s[69]++;
          _main.default.prototype.noiseSeed = function(seed) {
            cov_16skfatzck.f[3]++;
            // Linear Congruential Generator
            // Variant of a Lehman Generator
            var lcg = (cov_16skfatzck.s[70]++,
            (function() {
              cov_16skfatzck.f[4]++;
              // Set to values from http://en.wikipedia.org/wiki/Numerical_Recipes
              // m is basically chosen to be large (as it is the max period)
              // and for its relationships to a and c
              var m = (cov_16skfatzck.s[71]++, 4294967296);
              // a - 1 should be divisible by m's prime factors
              var a = (cov_16skfatzck.s[72]++, 1664525);
              // c and m should be co-prime
              var c = (cov_16skfatzck.s[73]++, 1013904223);
              var seed, z;
              cov_16skfatzck.s[74]++;
              return {
                setSeed: function setSeed(val) {
                  cov_16skfatzck.f[5]++;
                  cov_16skfatzck.s[75]++;
                  // pick a random seed if val is undefined or null
                  // the >>> 0 casts the seed to an unsigned 32-bit integer
                  z = seed =
                    (val == null
                      ? (cov_16skfatzck.b[11][0]++, Math.random() * m)
                      : (cov_16skfatzck.b[11][1]++, val)) >>> 0;
                },
                getSeed: function getSeed() {
                  cov_16skfatzck.f[6]++;
                  cov_16skfatzck.s[76]++;
                  return seed;
                },
                rand: function rand() {
                  cov_16skfatzck.f[7]++;
                  cov_16skfatzck.s[77]++;
                  // define the recurrence relationship
                  z = (a * z + c) % m;
                  // return a float in [0, 1)
                  // if z = m then z / m = 0 therefore (z % m) / m < 1 always
                  cov_16skfatzck.s[78]++;
                  return z / m;
                }
              };
            })());
            cov_16skfatzck.s[79]++;

            lcg.setSeed(seed);
            cov_16skfatzck.s[80]++;
            perlin = new Array(PERLIN_SIZE + 1);
            cov_16skfatzck.s[81]++;
            for (var i = (cov_16skfatzck.s[82]++, 0); i < PERLIN_SIZE + 1; i++) {
              cov_16skfatzck.s[83]++;
              perlin[i] = lcg.rand();
            }
          };
          var _default = _main.default;
          exports.default = _default;
        },
        { '../core/main': 283 }
      ],
      316: [
        function(_dereq_, module, exports) {
          'use strict';
          function _typeof(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof = function _typeof(obj) {
                return typeof obj;
              };
            } else {
              _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof(obj);
          }
          var cov_2fdba07wu0 = (function() {
            var path = '/Users/outofambit/src/p5.js/src/math/p5.Vector.js';
            var hash = '7af43a42e12fbccdb926ed90cabf721e175a87e6';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/math/p5.Vector.js',
              statementMap: {
                '0': { start: { line: 50, column: 0 }, end: { line: 80, column: 2 } },
                '1': { start: { line: 53, column: 2 }, end: { line: 64, column: 3 } },
                '2': { start: { line: 55, column: 4 }, end: { line: 55, column: 27 } },
                '3': { start: { line: 56, column: 4 }, end: { line: 56, column: 29 } },
                '4': { start: { line: 57, column: 4 }, end: { line: 57, column: 29 } },
                '5': { start: { line: 58, column: 4 }, end: { line: 58, column: 29 } },
                '6': { start: { line: 61, column: 4 }, end: { line: 61, column: 26 } },
                '7': { start: { line: 62, column: 4 }, end: { line: 62, column: 26 } },
                '8': { start: { line: 63, column: 4 }, end: { line: 63, column: 26 } },
                '9': { start: { line: 69, column: 2 }, end: { line: 69, column: 13 } },
                '10': { start: { line: 74, column: 2 }, end: { line: 74, column: 13 } },
                '11': { start: { line: 79, column: 2 }, end: { line: 79, column: 13 } },
                '12': { start: { line: 128, column: 0 }, end: { line: 130, column: 2 } },
                '13': { start: { line: 129, column: 2 }, end: { line: 129, column: 64 } },
                '14': { start: { line: 196, column: 0 }, end: { line: 213, column: 2 } },
                '15': { start: { line: 197, column: 2 }, end: { line: 202, column: 3 } },
                '16': { start: { line: 198, column: 4 }, end: { line: 198, column: 22 } },
                '17': { start: { line: 199, column: 4 }, end: { line: 199, column: 22 } },
                '18': { start: { line: 200, column: 4 }, end: { line: 200, column: 22 } },
                '19': { start: { line: 201, column: 4 }, end: { line: 201, column: 16 } },
                '20': { start: { line: 203, column: 2 }, end: { line: 208, column: 3 } },
                '21': { start: { line: 204, column: 4 }, end: { line: 204, column: 23 } },
                '22': { start: { line: 205, column: 4 }, end: { line: 205, column: 23 } },
                '23': { start: { line: 206, column: 4 }, end: { line: 206, column: 23 } },
                '24': { start: { line: 207, column: 4 }, end: { line: 207, column: 16 } },
                '25': { start: { line: 209, column: 2 }, end: { line: 209, column: 18 } },
                '26': { start: { line: 210, column: 2 }, end: { line: 210, column: 18 } },
                '27': { start: { line: 211, column: 2 }, end: { line: 211, column: 18 } },
                '28': { start: { line: 212, column: 2 }, end: { line: 212, column: 14 } },
                '29': { start: { line: 230, column: 0 }, end: { line: 236, column: 2 } },
                '30': { start: { line: 231, column: 2 }, end: { line: 235, column: 3 } },
                '31': { start: { line: 232, column: 4 }, end: { line: 232, column: 60 } },
                '32': { start: { line: 234, column: 4 }, end: { line: 234, column: 49 } },
                '33': { start: { line: 320, column: 0 }, end: { line: 337, column: 2 } },
                '34': { start: { line: 321, column: 2 }, end: { line: 326, column: 3 } },
                '35': { start: { line: 322, column: 4 }, end: { line: 322, column: 23 } },
                '36': { start: { line: 323, column: 4 }, end: { line: 323, column: 23 } },
                '37': { start: { line: 324, column: 4 }, end: { line: 324, column: 23 } },
                '38': { start: { line: 325, column: 4 }, end: { line: 325, column: 16 } },
                '39': { start: { line: 327, column: 2 }, end: { line: 332, column: 3 } },
                '40': { start: { line: 328, column: 4 }, end: { line: 328, column: 24 } },
                '41': { start: { line: 329, column: 4 }, end: { line: 329, column: 24 } },
                '42': { start: { line: 330, column: 4 }, end: { line: 330, column: 24 } },
                '43': { start: { line: 331, column: 4 }, end: { line: 331, column: 16 } },
                '44': { start: { line: 333, column: 2 }, end: { line: 333, column: 19 } },
                '45': { start: { line: 334, column: 2 }, end: { line: 334, column: 19 } },
                '46': { start: { line: 335, column: 2 }, end: { line: 335, column: 19 } },
                '47': { start: { line: 336, column: 2 }, end: { line: 336, column: 14 } },
                '48': { start: { line: 340, column: 29 }, end: { line: 348, column: 1 } },
                '49': { start: { line: 341, column: 2 }, end: { line: 343, column: 3 } },
                '50': { start: { line: 342, column: 4 }, end: { line: 342, column: 33 } },
                '51': { start: { line: 344, column: 2 }, end: { line: 346, column: 3 } },
                '52': { start: { line: 345, column: 4 }, end: { line: 345, column: 33 } },
                '53': { start: { line: 347, column: 2 }, end: { line: 347, column: 14 } },
                '54': { start: { line: 350, column: 29 }, end: { line: 361, column: 1 } },
                '55': { start: { line: 351, column: 2 }, end: { line: 353, column: 3 } },
                '56': { start: { line: 352, column: 4 }, end: { line: 352, column: 33 } },
                '57': { start: { line: 354, column: 2 }, end: { line: 356, column: 3 } },
                '58': { start: { line: 355, column: 4 }, end: { line: 355, column: 33 } },
                '59': { start: { line: 357, column: 2 }, end: { line: 359, column: 3 } },
                '60': { start: { line: 358, column: 4 }, end: { line: 358, column: 33 } },
                '61': { start: { line: 360, column: 2 }, end: { line: 360, column: 14 } },
                '62': { start: { line: 396, column: 0 }, end: { line: 444, column: 2 } },
                '63': { start: { line: 397, column: 2 }, end: { line: 443, column: 3 } },
                '64': { start: { line: 398, column: 4 }, end: { line: 403, column: 5 } },
                '65': { start: { line: 399, column: 25 }, end: { line: 399, column: 40 } },
                '66': { start: { line: 400, column: 25 }, end: { line: 400, column: 40 } },
                '67': { start: { line: 401, column: 25 }, end: { line: 401, column: 40 } },
                '68': { start: { line: 402, column: 6 }, end: { line: 402, column: 74 } },
                '69': { start: { line: 404, column: 9 }, end: { line: 443, column: 3 } },
                '70': { start: { line: 405, column: 4 }, end: { line: 412, column: 5 } },
                '71': { start: { line: 405, column: 27 }, end: { line: 405, column: 51 } },
                '72': { start: { line: 406, column: 6 }, end: { line: 408, column: 7 } },
                '73': { start: { line: 407, column: 8 }, end: { line: 407, column: 52 } },
                '74': { start: { line: 409, column: 6 }, end: { line: 411, column: 7 } },
                '75': { start: { line: 410, column: 8 }, end: { line: 410, column: 58 } },
                '76': { start: { line: 413, column: 9 }, end: { line: 443, column: 3 } },
                '77': { start: { line: 414, column: 4 }, end: { line: 419, column: 5 } },
                '78': { start: { line: 415, column: 6 }, end: { line: 415, column: 37 } },
                '79': { start: { line: 416, column: 6 }, end: { line: 416, column: 37 } },
                '80': { start: { line: 417, column: 6 }, end: { line: 417, column: 37 } },
                '81': { start: { line: 418, column: 6 }, end: { line: 418, column: 18 } },
                '82': { start: { line: 420, column: 9 }, end: { line: 443, column: 3 } },
                '83': { start: { line: 421, column: 29 }, end: { line: 421, column: 43 } },
                '84': { start: { line: 422, column: 4 }, end: { line: 430, column: 5 } },
                '85': { start: { line: 422, column: 42 }, end: { line: 422, column: 66 } },
                '86': { start: { line: 423, column: 6 }, end: { line: 429, column: 7 } },
                '87': { start: { line: 424, column: 8 }, end: { line: 428, column: 10 } },
                '88': { start: { line: 431, column: 9 }, end: { line: 443, column: 3 } },
                '89': { start: { line: 432, column: 29 }, end: { line: 432, column: 43 } },
                '90': { start: { line: 433, column: 4 }, end: { line: 442, column: 5 } },
                '91': { start: { line: 433, column: 42 }, end: { line: 433, column: 66 } },
                '92': { start: { line: 434, column: 6 }, end: { line: 441, column: 7 } },
                '93': { start: { line: 435, column: 8 }, end: { line: 440, column: 10 } },
                '94': { start: { line: 528, column: 0 }, end: { line: 545, column: 2 } },
                '95': { start: { line: 529, column: 2 }, end: { line: 534, column: 3 } },
                '96': { start: { line: 530, column: 4 }, end: { line: 530, column: 23 } },
                '97': { start: { line: 531, column: 4 }, end: { line: 531, column: 23 } },
                '98': { start: { line: 532, column: 4 }, end: { line: 532, column: 23 } },
                '99': { start: { line: 533, column: 4 }, end: { line: 533, column: 16 } },
                '100': { start: { line: 535, column: 2 }, end: { line: 540, column: 3 } },
                '101': { start: { line: 536, column: 4 }, end: { line: 536, column: 24 } },
                '102': { start: { line: 537, column: 4 }, end: { line: 537, column: 24 } },
                '103': { start: { line: 538, column: 4 }, end: { line: 538, column: 24 } },
                '104': { start: { line: 539, column: 4 }, end: { line: 539, column: 16 } },
                '105': { start: { line: 541, column: 2 }, end: { line: 541, column: 19 } },
                '106': { start: { line: 542, column: 2 }, end: { line: 542, column: 19 } },
                '107': { start: { line: 543, column: 2 }, end: { line: 543, column: 19 } },
                '108': { start: { line: 544, column: 2 }, end: { line: 544, column: 14 } },
                '109': { start: { line: 660, column: 0 }, end: { line: 737, column: 2 } },
                '110': { start: { line: 661, column: 2 }, end: { line: 683, column: 3 } },
                '111': { start: { line: 665, column: 4 }, end: { line: 681, column: 5 } },
                '112': { start: { line: 673, column: 6 }, end: { line: 673, column: 20 } },
                '113': { start: { line: 674, column: 6 }, end: { line: 674, column: 20 } },
                '114': { start: { line: 675, column: 6 }, end: { line: 675, column: 20 } },
                '115': { start: { line: 677, column: 6 }, end: { line: 680, column: 8 } },
                '116': { start: { line: 682, column: 4 }, end: { line: 682, column: 16 } },
                '117': { start: { line: 684, column: 2 }, end: { line: 708, column: 3 } },
                '118': { start: { line: 685, column: 4 }, end: { line: 706, column: 5 } },
                '119': { start: { line: 686, column: 25 }, end: { line: 686, column: 49 } },
                '120': { start: { line: 687, column: 25 }, end: { line: 687, column: 52 } },
                '121': { start: { line: 689, column: 6 }, end: { line: 700, column: 7 } },
                '122': { start: { line: 690, column: 8 }, end: { line: 690, column: 23 } },
                '123': { start: { line: 691, column: 8 }, end: { line: 691, column: 23 } },
                '124': { start: { line: 692, column: 8 }, end: { line: 692, column: 23 } },
                '125': { start: { line: 693, column: 13 }, end: { line: 700, column: 7 } },
                '126': { start: { line: 694, column: 8 }, end: { line: 694, column: 23 } },
                '127': { start: { line: 695, column: 8 }, end: { line: 695, column: 23 } },
                '128': { start: { line: 696, column: 13 }, end: { line: 700, column: 7 } },
                '129': { start: { line: 697, column: 8 }, end: { line: 697, column: 23 } },
                '130': { start: { line: 698, column: 8 }, end: { line: 698, column: 23 } },
                '131': { start: { line: 699, column: 8 }, end: { line: 699, column: 23 } },
                '132': { start: { line: 702, column: 6 }, end: { line: 705, column: 8 } },
                '133': { start: { line: 707, column: 4 }, end: { line: 707, column: 16 } },
                '134': { start: { line: 710, column: 27 }, end: { line: 710, column: 41 } },
                '135': { start: { line: 711, column: 2 }, end: { line: 734, column: 3 } },
                '136': { start: { line: 712, column: 38 }, end: { line: 712, column: 62 } },
                '137': { start: { line: 713, column: 38 }, end: { line: 713, column: 65 } },
                '138': { start: { line: 715, column: 4 }, end: { line: 719, column: 5 } },
                '139': { start: { line: 716, column: 6 }, end: { line: 716, column: 18 } },
                '140': { start: { line: 717, column: 6 }, end: { line: 717, column: 18 } },
                '141': { start: { line: 718, column: 6 }, end: { line: 718, column: 18 } },
                '142': { start: { line: 720, column: 4 }, end: { line: 723, column: 5 } },
                '143': { start: { line: 721, column: 6 }, end: { line: 721, column: 18 } },
                '144': { start: { line: 722, column: 6 }, end: { line: 722, column: 18 } },
                '145': { start: { line: 724, column: 4 }, end: { line: 728, column: 5 } },
                '146': { start: { line: 725, column: 6 }, end: { line: 725, column: 18 } },
                '147': { start: { line: 726, column: 6 }, end: { line: 726, column: 18 } },
                '148': { start: { line: 727, column: 6 }, end: { line: 727, column: 18 } },
                '149': { start: { line: 730, column: 4 }, end: { line: 733, column: 6 } },
                '150': { start: { line: 736, column: 2 }, end: { line: 736, column: 14 } },
                '151': { start: { line: 851, column: 0 }, end: { line: 943, column: 2 } },
                '152': { start: { line: 852, column: 2 }, end: { line: 878, column: 3 } },
                '153': { start: { line: 856, column: 4 }, end: { line: 876, column: 5 } },
                '154': { start: { line: 864, column: 6 }, end: { line: 867, column: 7 } },
                '155': { start: { line: 865, column: 8 }, end: { line: 865, column: 64 } },
                '156': { start: { line: 866, column: 8 }, end: { line: 866, column: 20 } },
                '157': { start: { line: 868, column: 6 }, end: { line: 868, column: 20 } },
                '158': { start: { line: 869, column: 6 }, end: { line: 869, column: 20 } },
                '159': { start: { line: 870, column: 6 }, end: { line: 870, column: 20 } },
                '160': { start: { line: 872, column: 6 }, end: { line: 875, column: 8 } },
                '161': { start: { line: 877, column: 4 }, end: { line: 877, column: 16 } },
                '162': { start: { line: 879, column: 2 }, end: { line: 909, column: 3 } },
                '163': { start: { line: 880, column: 4 }, end: { line: 906, column: 5 } },
                '164': { start: { line: 881, column: 25 }, end: { line: 881, column: 49 } },
                '165': { start: { line: 882, column: 25 }, end: { line: 882, column: 52 } },
                '166': { start: { line: 884, column: 6 }, end: { line: 887, column: 7 } },
                '167': { start: { line: 884, column: 28 }, end: { line: 884, column: 41 } },
                '168': { start: { line: 885, column: 8 }, end: { line: 885, column: 64 } },
                '169': { start: { line: 886, column: 8 }, end: { line: 886, column: 20 } },
                '170': { start: { line: 889, column: 6 }, end: { line: 900, column: 7 } },
                '171': { start: { line: 890, column: 8 }, end: { line: 890, column: 23 } },
                '172': { start: { line: 891, column: 8 }, end: { line: 891, column: 23 } },
                '173': { start: { line: 892, column: 8 }, end: { line: 892, column: 23 } },
                '174': { start: { line: 893, column: 13 }, end: { line: 900, column: 7 } },
                '175': { start: { line: 894, column: 8 }, end: { line: 894, column: 23 } },
                '176': { start: { line: 895, column: 8 }, end: { line: 895, column: 23 } },
                '177': { start: { line: 896, column: 13 }, end: { line: 900, column: 7 } },
                '178': { start: { line: 897, column: 8 }, end: { line: 897, column: 23 } },
                '179': { start: { line: 898, column: 8 }, end: { line: 898, column: 23 } },
                '180': { start: { line: 899, column: 8 }, end: { line: 899, column: 23 } },
                '181': { start: { line: 902, column: 6 }, end: { line: 905, column: 8 } },
                '182': { start: { line: 908, column: 4 }, end: { line: 908, column: 16 } },
                '183': { start: { line: 911, column: 27 }, end: { line: 911, column: 41 } },
                '184': { start: { line: 912, column: 2 }, end: { line: 940, column: 3 } },
                '185': { start: { line: 913, column: 38 }, end: { line: 913, column: 62 } },
                '186': { start: { line: 914, column: 38 }, end: { line: 914, column: 65 } },
                '187': { start: { line: 916, column: 4 }, end: { line: 919, column: 5 } },
                '188': { start: { line: 916, column: 41 }, end: { line: 916, column: 54 } },
                '189': { start: { line: 917, column: 6 }, end: { line: 917, column: 62 } },
                '190': { start: { line: 918, column: 6 }, end: { line: 918, column: 18 } },
                '191': { start: { line: 921, column: 4 }, end: { line: 925, column: 5 } },
                '192': { start: { line: 922, column: 6 }, end: { line: 922, column: 18 } },
                '193': { start: { line: 923, column: 6 }, end: { line: 923, column: 18 } },
                '194': { start: { line: 924, column: 6 }, end: { line: 924, column: 18 } },
                '195': { start: { line: 926, column: 4 }, end: { line: 929, column: 5 } },
                '196': { start: { line: 927, column: 6 }, end: { line: 927, column: 18 } },
                '197': { start: { line: 928, column: 6 }, end: { line: 928, column: 18 } },
                '198': { start: { line: 930, column: 4 }, end: { line: 934, column: 5 } },
                '199': { start: { line: 931, column: 6 }, end: { line: 931, column: 18 } },
                '200': { start: { line: 932, column: 6 }, end: { line: 932, column: 18 } },
                '201': { start: { line: 933, column: 6 }, end: { line: 933, column: 18 } },
                '202': { start: { line: 936, column: 4 }, end: { line: 939, column: 6 } },
                '203': { start: { line: 942, column: 2 }, end: { line: 942, column: 14 } },
                '204': { start: { line: 988, column: 0 }, end: { line: 990, column: 2 } },
                '205': { start: { line: 989, column: 2 }, end: { line: 989, column: 33 } },
                '206': { start: { line: 1039, column: 0 }, end: { line: 1044, column: 2 } },
                '207': {
                  start: { line: 1040, column: 12 },
                  end: { line: 1040, column: 18 }
                },
                '208': {
                  start: { line: 1041, column: 12 },
                  end: { line: 1041, column: 18 }
                },
                '209': {
                  start: { line: 1042, column: 12 },
                  end: { line: 1042, column: 18 }
                },
                '210': {
                  start: { line: 1043, column: 2 },
                  end: { line: 1043, column: 31 }
                },
                '211': { start: { line: 1081, column: 0 }, end: { line: 1086, column: 2 } },
                '212': { start: { line: 1082, column: 2 }, end: { line: 1084, column: 3 } },
                '213': {
                  start: { line: 1083, column: 4 },
                  end: { line: 1083, column: 35 }
                },
                '214': {
                  start: { line: 1085, column: 2 },
                  end: { line: 1085, column: 67 }
                },
                '215': { start: { line: 1119, column: 0 }, end: { line: 1128, column: 2 } },
                '216': {
                  start: { line: 1120, column: 12 },
                  end: { line: 1120, column: 39 }
                },
                '217': {
                  start: { line: 1121, column: 12 },
                  end: { line: 1121, column: 39 }
                },
                '218': {
                  start: { line: 1122, column: 12 },
                  end: { line: 1122, column: 39 }
                },
                '219': { start: { line: 1123, column: 2 }, end: { line: 1127, column: 3 } },
                '220': {
                  start: { line: 1124, column: 4 },
                  end: { line: 1124, column: 45 }
                },
                '221': {
                  start: { line: 1126, column: 4 },
                  end: { line: 1126, column: 34 }
                },
                '222': { start: { line: 1195, column: 0 }, end: { line: 1200, column: 2 } },
                '223': {
                  start: { line: 1196, column: 2 },
                  end: { line: 1199, column: 11 }
                },
                '224': { start: { line: 1264, column: 0 }, end: { line: 1270, column: 2 } },
                '225': {
                  start: { line: 1265, column: 14 },
                  end: { line: 1265, column: 24 }
                },
                '226': {
                  start: { line: 1268, column: 2 },
                  end: { line: 1268, column: 36 }
                },
                '227': {
                  start: { line: 1268, column: 17 },
                  end: { line: 1268, column: 36 }
                },
                '228': {
                  start: { line: 1269, column: 2 },
                  end: { line: 1269, column: 14 }
                },
                '229': { start: { line: 1321, column: 0 }, end: { line: 1328, column: 2 } },
                '230': {
                  start: { line: 1322, column: 14 },
                  end: { line: 1322, column: 26 }
                },
                '231': { start: { line: 1323, column: 2 }, end: { line: 1326, column: 3 } },
                '232': {
                  start: { line: 1324, column: 4 },
                  end: { line: 1325, column: 17 }
                },
                '233': {
                  start: { line: 1327, column: 2 },
                  end: { line: 1327, column: 14 }
                },
                '234': { start: { line: 1382, column: 0 }, end: { line: 1384, column: 2 } },
                '235': {
                  start: { line: 1383, column: 2 },
                  end: { line: 1383, column: 34 }
                },
                '236': { start: { line: 1452, column: 0 }, end: { line: 1456, column: 2 } },
                '237': {
                  start: { line: 1453, column: 12 },
                  end: { line: 1453, column: 38 }
                },
                '238': {
                  start: { line: 1454, column: 2 },
                  end: { line: 1454, column: 46 }
                },
                '239': {
                  start: { line: 1454, column: 15 },
                  end: { line: 1454, column: 46 }
                },
                '240': {
                  start: { line: 1455, column: 2 },
                  end: { line: 1455, column: 11 }
                },
                '241': { start: { line: 1476, column: 0 }, end: { line: 1481, column: 2 } },
                '242': {
                  start: { line: 1477, column: 10 },
                  end: { line: 1477, column: 20 }
                },
                '243': {
                  start: { line: 1478, column: 2 },
                  end: { line: 1478, column: 27 }
                },
                '244': {
                  start: { line: 1479, column: 2 },
                  end: { line: 1479, column: 27 }
                },
                '245': {
                  start: { line: 1480, column: 2 },
                  end: { line: 1480, column: 14 }
                },
                '246': { start: { line: 1543, column: 0 }, end: { line: 1550, column: 2 } },
                '247': {
                  start: { line: 1544, column: 19 },
                  end: { line: 1544, column: 37 }
                },
                '248': {
                  start: { line: 1545, column: 2 },
                  end: { line: 1545, column: 59 }
                },
                '249': {
                  start: { line: 1545, column: 15 },
                  end: { line: 1545, column: 59 }
                },
                '250': {
                  start: { line: 1546, column: 14 },
                  end: { line: 1546, column: 24 }
                },
                '251': {
                  start: { line: 1547, column: 2 },
                  end: { line: 1547, column: 38 }
                },
                '252': {
                  start: { line: 1548, column: 2 },
                  end: { line: 1548, column: 38 }
                },
                '253': {
                  start: { line: 1549, column: 2 },
                  end: { line: 1549, column: 14 }
                },
                '254': { start: { line: 1617, column: 0 }, end: { line: 1631, column: 2 } },
                '255': {
                  start: { line: 1618, column: 20 },
                  end: { line: 1618, column: 56 }
                },
                '256': {
                  start: { line: 1625, column: 2 },
                  end: { line: 1625, column: 58 }
                },
                '257': {
                  start: { line: 1626, column: 2 },
                  end: { line: 1626, column: 50 }
                },
                '258': { start: { line: 1627, column: 2 }, end: { line: 1629, column: 3 } },
                '259': {
                  start: { line: 1628, column: 4 },
                  end: { line: 1628, column: 40 }
                },
                '260': {
                  start: { line: 1630, column: 2 },
                  end: { line: 1630, column: 15 }
                },
                '261': { start: { line: 1711, column: 0 }, end: { line: 1719, column: 2 } },
                '262': { start: { line: 1712, column: 2 }, end: { line: 1714, column: 3 } },
                '263': {
                  start: { line: 1713, column: 4 },
                  end: { line: 1713, column: 39 }
                },
                '264': {
                  start: { line: 1715, column: 2 },
                  end: { line: 1715, column: 36 }
                },
                '265': {
                  start: { line: 1716, column: 2 },
                  end: { line: 1716, column: 36 }
                },
                '266': {
                  start: { line: 1717, column: 2 },
                  end: { line: 1717, column: 36 }
                },
                '267': {
                  start: { line: 1718, column: 2 },
                  end: { line: 1718, column: 14 }
                },
                '268': { start: { line: 1771, column: 0 }, end: { line: 1774, column: 2 } },
                '269': {
                  start: { line: 1772, column: 2 },
                  end: { line: 1772, column: 28 }
                },
                '270': {
                  start: { line: 1773, column: 2 },
                  end: { line: 1773, column: 67 }
                },
                '271': { start: { line: 1804, column: 0 }, end: { line: 1806, column: 2 } },
                '272': {
                  start: { line: 1805, column: 2 },
                  end: { line: 1805, column: 49 }
                },
                '273': { start: { line: 1843, column: 0 }, end: { line: 1859, column: 2 } },
                '274': { start: { line: 1845, column: 2 }, end: { line: 1857, column: 3 } },
                '275': {
                  start: { line: 1846, column: 4 },
                  end: { line: 1846, column: 17 }
                },
                '276': {
                  start: { line: 1847, column: 4 },
                  end: { line: 1847, column: 17 }
                },
                '277': {
                  start: { line: 1848, column: 4 },
                  end: { line: 1848, column: 17 }
                },
                '278': { start: { line: 1849, column: 9 }, end: { line: 1857, column: 3 } },
                '279': {
                  start: { line: 1850, column: 4 },
                  end: { line: 1850, column: 18 }
                },
                '280': {
                  start: { line: 1851, column: 4 },
                  end: { line: 1851, column: 18 }
                },
                '281': {
                  start: { line: 1852, column: 4 },
                  end: { line: 1852, column: 18 }
                },
                '282': {
                  start: { line: 1854, column: 4 },
                  end: { line: 1854, column: 15 }
                },
                '283': {
                  start: { line: 1855, column: 4 },
                  end: { line: 1855, column: 15 }
                },
                '284': {
                  start: { line: 1856, column: 4 },
                  end: { line: 1856, column: 15 }
                },
                '285': {
                  start: { line: 1858, column: 2 },
                  end: { line: 1858, column: 54 }
                },
                '286': { start: { line: 1907, column: 0 }, end: { line: 1912, column: 2 } },
                '287': { start: { line: 1908, column: 2 }, end: { line: 1910, column: 3 } },
                '288': {
                  start: { line: 1909, column: 4 },
                  end: { line: 1909, column: 15 }
                },
                '289': {
                  start: { line: 1911, column: 2 },
                  end: { line: 1911, column: 78 }
                },
                '290': { start: { line: 1947, column: 0 }, end: { line: 1961, column: 2 } },
                '291': { start: { line: 1948, column: 2 }, end: { line: 1950, column: 3 } },
                '292': {
                  start: { line: 1949, column: 4 },
                  end: { line: 1949, column: 15 }
                },
                '293': {
                  start: { line: 1951, column: 17 },
                  end: { line: 1951, column: 30 }
                },
                '294': {
                  start: { line: 1952, column: 17 },
                  end: { line: 1952, column: 30 }
                },
                '295': {
                  start: { line: 1953, column: 19 },
                  end: { line: 1953, column: 34 }
                },
                '296': {
                  start: { line: 1954, column: 19 },
                  end: { line: 1954, column: 34 }
                },
                '297': { start: { line: 1956, column: 2 }, end: { line: 1960, column: 4 } },
                '298': { start: { line: 2012, column: 0 }, end: { line: 2014, column: 2 } },
                '299': {
                  start: { line: 2013, column: 2 },
                  end: { line: 2013, column: 58 }
                },
                '300': { start: { line: 2034, column: 0 }, end: { line: 2041, column: 2 } },
                '301': {
                  start: { line: 2035, column: 16 },
                  end: { line: 2035, column: 48 }
                },
                '302': {
                  start: { line: 2036, column: 13 },
                  end: { line: 2036, column: 34 }
                },
                '303': {
                  start: { line: 2037, column: 17 },
                  end: { line: 2037, column: 39 }
                },
                '304': {
                  start: { line: 2038, column: 13 },
                  end: { line: 2038, column: 37 }
                },
                '305': {
                  start: { line: 2039, column: 13 },
                  end: { line: 2039, column: 37 }
                },
                '306': {
                  start: { line: 2040, column: 2 },
                  end: { line: 2040, column: 35 }
                },
                '307': { start: { line: 2053, column: 0 }, end: { line: 2067, column: 2 } },
                '308': { start: { line: 2054, column: 2 }, end: { line: 2064, column: 3 } },
                '309': {
                  start: { line: 2055, column: 4 },
                  end: { line: 2055, column: 23 }
                },
                '310': { start: { line: 2056, column: 4 }, end: { line: 2061, column: 5 } },
                '311': { start: { line: 2057, column: 6 }, end: { line: 2060, column: 8 } },
                '312': {
                  start: { line: 2063, column: 4 },
                  end: { line: 2063, column: 19 }
                },
                '313': {
                  start: { line: 2065, column: 2 },
                  end: { line: 2065, column: 17 }
                },
                '314': {
                  start: { line: 2066, column: 2 },
                  end: { line: 2066, column: 16 }
                },
                '315': { start: { line: 2083, column: 0 }, end: { line: 2089, column: 2 } },
                '316': { start: { line: 2084, column: 2 }, end: { line: 2088, column: 3 } },
                '317': {
                  start: { line: 2085, column: 17 },
                  end: { line: 2085, column: 26 }
                },
                '318': {
                  start: { line: 2086, column: 4 },
                  end: { line: 2086, column: 19 }
                },
                '319': {
                  start: { line: 2087, column: 4 },
                  end: { line: 2087, column: 18 }
                },
                '320': { start: { line: 2104, column: 0 }, end: { line: 2118, column: 2 } },
                '321': { start: { line: 2105, column: 2 }, end: { line: 2115, column: 3 } },
                '322': {
                  start: { line: 2106, column: 4 },
                  end: { line: 2106, column: 23 }
                },
                '323': { start: { line: 2107, column: 4 }, end: { line: 2112, column: 5 } },
                '324': { start: { line: 2108, column: 6 }, end: { line: 2111, column: 8 } },
                '325': {
                  start: { line: 2114, column: 4 },
                  end: { line: 2114, column: 19 }
                },
                '326': {
                  start: { line: 2116, column: 2 },
                  end: { line: 2116, column: 17 }
                },
                '327': {
                  start: { line: 2117, column: 2 },
                  end: { line: 2117, column: 16 }
                },
                '328': { start: { line: 2156, column: 0 }, end: { line: 2170, column: 2 } },
                '329': { start: { line: 2157, column: 2 }, end: { line: 2167, column: 3 } },
                '330': {
                  start: { line: 2158, column: 4 },
                  end: { line: 2158, column: 22 }
                },
                '331': { start: { line: 2159, column: 4 }, end: { line: 2164, column: 5 } },
                '332': { start: { line: 2160, column: 6 }, end: { line: 2163, column: 8 } },
                '333': {
                  start: { line: 2166, column: 4 },
                  end: { line: 2166, column: 18 }
                },
                '334': {
                  start: { line: 2168, column: 2 },
                  end: { line: 2168, column: 17 }
                },
                '335': {
                  start: { line: 2169, column: 2 },
                  end: { line: 2169, column: 16 }
                },
                '336': { start: { line: 2183, column: 0 }, end: { line: 2197, column: 2 } },
                '337': { start: { line: 2184, column: 2 }, end: { line: 2194, column: 3 } },
                '338': {
                  start: { line: 2185, column: 4 },
                  end: { line: 2185, column: 22 }
                },
                '339': { start: { line: 2187, column: 4 }, end: { line: 2192, column: 5 } },
                '340': { start: { line: 2188, column: 6 }, end: { line: 2191, column: 8 } },
                '341': {
                  start: { line: 2193, column: 4 },
                  end: { line: 2193, column: 18 }
                },
                '342': {
                  start: { line: 2195, column: 2 },
                  end: { line: 2195, column: 19 }
                },
                '343': {
                  start: { line: 2196, column: 2 },
                  end: { line: 2196, column: 16 }
                },
                '344': { start: { line: 2235, column: 0 }, end: { line: 2250, column: 2 } },
                '345': { start: { line: 2236, column: 2 }, end: { line: 2247, column: 3 } },
                '346': {
                  start: { line: 2237, column: 4 },
                  end: { line: 2237, column: 22 }
                },
                '347': { start: { line: 2239, column: 4 }, end: { line: 2244, column: 5 } },
                '348': { start: { line: 2240, column: 6 }, end: { line: 2243, column: 8 } },
                '349': {
                  start: { line: 2246, column: 4 },
                  end: { line: 2246, column: 18 }
                },
                '350': {
                  start: { line: 2248, column: 2 },
                  end: { line: 2248, column: 16 }
                },
                '351': {
                  start: { line: 2249, column: 2 },
                  end: { line: 2249, column: 16 }
                },
                '352': { start: { line: 2262, column: 0 }, end: { line: 2264, column: 2 } },
                '353': {
                  start: { line: 2263, column: 2 },
                  end: { line: 2263, column: 20 }
                },
                '354': { start: { line: 2276, column: 0 }, end: { line: 2278, column: 2 } },
                '355': {
                  start: { line: 2277, column: 2 },
                  end: { line: 2277, column: 22 }
                },
                '356': { start: { line: 2291, column: 0 }, end: { line: 2293, column: 2 } },
                '357': {
                  start: { line: 2292, column: 2 },
                  end: { line: 2292, column: 21 }
                },
                '358': { start: { line: 2308, column: 0 }, end: { line: 2322, column: 2 } },
                '359': { start: { line: 2309, column: 2 }, end: { line: 2319, column: 3 } },
                '360': {
                  start: { line: 2310, column: 4 },
                  end: { line: 2310, column: 23 }
                },
                '361': { start: { line: 2311, column: 4 }, end: { line: 2316, column: 5 } },
                '362': { start: { line: 2312, column: 6 }, end: { line: 2315, column: 8 } },
                '363': {
                  start: { line: 2318, column: 4 },
                  end: { line: 2318, column: 19 }
                },
                '364': {
                  start: { line: 2320, column: 2 },
                  end: { line: 2320, column: 23 }
                },
                '365': {
                  start: { line: 2321, column: 2 },
                  end: { line: 2321, column: 16 }
                },
                '366': { start: { line: 2334, column: 0 }, end: { line: 2340, column: 2 } },
                '367': {
                  start: { line: 2335, column: 12 },
                  end: { line: 2335, column: 18 }
                },
                '368': {
                  start: { line: 2336, column: 8 },
                  end: { line: 2336, column: 14 }
                },
                '369': {
                  start: { line: 2337, column: 8 },
                  end: { line: 2337, column: 14 }
                },
                '370': {
                  start: { line: 2338, column: 16 },
                  end: { line: 2338, column: 37 }
                },
                '371': {
                  start: { line: 2339, column: 2 },
                  end: { line: 2339, column: 26 }
                },
                '372': { start: { line: 2352, column: 0 }, end: { line: 2365, column: 2 } },
                '373': { start: { line: 2353, column: 2 }, end: { line: 2363, column: 3 } },
                '374': {
                  start: { line: 2354, column: 4 },
                  end: { line: 2354, column: 22 }
                },
                '375': { start: { line: 2356, column: 4 }, end: { line: 2361, column: 5 } },
                '376': { start: { line: 2357, column: 6 }, end: { line: 2360, column: 8 } },
                '377': {
                  start: { line: 2362, column: 4 },
                  end: { line: 2362, column: 18 }
                },
                '378': { start: { line: 2364, column: 2 }, end: { line: 2364, column: 28 } }
              },
              fnMap: {
                '0': {
                  name: 'Vector',
                  decl: { start: { line: 50, column: 21 }, end: { line: 50, column: 27 } },
                  loc: { start: { line: 50, column: 30 }, end: { line: 80, column: 1 } },
                  line: 50
                },
                '1': {
                  name: 'p5VectorToString',
                  decl: {
                    start: { line: 128, column: 40 },
                    end: { line: 128, column: 56 }
                  },
                  loc: { start: { line: 128, column: 59 }, end: { line: 130, column: 1 } },
                  line: 128
                },
                '2': {
                  name: 'set',
                  decl: {
                    start: { line: 196, column: 35 },
                    end: { line: 196, column: 38 }
                  },
                  loc: { start: { line: 196, column: 48 }, end: { line: 213, column: 1 } },
                  line: 196
                },
                '3': {
                  name: 'copy',
                  decl: {
                    start: { line: 230, column: 36 },
                    end: { line: 230, column: 40 }
                  },
                  loc: { start: { line: 230, column: 43 }, end: { line: 236, column: 1 } },
                  line: 230
                },
                '4': {
                  name: 'add',
                  decl: {
                    start: { line: 320, column: 35 },
                    end: { line: 320, column: 38 }
                  },
                  loc: { start: { line: 320, column: 48 }, end: { line: 337, column: 1 } },
                  line: 320
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 340, column: 29 },
                    end: { line: 340, column: 30 }
                  },
                  loc: { start: { line: 340, column: 62 }, end: { line: 348, column: 1 } },
                  line: 340
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 350, column: 29 },
                    end: { line: 350, column: 30 }
                  },
                  loc: { start: { line: 350, column: 74 }, end: { line: 361, column: 1 } },
                  line: 350
                },
                '7': {
                  name: 'rem',
                  decl: {
                    start: { line: 396, column: 35 },
                    end: { line: 396, column: 38 }
                  },
                  loc: { start: { line: 396, column: 48 }, end: { line: 444, column: 1 } },
                  line: 396
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 405, column: 16 },
                    end: { line: 405, column: 17 }
                  },
                  loc: { start: { line: 405, column: 27 }, end: { line: 405, column: 51 } },
                  line: 405
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 422, column: 31 },
                    end: { line: 422, column: 32 }
                  },
                  loc: { start: { line: 422, column: 42 }, end: { line: 422, column: 66 } },
                  line: 422
                },
                '10': {
                  name: '(anonymous_10)',
                  decl: {
                    start: { line: 433, column: 31 },
                    end: { line: 433, column: 32 }
                  },
                  loc: { start: { line: 433, column: 42 }, end: { line: 433, column: 66 } },
                  line: 433
                },
                '11': {
                  name: 'sub',
                  decl: {
                    start: { line: 528, column: 35 },
                    end: { line: 528, column: 38 }
                  },
                  loc: { start: { line: 528, column: 48 }, end: { line: 545, column: 1 } },
                  line: 528
                },
                '12': {
                  name: 'mult',
                  decl: {
                    start: { line: 660, column: 36 },
                    end: { line: 660, column: 40 }
                  },
                  loc: { start: { line: 660, column: 50 }, end: { line: 737, column: 1 } },
                  line: 660
                },
                '13': {
                  name: '(anonymous_13)',
                  decl: {
                    start: { line: 686, column: 14 },
                    end: { line: 686, column: 15 }
                  },
                  loc: { start: { line: 686, column: 25 }, end: { line: 686, column: 49 } },
                  line: 686
                },
                '14': {
                  name: '(anonymous_14)',
                  decl: {
                    start: { line: 687, column: 14 },
                    end: { line: 687, column: 15 }
                  },
                  loc: { start: { line: 687, column: 25 }, end: { line: 687, column: 52 } },
                  line: 687
                },
                '15': {
                  name: '(anonymous_15)',
                  decl: {
                    start: { line: 712, column: 27 },
                    end: { line: 712, column: 28 }
                  },
                  loc: { start: { line: 712, column: 38 }, end: { line: 712, column: 62 } },
                  line: 712
                },
                '16': {
                  name: '(anonymous_16)',
                  decl: {
                    start: { line: 713, column: 27 },
                    end: { line: 713, column: 28 }
                  },
                  loc: { start: { line: 713, column: 38 }, end: { line: 713, column: 65 } },
                  line: 713
                },
                '17': {
                  name: 'div',
                  decl: {
                    start: { line: 851, column: 35 },
                    end: { line: 851, column: 38 }
                  },
                  loc: { start: { line: 851, column: 48 }, end: { line: 943, column: 1 } },
                  line: 851
                },
                '18': {
                  name: '(anonymous_18)',
                  decl: {
                    start: { line: 881, column: 14 },
                    end: { line: 881, column: 15 }
                  },
                  loc: { start: { line: 881, column: 25 }, end: { line: 881, column: 49 } },
                  line: 881
                },
                '19': {
                  name: '(anonymous_19)',
                  decl: {
                    start: { line: 882, column: 14 },
                    end: { line: 882, column: 15 }
                  },
                  loc: { start: { line: 882, column: 25 }, end: { line: 882, column: 52 } },
                  line: 882
                },
                '20': {
                  name: '(anonymous_20)',
                  decl: {
                    start: { line: 884, column: 17 },
                    end: { line: 884, column: 18 }
                  },
                  loc: { start: { line: 884, column: 28 }, end: { line: 884, column: 41 } },
                  line: 884
                },
                '21': {
                  name: '(anonymous_21)',
                  decl: {
                    start: { line: 913, column: 27 },
                    end: { line: 913, column: 28 }
                  },
                  loc: { start: { line: 913, column: 38 }, end: { line: 913, column: 62 } },
                  line: 913
                },
                '22': {
                  name: '(anonymous_22)',
                  decl: {
                    start: { line: 914, column: 27 },
                    end: { line: 914, column: 28 }
                  },
                  loc: { start: { line: 914, column: 38 }, end: { line: 914, column: 65 } },
                  line: 914
                },
                '23': {
                  name: '(anonymous_23)',
                  decl: {
                    start: { line: 916, column: 30 },
                    end: { line: 916, column: 31 }
                  },
                  loc: { start: { line: 916, column: 41 }, end: { line: 916, column: 54 } },
                  line: 916
                },
                '24': {
                  name: 'mag',
                  decl: {
                    start: { line: 988, column: 35 },
                    end: { line: 988, column: 38 }
                  },
                  loc: { start: { line: 988, column: 41 }, end: { line: 990, column: 1 } },
                  line: 988
                },
                '25': {
                  name: 'magSq',
                  decl: {
                    start: { line: 1039, column: 37 },
                    end: { line: 1039, column: 42 }
                  },
                  loc: {
                    start: { line: 1039, column: 45 },
                    end: { line: 1044, column: 1 }
                  },
                  line: 1039
                },
                '26': {
                  name: 'dot',
                  decl: {
                    start: { line: 1081, column: 35 },
                    end: { line: 1081, column: 38 }
                  },
                  loc: {
                    start: { line: 1081, column: 48 },
                    end: { line: 1086, column: 1 }
                  },
                  line: 1081
                },
                '27': {
                  name: 'cross',
                  decl: {
                    start: { line: 1119, column: 37 },
                    end: { line: 1119, column: 42 }
                  },
                  loc: {
                    start: { line: 1119, column: 46 },
                    end: { line: 1128, column: 1 }
                  },
                  line: 1119
                },
                '28': {
                  name: 'dist',
                  decl: {
                    start: { line: 1195, column: 36 },
                    end: { line: 1195, column: 40 }
                  },
                  loc: {
                    start: { line: 1195, column: 44 },
                    end: { line: 1200, column: 1 }
                  },
                  line: 1195
                },
                '29': {
                  name: 'normalize',
                  decl: {
                    start: { line: 1264, column: 41 },
                    end: { line: 1264, column: 50 }
                  },
                  loc: {
                    start: { line: 1264, column: 53 },
                    end: { line: 1270, column: 1 }
                  },
                  line: 1264
                },
                '30': {
                  name: 'limit',
                  decl: {
                    start: { line: 1321, column: 37 },
                    end: { line: 1321, column: 42 }
                  },
                  loc: {
                    start: { line: 1321, column: 48 },
                    end: { line: 1328, column: 1 }
                  },
                  line: 1321
                },
                '31': {
                  name: 'setMag',
                  decl: {
                    start: { line: 1382, column: 38 },
                    end: { line: 1382, column: 44 }
                  },
                  loc: {
                    start: { line: 1382, column: 48 },
                    end: { line: 1384, column: 1 }
                  },
                  line: 1382
                },
                '32': {
                  name: 'heading',
                  decl: {
                    start: { line: 1452, column: 39 },
                    end: { line: 1452, column: 46 }
                  },
                  loc: {
                    start: { line: 1452, column: 49 },
                    end: { line: 1456, column: 1 }
                  },
                  line: 1452
                },
                '33': {
                  name: 'setHeading',
                  decl: {
                    start: { line: 1476, column: 42 },
                    end: { line: 1476, column: 52 }
                  },
                  loc: {
                    start: { line: 1476, column: 56 },
                    end: { line: 1481, column: 1 }
                  },
                  line: 1476
                },
                '34': {
                  name: 'rotate',
                  decl: {
                    start: { line: 1543, column: 38 },
                    end: { line: 1543, column: 44 }
                  },
                  loc: {
                    start: { line: 1543, column: 48 },
                    end: { line: 1550, column: 1 }
                  },
                  line: 1543
                },
                '35': {
                  name: 'angleBetween',
                  decl: {
                    start: { line: 1617, column: 44 },
                    end: { line: 1617, column: 56 }
                  },
                  loc: {
                    start: { line: 1617, column: 60 },
                    end: { line: 1631, column: 1 }
                  },
                  line: 1617
                },
                '36': {
                  name: 'lerp',
                  decl: {
                    start: { line: 1711, column: 36 },
                    end: { line: 1711, column: 40 }
                  },
                  loc: {
                    start: { line: 1711, column: 55 },
                    end: { line: 1719, column: 1 }
                  },
                  line: 1711
                },
                '37': {
                  name: 'reflect',
                  decl: {
                    start: { line: 1771, column: 39 },
                    end: { line: 1771, column: 46 }
                  },
                  loc: {
                    start: { line: 1771, column: 62 },
                    end: { line: 1774, column: 1 }
                  },
                  line: 1771
                },
                '38': {
                  name: 'array',
                  decl: {
                    start: { line: 1804, column: 37 },
                    end: { line: 1804, column: 42 }
                  },
                  loc: {
                    start: { line: 1804, column: 45 },
                    end: { line: 1806, column: 1 }
                  },
                  line: 1804
                },
                '39': {
                  name: 'equals',
                  decl: {
                    start: { line: 1843, column: 38 },
                    end: { line: 1843, column: 44 }
                  },
                  loc: {
                    start: { line: 1843, column: 54 },
                    end: { line: 1859, column: 1 }
                  },
                  line: 1843
                },
                '40': {
                  name: 'fromAngle',
                  decl: {
                    start: { line: 1907, column: 31 },
                    end: { line: 1907, column: 40 }
                  },
                  loc: {
                    start: { line: 1907, column: 56 },
                    end: { line: 1912, column: 1 }
                  },
                  line: 1907
                },
                '41': {
                  name: '(anonymous_41)',
                  decl: {
                    start: { line: 1947, column: 23 },
                    end: { line: 1947, column: 24 }
                  },
                  loc: {
                    start: { line: 1947, column: 52 },
                    end: { line: 1961, column: 1 }
                  },
                  line: 1947
                },
                '42': {
                  name: 'random2D',
                  decl: {
                    start: { line: 2012, column: 30 },
                    end: { line: 2012, column: 38 }
                  },
                  loc: {
                    start: { line: 2012, column: 41 },
                    end: { line: 2014, column: 1 }
                  },
                  line: 2012
                },
                '43': {
                  name: 'random3D',
                  decl: {
                    start: { line: 2034, column: 30 },
                    end: { line: 2034, column: 38 }
                  },
                  loc: {
                    start: { line: 2034, column: 41 },
                    end: { line: 2041, column: 1 }
                  },
                  line: 2034
                },
                '44': {
                  name: 'add',
                  decl: {
                    start: { line: 2053, column: 25 },
                    end: { line: 2053, column: 28 }
                  },
                  loc: {
                    start: { line: 2053, column: 45 },
                    end: { line: 2067, column: 1 }
                  },
                  line: 2053
                },
                '45': {
                  name: 'rem',
                  decl: {
                    start: { line: 2083, column: 25 },
                    end: { line: 2083, column: 28 }
                  },
                  loc: {
                    start: { line: 2083, column: 37 },
                    end: { line: 2089, column: 1 }
                  },
                  line: 2083
                },
                '46': {
                  name: 'sub',
                  decl: {
                    start: { line: 2104, column: 25 },
                    end: { line: 2104, column: 28 }
                  },
                  loc: {
                    start: { line: 2104, column: 45 },
                    end: { line: 2118, column: 1 }
                  },
                  line: 2104
                },
                '47': {
                  name: 'mult',
                  decl: {
                    start: { line: 2156, column: 26 },
                    end: { line: 2156, column: 30 }
                  },
                  loc: {
                    start: { line: 2156, column: 45 },
                    end: { line: 2170, column: 1 }
                  },
                  line: 2156
                },
                '48': {
                  name: 'rotate',
                  decl: {
                    start: { line: 2183, column: 28 },
                    end: { line: 2183, column: 34 }
                  },
                  loc: {
                    start: { line: 2183, column: 49 },
                    end: { line: 2197, column: 1 }
                  },
                  line: 2183
                },
                '49': {
                  name: 'div',
                  decl: {
                    start: { line: 2235, column: 25 },
                    end: { line: 2235, column: 28 }
                  },
                  loc: {
                    start: { line: 2235, column: 43 },
                    end: { line: 2250, column: 1 }
                  },
                  line: 2235
                },
                '50': {
                  name: 'dot',
                  decl: {
                    start: { line: 2262, column: 25 },
                    end: { line: 2262, column: 28 }
                  },
                  loc: {
                    start: { line: 2262, column: 37 },
                    end: { line: 2264, column: 1 }
                  },
                  line: 2262
                },
                '51': {
                  name: 'cross',
                  decl: {
                    start: { line: 2276, column: 27 },
                    end: { line: 2276, column: 32 }
                  },
                  loc: {
                    start: { line: 2276, column: 41 },
                    end: { line: 2278, column: 1 }
                  },
                  line: 2276
                },
                '52': {
                  name: 'dist',
                  decl: {
                    start: { line: 2291, column: 26 },
                    end: { line: 2291, column: 30 }
                  },
                  loc: {
                    start: { line: 2291, column: 39 },
                    end: { line: 2293, column: 1 }
                  },
                  line: 2291
                },
                '53': {
                  name: 'lerp',
                  decl: {
                    start: { line: 2308, column: 26 },
                    end: { line: 2308, column: 30 }
                  },
                  loc: {
                    start: { line: 2308, column: 52 },
                    end: { line: 2322, column: 1 }
                  },
                  line: 2308
                },
                '54': {
                  name: 'mag',
                  decl: {
                    start: { line: 2334, column: 25 },
                    end: { line: 2334, column: 28 }
                  },
                  loc: {
                    start: { line: 2334, column: 35 },
                    end: { line: 2340, column: 1 }
                  },
                  line: 2334
                },
                '55': {
                  name: 'normalize',
                  decl: {
                    start: { line: 2352, column: 31 },
                    end: { line: 2352, column: 40 }
                  },
                  loc: {
                    start: { line: 2352, column: 52 },
                    end: { line: 2365, column: 1 }
                  },
                  line: 2352
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 53, column: 2 }, end: { line: 64, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 53, column: 2 }, end: { line: 64, column: 3 } },
                    { start: { line: 53, column: 2 }, end: { line: 64, column: 3 } }
                  ],
                  line: 53
                },
                '1': {
                  loc: { start: { line: 56, column: 8 }, end: { line: 56, column: 28 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 56, column: 8 }, end: { line: 56, column: 23 } },
                    { start: { line: 56, column: 27 }, end: { line: 56, column: 28 } }
                  ],
                  line: 56
                },
                '2': {
                  loc: { start: { line: 57, column: 8 }, end: { line: 57, column: 28 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 57, column: 8 }, end: { line: 57, column: 23 } },
                    { start: { line: 57, column: 27 }, end: { line: 57, column: 28 } }
                  ],
                  line: 57
                },
                '3': {
                  loc: { start: { line: 58, column: 8 }, end: { line: 58, column: 28 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 58, column: 8 }, end: { line: 58, column: 23 } },
                    { start: { line: 58, column: 27 }, end: { line: 58, column: 28 } }
                  ],
                  line: 58
                },
                '4': {
                  loc: { start: { line: 61, column: 8 }, end: { line: 61, column: 25 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 61, column: 8 }, end: { line: 61, column: 20 } },
                    { start: { line: 61, column: 24 }, end: { line: 61, column: 25 } }
                  ],
                  line: 61
                },
                '5': {
                  loc: { start: { line: 62, column: 8 }, end: { line: 62, column: 25 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 62, column: 8 }, end: { line: 62, column: 20 } },
                    { start: { line: 62, column: 24 }, end: { line: 62, column: 25 } }
                  ],
                  line: 62
                },
                '6': {
                  loc: { start: { line: 63, column: 8 }, end: { line: 63, column: 25 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 63, column: 8 }, end: { line: 63, column: 20 } },
                    { start: { line: 63, column: 24 }, end: { line: 63, column: 25 } }
                  ],
                  line: 63
                },
                '7': {
                  loc: { start: { line: 197, column: 2 }, end: { line: 202, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 197, column: 2 }, end: { line: 202, column: 3 } },
                    { start: { line: 197, column: 2 }, end: { line: 202, column: 3 } }
                  ],
                  line: 197
                },
                '8': {
                  loc: { start: { line: 198, column: 13 }, end: { line: 198, column: 21 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 198, column: 13 }, end: { line: 198, column: 16 } },
                    { start: { line: 198, column: 20 }, end: { line: 198, column: 21 } }
                  ],
                  line: 198
                },
                '9': {
                  loc: { start: { line: 199, column: 13 }, end: { line: 199, column: 21 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 199, column: 13 }, end: { line: 199, column: 16 } },
                    { start: { line: 199, column: 20 }, end: { line: 199, column: 21 } }
                  ],
                  line: 199
                },
                '10': {
                  loc: { start: { line: 200, column: 13 }, end: { line: 200, column: 21 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 200, column: 13 }, end: { line: 200, column: 16 } },
                    { start: { line: 200, column: 20 }, end: { line: 200, column: 21 } }
                  ],
                  line: 200
                },
                '11': {
                  loc: { start: { line: 203, column: 2 }, end: { line: 208, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 203, column: 2 }, end: { line: 208, column: 3 } },
                    { start: { line: 203, column: 2 }, end: { line: 208, column: 3 } }
                  ],
                  line: 203
                },
                '12': {
                  loc: { start: { line: 204, column: 13 }, end: { line: 204, column: 22 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 204, column: 13 }, end: { line: 204, column: 17 } },
                    { start: { line: 204, column: 21 }, end: { line: 204, column: 22 } }
                  ],
                  line: 204
                },
                '13': {
                  loc: { start: { line: 205, column: 13 }, end: { line: 205, column: 22 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 205, column: 13 }, end: { line: 205, column: 17 } },
                    { start: { line: 205, column: 21 }, end: { line: 205, column: 22 } }
                  ],
                  line: 205
                },
                '14': {
                  loc: { start: { line: 206, column: 13 }, end: { line: 206, column: 22 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 206, column: 13 }, end: { line: 206, column: 17 } },
                    { start: { line: 206, column: 21 }, end: { line: 206, column: 22 } }
                  ],
                  line: 206
                },
                '15': {
                  loc: { start: { line: 209, column: 11 }, end: { line: 209, column: 17 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 209, column: 11 }, end: { line: 209, column: 12 } },
                    { start: { line: 209, column: 16 }, end: { line: 209, column: 17 } }
                  ],
                  line: 209
                },
                '16': {
                  loc: { start: { line: 210, column: 11 }, end: { line: 210, column: 17 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 210, column: 11 }, end: { line: 210, column: 12 } },
                    { start: { line: 210, column: 16 }, end: { line: 210, column: 17 } }
                  ],
                  line: 210
                },
                '17': {
                  loc: { start: { line: 211, column: 11 }, end: { line: 211, column: 17 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 211, column: 11 }, end: { line: 211, column: 12 } },
                    { start: { line: 211, column: 16 }, end: { line: 211, column: 17 } }
                  ],
                  line: 211
                },
                '18': {
                  loc: { start: { line: 231, column: 2 }, end: { line: 235, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 231, column: 2 }, end: { line: 235, column: 3 } },
                    { start: { line: 231, column: 2 }, end: { line: 235, column: 3 } }
                  ],
                  line: 231
                },
                '19': {
                  loc: { start: { line: 321, column: 2 }, end: { line: 326, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 321, column: 2 }, end: { line: 326, column: 3 } },
                    { start: { line: 321, column: 2 }, end: { line: 326, column: 3 } }
                  ],
                  line: 321
                },
                '20': {
                  loc: { start: { line: 322, column: 14 }, end: { line: 322, column: 22 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 322, column: 14 }, end: { line: 322, column: 17 } },
                    { start: { line: 322, column: 21 }, end: { line: 322, column: 22 } }
                  ],
                  line: 322
                },
                '21': {
                  loc: { start: { line: 323, column: 14 }, end: { line: 323, column: 22 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 323, column: 14 }, end: { line: 323, column: 17 } },
                    { start: { line: 323, column: 21 }, end: { line: 323, column: 22 } }
                  ],
                  line: 323
                },
                '22': {
                  loc: { start: { line: 324, column: 14 }, end: { line: 324, column: 22 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 324, column: 14 }, end: { line: 324, column: 17 } },
                    { start: { line: 324, column: 21 }, end: { line: 324, column: 22 } }
                  ],
                  line: 324
                },
                '23': {
                  loc: { start: { line: 327, column: 2 }, end: { line: 332, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 327, column: 2 }, end: { line: 332, column: 3 } },
                    { start: { line: 327, column: 2 }, end: { line: 332, column: 3 } }
                  ],
                  line: 327
                },
                '24': {
                  loc: { start: { line: 328, column: 14 }, end: { line: 328, column: 23 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 328, column: 14 }, end: { line: 328, column: 18 } },
                    { start: { line: 328, column: 22 }, end: { line: 328, column: 23 } }
                  ],
                  line: 328
                },
                '25': {
                  loc: { start: { line: 329, column: 14 }, end: { line: 329, column: 23 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 329, column: 14 }, end: { line: 329, column: 18 } },
                    { start: { line: 329, column: 22 }, end: { line: 329, column: 23 } }
                  ],
                  line: 329
                },
                '26': {
                  loc: { start: { line: 330, column: 14 }, end: { line: 330, column: 23 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 330, column: 14 }, end: { line: 330, column: 18 } },
                    { start: { line: 330, column: 22 }, end: { line: 330, column: 23 } }
                  ],
                  line: 330
                },
                '27': {
                  loc: { start: { line: 333, column: 12 }, end: { line: 333, column: 18 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 333, column: 12 }, end: { line: 333, column: 13 } },
                    { start: { line: 333, column: 17 }, end: { line: 333, column: 18 } }
                  ],
                  line: 333
                },
                '28': {
                  loc: { start: { line: 334, column: 12 }, end: { line: 334, column: 18 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 334, column: 12 }, end: { line: 334, column: 13 } },
                    { start: { line: 334, column: 17 }, end: { line: 334, column: 18 } }
                  ],
                  line: 334
                },
                '29': {
                  loc: { start: { line: 335, column: 12 }, end: { line: 335, column: 18 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 335, column: 12 }, end: { line: 335, column: 13 } },
                    { start: { line: 335, column: 17 }, end: { line: 335, column: 18 } }
                  ],
                  line: 335
                },
                '30': {
                  loc: { start: { line: 341, column: 2 }, end: { line: 343, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 341, column: 2 }, end: { line: 343, column: 3 } },
                    { start: { line: 341, column: 2 }, end: { line: 343, column: 3 } }
                  ],
                  line: 341
                },
                '31': {
                  loc: { start: { line: 344, column: 2 }, end: { line: 346, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 344, column: 2 }, end: { line: 346, column: 3 } },
                    { start: { line: 344, column: 2 }, end: { line: 346, column: 3 } }
                  ],
                  line: 344
                },
                '32': {
                  loc: { start: { line: 351, column: 2 }, end: { line: 353, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 351, column: 2 }, end: { line: 353, column: 3 } },
                    { start: { line: 351, column: 2 }, end: { line: 353, column: 3 } }
                  ],
                  line: 351
                },
                '33': {
                  loc: { start: { line: 354, column: 2 }, end: { line: 356, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 354, column: 2 }, end: { line: 356, column: 3 } },
                    { start: { line: 354, column: 2 }, end: { line: 356, column: 3 } }
                  ],
                  line: 354
                },
                '34': {
                  loc: { start: { line: 357, column: 2 }, end: { line: 359, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 357, column: 2 }, end: { line: 359, column: 3 } },
                    { start: { line: 357, column: 2 }, end: { line: 359, column: 3 } }
                  ],
                  line: 357
                },
                '35': {
                  loc: { start: { line: 397, column: 2 }, end: { line: 443, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 397, column: 2 }, end: { line: 443, column: 3 } },
                    { start: { line: 397, column: 2 }, end: { line: 443, column: 3 } }
                  ],
                  line: 397
                },
                '36': {
                  loc: { start: { line: 398, column: 4 }, end: { line: 403, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 398, column: 4 }, end: { line: 403, column: 5 } },
                    { start: { line: 398, column: 4 }, end: { line: 403, column: 5 } }
                  ],
                  line: 398
                },
                '37': {
                  loc: { start: { line: 398, column: 8 }, end: { line: 398, column: 76 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 398, column: 8 }, end: { line: 398, column: 28 } },
                    { start: { line: 398, column: 32 }, end: { line: 398, column: 52 } },
                    { start: { line: 398, column: 56 }, end: { line: 398, column: 76 } }
                  ],
                  line: 398
                },
                '38': {
                  loc: { start: { line: 404, column: 9 }, end: { line: 443, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 404, column: 9 }, end: { line: 443, column: 3 } },
                    { start: { line: 404, column: 9 }, end: { line: 443, column: 3 } }
                  ],
                  line: 404
                },
                '39': {
                  loc: { start: { line: 405, column: 4 }, end: { line: 412, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 405, column: 4 }, end: { line: 412, column: 5 } },
                    { start: { line: 405, column: 4 }, end: { line: 412, column: 5 } }
                  ],
                  line: 405
                },
                '40': {
                  loc: { start: { line: 406, column: 6 }, end: { line: 408, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 406, column: 6 }, end: { line: 408, column: 7 } },
                    { start: { line: 406, column: 6 }, end: { line: 408, column: 7 } }
                  ],
                  line: 406
                },
                '41': {
                  loc: { start: { line: 409, column: 6 }, end: { line: 411, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 409, column: 6 }, end: { line: 411, column: 7 } },
                    { start: { line: 409, column: 6 }, end: { line: 411, column: 7 } }
                  ],
                  line: 409
                },
                '42': {
                  loc: { start: { line: 413, column: 9 }, end: { line: 443, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 413, column: 9 }, end: { line: 443, column: 3 } },
                    { start: { line: 413, column: 9 }, end: { line: 443, column: 3 } }
                  ],
                  line: 413
                },
                '43': {
                  loc: { start: { line: 414, column: 4 }, end: { line: 419, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 414, column: 4 }, end: { line: 419, column: 5 } },
                    { start: { line: 414, column: 4 }, end: { line: 419, column: 5 } }
                  ],
                  line: 414
                },
                '44': {
                  loc: { start: { line: 414, column: 8 }, end: { line: 414, column: 59 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 414, column: 8 }, end: { line: 414, column: 37 } },
                    { start: { line: 414, column: 41 }, end: { line: 414, column: 59 } }
                  ],
                  line: 414
                },
                '45': {
                  loc: { start: { line: 420, column: 9 }, end: { line: 443, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 420, column: 9 }, end: { line: 443, column: 3 } },
                    { start: { line: 420, column: 9 }, end: { line: 443, column: 3 } }
                  ],
                  line: 420
                },
                '46': {
                  loc: { start: { line: 422, column: 4 }, end: { line: 430, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 422, column: 4 }, end: { line: 430, column: 5 } },
                    { start: { line: 422, column: 4 }, end: { line: 430, column: 5 } }
                  ],
                  line: 422
                },
                '47': {
                  loc: { start: { line: 423, column: 6 }, end: { line: 429, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 423, column: 6 }, end: { line: 429, column: 7 } },
                    { start: { line: 423, column: 6 }, end: { line: 429, column: 7 } }
                  ],
                  line: 423
                },
                '48': {
                  loc: { start: { line: 431, column: 9 }, end: { line: 443, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 431, column: 9 }, end: { line: 443, column: 3 } },
                    { start: { line: 431, column: 9 }, end: { line: 443, column: 3 } }
                  ],
                  line: 431
                },
                '49': {
                  loc: { start: { line: 433, column: 4 }, end: { line: 442, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 433, column: 4 }, end: { line: 442, column: 5 } },
                    { start: { line: 433, column: 4 }, end: { line: 442, column: 5 } }
                  ],
                  line: 433
                },
                '50': {
                  loc: { start: { line: 434, column: 6 }, end: { line: 441, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 434, column: 6 }, end: { line: 441, column: 7 } },
                    { start: { line: 434, column: 6 }, end: { line: 441, column: 7 } }
                  ],
                  line: 434
                },
                '51': {
                  loc: { start: { line: 529, column: 2 }, end: { line: 534, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 529, column: 2 }, end: { line: 534, column: 3 } },
                    { start: { line: 529, column: 2 }, end: { line: 534, column: 3 } }
                  ],
                  line: 529
                },
                '52': {
                  loc: { start: { line: 530, column: 14 }, end: { line: 530, column: 22 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 530, column: 14 }, end: { line: 530, column: 17 } },
                    { start: { line: 530, column: 21 }, end: { line: 530, column: 22 } }
                  ],
                  line: 530
                },
                '53': {
                  loc: { start: { line: 531, column: 14 }, end: { line: 531, column: 22 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 531, column: 14 }, end: { line: 531, column: 17 } },
                    { start: { line: 531, column: 21 }, end: { line: 531, column: 22 } }
                  ],
                  line: 531
                },
                '54': {
                  loc: { start: { line: 532, column: 14 }, end: { line: 532, column: 22 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 532, column: 14 }, end: { line: 532, column: 17 } },
                    { start: { line: 532, column: 21 }, end: { line: 532, column: 22 } }
                  ],
                  line: 532
                },
                '55': {
                  loc: { start: { line: 535, column: 2 }, end: { line: 540, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 535, column: 2 }, end: { line: 540, column: 3 } },
                    { start: { line: 535, column: 2 }, end: { line: 540, column: 3 } }
                  ],
                  line: 535
                },
                '56': {
                  loc: { start: { line: 536, column: 14 }, end: { line: 536, column: 23 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 536, column: 14 }, end: { line: 536, column: 18 } },
                    { start: { line: 536, column: 22 }, end: { line: 536, column: 23 } }
                  ],
                  line: 536
                },
                '57': {
                  loc: { start: { line: 537, column: 14 }, end: { line: 537, column: 23 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 537, column: 14 }, end: { line: 537, column: 18 } },
                    { start: { line: 537, column: 22 }, end: { line: 537, column: 23 } }
                  ],
                  line: 537
                },
                '58': {
                  loc: { start: { line: 538, column: 14 }, end: { line: 538, column: 23 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 538, column: 14 }, end: { line: 538, column: 18 } },
                    { start: { line: 538, column: 22 }, end: { line: 538, column: 23 } }
                  ],
                  line: 538
                },
                '59': {
                  loc: { start: { line: 541, column: 12 }, end: { line: 541, column: 18 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 541, column: 12 }, end: { line: 541, column: 13 } },
                    { start: { line: 541, column: 17 }, end: { line: 541, column: 18 } }
                  ],
                  line: 541
                },
                '60': {
                  loc: { start: { line: 542, column: 12 }, end: { line: 542, column: 18 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 542, column: 12 }, end: { line: 542, column: 13 } },
                    { start: { line: 542, column: 17 }, end: { line: 542, column: 18 } }
                  ],
                  line: 542
                },
                '61': {
                  loc: { start: { line: 543, column: 12 }, end: { line: 543, column: 18 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 543, column: 12 }, end: { line: 543, column: 13 } },
                    { start: { line: 543, column: 17 }, end: { line: 543, column: 18 } }
                  ],
                  line: 543
                },
                '62': {
                  loc: { start: { line: 661, column: 2 }, end: { line: 683, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 661, column: 2 }, end: { line: 683, column: 3 } },
                    { start: { line: 661, column: 2 }, end: { line: 683, column: 3 } }
                  ],
                  line: 661
                },
                '63': {
                  loc: { start: { line: 665, column: 4 }, end: { line: 681, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 665, column: 4 }, end: { line: 681, column: 5 } },
                    { start: { line: 665, column: 4 }, end: { line: 681, column: 5 } }
                  ],
                  line: 665
                },
                '64': {
                  loc: { start: { line: 666, column: 6 }, end: { line: 671, column: 29 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 666, column: 6 }, end: { line: 666, column: 26 } },
                    { start: { line: 667, column: 6 }, end: { line: 667, column: 26 } },
                    { start: { line: 668, column: 6 }, end: { line: 668, column: 26 } },
                    { start: { line: 669, column: 6 }, end: { line: 669, column: 29 } },
                    { start: { line: 670, column: 6 }, end: { line: 670, column: 29 } },
                    { start: { line: 671, column: 6 }, end: { line: 671, column: 29 } }
                  ],
                  line: 666
                },
                '65': {
                  loc: { start: { line: 684, column: 2 }, end: { line: 708, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 684, column: 2 }, end: { line: 708, column: 3 } },
                    { start: { line: 684, column: 2 }, end: { line: 708, column: 3 } }
                  ],
                  line: 684
                },
                '66': {
                  loc: { start: { line: 685, column: 4 }, end: { line: 706, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 685, column: 4 }, end: { line: 706, column: 5 } },
                    { start: { line: 685, column: 4 }, end: { line: 706, column: 5 } }
                  ],
                  line: 685
                },
                '67': {
                  loc: { start: { line: 686, column: 6 }, end: { line: 687, column: 53 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 686, column: 6 }, end: { line: 686, column: 50 } },
                    { start: { line: 687, column: 6 }, end: { line: 687, column: 53 } }
                  ],
                  line: 686
                },
                '68': {
                  loc: { start: { line: 689, column: 6 }, end: { line: 700, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 689, column: 6 }, end: { line: 700, column: 7 } },
                    { start: { line: 689, column: 6 }, end: { line: 700, column: 7 } }
                  ],
                  line: 689
                },
                '69': {
                  loc: { start: { line: 693, column: 13 }, end: { line: 700, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 693, column: 13 }, end: { line: 700, column: 7 } },
                    { start: { line: 693, column: 13 }, end: { line: 700, column: 7 } }
                  ],
                  line: 693
                },
                '70': {
                  loc: { start: { line: 696, column: 13 }, end: { line: 700, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 696, column: 13 }, end: { line: 700, column: 7 } },
                    { start: { line: 696, column: 13 }, end: { line: 700, column: 7 } }
                  ],
                  line: 696
                },
                '71': {
                  loc: { start: { line: 711, column: 2 }, end: { line: 734, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 711, column: 2 }, end: { line: 734, column: 3 } },
                    { start: { line: 711, column: 2 }, end: { line: 734, column: 3 } }
                  ],
                  line: 711
                },
                '72': {
                  loc: { start: { line: 712, column: 4 }, end: { line: 713, column: 66 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 712, column: 4 }, end: { line: 712, column: 63 } },
                    { start: { line: 713, column: 4 }, end: { line: 713, column: 66 } }
                  ],
                  line: 712
                },
                '73': {
                  loc: { start: { line: 715, column: 4 }, end: { line: 719, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 715, column: 4 }, end: { line: 719, column: 5 } },
                    { start: { line: 715, column: 4 }, end: { line: 719, column: 5 } }
                  ],
                  line: 715
                },
                '74': {
                  loc: { start: { line: 720, column: 4 }, end: { line: 723, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 720, column: 4 }, end: { line: 723, column: 5 } },
                    { start: { line: 720, column: 4 }, end: { line: 723, column: 5 } }
                  ],
                  line: 720
                },
                '75': {
                  loc: { start: { line: 724, column: 4 }, end: { line: 728, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 724, column: 4 }, end: { line: 728, column: 5 } },
                    { start: { line: 724, column: 4 }, end: { line: 728, column: 5 } }
                  ],
                  line: 724
                },
                '76': {
                  loc: { start: { line: 852, column: 2 }, end: { line: 878, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 852, column: 2 }, end: { line: 878, column: 3 } },
                    { start: { line: 852, column: 2 }, end: { line: 878, column: 3 } }
                  ],
                  line: 852
                },
                '77': {
                  loc: { start: { line: 856, column: 4 }, end: { line: 876, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 856, column: 4 }, end: { line: 876, column: 5 } },
                    { start: { line: 856, column: 4 }, end: { line: 876, column: 5 } }
                  ],
                  line: 856
                },
                '78': {
                  loc: { start: { line: 857, column: 6 }, end: { line: 862, column: 29 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 857, column: 6 }, end: { line: 857, column: 26 } },
                    { start: { line: 858, column: 6 }, end: { line: 858, column: 26 } },
                    { start: { line: 859, column: 6 }, end: { line: 859, column: 26 } },
                    { start: { line: 860, column: 6 }, end: { line: 860, column: 29 } },
                    { start: { line: 861, column: 6 }, end: { line: 861, column: 29 } },
                    { start: { line: 862, column: 6 }, end: { line: 862, column: 29 } }
                  ],
                  line: 857
                },
                '79': {
                  loc: { start: { line: 864, column: 6 }, end: { line: 867, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 864, column: 6 }, end: { line: 867, column: 7 } },
                    { start: { line: 864, column: 6 }, end: { line: 867, column: 7 } }
                  ],
                  line: 864
                },
                '80': {
                  loc: { start: { line: 864, column: 10 }, end: { line: 864, column: 45 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 864, column: 10 }, end: { line: 864, column: 19 } },
                    { start: { line: 864, column: 23 }, end: { line: 864, column: 32 } },
                    { start: { line: 864, column: 36 }, end: { line: 864, column: 45 } }
                  ],
                  line: 864
                },
                '81': {
                  loc: { start: { line: 879, column: 2 }, end: { line: 909, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 879, column: 2 }, end: { line: 909, column: 3 } },
                    { start: { line: 879, column: 2 }, end: { line: 909, column: 3 } }
                  ],
                  line: 879
                },
                '82': {
                  loc: { start: { line: 880, column: 4 }, end: { line: 906, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 880, column: 4 }, end: { line: 906, column: 5 } },
                    { start: { line: 880, column: 4 }, end: { line: 906, column: 5 } }
                  ],
                  line: 880
                },
                '83': {
                  loc: { start: { line: 881, column: 6 }, end: { line: 882, column: 53 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 881, column: 6 }, end: { line: 881, column: 50 } },
                    { start: { line: 882, column: 6 }, end: { line: 882, column: 53 } }
                  ],
                  line: 881
                },
                '84': {
                  loc: { start: { line: 884, column: 6 }, end: { line: 887, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 884, column: 6 }, end: { line: 887, column: 7 } },
                    { start: { line: 884, column: 6 }, end: { line: 887, column: 7 } }
                  ],
                  line: 884
                },
                '85': {
                  loc: { start: { line: 889, column: 6 }, end: { line: 900, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 889, column: 6 }, end: { line: 900, column: 7 } },
                    { start: { line: 889, column: 6 }, end: { line: 900, column: 7 } }
                  ],
                  line: 889
                },
                '86': {
                  loc: { start: { line: 893, column: 13 }, end: { line: 900, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 893, column: 13 }, end: { line: 900, column: 7 } },
                    { start: { line: 893, column: 13 }, end: { line: 900, column: 7 } }
                  ],
                  line: 893
                },
                '87': {
                  loc: { start: { line: 896, column: 13 }, end: { line: 900, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 896, column: 13 }, end: { line: 900, column: 7 } },
                    { start: { line: 896, column: 13 }, end: { line: 900, column: 7 } }
                  ],
                  line: 896
                },
                '88': {
                  loc: { start: { line: 912, column: 2 }, end: { line: 940, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 912, column: 2 }, end: { line: 940, column: 3 } },
                    { start: { line: 912, column: 2 }, end: { line: 940, column: 3 } }
                  ],
                  line: 912
                },
                '89': {
                  loc: { start: { line: 913, column: 4 }, end: { line: 914, column: 66 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 913, column: 4 }, end: { line: 913, column: 63 } },
                    { start: { line: 914, column: 4 }, end: { line: 914, column: 66 } }
                  ],
                  line: 913
                },
                '90': {
                  loc: { start: { line: 916, column: 4 }, end: { line: 919, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 916, column: 4 }, end: { line: 919, column: 5 } },
                    { start: { line: 916, column: 4 }, end: { line: 919, column: 5 } }
                  ],
                  line: 916
                },
                '91': {
                  loc: { start: { line: 921, column: 4 }, end: { line: 925, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 921, column: 4 }, end: { line: 925, column: 5 } },
                    { start: { line: 921, column: 4 }, end: { line: 925, column: 5 } }
                  ],
                  line: 921
                },
                '92': {
                  loc: { start: { line: 926, column: 4 }, end: { line: 929, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 926, column: 4 }, end: { line: 929, column: 5 } },
                    { start: { line: 926, column: 4 }, end: { line: 929, column: 5 } }
                  ],
                  line: 926
                },
                '93': {
                  loc: { start: { line: 930, column: 4 }, end: { line: 934, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 930, column: 4 }, end: { line: 934, column: 5 } },
                    { start: { line: 930, column: 4 }, end: { line: 934, column: 5 } }
                  ],
                  line: 930
                },
                '94': {
                  loc: { start: { line: 1082, column: 2 }, end: { line: 1084, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1082, column: 2 }, end: { line: 1084, column: 3 } },
                    { start: { line: 1082, column: 2 }, end: { line: 1084, column: 3 } }
                  ],
                  line: 1082
                },
                '95': {
                  loc: {
                    start: { line: 1085, column: 19 },
                    end: { line: 1085, column: 25 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1085, column: 19 }, end: { line: 1085, column: 20 } },
                    { start: { line: 1085, column: 24 }, end: { line: 1085, column: 25 } }
                  ],
                  line: 1085
                },
                '96': {
                  loc: {
                    start: { line: 1085, column: 39 },
                    end: { line: 1085, column: 45 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1085, column: 39 }, end: { line: 1085, column: 40 } },
                    { start: { line: 1085, column: 44 }, end: { line: 1085, column: 45 } }
                  ],
                  line: 1085
                },
                '97': {
                  loc: {
                    start: { line: 1085, column: 59 },
                    end: { line: 1085, column: 65 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1085, column: 59 }, end: { line: 1085, column: 60 } },
                    { start: { line: 1085, column: 64 }, end: { line: 1085, column: 65 } }
                  ],
                  line: 1085
                },
                '98': {
                  loc: { start: { line: 1123, column: 2 }, end: { line: 1127, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1123, column: 2 }, end: { line: 1127, column: 3 } },
                    { start: { line: 1123, column: 2 }, end: { line: 1127, column: 3 } }
                  ],
                  line: 1123
                },
                '99': {
                  loc: {
                    start: { line: 1268, column: 2 },
                    end: { line: 1268, column: 36 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1268, column: 2 }, end: { line: 1268, column: 36 } },
                    { start: { line: 1268, column: 2 }, end: { line: 1268, column: 36 } }
                  ],
                  line: 1268
                },
                '100': {
                  loc: { start: { line: 1323, column: 2 }, end: { line: 1326, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1323, column: 2 }, end: { line: 1326, column: 3 } },
                    { start: { line: 1323, column: 2 }, end: { line: 1326, column: 3 } }
                  ],
                  line: 1323
                },
                '101': {
                  loc: {
                    start: { line: 1454, column: 2 },
                    end: { line: 1454, column: 46 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1454, column: 2 }, end: { line: 1454, column: 46 } },
                    { start: { line: 1454, column: 2 }, end: { line: 1454, column: 46 } }
                  ],
                  line: 1454
                },
                '102': {
                  loc: {
                    start: { line: 1545, column: 2 },
                    end: { line: 1545, column: 59 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1545, column: 2 }, end: { line: 1545, column: 59 } },
                    { start: { line: 1545, column: 2 }, end: { line: 1545, column: 59 } }
                  ],
                  line: 1545
                },
                '103': {
                  loc: {
                    start: { line: 1626, column: 28 },
                    end: { line: 1626, column: 48 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1626, column: 28 }, end: { line: 1626, column: 43 } },
                    { start: { line: 1626, column: 47 }, end: { line: 1626, column: 48 } }
                  ],
                  line: 1626
                },
                '104': {
                  loc: { start: { line: 1627, column: 2 }, end: { line: 1629, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1627, column: 2 }, end: { line: 1629, column: 3 } },
                    { start: { line: 1627, column: 2 }, end: { line: 1629, column: 3 } }
                  ],
                  line: 1627
                },
                '105': {
                  loc: { start: { line: 1712, column: 2 }, end: { line: 1714, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1712, column: 2 }, end: { line: 1714, column: 3 } },
                    { start: { line: 1712, column: 2 }, end: { line: 1714, column: 3 } }
                  ],
                  line: 1712
                },
                '106': {
                  loc: {
                    start: { line: 1715, column: 12 },
                    end: { line: 1715, column: 35 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1715, column: 12 }, end: { line: 1715, column: 30 } },
                    { start: { line: 1715, column: 34 }, end: { line: 1715, column: 35 } }
                  ],
                  line: 1715
                },
                '107': {
                  loc: {
                    start: { line: 1716, column: 12 },
                    end: { line: 1716, column: 35 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1716, column: 12 }, end: { line: 1716, column: 30 } },
                    { start: { line: 1716, column: 34 }, end: { line: 1716, column: 35 } }
                  ],
                  line: 1716
                },
                '108': {
                  loc: {
                    start: { line: 1717, column: 12 },
                    end: { line: 1717, column: 35 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1717, column: 12 }, end: { line: 1717, column: 30 } },
                    { start: { line: 1717, column: 34 }, end: { line: 1717, column: 35 } }
                  ],
                  line: 1717
                },
                '109': {
                  loc: {
                    start: { line: 1805, column: 10 },
                    end: { line: 1805, column: 21 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1805, column: 10 }, end: { line: 1805, column: 16 } },
                    { start: { line: 1805, column: 20 }, end: { line: 1805, column: 21 } }
                  ],
                  line: 1805
                },
                '110': {
                  loc: {
                    start: { line: 1805, column: 23 },
                    end: { line: 1805, column: 34 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1805, column: 23 }, end: { line: 1805, column: 29 } },
                    { start: { line: 1805, column: 33 }, end: { line: 1805, column: 34 } }
                  ],
                  line: 1805
                },
                '111': {
                  loc: {
                    start: { line: 1805, column: 36 },
                    end: { line: 1805, column: 47 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1805, column: 36 }, end: { line: 1805, column: 42 } },
                    { start: { line: 1805, column: 46 }, end: { line: 1805, column: 47 } }
                  ],
                  line: 1805
                },
                '112': {
                  loc: { start: { line: 1845, column: 2 }, end: { line: 1857, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1845, column: 2 }, end: { line: 1857, column: 3 } },
                    { start: { line: 1845, column: 2 }, end: { line: 1857, column: 3 } }
                  ],
                  line: 1845
                },
                '113': {
                  loc: {
                    start: { line: 1846, column: 8 },
                    end: { line: 1846, column: 16 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1846, column: 8 }, end: { line: 1846, column: 11 } },
                    { start: { line: 1846, column: 15 }, end: { line: 1846, column: 16 } }
                  ],
                  line: 1846
                },
                '114': {
                  loc: {
                    start: { line: 1847, column: 8 },
                    end: { line: 1847, column: 16 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1847, column: 8 }, end: { line: 1847, column: 11 } },
                    { start: { line: 1847, column: 15 }, end: { line: 1847, column: 16 } }
                  ],
                  line: 1847
                },
                '115': {
                  loc: {
                    start: { line: 1848, column: 8 },
                    end: { line: 1848, column: 16 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1848, column: 8 }, end: { line: 1848, column: 11 } },
                    { start: { line: 1848, column: 15 }, end: { line: 1848, column: 16 } }
                  ],
                  line: 1848
                },
                '116': {
                  loc: { start: { line: 1849, column: 9 }, end: { line: 1857, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1849, column: 9 }, end: { line: 1857, column: 3 } },
                    { start: { line: 1849, column: 9 }, end: { line: 1857, column: 3 } }
                  ],
                  line: 1849
                },
                '117': {
                  loc: {
                    start: { line: 1850, column: 8 },
                    end: { line: 1850, column: 17 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1850, column: 8 }, end: { line: 1850, column: 12 } },
                    { start: { line: 1850, column: 16 }, end: { line: 1850, column: 17 } }
                  ],
                  line: 1850
                },
                '118': {
                  loc: {
                    start: { line: 1851, column: 8 },
                    end: { line: 1851, column: 17 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1851, column: 8 }, end: { line: 1851, column: 12 } },
                    { start: { line: 1851, column: 16 }, end: { line: 1851, column: 17 } }
                  ],
                  line: 1851
                },
                '119': {
                  loc: {
                    start: { line: 1852, column: 8 },
                    end: { line: 1852, column: 17 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1852, column: 8 }, end: { line: 1852, column: 12 } },
                    { start: { line: 1852, column: 16 }, end: { line: 1852, column: 17 } }
                  ],
                  line: 1852
                },
                '120': {
                  loc: {
                    start: { line: 1854, column: 8 },
                    end: { line: 1854, column: 14 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1854, column: 8 }, end: { line: 1854, column: 9 } },
                    { start: { line: 1854, column: 13 }, end: { line: 1854, column: 14 } }
                  ],
                  line: 1854
                },
                '121': {
                  loc: {
                    start: { line: 1855, column: 8 },
                    end: { line: 1855, column: 14 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1855, column: 8 }, end: { line: 1855, column: 9 } },
                    { start: { line: 1855, column: 13 }, end: { line: 1855, column: 14 } }
                  ],
                  line: 1855
                },
                '122': {
                  loc: {
                    start: { line: 1856, column: 8 },
                    end: { line: 1856, column: 14 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1856, column: 8 }, end: { line: 1856, column: 9 } },
                    { start: { line: 1856, column: 13 }, end: { line: 1856, column: 14 } }
                  ],
                  line: 1856
                },
                '123': {
                  loc: {
                    start: { line: 1858, column: 9 },
                    end: { line: 1858, column: 53 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1858, column: 9 }, end: { line: 1858, column: 21 } },
                    { start: { line: 1858, column: 25 }, end: { line: 1858, column: 37 } },
                    { start: { line: 1858, column: 41 }, end: { line: 1858, column: 53 } }
                  ],
                  line: 1858
                },
                '124': {
                  loc: { start: { line: 1908, column: 2 }, end: { line: 1910, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1908, column: 2 }, end: { line: 1910, column: 3 } },
                    { start: { line: 1908, column: 2 }, end: { line: 1910, column: 3 } }
                  ],
                  line: 1908
                },
                '125': {
                  loc: { start: { line: 1948, column: 2 }, end: { line: 1950, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1948, column: 2 }, end: { line: 1950, column: 3 } },
                    { start: { line: 1948, column: 2 }, end: { line: 1950, column: 3 } }
                  ],
                  line: 1948
                },
                '126': {
                  loc: { start: { line: 2054, column: 2 }, end: { line: 2064, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2054, column: 2 }, end: { line: 2064, column: 3 } },
                    { start: { line: 2054, column: 2 }, end: { line: 2064, column: 3 } }
                  ],
                  line: 2054
                },
                '127': {
                  loc: { start: { line: 2056, column: 4 }, end: { line: 2061, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2056, column: 4 }, end: { line: 2061, column: 5 } },
                    { start: { line: 2056, column: 4 }, end: { line: 2061, column: 5 } }
                  ],
                  line: 2056
                },
                '128': {
                  loc: { start: { line: 2084, column: 2 }, end: { line: 2088, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2084, column: 2 }, end: { line: 2088, column: 3 } },
                    { start: { line: 2084, column: 2 }, end: { line: 2088, column: 3 } }
                  ],
                  line: 2084
                },
                '129': {
                  loc: {
                    start: { line: 2084, column: 6 },
                    end: { line: 2084, column: 56 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 2084, column: 6 }, end: { line: 2084, column: 29 } },
                    { start: { line: 2084, column: 33 }, end: { line: 2084, column: 56 } }
                  ],
                  line: 2084
                },
                '130': {
                  loc: { start: { line: 2105, column: 2 }, end: { line: 2115, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2105, column: 2 }, end: { line: 2115, column: 3 } },
                    { start: { line: 2105, column: 2 }, end: { line: 2115, column: 3 } }
                  ],
                  line: 2105
                },
                '131': {
                  loc: { start: { line: 2107, column: 4 }, end: { line: 2112, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2107, column: 4 }, end: { line: 2112, column: 5 } },
                    { start: { line: 2107, column: 4 }, end: { line: 2112, column: 5 } }
                  ],
                  line: 2107
                },
                '132': {
                  loc: { start: { line: 2157, column: 2 }, end: { line: 2167, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2157, column: 2 }, end: { line: 2167, column: 3 } },
                    { start: { line: 2157, column: 2 }, end: { line: 2167, column: 3 } }
                  ],
                  line: 2157
                },
                '133': {
                  loc: { start: { line: 2159, column: 4 }, end: { line: 2164, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2159, column: 4 }, end: { line: 2164, column: 5 } },
                    { start: { line: 2159, column: 4 }, end: { line: 2164, column: 5 } }
                  ],
                  line: 2159
                },
                '134': {
                  loc: { start: { line: 2184, column: 2 }, end: { line: 2194, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2184, column: 2 }, end: { line: 2194, column: 3 } },
                    { start: { line: 2184, column: 2 }, end: { line: 2194, column: 3 } }
                  ],
                  line: 2184
                },
                '135': {
                  loc: { start: { line: 2187, column: 4 }, end: { line: 2192, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2187, column: 4 }, end: { line: 2192, column: 5 } },
                    { start: { line: 2187, column: 4 }, end: { line: 2192, column: 5 } }
                  ],
                  line: 2187
                },
                '136': {
                  loc: { start: { line: 2236, column: 2 }, end: { line: 2247, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2236, column: 2 }, end: { line: 2247, column: 3 } },
                    { start: { line: 2236, column: 2 }, end: { line: 2247, column: 3 } }
                  ],
                  line: 2236
                },
                '137': {
                  loc: { start: { line: 2239, column: 4 }, end: { line: 2244, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2239, column: 4 }, end: { line: 2244, column: 5 } },
                    { start: { line: 2239, column: 4 }, end: { line: 2244, column: 5 } }
                  ],
                  line: 2239
                },
                '138': {
                  loc: { start: { line: 2309, column: 2 }, end: { line: 2319, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2309, column: 2 }, end: { line: 2319, column: 3 } },
                    { start: { line: 2309, column: 2 }, end: { line: 2319, column: 3 } }
                  ],
                  line: 2309
                },
                '139': {
                  loc: { start: { line: 2311, column: 4 }, end: { line: 2316, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2311, column: 4 }, end: { line: 2316, column: 5 } },
                    { start: { line: 2311, column: 4 }, end: { line: 2316, column: 5 } }
                  ],
                  line: 2311
                },
                '140': {
                  loc: { start: { line: 2353, column: 2 }, end: { line: 2363, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2353, column: 2 }, end: { line: 2363, column: 3 } },
                    { start: { line: 2353, column: 2 }, end: { line: 2363, column: 3 } }
                  ],
                  line: 2353
                },
                '141': {
                  loc: { start: { line: 2356, column: 4 }, end: { line: 2361, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 2356, column: 4 }, end: { line: 2361, column: 5 } },
                    { start: { line: 2356, column: 4 }, end: { line: 2361, column: 5 } }
                  ],
                  line: 2356
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0,
                '118': 0,
                '119': 0,
                '120': 0,
                '121': 0,
                '122': 0,
                '123': 0,
                '124': 0,
                '125': 0,
                '126': 0,
                '127': 0,
                '128': 0,
                '129': 0,
                '130': 0,
                '131': 0,
                '132': 0,
                '133': 0,
                '134': 0,
                '135': 0,
                '136': 0,
                '137': 0,
                '138': 0,
                '139': 0,
                '140': 0,
                '141': 0,
                '142': 0,
                '143': 0,
                '144': 0,
                '145': 0,
                '146': 0,
                '147': 0,
                '148': 0,
                '149': 0,
                '150': 0,
                '151': 0,
                '152': 0,
                '153': 0,
                '154': 0,
                '155': 0,
                '156': 0,
                '157': 0,
                '158': 0,
                '159': 0,
                '160': 0,
                '161': 0,
                '162': 0,
                '163': 0,
                '164': 0,
                '165': 0,
                '166': 0,
                '167': 0,
                '168': 0,
                '169': 0,
                '170': 0,
                '171': 0,
                '172': 0,
                '173': 0,
                '174': 0,
                '175': 0,
                '176': 0,
                '177': 0,
                '178': 0,
                '179': 0,
                '180': 0,
                '181': 0,
                '182': 0,
                '183': 0,
                '184': 0,
                '185': 0,
                '186': 0,
                '187': 0,
                '188': 0,
                '189': 0,
                '190': 0,
                '191': 0,
                '192': 0,
                '193': 0,
                '194': 0,
                '195': 0,
                '196': 0,
                '197': 0,
                '198': 0,
                '199': 0,
                '200': 0,
                '201': 0,
                '202': 0,
                '203': 0,
                '204': 0,
                '205': 0,
                '206': 0,
                '207': 0,
                '208': 0,
                '209': 0,
                '210': 0,
                '211': 0,
                '212': 0,
                '213': 0,
                '214': 0,
                '215': 0,
                '216': 0,
                '217': 0,
                '218': 0,
                '219': 0,
                '220': 0,
                '221': 0,
                '222': 0,
                '223': 0,
                '224': 0,
                '225': 0,
                '226': 0,
                '227': 0,
                '228': 0,
                '229': 0,
                '230': 0,
                '231': 0,
                '232': 0,
                '233': 0,
                '234': 0,
                '235': 0,
                '236': 0,
                '237': 0,
                '238': 0,
                '239': 0,
                '240': 0,
                '241': 0,
                '242': 0,
                '243': 0,
                '244': 0,
                '245': 0,
                '246': 0,
                '247': 0,
                '248': 0,
                '249': 0,
                '250': 0,
                '251': 0,
                '252': 0,
                '253': 0,
                '254': 0,
                '255': 0,
                '256': 0,
                '257': 0,
                '258': 0,
                '259': 0,
                '260': 0,
                '261': 0,
                '262': 0,
                '263': 0,
                '264': 0,
                '265': 0,
                '266': 0,
                '267': 0,
                '268': 0,
                '269': 0,
                '270': 0,
                '271': 0,
                '272': 0,
                '273': 0,
                '274': 0,
                '275': 0,
                '276': 0,
                '277': 0,
                '278': 0,
                '279': 0,
                '280': 0,
                '281': 0,
                '282': 0,
                '283': 0,
                '284': 0,
                '285': 0,
                '286': 0,
                '287': 0,
                '288': 0,
                '289': 0,
                '290': 0,
                '291': 0,
                '292': 0,
                '293': 0,
                '294': 0,
                '295': 0,
                '296': 0,
                '297': 0,
                '298': 0,
                '299': 0,
                '300': 0,
                '301': 0,
                '302': 0,
                '303': 0,
                '304': 0,
                '305': 0,
                '306': 0,
                '307': 0,
                '308': 0,
                '309': 0,
                '310': 0,
                '311': 0,
                '312': 0,
                '313': 0,
                '314': 0,
                '315': 0,
                '316': 0,
                '317': 0,
                '318': 0,
                '319': 0,
                '320': 0,
                '321': 0,
                '322': 0,
                '323': 0,
                '324': 0,
                '325': 0,
                '326': 0,
                '327': 0,
                '328': 0,
                '329': 0,
                '330': 0,
                '331': 0,
                '332': 0,
                '333': 0,
                '334': 0,
                '335': 0,
                '336': 0,
                '337': 0,
                '338': 0,
                '339': 0,
                '340': 0,
                '341': 0,
                '342': 0,
                '343': 0,
                '344': 0,
                '345': 0,
                '346': 0,
                '347': 0,
                '348': 0,
                '349': 0,
                '350': 0,
                '351': 0,
                '352': 0,
                '353': 0,
                '354': 0,
                '355': 0,
                '356': 0,
                '357': 0,
                '358': 0,
                '359': 0,
                '360': 0,
                '361': 0,
                '362': 0,
                '363': 0,
                '364': 0,
                '365': 0,
                '366': 0,
                '367': 0,
                '368': 0,
                '369': 0,
                '370': 0,
                '371': 0,
                '372': 0,
                '373': 0,
                '374': 0,
                '375': 0,
                '376': 0,
                '377': 0,
                '378': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0],
                '20': [0, 0],
                '21': [0, 0],
                '22': [0, 0],
                '23': [0, 0],
                '24': [0, 0],
                '25': [0, 0],
                '26': [0, 0],
                '27': [0, 0],
                '28': [0, 0],
                '29': [0, 0],
                '30': [0, 0],
                '31': [0, 0],
                '32': [0, 0],
                '33': [0, 0],
                '34': [0, 0],
                '35': [0, 0],
                '36': [0, 0],
                '37': [0, 0, 0],
                '38': [0, 0],
                '39': [0, 0],
                '40': [0, 0],
                '41': [0, 0],
                '42': [0, 0],
                '43': [0, 0],
                '44': [0, 0],
                '45': [0, 0],
                '46': [0, 0],
                '47': [0, 0],
                '48': [0, 0],
                '49': [0, 0],
                '50': [0, 0],
                '51': [0, 0],
                '52': [0, 0],
                '53': [0, 0],
                '54': [0, 0],
                '55': [0, 0],
                '56': [0, 0],
                '57': [0, 0],
                '58': [0, 0],
                '59': [0, 0],
                '60': [0, 0],
                '61': [0, 0],
                '62': [0, 0],
                '63': [0, 0],
                '64': [0, 0, 0, 0, 0, 0],
                '65': [0, 0],
                '66': [0, 0],
                '67': [0, 0],
                '68': [0, 0],
                '69': [0, 0],
                '70': [0, 0],
                '71': [0, 0],
                '72': [0, 0],
                '73': [0, 0],
                '74': [0, 0],
                '75': [0, 0],
                '76': [0, 0],
                '77': [0, 0],
                '78': [0, 0, 0, 0, 0, 0],
                '79': [0, 0],
                '80': [0, 0, 0],
                '81': [0, 0],
                '82': [0, 0],
                '83': [0, 0],
                '84': [0, 0],
                '85': [0, 0],
                '86': [0, 0],
                '87': [0, 0],
                '88': [0, 0],
                '89': [0, 0],
                '90': [0, 0],
                '91': [0, 0],
                '92': [0, 0],
                '93': [0, 0],
                '94': [0, 0],
                '95': [0, 0],
                '96': [0, 0],
                '97': [0, 0],
                '98': [0, 0],
                '99': [0, 0],
                '100': [0, 0],
                '101': [0, 0],
                '102': [0, 0],
                '103': [0, 0],
                '104': [0, 0],
                '105': [0, 0],
                '106': [0, 0],
                '107': [0, 0],
                '108': [0, 0],
                '109': [0, 0],
                '110': [0, 0],
                '111': [0, 0],
                '112': [0, 0],
                '113': [0, 0],
                '114': [0, 0],
                '115': [0, 0],
                '116': [0, 0],
                '117': [0, 0],
                '118': [0, 0],
                '119': [0, 0],
                '120': [0, 0],
                '121': [0, 0],
                '122': [0, 0],
                '123': [0, 0, 0],
                '124': [0, 0],
                '125': [0, 0],
                '126': [0, 0],
                '127': [0, 0],
                '128': [0, 0],
                '129': [0, 0],
                '130': [0, 0],
                '131': [0, 0],
                '132': [0, 0],
                '133': [0, 0],
                '134': [0, 0],
                '135': [0, 0],
                '136': [0, 0],
                '137': [0, 0],
                '138': [0, 0],
                '139': [0, 0],
                '140': [0, 0],
                '141': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '7af43a42e12fbccdb926ed90cabf721e175a87e6'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.concat');
          _dereq_('core-js/modules/es.array.every');
          _dereq_('core-js/modules/es.array.slice');
          _dereq_('core-js/modules/es.array.some');
          _dereq_('core-js/modules/es.math.sign');
          _dereq_('core-js/modules/es.number.constructor');
          _dereq_('core-js/modules/es.number.is-finite');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.regexp.to-string');
          _dereq_('core-js/modules/es.string.sub');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          var constants = _interopRequireWildcard(_dereq_('../core/constants'));
          function _getRequireWildcardCache() {
            if (typeof WeakMap !== 'function') return null;
            var cache = new WeakMap();
            _getRequireWildcardCache = function _getRequireWildcardCache() {
              return cache;
            };
            return cache;
          }
          function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
              return obj;
            }
            if (obj === null || (_typeof(obj) !== 'object' && typeof obj !== 'function')) {
              return { default: obj };
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
              return cache.get(obj);
            }
            var newObj = {};
            var hasPropertyDescriptor =
              Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
              if (Object.prototype.hasOwnProperty.call(obj, key)) {
                var desc = hasPropertyDescriptor
                  ? Object.getOwnPropertyDescriptor(obj, key)
                  : null;
                if (desc && (desc.get || desc.set)) {
                  Object.defineProperty(newObj, key, desc);
                } else {
                  newObj[key] = obj[key];
                }
              }
            }
            newObj.default = obj;
            if (cache) {
              cache.set(obj, newObj);
            }
            return newObj;
          }
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_2fdba07wu0.s[0]++;

          /**
           * A class to describe a two or three dimensional vector, specifically
           * a Euclidean (also known as geometric) vector. A vector is an entity
           * that has both magnitude and direction. The datatype, however, stores
           * the components of the vector (x, y for 2D, and x, y, z for 3D). The magnitude
           * and direction can be accessed via the methods <a href="#/p5.Vector/mag">mag()</a> and <a href="#/p5.Vector/heading">heading()</a>.
           *
           * In many of the p5.js examples, you will see <a href="#/p5.Vector">p5.Vector</a> used to describe a
           * position, velocity, or acceleration. For example, if you consider a rectangle
           * moving across the screen, at any given instant it has a position (a vector
           * that points from the origin to its location), a velocity (the rate at which
           * the object's position changes per time unit, expressed as a vector), and
           * acceleration (the rate at which the object's velocity changes per time
           * unit, expressed as a vector).
           *
           * Since vectors represent groupings of values, we cannot simply use
           * traditional addition/multiplication/etc. Instead, we'll need to do some
           * "vector" math, which is made easy by the methods inside the <a href="#/p5.Vector">p5.Vector</a> class.
           *
           * @class p5.Vector
           * @constructor
           * @param {Number} [x] x component of the vector
           * @param {Number} [y] y component of the vector
           * @param {Number} [z] z component of the vector
           * @example
           * <div>
           * <code>
           * let v1 = createVector(40, 50);
           * let v2 = createVector(40, 50);
           *
           * ellipse(v1.x, v1.y, 50, 50);
           * ellipse(v2.x, v2.y, 50, 50);
           * v1.add(v2);
           * ellipse(v1.x, v1.y, 50, 50);
           * </code>
           * </div>
           *
           * @alt
           * 2 white ellipses. One center-left the other bottom right and off canvas
           */
          _main.default.Vector = function Vector() {
            cov_2fdba07wu0.f[0]++;
            var x, y, z;
            // This is how it comes in with createVector()
            cov_2fdba07wu0.s[1]++;
            if (arguments[0] instanceof _main.default) {
              cov_2fdba07wu0.b[0][0]++;
              cov_2fdba07wu0.s[2]++;
              // save reference to p5 if passed in
              this.p5 = arguments[0];
              cov_2fdba07wu0.s[3]++;
              x =
                (cov_2fdba07wu0.b[1][0]++, arguments[1][0]) ||
                (cov_2fdba07wu0.b[1][1]++, 0);
              cov_2fdba07wu0.s[4]++;
              y =
                (cov_2fdba07wu0.b[2][0]++, arguments[1][1]) ||
                (cov_2fdba07wu0.b[2][1]++, 0);
              cov_2fdba07wu0.s[5]++;
              z =
                (cov_2fdba07wu0.b[3][0]++, arguments[1][2]) ||
                (cov_2fdba07wu0.b[3][1]++, 0);
              // This is what we'll get with new p5.Vector()
            } else {
              cov_2fdba07wu0.b[0][1]++;
              cov_2fdba07wu0.s[6]++;
              x = (cov_2fdba07wu0.b[4][0]++, arguments[0]) || (cov_2fdba07wu0.b[4][1]++, 0);
              cov_2fdba07wu0.s[7]++;
              y = (cov_2fdba07wu0.b[5][0]++, arguments[1]) || (cov_2fdba07wu0.b[5][1]++, 0);
              cov_2fdba07wu0.s[8]++;
              z = (cov_2fdba07wu0.b[6][0]++, arguments[2]) || (cov_2fdba07wu0.b[6][1]++, 0);
            }
            /**
             * The x component of the vector
             * @property x {Number}
             */ cov_2fdba07wu0.s[9]++;
            this.x = x;
            /**
             * The y component of the vector
             * @property y {Number}
             */ cov_2fdba07wu0.s[10]++;
            this.y = y;
            /**
             * The z component of the vector
             * @property z {Number}
             */ cov_2fdba07wu0.s[11]++;
            this.z = z;
          };

          /**
           * Returns a string representation of a vector v by calling String(v)
           * or v.toString(). This method is useful for logging vectors in the
           * console.
           * @method  toString
           * @return {String}
           * @example
           * <div class = "norender">
           * <code>
           * function setup() {
           *   let v = createVector(20, 30);
           *   print(String(v)); // prints "p5.Vector Object : [20, 30, 0]"
           * }
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * function draw() {
           *   background(240);
           *
           *   let v0 = createVector(0, 0);
           *   let v1 = createVector(mouseX, mouseY);
           *   drawArrow(v0, v1, 'black');
           *
           *   noStroke();
           *   text(v1.toString(), 10, 25, 90, 75);
           * }
           *
           * // draw an arrow for a vector at a given base position
           * function drawArrow(base, vec, myColor) {
           *   push();
           *   stroke(myColor);
           *   strokeWeight(3);
           *   fill(myColor);
           *   translate(base.x, base.y);
           *   line(0, 0, vec.x, vec.y);
           *   rotate(vec.heading());
           *   let arrowSize = 7;
           *   translate(vec.mag() - arrowSize, 0);
           *   triangle(0, arrowSize / 2, 0, -arrowSize / 2, arrowSize, 0);
           *   pop();
           * }
           * </code>
           * </div>
           */ cov_2fdba07wu0.s[12]++;
          _main.default.Vector.prototype.toString = function p5VectorToString() {
            cov_2fdba07wu0.f[1]++;
            cov_2fdba07wu0.s[13]++;
            return 'p5.Vector Object : ['
              .concat(this.x, ', ')
              .concat(this.y, ', ')
              .concat(this.z, ']');
          };

          /**
           * Sets the x, y, and z component of the vector using two or three separate
           * variables, the data from a <a href="#/p5.Vector">p5.Vector</a>, or the values from a float array.
           * @method set
           * @param {Number} [x] the x component of the vector
           * @param {Number} [y] the y component of the vector
           * @param {Number} [z] the z component of the vector
           * @chainable
           * @example
           * <div class="norender">
           * <code>
           * function setup() {
           *   let v = createVector(1, 2, 3);
           *   v.set(4, 5, 6); // Sets vector to [4, 5, 6]
           *
           *   let v1 = createVector(0, 0, 0);
           *   let arr = [1, 2, 3];
           *   v1.set(arr); // Sets vector to [1, 2, 3]
           * }
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * let v0, v1;
           * function setup() {
           *   createCanvas(100, 100);
           *
           *   v0 = createVector(0, 0);
           *   v1 = createVector(50, 50);
           * }
           *
           * function draw() {
           *   background(240);
           *
           *   drawArrow(v0, v1, 'black');
           *   v1.set(v1.x + random(-1, 1), v1.y + random(-1, 1));
           *
           *   noStroke();
           *   text('x: ' + round(v1.x) + ' y: ' + round(v1.y), 20, 90);
           * }
           *
           * // draw an arrow for a vector at a given base position
           * function drawArrow(base, vec, myColor) {
           *   push();
           *   stroke(myColor);
           *   strokeWeight(3);
           *   fill(myColor);
           *   translate(base.x, base.y);
           *   line(0, 0, vec.x, vec.y);
           *   rotate(vec.heading());
           *   let arrowSize = 7;
           *   translate(vec.mag() - arrowSize, 0);
           *   triangle(0, arrowSize / 2, 0, -arrowSize / 2, arrowSize, 0);
           *   pop();
           * }
           * </code>
           * </div>
           */
          /**
           * @method set
           * @param {p5.Vector|Number[]} value the vector to set
           * @chainable
           */ cov_2fdba07wu0.s[14]++;
          _main.default.Vector.prototype.set = function set(x, y, z) {
            cov_2fdba07wu0.f[2]++;
            cov_2fdba07wu0.s[15]++;
            if (x instanceof _main.default.Vector) {
              cov_2fdba07wu0.b[7][0]++;
              cov_2fdba07wu0.s[16]++;
              this.x = (cov_2fdba07wu0.b[8][0]++, x.x) || (cov_2fdba07wu0.b[8][1]++, 0);
              cov_2fdba07wu0.s[17]++;
              this.y = (cov_2fdba07wu0.b[9][0]++, x.y) || (cov_2fdba07wu0.b[9][1]++, 0);
              cov_2fdba07wu0.s[18]++;
              this.z = (cov_2fdba07wu0.b[10][0]++, x.z) || (cov_2fdba07wu0.b[10][1]++, 0);
              cov_2fdba07wu0.s[19]++;
              return this;
            } else {
              cov_2fdba07wu0.b[7][1]++;
            }
            cov_2fdba07wu0.s[20]++;
            if (x instanceof Array) {
              cov_2fdba07wu0.b[11][0]++;
              cov_2fdba07wu0.s[21]++;
              this.x = (cov_2fdba07wu0.b[12][0]++, x[0]) || (cov_2fdba07wu0.b[12][1]++, 0);
              cov_2fdba07wu0.s[22]++;
              this.y = (cov_2fdba07wu0.b[13][0]++, x[1]) || (cov_2fdba07wu0.b[13][1]++, 0);
              cov_2fdba07wu0.s[23]++;
              this.z = (cov_2fdba07wu0.b[14][0]++, x[2]) || (cov_2fdba07wu0.b[14][1]++, 0);
              cov_2fdba07wu0.s[24]++;
              return this;
            } else {
              cov_2fdba07wu0.b[11][1]++;
            }
            cov_2fdba07wu0.s[25]++;
            this.x = (cov_2fdba07wu0.b[15][0]++, x) || (cov_2fdba07wu0.b[15][1]++, 0);
            cov_2fdba07wu0.s[26]++;
            this.y = (cov_2fdba07wu0.b[16][0]++, y) || (cov_2fdba07wu0.b[16][1]++, 0);
            cov_2fdba07wu0.s[27]++;
            this.z = (cov_2fdba07wu0.b[17][0]++, z) || (cov_2fdba07wu0.b[17][1]++, 0);
            cov_2fdba07wu0.s[28]++;
            return this;
          };

          /**
           * Gets a copy of the vector, returns a <a href="#/p5.Vector">p5.Vector</a> object.
           *
           * @method copy
           * @return {p5.Vector} the copy of the <a href="#/p5.Vector">p5.Vector</a> object
           * @example
           * <div class="norender">
           * <code>
           * let v1 = createVector(1, 2, 3);
           * let v2 = v1.copy();
           * print(v1.x === v2.x && v1.y === v2.y && v1.z === v2.z);
           * // Prints "true"
           * </code>
           * </div>
           */ cov_2fdba07wu0.s[29]++;
          _main.default.Vector.prototype.copy = function copy() {
            cov_2fdba07wu0.f[3]++;
            cov_2fdba07wu0.s[30]++;
            if (this.p5) {
              cov_2fdba07wu0.b[18][0]++;
              cov_2fdba07wu0.s[31]++;
              return new _main.default.Vector(this.p5, [this.x, this.y, this.z]);
            } else {
              cov_2fdba07wu0.b[18][1]++;
              cov_2fdba07wu0.s[32]++;
              return new _main.default.Vector(this.x, this.y, this.z);
            }
          };

          /**
           * Adds x, y, and z components to a vector, adds one vector to another, or
           * adds two independent vectors together. The version of the method that adds
           * two vectors together is a static method and returns a <a href="#/p5.Vector">p5.Vector</a>, the others
           * acts directly on the vector. Additionally, you may provide arguments to this function as an array.
           * See the examples for more context.
           *
           * @method add
           * @param  {Number} x   the x component of the vector to be added
           * @param  {Number} [y] the y component of the vector to be added
           * @param  {Number} [z] the z component of the vector to be added
           * @chainable
           * @example
           * <div class="norender">
           * <code>
           * let v = createVector(1, 2, 3);
           * v.add(4, 5, 6);
           * // v's components are set to [5, 7, 9]
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * let v = createVector(1, 2, 3);
           * // Provide arguments as an array
           * let arr = [4, 5, 6];
           * v.add(arr);
           * // v's components are set to [5, 7, 9]
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * // Static method
           * let v1 = createVector(1, 2, 3);
           * let v2 = createVector(2, 3, 4);
           *
           * let v3 = p5.Vector.add(v1, v2);
           * // v3 has components [3, 5, 7]
           * print(v3);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // red vector + blue vector = purple vector
           * function draw() {
           *   background(240);
           *
           *   let v0 = createVector(0, 0);
           *   let v1 = createVector(mouseX, mouseY);
           *   drawArrow(v0, v1, 'red');
           *
           *   let v2 = createVector(-30, 20);
           *   drawArrow(v1, v2, 'blue');
           *
           *   let v3 = p5.Vector.add(v1, v2);
           *   drawArrow(v0, v3, 'purple');
           * }
           *
           * // draw an arrow for a vector at a given base position
           * function drawArrow(base, vec, myColor) {
           *   push();
           *   stroke(myColor);
           *   strokeWeight(3);
           *   fill(myColor);
           *   translate(base.x, base.y);
           *   line(0, 0, vec.x, vec.y);
           *   rotate(vec.heading());
           *   let arrowSize = 7;
           *   translate(vec.mag() - arrowSize, 0);
           *   triangle(0, arrowSize / 2, 0, -arrowSize / 2, arrowSize, 0);
           *   pop();
           * }
           * </code>
           * </div>
           */
          /**
           * @method add
           * @param  {p5.Vector|Number[]} value the vector to add
           * @chainable
           */ cov_2fdba07wu0.s[33]++;
          _main.default.Vector.prototype.add = function add(x, y, z) {
            cov_2fdba07wu0.f[4]++;
            cov_2fdba07wu0.s[34]++;
            if (x instanceof _main.default.Vector) {
              cov_2fdba07wu0.b[19][0]++;
              cov_2fdba07wu0.s[35]++;
              this.x += (cov_2fdba07wu0.b[20][0]++, x.x) || (cov_2fdba07wu0.b[20][1]++, 0);
              cov_2fdba07wu0.s[36]++;
              this.y += (cov_2fdba07wu0.b[21][0]++, x.y) || (cov_2fdba07wu0.b[21][1]++, 0);
              cov_2fdba07wu0.s[37]++;
              this.z += (cov_2fdba07wu0.b[22][0]++, x.z) || (cov_2fdba07wu0.b[22][1]++, 0);
              cov_2fdba07wu0.s[38]++;
              return this;
            } else {
              cov_2fdba07wu0.b[19][1]++;
            }
            cov_2fdba07wu0.s[39]++;
            if (x instanceof Array) {
              cov_2fdba07wu0.b[23][0]++;
              cov_2fdba07wu0.s[40]++;
              this.x += (cov_2fdba07wu0.b[24][0]++, x[0]) || (cov_2fdba07wu0.b[24][1]++, 0);
              cov_2fdba07wu0.s[41]++;
              this.y += (cov_2fdba07wu0.b[25][0]++, x[1]) || (cov_2fdba07wu0.b[25][1]++, 0);
              cov_2fdba07wu0.s[42]++;
              this.z += (cov_2fdba07wu0.b[26][0]++, x[2]) || (cov_2fdba07wu0.b[26][1]++, 0);
              cov_2fdba07wu0.s[43]++;
              return this;
            } else {
              cov_2fdba07wu0.b[23][1]++;
            }
            cov_2fdba07wu0.s[44]++;
            this.x += (cov_2fdba07wu0.b[27][0]++, x) || (cov_2fdba07wu0.b[27][1]++, 0);
            cov_2fdba07wu0.s[45]++;
            this.y += (cov_2fdba07wu0.b[28][0]++, y) || (cov_2fdba07wu0.b[28][1]++, 0);
            cov_2fdba07wu0.s[46]++;
            this.z += (cov_2fdba07wu0.b[29][0]++, z) || (cov_2fdba07wu0.b[29][1]++, 0);
            cov_2fdba07wu0.s[47]++;
            return this;
          };

          /// HELPERS FOR REMAINDER METHOD
          cov_2fdba07wu0.s[48]++;
          var calculateRemainder2D = function calculateRemainder2D(xComponent, yComponent) {
            cov_2fdba07wu0.f[5]++;
            cov_2fdba07wu0.s[49]++;
            if (xComponent !== 0) {
              cov_2fdba07wu0.b[30][0]++;
              cov_2fdba07wu0.s[50]++;
              this.x = this.x % xComponent;
            } else {
              cov_2fdba07wu0.b[30][1]++;
            }
            cov_2fdba07wu0.s[51]++;
            if (yComponent !== 0) {
              cov_2fdba07wu0.b[31][0]++;
              cov_2fdba07wu0.s[52]++;
              this.y = this.y % yComponent;
            } else {
              cov_2fdba07wu0.b[31][1]++;
            }
            cov_2fdba07wu0.s[53]++;
            return this;
          };
          cov_2fdba07wu0.s[54]++;

          var calculateRemainder3D = function calculateRemainder3D(
            xComponent,
            yComponent,
            zComponent
          ) {
            cov_2fdba07wu0.f[6]++;
            cov_2fdba07wu0.s[55]++;
            if (xComponent !== 0) {
              cov_2fdba07wu0.b[32][0]++;
              cov_2fdba07wu0.s[56]++;
              this.x = this.x % xComponent;
            } else {
              cov_2fdba07wu0.b[32][1]++;
            }
            cov_2fdba07wu0.s[57]++;
            if (yComponent !== 0) {
              cov_2fdba07wu0.b[33][0]++;
              cov_2fdba07wu0.s[58]++;
              this.y = this.y % yComponent;
            } else {
              cov_2fdba07wu0.b[33][1]++;
            }
            cov_2fdba07wu0.s[59]++;
            if (zComponent !== 0) {
              cov_2fdba07wu0.b[34][0]++;
              cov_2fdba07wu0.s[60]++;
              this.z = this.z % zComponent;
            } else {
              cov_2fdba07wu0.b[34][1]++;
            }
            cov_2fdba07wu0.s[61]++;
            return this;
          };
          /**
           * Gives remainder of a vector when it is divided by another vector.
           * See examples for more context.
           *
           * @method rem
           * @param {Number} x the x component of divisor vector
           * @param {Number} y the y component of divisor vector
           * @param {Number} z the z component of divisor vector
           * @chainable
           * @example
           * <div class='norender'>
           * <code>
           * let v = createVector(3, 4, 5);
           * v.rem(2, 3, 4);
           * // v's components are set to [1, 1, 1]
           * </code>
           * </div>
           * <div class="norender">
           * <code>
           * // Static method
           * let v1 = createVector(3, 4, 5);
           * let v2 = createVector(2, 3, 4);
           *
           * let v3 = p5.Vector.rem(v1, v2);
           * // v3 has components [1, 1, 1]
           * print(v3);
           * </code>
           * </div>
           */
          /**
           * @method rem
           * @param {p5.Vector | Number[]}  value  divisor vector
           * @chainable
           */ cov_2fdba07wu0.s[62]++;
          _main.default.Vector.prototype.rem = function rem(x, y, z) {
            cov_2fdba07wu0.f[7]++;
            cov_2fdba07wu0.s[63]++;
            if (x instanceof _main.default.Vector) {
              cov_2fdba07wu0.b[35][0]++;
              cov_2fdba07wu0.s[64]++;
              if (
                (cov_2fdba07wu0.b[37][0]++, Number.isFinite(x.x)) &&
                (cov_2fdba07wu0.b[37][1]++, Number.isFinite(x.y)) &&
                (cov_2fdba07wu0.b[37][2]++, Number.isFinite(x.z))
              ) {
                cov_2fdba07wu0.b[36][0]++;
                var xComponent = (cov_2fdba07wu0.s[65]++, parseFloat(x.x));
                var yComponent = (cov_2fdba07wu0.s[66]++, parseFloat(x.y));
                var zComponent = (cov_2fdba07wu0.s[67]++, parseFloat(x.z));
                cov_2fdba07wu0.s[68]++;
                calculateRemainder3D.call(this, xComponent, yComponent, zComponent);
              } else {
                cov_2fdba07wu0.b[36][1]++;
              }
            } else {
              cov_2fdba07wu0.b[35][1]++;
              cov_2fdba07wu0.s[69]++;
              if (x instanceof Array) {
                cov_2fdba07wu0.b[38][0]++;
                cov_2fdba07wu0.s[70]++;
                if (
                  x.every(function(element) {
                    cov_2fdba07wu0.f[8]++;
                    cov_2fdba07wu0.s[71]++;
                    return Number.isFinite(element);
                  })
                ) {
                  cov_2fdba07wu0.b[39][0]++;
                  cov_2fdba07wu0.s[72]++;
                  if (x.length === 2) {
                    cov_2fdba07wu0.b[40][0]++;
                    cov_2fdba07wu0.s[73]++;
                    calculateRemainder2D.call(this, x[0], x[1]);
                  } else {
                    cov_2fdba07wu0.b[40][1]++;
                  }
                  cov_2fdba07wu0.s[74]++;
                  if (x.length === 3) {
                    cov_2fdba07wu0.b[41][0]++;
                    cov_2fdba07wu0.s[75]++;
                    calculateRemainder3D.call(this, x[0], x[1], x[2]);
                  } else {
                    cov_2fdba07wu0.b[41][1]++;
                  }
                } else {
                  cov_2fdba07wu0.b[39][1]++;
                }
              } else {
                cov_2fdba07wu0.b[38][1]++;
                cov_2fdba07wu0.s[76]++;
                if (arguments.length === 1) {
                  cov_2fdba07wu0.b[42][0]++;
                  cov_2fdba07wu0.s[77]++;
                  if (
                    (cov_2fdba07wu0.b[44][0]++, Number.isFinite(arguments[0])) &&
                    (cov_2fdba07wu0.b[44][1]++, arguments[0] !== 0)
                  ) {
                    cov_2fdba07wu0.b[43][0]++;
                    cov_2fdba07wu0.s[78]++;
                    this.x = this.x % arguments[0];
                    cov_2fdba07wu0.s[79]++;
                    this.y = this.y % arguments[0];
                    cov_2fdba07wu0.s[80]++;
                    this.z = this.z % arguments[0];
                    cov_2fdba07wu0.s[81]++;
                    return this;
                  } else {
                    cov_2fdba07wu0.b[43][1]++;
                  }
                } else {
                  cov_2fdba07wu0.b[42][1]++;
                  cov_2fdba07wu0.s[82]++;
                  if (arguments.length === 2) {
                    cov_2fdba07wu0.b[45][0]++;
                    var vectorComponents = (cov_2fdba07wu0.s[83]++,
                    Array.prototype.slice.call(arguments));
                    cov_2fdba07wu0.s[84]++;
                    if (
                      vectorComponents.every(function(element) {
                        cov_2fdba07wu0.f[9]++;
                        cov_2fdba07wu0.s[85]++;
                        return Number.isFinite(element);
                      })
                    ) {
                      cov_2fdba07wu0.b[46][0]++;
                      cov_2fdba07wu0.s[86]++;
                      if (vectorComponents.length === 2) {
                        cov_2fdba07wu0.b[47][0]++;
                        cov_2fdba07wu0.s[87]++;
                        calculateRemainder2D.call(
                          this,
                          vectorComponents[0],
                          vectorComponents[1]
                        );
                      } else {
                        cov_2fdba07wu0.b[47][1]++;
                      }
                    } else {
                      cov_2fdba07wu0.b[46][1]++;
                    }
                  } else {
                    cov_2fdba07wu0.b[45][1]++;
                    cov_2fdba07wu0.s[88]++;
                    if (arguments.length === 3) {
                      cov_2fdba07wu0.b[48][0]++;
                      var _vectorComponents = (cov_2fdba07wu0.s[89]++,
                      Array.prototype.slice.call(arguments));
                      cov_2fdba07wu0.s[90]++;
                      if (
                        _vectorComponents.every(function(element) {
                          cov_2fdba07wu0.f[10]++;
                          cov_2fdba07wu0.s[91]++;
                          return Number.isFinite(element);
                        })
                      ) {
                        cov_2fdba07wu0.b[49][0]++;
                        cov_2fdba07wu0.s[92]++;
                        if (_vectorComponents.length === 3) {
                          cov_2fdba07wu0.b[50][0]++;
                          cov_2fdba07wu0.s[93]++;
                          calculateRemainder3D.call(
                            this,
                            _vectorComponents[0],
                            _vectorComponents[1],
                            _vectorComponents[2]
                          );
                        } else {
                          cov_2fdba07wu0.b[50][1]++;
                        }
                      } else {
                        cov_2fdba07wu0.b[49][1]++;
                      }
                    } else {
                      cov_2fdba07wu0.b[48][1]++;
                    }
                  }
                }
              }
            }
          };

          /**
           * Subtracts x, y, and z components from a vector, subtracts one vector from
           * another, or subtracts two independent vectors. The version of the method
           * that subtracts two vectors is a static method and returns a <a href="#/p5.Vector">p5.Vector</a>, the
           * other acts directly on the vector. Additionally, you may provide arguments to this function as an array.
           * See the examples for more context.
           *
           * @method sub
           * @param  {Number} x   the x component of the vector to subtract
           * @param  {Number} [y] the y component of the vector to subtract
           * @param  {Number} [z] the z component of the vector to subtract
           * @chainable
           * @example
           * <div class="norender">
           * <code>
           * let v = createVector(4, 5, 6);
           * v.sub(1, 1, 1);
           * // v's components are set to [3, 4, 5]
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * let v = createVector(4, 5, 6);
           * // Provide arguments as an array
           * let arr = [1, 1, 1];
           * v.sub(arr);
           * // v's components are set to [3, 4, 5]
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * // Static method
           * let v1 = createVector(2, 3, 4);
           * let v2 = createVector(1, 2, 3);
           *
           * let v3 = p5.Vector.sub(v1, v2);
           * // v3 has components [1, 1, 1]
           * print(v3);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // red vector - blue vector = purple vector
           * function draw() {
           *   background(240);
           *
           *   let v0 = createVector(0, 0);
           *   let v1 = createVector(70, 50);
           *   drawArrow(v0, v1, 'red');
           *
           *   let v2 = createVector(mouseX, mouseY);
           *   drawArrow(v0, v2, 'blue');
           *
           *   let v3 = p5.Vector.sub(v1, v2);
           *   drawArrow(v2, v3, 'purple');
           * }
           *
           * // draw an arrow for a vector at a given base position
           * function drawArrow(base, vec, myColor) {
           *   push();
           *   stroke(myColor);
           *   strokeWeight(3);
           *   fill(myColor);
           *   translate(base.x, base.y);
           *   line(0, 0, vec.x, vec.y);
           *   rotate(vec.heading());
           *   let arrowSize = 7;
           *   translate(vec.mag() - arrowSize, 0);
           *   triangle(0, arrowSize / 2, 0, -arrowSize / 2, arrowSize, 0);
           *   pop();
           * }
           * </code>
           * </div>
           */
          /**
           * @method sub
           * @param  {p5.Vector|Number[]} value the vector to subtract
           * @chainable
           */ cov_2fdba07wu0.s[94]++;
          _main.default.Vector.prototype.sub = function sub(x, y, z) {
            cov_2fdba07wu0.f[11]++;
            cov_2fdba07wu0.s[95]++;
            if (x instanceof _main.default.Vector) {
              cov_2fdba07wu0.b[51][0]++;
              cov_2fdba07wu0.s[96]++;
              this.x -= (cov_2fdba07wu0.b[52][0]++, x.x) || (cov_2fdba07wu0.b[52][1]++, 0);
              cov_2fdba07wu0.s[97]++;
              this.y -= (cov_2fdba07wu0.b[53][0]++, x.y) || (cov_2fdba07wu0.b[53][1]++, 0);
              cov_2fdba07wu0.s[98]++;
              this.z -= (cov_2fdba07wu0.b[54][0]++, x.z) || (cov_2fdba07wu0.b[54][1]++, 0);
              cov_2fdba07wu0.s[99]++;
              return this;
            } else {
              cov_2fdba07wu0.b[51][1]++;
            }
            cov_2fdba07wu0.s[100]++;
            if (x instanceof Array) {
              cov_2fdba07wu0.b[55][0]++;
              cov_2fdba07wu0.s[101]++;
              this.x -= (cov_2fdba07wu0.b[56][0]++, x[0]) || (cov_2fdba07wu0.b[56][1]++, 0);
              cov_2fdba07wu0.s[102]++;
              this.y -= (cov_2fdba07wu0.b[57][0]++, x[1]) || (cov_2fdba07wu0.b[57][1]++, 0);
              cov_2fdba07wu0.s[103]++;
              this.z -= (cov_2fdba07wu0.b[58][0]++, x[2]) || (cov_2fdba07wu0.b[58][1]++, 0);
              cov_2fdba07wu0.s[104]++;
              return this;
            } else {
              cov_2fdba07wu0.b[55][1]++;
            }
            cov_2fdba07wu0.s[105]++;
            this.x -= (cov_2fdba07wu0.b[59][0]++, x) || (cov_2fdba07wu0.b[59][1]++, 0);
            cov_2fdba07wu0.s[106]++;
            this.y -= (cov_2fdba07wu0.b[60][0]++, y) || (cov_2fdba07wu0.b[60][1]++, 0);
            cov_2fdba07wu0.s[107]++;
            this.z -= (cov_2fdba07wu0.b[61][0]++, z) || (cov_2fdba07wu0.b[61][1]++, 0);
            cov_2fdba07wu0.s[108]++;
            return this;
          };

          /**
           * Multiplies the vector by a scalar, multiplies the x, y, and z components from a vector, or multiplies
           * the x, y, and z components of two independent vectors. When multiplying a vector by a scalar, the x, y,
           * and z components of the vector are all multiplied by the scalar. When multiplying a vector by a vector,
           * the x, y, z components of both vectors are multiplied by each other
           * (for example, with two vectors a and b: a.x * b.x, a.y * b.y, a.z * b.z). The static version of this method
           * creates a new <a href="#/p5.Vector">p5.Vector</a> while the non static version acts on the vector
           * directly. Additionally, you may provide arguments to this function as an array.
           * See the examples for more context.
           *
           * @method mult
           * @param  {Number} n The number to multiply with the vector
           * @chainable
           * @example
           * <div class="norender">
           * <code>
           * let v = createVector(1, 2, 3);
           * v.mult(2);
           * // v's components are set to [2, 4, 6]
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * let v0 = createVector(1, 2, 3);
           * let v1 = createVector(2, 3, 4);
           * v0.mult(v1); // v0's components are set to [2, 6, 12]
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * let v0 = createVector(1, 2, 3);
           * // Provide arguments as an array
           * let arr = [2, 3, 4];
           * v0.mult(arr); // v0's components are set to [2, 6, 12]
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * let v0 = createVector(1, 2, 3);
           * let v1 = createVector(2, 3, 4);
           * const result = p5.Vector.mult(v0, v1);
           * print(result); // result's components are set to [2, 6, 12]
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * // Static method
           * let v1 = createVector(1, 2, 3);
           * let v2 = p5.Vector.mult(v1, 2);
           * // v2 has components [2, 4, 6]
           * print(v2);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * function draw() {
           *   background(240);
           *
           *   let v0 = createVector(50, 50);
           *   let v1 = createVector(25, -25);
           *   drawArrow(v0, v1, 'red');
           *
           *   let num = map(mouseX, 0, width, -2, 2, true);
           *   let v2 = p5.Vector.mult(v1, num);
           *   drawArrow(v0, v2, 'blue');
           *
           *   noStroke();
           *   text('multiplied by ' + num.toFixed(2), 5, 90);
           * }
           *
           * // draw an arrow for a vector at a given base position
           * function drawArrow(base, vec, myColor) {
           *   push();
           *   stroke(myColor);
           *   strokeWeight(3);
           *   fill(myColor);
           *   translate(base.x, base.y);
           *   line(0, 0, vec.x, vec.y);
           *   rotate(vec.heading());
           *   let arrowSize = 7;
           *   translate(vec.mag() - arrowSize, 0);
           *   triangle(0, arrowSize / 2, 0, -arrowSize / 2, arrowSize, 0);
           *   pop();
           * }
           * </code>
           * </div>
           */

          /**
           * @method mult
           * @param  {Number} x The number to multiply with the x component of the vector
           * @param  {Number} y The number to multiply with the y component of the vector
           * @param  {Number} [z] The number to multiply with the z component of the vector
           * @chainable
           */

          /**
           * @method mult
           * @param  {Number[]} arr The array to multiply with the components of the vector
           * @chainable
           */

          /**
           * @method mult
           * @param  {p5.Vector} v The vector to multiply with the components of the original vector
           * @chainable
           */ cov_2fdba07wu0.s[109]++;

          _main.default.Vector.prototype.mult = function mult(x, y, z) {
            cov_2fdba07wu0.f[12]++;
            cov_2fdba07wu0.s[110]++;
            if (x instanceof _main.default.Vector) {
              cov_2fdba07wu0.b[62][0]++;
              cov_2fdba07wu0.s[111]++;
              // new p5.Vector will check that values are valid upon construction but it's possible
              // that someone could change the value of a component after creation, which is why we still
              // perform this check
              if (
                (cov_2fdba07wu0.b[64][0]++, Number.isFinite(x.x)) &&
                (cov_2fdba07wu0.b[64][1]++, Number.isFinite(x.y)) &&
                (cov_2fdba07wu0.b[64][2]++, Number.isFinite(x.z)) &&
                (cov_2fdba07wu0.b[64][3]++, typeof x.x === 'number') &&
                (cov_2fdba07wu0.b[64][4]++, typeof x.y === 'number') &&
                (cov_2fdba07wu0.b[64][5]++, typeof x.z === 'number')
              ) {
                cov_2fdba07wu0.b[63][0]++;
                cov_2fdba07wu0.s[112]++;
                this.x *= x.x;
                cov_2fdba07wu0.s[113]++;
                this.y *= x.y;
                cov_2fdba07wu0.s[114]++;
                this.z *= x.z;
              } else {
                cov_2fdba07wu0.b[63][1]++;
                cov_2fdba07wu0.s[115]++;
                console.warn(
                  'p5.Vector.prototype.mult:',
                  'x contains components that are either undefined or not finite numbers'
                );
              }
              cov_2fdba07wu0.s[116]++;
              return this;
            } else {
              cov_2fdba07wu0.b[62][1]++;
            }
            cov_2fdba07wu0.s[117]++;
            if (x instanceof Array) {
              cov_2fdba07wu0.b[65][0]++;
              cov_2fdba07wu0.s[118]++;
              if (
                (cov_2fdba07wu0.b[67][0]++,
                x.every(function(element) {
                  cov_2fdba07wu0.f[13]++;
                  cov_2fdba07wu0.s[119]++;
                  return Number.isFinite(element);
                })) &&
                (cov_2fdba07wu0.b[67][1]++,
                x.every(function(element) {
                  cov_2fdba07wu0.f[14]++;
                  cov_2fdba07wu0.s[120]++;
                  return typeof element === 'number';
                }))
              ) {
                cov_2fdba07wu0.b[66][0]++;
                cov_2fdba07wu0.s[121]++;
                if (x.length === 1) {
                  cov_2fdba07wu0.b[68][0]++;
                  cov_2fdba07wu0.s[122]++;
                  this.x *= x[0];
                  cov_2fdba07wu0.s[123]++;
                  this.y *= x[0];
                  cov_2fdba07wu0.s[124]++;
                  this.z *= x[0];
                } else {
                  cov_2fdba07wu0.b[68][1]++;
                  cov_2fdba07wu0.s[125]++;
                  if (x.length === 2) {
                    cov_2fdba07wu0.b[69][0]++;
                    cov_2fdba07wu0.s[126]++;
                    this.x *= x[0];
                    cov_2fdba07wu0.s[127]++;
                    this.y *= x[1];
                  } else {
                    cov_2fdba07wu0.b[69][1]++;
                    cov_2fdba07wu0.s[128]++;
                    if (x.length === 3) {
                      cov_2fdba07wu0.b[70][0]++;
                      cov_2fdba07wu0.s[129]++;
                      this.x *= x[0];
                      cov_2fdba07wu0.s[130]++;
                      this.y *= x[1];
                      cov_2fdba07wu0.s[131]++;
                      this.z *= x[2];
                    } else {
                      cov_2fdba07wu0.b[70][1]++;
                    }
                  }
                }
              } else {
                cov_2fdba07wu0.b[66][1]++;
                cov_2fdba07wu0.s[132]++;
                console.warn(
                  'p5.Vector.prototype.mult:',
                  'x contains elements that are either undefined or not finite numbers'
                );
              }
              cov_2fdba07wu0.s[133]++;
              return this;
            } else {
              cov_2fdba07wu0.b[65][1]++;
            }

            var vectorComponents = (cov_2fdba07wu0.s[134]++,
            Array.prototype.slice.call(arguments));
            cov_2fdba07wu0.s[135]++;
            if (
              (cov_2fdba07wu0.b[72][0]++,
              vectorComponents.every(function(element) {
                cov_2fdba07wu0.f[15]++;
                cov_2fdba07wu0.s[136]++;
                return Number.isFinite(element);
              })) &&
              (cov_2fdba07wu0.b[72][1]++,
              vectorComponents.every(function(element) {
                cov_2fdba07wu0.f[16]++;
                cov_2fdba07wu0.s[137]++;
                return typeof element === 'number';
              }))
            ) {
              cov_2fdba07wu0.b[71][0]++;
              cov_2fdba07wu0.s[138]++;
              if (arguments.length === 1) {
                cov_2fdba07wu0.b[73][0]++;
                cov_2fdba07wu0.s[139]++;
                this.x *= x;
                cov_2fdba07wu0.s[140]++;
                this.y *= x;
                cov_2fdba07wu0.s[141]++;
                this.z *= x;
              } else {
                cov_2fdba07wu0.b[73][1]++;
              }
              cov_2fdba07wu0.s[142]++;
              if (arguments.length === 2) {
                cov_2fdba07wu0.b[74][0]++;
                cov_2fdba07wu0.s[143]++;
                this.x *= x;
                cov_2fdba07wu0.s[144]++;
                this.y *= y;
              } else {
                cov_2fdba07wu0.b[74][1]++;
              }
              cov_2fdba07wu0.s[145]++;
              if (arguments.length === 3) {
                cov_2fdba07wu0.b[75][0]++;
                cov_2fdba07wu0.s[146]++;
                this.x *= x;
                cov_2fdba07wu0.s[147]++;
                this.y *= y;
                cov_2fdba07wu0.s[148]++;
                this.z *= z;
              } else {
                cov_2fdba07wu0.b[75][1]++;
              }
            } else {
              cov_2fdba07wu0.b[71][1]++;
              cov_2fdba07wu0.s[149]++;
              console.warn(
                'p5.Vector.prototype.mult:',
                'x, y, or z arguments are either undefined or not a finite number'
              );
            }
            cov_2fdba07wu0.s[150]++;

            return this;
          };

          /**
           * Divides the vector by a scalar, divides a vector by the x, y, and z arguments, or divides the x, y, and
           * z components of two vectors against each other. When dividing a vector by a scalar, the x, y,
           * and z components of the vector are all divided by the scalar. When dividing a vector by a vector,
           * the x, y, z components of the source vector are treated as the dividend, and the x, y, z components
           * of the argument is treated as the divisor (for example with two vectors a and b: a.x / b.x, a.y / b.y, a.z / b.z).
           * The static version of this method creates a
           * new <a href="#/p5.Vector">p5.Vector</a> while the non static version acts on the vector directly.
           * Additionally, you may provide arguments to this function as an array.
           * See the examples for more context.
           *
           * @method div
           * @param  {number}    n The number to divide the vector by
           * @chainable
           * @example
           * <div class="norender">
           * <code>
           * let v = createVector(6, 4, 2);
           * v.div(2); //v's components are set to [3, 2, 1]
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * let v0 = createVector(9, 4, 2);
           * let v1 = createVector(3, 2, 4);
           * v0.div(v1); // v0's components are set to [3, 2, 0.5]
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * let v0 = createVector(9, 4, 2);
           * // Provide arguments as an array
           * let arr = [3, 2, 4];
           * v0.div(arr); // v0's components are set to [3, 2, 0.5]
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * let v0 = createVector(9, 4, 2);
           * let v1 = createVector(3, 2, 4);
           * let result = p5.Vector.div(v0, v1);
           * print(result); // result's components are set to [3, 2, 0.5]
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * // Static method
           * let v1 = createVector(6, 4, 2);
           * let v2 = p5.Vector.div(v1, 2);
           * // v2 has components [3, 2, 1]
           * print(v2);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * function draw() {
           *   background(240);
           *
           *   let v0 = createVector(0, 100);
           *   let v1 = createVector(50, -50);
           *   drawArrow(v0, v1, 'red');
           *
           *   let num = map(mouseX, 0, width, 10, 0.5, true);
           *   let v2 = p5.Vector.div(v1, num);
           *   drawArrow(v0, v2, 'blue');
           *
           *   noStroke();
           *   text('divided by ' + num.toFixed(2), 10, 90);
           * }
           *
           * // draw an arrow for a vector at a given base position
           * function drawArrow(base, vec, myColor) {
           *   push();
           *   stroke(myColor);
           *   strokeWeight(3);
           *   fill(myColor);
           *   translate(base.x, base.y);
           *   line(0, 0, vec.x, vec.y);
           *   rotate(vec.heading());
           *   let arrowSize = 7;
           *   translate(vec.mag() - arrowSize, 0);
           *   triangle(0, arrowSize / 2, 0, -arrowSize / 2, arrowSize, 0);
           *   pop();
           * }
           * </code>
           * </div>
           */

          /**
           * @method div
           * @param  {Number} x The number to divide with the x component of the vector
           * @param  {Number} y The number to divide with the y component of the vector
           * @param  {Number} [z] The number to divide with the z component of the vector
           * @chainable
           */

          /**
           * @method div
           * @param  {Number[]} arr The array to divide the components of the vector by
           * @chainable
           */

          /**
           * @method div
           * @param  {p5.Vector} v The vector to divide the components of the original vector by
           * @chainable
           */ cov_2fdba07wu0.s[151]++;
          _main.default.Vector.prototype.div = function div(x, y, z) {
            cov_2fdba07wu0.f[17]++;
            cov_2fdba07wu0.s[152]++;
            if (x instanceof _main.default.Vector) {
              cov_2fdba07wu0.b[76][0]++;
              cov_2fdba07wu0.s[153]++;
              // new p5.Vector will check that values are valid upon construction but it's possible
              // that someone could change the value of a component after creation, which is why we still
              // perform this check
              if (
                (cov_2fdba07wu0.b[78][0]++, Number.isFinite(x.x)) &&
                (cov_2fdba07wu0.b[78][1]++, Number.isFinite(x.y)) &&
                (cov_2fdba07wu0.b[78][2]++, Number.isFinite(x.z)) &&
                (cov_2fdba07wu0.b[78][3]++, typeof x.x === 'number') &&
                (cov_2fdba07wu0.b[78][4]++, typeof x.y === 'number') &&
                (cov_2fdba07wu0.b[78][5]++, typeof x.z === 'number')
              ) {
                cov_2fdba07wu0.b[77][0]++;
                cov_2fdba07wu0.s[154]++;
                if (
                  (cov_2fdba07wu0.b[80][0]++, x.x === 0) ||
                  (cov_2fdba07wu0.b[80][1]++, x.y === 0) ||
                  (cov_2fdba07wu0.b[80][2]++, x.z === 0)
                ) {
                  cov_2fdba07wu0.b[79][0]++;
                  cov_2fdba07wu0.s[155]++;
                  console.warn('p5.Vector.prototype.div:', 'divide by 0');
                  cov_2fdba07wu0.s[156]++;
                  return this;
                } else {
                  cov_2fdba07wu0.b[79][1]++;
                }
                cov_2fdba07wu0.s[157]++;
                this.x /= x.x;
                cov_2fdba07wu0.s[158]++;
                this.y /= x.y;
                cov_2fdba07wu0.s[159]++;
                this.z /= x.z;
              } else {
                cov_2fdba07wu0.b[77][1]++;
                cov_2fdba07wu0.s[160]++;
                console.warn(
                  'p5.Vector.prototype.div:',
                  'x contains components that are either undefined or not finite numbers'
                );
              }
              cov_2fdba07wu0.s[161]++;
              return this;
            } else {
              cov_2fdba07wu0.b[76][1]++;
            }
            cov_2fdba07wu0.s[162]++;
            if (x instanceof Array) {
              cov_2fdba07wu0.b[81][0]++;
              cov_2fdba07wu0.s[163]++;
              if (
                (cov_2fdba07wu0.b[83][0]++,
                x.every(function(element) {
                  cov_2fdba07wu0.f[18]++;
                  cov_2fdba07wu0.s[164]++;
                  return Number.isFinite(element);
                })) &&
                (cov_2fdba07wu0.b[83][1]++,
                x.every(function(element) {
                  cov_2fdba07wu0.f[19]++;
                  cov_2fdba07wu0.s[165]++;
                  return typeof element === 'number';
                }))
              ) {
                cov_2fdba07wu0.b[82][0]++;
                cov_2fdba07wu0.s[166]++;
                if (
                  x.some(function(element) {
                    cov_2fdba07wu0.f[20]++;
                    cov_2fdba07wu0.s[167]++;
                    return element === 0;
                  })
                ) {
                  cov_2fdba07wu0.b[84][0]++;
                  cov_2fdba07wu0.s[168]++;
                  console.warn('p5.Vector.prototype.div:', 'divide by 0');
                  cov_2fdba07wu0.s[169]++;
                  return this;
                } else {
                  cov_2fdba07wu0.b[84][1]++;
                }
                cov_2fdba07wu0.s[170]++;

                if (x.length === 1) {
                  cov_2fdba07wu0.b[85][0]++;
                  cov_2fdba07wu0.s[171]++;
                  this.x /= x[0];
                  cov_2fdba07wu0.s[172]++;
                  this.y /= x[0];
                  cov_2fdba07wu0.s[173]++;
                  this.z /= x[0];
                } else {
                  cov_2fdba07wu0.b[85][1]++;
                  cov_2fdba07wu0.s[174]++;
                  if (x.length === 2) {
                    cov_2fdba07wu0.b[86][0]++;
                    cov_2fdba07wu0.s[175]++;
                    this.x /= x[0];
                    cov_2fdba07wu0.s[176]++;
                    this.y /= x[1];
                  } else {
                    cov_2fdba07wu0.b[86][1]++;
                    cov_2fdba07wu0.s[177]++;
                    if (x.length === 3) {
                      cov_2fdba07wu0.b[87][0]++;
                      cov_2fdba07wu0.s[178]++;
                      this.x /= x[0];
                      cov_2fdba07wu0.s[179]++;
                      this.y /= x[1];
                      cov_2fdba07wu0.s[180]++;
                      this.z /= x[2];
                    } else {
                      cov_2fdba07wu0.b[87][1]++;
                    }
                  }
                }
              } else {
                cov_2fdba07wu0.b[82][1]++;
                cov_2fdba07wu0.s[181]++;
                console.warn(
                  'p5.Vector.prototype.div:',
                  'x contains components that are either undefined or not finite numbers'
                );
              }
              cov_2fdba07wu0.s[182]++;

              return this;
            } else {
              cov_2fdba07wu0.b[81][1]++;
            }

            var vectorComponents = (cov_2fdba07wu0.s[183]++,
            Array.prototype.slice.call(arguments));
            cov_2fdba07wu0.s[184]++;
            if (
              (cov_2fdba07wu0.b[89][0]++,
              vectorComponents.every(function(element) {
                cov_2fdba07wu0.f[21]++;
                cov_2fdba07wu0.s[185]++;
                return Number.isFinite(element);
              })) &&
              (cov_2fdba07wu0.b[89][1]++,
              vectorComponents.every(function(element) {
                cov_2fdba07wu0.f[22]++;
                cov_2fdba07wu0.s[186]++;
                return typeof element === 'number';
              }))
            ) {
              cov_2fdba07wu0.b[88][0]++;
              cov_2fdba07wu0.s[187]++;
              if (
                vectorComponents.some(function(element) {
                  cov_2fdba07wu0.f[23]++;
                  cov_2fdba07wu0.s[188]++;
                  return element === 0;
                })
              ) {
                cov_2fdba07wu0.b[90][0]++;
                cov_2fdba07wu0.s[189]++;
                console.warn('p5.Vector.prototype.div:', 'divide by 0');
                cov_2fdba07wu0.s[190]++;
                return this;
              } else {
                cov_2fdba07wu0.b[90][1]++;
              }
              cov_2fdba07wu0.s[191]++;

              if (arguments.length === 1) {
                cov_2fdba07wu0.b[91][0]++;
                cov_2fdba07wu0.s[192]++;
                this.x /= x;
                cov_2fdba07wu0.s[193]++;
                this.y /= x;
                cov_2fdba07wu0.s[194]++;
                this.z /= x;
              } else {
                cov_2fdba07wu0.b[91][1]++;
              }
              cov_2fdba07wu0.s[195]++;
              if (arguments.length === 2) {
                cov_2fdba07wu0.b[92][0]++;
                cov_2fdba07wu0.s[196]++;
                this.x /= x;
                cov_2fdba07wu0.s[197]++;
                this.y /= y;
              } else {
                cov_2fdba07wu0.b[92][1]++;
              }
              cov_2fdba07wu0.s[198]++;
              if (arguments.length === 3) {
                cov_2fdba07wu0.b[93][0]++;
                cov_2fdba07wu0.s[199]++;
                this.x /= x;
                cov_2fdba07wu0.s[200]++;
                this.y /= y;
                cov_2fdba07wu0.s[201]++;
                this.z /= z;
              } else {
                cov_2fdba07wu0.b[93][1]++;
              }
            } else {
              cov_2fdba07wu0.b[88][1]++;
              cov_2fdba07wu0.s[202]++;
              console.warn(
                'p5.Vector.prototype.div:',
                'x, y, or z arguments are either undefined or not a finite number'
              );
            }
            cov_2fdba07wu0.s[203]++;

            return this;
          };
          /**
           * Calculates the magnitude (length) of the vector and returns the result as
           * a float (this is simply the equation sqrt(x\*x + y\*y + z\*z).)
           *
           * @method mag
           * @return {Number} magnitude of the vector
           * @example
           * <div>
           * <code>
           * function draw() {
           *   background(240);
           *
           *   let v0 = createVector(0, 0);
           *   let v1 = createVector(mouseX, mouseY);
           *   drawArrow(v0, v1, 'black');
           *
           *   noStroke();
           *   text('vector length: ' + v1.mag().toFixed(2), 10, 70, 90, 30);
           * }
           *
           * // draw an arrow for a vector at a given base position
           * function drawArrow(base, vec, myColor) {
           *   push();
           *   stroke(myColor);
           *   strokeWeight(3);
           *   fill(myColor);
           *   translate(base.x, base.y);
           *   line(0, 0, vec.x, vec.y);
           *   rotate(vec.heading());
           *   let arrowSize = 7;
           *   translate(vec.mag() - arrowSize, 0);
           *   triangle(0, arrowSize / 2, 0, -arrowSize / 2, arrowSize, 0);
           *   pop();
           * }
           * </code>
           * </div>
           * <div class="norender">
           * <code>
           * let v = createVector(20.0, 30.0, 40.0);
           * let m = v.mag();
           * print(m); // Prints "53.85164807134504"
           * </code>
           * </div>
           */ cov_2fdba07wu0.s[204]++;
          _main.default.Vector.prototype.mag = function mag() {
            cov_2fdba07wu0.f[24]++;
            cov_2fdba07wu0.s[205]++;
            return Math.sqrt(this.magSq());
          };

          /**
           * Calculates the squared magnitude of the vector and returns the result
           * as a float (this is simply the equation <em>(x\*x + y\*y + z\*z)</em>.)
           * Faster if the real length is not required in the
           * case of comparing vectors, etc.
           *
           * @method magSq
           * @return {number} squared magnitude of the vector
           * @example
           * <div class="norender">
           * <code>
           * // Static method
           * let v1 = createVector(6, 4, 2);
           * print(v1.magSq()); // Prints "56"
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * function draw() {
           *   background(240);
           *
           *   let v0 = createVector(0, 0);
           *   let v1 = createVector(mouseX, mouseY);
           *   drawArrow(v0, v1, 'black');
           *
           *   noStroke();
           *   text('vector length squared: ' + v1.magSq().toFixed(2), 10, 45, 90, 55);
           * }
           *
           * // draw an arrow for a vector at a given base position
           * function drawArrow(base, vec, myColor) {
           *   push();
           *   stroke(myColor);
           *   strokeWeight(3);
           *   fill(myColor);
           *   translate(base.x, base.y);
           *   line(0, 0, vec.x, vec.y);
           *   rotate(vec.heading());
           *   let arrowSize = 7;
           *   translate(vec.mag() - arrowSize, 0);
           *   triangle(0, arrowSize / 2, 0, -arrowSize / 2, arrowSize, 0);
           *   pop();
           * }
           * </code>
           * </div>
           */ cov_2fdba07wu0.s[206]++;
          _main.default.Vector.prototype.magSq = function magSq() {
            cov_2fdba07wu0.f[25]++;
            var x = (cov_2fdba07wu0.s[207]++, this.x);
            var y = (cov_2fdba07wu0.s[208]++, this.y);
            var z = (cov_2fdba07wu0.s[209]++, this.z);
            cov_2fdba07wu0.s[210]++;
            return x * x + y * y + z * z;
          };

          /**
           * Calculates the dot product of two vectors. The version of the method
           * that computes the dot product of two independent vectors is a static
           * method. See the examples for more context.
           *
           * @method dot
           * @param  {Number} x   x component of the vector
           * @param  {Number} [y] y component of the vector
           * @param  {Number} [z] z component of the vector
           * @return {Number}       the dot product
           *
           * @example
           * <div class="norender">
           * <code>
           * let v1 = createVector(1, 2, 3);
           * let v2 = createVector(2, 3, 4);
           *
           * print(v1.dot(v2)); // Prints "20"
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * //Static method
           * let v1 = createVector(1, 2, 3);
           * let v2 = createVector(3, 2, 1);
           * print(p5.Vector.dot(v1, v2)); // Prints "10"
           * </code>
           * </div>
           */
          /**
           * @method dot
           * @param  {p5.Vector} value value component of the vector or a <a href="#/p5.Vector">p5.Vector</a>
           * @return {Number}
           */ cov_2fdba07wu0.s[211]++;
          _main.default.Vector.prototype.dot = function dot(x, y, z) {
            cov_2fdba07wu0.f[26]++;
            cov_2fdba07wu0.s[212]++;
            if (x instanceof _main.default.Vector) {
              cov_2fdba07wu0.b[94][0]++;
              cov_2fdba07wu0.s[213]++;
              return this.dot(x.x, x.y, x.z);
            } else {
              cov_2fdba07wu0.b[94][1]++;
            }
            cov_2fdba07wu0.s[214]++;
            return (
              this.x * ((cov_2fdba07wu0.b[95][0]++, x) || (cov_2fdba07wu0.b[95][1]++, 0)) +
              this.y * ((cov_2fdba07wu0.b[96][0]++, y) || (cov_2fdba07wu0.b[96][1]++, 0)) +
              this.z * ((cov_2fdba07wu0.b[97][0]++, z) || (cov_2fdba07wu0.b[97][1]++, 0))
            );
          };

          /**
           * Calculates and returns a vector composed of the cross product between
           * two vectors. Both the static and non static methods return a new <a href="#/p5.Vector">p5.Vector</a>.
           * See the examples for more context.
           *
           * @method cross
           * @param  {p5.Vector} v <a href="#/p5.Vector">p5.Vector</a> to be crossed
           * @return {p5.Vector}   <a href="#/p5.Vector">p5.Vector</a> composed of cross product
           * @example
           * <div class="norender">
           * <code>
           * let v1 = createVector(1, 2, 3);
           * let v2 = createVector(1, 2, 3);
           *
           * let v = v1.cross(v2); // v's components are [0, 0, 0]
           * print(v);
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * // Static method
           * let v1 = createVector(1, 0, 0);
           * let v2 = createVector(0, 1, 0);
           *
           * let crossProduct = p5.Vector.cross(v1, v2);
           * // crossProduct has components [0, 0, 1]
           * print(crossProduct);
           * </code>
           * </div>
           */ cov_2fdba07wu0.s[215]++;
          _main.default.Vector.prototype.cross = function cross(v) {
            cov_2fdba07wu0.f[27]++;
            var x = (cov_2fdba07wu0.s[216]++, this.y * v.z - this.z * v.y);
            var y = (cov_2fdba07wu0.s[217]++, this.z * v.x - this.x * v.z);
            var z = (cov_2fdba07wu0.s[218]++, this.x * v.y - this.y * v.x);
            cov_2fdba07wu0.s[219]++;
            if (this.p5) {
              cov_2fdba07wu0.b[98][0]++;
              cov_2fdba07wu0.s[220]++;
              return new _main.default.Vector(this.p5, [x, y, z]);
            } else {
              cov_2fdba07wu0.b[98][1]++;
              cov_2fdba07wu0.s[221]++;
              return new _main.default.Vector(x, y, z);
            }
          };

          /**
           * Calculates the Euclidean distance between two points (considering a
           * point as a vector object).
           * If you are looking to calculate distance with 2 points see <a href="#/p5/dist">dist()</a>
           *
           * @method dist
           * @param  {p5.Vector} v the x, y, and z coordinates of a <a href="#/p5.Vector">p5.Vector</a>
           * @return {Number}      the distance
           * @example
           * <div class="norender">
           * <code>
           * let v1 = createVector(1, 0, 0);
           * let v2 = createVector(0, 1, 0);
           *
           * let distance = v1.dist(v2); // distance is 1.4142...
           * print(distance);
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * // Static method
           * let v1 = createVector(1, 0, 0);
           * let v2 = createVector(0, 1, 0);
           *
           * let distance = p5.Vector.dist(v1, v2);
           * // distance is 1.4142...
           * print(distance);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * function draw() {
           *   background(240);
           *
           *   let v0 = createVector(0, 0);
           *
           *   let v1 = createVector(70, 50);
           *   drawArrow(v0, v1, 'red');
           *
           *   let v2 = createVector(mouseX, mouseY);
           *   drawArrow(v0, v2, 'blue');
           *
           *   noStroke();
           *   text('distance between vectors: ' + v2.dist(v1).toFixed(2), 5, 50, 95, 50);
           * }
           *
           * // draw an arrow for a vector at a given base position
           * function drawArrow(base, vec, myColor) {
           *   push();
           *   stroke(myColor);
           *   strokeWeight(3);
           *   fill(myColor);
           *   translate(base.x, base.y);
           *   line(0, 0, vec.x, vec.y);
           *   rotate(vec.heading());
           *   let arrowSize = 7;
           *   translate(vec.mag() - arrowSize, 0);
           *   triangle(0, arrowSize / 2, 0, -arrowSize / 2, arrowSize, 0);
           *   pop();
           * }
           * </code>
           * </div>
           */ cov_2fdba07wu0.s[222]++;
          _main.default.Vector.prototype.dist = function dist(v) {
            cov_2fdba07wu0.f[28]++;
            cov_2fdba07wu0.s[223]++;
            return v
              .copy()
              .sub(this)
              .mag();
          };

          /**
           * Normalize the vector to length 1 (make it a unit vector).
           *
           * @method normalize
           * @return {p5.Vector} normalized <a href="#/p5.Vector">p5.Vector</a>
           * @example
           * <div class="norender">
           * <code>
           * let v = createVector(10, 20, 2);
           * // v has components [10.0, 20.0, 2.0]
           * v.normalize();
           * // v's components are set to
           * // [0.4454354, 0.8908708, 0.089087084]
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * // Static method
           * let v_initial = createVector(10, 20, 2);
           * // v_initial has components [10.0, 20.0, 2.0]
           * let v_normalized = p5.Vector.normalize(v_initial);
           * print(v_normalized);
           * // returns a new vector with components set to
           * // [0.4454354, 0.8908708, 0.089087084]
           * // v_initial remains unchanged
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * function draw() {
           *   background(240);
           *
           *   let v0 = createVector(50, 50);
           *   let v1 = createVector(mouseX - 50, mouseY - 50);
           *
           *   drawArrow(v0, v1, 'red');
           *   v1.normalize();
           *   drawArrow(v0, v1.mult(35), 'blue');
           *
           *   noFill();
           *   ellipse(50, 50, 35 * 2);
           * }
           *
           * // draw an arrow for a vector at a given base position
           * function drawArrow(base, vec, myColor) {
           *   push();
           *   stroke(myColor);
           *   strokeWeight(3);
           *   fill(myColor);
           *   translate(base.x, base.y);
           *   line(0, 0, vec.x, vec.y);
           *   rotate(vec.heading());
           *   let arrowSize = 7;
           *   translate(vec.mag() - arrowSize, 0);
           *   triangle(0, arrowSize / 2, 0, -arrowSize / 2, arrowSize, 0);
           *   pop();
           * }
           * </code>
           * </div>
           */ cov_2fdba07wu0.s[224]++;
          _main.default.Vector.prototype.normalize = function normalize() {
            cov_2fdba07wu0.f[29]++;
            var len = (cov_2fdba07wu0.s[225]++, this.mag());
            // here we multiply by the reciprocal instead of calling 'div()'
            // since div duplicates this zero check.
            cov_2fdba07wu0.s[226]++;
            if (len !== 0) {
              cov_2fdba07wu0.b[99][0]++;
              cov_2fdba07wu0.s[227]++;
              this.mult(1 / len);
            } else {
              cov_2fdba07wu0.b[99][1]++;
            }
            cov_2fdba07wu0.s[228]++;
            return this;
          };

          /**
           * Limit the magnitude of this vector to the value used for the <b>max</b>
           * parameter.
           *
           * @method limit
           * @param  {Number}    max the maximum magnitude for the vector
           * @chainable
           * @example
           * <div class="norender">
           * <code>
           * let v = createVector(10, 20, 2);
           * // v has components [10.0, 20.0, 2.0]
           * v.limit(5);
           * // v's components are set to
           * // [2.2271771, 4.4543543, 0.4454354]
           * </code>
           * </div>
           * <div>
           * <code>
           * function draw() {
           *   background(240);
           *
           *   let v0 = createVector(50, 50);
           *   let v1 = createVector(mouseX - 50, mouseY - 50);
           *
           *   drawArrow(v0, v1, 'red');
           *   drawArrow(v0, v1.limit(35), 'blue');
           *
           *   noFill();
           *   ellipse(50, 50, 35 * 2);
           * }
           *
           * // draw an arrow for a vector at a given base position
           * function drawArrow(base, vec, myColor) {
           *   push();
           *   stroke(myColor);
           *   strokeWeight(3);
           *   fill(myColor);
           *   translate(base.x, base.y);
           *   line(0, 0, vec.x, vec.y);
           *   rotate(vec.heading());
           *   let arrowSize = 7;
           *   translate(vec.mag() - arrowSize, 0);
           *   triangle(0, arrowSize / 2, 0, -arrowSize / 2, arrowSize, 0);
           *   pop();
           * }
           * </code>
           * </div>
           */ cov_2fdba07wu0.s[229]++;
          _main.default.Vector.prototype.limit = function limit(max) {
            cov_2fdba07wu0.f[30]++;
            var mSq = (cov_2fdba07wu0.s[230]++, this.magSq());
            cov_2fdba07wu0.s[231]++;
            if (mSq > max * max) {
              cov_2fdba07wu0.b[100][0]++;
              cov_2fdba07wu0.s[232]++;
              this.div(Math.sqrt(mSq)) //normalize it
                .mult(max);
            } else {
              cov_2fdba07wu0.b[100][1]++;
            }
            cov_2fdba07wu0.s[233]++;
            return this;
          };

          /**
           * Set the magnitude of this vector to the value used for the <b>len</b>
           * parameter.
           *
           * @method setMag
           * @param  {number}    len the new length for this vector
           * @chainable
           * @example
           * <div class="norender">
           * <code>
           * let v = createVector(10, 20, 2);
           * // v has components [10.0, 20.0, 2.0]
           * v.setMag(10);
           * // v's components are set to [6.0, 8.0, 0.0]
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * function draw() {
           *   background(240);
           *
           *   let v0 = createVector(0, 0);
           *   let v1 = createVector(50, 50);
           *
           *   drawArrow(v0, v1, 'red');
           *
           *   let length = map(mouseX, 0, width, 0, 141, true);
           *   v1.setMag(length);
           *   drawArrow(v0, v1, 'blue');
           *
           *   noStroke();
           *   text('magnitude set to: ' + length.toFixed(2), 10, 70, 90, 30);
           * }
           *
           * // draw an arrow for a vector at a given base position
           * function drawArrow(base, vec, myColor) {
           *   push();
           *   stroke(myColor);
           *   strokeWeight(3);
           *   fill(myColor);
           *   translate(base.x, base.y);
           *   line(0, 0, vec.x, vec.y);
           *   rotate(vec.heading());
           *   let arrowSize = 7;
           *   translate(vec.mag() - arrowSize, 0);
           *   triangle(0, arrowSize / 2, 0, -arrowSize / 2, arrowSize, 0);
           *   pop();
           * }
           * </code>
           * </div>
           */ cov_2fdba07wu0.s[234]++;
          _main.default.Vector.prototype.setMag = function setMag(n) {
            cov_2fdba07wu0.f[31]++;
            cov_2fdba07wu0.s[235]++;
            return this.normalize().mult(n);
          };

          /**
           * Calculate the angle of rotation for this vector(only 2D vectors).
           * p5.Vectors created using <a href="#/p5/createVector">createVector()</a>
           * will take the current <a href="#/p5/angleMode">angleMode</a> into
           * consideration, and give the angle in radians or degree accordingly.
           *
           * @method heading
           * @return {Number} the angle of rotation
           * @example
           * <div class = "norender">
           * <code>
           * function setup() {
           *   let v1 = createVector(30, 50);
           *   print(v1.heading()); // 1.0303768265243125
           *
           *   v1 = createVector(40, 50);
           *   print(v1.heading()); // 0.8960553845713439
           *
           *   v1 = createVector(30, 70);
           *   print(v1.heading()); // 1.1659045405098132
           * }
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * function draw() {
           *   background(240);
           *
           *   let v0 = createVector(50, 50);
           *   let v1 = createVector(mouseX - 50, mouseY - 50);
           *
           *   drawArrow(v0, v1, 'black');
           *
           *   let myHeading = v1.heading();
           *   noStroke();
           *   text(
           *     'vector heading: ' +
           *       myHeading.toFixed(2) +
           *       ' radians or ' +
           *       degrees(myHeading).toFixed(2) +
           *       ' degrees',
           *     10,
           *     50,
           *     90,
           *     50
           *   );
           * }
           *
           * // draw an arrow for a vector at a given base position
           * function drawArrow(base, vec, myColor) {
           *   push();
           *   stroke(myColor);
           *   strokeWeight(3);
           *   fill(myColor);
           *   translate(base.x, base.y);
           *   line(0, 0, vec.x, vec.y);
           *   rotate(vec.heading());
           *   let arrowSize = 7;
           *   translate(vec.mag() - arrowSize, 0);
           *   triangle(0, arrowSize / 2, 0, -arrowSize / 2, arrowSize, 0);
           *   pop();
           * }
           * </code>
           * </div>
           */ cov_2fdba07wu0.s[236]++;
          _main.default.Vector.prototype.heading = function heading() {
            cov_2fdba07wu0.f[32]++;
            var h = (cov_2fdba07wu0.s[237]++, Math.atan2(this.y, this.x));
            cov_2fdba07wu0.s[238]++;
            if (this.p5) {
              cov_2fdba07wu0.b[101][0]++;
              cov_2fdba07wu0.s[239]++;
              return this.p5._fromRadians(h);
            } else {
              cov_2fdba07wu0.b[101][1]++;
            }
            cov_2fdba07wu0.s[240]++;
            return h;
          };

          /**
           * Rotate the vector to a specific angle (only 2D vectors), magnitude remains the
           * same
           *
           * @method setHeading
           * @param  {number}    angle the angle of rotation
           * @chainable
           * @example
           * <div class="norender">
           * <code>
           * let v = createVector(10.0, 20.0);
           * // result of v.heading() is 1.1071487177940904
           * v.setHeading(Math.PI);
           * // result of v.heading() is now 3.141592653589793
           * </code>
           * </div>
           */ cov_2fdba07wu0.s[241]++;

          _main.default.Vector.prototype.setHeading = function setHeading(a) {
            cov_2fdba07wu0.f[33]++;
            var m = (cov_2fdba07wu0.s[242]++, this.mag());
            cov_2fdba07wu0.s[243]++;
            this.x = m * Math.cos(a);
            cov_2fdba07wu0.s[244]++;
            this.y = m * Math.sin(a);
            cov_2fdba07wu0.s[245]++;
            return this;
          };

          /**
           * Rotate the vector by an angle (only 2D vectors), magnitude remains the
           * same
           *
           * @method rotate
           * @param  {number}    angle the angle of rotation
           * @chainable
           * @example
           * <div class="norender">
           * <code>
           * let v = createVector(10.0, 20.0);
           * // v has components [10.0, 20.0, 0.0]
           * v.rotate(HALF_PI);
           * // v's components are set to [-20.0, 9.999999, 0.0]
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * // static function implementation
           * let v = createVector(10.0, 20.0);
           * // v has components [10.0, 20.0, 0.0]
           * let rotated_v = p5.Vector.rotate(v, HALF_PI);
           * console.log(rotated_v);
           * // rotated_v's components are set to [-20.0, 9.999999, 0.0]
           * console.log(v);
           * // v's components remains the same (i.e, [10.0, 20.0, 0.0])
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * let angle = 0;
           * function draw() {
           *   background(240);
           *
           *   let v0 = createVector(50, 50);
           *   let v1 = createVector(50, 0);
           *
           *   drawArrow(v0, v1.rotate(angle), 'black');
           *   angle += 0.01;
           * }
           *
           * // draw an arrow for a vector at a given base position
           * function drawArrow(base, vec, myColor) {
           *   push();
           *   stroke(myColor);
           *   strokeWeight(3);
           *   fill(myColor);
           *   translate(base.x, base.y);
           *   line(0, 0, vec.x, vec.y);
           *   rotate(vec.heading());
           *   let arrowSize = 7;
           *   translate(vec.mag() - arrowSize, 0);
           *   triangle(0, arrowSize / 2, 0, -arrowSize / 2, arrowSize, 0);
           *   pop();
           * }
           * </code>
           * </div>
           */ cov_2fdba07wu0.s[246]++;
          _main.default.Vector.prototype.rotate = function rotate(a) {
            cov_2fdba07wu0.f[34]++;
            var newHeading = (cov_2fdba07wu0.s[247]++, this.heading() + a);
            cov_2fdba07wu0.s[248]++;
            if (this.p5) {
              cov_2fdba07wu0.b[102][0]++;
              cov_2fdba07wu0.s[249]++;
              newHeading = this.p5._toRadians(newHeading);
            } else {
              cov_2fdba07wu0.b[102][1]++;
            }
            var mag = (cov_2fdba07wu0.s[250]++, this.mag());
            cov_2fdba07wu0.s[251]++;
            this.x = Math.cos(newHeading) * mag;
            cov_2fdba07wu0.s[252]++;
            this.y = Math.sin(newHeading) * mag;
            cov_2fdba07wu0.s[253]++;
            return this;
          };

          /**
           * Calculates and returns the angle between two vectors. This function will take
           * the current <a href="#/p5/angleMode">angleMode</a> into consideration, and
           * give the angle in radians or degree accordingly.
           *
           * @method angleBetween
           * @param  {p5.Vector}    value the x, y, and z components of a <a href="#/p5.Vector">p5.Vector</a>
           * @return {Number}       the angle between (in radians)
           * @example
           * <div class="norender">
           * <code>
           * let v1 = createVector(1, 0, 0);
           * let v2 = createVector(0, 1, 0);
           *
           * let angle = v1.angleBetween(v2);
           * // angle is PI/2
           * print(angle);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * function draw() {
           *   background(240);
           *   let v0 = createVector(50, 50);
           *
           *   let v1 = createVector(50, 0);
           *   drawArrow(v0, v1, 'red');
           *
           *   let v2 = createVector(mouseX - 50, mouseY - 50);
           *   drawArrow(v0, v2, 'blue');
           *
           *   let angleBetween = v1.angleBetween(v2);
           *   noStroke();
           *   text(
           *     'angle between: ' +
           *       angleBetween.toFixed(2) +
           *       ' radians or ' +
           *       degrees(angleBetween).toFixed(2) +
           *       ' degrees',
           *     10,
           *     50,
           *     90,
           *     50
           *   );
           * }
           *
           * // draw an arrow for a vector at a given base position
           * function drawArrow(base, vec, myColor) {
           *   push();
           *   stroke(myColor);
           *   strokeWeight(3);
           *   fill(myColor);
           *   translate(base.x, base.y);
           *   line(0, 0, vec.x, vec.y);
           *   rotate(vec.heading());
           *   let arrowSize = 7;
           *   translate(vec.mag() - arrowSize, 0);
           *   triangle(0, arrowSize / 2, 0, -arrowSize / 2, arrowSize, 0);
           *   pop();
           * }
           * </code>
           * </div>
           */ cov_2fdba07wu0.s[254]++;

          _main.default.Vector.prototype.angleBetween = function angleBetween(v) {
            cov_2fdba07wu0.f[35]++;
            var dotmagmag = (cov_2fdba07wu0.s[255]++, this.dot(v) / (this.mag() * v.mag()));
            // Mathematically speaking: the dotmagmag variable will be between -1 and 1
            // inclusive. Practically though it could be slightly outside this range due
            // to floating-point rounding issues. This can make Math.acos return NaN.
            //
            // Solution: we'll clamp the value to the -1,1 range
            var angle;
            cov_2fdba07wu0.s[256]++;
            angle = Math.acos(Math.min(1, Math.max(-1, dotmagmag)));
            cov_2fdba07wu0.s[257]++;
            angle =
              angle *
              Math.sign(
                (cov_2fdba07wu0.b[103][0]++, this.cross(v).z) ||
                  (cov_2fdba07wu0.b[103][1]++, 1)
              );
            cov_2fdba07wu0.s[258]++;
            if (this.p5) {
              cov_2fdba07wu0.b[104][0]++;
              cov_2fdba07wu0.s[259]++;
              angle = this.p5._fromRadians(angle);
            } else {
              cov_2fdba07wu0.b[104][1]++;
            }
            cov_2fdba07wu0.s[260]++;
            return angle;
          };
          /**
           * Linear interpolate the vector to another vector
           *
           * @method lerp
           * @param  {Number}    x   the x component
           * @param  {Number}    y   the y component
           * @param  {Number}    z   the z component
           * @param  {Number}    amt the amount of interpolation; some value between 0.0
           *                         (old vector) and 1.0 (new vector). 0.9 is very near
           *                         the new vector. 0.5 is halfway in between.
           * @chainable
           *
           * @example
           * <div class="norender">
           * <code>
           * let v = createVector(1, 1, 0);
           *
           * v.lerp(3, 3, 0, 0.5); // v now has components [2,2,0]
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * let v1 = createVector(0, 0, 0);
           * let v2 = createVector(100, 100, 0);
           *
           * let v3 = p5.Vector.lerp(v1, v2, 0.5);
           * // v3 has components [50,50,0]
           * print(v3);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * let step = 0.01;
           * let amount = 0;
           *
           * function draw() {
           *   background(240);
           *   let v0 = createVector(0, 0);
           *
           *   let v1 = createVector(mouseX, mouseY);
           *   drawArrow(v0, v1, 'red');
           *
           *   let v2 = createVector(90, 90);
           *   drawArrow(v0, v2, 'blue');
           *
           *   if (amount > 1 || amount < 0) {
           *     step *= -1;
           *   }
           *   amount += step;
           *   let v3 = p5.Vector.lerp(v1, v2, amount);
           *
           *   drawArrow(v0, v3, 'purple');
           * }
           *
           * // draw an arrow for a vector at a given base position
           * function drawArrow(base, vec, myColor) {
           *   push();
           *   stroke(myColor);
           *   strokeWeight(3);
           *   fill(myColor);
           *   translate(base.x, base.y);
           *   line(0, 0, vec.x, vec.y);
           *   rotate(vec.heading());
           *   let arrowSize = 7;
           *   translate(vec.mag() - arrowSize, 0);
           *   triangle(0, arrowSize / 2, 0, -arrowSize / 2, arrowSize, 0);
           *   pop();
           * }
           * </code>
           * </div>
           */
          /**
           * @method lerp
           * @param  {p5.Vector} v   the <a href="#/p5.Vector">p5.Vector</a> to lerp to
           * @param  {Number}    amt
           * @chainable
           */ cov_2fdba07wu0.s[261]++;
          _main.default.Vector.prototype.lerp = function lerp(x, y, z, amt) {
            cov_2fdba07wu0.f[36]++;
            cov_2fdba07wu0.s[262]++;
            if (x instanceof _main.default.Vector) {
              cov_2fdba07wu0.b[105][0]++;
              cov_2fdba07wu0.s[263]++;
              return this.lerp(x.x, x.y, x.z, y);
            } else {
              cov_2fdba07wu0.b[105][1]++;
            }
            cov_2fdba07wu0.s[264]++;
            this.x +=
              (cov_2fdba07wu0.b[106][0]++, (x - this.x) * amt) ||
              (cov_2fdba07wu0.b[106][1]++, 0);
            cov_2fdba07wu0.s[265]++;
            this.y +=
              (cov_2fdba07wu0.b[107][0]++, (y - this.y) * amt) ||
              (cov_2fdba07wu0.b[107][1]++, 0);
            cov_2fdba07wu0.s[266]++;
            this.z +=
              (cov_2fdba07wu0.b[108][0]++, (z - this.z) * amt) ||
              (cov_2fdba07wu0.b[108][1]++, 0);
            cov_2fdba07wu0.s[267]++;
            return this;
          };

          /**
           * Reflect the incoming vector about a normal to a line in 2D, or about a normal to a plane in 3D
           * This method acts on the vector directly
           *
           * @method reflect
           * @param  {p5.Vector} surfaceNormal   the <a href="#/p5.Vector">p5.Vector</a> to reflect about, will be normalized by this method
           * @chainable
           * @example
           * <div class="norender">
           * <code>
           * let v = createVector(4, 6); // incoming vector, this example vector is heading to the right and downward
           * let n = createVector(0, -1); // surface normal to a plane (this example normal points directly upwards)
           * v.reflect(n); // v is reflected about the surface normal n.  v's components are now set to [4, -6]
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * function draw() {
           *   background(240);
           *
           *   let v0 = createVector(0, 0);
           *   let v1 = createVector(mouseX, mouseY);
           *   drawArrow(v0, v1, 'red');
           *
           *   let n = createVector(0, -30);
           *   drawArrow(v1, n, 'blue');
           *
           *   let r = v1.copy();
           *   r.reflect(n);
           *   drawArrow(v1, r, 'purple');
           * }
           *
           * // draw an arrow for a vector at a given base position
           * function drawArrow(base, vec, myColor) {
           *   push();
           *   stroke(myColor);
           *   strokeWeight(3);
           *   fill(myColor);
           *   translate(base.x, base.y);
           *   line(0, 0, vec.x, vec.y);
           *   rotate(vec.heading());
           *   let arrowSize = 7;
           *   translate(vec.mag() - arrowSize, 0);
           *   triangle(0, arrowSize / 2, 0, -arrowSize / 2, arrowSize, 0);
           *   pop();
           * }
           * </code>
           * </div>
           */ cov_2fdba07wu0.s[268]++;
          _main.default.Vector.prototype.reflect = function reflect(surfaceNormal) {
            cov_2fdba07wu0.f[37]++;
            cov_2fdba07wu0.s[269]++;
            surfaceNormal.normalize();
            cov_2fdba07wu0.s[270]++;
            return this.sub(surfaceNormal.mult(2 * this.dot(surfaceNormal)));
          };

          /**
           * Return a representation of this vector as a float array. This is only
           * for temporary use. If used in any other fashion, the contents should be
           * copied by using the <b>p5.Vector.<a href="#/p5.Vector/copy">copy()</a></b> method to copy into your own
           * array.
           *
           * @method array
           * @return {Number[]} an Array with the 3 values
           * @example
           * <div class = "norender">
           * <code>
           * function setup() {
           *   let v = createVector(20, 30);
           *   print(v.array()); // Prints : Array [20, 30, 0]
           * }
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * let v = createVector(10.0, 20.0, 30.0);
           * let f = v.array();
           * print(f[0]); // Prints "10.0"
           * print(f[1]); // Prints "20.0"
           * print(f[2]); // Prints "30.0"
           * </code>
           * </div>
           */ cov_2fdba07wu0.s[271]++;
          _main.default.Vector.prototype.array = function array() {
            cov_2fdba07wu0.f[38]++;
            cov_2fdba07wu0.s[272]++;
            return [
              (cov_2fdba07wu0.b[109][0]++, this.x) || (cov_2fdba07wu0.b[109][1]++, 0),
              (cov_2fdba07wu0.b[110][0]++, this.y) || (cov_2fdba07wu0.b[110][1]++, 0),
              (cov_2fdba07wu0.b[111][0]++, this.z) || (cov_2fdba07wu0.b[111][1]++, 0)
            ];
          };

          /**
           * Equality check against a <a href="#/p5.Vector">p5.Vector</a>
           *
           * @method equals
           * @param {Number} [x] the x component of the vector
           * @param {Number} [y] the y component of the vector
           * @param {Number} [z] the z component of the vector
           * @return {Boolean} whether the vectors are equals
           * @example
           * <div class = "norender">
           * <code>
           * let v1 = createVector(5, 10, 20);
           * let v2 = createVector(5, 10, 20);
           * let v3 = createVector(13, 10, 19);
           *
           * print(v1.equals(v2.x, v2.y, v2.z)); // true
           * print(v1.equals(v3.x, v3.y, v3.z)); // false
           * </code>
           * </div>
           *
           * <div class="norender">
           * <code>
           * let v1 = createVector(10.0, 20.0, 30.0);
           * let v2 = createVector(10.0, 20.0, 30.0);
           * let v3 = createVector(0.0, 0.0, 0.0);
           * print(v1.equals(v2)); // true
           * print(v1.equals(v3)); // false
           * </code>
           * </div>
           */
          /**
           * @method equals
           * @param {p5.Vector|Array} value the vector to compare
           * @return {Boolean}
           */ cov_2fdba07wu0.s[273]++;
          _main.default.Vector.prototype.equals = function equals(x, y, z) {
            cov_2fdba07wu0.f[39]++;
            var a, b, c;
            cov_2fdba07wu0.s[274]++;
            if (x instanceof _main.default.Vector) {
              cov_2fdba07wu0.b[112][0]++;
              cov_2fdba07wu0.s[275]++;
              a = (cov_2fdba07wu0.b[113][0]++, x.x) || (cov_2fdba07wu0.b[113][1]++, 0);
              cov_2fdba07wu0.s[276]++;
              b = (cov_2fdba07wu0.b[114][0]++, x.y) || (cov_2fdba07wu0.b[114][1]++, 0);
              cov_2fdba07wu0.s[277]++;
              c = (cov_2fdba07wu0.b[115][0]++, x.z) || (cov_2fdba07wu0.b[115][1]++, 0);
            } else {
              cov_2fdba07wu0.b[112][1]++;
              cov_2fdba07wu0.s[278]++;
              if (x instanceof Array) {
                cov_2fdba07wu0.b[116][0]++;
                cov_2fdba07wu0.s[279]++;
                a = (cov_2fdba07wu0.b[117][0]++, x[0]) || (cov_2fdba07wu0.b[117][1]++, 0);
                cov_2fdba07wu0.s[280]++;
                b = (cov_2fdba07wu0.b[118][0]++, x[1]) || (cov_2fdba07wu0.b[118][1]++, 0);
                cov_2fdba07wu0.s[281]++;
                c = (cov_2fdba07wu0.b[119][0]++, x[2]) || (cov_2fdba07wu0.b[119][1]++, 0);
              } else {
                cov_2fdba07wu0.b[116][1]++;
                cov_2fdba07wu0.s[282]++;
                a = (cov_2fdba07wu0.b[120][0]++, x) || (cov_2fdba07wu0.b[120][1]++, 0);
                cov_2fdba07wu0.s[283]++;
                b = (cov_2fdba07wu0.b[121][0]++, y) || (cov_2fdba07wu0.b[121][1]++, 0);
                cov_2fdba07wu0.s[284]++;
                c = (cov_2fdba07wu0.b[122][0]++, z) || (cov_2fdba07wu0.b[122][1]++, 0);
              }
            }
            cov_2fdba07wu0.s[285]++;
            return (
              (cov_2fdba07wu0.b[123][0]++, this.x === a) &&
              (cov_2fdba07wu0.b[123][1]++, this.y === b) &&
              (cov_2fdba07wu0.b[123][2]++, this.z === c)
            );
          };

          // Static Methods

          /**
           * Make a new 2D vector from an angle
           *
           * @method fromAngle
           * @static
           * @param {Number}     angle the desired angle, in radians (unaffected by <a href="#/p5/angleMode">angleMode</a>)
           * @param {Number}     [length] the length of the new vector (defaults to 1)
           * @return {p5.Vector}       the new <a href="#/p5.Vector">p5.Vector</a> object
           * @example
           * <div>
           * <code>
           * function draw() {
           *   background(200);
           *
           *   // Create a variable, proportional to the mouseX,
           *   // varying from 0-360, to represent an angle in degrees.
           *   let myDegrees = map(mouseX, 0, width, 0, 360);
           *
           *   // Display that variable in an onscreen text.
           *   // (Note the nfc() function to truncate additional decimal places,
           *   // and the "\xB0" character for the degree symbol.)
           *   let readout = 'angle = ' + nfc(myDegrees, 1) + '\xB0';
           *   noStroke();
           *   fill(0);
           *   text(readout, 5, 15);
           *
           *   // Create a p5.Vector using the fromAngle function,
           *   // and extract its x and y components.
           *   let v = p5.Vector.fromAngle(radians(myDegrees), 30);
           *   let vx = v.x;
           *   let vy = v.y;
           *
           *   push();
           *   translate(width / 2, height / 2);
           *   noFill();
           *   stroke(150);
           *   line(0, 0, 30, 0);
           *   stroke(0);
           *   line(0, 0, vx, vy);
           *   pop();
           * }
           * </code>
           * </div>
           */ cov_2fdba07wu0.s[286]++;
          _main.default.Vector.fromAngle = function fromAngle(angle, length) {
            cov_2fdba07wu0.f[40]++;
            cov_2fdba07wu0.s[287]++;
            if (typeof length === 'undefined') {
              cov_2fdba07wu0.b[124][0]++;
              cov_2fdba07wu0.s[288]++;
              length = 1;
            } else {
              cov_2fdba07wu0.b[124][1]++;
            }
            cov_2fdba07wu0.s[289]++;
            return new _main.default.Vector(
              length * Math.cos(angle),
              length * Math.sin(angle),
              0
            );
          };

          /**
           * Make a new 3D vector from a pair of ISO spherical angles
           *
           * @method fromAngles
           * @static
           * @param {Number}     theta    the polar angle, in radians (zero is up)
           * @param {Number}     phi      the azimuthal angle, in radians
           *                               (zero is out of the screen)
           * @param {Number}     [length] the length of the new vector (defaults to 1)
           * @return {p5.Vector}          the new <a href="#/p5.Vector">p5.Vector</a> object
           * @example
           * <div modernizr='webgl'>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   fill(255);
           *   noStroke();
           * }
           * function draw() {
           *   background(255);
           *
           *   let t = millis() / 1000;
           *
           *   // add three point lights
           *   pointLight(color('#f00'), p5.Vector.fromAngles(t * 1.0, t * 1.3, 100));
           *   pointLight(color('#0f0'), p5.Vector.fromAngles(t * 1.1, t * 1.2, 100));
           *   pointLight(color('#00f'), p5.Vector.fromAngles(t * 1.2, t * 1.1, 100));
           *
           *   sphere(35);
           * }
           * </code>
           * </div>
           */ cov_2fdba07wu0.s[290]++;
          _main.default.Vector.fromAngles = function(theta, phi, length) {
            cov_2fdba07wu0.f[41]++;
            cov_2fdba07wu0.s[291]++;
            if (typeof length === 'undefined') {
              cov_2fdba07wu0.b[125][0]++;
              cov_2fdba07wu0.s[292]++;
              length = 1;
            } else {
              cov_2fdba07wu0.b[125][1]++;
            }
            var cosPhi = (cov_2fdba07wu0.s[293]++, Math.cos(phi));
            var sinPhi = (cov_2fdba07wu0.s[294]++, Math.sin(phi));
            var cosTheta = (cov_2fdba07wu0.s[295]++, Math.cos(theta));
            var sinTheta = (cov_2fdba07wu0.s[296]++, Math.sin(theta));
            cov_2fdba07wu0.s[297]++;

            return new _main.default.Vector(
              length * sinTheta * sinPhi,
              -length * cosTheta,
              length * sinTheta * cosPhi
            );
          };

          /**
           * Make a new 2D unit vector from a random angle
           *
           * @method random2D
           * @static
           * @return {p5.Vector} the new <a href="#/p5.Vector">p5.Vector</a> object
           * @example
           * <div class="norender">
           * <code>
           * let v = p5.Vector.random2D();
           * // May make v's attributes something like:
           * // [0.61554617, -0.51195765, 0.0] or
           * // [-0.4695841, -0.14366731, 0.0] or
           * // [0.6091097, -0.22805278, 0.0]
           * print(v);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * function setup() {
           *   frameRate(1);
           * }
           *
           * function draw() {
           *   background(240);
           *
           *   let v0 = createVector(50, 50);
           *   let v1 = p5.Vector.random2D();
           *   drawArrow(v0, v1.mult(50), 'black');
           * }
           *
           * // draw an arrow for a vector at a given base position
           * function drawArrow(base, vec, myColor) {
           *   push();
           *   stroke(myColor);
           *   strokeWeight(3);
           *   fill(myColor);
           *   translate(base.x, base.y);
           *   line(0, 0, vec.x, vec.y);
           *   rotate(vec.heading());
           *   let arrowSize = 7;
           *   translate(vec.mag() - arrowSize, 0);
           *   triangle(0, arrowSize / 2, 0, -arrowSize / 2, arrowSize, 0);
           *   pop();
           * }
           * </code>
           * </div>
           */ cov_2fdba07wu0.s[298]++;
          _main.default.Vector.random2D = function random2D() {
            cov_2fdba07wu0.f[42]++;
            cov_2fdba07wu0.s[299]++;
            return this.fromAngle(Math.random() * constants.TWO_PI);
          };

          /**
           * Make a new random 3D unit vector.
           *
           * @method random3D
           * @static
           * @return {p5.Vector} the new <a href="#/p5.Vector">p5.Vector</a> object
           * @example
           * <div class="norender">
           * <code>
           * let v = p5.Vector.random3D();
           * // May make v's attributes something like:
           * // [0.61554617, -0.51195765, 0.599168] or
           * // [-0.4695841, -0.14366731, -0.8711202] or
           * // [0.6091097, -0.22805278, -0.7595902]
           * print(v);
           * </code>
           * </div>
           */ cov_2fdba07wu0.s[300]++;
          _main.default.Vector.random3D = function random3D() {
            cov_2fdba07wu0.f[43]++;
            var angle = (cov_2fdba07wu0.s[301]++, Math.random() * constants.TWO_PI);
            var vz = (cov_2fdba07wu0.s[302]++, Math.random() * 2 - 1);
            var vzBase = (cov_2fdba07wu0.s[303]++, Math.sqrt(1 - vz * vz));
            var vx = (cov_2fdba07wu0.s[304]++, vzBase * Math.cos(angle));
            var vy = (cov_2fdba07wu0.s[305]++, vzBase * Math.sin(angle));
            cov_2fdba07wu0.s[306]++;
            return new _main.default.Vector(vx, vy, vz);
          };

          // Adds two vectors together and returns a new one.
          /**
           * @method add
           * @static
           * @param  {p5.Vector} v1 a <a href="#/p5.Vector">p5.Vector</a> to add
           * @param  {p5.Vector} v2 a <a href="#/p5.Vector">p5.Vector</a> to add
           * @param  {p5.Vector} [target] the vector to receive the result
           * @return {p5.Vector} the resulting <a href="#/p5.Vector">p5.Vector</a>
           */ cov_2fdba07wu0.s[307]++;

          _main.default.Vector.add = function add(v1, v2, target) {
            cov_2fdba07wu0.f[44]++;
            cov_2fdba07wu0.s[308]++;
            if (!target) {
              cov_2fdba07wu0.b[126][0]++;
              cov_2fdba07wu0.s[309]++;
              target = v1.copy();
              cov_2fdba07wu0.s[310]++;
              if (arguments.length === 3) {
                cov_2fdba07wu0.b[127][0]++;
                cov_2fdba07wu0.s[311]++;
                _main.default._friendlyError(
                  'The target parameter is undefined, it should be of type p5.Vector',
                  'p5.Vector.add'
                );
              } else {
                cov_2fdba07wu0.b[127][1]++;
              }
            } else {
              cov_2fdba07wu0.b[126][1]++;
              cov_2fdba07wu0.s[312]++;
              target.set(v1);
            }
            cov_2fdba07wu0.s[313]++;
            target.add(v2);
            cov_2fdba07wu0.s[314]++;
            return target;
          };

          // Returns a vector remainder when it is divided by another vector
          /**
           * @method rem
           * @static
           * @param  {p5.Vector} v1 dividend <a href="#/p5.Vector">p5.Vector</a>
           * @param  {p5.Vector} v2 divisor <a href="#/p5.Vector">p5.Vector</a>
           */
          /**
           * @method rem
           * @static
           * @param  {p5.Vector} v1
           * @param  {p5.Vector} v2
           * @return {p5.Vector} the resulting <a href="#/p5.Vector">p5.Vector</a>
           */ cov_2fdba07wu0.s[315]++;
          _main.default.Vector.rem = function rem(v1, v2) {
            cov_2fdba07wu0.f[45]++;
            cov_2fdba07wu0.s[316]++;
            if (
              (cov_2fdba07wu0.b[129][0]++, v1 instanceof _main.default.Vector) &&
              (cov_2fdba07wu0.b[129][1]++, v2 instanceof _main.default.Vector)
            ) {
              cov_2fdba07wu0.b[128][0]++;
              var target = (cov_2fdba07wu0.s[317]++, v1.copy());
              cov_2fdba07wu0.s[318]++;
              target.rem(v2);
              cov_2fdba07wu0.s[319]++;
              return target;
            } else {
              cov_2fdba07wu0.b[128][1]++;
            }
          };

          /*
    * Subtracts one <a href="#/p5.Vector">p5.Vector</a> from another and returns a new one.  The second
    * vector (v2) is subtracted from the first (v1), resulting in v1-v2.
    */
          /**
           * @method sub
           * @static
           * @param  {p5.Vector} v1 a <a href="#/p5.Vector">p5.Vector</a> to subtract from
           * @param  {p5.Vector} v2 a <a href="#/p5.Vector">p5.Vector</a> to subtract
           * @param  {p5.Vector} [target] the vector to receive the result
           * @return {p5.Vector} the resulting <a href="#/p5.Vector">p5.Vector</a>
           */ cov_2fdba07wu0.s[320]++;

          _main.default.Vector.sub = function sub(v1, v2, target) {
            cov_2fdba07wu0.f[46]++;
            cov_2fdba07wu0.s[321]++;
            if (!target) {
              cov_2fdba07wu0.b[130][0]++;
              cov_2fdba07wu0.s[322]++;
              target = v1.copy();
              cov_2fdba07wu0.s[323]++;
              if (arguments.length === 3) {
                cov_2fdba07wu0.b[131][0]++;
                cov_2fdba07wu0.s[324]++;
                _main.default._friendlyError(
                  'The target parameter is undefined, it should be of type p5.Vector',
                  'p5.Vector.sub'
                );
              } else {
                cov_2fdba07wu0.b[131][1]++;
              }
            } else {
              cov_2fdba07wu0.b[130][1]++;
              cov_2fdba07wu0.s[325]++;
              target.set(v1);
            }
            cov_2fdba07wu0.s[326]++;
            target.sub(v2);
            cov_2fdba07wu0.s[327]++;
            return target;
          };

          /**
           * Multiplies a vector by a scalar and returns a new vector.
           */

          /**
           * @method mult
           * @static
           * @param  {Number} x
           * @param  {Number} y
           * @param  {Number} [z]
           * @return {p5.Vector} The resulting new <a href="#/p5.Vector">p5.Vector</a>
           */

          /**
           * @method mult
           * @static
           * @param  {p5.Vector} v
           * @param  {Number}  n
           * @param  {p5.Vector} [target] the vector to receive the result
           */

          /**
           * @method mult
           * @static
           * @param  {p5.Vector} v0
           * @param  {p5.Vector} v1
           * @param  {p5.Vector} [target]
           */

          /**
           * @method mult
           * @static
           * @param  {p5.Vector} v0
           * @param  {Number[]} arr
           * @param  {p5.Vector} [target]
           */ cov_2fdba07wu0.s[328]++;
          _main.default.Vector.mult = function mult(v, n, target) {
            cov_2fdba07wu0.f[47]++;
            cov_2fdba07wu0.s[329]++;
            if (!target) {
              cov_2fdba07wu0.b[132][0]++;
              cov_2fdba07wu0.s[330]++;
              target = v.copy();
              cov_2fdba07wu0.s[331]++;
              if (arguments.length === 3) {
                cov_2fdba07wu0.b[133][0]++;
                cov_2fdba07wu0.s[332]++;
                _main.default._friendlyError(
                  'The target parameter is undefined, it should be of type p5.Vector',
                  'p5.Vector.mult'
                );
              } else {
                cov_2fdba07wu0.b[133][1]++;
              }
            } else {
              cov_2fdba07wu0.b[132][1]++;
              cov_2fdba07wu0.s[333]++;
              target.set(v);
            }
            cov_2fdba07wu0.s[334]++;
            target.mult(n);
            cov_2fdba07wu0.s[335]++;
            return target;
          };

          /**
           * Rotates the vector (only 2D vectors) by the given angle, magnitude remains the same and returns a new vector.
           */

          /**
           * @method rotate
           * @static
           * @param  {p5.Vector} v
           * @param  {Number} angle
           * @param  {p5.Vector} [target] the vector to receive the result
           */ cov_2fdba07wu0.s[336]++;
          _main.default.Vector.rotate = function rotate(v, a, target) {
            cov_2fdba07wu0.f[48]++;
            cov_2fdba07wu0.s[337]++;
            if (arguments.length === 2) {
              cov_2fdba07wu0.b[134][0]++;
              cov_2fdba07wu0.s[338]++;
              target = v.copy();
            } else {
              cov_2fdba07wu0.b[134][1]++;
              cov_2fdba07wu0.s[339]++;
              if (!(target instanceof _main.default.Vector)) {
                cov_2fdba07wu0.b[135][0]++;
                cov_2fdba07wu0.s[340]++;
                _main.default._friendlyError(
                  'The target parameter should be of type p5.Vector',
                  'p5.Vector.rotate'
                );
              } else {
                cov_2fdba07wu0.b[135][1]++;
              }
              cov_2fdba07wu0.s[341]++;
              target.set(v);
            }
            cov_2fdba07wu0.s[342]++;
            target.rotate(a);
            cov_2fdba07wu0.s[343]++;
            return target;
          };

          /**
           * Divides a vector by a scalar and returns a new vector.
           */

          /**
           * @method div
           * @static
           * @param  {Number} x
           * @param  {Number} y
           * @param  {Number} [z]
           * @return {p5.Vector} The resulting new <a href="#/p5.Vector">p5.Vector</a>
           */

          /**
           * @method div
           * @static
           * @param  {p5.Vector} v
           * @param  {Number}  n
           * @param  {p5.Vector} [target] the vector to receive the result
           */

          /**
           * @method div
           * @static
           * @param  {p5.Vector} v0
           * @param  {p5.Vector} v1
           * @param  {p5.Vector} [target]
           */

          /**
           * @method div
           * @static
           * @param  {p5.Vector} v0
           * @param  {Number[]} arr
           * @param  {p5.Vector} [target]
           */ cov_2fdba07wu0.s[344]++;
          _main.default.Vector.div = function div(v, n, target) {
            cov_2fdba07wu0.f[49]++;
            cov_2fdba07wu0.s[345]++;
            if (!target) {
              cov_2fdba07wu0.b[136][0]++;
              cov_2fdba07wu0.s[346]++;
              target = v.copy();
              cov_2fdba07wu0.s[347]++;

              if (arguments.length === 3) {
                cov_2fdba07wu0.b[137][0]++;
                cov_2fdba07wu0.s[348]++;
                _main.default._friendlyError(
                  'The target parameter is undefined, it should be of type p5.Vector',
                  'p5.Vector.div'
                );
              } else {
                cov_2fdba07wu0.b[137][1]++;
              }
            } else {
              cov_2fdba07wu0.b[136][1]++;
              cov_2fdba07wu0.s[349]++;
              target.set(v);
            }
            cov_2fdba07wu0.s[350]++;
            target.div(n);
            cov_2fdba07wu0.s[351]++;
            return target;
          };

          /**
           * Calculates the dot product of two vectors.
           */
          /**
           * @method dot
           * @static
           * @param  {p5.Vector} v1 the first <a href="#/p5.Vector">p5.Vector</a>
           * @param  {p5.Vector} v2 the second <a href="#/p5.Vector">p5.Vector</a>
           * @return {Number}     the dot product
           */ cov_2fdba07wu0.s[352]++;
          _main.default.Vector.dot = function dot(v1, v2) {
            cov_2fdba07wu0.f[50]++;
            cov_2fdba07wu0.s[353]++;
            return v1.dot(v2);
          };

          /**
           * Calculates the cross product of two vectors.
           */
          /**
           * @method cross
           * @static
           * @param  {p5.Vector} v1 the first <a href="#/p5.Vector">p5.Vector</a>
           * @param  {p5.Vector} v2 the second <a href="#/p5.Vector">p5.Vector</a>
           * @return {Number}     the cross product
           */ cov_2fdba07wu0.s[354]++;
          _main.default.Vector.cross = function cross(v1, v2) {
            cov_2fdba07wu0.f[51]++;
            cov_2fdba07wu0.s[355]++;
            return v1.cross(v2);
          };

          /**
           * Calculates the Euclidean distance between two points (considering a
           * point as a vector object).
           */
          /**
           * @method dist
           * @static
           * @param  {p5.Vector} v1 the first <a href="#/p5.Vector">p5.Vector</a>
           * @param  {p5.Vector} v2 the second <a href="#/p5.Vector">p5.Vector</a>
           * @return {Number}     the distance
           */ cov_2fdba07wu0.s[356]++;
          _main.default.Vector.dist = function dist(v1, v2) {
            cov_2fdba07wu0.f[52]++;
            cov_2fdba07wu0.s[357]++;
            return v1.dist(v2);
          };

          /**
           * Linear interpolate a vector to another vector and return the result as a
           * new vector.
           */
          /**
           * @method lerp
           * @static
           * @param {p5.Vector} v1
           * @param {p5.Vector} v2
           * @param {Number} amt
           * @param {p5.Vector} [target] the vector to receive the result
           * @return {p5.Vector}      the lerped value
           */ cov_2fdba07wu0.s[358]++;
          _main.default.Vector.lerp = function lerp(v1, v2, amt, target) {
            cov_2fdba07wu0.f[53]++;
            cov_2fdba07wu0.s[359]++;
            if (!target) {
              cov_2fdba07wu0.b[138][0]++;
              cov_2fdba07wu0.s[360]++;
              target = v1.copy();
              cov_2fdba07wu0.s[361]++;
              if (arguments.length === 4) {
                cov_2fdba07wu0.b[139][0]++;
                cov_2fdba07wu0.s[362]++;
                _main.default._friendlyError(
                  'The target parameter is undefined, it should be of type p5.Vector',
                  'p5.Vector.lerp'
                );
              } else {
                cov_2fdba07wu0.b[139][1]++;
              }
            } else {
              cov_2fdba07wu0.b[138][1]++;
              cov_2fdba07wu0.s[363]++;
              target.set(v1);
            }
            cov_2fdba07wu0.s[364]++;
            target.lerp(v2, amt);
            cov_2fdba07wu0.s[365]++;
            return target;
          };

          /**
           * Calculates the magnitude (length) of the vector and returns the result as
           * a float (this is simply the equation sqrt(x\*x + y\*y + z\*z).)
           */
          /**
           * @method mag
           * @static
           * @param {p5.Vector} vecT the vector to return the magnitude of
           * @return {Number}        the magnitude of vecT
           */ cov_2fdba07wu0.s[366]++;
          _main.default.Vector.mag = function mag(vecT) {
            cov_2fdba07wu0.f[54]++;
            var x = (cov_2fdba07wu0.s[367]++, vecT.x),
              y = (cov_2fdba07wu0.s[368]++, vecT.y),
              z = (cov_2fdba07wu0.s[369]++, vecT.z);
            var magSq = (cov_2fdba07wu0.s[370]++, x * x + y * y + z * z);
            cov_2fdba07wu0.s[371]++;
            return Math.sqrt(magSq);
          };

          /**
           * Normalize the vector to length 1 (make it a unit vector).
           */
          /**
           * @method normalize
           * @static
           * @param {p5.Vector} v  the vector to normalize
           * @param {p5.Vector} [target] the vector to receive the result
           * @return {p5.Vector}   v normalized to a length of 1
           */ cov_2fdba07wu0.s[372]++;
          _main.default.Vector.normalize = function normalize(v, target) {
            cov_2fdba07wu0.f[55]++;
            cov_2fdba07wu0.s[373]++;
            if (arguments.length < 2) {
              cov_2fdba07wu0.b[140][0]++;
              cov_2fdba07wu0.s[374]++;
              target = v.copy();
            } else {
              cov_2fdba07wu0.b[140][1]++;
              cov_2fdba07wu0.s[375]++;
              if (!(target instanceof _main.default.Vector)) {
                cov_2fdba07wu0.b[141][0]++;
                cov_2fdba07wu0.s[376]++;
                _main.default._friendlyError(
                  'The target parameter should be of type p5.Vector',
                  'p5.Vector.normalize'
                );
              } else {
                cov_2fdba07wu0.b[141][1]++;
              }
              cov_2fdba07wu0.s[377]++;
              target.set(v);
            }
            cov_2fdba07wu0.s[378]++;
            return target.normalize();
          };
          var _default = _main.default.Vector;
          exports.default = _default;
        },
        {
          '../core/constants': 272,
          '../core/main': 283,
          'core-js/modules/es.array.concat': 166,
          'core-js/modules/es.array.every': 167,
          'core-js/modules/es.array.slice': 178,
          'core-js/modules/es.array.some': 179,
          'core-js/modules/es.math.sign': 184,
          'core-js/modules/es.number.constructor': 185,
          'core-js/modules/es.number.is-finite': 186,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.regexp.to-string': 197,
          'core-js/modules/es.string.sub': 207
        }
      ],
      317: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_ppl65atwx = (function() {
            var path = '/Users/outofambit/src/p5.js/src/math/random.js';
            var hash = '8de55f3c87c4247d3169a9c2880fefd3dbe7d393';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/math/random.js',
              statementMap: {
                '0': { start: { line: 11, column: 24 }, end: { line: 11, column: 43 } },
                '1': { start: { line: 15, column: 10 }, end: { line: 15, column: 20 } },
                '2': { start: { line: 17, column: 10 }, end: { line: 17, column: 17 } },
                '3': { start: { line: 19, column: 10 }, end: { line: 19, column: 20 } },
                '4': { start: { line: 20, column: 9 }, end: { line: 20, column: 10 } },
                '5': { start: { line: 23, column: 0 }, end: { line: 29, column: 2 } },
                '6': { start: { line: 25, column: 2 }, end: { line: 25, column: 58 } },
                '7': { start: { line: 28, column: 2 }, end: { line: 28, column: 33 } },
                '8': { start: { line: 31, column: 0 }, end: { line: 35, column: 2 } },
                '9': { start: { line: 34, column: 2 }, end: { line: 34, column: 70 } },
                '10': { start: { line: 61, column: 0 }, end: { line: 64, column: 2 } },
                '11': { start: { line: 62, column: 2 }, end: { line: 62, column: 42 } },
                '12': { start: { line: 63, column: 2 }, end: { line: 63, column: 34 } },
                '13': { start: { line: 125, column: 0 }, end: { line: 151, column: 2 } },
                '14': { start: { line: 126, column: 2 }, end: { line: 126, column: 46 } },
                '15': { start: { line: 129, column: 2 }, end: { line: 133, column: 3 } },
                '16': { start: { line: 130, column: 4 }, end: { line: 130, column: 38 } },
                '17': { start: { line: 132, column: 4 }, end: { line: 132, column: 25 } },
                '18': { start: { line: 134, column: 2 }, end: { line: 150, column: 3 } },
                '19': { start: { line: 135, column: 4 }, end: { line: 135, column: 16 } },
                '20': { start: { line: 136, column: 9 }, end: { line: 150, column: 3 } },
                '21': { start: { line: 137, column: 4 }, end: { line: 141, column: 5 } },
                '22': { start: { line: 138, column: 6 }, end: { line: 138, column: 48 } },
                '23': { start: { line: 140, column: 6 }, end: { line: 140, column: 24 } },
                '24': { start: { line: 143, column: 4 }, end: { line: 147, column: 5 } },
                '25': { start: { line: 144, column: 18 }, end: { line: 144, column: 21 } },
                '26': { start: { line: 145, column: 6 }, end: { line: 145, column: 16 } },
                '27': { start: { line: 146, column: 6 }, end: { line: 146, column: 16 } },
                '28': { start: { line: 149, column: 4 }, end: { line: 149, column: 36 } },
                '29': { start: { line: 209, column: 0 }, end: { line: 228, column: 2 } },
                '30': { start: { line: 211, column: 2 }, end: { line: 224, column: 3 } },
                '31': { start: { line: 212, column: 4 }, end: { line: 212, column: 12 } },
                '32': { start: { line: 213, column: 4 }, end: { line: 213, column: 36 } },
                '33': { start: { line: 215, column: 4 }, end: { line: 219, column: 21 } },
                '34': { start: { line: 216, column: 6 }, end: { line: 216, column: 30 } },
                '35': { start: { line: 217, column: 6 }, end: { line: 217, column: 30 } },
                '36': { start: { line: 218, column: 6 }, end: { line: 218, column: 28 } },
                '37': { start: { line: 220, column: 4 }, end: { line: 220, column: 40 } },
                '38': { start: { line: 221, column: 4 }, end: { line: 221, column: 16 } },
                '39': { start: { line: 222, column: 4 }, end: { line: 222, column: 16 } },
                '40': { start: { line: 223, column: 4 }, end: { line: 223, column: 35 } },
                '41': { start: { line: 226, column: 12 }, end: { line: 226, column: 21 } },
                '42': { start: { line: 227, column: 2 }, end: { line: 227, column: 21 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 23, column: 20 }, end: { line: 23, column: 21 } },
                  loc: { start: { line: 23, column: 44 }, end: { line: 29, column: 1 } },
                  line: 23
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 31, column: 27 }, end: { line: 31, column: 28 } },
                  loc: { start: { line: 31, column: 56 }, end: { line: 35, column: 1 } },
                  line: 31
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: { start: { line: 61, column: 26 }, end: { line: 61, column: 27 } },
                  loc: { start: { line: 61, column: 41 }, end: { line: 64, column: 1 } },
                  line: 61
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 125, column: 22 },
                    end: { line: 125, column: 23 }
                  },
                  loc: { start: { line: 125, column: 41 }, end: { line: 151, column: 1 } },
                  line: 125
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 209, column: 30 },
                    end: { line: 209, column: 31 }
                  },
                  loc: { start: { line: 209, column: 53 }, end: { line: 228, column: 1 } },
                  line: 209
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 34, column: 25 }, end: { line: 34, column: 62 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 34, column: 39 }, end: { line: 34, column: 56 } },
                    { start: { line: 34, column: 59 }, end: { line: 34, column: 62 } }
                  ],
                  line: 34
                },
                '1': {
                  loc: { start: { line: 129, column: 2 }, end: { line: 133, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 129, column: 2 }, end: { line: 133, column: 3 } },
                    { start: { line: 129, column: 2 }, end: { line: 133, column: 3 } }
                  ],
                  line: 129
                },
                '2': {
                  loc: { start: { line: 134, column: 2 }, end: { line: 150, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 134, column: 2 }, end: { line: 150, column: 3 } },
                    { start: { line: 134, column: 2 }, end: { line: 150, column: 3 } }
                  ],
                  line: 134
                },
                '3': {
                  loc: { start: { line: 136, column: 9 }, end: { line: 150, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 136, column: 9 }, end: { line: 150, column: 3 } },
                    { start: { line: 136, column: 9 }, end: { line: 150, column: 3 } }
                  ],
                  line: 136
                },
                '4': {
                  loc: { start: { line: 137, column: 4 }, end: { line: 141, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 137, column: 4 }, end: { line: 141, column: 5 } },
                    { start: { line: 137, column: 4 }, end: { line: 141, column: 5 } }
                  ],
                  line: 137
                },
                '5': {
                  loc: { start: { line: 143, column: 4 }, end: { line: 147, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 143, column: 4 }, end: { line: 147, column: 5 } },
                    { start: { line: 143, column: 4 }, end: { line: 147, column: 5 } }
                  ],
                  line: 143
                },
                '6': {
                  loc: { start: { line: 209, column: 45 }, end: { line: 209, column: 51 } },
                  type: 'default-arg',
                  locations: [
                    { start: { line: 209, column: 50 }, end: { line: 209, column: 51 } }
                  ],
                  line: 209
                },
                '7': {
                  loc: { start: { line: 211, column: 2 }, end: { line: 224, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 211, column: 2 }, end: { line: 224, column: 3 } },
                    { start: { line: 211, column: 2 }, end: { line: 224, column: 3 } }
                  ],
                  line: 211
                },
                '8': {
                  loc: { start: { line: 226, column: 12 }, end: { line: 226, column: 21 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 226, column: 12 }, end: { line: 226, column: 16 } },
                    { start: { line: 226, column: 20 }, end: { line: 226, column: 21 } }
                  ],
                  line: 226
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0
              },
              f: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0 },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0],
                '7': [0, 0],
                '8': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '8de55f3c87c4247d3169a9c2880fefd3dbe7d393'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }

          // variables used for random number generators
          var randomStateProp = (cov_ppl65atwx.s[0]++, '_lcg_random_state');
          // Set to values from http://en.wikipedia.org/wiki/Numerical_Recipes
          // m is basically chosen to be large (as it is the max period)
          // and for its relationships to a and c
          var m = (cov_ppl65atwx.s[1]++, 4294967296);
          // a - 1 should be divisible by m's prime factors
          var a = (cov_ppl65atwx.s[2]++, 1664525);
          // c and m should be co-prime
          var c = (cov_ppl65atwx.s[3]++, 1013904223);
          var y2 = (cov_ppl65atwx.s[4]++, 0);

          // Linear Congruential Generator that stores its state at instance[stateProperty]
          cov_ppl65atwx.s[5]++;
          _main.default.prototype._lcg = function(stateProperty) {
            cov_ppl65atwx.f[0]++;
            cov_ppl65atwx.s[6]++;
            // define the recurrence relationship
            this[stateProperty] = (a * this[stateProperty] + c) % m;
            // return a float in [0, 1)
            // we've just used % m, so / m is always < 1
            cov_ppl65atwx.s[7]++;
            return this[stateProperty] / m;
          };
          cov_ppl65atwx.s[8]++;

          _main.default.prototype._lcgSetSeed = function(stateProperty, val) {
            cov_ppl65atwx.f[1]++;
            cov_ppl65atwx.s[9]++;
            // pick a random seed if val is undefined or null
            // the >>> 0 casts the seed to an unsigned 32-bit integer
            this[stateProperty] =
              (val == null
                ? (cov_ppl65atwx.b[0][0]++, Math.random() * m)
                : (cov_ppl65atwx.b[0][1]++, val)) >>> 0;
          };

          /**
           * Sets the seed value for <a href="#/p5/random">random()</a>.
           *
           * By default, <a href="#/p5/random">random()</a> produces different results each time the program
           * is run. Set the seed parameter to a constant to return the same
           * pseudo-random numbers each time the software is run.
           *
           * @method randomSeed
           * @param {Number} seed   the seed value
           * @example
           * <div>
           * <code>
           * randomSeed(99);
           * for (let i = 0; i < 100; i++) {
           *   let r = random(0, 255);
           *   stroke(r);
           *   line(i, 0, i, 100);
           * }
           * </code>
           * </div>
           *
           * @alt
           * many vertical lines drawn in white, black or grey.
           */ cov_ppl65atwx.s[10]++;
          _main.default.prototype.randomSeed = function(seed) {
            cov_ppl65atwx.f[2]++;
            cov_ppl65atwx.s[11]++;
            this._lcgSetSeed(randomStateProp, seed);
            cov_ppl65atwx.s[12]++;
            this._gaussian_previous = false;
          };

          /**
           * Return a random floating-point number.
           *
           * Takes either 0, 1 or 2 arguments.
           *
           * If no argument is given, returns a random number from 0
           * up to (but not including) 1.
           *
           * If one argument is given and it is a number, returns a random number from 0
           * up to (but not including) the number.
           *
           * If one argument is given and it is an array, returns a random element from
           * that array.
           *
           * If two arguments are given, returns a random number from the
           * first argument up to (but not including) the second argument.
           *
           * @method random
           * @param  {Number} [min]   the lower bound (inclusive)
           * @param  {Number} [max]   the upper bound (exclusive)
           * @return {Number} the random number
           * @example
           * <div>
           * <code>
           * for (let i = 0; i < 100; i++) {
           *   let r = random(50);
           *   stroke(r * 5);
           *   line(50, i, 50 + r, i);
           * }
           * </code>
           * </div>
           * <div>
           * <code>
           * for (let i = 0; i < 100; i++) {
           *   let r = random(-50, 50);
           *   line(50, i, 50 + r, i);
           * }
           * </code>
           * </div>
           * <div>
           * <code>
           * // Get a random element from an array using the random(Array) syntax
           * let words = ['apple', 'bear', 'cat', 'dog'];
           * let word = random(words); // select random word
           * text(word, 10, 50); // draw the word
           * </code>
           * </div>
           *
           * @alt
           * 100 horizontal lines from center canvas to right. size+fill change each time
           * 100 horizontal lines from center of canvas. height & side change each render
           * word displayed at random. Either apple, bear, cat, or dog
           */
          /**
           * @method random
           * @param  {Array} choices   the array to choose from
           * @return {*} the random element from the array
           * @example
           */ cov_ppl65atwx.s[13]++;
          _main.default.prototype.random = function(min, max) {
            cov_ppl65atwx.f[3]++;
            cov_ppl65atwx.s[14]++;
            _main.default._validateParameters('random', arguments);
            var rand;
            cov_ppl65atwx.s[15]++;

            if (this[randomStateProp] != null) {
              cov_ppl65atwx.b[1][0]++;
              cov_ppl65atwx.s[16]++;
              rand = this._lcg(randomStateProp);
            } else {
              cov_ppl65atwx.b[1][1]++;
              cov_ppl65atwx.s[17]++;
              rand = Math.random();
            }
            cov_ppl65atwx.s[18]++;
            if (typeof min === 'undefined') {
              cov_ppl65atwx.b[2][0]++;
              cov_ppl65atwx.s[19]++;
              return rand;
            } else {
              cov_ppl65atwx.b[2][1]++;
              cov_ppl65atwx.s[20]++;
              if (typeof max === 'undefined') {
                cov_ppl65atwx.b[3][0]++;
                cov_ppl65atwx.s[21]++;
                if (min instanceof Array) {
                  cov_ppl65atwx.b[4][0]++;
                  cov_ppl65atwx.s[22]++;
                  return min[Math.floor(rand * min.length)];
                } else {
                  cov_ppl65atwx.b[4][1]++;
                  cov_ppl65atwx.s[23]++;
                  return rand * min;
                }
              } else {
                cov_ppl65atwx.b[3][1]++;
                cov_ppl65atwx.s[24]++;
                if (min > max) {
                  cov_ppl65atwx.b[5][0]++;
                  var tmp = (cov_ppl65atwx.s[25]++, min);
                  cov_ppl65atwx.s[26]++;
                  min = max;
                  cov_ppl65atwx.s[27]++;
                  max = tmp;
                } else {
                  cov_ppl65atwx.b[5][1]++;
                }
                cov_ppl65atwx.s[28]++;

                return rand * (max - min) + min;
              }
            }
          };

          /**
           *
           * Returns a random number fitting a Gaussian, or
           * normal, distribution. There is theoretically no minimum or maximum
           * value that <a href="#/p5/randomGaussian">randomGaussian()</a> might return. Rather, there is
           * just a very low probability that values far from the mean will be
           * returned; and a higher probability that numbers near the mean will
           * be returned.
           *
           * Takes either 0, 1 or 2 arguments.<br>
           * If no args, returns a mean of 0 and standard deviation of 1.<br>
           * If one arg, that arg is the mean (standard deviation is 1).<br>
           * If two args, first is mean, second is standard deviation.
           *
           * @method randomGaussian
           * @param  {Number} [mean]  the mean
           * @param  {Number} [sd]    the standard deviation
           * @return {Number} the random number
           * @example
           * <div>
           * <code>
           * for (let y = 0; y < 100; y++) {
           *   let x = randomGaussian(50, 15);
           *   line(50, y, x, y);
           * }
           * </code>
           * </div>
           * <div>
           * <code>
           * let distribution = new Array(360);
           *
           * function setup() {
           *   createCanvas(100, 100);
           *   for (let i = 0; i < distribution.length; i++) {
           *     distribution[i] = floor(randomGaussian(0, 15));
           *   }
           * }
           *
           * function draw() {
           *   background(204);
           *
           *   translate(width / 2, width / 2);
           *
           *   for (let i = 0; i < distribution.length; i++) {
           *     rotate(TWO_PI / distribution.length);
           *     stroke(0);
           *     let dist = abs(distribution[i]);
           *     line(0, 0, dist, 0);
           *   }
           * }
           * </code>
           * </div>
           * @alt
           * 100 horizontal lines from center of canvas. height & side change each render
           * black lines radiate from center of canvas. size determined each render
           */ cov_ppl65atwx.s[29]++;
          _main.default.prototype.randomGaussian = function(mean) {
            var sd =
              arguments.length > 1 && arguments[1] !== undefined
                ? arguments[1]
                : (cov_ppl65atwx.b[6][0]++, 1);
            cov_ppl65atwx.f[4]++;
            var y1, x1, x2, w;
            cov_ppl65atwx.s[30]++;
            if (this._gaussian_previous) {
              cov_ppl65atwx.b[7][0]++;
              cov_ppl65atwx.s[31]++;
              y1 = y2;
              cov_ppl65atwx.s[32]++;
              this._gaussian_previous = false;
            } else {
              cov_ppl65atwx.b[7][1]++;
              cov_ppl65atwx.s[33]++;
              do {
                cov_ppl65atwx.s[34]++;
                x1 = this.random(2) - 1;
                cov_ppl65atwx.s[35]++;
                x2 = this.random(2) - 1;
                cov_ppl65atwx.s[36]++;
                w = x1 * x1 + x2 * x2;
              } while (w >= 1);
              cov_ppl65atwx.s[37]++;
              w = Math.sqrt(-2 * Math.log(w) / w);
              cov_ppl65atwx.s[38]++;
              y1 = x1 * w;
              cov_ppl65atwx.s[39]++;
              y2 = x2 * w;
              cov_ppl65atwx.s[40]++;
              this._gaussian_previous = true;
            }

            var m = (cov_ppl65atwx.s[41]++,
            (cov_ppl65atwx.b[8][0]++, mean) || (cov_ppl65atwx.b[8][1]++, 0));
            cov_ppl65atwx.s[42]++;
            return y1 * sd + m;
          };
          var _default = _main.default;
          exports.default = _default;
        },
        { '../core/main': 283 }
      ],
      318: [
        function(_dereq_, module, exports) {
          'use strict';
          function _typeof(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof = function _typeof(obj) {
                return typeof obj;
              };
            } else {
              _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof(obj);
          }
          var cov_271ae11zv3 = (function() {
            var path = '/Users/outofambit/src/p5.js/src/math/trigonometry.js';
            var hash = '6c88e6c8d4ffe0b881232e512a7fbf63c2d4ccb8';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/math/trigonometry.js',
              statementMap: {
                '0': { start: { line: 16, column: 0 }, end: { line: 16, column: 44 } },
                '1': { start: { line: 49, column: 0 }, end: { line: 51, column: 2 } },
                '2': { start: { line: 50, column: 2 }, end: { line: 50, column: 45 } },
                '3': { start: { line: 84, column: 0 }, end: { line: 86, column: 2 } },
                '4': { start: { line: 85, column: 2 }, end: { line: 85, column: 45 } },
                '5': { start: { line: 119, column: 0 }, end: { line: 121, column: 2 } },
                '6': { start: { line: 120, column: 2 }, end: { line: 120, column: 45 } },
                '7': { start: { line: 155, column: 0 }, end: { line: 157, column: 2 } },
                '8': { start: { line: 156, column: 2 }, end: { line: 156, column: 45 } },
                '9': { start: { line: 182, column: 0 }, end: { line: 184, column: 2 } },
                '10': { start: { line: 183, column: 2 }, end: { line: 183, column: 42 } },
                '11': { start: { line: 209, column: 0 }, end: { line: 211, column: 2 } },
                '12': { start: { line: 210, column: 2 }, end: { line: 210, column: 42 } },
                '13': { start: { line: 235, column: 0 }, end: { line: 237, column: 2 } },
                '14': { start: { line: 236, column: 2 }, end: { line: 236, column: 42 } },
                '15': { start: { line: 260, column: 0 }, end: { line: 260, column: 61 } },
                '16': { start: { line: 260, column: 32 }, end: { line: 260, column: 60 } },
                '17': { start: { line: 283, column: 0 }, end: { line: 283, column: 61 } },
                '18': { start: { line: 283, column: 32 }, end: { line: 283, column: 60 } },
                '19': { start: { line: 314, column: 0 }, end: { line: 318, column: 2 } },
                '20': { start: { line: 315, column: 2 }, end: { line: 317, column: 3 } },
                '21': { start: { line: 316, column: 4 }, end: { line: 316, column: 27 } },
                '22': { start: { line: 328, column: 0 }, end: { line: 333, column: 2 } },
                '23': { start: { line: 329, column: 2 }, end: { line: 331, column: 3 } },
                '24': { start: { line: 330, column: 4 }, end: { line: 330, column: 40 } },
                '25': { start: { line: 332, column: 2 }, end: { line: 332, column: 15 } },
                '26': { start: { line: 343, column: 0 }, end: { line: 348, column: 2 } },
                '27': { start: { line: 344, column: 2 }, end: { line: 346, column: 3 } },
                '28': { start: { line: 345, column: 4 }, end: { line: 345, column: 40 } },
                '29': { start: { line: 347, column: 2 }, end: { line: 347, column: 15 } },
                '30': { start: { line: 358, column: 0 }, end: { line: 363, column: 2 } },
                '31': { start: { line: 359, column: 2 }, end: { line: 361, column: 3 } },
                '32': { start: { line: 360, column: 4 }, end: { line: 360, column: 40 } },
                '33': { start: { line: 362, column: 2 }, end: { line: 362, column: 15 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 49, column: 20 }, end: { line: 49, column: 21 } },
                  loc: { start: { line: 49, column: 36 }, end: { line: 51, column: 1 } },
                  line: 49
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 84, column: 20 }, end: { line: 84, column: 21 } },
                  loc: { start: { line: 84, column: 36 }, end: { line: 86, column: 1 } },
                  line: 84
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 119, column: 20 },
                    end: { line: 119, column: 21 }
                  },
                  loc: { start: { line: 119, column: 36 }, end: { line: 121, column: 1 } },
                  line: 119
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 155, column: 21 },
                    end: { line: 155, column: 22 }
                  },
                  loc: { start: { line: 155, column: 36 }, end: { line: 157, column: 1 } },
                  line: 155
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 182, column: 19 },
                    end: { line: 182, column: 20 }
                  },
                  loc: { start: { line: 182, column: 35 }, end: { line: 184, column: 1 } },
                  line: 182
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 209, column: 19 },
                    end: { line: 209, column: 20 }
                  },
                  loc: { start: { line: 209, column: 35 }, end: { line: 211, column: 1 } },
                  line: 209
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 235, column: 19 },
                    end: { line: 235, column: 20 }
                  },
                  loc: { start: { line: 235, column: 35 }, end: { line: 237, column: 1 } },
                  line: 235
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 260, column: 23 },
                    end: { line: 260, column: 24 }
                  },
                  loc: { start: { line: 260, column: 32 }, end: { line: 260, column: 60 } },
                  line: 260
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 283, column: 23 },
                    end: { line: 283, column: 24 }
                  },
                  loc: { start: { line: 283, column: 32 }, end: { line: 283, column: 60 } },
                  line: 283
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 314, column: 25 },
                    end: { line: 314, column: 26 }
                  },
                  loc: { start: { line: 314, column: 40 }, end: { line: 318, column: 1 } },
                  line: 314
                },
                '10': {
                  name: '(anonymous_10)',
                  decl: {
                    start: { line: 328, column: 26 },
                    end: { line: 328, column: 27 }
                  },
                  loc: { start: { line: 328, column: 42 }, end: { line: 333, column: 1 } },
                  line: 328
                },
                '11': {
                  name: '(anonymous_11)',
                  decl: {
                    start: { line: 343, column: 26 },
                    end: { line: 343, column: 27 }
                  },
                  loc: { start: { line: 343, column: 42 }, end: { line: 348, column: 1 } },
                  line: 343
                },
                '12': {
                  name: '(anonymous_12)',
                  decl: {
                    start: { line: 358, column: 28 },
                    end: { line: 358, column: 29 }
                  },
                  loc: { start: { line: 358, column: 44 }, end: { line: 363, column: 1 } },
                  line: 358
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 315, column: 2 }, end: { line: 317, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 315, column: 2 }, end: { line: 317, column: 3 } },
                    { start: { line: 315, column: 2 }, end: { line: 317, column: 3 } }
                  ],
                  line: 315
                },
                '1': {
                  loc: { start: { line: 315, column: 6 }, end: { line: 315, column: 62 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 315, column: 6 }, end: { line: 315, column: 32 } },
                    { start: { line: 315, column: 36 }, end: { line: 315, column: 62 } }
                  ],
                  line: 315
                },
                '2': {
                  loc: { start: { line: 329, column: 2 }, end: { line: 331, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 329, column: 2 }, end: { line: 331, column: 3 } },
                    { start: { line: 329, column: 2 }, end: { line: 331, column: 3 } }
                  ],
                  line: 329
                },
                '3': {
                  loc: { start: { line: 344, column: 2 }, end: { line: 346, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 344, column: 2 }, end: { line: 346, column: 3 } },
                    { start: { line: 344, column: 2 }, end: { line: 346, column: 3 } }
                  ],
                  line: 344
                },
                '4': {
                  loc: { start: { line: 359, column: 2 }, end: { line: 361, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 359, column: 2 }, end: { line: 361, column: 3 } },
                    { start: { line: 359, column: 2 }, end: { line: 361, column: 3 } }
                  ],
                  line: 359
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0
              },
              b: { '0': [0, 0], '1': [0, 0], '2': [0, 0], '3': [0, 0], '4': [0, 0] },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '6c88e6c8d4ffe0b881232e512a7fbf63c2d4ccb8'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          var constants = _interopRequireWildcard(_dereq_('../core/constants'));
          function _getRequireWildcardCache() {
            if (typeof WeakMap !== 'function') return null;
            var cache = new WeakMap();
            _getRequireWildcardCache = function _getRequireWildcardCache() {
              return cache;
            };
            return cache;
          }
          function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
              return obj;
            }
            if (obj === null || (_typeof(obj) !== 'object' && typeof obj !== 'function')) {
              return { default: obj };
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
              return cache.get(obj);
            }
            var newObj = {};
            var hasPropertyDescriptor =
              Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
              if (Object.prototype.hasOwnProperty.call(obj, key)) {
                var desc = hasPropertyDescriptor
                  ? Object.getOwnPropertyDescriptor(obj, key)
                  : null;
                if (desc && (desc.get || desc.set)) {
                  Object.defineProperty(newObj, key, desc);
                } else {
                  newObj[key] = obj[key];
                }
              }
            }
            newObj.default = obj;
            if (cache) {
              cache.set(obj, newObj);
            }
            return newObj;
          }
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_271ae11zv3.s[0]++;

          /*
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   * all DEGREES/RADIANS conversion should be done in the p5 instance
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   * if possible, using the p5._toRadians(), p5._fromRadians() methods.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   */
          _main.default.prototype._angleMode = constants.RADIANS;

          /**
           * The inverse of <a href="#/p5/cos">cos()</a>, returns the arc cosine of a value.
           * This function expects the values in the range of -1 to 1 and values are returned in
           * the range 0 to PI (3.1415927) if the angleMode is RADIANS or 0 to 180 if the
           * angle mode is DEGREES.
           *
           * @method acos
           * @param  {Number} value the value whose arc cosine is to be returned
           * @return {Number}       the arc cosine of the given value
           *
           * @example
           * <div class= “norender">
           * <code>
           * let a = PI;
           * let c = cos(a);
           * let ac = acos(c);
           * // Prints: "3.1415927 : -1.0 : 3.1415927"
           * print(a + ' : ' + c + ' : ' + ac);
           * </code>
           * </div>
           *
           * <div class= “norender">
           * <code>
           * let a = PI + PI / 4.0;
           * let c = cos(a);
           * let ac = acos(c);
           * // Prints: "3.926991 : -0.70710665 : 2.3561943"
           * print(a + ' : ' + c + ' : ' + ac);
           * </code>
           * </div>
           */ cov_271ae11zv3.s[1]++;
          _main.default.prototype.acos = function(ratio) {
            cov_271ae11zv3.f[0]++;
            cov_271ae11zv3.s[2]++;
            return this._fromRadians(Math.acos(ratio));
          };

          /**
           * The inverse of <a href="#/p5/sin">sin()</a>, returns the arc sine of a value.
           * This function expects the values in the range of -1 to 1 and values are returned
           * in the range -PI/2 to PI/2 if the angleMode is RADIANS or -90 to 90 if the angle
           * mode is DEGREES.
           *
           * @method asin
           * @param  {Number} value the value whose arc sine is to be returned
           * @return {Number}       the arc sine of the given value
           *
           * @example
           * <div class= “norender">
           * <code>
           * let a = PI / 3.0;
           * let s = sin(a);
           * let as = asin(s);
           * // Prints: "1.0471975 : 0.86602540 : 1.0471975"
           * print(a + ' : ' + s + ' : ' + as);
           * </code>
           * </div>
           *
           * <div class= “norender">
           * <code>
           * let a = PI + PI / 3.0;
           * let s = sin(a);
           * let as = asin(s);
           * // Prints: "4.1887902 : -0.86602540 : -1.0471975"
           * print(a + ' : ' + s + ' : ' + as);
           * </code>
           * </div>
           */ cov_271ae11zv3.s[3]++;
          _main.default.prototype.asin = function(ratio) {
            cov_271ae11zv3.f[1]++;
            cov_271ae11zv3.s[4]++;
            return this._fromRadians(Math.asin(ratio));
          };

          /**
           * The inverse of <a href="#/p5/tan">tan()</a>, returns the arc tangent of a value.
           * This function expects the values in the range of -Infinity to Infinity (exclusive) and
           * values are returned in the range -PI/2 to PI/2 if the angleMode is RADIANS or
           * -90 to 90 if the angle mode is DEGREES.
           *
           * @method atan
           * @param  {Number} value the value whose arc tangent is to be returned
           * @return {Number}       the arc tangent of the given value
           *
           * @example
           * <div class= “norender">
           * <code>
           * let a = PI / 3.0;
           * let t = tan(a);
           * let at = atan(t);
           * // Prints: "1.0471975 : 1.7320508 : 1.0471975"
           * print(a + ' : ' + t + ' : ' + at);
           * </code>
           * </div>
           *
           * <div class= “norender">
           * <code>
           * let a = PI + PI / 3.0;
           * let t = tan(a);
           * let at = atan(t);
           * // Prints: "4.1887902 : 1.7320508 : 1.0471975"
           * print(a + ' : ' + t + ' : ' + at);
           * </code>
           * </div>
           */ cov_271ae11zv3.s[5]++;
          _main.default.prototype.atan = function(ratio) {
            cov_271ae11zv3.f[2]++;
            cov_271ae11zv3.s[6]++;
            return this._fromRadians(Math.atan(ratio));
          };

          /**
           * Calculates the angle (in radians) from a specified point to the coordinate
           * origin as measured from the positive x-axis. Values are returned as a
           * float in the range from PI to -PI if the angleMode is RADIANS or 180 to
           * -180 if the angleMode is DEGREES. The atan2<a href="#/p5/">()</a> function is
           * most often used for orienting geometry to the position of the cursor.
           *
           * Note: The y-coordinate of the point is the first parameter, and the
           * x-coordinate is the second parameter, due the the structure of calculating
           * the tangent.
           *
           * @method atan2
           * @param  {Number} y y-coordinate of the point
           * @param  {Number} x x-coordinate of the point
           * @return {Number}   the arc tangent of the given point
           *
           * @example
           * <div>
           * <code>
           * function draw() {
           *   background(204);
           *   translate(width / 2, height / 2);
           *   let a = atan2(mouseY - height / 2, mouseX - width / 2);
           *   rotate(a);
           *   rect(-30, -5, 60, 10);
           * }
           * </code>
           * </div>
           *
           * @alt
           * 60 by 10 rect at center of canvas rotates with mouse movements
           */ cov_271ae11zv3.s[7]++;
          _main.default.prototype.atan2 = function(y, x) {
            cov_271ae11zv3.f[3]++;
            cov_271ae11zv3.s[8]++;
            return this._fromRadians(Math.atan2(y, x));
          };

          /**
           * Calculates the cosine of an angle. This function takes into account the
           * current <a href="#/p5/angleMode">angleMode</a>. Values are returned in the range -1 to 1.
           *
           * @method cos
           * @param  {Number} angle the angle
           * @return {Number}       the cosine of the angle
           *
           * @example
           * <div>
           * <code>
           * let a = 0.0;
           * let inc = TWO_PI / 25.0;
           * for (let i = 0; i < 25; i++) {
           *   line(i * 4, 50, i * 4, 50 + cos(a) * 40.0);
           *   a = a + inc;
           * }
           * </code>
           * </div>
           *
           * @alt
           * vertical black lines form wave patterns, extend-down on left and right side
           */ cov_271ae11zv3.s[9]++;
          _main.default.prototype.cos = function(angle) {
            cov_271ae11zv3.f[4]++;
            cov_271ae11zv3.s[10]++;
            return Math.cos(this._toRadians(angle));
          };

          /**
           * Calculates the sine of an angle. This function takes into account the
           * current <a href="#/p5/angleMode">angleMode</a>. Values are returned in the range -1 to 1.
           *
           * @method sin
           * @param  {Number} angle the angle
           * @return {Number}       the sine of the angle
           *
           * @example
           * <div>
           * <code>
           * let a = 0.0;
           * let inc = TWO_PI / 25.0;
           * for (let i = 0; i < 25; i++) {
           *   line(i * 4, 50, i * 4, 50 + sin(a) * 40.0);
           *   a = a + inc;
           * }
           * </code>
           * </div>
           *
           * @alt
           * vertical black lines extend down and up from center to form wave pattern
           */ cov_271ae11zv3.s[11]++;
          _main.default.prototype.sin = function(angle) {
            cov_271ae11zv3.f[5]++;
            cov_271ae11zv3.s[12]++;
            return Math.sin(this._toRadians(angle));
          };

          /**
           * Calculates the tangent of an angle. This function takes into account
           * the current <a href="#/p5/angleMode">angleMode</a>. Values are returned in the range of all real numbers.
           *
           * @method tan
           * @param  {Number} angle the angle
           * @return {Number}       the tangent of the angle
           *
           * @example
           * <div>
           * <code>
           * let a = 0.0;
           * let inc = TWO_PI / 50.0;
           * for (let i = 0; i < 100; i = i + 2) {
           *   line(i, 50, i, 50 + tan(a) * 2.0);
           *   a = a + inc;
           * }
           * </code>
           *
           * @alt
           * vertical black lines end down and up from center to form spike pattern
           */ cov_271ae11zv3.s[13]++;
          _main.default.prototype.tan = function(angle) {
            cov_271ae11zv3.f[6]++;
            cov_271ae11zv3.s[14]++;
            return Math.tan(this._toRadians(angle));
          };

          /**
           * Converts a radian measurement to its corresponding value in degrees.
           * Radians and degrees are two ways of measuring the same thing. There are
           * 360 degrees in a circle and 2*PI radians in a circle. For example,
           * 90° = PI/2 = 1.5707964. This function does not take into account the
           * current <a href="#/p5/angleMode">angleMode</a>.
           *
           * @method degrees
           * @param  {Number} radians the radians value to convert to degrees
           * @return {Number}         the converted angle
           *
           * @example
           * <div class= “norender">
           * <code>
           * let rad = PI / 4;
           * let deg = degrees(rad);
           * print(rad + ' radians is ' + deg + ' degrees');
           * // Prints: 0.7853981633974483 radians is 45 degrees
           * </code>
           * </div>
           */ cov_271ae11zv3.s[15]++;
          _main.default.prototype.degrees = function(angle) {
            cov_271ae11zv3.f[7]++;
            cov_271ae11zv3.s[16]++;
            return angle * constants.RAD_TO_DEG;
          };

          /**
           * Converts a degree measurement to its corresponding value in radians.
           * Radians and degrees are two ways of measuring the same thing. There are
           * 360 degrees in a circle and 2*PI radians in a circle. For example,
           * 90° = PI/2 = 1.5707964. This function does not take into account the
           * current <a href="#/p5/angleMode">angleMode</a>.
           *
           * @method radians
           * @param  {Number} degrees the degree value to convert to radians
           * @return {Number}         the converted angle
           *
           * @example
           * <div class= “norender">
           * <code>
           * let deg = 45.0;
           * let rad = radians(deg);
           * print(deg + ' degrees is ' + rad + ' radians');
           * // Prints: 45 degrees is 0.7853981633974483 radians
           * </code>
           * </div>
           */ cov_271ae11zv3.s[17]++;
          _main.default.prototype.radians = function(angle) {
            cov_271ae11zv3.f[8]++;
            cov_271ae11zv3.s[18]++;
            return angle * constants.DEG_TO_RAD;
          };

          /**
           * Sets the current mode of p5 to given mode. Default mode is RADIANS.
           *
           * @method angleMode
           * @param {Constant} mode either RADIANS or DEGREES
           *
           * @example
           * <div>
           * <code>
           * function draw() {
           *   background(204);
           *   angleMode(DEGREES); // Change the mode to DEGREES
           *   let a = atan2(mouseY - height / 2, mouseX - width / 2);
           *   translate(width / 2, height / 2);
           *   push();
           *   rotate(a);
           *   rect(-20, -5, 40, 10); // Larger rectangle is rotating in degrees
           *   pop();
           *   angleMode(RADIANS); // Change the mode to RADIANS
           *   rotate(a); // variable a stays the same
           *   rect(-40, -5, 20, 10); // Smaller rectangle is rotating in radians
           * }
           * </code>
           * </div>
           *
           * @alt
           * 40 by 10 rect in center rotates with mouse moves. 20 by 10 rect moves faster.
           *
           */ cov_271ae11zv3.s[19]++;
          _main.default.prototype.angleMode = function(mode) {
            cov_271ae11zv3.f[9]++;
            cov_271ae11zv3.s[20]++;
            if (
              (cov_271ae11zv3.b[1][0]++, mode === constants.DEGREES) ||
              (cov_271ae11zv3.b[1][1]++, mode === constants.RADIANS)
            ) {
              cov_271ae11zv3.b[0][0]++;
              cov_271ae11zv3.s[21]++;
              this._angleMode = mode;
            } else {
              cov_271ae11zv3.b[0][1]++;
            }
          };

          /**
           * converts angles from the current angleMode to RADIANS
           *
           * @method _toRadians
           * @private
           * @param {Number} angle
           * @returns {Number}
           */ cov_271ae11zv3.s[22]++;
          _main.default.prototype._toRadians = function(angle) {
            cov_271ae11zv3.f[10]++;
            cov_271ae11zv3.s[23]++;
            if (this._angleMode === constants.DEGREES) {
              cov_271ae11zv3.b[2][0]++;
              cov_271ae11zv3.s[24]++;
              return angle * constants.DEG_TO_RAD;
            } else {
              cov_271ae11zv3.b[2][1]++;
            }
            cov_271ae11zv3.s[25]++;
            return angle;
          };

          /**
           * converts angles from the current angleMode to DEGREES
           *
           * @method _toDegrees
           * @private
           * @param {Number} angle
           * @returns {Number}
           */ cov_271ae11zv3.s[26]++;
          _main.default.prototype._toDegrees = function(angle) {
            cov_271ae11zv3.f[11]++;
            cov_271ae11zv3.s[27]++;
            if (this._angleMode === constants.RADIANS) {
              cov_271ae11zv3.b[3][0]++;
              cov_271ae11zv3.s[28]++;
              return angle * constants.RAD_TO_DEG;
            } else {
              cov_271ae11zv3.b[3][1]++;
            }
            cov_271ae11zv3.s[29]++;
            return angle;
          };

          /**
           * converts angles from RADIANS into the current angleMode
           *
           * @method _fromRadians
           * @private
           * @param {Number} angle
           * @returns {Number}
           */ cov_271ae11zv3.s[30]++;
          _main.default.prototype._fromRadians = function(angle) {
            cov_271ae11zv3.f[12]++;
            cov_271ae11zv3.s[31]++;
            if (this._angleMode === constants.DEGREES) {
              cov_271ae11zv3.b[4][0]++;
              cov_271ae11zv3.s[32]++;
              return angle * constants.RAD_TO_DEG;
            } else {
              cov_271ae11zv3.b[4][1]++;
            }
            cov_271ae11zv3.s[33]++;
            return angle;
          };
          var _default = _main.default;
          exports.default = _default;
        },
        { '../core/constants': 272, '../core/main': 283 }
      ],
      319: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_2mqitx7pyh = (function() {
            var path = '/Users/outofambit/src/p5.js/src/typography/attributes.js';
            var hash = '756ba22baf0d9d07a33be136a1a2ed01b63cdde5';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/typography/attributes.js',
              statementMap: {
                '0': { start: { line: 76, column: 0 }, end: { line: 79, column: 2 } },
                '1': { start: { line: 77, column: 2 }, end: { line: 77, column: 49 } },
                '2': { start: { line: 78, column: 2 }, end: { line: 78, column: 48 } },
                '3': { start: { line: 113, column: 0 }, end: { line: 116, column: 2 } },
                '4': { start: { line: 114, column: 2 }, end: { line: 114, column: 51 } },
                '5': { start: { line: 115, column: 2 }, end: { line: 115, column: 50 } },
                '6': { start: { line: 145, column: 0 }, end: { line: 148, column: 2 } },
                '7': { start: { line: 146, column: 2 }, end: { line: 146, column: 48 } },
                '8': { start: { line: 147, column: 2 }, end: { line: 147, column: 47 } },
                '9': { start: { line: 182, column: 0 }, end: { line: 185, column: 2 } },
                '10': { start: { line: 183, column: 2 }, end: { line: 183, column: 49 } },
                '11': { start: { line: 184, column: 2 }, end: { line: 184, column: 48 } },
                '12': { start: { line: 213, column: 0 }, end: { line: 220, column: 2 } },
                '13': { start: { line: 214, column: 2 }, end: { line: 214, column: 16 } },
                '14': { start: { line: 215, column: 2 }, end: { line: 215, column: 44 } },
                '15': { start: { line: 216, column: 2 }, end: { line: 218, column: 3 } },
                '16': { start: { line: 217, column: 4 }, end: { line: 217, column: 13 } },
                '17': { start: { line: 219, column: 2 }, end: { line: 219, column: 43 } },
                '18': { start: { line: 246, column: 0 }, end: { line: 249, column: 2 } },
                '19': { start: { line: 247, column: 2 }, end: { line: 247, column: 45 } },
                '20': { start: { line: 248, column: 2 }, end: { line: 248, column: 37 } },
                '21': { start: { line: 275, column: 0 }, end: { line: 278, column: 2 } },
                '22': { start: { line: 276, column: 2 }, end: { line: 276, column: 46 } },
                '23': { start: { line: 277, column: 2 }, end: { line: 277, column: 38 } },
                '24': { start: { line: 283, column: 0 }, end: { line: 285, column: 2 } },
                '25': { start: { line: 284, column: 2 }, end: { line: 284, column: 45 } },
                '26': { start: { line: 349, column: 0 }, end: { line: 354, column: 2 } },
                '27': { start: { line: 350, column: 2 }, end: { line: 352, column: 3 } },
                '28': { start: { line: 351, column: 4 }, end: { line: 351, column: 54 } },
                '29': { start: { line: 353, column: 2 }, end: { line: 353, column: 44 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 76, column: 25 }, end: { line: 76, column: 26 } },
                  loc: { start: { line: 76, column: 57 }, end: { line: 79, column: 1 } },
                  line: 76
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: {
                    start: { line: 113, column: 27 },
                    end: { line: 113, column: 28 }
                  },
                  loc: { start: { line: 113, column: 48 }, end: { line: 116, column: 1 } },
                  line: 113
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 145, column: 24 },
                    end: { line: 145, column: 25 }
                  },
                  loc: { start: { line: 145, column: 42 }, end: { line: 148, column: 1 } },
                  line: 145
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 182, column: 25 },
                    end: { line: 182, column: 26 }
                  },
                  loc: { start: { line: 182, column: 44 }, end: { line: 185, column: 1 } },
                  line: 182
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 213, column: 25 },
                    end: { line: 213, column: 26 }
                  },
                  loc: { start: { line: 213, column: 43 }, end: { line: 220, column: 1 } },
                  line: 213
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 246, column: 26 },
                    end: { line: 246, column: 27 }
                  },
                  loc: { start: { line: 246, column: 44 }, end: { line: 249, column: 1 } },
                  line: 246
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 275, column: 27 },
                    end: { line: 275, column: 28 }
                  },
                  loc: { start: { line: 275, column: 45 }, end: { line: 278, column: 1 } },
                  line: 275
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 283, column: 34 },
                    end: { line: 283, column: 35 }
                  },
                  loc: { start: { line: 283, column: 45 }, end: { line: 285, column: 1 } },
                  line: 283
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 349, column: 24 },
                    end: { line: 349, column: 25 }
                  },
                  loc: { start: { line: 349, column: 44 }, end: { line: 354, column: 1 } },
                  line: 349
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 216, column: 2 }, end: { line: 218, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 216, column: 2 }, end: { line: 218, column: 3 } },
                    { start: { line: 216, column: 2 }, end: { line: 218, column: 3 } }
                  ],
                  line: 216
                },
                '1': {
                  loc: { start: { line: 350, column: 2 }, end: { line: 352, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 350, column: 2 }, end: { line: 352, column: 3 } },
                    { start: { line: 350, column: 2 }, end: { line: 352, column: 3 } }
                  ],
                  line: 350
                },
                '2': {
                  loc: { start: { line: 350, column: 6 }, end: { line: 350, column: 50 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 350, column: 6 }, end: { line: 350, column: 26 } },
                    { start: { line: 350, column: 30 }, end: { line: 350, column: 50 } }
                  ],
                  line: 350
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0
              },
              f: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0, '8': 0 },
              b: { '0': [0, 0], '1': [0, 0], '2': [0, 0] },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '756ba22baf0d9d07a33be136a1a2ed01b63cdde5'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_2mqitx7pyh.s[0]++;

          /**
           * Sets the current alignment for drawing text. Accepts two
           * arguments: horizAlign (LEFT, CENTER, or RIGHT) and
           * vertAlign (TOP, BOTTOM, CENTER, or BASELINE).
           *
           * The horizAlign parameter is in reference to the x value
           * of the <a href="#/p5/text">text()</a> function, while the vertAlign parameter
           * is in reference to the y value.
           *
           * So if you write textAlign(LEFT), you are aligning the left
           * edge of your text to the x value you give in <a href="#/p5/text">text()</a>.
           * If you write textAlign(RIGHT, TOP), you are aligning the right edge
           * of your text to the x value and the top of edge of the text
           * to the y value.
           *
           * @method textAlign
           * @param {Constant} horizAlign horizontal alignment, either LEFT,
           *                            CENTER, or RIGHT
           * @param {Constant} [vertAlign] vertical alignment, either TOP,
           *                            BOTTOM, CENTER, or BASELINE
           * @chainable
           * @example
           * <div>
           * <code>
           * textSize(16);
           * textAlign(RIGHT);
           * text('ABCD', 50, 30);
           * textAlign(CENTER);
           * text('EFGH', 50, 50);
           * textAlign(LEFT);
           * text('IJKL', 50, 70);
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * textSize(16);
           * strokeWeight(0.5);
           *
           * line(0, 12, width, 12);
           * textAlign(CENTER, TOP);
           * text('TOP', 0, 12, width);
           *
           * line(0, 37, width, 37);
           * textAlign(CENTER, CENTER);
           * text('CENTER', 0, 37, width);
           *
           * line(0, 62, width, 62);
           * textAlign(CENTER, BASELINE);
           * text('BASELINE', 0, 62, width);
           *
           * line(0, 87, width, 87);
           * textAlign(CENTER, BOTTOM);
           * text('BOTTOM', 0, 87, width);
           * </code>
           * </div>
           *
           * @alt
           * Letters ABCD displayed at top left, EFGH at center and IJKL at bottom right.
           * The names of the four vertical alignments (TOP, CENTER, BASELINE & BOTTOM) rendered each showing that alignment's placement relative to a horizontal line.
           */
          /**
           * @method textAlign
           * @return {Object}
           */
          _main.default.prototype.textAlign = function(horizAlign, vertAlign) {
            var _this$_renderer;
            cov_2mqitx7pyh.f[0]++;
            cov_2mqitx7pyh.s[1]++;
            _main.default._validateParameters('textAlign', arguments);
            cov_2mqitx7pyh.s[2]++;
            return (_this$_renderer = this._renderer).textAlign.apply(
              _this$_renderer,
              arguments
            );
          };

          /**
           * Sets/gets the spacing, in pixels, between lines of text. This setting will be
           * used in all subsequent calls to the <a href="#/p5/text">text()</a> function.
           *
           * @method textLeading
           * @param {Number} leading the size in pixels for spacing between lines
           * @chainable
           *
           * @example
           * <div>
           * <code>
           * let lines = 'L1\nL2\nL3'; // "\n" is a "new line" character
           * textSize(12);
           *
           * textLeading(10);
           * text(lines, 10, 25);
           *
           * textLeading(20);
           * text(lines, 40, 25);
           *
           * textLeading(30);
           * text(lines, 70, 25);
           * </code>
           * </div>
           *
           * @alt
           * A set of L1 L2 & L3 displayed vertically 3 times. spacing increases for each set
           */
          /**
           * @method textLeading
           * @return {Number}
           */ cov_2mqitx7pyh.s[3]++;
          _main.default.prototype.textLeading = function(theLeading) {
            var _this$_renderer2;
            cov_2mqitx7pyh.f[1]++;
            cov_2mqitx7pyh.s[4]++;
            _main.default._validateParameters('textLeading', arguments);
            cov_2mqitx7pyh.s[5]++;
            return (_this$_renderer2 = this._renderer).textLeading.apply(
              _this$_renderer2,
              arguments
            );
          };

          /**
           * Sets/gets the current font size. This size will be used in all subsequent
           * calls to the <a href="#/p5/text">text()</a> function. Font size is measured in pixels.
           *
           * @method textSize
           * @param {Number} theSize the size of the letters in units of pixels
           * @chainable
           *
           * @example
           * <div>
           * <code>
           * textSize(12);
           * text('Font Size 12', 10, 30);
           * textSize(14);
           * text('Font Size 14', 10, 60);
           * textSize(16);
           * text('Font Size 16', 10, 90);
           * </code>
           * </div>
           *
           * @alt
           * 'Font Size 12' displayed small, 'Font Size 14' medium & 'Font Size 16' large
           */
          /**
           * @method textSize
           * @return {Number}
           */ cov_2mqitx7pyh.s[6]++;
          _main.default.prototype.textSize = function(theSize) {
            var _this$_renderer3;
            cov_2mqitx7pyh.f[2]++;
            cov_2mqitx7pyh.s[7]++;
            _main.default._validateParameters('textSize', arguments);
            cov_2mqitx7pyh.s[8]++;
            return (_this$_renderer3 = this._renderer).textSize.apply(
              _this$_renderer3,
              arguments
            );
          };

          /**
           * Sets/gets the style of the text for system fonts to NORMAL, ITALIC, BOLD or BOLDITALIC.
           * Note: this may be is overridden by CSS styling. For non-system fonts
           * (opentype, truetype, etc.) please load styled fonts instead.
           *
           * @method textStyle
           * @param {Constant} theStyle styling for text, either NORMAL,
           *                            ITALIC, BOLD or BOLDITALIC
           * @chainable
           * @example
           * <div>
           * <code>
           * strokeWeight(0);
           * textSize(12);
           * textStyle(NORMAL);
           * text('Font Style Normal', 10, 15);
           * textStyle(ITALIC);
           * text('Font Style Italic', 10, 40);
           * textStyle(BOLD);
           * text('Font Style Bold', 10, 65);
           * textStyle(BOLDITALIC);
           * text('Font Style Bold Italic', 10, 90);
           * </code>
           * </div>
           *
           * @alt
           * Words Font Style Normal displayed normally, Italic in italic, bold in bold and bold italic in bold italics.
           */
          /**
           * @method textStyle
           * @return {String}
           */ cov_2mqitx7pyh.s[9]++;
          _main.default.prototype.textStyle = function(theStyle) {
            var _this$_renderer4;
            cov_2mqitx7pyh.f[3]++;
            cov_2mqitx7pyh.s[10]++;
            _main.default._validateParameters('textStyle', arguments);
            cov_2mqitx7pyh.s[11]++;
            return (_this$_renderer4 = this._renderer).textStyle.apply(
              _this$_renderer4,
              arguments
            );
          };

          /**
           * Calculates and returns the width of any character or text string.
           *
           * @method textWidth
           * @param {String} theText the String of characters to measure
           * @return {Number} the calculated width
           * @example
           * <div>
           * <code>
           * textSize(28);
           *
           * let aChar = 'P';
           * let cWidth = textWidth(aChar);
           * text(aChar, 0, 40);
           * line(cWidth, 0, cWidth, 50);
           *
           * let aString = 'p5.js';
           * let sWidth = textWidth(aString);
           * text(aString, 0, 85);
           * line(sWidth, 50, sWidth, 100);
           * </code>
           * </div>
           *
           * @alt
           * Letter P and p5.js are displayed with vertical lines at end.
           */ cov_2mqitx7pyh.s[12]++;
          _main.default.prototype.textWidth = function() {
            var _this$_renderer5;
            cov_2mqitx7pyh.f[4]++;
            cov_2mqitx7pyh.s[13]++;
            for (
              var _len = arguments.length, args = new Array(_len), _key = 0;
              _key < _len;
              _key++
            ) {
              args[_key] = arguments[_key];
            }
            args[0] += '';
            cov_2mqitx7pyh.s[14]++;
            _main.default._validateParameters('textWidth', args);
            cov_2mqitx7pyh.s[15]++;
            if (args[0].length === 0) {
              cov_2mqitx7pyh.b[0][0]++;
              cov_2mqitx7pyh.s[16]++;
              return 0;
            } else {
              cov_2mqitx7pyh.b[0][1]++;
            }
            cov_2mqitx7pyh.s[17]++;
            return (_this$_renderer5 = this._renderer).textWidth.apply(
              _this$_renderer5,
              args
            );
          };

          /**
           * Returns the ascent of the current font at its current size. The ascent
           * represents the distance, in pixels, of the tallest character above
           * the baseline.
           * @method textAscent
           * @return {Number}
           * @example
           * <div>
           * <code>
           * let base = height * 0.75;
           * let scalar = 0.8; // Different for each font
           *
           * textSize(32); // Set initial text size
           * let asc = textAscent() * scalar; // Calc ascent
           * line(0, base - asc, width, base - asc);
           * text('dp', 0, base); // Draw text on baseline
           *
           * textSize(64); // Increase text size
           * asc = textAscent() * scalar; // Recalc ascent
           * line(40, base - asc, width, base - asc);
           * text('dp', 40, base); // Draw text on baseline
           * </code>
           * </div>
           */ cov_2mqitx7pyh.s[18]++;
          _main.default.prototype.textAscent = function() {
            cov_2mqitx7pyh.f[5]++;
            cov_2mqitx7pyh.s[19]++;
            for (
              var _len2 = arguments.length, args = new Array(_len2), _key2 = 0;
              _key2 < _len2;
              _key2++
            ) {
              args[_key2] = arguments[_key2];
            }
            _main.default._validateParameters('textAscent', args);
            cov_2mqitx7pyh.s[20]++;
            return this._renderer.textAscent();
          };

          /**
           * Returns the descent of the current font at its current size. The descent
           * represents the distance, in pixels, of the character with the longest
           * descender below the baseline.
           * @method textDescent
           * @return {Number}
           * @example
           * <div>
           * <code>
           * let base = height * 0.75;
           * let scalar = 0.8; // Different for each font
           *
           * textSize(32); // Set initial text size
           * let desc = textDescent() * scalar; // Calc descent
           * line(0, base + desc, width, base + desc);
           * text('dp', 0, base); // Draw text on baseline
           *
           * textSize(64); // Increase text size
           * desc = textDescent() * scalar; // Recalc descent
           * line(40, base + desc, width, base + desc);
           * text('dp', 40, base); // Draw text on baseline
           * </code>
           * </div>
           */ cov_2mqitx7pyh.s[21]++;
          _main.default.prototype.textDescent = function() {
            cov_2mqitx7pyh.f[6]++;
            cov_2mqitx7pyh.s[22]++;
            for (
              var _len3 = arguments.length, args = new Array(_len3), _key3 = 0;
              _key3 < _len3;
              _key3++
            ) {
              args[_key3] = arguments[_key3];
            }
            _main.default._validateParameters('textDescent', args);
            cov_2mqitx7pyh.s[23]++;
            return this._renderer.textDescent();
          };

          /**
           * Helper function to measure ascent and descent.
           */ cov_2mqitx7pyh.s[24]++;
          _main.default.prototype._updateTextMetrics = function() {
            cov_2mqitx7pyh.f[7]++;
            cov_2mqitx7pyh.s[25]++;
            return this._renderer._updateTextMetrics();
          };

          /**
           * Specifies how lines of text are wrapped within a text box. This requires a max-width set on the text area, specified in <a href="#/p5/text">text()</a> as parameter `x2`.
           *
           * WORD wrap style only breaks lines at spaces. A single string without spaces that exceeds the boundaries of the canvas or text area is not truncated, and will overflow the desired area, disappearing at the canvas edge.
           *
           * CHAR wrap style breaks lines wherever needed to stay within the text box.
           *
           * WORD is the default wrap style, and both styles will still break lines at any line breaks (`\n`) specified in the original text. The text area max-height parameter (`y2`) also still applies to wrapped text in both styles, lines of text that do not fit within the text area will not be drawn to the screen.
           *
           * @method textWrap
           * @param {Constant} wrapStyle text wrapping style, either WORD or CHAR
           * @return {String} wrapStyle
           * @example
           * <div>
           * <code>
           * textSize(20);
           * textWrap(WORD);
           * text('Have a wonderful day', 0, 10, 100);
           * </code>
           * </div>
           * <div>
           * <code>
           * textSize(20);
           * textWrap(CHAR);
           * text('Have a wonderful day', 0, 10, 100);
           * </code>
           * </div>
           * <div>
           * <code>
           * textSize(20);
           * textWrap(CHAR);
           * text('祝你有美好的一天', 0, 10, 100);
           * </code>
           * </div>
           * <div>
           * <code>
           * const scream = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAA';
           * textSize(20);
           * textWrap(WORD);
           * text(scream, 0, 0, 100);
           * fill(0, 0, 0, 75);
           * text(scream, 0, 20, 100);
           * fill(0, 0, 0, 50);
           * text(scream, 0, 40, 100);
           * fill(0, 0, 0, 25);
           * text(scream, 0, 60, 100);
           * strokeWeight(2);
           * ellipseMode(CENTER);
           * fill(255);
           * ellipse(15, 50, 15, 15);
           * fill(0);
           * ellipse(11, 47, 1, 1);
           * ellipse(19, 47, 1, 1);
           * ellipse(15, 52, 5, 5);
           * line(15, 60, 15, 70);
           * line(15, 65, 5, 55);
           * line(15, 65, 25, 55);
           * line(15, 70, 10, 80);
           * line(15, 70, 20, 80);
           * </code>
           * </div>
           */ cov_2mqitx7pyh.s[26]++;
          _main.default.prototype.textWrap = function(wrapStyle) {
            cov_2mqitx7pyh.f[8]++;
            cov_2mqitx7pyh.s[27]++;
            if (
              (cov_2mqitx7pyh.b[2][0]++, wrapStyle !== 'WORD') &&
              (cov_2mqitx7pyh.b[2][1]++, wrapStyle !== 'CHAR')
            ) {
              cov_2mqitx7pyh.b[1][0]++;
              cov_2mqitx7pyh.s[28]++;
              throw 'Error: textWrap accepts only WORD or CHAR';
            } else {
              cov_2mqitx7pyh.b[1][1]++;
            }
            cov_2mqitx7pyh.s[29]++;
            return this._renderer.textWrap(wrapStyle);
          };
          var _default = _main.default;
          exports.default = _default;
        },
        { '../core/main': 283 }
      ],
      320: [
        function(_dereq_, module, exports) {
          'use strict';
          function _typeof(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof = function _typeof(obj) {
                return typeof obj;
              };
            } else {
              _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof(obj);
          }
          var cov_26gmr3n4vk = (function() {
            var path = '/Users/outofambit/src/p5.js/src/typography/loading_displaying.js';
            var hash = '5a13d01a1e68b2a530d2f056927af9ad695f7579';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/typography/loading_displaying.js',
              statementMap: {
                '0': { start: { line: 87, column: 0 }, end: { line: 138, column: 2 } },
                '1': { start: { line: 88, column: 2 }, end: { line: 88, column: 48 } },
                '2': { start: { line: 89, column: 17 }, end: { line: 89, column: 34 } },
                '3': { start: { line: 91, column: 15 }, end: { line: 91, column: 19 } },
                '4': { start: { line: 92, column: 2 }, end: { line: 135, column: 5 } },
                '5': { start: { line: 93, column: 4 }, end: { line: 100, column: 5 } },
                '6': { start: { line: 94, column: 6 }, end: { line: 94, column: 41 } },
                '7': { start: { line: 95, column: 6 }, end: { line: 97, column: 7 } },
                '8': { start: { line: 96, column: 8 }, end: { line: 96, column: 28 } },
                '9': { start: { line: 98, column: 6 }, end: { line: 98, column: 31 } },
                '10': { start: { line: 99, column: 6 }, end: { line: 99, column: 13 } },
                '11': { start: { line: 102, column: 4 }, end: { line: 102, column: 23 } },
                '12': { start: { line: 104, column: 4 }, end: { line: 106, column: 5 } },
                '13': { start: { line: 105, column: 6 }, end: { line: 105, column: 24 } },
                '14': { start: { line: 108, column: 4 }, end: { line: 108, column: 29 } },
                '15': { start: { line: 111, column: 27 }, end: { line: 111, column: 58 } },
                '16': { start: { line: 113, column: 23 }, end: { line: 117, column: 12 } },
                '17': { start: { line: 119, column: 23 }, end: { line: 119, column: 50 } },
                '18': { start: { line: 122, column: 20 }, end: { line: 122, column: 77 } },
                '19': { start: { line: 125, column: 4 }, end: { line: 134, column: 5 } },
                '20': { start: { line: 126, column: 6 }, end: { line: 126, column: 52 } },
                '21': { start: { line: 127, column: 6 }, end: { line: 127, column: 49 } },
                '22': { start: { line: 128, column: 6 }, end: { line: 132, column: 8 } },
                '23': { start: { line: 133, column: 6 }, end: { line: 133, column: 42 } },
                '24': { start: { line: 137, column: 2 }, end: { line: 137, column: 16 } },
                '25': { start: { line: 222, column: 0 }, end: { line: 227, column: 2 } },
                '26': { start: { line: 223, column: 2 }, end: { line: 223, column: 44 } },
                '27': { start: { line: 224, column: 2 }, end: { line: 226, column: 40 } },
                '28': { start: { line: 286, column: 0 }, end: { line: 310, column: 2 } },
                '29': { start: { line: 287, column: 2 }, end: { line: 287, column: 48 } },
                '30': { start: { line: 288, column: 2 }, end: { line: 307, column: 3 } },
                '31': { start: { line: 289, column: 4 }, end: { line: 291, column: 5 } },
                '32': { start: { line: 290, column: 6 }, end: { line: 290, column: 54 } },
                '33': { start: { line: 293, column: 4 }, end: { line: 293, column: 54 } },
                '34': { start: { line: 295, column: 4 }, end: { line: 304, column: 5 } },
                '35': { start: { line: 296, column: 6 }, end: { line: 296, column: 56 } },
                '36': { start: { line: 297, column: 6 }, end: { line: 303, column: 7 } },
                '37': { start: { line: 299, column: 8 }, end: { line: 302, column: 10 } },
                '38': { start: { line: 306, column: 4 }, end: { line: 306, column: 49 } },
                '39': { start: { line: 309, column: 2 }, end: { line: 309, column: 34 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 87, column: 24 }, end: { line: 87, column: 25 } },
                  loc: { start: { line: 87, column: 59 }, end: { line: 138, column: 1 } },
                  line: 87
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 92, column: 22 }, end: { line: 92, column: 23 } },
                  loc: { start: { line: 92, column: 37 }, end: { line: 135, column: 3 } },
                  line: 92
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 222, column: 20 },
                    end: { line: 222, column: 21 }
                  },
                  loc: { start: { line: 222, column: 61 }, end: { line: 227, column: 1 } },
                  line: 222
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 286, column: 24 },
                    end: { line: 286, column: 25 }
                  },
                  loc: { start: { line: 286, column: 51 }, end: { line: 310, column: 1 } },
                  line: 286
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 93, column: 4 }, end: { line: 100, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 93, column: 4 }, end: { line: 100, column: 5 } },
                    { start: { line: 93, column: 4 }, end: { line: 100, column: 5 } }
                  ],
                  line: 93
                },
                '1': {
                  loc: { start: { line: 95, column: 6 }, end: { line: 97, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 95, column: 6 }, end: { line: 97, column: 7 } },
                    { start: { line: 95, column: 6 }, end: { line: 97, column: 7 } }
                  ],
                  line: 95
                },
                '2': {
                  loc: { start: { line: 104, column: 4 }, end: { line: 106, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 104, column: 4 }, end: { line: 106, column: 5 } },
                    { start: { line: 104, column: 4 }, end: { line: 106, column: 5 } }
                  ],
                  line: 104
                },
                '3': {
                  loc: { start: { line: 122, column: 20 }, end: { line: 122, column: 77 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 122, column: 37 }, end: { line: 122, column: 41 } },
                    { start: { line: 122, column: 44 }, end: { line: 122, column: 77 } }
                  ],
                  line: 122
                },
                '4': {
                  loc: { start: { line: 125, column: 4 }, end: { line: 134, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 125, column: 4 }, end: { line: 134, column: 5 } },
                    { start: { line: 125, column: 4 }, end: { line: 134, column: 5 } }
                  ],
                  line: 125
                },
                '5': {
                  loc: { start: { line: 224, column: 9 }, end: { line: 226, column: 39 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 225, column: 6 }, end: { line: 225, column: 10 } },
                    { start: { line: 226, column: 6 }, end: { line: 226, column: 39 } }
                  ],
                  line: 224
                },
                '6': {
                  loc: { start: { line: 224, column: 11 }, end: { line: 224, column: 61 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 224, column: 11 }, end: { line: 224, column: 33 } },
                    { start: { line: 224, column: 37 }, end: { line: 224, column: 61 } }
                  ],
                  line: 224
                },
                '7': {
                  loc: { start: { line: 288, column: 2 }, end: { line: 307, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 288, column: 2 }, end: { line: 307, column: 3 } },
                    { start: { line: 288, column: 2 }, end: { line: 307, column: 3 } }
                  ],
                  line: 288
                },
                '8': {
                  loc: { start: { line: 289, column: 4 }, end: { line: 291, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 289, column: 4 }, end: { line: 291, column: 5 } },
                    { start: { line: 289, column: 4 }, end: { line: 291, column: 5 } }
                  ],
                  line: 289
                },
                '9': {
                  loc: { start: { line: 295, column: 4 }, end: { line: 304, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 295, column: 4 }, end: { line: 304, column: 5 } },
                    { start: { line: 295, column: 4 }, end: { line: 304, column: 5 } }
                  ],
                  line: 295
                },
                '10': {
                  loc: { start: { line: 297, column: 6 }, end: { line: 303, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 297, column: 6 }, end: { line: 303, column: 7 } },
                    { start: { line: 297, column: 6 }, end: { line: 303, column: 7 } }
                  ],
                  line: 297
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0
              },
              f: { '0': 0, '1': 0, '2': 0, '3': 0 },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '5a13d01a1e68b2a530d2f056927af9ad695f7579'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.concat');
          _dereq_('core-js/modules/es.array.includes');
          _dereq_('core-js/modules/es.array.last-index-of');
          _dereq_('core-js/modules/es.regexp.exec');
          _dereq_('core-js/modules/es.string.split');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          var constants = _interopRequireWildcard(_dereq_('../core/constants'));
          var opentype = _interopRequireWildcard(_dereq_('opentype.js'));

          _dereq_('../core/friendly_errors/validate_params');
          _dereq_('../core/friendly_errors/file_errors');
          _dereq_('../core/friendly_errors/fes_core');
          function _getRequireWildcardCache() {
            if (typeof WeakMap !== 'function') return null;
            var cache = new WeakMap();
            _getRequireWildcardCache = function _getRequireWildcardCache() {
              return cache;
            };
            return cache;
          }
          function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
              return obj;
            }
            if (obj === null || (_typeof(obj) !== 'object' && typeof obj !== 'function')) {
              return { default: obj };
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
              return cache.get(obj);
            }
            var newObj = {};
            var hasPropertyDescriptor =
              Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
              if (Object.prototype.hasOwnProperty.call(obj, key)) {
                var desc = hasPropertyDescriptor
                  ? Object.getOwnPropertyDescriptor(obj, key)
                  : null;
                if (desc && (desc.get || desc.set)) {
                  Object.defineProperty(newObj, key, desc);
                } else {
                  newObj[key] = obj[key];
                }
              }
            }
            newObj.default = obj;
            if (cache) {
              cache.set(obj, newObj);
            }
            return newObj;
          }
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_26gmr3n4vk.s[0]++;

          /**
           * Loads an opentype font file (.otf, .ttf) from a file or a URL,
           * and returns a PFont Object. This method is asynchronous,
           * meaning it may not finish before the next line in your sketch
           * is executed.
           *
           * The path to the font should be relative to the HTML file
           * that links in your sketch. Loading fonts from a URL or other
           * remote location may be blocked due to your browser's built-in
           * security.
           *
           * @method loadFont
           * @param  {String}        path       name of the file or url to load
           * @param  {Function}      [callback] function to be executed after
           *                                    <a href="#/p5/loadFont">loadFont()</a> completes
           * @param  {Function}      [onError]  function to be executed if
           *                                    an error occurs
           * @return {p5.Font}                  <a href="#/p5.Font">p5.Font</a> object
           * @example
           *
           * Calling loadFont() inside <a href="#/p5/preload">preload()</a> guarantees
           * that the load operation will have completed before <a href="#/p5/setup">setup()</a>
           * and <a href="#/p5/draw">draw()</a> are called.
           *
           * <div><code>
           * let myFont;
           * function preload() {
           *   myFont = loadFont('assets/inconsolata.otf');
           * }
           *
           * function setup() {
           *   fill('#ED225D');
           *   textFont(myFont);
           *   textSize(36);
           *   text('p5*js', 10, 50);
           * }
           * </code></div>
           *
           * Outside of <a href="#/p5/preload">preload()</a>, you may supply a
           * callback function to handle the object:
           *
           * <div><code>
           * function setup() {
           *   loadFont('assets/inconsolata.otf', drawText);
           * }
           *
           * function drawText(font) {
           *   fill('#ED225D');
           *   textFont(font, 36);
           *   text('p5*js', 10, 50);
           * }
           * </code></div>
           *
           * You can also use the font filename string (without the file extension) to
           * style other HTML elements.
           *
           * <div><code>
           * function preload() {
           *   loadFont('assets/inconsolata.otf');
           * }
           *
           * function setup() {
           *   let myDiv = createDiv('hello there');
           *   myDiv.style('font-family', 'Inconsolata');
           * }
           * </code></div>
           *
           * @alt
           * p5*js in p5's theme dark pink
           * p5*js in p5's theme dark pink
           */
          _main.default.prototype.loadFont = function(path, onSuccess, onError) {
            cov_26gmr3n4vk.f[0]++;
            cov_26gmr3n4vk.s[1]++;
            _main.default._validateParameters('loadFont', arguments);
            var p5Font = (cov_26gmr3n4vk.s[2]++, new _main.default.Font(this));

            var self = (cov_26gmr3n4vk.s[3]++, this);
            cov_26gmr3n4vk.s[4]++;
            opentype.load(path, function(err, font) {
              cov_26gmr3n4vk.f[1]++;
              cov_26gmr3n4vk.s[5]++;
              if (err) {
                cov_26gmr3n4vk.b[0][0]++;
                cov_26gmr3n4vk.s[6]++;
                _main.default._friendlyFileLoadError(4, path);
                cov_26gmr3n4vk.s[7]++;
                if (typeof onError !== 'undefined') {
                  cov_26gmr3n4vk.b[1][0]++;
                  cov_26gmr3n4vk.s[8]++;
                  return onError(err);
                } else {
                  cov_26gmr3n4vk.b[1][1]++;
                }
                cov_26gmr3n4vk.s[9]++;
                console.error(err, path);
                cov_26gmr3n4vk.s[10]++;
                return;
              } else {
                cov_26gmr3n4vk.b[0][1]++;
              }
              cov_26gmr3n4vk.s[11]++;

              p5Font.font = font;
              cov_26gmr3n4vk.s[12]++;

              if (typeof onSuccess !== 'undefined') {
                cov_26gmr3n4vk.b[2][0]++;
                cov_26gmr3n4vk.s[13]++;
                onSuccess(p5Font);
              } else {
                cov_26gmr3n4vk.b[2][1]++;
              }
              cov_26gmr3n4vk.s[14]++;

              self._decrementPreload();

              // check that we have an acceptable font type
              var validFontTypes = (cov_26gmr3n4vk.s[15]++,
              ['ttf', 'otf', 'woff', 'woff2']);

              var fileNoPath = (cov_26gmr3n4vk.s[16]++,
              path
                .split('\\')
                .pop()
                .split('/')
                .pop());

              var lastDotIdx = (cov_26gmr3n4vk.s[17]++, fileNoPath.lastIndexOf('.'));
              var fontFamily;
              var newStyle;
              var fileExt = (cov_26gmr3n4vk.s[18]++,
              lastDotIdx < 1
                ? (cov_26gmr3n4vk.b[3][0]++, null)
                : (cov_26gmr3n4vk.b[3][1]++, fileNoPath.substr(lastDotIdx + 1)));

              // if so, add it to the DOM (name-only) for use with DOM module
              cov_26gmr3n4vk.s[19]++;
              if (validFontTypes.includes(fileExt)) {
                cov_26gmr3n4vk.b[4][0]++;
                cov_26gmr3n4vk.s[20]++;
                fontFamily = fileNoPath.substr(0, lastDotIdx);
                cov_26gmr3n4vk.s[21]++;
                newStyle = document.createElement('style');
                cov_26gmr3n4vk.s[22]++;
                newStyle.appendChild(
                  document.createTextNode(
                    '\n@font-face {\nfont-family: '
                      .concat(fontFamily, ';\nsrc: url(')
                      .concat(path, ');\n}\n')
                  )
                );
                cov_26gmr3n4vk.s[23]++;

                document.head.appendChild(newStyle);
              } else {
                cov_26gmr3n4vk.b[4][1]++;
              }
            });
            cov_26gmr3n4vk.s[24]++;

            return p5Font;
          };

          /**
           * Draws text to the screen. Displays the information specified in the first
           * parameter on the screen in the position specified by the additional
           * parameters. A default font will be used unless a font is set with the
           * <a href="#/p5/textFont">textFont()</a> function and a default size will be
           * used unless a font is set with <a href="#/p5/textSize">textSize()</a>. Change
           * the color of the text with the <a href="#/p5/fill">fill()</a> function. Change
           * the outline of the text with the <a href="#/p5/stroke">stroke()</a> and
           * <a href="#/p5/strokeWeight">strokeWeight()</a> functions.
           *
           * The text displays in relation to the <a href="#/p5/textAlign">textAlign()</a>
           * function, which gives the option to draw to the left, right, and center of the
           * coordinates.
           *
           * The x2 and y2 parameters define a rectangular area to display within and
           * may only be used with string data. When these parameters are specified,
           * they are interpreted based on the current <a href="#/p5/rectMode">rectMode()</a>
           * setting. Text that does not fit completely within the rectangle specified will
           * not be drawn to the screen. If x2 and y2 are not specified, the baseline
           * alignment is the default, which means that the text will be drawn upwards
           * from x and y.
           *
           * <b>WEBGL</b>: Only opentype/truetype fonts are supported. You must load a font
           * using the <a href="#/p5/loadFont">loadFont()</a> method (see the example above).
           * <a href="#/p5/stroke">stroke()</a> currently has no effect in webgl mode.
           *
           * @method text
           * @param {String|Object|Array|Number|Boolean} str the alphanumeric
           *                                             symbols to be displayed
           * @param {Number} x   x-coordinate of text
           * @param {Number} y   y-coordinate of text
           * @param {Number} [x2]  by default, the width of the text box,
           *                     see <a href="#/p5/rectMode">rectMode()</a> for more info
           * @param {Number} [y2]  by default, the height of the text box,
           *                     see <a href="#/p5/rectMode">rectMode()</a> for more info
           * @chainable
           * @example
           * <div>
           * <code>
           * textSize(32);
           * text('word', 10, 30);
           * fill(0, 102, 153);
           * text('word', 10, 60);
           * fill(0, 102, 153, 51);
           * text('word', 10, 90);
           * </code>
           * </div>
           * <div>
           * <code>
           * let s = 'The quick brown fox jumped over the lazy dog.';
           * fill(50);
           * text(s, 10, 10, 70, 80); // Text wraps within text box
           * </code>
           * </div>
           *
           * <div modernizr='webgl'>
           * <code>
           * let inconsolata;
           * function preload() {
           *   inconsolata = loadFont('assets/inconsolata.otf');
           * }
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   textFont(inconsolata);
           *   textSize(width / 3);
           *   textAlign(CENTER, CENTER);
           * }
           * function draw() {
           *   background(0);
           *   let time = millis();
           *   rotateX(time / 1000);
           *   rotateZ(time / 1234);
           *   text('p5.js', 0, 0);
           * }
           * </code>
           * </div>
           *
           * @alt
           * 'word' displayed 3 times going from black, blue to translucent blue
           * The text 'The quick brown fox jumped over the lazy dog' displayed.
           * The text 'p5.js' spinning in 3d
           */ cov_26gmr3n4vk.s[25]++;
          _main.default.prototype.text = function(str, x, y, maxWidth, maxHeight) {
            var _this$_renderer;
            cov_26gmr3n4vk.f[2]++;
            cov_26gmr3n4vk.s[26]++;
            _main.default._validateParameters('text', arguments);
            cov_26gmr3n4vk.s[27]++;
            return !(
              (cov_26gmr3n4vk.b[6][0]++, this._renderer._doFill) ||
              (cov_26gmr3n4vk.b[6][1]++, this._renderer._doStroke)
            )
              ? (cov_26gmr3n4vk.b[5][0]++, this)
              : (cov_26gmr3n4vk.b[5][1]++,
                (_this$_renderer = this._renderer).text.apply(_this$_renderer, arguments));
          };

          /**
    * Sets the current font that will be drawn with the <a href="#/p5/text">text()</a> function.
    * If textFont() is called without any argument, it will return the current font if one has
    * been set already. If not, it will return the name of the default font as a string.
    * If textFont() is called with a font to use, it will return the p5 object.
    *
    * <b>WEBGL</b>: Only fonts loaded via <a href="#/p5/loadFont">loadFont()</a> are supported.
    *
    * @method textFont
    * @return {Object} the current font / p5 Object
    *
    * @example
    * <div>
    * <code>
    * fill(0);
    * textSize(12);
    * textFont('Georgia');
    * text('Georgia', 12, 30);
    * textFont('Helvetica');
    * text('Helvetica', 12, 60);
    * </code>
    * </div>
    * <div>
    * <code>
    * let fontRegular, fontItalic, fontBold;
    * function preload() {
    *   fontRegular = loadFont('assets/Regular.otf');
    *   fontItalic = loadFont('assets/Italic.ttf');
    *   fontBold = loadFont('assets/Bold.ttf');
    * }
    * function setup() {
    *   background(210);
    *   fill(0)
       .strokeWeight(0)
       .textSize(10);
    *   textFont(fontRegular);
    *   text('Font Style Normal', 10, 30);
    *   textFont(fontItalic);
    *   text('Font Style Italic', 10, 50);
    *   textFont(fontBold);
    *   text('Font Style Bold', 10, 70);
    * }
    * </code>
    * </div>
    *
    * @alt
    * word 'Georgia' displayed in font Georgia and 'Helvetica' in font Helvetica
    * words Font Style Normal displayed normally, Italic in italic and bold in bold
    */
          /**
           * @method textFont
           * @param {Object|String} font a font loaded via <a href="#/p5/loadFont">loadFont()</a>,
           * or a String representing a <a href="https://mzl.la/2dOw8WD">web safe font</a>
           * (a font that is generally available across all systems)
           * @param {Number} [size] the font size to use
           * @chainable
           */ cov_26gmr3n4vk.s[28]++;
          _main.default.prototype.textFont = function(theFont, theSize) {
            cov_26gmr3n4vk.f[3]++;
            cov_26gmr3n4vk.s[29]++;
            _main.default._validateParameters('textFont', arguments);
            cov_26gmr3n4vk.s[30]++;
            if (arguments.length) {
              cov_26gmr3n4vk.b[7][0]++;
              cov_26gmr3n4vk.s[31]++;
              if (!theFont) {
                cov_26gmr3n4vk.b[8][0]++;
                cov_26gmr3n4vk.s[32]++;
                throw new Error('null font passed to textFont');
              } else {
                cov_26gmr3n4vk.b[8][1]++;
              }
              cov_26gmr3n4vk.s[33]++;

              this._renderer._setProperty('_textFont', theFont);
              cov_26gmr3n4vk.s[34]++;

              if (theSize) {
                cov_26gmr3n4vk.b[9][0]++;
                cov_26gmr3n4vk.s[35]++;
                this._renderer._setProperty('_textSize', theSize);
                cov_26gmr3n4vk.s[36]++;
                if (!this._renderer._leadingSet) {
                  cov_26gmr3n4vk.b[10][0]++;
                  cov_26gmr3n4vk.s[37]++;
                  // only use a default value if not previously set (#5181)
                  this._renderer._setProperty(
                    '_textLeading',
                    theSize * constants._DEFAULT_LEADMULT
                  );
                } else {
                  cov_26gmr3n4vk.b[10][1]++;
                }
              } else {
                cov_26gmr3n4vk.b[9][1]++;
              }
              cov_26gmr3n4vk.s[38]++;

              return this._renderer._applyTextProperties();
            } else {
              cov_26gmr3n4vk.b[7][1]++;
            }
            cov_26gmr3n4vk.s[39]++;

            return this._renderer._textFont;
          };
          var _default = _main.default;
          exports.default = _default;
        },
        {
          '../core/constants': 272,
          '../core/friendly_errors/fes_core': 275,
          '../core/friendly_errors/file_errors': 276,
          '../core/friendly_errors/validate_params': 278,
          '../core/main': 283,
          'core-js/modules/es.array.concat': 166,
          'core-js/modules/es.array.includes': 172,
          'core-js/modules/es.array.last-index-of': 176,
          'core-js/modules/es.regexp.exec': 196,
          'core-js/modules/es.string.split': 206,
          'opentype.js': 258
        }
      ],
      321: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_ip0rn67kt = (function() {
            var path = '/Users/outofambit/src/p5.js/src/typography/p5.Font.js';
            var hash = 'abc32bf343547fcdab80bb1602af61b54880d734';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/typography/p5.Font.js',
              statementMap: {
                '0': { start: { line: 19, column: 0 }, end: { line: 29, column: 2 } },
                '1': { start: { line: 20, column: 2 }, end: { line: 20, column: 18 } },
                '2': { start: { line: 22, column: 2 }, end: { line: 22, column: 18 } },
                '3': { start: { line: 28, column: 2 }, end: { line: 28, column: 24 } },
                '4': { start: { line: 74, column: 0 }, end: { line: 173, column: 2 } },
                '5': { start: { line: 78, column: 12 }, end: { line: 78, column: 74 } },
                '6': { start: { line: 80, column: 14 }, end: { line: 80, column: 40 } },
                '7': { start: { line: 81, column: 20 }, end: { line: 81, column: 51 } },
                '8': { start: { line: 82, column: 19 }, end: { line: 82, column: 57 } },
                '9': { start: { line: 83, column: 23 }, end: { line: 83, column: 28 } },
                '10': { start: { line: 87, column: 2 }, end: { line: 87, column: 47 } },
                '11': { start: { line: 90, column: 2 }, end: { line: 93, column: 3 } },
                '12': { start: { line: 91, column: 4 }, end: { line: 91, column: 75 } },
                '13': { start: { line: 92, column: 4 }, end: { line: 92, column: 29 } },
                '14': { start: { line: 95, column: 2 }, end: { line: 170, column: 3 } },
                '15': { start: { line: 96, column: 15 }, end: { line: 96, column: 17 } },
                '16': { start: { line: 98, column: 15 }, end: { line: 98, column: 17 } },
                '17': { start: { line: 101, column: 20 }, end: { line: 101, column: 22 } },
                '18': { start: { line: 102, column: 4 }, end: { line: 102, column: 20 } },
                '19': { start: { line: 103, column: 20 }, end: { line: 103, column: 22 } },
                '20': { start: { line: 104, column: 18 }, end: { line: 104, column: 39 } },
                '21': { start: { line: 105, column: 23 }, end: { line: 105, column: 48 } },
                '22': { start: { line: 106, column: 20 }, end: { line: 106, column: 21 } },
                '23': { start: { line: 108, column: 4 }, end: { line: 126, column: 6 } },
                '24': { start: { line: 115, column: 19 }, end: { line: 115, column: 37 } },
                '25': { start: { line: 116, column: 8 }, end: { line: 124, column: 9 } },
                '26': { start: { line: 117, column: 10 }, end: { line: 117, column: 25 } },
                '27': { start: { line: 118, column: 10 }, end: { line: 118, column: 34 } },
                '28': { start: { line: 120, column: 10 }, end: { line: 120, column: 56 } },
                '29': { start: { line: 121, column: 10 }, end: { line: 121, column: 56 } },
                '30': { start: { line: 122, column: 10 }, end: { line: 122, column: 71 } },
                '31': { start: { line: 123, column: 10 }, end: { line: 123, column: 71 } },
                '32': { start: { line: 128, column: 4 }, end: { line: 131, column: 5 } },
                '33': { start: { line: 129, column: 6 }, end: { line: 129, column: 65 } },
                '34': { start: { line: 130, column: 6 }, end: { line: 130, column: 65 } },
                '35': { start: { line: 133, column: 20 }, end: { line: 133, column: 21 } },
                '36': { start: { line: 134, column: 4 }, end: { line: 141, column: 5 } },
                '37': { start: { line: 134, column: 17 }, end: { line: 134, column: 18 } },
                '38': { start: { line: 135, column: 6 }, end: { line: 135, column: 49 } },
                '39': { start: { line: 136, column: 6 }, end: { line: 136, column: 49 } },
                '40': { start: { line: 137, column: 25 }, end: { line: 137, column: 42 } },
                '41': { start: { line: 138, column: 6 }, end: { line: 140, column: 7 } },
                '42': { start: { line: 139, column: 8 }, end: { line: 139, column: 31 } },
                '43': { start: { line: 143, column: 22 }, end: { line: 143, column: 48 } },
                '44': { start: { line: 144, column: 4 }, end: { line: 144, column: 41 } },
                '45': { start: { line: 145, column: 4 }, end: { line: 145, column: 41 } },
                '46': { start: { line: 147, column: 4 }, end: { line: 153, column: 6 } },
                '47': { start: { line: 156, column: 4 }, end: { line: 162, column: 6 } },
                '48': { start: { line: 164, column: 4 }, end: { line: 164, column: 21 } },
                '49': { start: { line: 165, column: 4 }, end: { line: 165, column: 21 } },
                '50': { start: { line: 167, column: 4 }, end: { line: 169, column: 5 } },
                '51': { start: { line: 168, column: 6 }, end: { line: 168, column: 31 } },
                '52': { start: { line: 172, column: 2 }, end: { line: 172, column: 16 } },
                '53': { start: { line: 233, column: 0 }, end: { line: 269, column: 2 } },
                '54': { start: { line: 234, column: 13 }, end: { line: 234, column: 14 } },
                '55': { start: { line: 235, column: 17 }, end: { line: 235, column: 19 } },
                '56': { start: { line: 236, column: 17 }, end: { line: 236, column: 37 } },
                '57': { start: { line: 239, column: 4 }, end: { line: 243, column: 6 } },
                '58': { start: { line: 246, column: 2 }, end: { line: 246, column: 57 } },
                '59': { start: { line: 248, column: 2 }, end: { line: 266, column: 3 } },
                '60': { start: { line: 248, column: 15 }, end: { line: 248, column: 16 } },
                '61': { start: { line: 249, column: 4 }, end: { line: 263, column: 5 } },
                '62': { start: { line: 252, column: 20 }, end: { line: 252, column: 53 } },
                '63': { start: { line: 253, column: 16 }, end: { line: 253, column: 42 } },
                '64': { start: { line: 255, column: 6 }, end: { line: 262, column: 7 } },
                '65': { start: { line: 255, column: 19 }, end: { line: 255, column: 20 } },
                '66': { start: { line: 256, column: 20 }, end: { line: 256, column: 51 } },
                '67': { start: { line: 258, column: 8 }, end: { line: 261, column: 9 } },
                '68': { start: { line: 258, column: 21 }, end: { line: 258, column: 22 } },
                '69': { start: { line: 259, column: 10 }, end: { line: 259, column: 27 } },
                '70': { start: { line: 260, column: 10 }, end: { line: 260, column: 30 } },
                '71': { start: { line: 265, column: 4 }, end: { line: 265, column: 59 } },
                '72': { start: { line: 268, column: 2 }, end: { line: 268, column: 16 } },
                '73': { start: { line: 284, column: 0 }, end: { line: 286, column: 2 } },
                '74': { start: { line: 285, column: 2 }, end: { line: 285, column: 39 } },
                '75': { start: { line: 298, column: 0 }, end: { line: 305, column: 2 } },
                '76': { start: { line: 300, column: 6 }, end: { line: 300, column: 77 } },
                '77': { start: { line: 301, column: 15 }, end: { line: 301, column: 26 } },
                '78': { start: { line: 302, column: 10 }, end: { line: 302, column: 53 } },
                '79': { start: { line: 304, column: 2 }, end: { line: 304, column: 76 } },
                '80': { start: { line: 322, column: 0 }, end: { line: 339, column: 2 } },
                '81': { start: { line: 323, column: 17 }, end: { line: 323, column: 18 } },
                '82': { start: { line: 326, column: 2 }, end: { line: 331, column: 3 } },
                '83': { start: { line: 327, column: 4 }, end: { line: 327, column: 46 } },
                '84': { start: { line: 328, column: 9 }, end: { line: 331, column: 3 } },
                '85': { start: { line: 330, column: 4 }, end: { line: 330, column: 16 } },
                '86': { start: { line: 334, column: 2 }, end: { line: 336, column: 3 } },
                '87': { start: { line: 335, column: 4 }, end: { line: 335, column: 32 } },
                '88': { start: { line: 338, column: 2 }, end: { line: 338, column: 35 } },
                '89': { start: { line: 358, column: 0 }, end: { line: 386, column: 2 } },
                '90': { start: { line: 359, column: 17 }, end: { line: 359, column: 18 } },
                '91': { start: { line: 362, column: 2 }, end: { line: 367, column: 3 } },
                '92': { start: { line: 363, column: 4 }, end: { line: 363, column: 46 } },
                '93': { start: { line: 364, column: 9 }, end: { line: 367, column: 3 } },
                '94': { start: { line: 366, column: 4 }, end: { line: 366, column: 16 } },
                '95': { start: { line: 370, column: 2 }, end: { line: 383, column: 3 } },
                '96': { start: { line: 371, column: 4 }, end: { line: 373, column: 5 } },
                '97': { start: { line: 372, column: 6 }, end: { line: 372, column: 34 } },
                '98': { start: { line: 374, column: 4 }, end: { line: 376, column: 5 } },
                '99': { start: { line: 375, column: 6 }, end: { line: 375, column: 45 } },
                '100': { start: { line: 377, column: 4 }, end: { line: 379, column: 5 } },
                '101': { start: { line: 378, column: 6 }, end: { line: 378, column: 31 } },
                '102': { start: { line: 380, column: 4 }, end: { line: 382, column: 5 } },
                '103': { start: { line: 381, column: 6 }, end: { line: 381, column: 35 } },
                '104': { start: { line: 385, column: 2 }, end: { line: 385, column: 30 } },
                '105': { start: { line: 401, column: 0 }, end: { line: 443, column: 2 } },
                '106': { start: { line: 403, column: 13 }, end: { line: 403, column: 67 } },
                '107': { start: { line: 404, column: 14 }, end: { line: 404, column: 31 } },
                '108': { start: { line: 406, column: 2 }, end: { line: 411, column: 3 } },
                '109': { start: { line: 407, column: 4 }, end: { line: 407, column: 26 } },
                '110': { start: { line: 410, column: 4 }, end: { line: 410, column: 56 } },
                '111': { start: { line: 413, column: 2 }, end: { line: 413, column: 18 } },
                '112': { start: { line: 415, column: 2 }, end: { line: 427, column: 3 } },
                '113': { start: { line: 416, column: 4 }, end: { line: 426, column: 5 } },
                '114': { start: { line: 417, column: 6 }, end: { line: 417, column: 31 } },
                '115': { start: { line: 418, column: 11 }, end: { line: 426, column: 5 } },
                '116': { start: { line: 419, column: 6 }, end: { line: 419, column: 31 } },
                '117': { start: { line: 420, column: 11 }, end: { line: 426, column: 5 } },
                '118': { start: { line: 421, column: 6 }, end: { line: 421, column: 70 } },
                '119': { start: { line: 422, column: 11 }, end: { line: 426, column: 5 } },
                '120': { start: { line: 423, column: 6 }, end: { line: 423, column: 57 } },
                '121': { start: { line: 424, column: 11 }, end: { line: 426, column: 5 } },
                '122': { start: { line: 425, column: 6 }, end: { line: 425, column: 22 } },
                '123': { start: { line: 430, column: 2 }, end: { line: 432, column: 3 } },
                '124': { start: { line: 431, column: 4 }, end: { line: 431, column: 17 } },
                '125': { start: { line: 434, column: 2 }, end: { line: 440, column: 3 } },
                '126': { start: { line: 436, column: 4 }, end: { line: 438, column: 5 } },
                '127': { start: { line: 437, column: 6 }, end: { line: 437, column: 48 } },
                '128': { start: { line: 439, column: 4 }, end: { line: 439, column: 15 } },
                '129': { start: { line: 442, column: 2 }, end: { line: 442, column: 14 } },
                '130': { start: { line: 445, column: 0 }, end: { line: 447, column: 2 } },
                '131': { start: { line: 446, column: 2 }, end: { line: 446, column: 50 } },
                '132': { start: { line: 449, column: 0 }, end: { line: 451, column: 2 } },
                '133': { start: { line: 450, column: 2 }, end: { line: 450, column: 52 } },
                '134': { start: { line: 453, column: 0 }, end: { line: 455, column: 2 } },
                '135': { start: { line: 454, column: 2 }, end: { line: 454, column: 54 } },
                '136': { start: { line: 457, column: 0 }, end: { line: 461, column: 2 } },
                '137': { start: { line: 458, column: 2 }, end: { line: 460, column: 4 } },
                '138': { start: { line: 463, column: 0 }, end: { line: 492, column: 2 } },
                '139': { start: { line: 464, column: 19 }, end: { line: 464, column: 37 } },
                '140': { start: { line: 466, column: 2 }, end: { line: 468, column: 3 } },
                '141': { start: { line: 467, column: 4 }, end: { line: 467, column: 48 } },
                '142': { start: { line: 470, column: 2 }, end: { line: 477, column: 3 } },
                '143': { start: { line: 472, column: 6 }, end: { line: 472, column: 25 } },
                '144': { start: { line: 473, column: 6 }, end: { line: 473, column: 12 } },
                '145': { start: { line: 475, column: 6 }, end: { line: 475, column: 21 } },
                '146': { start: { line: 476, column: 6 }, end: { line: 476, column: 12 } },
                '147': { start: { line: 479, column: 2 }, end: { line: 489, column: 3 } },
                '148': { start: { line: 481, column: 6 }, end: { line: 481, column: 38 } },
                '149': { start: { line: 482, column: 6 }, end: { line: 482, column: 12 } },
                '150': { start: { line: 484, column: 6 }, end: { line: 484, column: 42 } },
                '151': { start: { line: 485, column: 6 }, end: { line: 485, column: 12 } },
                '152': { start: { line: 487, column: 6 }, end: { line: 487, column: 39 } },
                '153': { start: { line: 488, column: 6 }, end: { line: 488, column: 12 } },
                '154': { start: { line: 491, column: 2 }, end: { line: 491, column: 18 } },
                '155': { start: { line: 497, column: 15 }, end: { line: 500, column: 4 } },
                '156': { start: { line: 503, column: 10 }, end: { line: 503, column: 35 } },
                '157': { start: { line: 504, column: 8 }, end: { line: 504, column: 39 } },
                '158': { start: { line: 505, column: 10 }, end: { line: 505, column: 12 } },
                '159': { start: { line: 507, column: 2 }, end: { line: 509, column: 3 } },
                '160': { start: { line: 507, column: 15 }, end: { line: 507, column: 16 } },
                '161': { start: { line: 508, column: 4 }, end: { line: 508, column: 37 } },
                '162': { start: { line: 511, column: 2 }, end: { line: 513, column: 3 } },
                '163': { start: { line: 512, column: 4 }, end: { line: 512, column: 42 } },
                '164': { start: { line: 515, column: 2 }, end: { line: 515, column: 13 } },
                '165': { start: { line: 519, column: 12 }, end: { line: 519, column: 13 } },
                '166': { start: { line: 520, column: 2 }, end: { line: 526, column: 3 } },
                '167': { start: { line: 520, column: 15 }, end: { line: 520, column: 29 } },
                '168': { start: { line: 521, column: 4 }, end: { line: 525, column: 5 } },
                '169': { start: { line: 523, column: 6 }, end: { line: 523, column: 36 } },
                '170': { start: { line: 524, column: 6 }, end: { line: 524, column: 12 } },
                '171': { start: { line: 527, column: 2 }, end: { line: 527, column: 13 } },
                '172': { start: { line: 531, column: 16 }, end: { line: 531, column: 18 } },
                '173': { start: { line: 533, column: 2 }, end: { line: 541, column: 3 } },
                '174': { start: { line: 533, column: 15 }, end: { line: 533, column: 16 } },
                '175': { start: { line: 534, column: 4 }, end: { line: 539, column: 5 } },
                '176': { start: { line: 535, column: 6 }, end: { line: 537, column: 7 } },
                '177': { start: { line: 536, column: 8 }, end: { line: 536, column: 28 } },
                '178': { start: { line: 538, column: 6 }, end: { line: 538, column: 19 } },
                '179': { start: { line: 540, column: 4 }, end: { line: 540, column: 36 } },
                '180': { start: { line: 542, column: 2 }, end: { line: 542, column: 22 } },
                '181': { start: { line: 544, column: 2 }, end: { line: 544, column: 15 } },
                '182': { start: { line: 548, column: 14 }, end: { line: 548, column: 24 } },
                '183': { start: { line: 549, column: 2 }, end: { line: 556, column: 3 } },
                '184': { start: { line: 551, column: 4 }, end: { line: 551, column: 27 } },
                '185': { start: { line: 552, column: 9 }, end: { line: 556, column: 3 } },
                '186': { start: { line: 553, column: 4 }, end: { line: 553, column: 59 } },
                '187': { start: { line: 554, column: 9 }, end: { line: 556, column: 3 } },
                '188': { start: { line: 555, column: 4 }, end: { line: 555, column: 43 } },
                '189': { start: { line: 558, column: 2 }, end: { line: 558, column: 13 } },
                '190': { start: { line: 562, column: 2 }, end: { line: 570, column: 3 } },
                '191': { start: { line: 563, column: 4 }, end: { line: 563, column: 23 } },
                '192': { start: { line: 565, column: 4 }, end: { line: 569, column: 5 } },
                '193': { start: { line: 566, column: 6 }, end: { line: 568, column: 7 } },
                '194': { start: { line: 567, column: 8 }, end: { line: 567, column: 37 } },
                '195': { start: { line: 571, column: 2 }, end: { line: 571, column: 17 } },
                '196': { start: { line: 577, column: 12 }, end: { line: 577, column: 20 } },
                '197': { start: { line: 578, column: 2 }, end: { line: 578, column: 38 } },
                '198': { start: { line: 582, column: 2 }, end: { line: 584, column: 3 } },
                '199': { start: { line: 583, column: 4 }, end: { line: 583, column: 39 } },
                '200': { start: { line: 586, column: 2 }, end: { line: 589, column: 3 } },
                '201': { start: { line: 587, column: 4 }, end: { line: 587, column: 29 } },
                '202': { start: { line: 588, column: 4 }, end: { line: 588, column: 29 } },
                '203': { start: { line: 591, column: 13 }, end: { line: 591, column: 32 } },
                '204': { start: { line: 592, column: 9 }, end: { line: 592, column: 28 } },
                '205': { start: { line: 593, column: 2 }, end: { line: 593, column: 19 } },
                '206': { start: { line: 594, column: 2 }, end: { line: 594, column: 19 } },
                '207': { start: { line: 595, column: 2 }, end: { line: 595, column: 19 } },
                '208': { start: { line: 596, column: 2 }, end: { line: 596, column: 19 } },
                '209': { start: { line: 598, column: 14 }, end: { line: 598, column: 39 } },
                '210': { start: { line: 599, column: 11 }, end: { line: 599, column: 47 } },
                '211': { start: { line: 600, column: 11 }, end: { line: 600, column: 47 } },
                '212': { start: { line: 601, column: 12 }, end: { line: 601, column: 42 } },
                '213': { start: { line: 603, column: 2 }, end: { line: 603, column: 32 } },
                '214': { start: { line: 607, column: 2 }, end: { line: 607, column: 71 } },
                '215': { start: { line: 613, column: 13 }, end: { line: 613, column: 18 } },
                '216': { start: { line: 614, column: 14 }, end: { line: 614, column: 29 } },
                '217': { start: { line: 615, column: 14 }, end: { line: 615, column: 29 } },
                '218': { start: { line: 616, column: 13 }, end: { line: 616, column: 18 } },
                '219': { start: { line: 617, column: 13 }, end: { line: 617, column: 19 } },
                '220': { start: { line: 618, column: 12 }, end: { line: 618, column: 75 } },
                '221': { start: { line: 619, column: 12 }, end: { line: 619, column: 75 } },
                '222': { start: { line: 620, column: 13 }, end: { line: 620, column: 67 } },
                '223': { start: { line: 621, column: 13 }, end: { line: 621, column: 67 } },
                '224': { start: { line: 622, column: 13 }, end: { line: 622, column: 67 } },
                '225': { start: { line: 623, column: 13 }, end: { line: 623, column: 67 } },
                '226': { start: { line: 624, column: 13 }, end: { line: 624, column: 31 } },
                '227': { start: { line: 625, column: 13 }, end: { line: 625, column: 31 } },
                '228': { start: { line: 626, column: 13 }, end: { line: 626, column: 31 } },
                '229': { start: { line: 627, column: 13 }, end: { line: 627, column: 31 } },
                '230': { start: { line: 628, column: 14 }, end: { line: 628, column: 63 } },
                '231': { start: { line: 630, column: 2 }, end: { line: 632, column: 3 } },
                '232': { start: { line: 631, column: 4 }, end: { line: 631, column: 17 } },
                '233': { start: { line: 634, column: 2 }, end: { line: 642, column: 4 } },
                '234': { start: { line: 656, column: 2 }, end: { line: 668, column: 8 } },
                '235': { start: { line: 672, column: 2 }, end: { line: 672, column: 26 } },
                '236': { start: { line: 677, column: 11 }, end: { line: 677, column: 13 } },
                '237': { start: { line: 678, column: 19 }, end: { line: 678, column: 21 } },
                '238': { start: { line: 680, column: 12 }, end: { line: 680, column: 13 } },
                '239': { start: { line: 681, column: 2 }, end: { line: 709, column: 3 } },
                '240': { start: { line: 681, column: 15 }, end: { line: 681, column: 16 } },
                '241': { start: { line: 681, column: 23 }, end: { line: 681, column: 34 } },
                '242': { start: { line: 682, column: 4 }, end: { line: 682, column: 16 } },
                '243': { start: { line: 683, column: 4 }, end: { line: 707, column: 5 } },
                '244': { start: { line: 684, column: 6 }, end: { line: 684, column: 16 } },
                '245': { start: { line: 685, column: 6 }, end: { line: 685, column: 16 } },
                '246': { start: { line: 687, column: 6 }, end: { line: 687, column: 76 } },
                '247': { start: { line: 688, column: 6 }, end: { line: 703, column: 7 } },
                '248': { start: { line: 689, column: 8 }, end: { line: 702, column: 9 } },
                '249': { start: { line: 690, column: 10 }, end: { line: 700, column: 12 } },
                '250': { start: { line: 701, column: 10 }, end: { line: 701, column: 64 } },
                '251': { start: { line: 704, column: 6 }, end: { line: 704, column: 15 } },
                '252': { start: { line: 705, column: 6 }, end: { line: 705, column: 16 } },
                '253': { start: { line: 706, column: 6 }, end: { line: 706, column: 16 } },
                '254': { start: { line: 708, column: 4 }, end: { line: 708, column: 24 } },
                '255': { start: { line: 710, column: 2 }, end: { line: 710, column: 20 } },
                '256': { start: { line: 712, column: 2 }, end: { line: 714, column: 69 } },
                '257': { start: { line: 716, column: 2 }, end: { line: 718, column: 3 } },
                '258': { start: { line: 717, column: 4 }, end: { line: 717, column: 59 } },
                '259': { start: { line: 720, column: 2 }, end: { line: 720, column: 15 } },
                '260': { start: { line: 724, column: 12 }, end: { line: 724, column: 14 } },
                '261': { start: { line: 725, column: 8 }, end: { line: 725, column: 9 } },
                '262': { start: { line: 726, column: 8 }, end: { line: 726, column: 9 } },
                '263': { start: { line: 727, column: 9 }, end: { line: 727, column: 10 } },
                '264': { start: { line: 728, column: 9 }, end: { line: 728, column: 10 } },
                '265': { start: { line: 729, column: 12 }, end: { line: 729, column: 13 } },
                '266': { start: { line: 730, column: 2 }, end: { line: 733, column: 3 } },
                '267': { start: { line: 732, column: 4 }, end: { line: 732, column: 15 } },
                '268': { start: { line: 734, column: 2 }, end: { line: 741, column: 3 } },
                '269': { start: { line: 735, column: 4 }, end: { line: 735, column: 25 } },
                '270': { start: { line: 736, column: 4 }, end: { line: 736, column: 25 } },
                '271': { start: { line: 737, column: 4 }, end: { line: 737, column: 11 } },
                '272': { start: { line: 738, column: 4 }, end: { line: 738, column: 11 } },
                '273': { start: { line: 739, column: 4 }, end: { line: 739, column: 12 } },
                '274': { start: { line: 740, column: 4 }, end: { line: 740, column: 25 } },
                '275': { start: { line: 746, column: 4 }, end: { line: 749, column: 41 } },
                '276': { start: { line: 751, column: 2 }, end: { line: 819, column: 3 } },
                '277': { start: { line: 751, column: 22 }, end: { line: 751, column: 27 } },
                '278': { start: { line: 751, column: 34 }, end: { line: 751, column: 50 } },
                '279': { start: { line: 752, column: 4 }, end: { line: 752, column: 23 } },
                '280': { start: { line: 753, column: 4 }, end: { line: 753, column: 22 } },
                '281': { start: { line: 754, column: 4 }, end: { line: 799, column: 5 } },
                '282': { start: { line: 755, column: 6 }, end: { line: 755, column: 54 } },
                '283': { start: { line: 756, column: 6 }, end: { line: 789, column: 7 } },
                '284': { start: { line: 758, column: 10 }, end: { line: 758, column: 23 } },
                '285': { start: { line: 759, column: 10 }, end: { line: 759, column: 23 } },
                '286': { start: { line: 760, column: 10 }, end: { line: 760, column: 23 } },
                '287': { start: { line: 761, column: 10 }, end: { line: 761, column: 23 } },
                '288': { start: { line: 762, column: 10 }, end: { line: 762, column: 23 } },
                '289': { start: { line: 763, column: 10 }, end: { line: 763, column: 30 } },
                '290': { start: { line: 764, column: 10 }, end: { line: 764, column: 30 } },
                '291': { start: { line: 765, column: 10 }, end: { line: 765, column: 16 } },
                '292': { start: { line: 767, column: 10 }, end: { line: 767, column: 28 } },
                '293': { start: { line: 768, column: 10 }, end: { line: 768, column: 16 } },
                '294': { start: { line: 770, column: 10 }, end: { line: 770, column: 28 } },
                '295': { start: { line: 771, column: 10 }, end: { line: 771, column: 16 } },
                '296': { start: { line: 773, column: 10 }, end: { line: 773, column: 44 } },
                '297': { start: { line: 774, column: 10 }, end: { line: 777, column: 11 } },
                '298': { start: { line: 774, column: 23 }, end: { line: 774, column: 24 } },
                '299': { start: { line: 774, column: 31 }, end: { line: 774, column: 42 } },
                '300': { start: { line: 775, column: 12 }, end: { line: 775, column: 35 } },
                '301': { start: { line: 776, column: 12 }, end: { line: 776, column: 37 } },
                '302': { start: { line: 778, column: 10 }, end: { line: 778, column: 20 } },
                '303': { start: { line: 779, column: 10 }, end: { line: 779, column: 57 } },
                '304': { start: { line: 780, column: 10 }, end: { line: 780, column: 16 } },
                '305': { start: { line: 782, column: 10 }, end: { line: 782, column: 26 } },
                '306': { start: { line: 783, column: 10 }, end: { line: 783, column: 26 } },
                '307': { start: { line: 784, column: 10 }, end: { line: 784, column: 16 } },
                '308': { start: { line: 786, column: 10 }, end: { line: 788, column: 11 } },
                '309': { start: { line: 786, column: 23 }, end: { line: 786, column: 24 } },
                '310': { start: { line: 786, column: 31 }, end: { line: 786, column: 40 } },
                '311': { start: { line: 787, column: 12 }, end: { line: 787, column: 44 } },
                '312': { start: { line: 790, column: 11 }, end: { line: 799, column: 5 } },
                '313': { start: { line: 791, column: 6 }, end: { line: 791, column: 40 } },
                '314': { start: { line: 792, column: 6 }, end: { line: 792, column: 16 } },
                '315': { start: { line: 793, column: 6 }, end: { line: 793, column: 53 } },
                '316': { start: { line: 794, column: 6 }, end: { line: 794, column: 37 } },
                '317': { start: { line: 796, column: 6 }, end: { line: 798, column: 7 } },
                '318': { start: { line: 796, column: 19 }, end: { line: 796, column: 20 } },
                '319': { start: { line: 796, column: 27 }, end: { line: 796, column: 36 } },
                '320': { start: { line: 797, column: 8 }, end: { line: 797, column: 21 } },
                '321': { start: { line: 800, column: 4 }, end: { line: 818, column: 5 } },
                '322': { start: { line: 802, column: 8 }, end: { line: 802, column: 15 } },
                '323': { start: { line: 803, column: 8 }, end: { line: 803, column: 15 } },
                '324': { start: { line: 804, column: 8 }, end: { line: 804, column: 14 } },
                '325': { start: { line: 806, column: 8 }, end: { line: 806, column: 17 } },
                '326': { start: { line: 807, column: 8 }, end: { line: 807, column: 14 } },
                '327': { start: { line: 809, column: 8 }, end: { line: 809, column: 17 } },
                '328': { start: { line: 810, column: 8 }, end: { line: 810, column: 14 } },
                '329': { start: { line: 812, column: 8 }, end: { line: 812, column: 29 } },
                '330': { start: { line: 813, column: 8 }, end: { line: 813, column: 29 } },
                '331': { start: { line: 814, column: 8 }, end: { line: 814, column: 14 } },
                '332': { start: { line: 816, column: 8 }, end: { line: 816, column: 28 } },
                '333': { start: { line: 817, column: 8 }, end: { line: 817, column: 28 } },
                '334': { start: { line: 820, column: 2 }, end: { line: 820, column: 13 } },
                '335': { start: { line: 824, column: 12 }, end: { line: 824, column: 32 } },
                '336': { start: { line: 825, column: 9 }, end: { line: 825, column: 39 } },
                '337': { start: { line: 826, column: 16 }, end: { line: 826, column: 76 } },
                '338': { start: { line: 827, column: 17 }, end: { line: 827, column: 77 } },
                '339': { start: { line: 828, column: 17 }, end: { line: 828, column: 19 } },
                '340': { start: { line: 829, column: 17 }, end: { line: 829, column: 19 } },
                '341': { start: { line: 832, column: 22 }, end: { line: 891, column: 5 } },
                '342': { start: { line: 835, column: 17 }, end: { line: 835, column: 31 } },
                '343': { start: { line: 836, column: 6 }, end: { line: 838, column: 7 } },
                '344': { start: { line: 837, column: 8 }, end: { line: 837, column: 51 } },
                '345': { start: { line: 839, column: 6 }, end: { line: 841, column: 7 } },
                '346': { start: { line: 840, column: 8 }, end: { line: 840, column: 27 } },
                '347': { start: { line: 842, column: 6 }, end: { line: 889, column: 7 } },
                '348': { start: { line: 844, column: 10 }, end: { line: 844, column: 24 } },
                '349': { start: { line: 845, column: 10 }, end: { line: 845, column: 24 } },
                '350': { start: { line: 846, column: 10 }, end: { line: 846, column: 16 } },
                '351': { start: { line: 848, column: 10 }, end: { line: 848, column: 78 } },
                '352': { start: { line: 849, column: 10 }, end: { line: 849, column: 16 } },
                '353': { start: { line: 851, column: 10 }, end: { line: 857, column: 11 } },
                '354': { start: { line: 852, column: 12 }, end: { line: 852, column: 32 } },
                '355': { start: { line: 853, column: 12 }, end: { line: 853, column: 32 } },
                '356': { start: { line: 855, column: 12 }, end: { line: 855, column: 21 } },
                '357': { start: { line: 856, column: 12 }, end: { line: 856, column: 21 } },
                '358': { start: { line: 858, column: 10 }, end: { line: 858, column: 53 } },
                '359': { start: { line: 859, column: 10 }, end: { line: 859, column: 16 } },
                '360': { start: { line: 861, column: 10 }, end: { line: 867, column: 11 } },
                '361': { start: { line: 862, column: 12 }, end: { line: 862, column: 34 } },
                '362': { start: { line: 863, column: 12 }, end: { line: 863, column: 34 } },
                '363': { start: { line: 865, column: 12 }, end: { line: 865, column: 23 } },
                '364': { start: { line: 866, column: 12 }, end: { line: 866, column: 23 } },
                '365': { start: { line: 868, column: 10 }, end: { line: 868, column: 75 } },
                '366': { start: { line: 869, column: 10 }, end: { line: 869, column: 16 } },
                '367': { start: { line: 871, column: 10 }, end: { line: 871, column: 25 } },
                '368': { start: { line: 872, column: 10 }, end: { line: 872, column: 25 } },
                '369': { start: { line: 873, column: 10 }, end: { line: 875, column: 12 } },
                '370': { start: { line: 876, column: 10 }, end: { line: 876, column: 16 } },
                '371': { start: { line: 878, column: 10 }, end: { line: 878, column: 63 } },
                '372': { start: { line: 879, column: 10 }, end: { line: 879, column: 16 } },
                '373': { start: { line: 881, column: 10 }, end: { line: 881, column: 59 } },
                '374': { start: { line: 882, column: 10 }, end: { line: 882, column: 16 } },
                '375': { start: { line: 884, column: 10 }, end: { line: 884, column: 59 } },
                '376': { start: { line: 885, column: 10 }, end: { line: 885, column: 16 } },
                '377': { start: { line: 887, column: 10 }, end: { line: 887, column: 55 } },
                '378': { start: { line: 888, column: 10 }, end: { line: 888, column: 16 } },
                '379': { start: { line: 890, column: 6 }, end: { line: 890, column: 18 } },
                '380': { start: { line: 892, column: 13 }, end: { line: 906, column: 5 } },
                '381': { start: { line: 893, column: 6 }, end: { line: 905, column: 7 } },
                '382': { start: { line: 894, column: 8 }, end: { line: 894, column: 22 } },
                '383': { start: { line: 895, column: 19 }, end: { line: 895, column: 24 } },
                '384': { start: { line: 896, column: 8 }, end: { line: 902, column: 9 } },
                '385': { start: { line: 897, column: 10 }, end: { line: 897, column: 26 } },
                '386': { start: { line: 898, column: 10 }, end: { line: 900, column: 11 } },
                '387': { start: { line: 899, column: 12 }, end: { line: 899, column: 28 } },
                '388': { start: { line: 901, column: 10 }, end: { line: 901, column: 59 } },
                '389': { start: { line: 903, column: 8 }, end: { line: 903, column: 24 } },
                '390': { start: { line: 904, column: 8 }, end: { line: 904, column: 56 } },
                '391': { start: { line: 907, column: 11 }, end: { line: 916, column: 5 } },
                '392': { start: { line: 908, column: 6 }, end: { line: 915, column: 7 } },
                '393': { start: { line: 909, column: 8 }, end: { line: 909, column: 46 } },
                '394': { start: { line: 910, column: 8 }, end: { line: 910, column: 18 } },
                '395': { start: { line: 911, column: 8 }, end: { line: 911, column: 18 } },
                '396': { start: { line: 912, column: 8 }, end: { line: 912, column: 27 } },
                '397': { start: { line: 913, column: 8 }, end: { line: 913, column: 27 } },
                '398': { start: { line: 914, column: 8 }, end: { line: 914, column: 56 } },
                '399': { start: { line: 918, column: 15 }, end: { line: 918, column: 17 } },
                '400': { start: { line: 919, column: 13 }, end: { line: 919, column: 15 } },
                '401': { start: { line: 921, column: 2 }, end: { line: 921, column: 50 } },
                '402': { start: { line: 922, column: 2 }, end: { line: 974, column: 3 } },
                '403': { start: { line: 922, column: 15 }, end: { line: 922, column: 16 } },
                '404': { start: { line: 923, column: 4 }, end: { line: 925, column: 5 } },
                '405': { start: { line: 924, column: 6 }, end: { line: 924, column: 23 } },
                '406': { start: { line: 927, column: 4 }, end: { line: 932, column: 5 } },
                '407': { start: { line: 928, column: 6 }, end: { line: 928, column: 25 } },
                '408': { start: { line: 929, column: 6 }, end: { line: 931, column: 7 } },
                '409': { start: { line: 930, column: 8 }, end: { line: 930, column: 29 } },
                '410': { start: { line: 933, column: 4 }, end: { line: 933, column: 42 } },
                '411': { start: { line: 935, column: 4 }, end: { line: 937, column: 5 } },
                '412': { start: { line: 936, column: 6 }, end: { line: 936, column: 22 } },
                '413': { start: { line: 939, column: 4 }, end: { line: 939, column: 17 } },
                '414': { start: { line: 941, column: 4 }, end: { line: 959, column: 5 } },
                '415': { start: { line: 943, column: 6 }, end: { line: 945, column: 7 } },
                '416': { start: { line: 944, column: 8 }, end: { line: 944, column: 26 } },
                '417': { start: { line: 946, column: 6 }, end: { line: 951, column: 7 } },
                '418': { start: { line: 947, column: 8 }, end: { line: 947, column: 27 } },
                '419': { start: { line: 948, column: 8 }, end: { line: 950, column: 9 } },
                '420': { start: { line: 949, column: 10 }, end: { line: 949, column: 31 } },
                '421': { start: { line: 952, column: 6 }, end: { line: 952, column: 47 } },
                '422': { start: { line: 954, column: 6 }, end: { line: 956, column: 7 } },
                '423': { start: { line: 955, column: 8 }, end: { line: 955, column: 24 } },
                '424': { start: { line: 958, column: 6 }, end: { line: 958, column: 20 } },
                '425': { start: { line: 960, column: 4 }, end: { line: 960, column: 34 } },
                '426': { start: { line: 961, column: 4 }, end: { line: 961, column: 34 } },
                '427': { start: { line: 962, column: 16 }, end: { line: 962, column: 20 } },
                '428': { start: { line: 963, column: 13 }, end: { line: 963, column: 24 } },
                '429': { start: { line: 964, column: 15 }, end: { line: 964, column: 25 } },
                '430': { start: { line: 965, column: 16 }, end: { line: 965, column: 33 } },
                '431': { start: { line: 966, column: 4 }, end: { line: 966, column: 30 } },
                '432': { start: { line: 967, column: 4 }, end: { line: 967, column: 30 } },
                '433': { start: { line: 968, column: 4 }, end: { line: 968, column: 54 } },
                '434': { start: { line: 969, column: 4 }, end: { line: 969, column: 54 } },
                '435': { start: { line: 970, column: 4 }, end: { line: 970, column: 66 } },
                '436': { start: { line: 971, column: 4 }, end: { line: 971, column: 66 } },
                '437': { start: { line: 972, column: 4 }, end: { line: 972, column: 39 } },
                '438': { start: { line: 973, column: 4 }, end: { line: 973, column: 39 } },
                '439': { start: { line: 976, column: 2 }, end: { line: 976, column: 26 } },
                '440': { start: { line: 982, column: 13 }, end: { line: 982, column: 20 } },
                '441': { start: { line: 984, column: 15 }, end: { line: 984, column: 29 } },
                '442': { start: { line: 989, column: 14 }, end: { line: 989, column: 38 } },
                '443': { start: { line: 990, column: 12 }, end: { line: 990, column: 14 } },
                '444': { start: { line: 993, column: 17 }, end: { line: 997, column: 3 } },
                '445': { start: { line: 994, column: 14 }, end: { line: 994, column: 51 } },
                '446': { start: { line: 995, column: 10 }, end: { line: 995, column: 47 } },
                '447': { start: { line: 996, column: 4 }, end: { line: 996, column: 26 } },
                '448': { start: { line: 999, column: 2 }, end: { line: 1050, column: 3 } },
                '449': {
                  start: { line: 1000, column: 4 },
                  end: { line: 1000, column: 30 }
                },
                '450': {
                  start: { line: 1001, column: 4 },
                  end: { line: 1001, column: 14 }
                },
                '451': {
                  start: { line: 1002, column: 4 },
                  end: { line: 1002, column: 14 }
                },
                '452': {
                  start: { line: 1003, column: 4 },
                  end: { line: 1003, column: 30 }
                },
                '453': {
                  start: { line: 1004, column: 4 },
                  end: { line: 1004, column: 14 }
                },
                '454': {
                  start: { line: 1005, column: 4 },
                  end: { line: 1005, column: 14 }
                },
                '455': {
                  start: { line: 1006, column: 14 },
                  end: { line: 1006, column: 27 }
                },
                '456': {
                  start: { line: 1007, column: 14 },
                  end: { line: 1007, column: 27 }
                },
                '457': {
                  start: { line: 1008, column: 12 },
                  end: { line: 1008, column: 49 }
                },
                '458': { start: { line: 1009, column: 4 }, end: { line: 1013, column: 5 } },
                '459': {
                  start: { line: 1010, column: 6 },
                  end: { line: 1010, column: 23 }
                },
                '460': {
                  start: { line: 1011, column: 6 },
                  end: { line: 1011, column: 18 }
                },
                '461': {
                  start: { line: 1012, column: 6 },
                  end: { line: 1012, column: 18 }
                },
                '462': {
                  start: { line: 1014, column: 16 },
                  end: { line: 1014, column: 23 }
                },
                '463': {
                  start: { line: 1015, column: 12 },
                  end: { line: 1015, column: 19 }
                },
                '464': { start: { line: 1017, column: 6 }, end: { line: 1022, column: 7 } },
                '465': {
                  start: { line: 1024, column: 4 },
                  end: { line: 1024, column: 41 }
                },
                '466': {
                  start: { line: 1025, column: 4 },
                  end: { line: 1025, column: 42 }
                },
                '467': {
                  start: { line: 1026, column: 4 },
                  end: { line: 1026, column: 48 }
                },
                '468': {
                  start: { line: 1027, column: 4 },
                  end: { line: 1027, column: 48 }
                },
                '469': {
                  start: { line: 1029, column: 4 },
                  end: { line: 1029, column: 32 }
                },
                '470': {
                  start: { line: 1030, column: 4 },
                  end: { line: 1030, column: 32 }
                },
                '471': { start: { line: 1032, column: 4 }, end: { line: 1034, column: 5 } },
                '472': {
                  start: { line: 1033, column: 6 },
                  end: { line: 1033, column: 23 }
                },
                '473': { start: { line: 1035, column: 4 }, end: { line: 1037, column: 5 } },
                '474': {
                  start: { line: 1036, column: 6 },
                  end: { line: 1036, column: 23 }
                },
                '475': { start: { line: 1039, column: 4 }, end: { line: 1041, column: 5 } },
                '476': {
                  start: { line: 1040, column: 6 },
                  end: { line: 1040, column: 23 }
                },
                '477': { start: { line: 1042, column: 4 }, end: { line: 1044, column: 5 } },
                '478': {
                  start: { line: 1043, column: 6 },
                  end: { line: 1043, column: 23 }
                },
                '479': {
                  start: { line: 1046, column: 4 },
                  end: { line: 1046, column: 22 }
                },
                '480': {
                  start: { line: 1047, column: 4 },
                  end: { line: 1047, column: 22 }
                },
                '481': {
                  start: { line: 1048, column: 4 },
                  end: { line: 1048, column: 22 }
                },
                '482': {
                  start: { line: 1049, column: 4 },
                  end: { line: 1049, column: 22 }
                },
                '483': {
                  start: { line: 1051, column: 11 },
                  end: { line: 1051, column: 18 }
                },
                '484': { start: { line: 1052, column: 2 }, end: { line: 1065, column: 3 } },
                '485': {
                  start: { line: 1053, column: 18 },
                  end: { line: 1053, column: 20 }
                },
                '486': {
                  start: { line: 1054, column: 14 },
                  end: { line: 1054, column: 16 }
                },
                '487': {
                  start: { line: 1055, column: 14 },
                  end: { line: 1055, column: 16 }
                },
                '488': {
                  start: { line: 1056, column: 4 },
                  end: { line: 1056, column: 54 }
                },
                '489': {
                  start: { line: 1057, column: 4 },
                  end: { line: 1057, column: 32 }
                },
                '490': {
                  start: { line: 1058, column: 4 },
                  end: { line: 1058, column: 32 }
                },
                '491': { start: { line: 1059, column: 4 }, end: { line: 1064, column: 7 } },
                '492': {
                  start: { line: 1066, column: 2 },
                  end: { line: 1066, column: 15 }
                },
                '493': {
                  start: { line: 1067, column: 13 },
                  end: { line: 1067, column: 25 }
                },
                '494': {
                  start: { line: 1068, column: 9 },
                  end: { line: 1068, column: 21 }
                },
                '495': {
                  start: { line: 1069, column: 9 },
                  end: { line: 1069, column: 21 }
                },
                '496': {
                  start: { line: 1070, column: 9 },
                  end: { line: 1070, column: 21 }
                },
                '497': {
                  start: { line: 1071, column: 8 },
                  end: { line: 1071, column: 24 }
                },
                '498': {
                  start: { line: 1072, column: 9 },
                  end: { line: 1072, column: 23 }
                },
                '499': {
                  start: { line: 1073, column: 9 },
                  end: { line: 1073, column: 23 }
                },
                '500': {
                  start: { line: 1074, column: 9 },
                  end: { line: 1074, column: 17 }
                },
                '501': {
                  start: { line: 1075, column: 9 },
                  end: { line: 1075, column: 37 }
                },
                '502': {
                  start: { line: 1076, column: 9 },
                  end: { line: 1076, column: 37 }
                },
                '503': {
                  start: { line: 1077, column: 9 },
                  end: { line: 1077, column: 17 }
                },
                '504': {
                  start: { line: 1078, column: 2 },
                  end: { line: 1078, column: 28 }
                },
                '505': {
                  start: { line: 1079, column: 2 },
                  end: { line: 1079, column: 28 }
                },
                '506': { start: { line: 1080, column: 2 }, end: { line: 1095, column: 3 } },
                '507': {
                  start: { line: 1081, column: 4 },
                  end: { line: 1081, column: 36 }
                },
                '508': {
                  start: { line: 1083, column: 4 },
                  end: { line: 1086, column: 18 }
                },
                '509': {
                  start: { line: 1087, column: 19 },
                  end: { line: 1087, column: 21 }
                },
                '510': { start: { line: 1088, column: 4 }, end: { line: 1093, column: 5 } },
                '511': {
                  start: { line: 1088, column: 17 },
                  end: { line: 1088, column: 18 }
                },
                '512': {
                  start: { line: 1088, column: 25 },
                  end: { line: 1088, column: 35 }
                },
                '513': {
                  start: { line: 1089, column: 6 },
                  end: { line: 1092, column: 46 }
                },
                '514': {
                  start: { line: 1094, column: 4 },
                  end: { line: 1094, column: 18 }
                },
                '515': {
                  start: { line: 1100, column: 12 },
                  end: { line: 1100, column: 14 }
                },
                '516': { start: { line: 1101, column: 2 }, end: { line: 1160, column: 3 } },
                '517': {
                  start: { line: 1101, column: 15 },
                  end: { line: 1101, column: 16 }
                },
                '518': {
                  start: { line: 1101, column: 25 },
                  end: { line: 1101, column: 35 }
                },
                '519': {
                  start: { line: 1102, column: 14 },
                  end: { line: 1119, column: 5 }
                },
                '520': { start: { line: 1120, column: 4 }, end: { line: 1150, column: 5 } },
                '521': { start: { line: 1121, column: 6 }, end: { line: 1140, column: 7 } },
                '522': {
                  start: { line: 1122, column: 8 },
                  end: { line: 1125, column: 10 }
                },
                '523': {
                  start: { line: 1126, column: 13 },
                  end: { line: 1140, column: 7 }
                },
                '524': {
                  start: { line: 1127, column: 8 },
                  end: { line: 1130, column: 10 }
                },
                '525': {
                  start: { line: 1131, column: 13 },
                  end: { line: 1140, column: 7 }
                },
                '526': {
                  start: { line: 1132, column: 8 },
                  end: { line: 1135, column: 10 }
                },
                '527': {
                  start: { line: 1136, column: 8 },
                  end: { line: 1139, column: 10 }
                },
                '528': { start: { line: 1142, column: 6 }, end: { line: 1149, column: 7 } },
                '529': {
                  start: { line: 1143, column: 8 },
                  end: { line: 1143, column: 20 }
                },
                '530': {
                  start: { line: 1144, column: 13 },
                  end: { line: 1149, column: 7 }
                },
                '531': {
                  start: { line: 1145, column: 8 },
                  end: { line: 1148, column: 10 }
                },
                '532': { start: { line: 1151, column: 4 }, end: { line: 1159, column: 7 } },
                '533': {
                  start: { line: 1162, column: 2 },
                  end: { line: 1162, column: 11 }
                },
                '534': {
                  start: { line: 1166, column: 2 },
                  end: { line: 1166, column: 34 }
                },
                '535': {
                  start: { line: 1170, column: 14 },
                  end: { line: 1170, column: 19 }
                },
                '536': {
                  start: { line: 1171, column: 10 },
                  end: { line: 1171, column: 15 }
                },
                '537': { start: { line: 1172, column: 2 }, end: { line: 1179, column: 4 } },
                '538': { start: { line: 1183, column: 2 }, end: { line: 1185, column: 3 } },
                '539': {
                  start: { line: 1184, column: 4 },
                  end: { line: 1184, column: 10 }
                },
                '540': {
                  start: { line: 1186, column: 2 },
                  end: { line: 1186, column: 32 }
                },
                '541': {
                  start: { line: 1187, column: 13 },
                  end: { line: 1187, column: 18 }
                },
                '542': {
                  start: { line: 1188, column: 12 },
                  end: { line: 1188, column: 14 }
                },
                '543': {
                  start: { line: 1189, column: 18 },
                  end: { line: 1202, column: 3 }
                },
                '544': {
                  start: { line: 1204, column: 12 },
                  end: { line: 1204, column: 13 }
                },
                '545': {
                  start: { line: 1205, column: 18 },
                  end: { line: 1218, column: 3 }
                },
                '546': { start: { line: 1220, column: 2 }, end: { line: 1226, column: 3 } },
                '547': {
                  start: { line: 1220, column: 15 },
                  end: { line: 1220, column: 16 }
                },
                '548': {
                  start: { line: 1221, column: 15 },
                  end: { line: 1221, column: 35 }
                },
                '549': {
                  start: { line: 1222, column: 14 },
                  end: { line: 1222, column: 39 }
                },
                '550': {
                  start: { line: 1223, column: 14 },
                  end: { line: 1223, column: 39 }
                },
                '551': {
                  start: { line: 1224, column: 13 },
                  end: { line: 1224, column: 42 }
                },
                '552': {
                  start: { line: 1225, column: 4 },
                  end: { line: 1225, column: 40 }
                },
                '553': {
                  start: { line: 1227, column: 2 },
                  end: { line: 1227, column: 18 }
                },
                '554': { start: { line: 1231, column: 2 }, end: { line: 1233, column: 3 } },
                '555': {
                  start: { line: 1232, column: 4 },
                  end: { line: 1232, column: 11 }
                },
                '556': {
                  start: { line: 1234, column: 12 },
                  end: { line: 1234, column: 13 }
                },
                '557': {
                  start: { line: 1235, column: 13 },
                  end: { line: 1235, column: 18 }
                },
                '558': {
                  start: { line: 1236, column: 11 },
                  end: { line: 1236, column: 19 }
                },
                '559': {
                  start: { line: 1238, column: 12 },
                  end: { line: 1238, column: 16 }
                },
                '560': {
                  start: { line: 1239, column: 2 },
                  end: { line: 1239, column: 49 }
                },
                '561': { start: { line: 1240, column: 2 }, end: { line: 1244, column: 3 } },
                '562': {
                  start: { line: 1241, column: 4 },
                  end: { line: 1241, column: 14 }
                },
                '563': {
                  start: { line: 1242, column: 4 },
                  end: { line: 1242, column: 35 }
                },
                '564': {
                  start: { line: 1243, column: 4 },
                  end: { line: 1243, column: 51 }
                },
                '565': {
                  start: { line: 1245, column: 2 },
                  end: { line: 1245, column: 12 }
                },
                '566': {
                  start: { line: 1249, column: 13 },
                  end: { line: 1249, column: 47 }
                },
                '567': {
                  start: { line: 1250, column: 9 },
                  end: { line: 1250, column: 43 }
                },
                '568': {
                  start: { line: 1251, column: 2 },
                  end: { line: 1251, column: 34 }
                },
                '569': {
                  start: { line: 1255, column: 13 },
                  end: { line: 1255, column: 15 }
                },
                '570': { start: { line: 1256, column: 2 }, end: { line: 1258, column: 3 } },
                '571': {
                  start: { line: 1256, column: 15 },
                  end: { line: 1256, column: 30 }
                },
                '572': {
                  start: { line: 1257, column: 4 },
                  end: { line: 1257, column: 26 }
                },
                '573': { start: { line: 1259, column: 2 }, end: { line: 1259, column: 14 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 19, column: 10 }, end: { line: 19, column: 11 } },
                  loc: { start: { line: 19, column: 22 }, end: { line: 29, column: 1 } },
                  line: 19
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 74, column: 31 }, end: { line: 74, column: 32 } },
                  loc: { start: { line: 74, column: 75 }, end: { line: 173, column: 1 } },
                  line: 74
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: { start: { line: 114, column: 6 }, end: { line: 114, column: 7 } },
                  loc: { start: { line: 114, column: 36 }, end: { line: 125, column: 7 } },
                  line: 114
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 233, column: 33 },
                    end: { line: 233, column: 34 }
                  },
                  loc: { start: { line: 233, column: 72 }, end: { line: 269, column: 1 } },
                  line: 233
                },
                '4': {
                  name: 'isSpace',
                  decl: {
                    start: { line: 238, column: 11 },
                    end: { line: 238, column: 18 }
                  },
                  loc: { start: { line: 238, column: 22 }, end: { line: 244, column: 3 } },
                  line: 238
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 284, column: 31 },
                    end: { line: 284, column: 32 }
                  },
                  loc: { start: { line: 284, column: 45 }, end: { line: 286, column: 1 } },
                  line: 284
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 298, column: 29 },
                    end: { line: 298, column: 30 }
                  },
                  loc: { start: { line: 298, column: 59 }, end: { line: 305, column: 1 } },
                  line: 298
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 322, column: 33 },
                    end: { line: 322, column: 34 }
                  },
                  loc: { start: { line: 322, column: 63 }, end: { line: 339, column: 1 } },
                  line: 322
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 358, column: 28 },
                    end: { line: 358, column: 29 }
                  },
                  loc: { start: { line: 358, column: 58 }, end: { line: 386, column: 1 } },
                  line: 358
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 401, column: 32 },
                    end: { line: 401, column: 33 }
                  },
                  loc: { start: { line: 401, column: 62 }, end: { line: 443, column: 1 } },
                  line: 401
                },
                '10': {
                  name: '(anonymous_10)',
                  decl: {
                    start: { line: 445, column: 31 },
                    end: { line: 445, column: 32 }
                  },
                  loc: { start: { line: 445, column: 55 }, end: { line: 447, column: 1 } },
                  line: 445
                },
                '11': {
                  name: '(anonymous_11)',
                  decl: {
                    start: { line: 449, column: 32 },
                    end: { line: 449, column: 33 }
                  },
                  loc: { start: { line: 449, column: 51 }, end: { line: 451, column: 1 } },
                  line: 449
                },
                '12': {
                  name: '(anonymous_12)',
                  decl: {
                    start: { line: 453, column: 33 },
                    end: { line: 453, column: 34 }
                  },
                  loc: { start: { line: 453, column: 52 }, end: { line: 455, column: 1 } },
                  line: 453
                },
                '13': {
                  name: '(anonymous_13)',
                  decl: {
                    start: { line: 457, column: 27 },
                    end: { line: 457, column: 28 }
                  },
                  loc: { start: { line: 457, column: 46 }, end: { line: 461, column: 1 } },
                  line: 457
                },
                '14': {
                  name: '(anonymous_14)',
                  decl: {
                    start: { line: 463, column: 37 },
                    end: { line: 463, column: 38 }
                  },
                  loc: { start: { line: 463, column: 79 }, end: { line: 492, column: 1 } },
                  line: 463
                },
                '15': {
                  name: 'pathToPoints',
                  decl: { start: { line: 496, column: 9 }, end: { line: 496, column: 21 } },
                  loc: { start: { line: 496, column: 37 }, end: { line: 516, column: 1 } },
                  line: 496
                },
                '16': {
                  name: 'simplify',
                  decl: { start: { line: 518, column: 9 }, end: { line: 518, column: 17 } },
                  loc: { start: { line: 518, column: 34 }, end: { line: 528, column: 1 } },
                  line: 518
                },
                '17': {
                  name: 'splitPaths',
                  decl: { start: { line: 530, column: 9 }, end: { line: 530, column: 19 } },
                  loc: { start: { line: 530, column: 26 }, end: { line: 545, column: 1 } },
                  line: 530
                },
                '18': {
                  name: 'cmdToArr',
                  decl: { start: { line: 547, column: 9 }, end: { line: 547, column: 17 } },
                  loc: { start: { line: 547, column: 23 }, end: { line: 559, column: 1 } },
                  line: 547
                },
                '19': {
                  name: 'parseOpts',
                  decl: { start: { line: 561, column: 9 }, end: { line: 561, column: 18 } },
                  loc: { start: { line: 561, column: 38 }, end: { line: 572, column: 1 } },
                  line: 561
                },
                '20': {
                  name: 'at',
                  decl: { start: { line: 576, column: 9 }, end: { line: 576, column: 11 } },
                  loc: { start: { line: 576, column: 18 }, end: { line: 579, column: 1 } },
                  line: 576
                },
                '21': {
                  name: 'collinear',
                  decl: { start: { line: 581, column: 9 }, end: { line: 581, column: 18 } },
                  loc: { start: { line: 581, column: 44 }, end: { line: 604, column: 1 } },
                  line: 581
                },
                '22': {
                  name: 'areaTriangle',
                  decl: { start: { line: 606, column: 9 }, end: { line: 606, column: 21 } },
                  loc: { start: { line: 606, column: 31 }, end: { line: 608, column: 1 } },
                  line: 606
                },
                '23': {
                  name: 'findDotsAtSegment',
                  decl: { start: { line: 612, column: 9 }, end: { line: 612, column: 26 } },
                  loc: { start: { line: 612, column: 70 }, end: { line: 643, column: 1 } },
                  line: 612
                },
                '24': {
                  name: 'getPointAtSegmentLength',
                  decl: { start: { line: 645, column: 9 }, end: { line: 645, column: 32 } },
                  loc: { start: { line: 655, column: 2 }, end: { line: 669, column: 1 } },
                  line: 655
                },
                '25': {
                  name: 'pointAtLength',
                  decl: { start: { line: 671, column: 9 }, end: { line: 671, column: 22 } },
                  loc: { start: { line: 671, column: 46 }, end: { line: 721, column: 1 } },
                  line: 671
                },
                '26': {
                  name: 'pathToAbsolute',
                  decl: { start: { line: 723, column: 9 }, end: { line: 723, column: 23 } },
                  loc: { start: { line: 723, column: 35 }, end: { line: 821, column: 1 } },
                  line: 723
                },
                '27': {
                  name: 'path2curve',
                  decl: { start: { line: 823, column: 9 }, end: { line: 823, column: 19 } },
                  loc: { start: { line: 823, column: 33 }, end: { line: 977, column: 1 } },
                  line: 823
                },
                '28': {
                  name: '(anonymous_28)',
                  decl: {
                    start: { line: 832, column: 22 },
                    end: { line: 832, column: 23 }
                  },
                  loc: { start: { line: 832, column: 41 }, end: { line: 891, column: 5 } },
                  line: 832
                },
                '29': {
                  name: '(anonymous_29)',
                  decl: {
                    start: { line: 892, column: 13 },
                    end: { line: 892, column: 14 }
                  },
                  loc: { start: { line: 892, column: 24 }, end: { line: 906, column: 5 } },
                  line: 892
                },
                '30': {
                  name: '(anonymous_30)',
                  decl: {
                    start: { line: 907, column: 11 },
                    end: { line: 907, column: 12 }
                  },
                  loc: { start: { line: 907, column: 40 }, end: { line: 916, column: 5 } },
                  line: 907
                },
                '31': {
                  name: 'a2c',
                  decl: { start: { line: 979, column: 9 }, end: { line: 979, column: 12 } },
                  loc: { start: { line: 979, column: 72 }, end: { line: 1096, column: 1 } },
                  line: 979
                },
                '32': {
                  name: '(anonymous_32)',
                  decl: {
                    start: { line: 993, column: 17 },
                    end: { line: 993, column: 18 }
                  },
                  loc: { start: { line: 993, column: 32 }, end: { line: 997, column: 3 } },
                  line: 993
                },
                '33': {
                  name: 'catmullRom2bezier',
                  decl: {
                    start: { line: 1099, column: 9 },
                    end: { line: 1099, column: 26 }
                  },
                  loc: {
                    start: { line: 1099, column: 35 },
                    end: { line: 1163, column: 1 }
                  },
                  line: 1099
                },
                '34': {
                  name: 'l2c',
                  decl: {
                    start: { line: 1165, column: 9 },
                    end: { line: 1165, column: 12 }
                  },
                  loc: {
                    start: { line: 1165, column: 29 },
                    end: { line: 1167, column: 1 }
                  },
                  line: 1165
                },
                '35': {
                  name: 'q2c',
                  decl: {
                    start: { line: 1169, column: 9 },
                    end: { line: 1169, column: 12 }
                  },
                  loc: {
                    start: { line: 1169, column: 37 },
                    end: { line: 1180, column: 1 }
                  },
                  line: 1169
                },
                '36': {
                  name: 'bezlen',
                  decl: {
                    start: { line: 1182, column: 9 },
                    end: { line: 1182, column: 15 }
                  },
                  loc: {
                    start: { line: 1182, column: 51 },
                    end: { line: 1228, column: 1 }
                  },
                  line: 1182
                },
                '37': {
                  name: 'getTatLen',
                  decl: {
                    start: { line: 1230, column: 9 },
                    end: { line: 1230, column: 18 }
                  },
                  loc: {
                    start: { line: 1230, column: 55 },
                    end: { line: 1246, column: 1 }
                  },
                  line: 1230
                },
                '38': {
                  name: 'base3',
                  decl: {
                    start: { line: 1248, column: 9 },
                    end: { line: 1248, column: 14 }
                  },
                  loc: {
                    start: { line: 1248, column: 34 },
                    end: { line: 1252, column: 1 }
                  },
                  line: 1248
                },
                '39': {
                  name: 'cacheKey',
                  decl: {
                    start: { line: 1254, column: 9 },
                    end: { line: 1254, column: 17 }
                  },
                  loc: {
                    start: { line: 1254, column: 27 },
                    end: { line: 1260, column: 1 }
                  },
                  line: 1254
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 74, column: 45 }, end: { line: 74, column: 50 } },
                  type: 'default-arg',
                  locations: [
                    { start: { line: 74, column: 49 }, end: { line: 74, column: 50 } }
                  ],
                  line: 74
                },
                '1': {
                  loc: { start: { line: 74, column: 52 }, end: { line: 74, column: 57 } },
                  type: 'default-arg',
                  locations: [
                    { start: { line: 74, column: 56 }, end: { line: 74, column: 57 } }
                  ],
                  line: 74
                },
                '2': {
                  loc: { start: { line: 78, column: 12 }, end: { line: 78, column: 74 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 78, column: 13 }, end: { line: 78, column: 17 } },
                    { start: { line: 78, column: 21 }, end: { line: 78, column: 34 } },
                    { start: { line: 78, column: 38 }, end: { line: 78, column: 58 } },
                    { start: { line: 78, column: 63 }, end: { line: 78, column: 74 } }
                  ],
                  line: 78
                },
                '3': {
                  loc: { start: { line: 81, column: 20 }, end: { line: 81, column: 51 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 81, column: 20 }, end: { line: 81, column: 33 } },
                    { start: { line: 81, column: 37 }, end: { line: 81, column: 51 } }
                  ],
                  line: 81
                },
                '4': {
                  loc: { start: { line: 82, column: 19 }, end: { line: 82, column: 57 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 82, column: 19 }, end: { line: 82, column: 35 } },
                    { start: { line: 82, column: 39 }, end: { line: 82, column: 57 } }
                  ],
                  line: 82
                },
                '5': {
                  loc: { start: { line: 87, column: 13 }, end: { line: 87, column: 46 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 87, column: 13 }, end: { line: 87, column: 21 } },
                    { start: { line: 87, column: 25 }, end: { line: 87, column: 46 } }
                  ],
                  line: 87
                },
                '6': {
                  loc: { start: { line: 90, column: 2 }, end: { line: 93, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 90, column: 2 }, end: { line: 93, column: 3 } },
                    { start: { line: 90, column: 2 }, end: { line: 93, column: 3 } }
                  ],
                  line: 90
                },
                '7': {
                  loc: { start: { line: 95, column: 2 }, end: { line: 170, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 95, column: 2 }, end: { line: 170, column: 3 } },
                    { start: { line: 95, column: 2 }, end: { line: 170, column: 3 } }
                  ],
                  line: 95
                },
                '8': {
                  loc: { start: { line: 116, column: 8 }, end: { line: 124, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 116, column: 8 }, end: { line: 124, column: 9 } },
                    { start: { line: 116, column: 8 }, end: { line: 124, column: 9 } }
                  ],
                  line: 116
                },
                '9': {
                  loc: { start: { line: 116, column: 12 }, end: { line: 116, column: 51 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 116, column: 12 }, end: { line: 116, column: 29 } },
                    { start: { line: 116, column: 33 }, end: { line: 116, column: 51 } }
                  ],
                  line: 116
                },
                '10': {
                  loc: { start: { line: 128, column: 4 }, end: { line: 131, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 128, column: 4 }, end: { line: 131, column: 5 } },
                    { start: { line: 128, column: 4 }, end: { line: 131, column: 5 } }
                  ],
                  line: 128
                },
                '11': {
                  loc: { start: { line: 138, column: 6 }, end: { line: 140, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 138, column: 6 }, end: { line: 140, column: 7 } },
                    { start: { line: 138, column: 6 }, end: { line: 140, column: 7 } }
                  ],
                  line: 138
                },
                '12': {
                  loc: { start: { line: 167, column: 4 }, end: { line: 169, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 167, column: 4 }, end: { line: 169, column: 5 } },
                    { start: { line: 167, column: 4 }, end: { line: 169, column: 5 } }
                  ],
                  line: 167
                },
                '13': {
                  loc: { start: { line: 240, column: 6 }, end: { line: 242, column: 48 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 240, column: 7 }, end: { line: 240, column: 21 } },
                    { start: { line: 240, column: 25 }, end: { line: 240, column: 51 } },
                    { start: { line: 241, column: 7 }, end: { line: 241, column: 35 } },
                    { start: { line: 241, column: 39 }, end: { line: 241, column: 53 } },
                    { start: { line: 242, column: 7 }, end: { line: 242, column: 22 } },
                    { start: { line: 242, column: 26 }, end: { line: 242, column: 47 } }
                  ],
                  line: 240
                },
                '14': {
                  loc: { start: { line: 246, column: 13 }, end: { line: 246, column: 56 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 246, column: 13 }, end: { line: 246, column: 21 } },
                    { start: { line: 246, column: 25 }, end: { line: 246, column: 56 } }
                  ],
                  line: 246
                },
                '15': {
                  loc: { start: { line: 249, column: 4 }, end: { line: 263, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 249, column: 4 }, end: { line: 263, column: 5 } },
                    { start: { line: 249, column: 4 }, end: { line: 263, column: 5 } }
                  ],
                  line: 249
                },
                '16': {
                  loc: { start: { line: 300, column: 6 }, end: { line: 300, column: 77 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 300, column: 7 }, end: { line: 300, column: 14 } },
                    { start: { line: 300, column: 18 }, end: { line: 300, column: 34 } },
                    { start: { line: 300, column: 38 }, end: { line: 300, column: 61 } },
                    { start: { line: 300, column: 66 }, end: { line: 300, column: 77 } }
                  ],
                  line: 300
                },
                '17': {
                  loc: { start: { line: 326, column: 2 }, end: { line: 331, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 326, column: 2 }, end: { line: 331, column: 3 } },
                    { start: { line: 326, column: 2 }, end: { line: 331, column: 3 } }
                  ],
                  line: 326
                },
                '18': {
                  loc: { start: { line: 326, column: 6 }, end: { line: 326, column: 54 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 326, column: 6 }, end: { line: 326, column: 30 } },
                    { start: { line: 326, column: 34 }, end: { line: 326, column: 54 } }
                  ],
                  line: 326
                },
                '19': {
                  loc: { start: { line: 328, column: 9 }, end: { line: 331, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 328, column: 9 }, end: { line: 331, column: 3 } },
                    { start: { line: 328, column: 9 }, end: { line: 331, column: 3 } }
                  ],
                  line: 328
                },
                '20': {
                  loc: { start: { line: 334, column: 2 }, end: { line: 336, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 334, column: 2 }, end: { line: 336, column: 3 } },
                    { start: { line: 334, column: 2 }, end: { line: 336, column: 3 } }
                  ],
                  line: 334
                },
                '21': {
                  loc: { start: { line: 334, column: 6 }, end: { line: 334, column: 53 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 334, column: 6 }, end: { line: 334, column: 13 } },
                    { start: { line: 334, column: 17 }, end: { line: 334, column: 53 } }
                  ],
                  line: 334
                },
                '22': {
                  loc: { start: { line: 362, column: 2 }, end: { line: 367, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 362, column: 2 }, end: { line: 367, column: 3 } },
                    { start: { line: 362, column: 2 }, end: { line: 367, column: 3 } }
                  ],
                  line: 362
                },
                '23': {
                  loc: { start: { line: 362, column: 6 }, end: { line: 362, column: 54 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 362, column: 6 }, end: { line: 362, column: 30 } },
                    { start: { line: 362, column: 34 }, end: { line: 362, column: 54 } }
                  ],
                  line: 362
                },
                '24': {
                  loc: { start: { line: 364, column: 9 }, end: { line: 367, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 364, column: 9 }, end: { line: 367, column: 3 } },
                    { start: { line: 364, column: 9 }, end: { line: 367, column: 3 } }
                  ],
                  line: 364
                },
                '25': {
                  loc: { start: { line: 370, column: 2 }, end: { line: 383, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 370, column: 2 }, end: { line: 383, column: 3 } },
                    { start: { line: 370, column: 2 }, end: { line: 383, column: 3 } }
                  ],
                  line: 370
                },
                '26': {
                  loc: { start: { line: 371, column: 4 }, end: { line: 373, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 371, column: 4 }, end: { line: 373, column: 5 } },
                    { start: { line: 371, column: 4 }, end: { line: 373, column: 5 } }
                  ],
                  line: 371
                },
                '27': {
                  loc: { start: { line: 374, column: 4 }, end: { line: 376, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 374, column: 4 }, end: { line: 376, column: 5 } },
                    { start: { line: 374, column: 4 }, end: { line: 376, column: 5 } }
                  ],
                  line: 374
                },
                '28': {
                  loc: { start: { line: 377, column: 4 }, end: { line: 379, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 377, column: 4 }, end: { line: 379, column: 5 } },
                    { start: { line: 377, column: 4 }, end: { line: 379, column: 5 } }
                  ],
                  line: 377
                },
                '29': {
                  loc: { start: { line: 380, column: 4 }, end: { line: 382, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 380, column: 4 }, end: { line: 382, column: 5 } },
                    { start: { line: 380, column: 4 }, end: { line: 382, column: 5 } }
                  ],
                  line: 380
                },
                '30': {
                  loc: { start: { line: 403, column: 13 }, end: { line: 403, column: 67 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 403, column: 14 }, end: { line: 403, column: 21 } },
                    { start: { line: 403, column: 25 }, end: { line: 403, column: 41 } },
                    { start: { line: 403, column: 46 }, end: { line: 403, column: 67 } }
                  ],
                  line: 403
                },
                '31': {
                  loc: { start: { line: 406, column: 2 }, end: { line: 411, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 406, column: 2 }, end: { line: 411, column: 3 } },
                    { start: { line: 406, column: 2 }, end: { line: 411, column: 3 } }
                  ],
                  line: 406
                },
                '32': {
                  loc: { start: { line: 406, column: 6 }, end: { line: 406, column: 47 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 406, column: 6 }, end: { line: 406, column: 30 } },
                    { start: { line: 406, column: 34 }, end: { line: 406, column: 47 } }
                  ],
                  line: 406
                },
                '33': {
                  loc: { start: { line: 416, column: 4 }, end: { line: 426, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 416, column: 4 }, end: { line: 426, column: 5 } },
                    { start: { line: 416, column: 4 }, end: { line: 426, column: 5 } }
                  ],
                  line: 416
                },
                '34': {
                  loc: { start: { line: 418, column: 11 }, end: { line: 426, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 418, column: 11 }, end: { line: 426, column: 5 } },
                    { start: { line: 418, column: 11 }, end: { line: 426, column: 5 } }
                  ],
                  line: 418
                },
                '35': {
                  loc: { start: { line: 420, column: 11 }, end: { line: 426, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 420, column: 11 }, end: { line: 426, column: 5 } },
                    { start: { line: 420, column: 11 }, end: { line: 426, column: 5 } }
                  ],
                  line: 420
                },
                '36': {
                  loc: { start: { line: 422, column: 11 }, end: { line: 426, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 422, column: 11 }, end: { line: 426, column: 5 } },
                    { start: { line: 422, column: 11 }, end: { line: 426, column: 5 } }
                  ],
                  line: 422
                },
                '37': {
                  loc: { start: { line: 424, column: 11 }, end: { line: 426, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 424, column: 11 }, end: { line: 426, column: 5 } },
                    { start: { line: 424, column: 11 }, end: { line: 426, column: 5 } }
                  ],
                  line: 424
                },
                '38': {
                  loc: { start: { line: 430, column: 2 }, end: { line: 432, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 430, column: 2 }, end: { line: 432, column: 3 } },
                    { start: { line: 430, column: 2 }, end: { line: 432, column: 3 } }
                  ],
                  line: 430
                },
                '39': {
                  loc: { start: { line: 430, column: 6 }, end: { line: 430, column: 35 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 430, column: 6 }, end: { line: 430, column: 18 } },
                    { start: { line: 430, column: 22 }, end: { line: 430, column: 35 } }
                  ],
                  line: 430
                },
                '40': {
                  loc: { start: { line: 434, column: 2 }, end: { line: 440, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 434, column: 2 }, end: { line: 440, column: 3 } },
                    { start: { line: 434, column: 2 }, end: { line: 440, column: 3 } }
                  ],
                  line: 434
                },
                '41': {
                  loc: { start: { line: 436, column: 4 }, end: { line: 438, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 436, column: 4 }, end: { line: 438, column: 5 } },
                    { start: { line: 436, column: 4 }, end: { line: 438, column: 5 } }
                  ],
                  line: 436
                },
                '42': {
                  loc: { start: { line: 459, column: 32 }, end: { line: 459, column: 75 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 459, column: 32 }, end: { line: 459, column: 40 } },
                    { start: { line: 459, column: 44 }, end: { line: 459, column: 75 } }
                  ],
                  line: 459
                },
                '43': {
                  loc: { start: { line: 466, column: 2 }, end: { line: 468, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 466, column: 2 }, end: { line: 468, column: 3 } },
                    { start: { line: 466, column: 2 }, end: { line: 468, column: 3 } }
                  ],
                  line: 466
                },
                '44': {
                  loc: { start: { line: 470, column: 2 }, end: { line: 477, column: 3 } },
                  type: 'switch',
                  locations: [
                    { start: { line: 471, column: 4 }, end: { line: 473, column: 12 } },
                    { start: { line: 474, column: 4 }, end: { line: 476, column: 12 } }
                  ],
                  line: 470
                },
                '45': {
                  loc: { start: { line: 479, column: 2 }, end: { line: 489, column: 3 } },
                  type: 'switch',
                  locations: [
                    { start: { line: 480, column: 4 }, end: { line: 482, column: 12 } },
                    { start: { line: 483, column: 4 }, end: { line: 485, column: 12 } },
                    { start: { line: 486, column: 4 }, end: { line: 488, column: 12 } }
                  ],
                  line: 479
                },
                '46': {
                  loc: { start: { line: 511, column: 2 }, end: { line: 513, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 511, column: 2 }, end: { line: 513, column: 3 } },
                    { start: { line: 511, column: 2 }, end: { line: 513, column: 3 } }
                  ],
                  line: 511
                },
                '47': {
                  loc: { start: { line: 518, column: 23 }, end: { line: 518, column: 32 } },
                  type: 'default-arg',
                  locations: [
                    { start: { line: 518, column: 31 }, end: { line: 518, column: 32 } }
                  ],
                  line: 518
                },
                '48': {
                  loc: { start: { line: 520, column: 31 }, end: { line: 520, column: 55 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 520, column: 31 }, end: { line: 520, column: 45 } },
                    { start: { line: 520, column: 49 }, end: { line: 520, column: 55 } }
                  ],
                  line: 520
                },
                '49': {
                  loc: { start: { line: 521, column: 4 }, end: { line: 525, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 521, column: 4 }, end: { line: 525, column: 5 } },
                    { start: { line: 521, column: 4 }, end: { line: 525, column: 5 } }
                  ],
                  line: 521
                },
                '50': {
                  loc: { start: { line: 534, column: 4 }, end: { line: 539, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 534, column: 4 }, end: { line: 539, column: 5 } },
                    { start: { line: 534, column: 4 }, end: { line: 539, column: 5 } }
                  ],
                  line: 534
                },
                '51': {
                  loc: { start: { line: 535, column: 6 }, end: { line: 537, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 535, column: 6 }, end: { line: 537, column: 7 } },
                    { start: { line: 535, column: 6 }, end: { line: 537, column: 7 } }
                  ],
                  line: 535
                },
                '52': {
                  loc: { start: { line: 549, column: 2 }, end: { line: 556, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 549, column: 2 }, end: { line: 556, column: 3 } },
                    { start: { line: 549, column: 2 }, end: { line: 556, column: 3 } }
                  ],
                  line: 549
                },
                '53': {
                  loc: { start: { line: 549, column: 6 }, end: { line: 549, column: 42 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 549, column: 6 }, end: { line: 549, column: 22 } },
                    { start: { line: 549, column: 26 }, end: { line: 549, column: 42 } }
                  ],
                  line: 549
                },
                '54': {
                  loc: { start: { line: 552, column: 9 }, end: { line: 556, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 552, column: 9 }, end: { line: 556, column: 3 } },
                    { start: { line: 552, column: 9 }, end: { line: 556, column: 3 } }
                  ],
                  line: 552
                },
                '55': {
                  loc: { start: { line: 554, column: 9 }, end: { line: 556, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 554, column: 9 }, end: { line: 556, column: 3 } },
                    { start: { line: 554, column: 9 }, end: { line: 556, column: 3 } }
                  ],
                  line: 554
                },
                '56': {
                  loc: { start: { line: 562, column: 2 }, end: { line: 570, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 562, column: 2 }, end: { line: 570, column: 3 } },
                    { start: { line: 562, column: 2 }, end: { line: 570, column: 3 } }
                  ],
                  line: 562
                },
                '57': {
                  loc: { start: { line: 566, column: 6 }, end: { line: 568, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 566, column: 6 }, end: { line: 568, column: 7 } },
                    { start: { line: 566, column: 6 }, end: { line: 568, column: 7 } }
                  ],
                  line: 566
                },
                '58': {
                  loc: { start: { line: 578, column: 11 }, end: { line: 578, column: 36 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 578, column: 19 }, end: { line: 578, column: 28 } },
                    { start: { line: 578, column: 31 }, end: { line: 578, column: 36 } }
                  ],
                  line: 578
                },
                '59': {
                  loc: { start: { line: 582, column: 2 }, end: { line: 584, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 582, column: 2 }, end: { line: 584, column: 3 } },
                    { start: { line: 582, column: 2 }, end: { line: 584, column: 3 } }
                  ],
                  line: 582
                },
                '60': {
                  loc: { start: { line: 586, column: 2 }, end: { line: 589, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 586, column: 2 }, end: { line: 589, column: 3 } },
                    { start: { line: 586, column: 2 }, end: { line: 589, column: 3 } }
                  ],
                  line: 586
                },
                '61': {
                  loc: { start: { line: 630, column: 2 }, end: { line: 632, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 630, column: 2 }, end: { line: 632, column: 3 } },
                    { start: { line: 630, column: 2 }, end: { line: 632, column: 3 } }
                  ],
                  line: 630
                },
                '62': {
                  loc: { start: { line: 630, column: 6 }, end: { line: 630, column: 24 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 630, column: 6 }, end: { line: 630, column: 13 } },
                    { start: { line: 630, column: 17 }, end: { line: 630, column: 24 } }
                  ],
                  line: 630
                },
                '63': {
                  loc: { start: { line: 656, column: 9 }, end: { line: 668, column: 7 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 657, column: 6 }, end: { line: 657, column: 52 } },
                    { start: { line: 658, column: 6 }, end: { line: 668, column: 7 } }
                  ],
                  line: 656
                },
                '64': {
                  loc: { start: { line: 683, column: 4 }, end: { line: 707, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 683, column: 4 }, end: { line: 707, column: 5 } },
                    { start: { line: 683, column: 4 }, end: { line: 707, column: 5 } }
                  ],
                  line: 683
                },
                '65': {
                  loc: { start: { line: 688, column: 6 }, end: { line: 703, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 688, column: 6 }, end: { line: 703, column: 7 } },
                    { start: { line: 688, column: 6 }, end: { line: 703, column: 7 } }
                  ],
                  line: 688
                },
                '66': {
                  loc: { start: { line: 689, column: 8 }, end: { line: 702, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 689, column: 8 }, end: { line: 702, column: 9 } },
                    { start: { line: 689, column: 8 }, end: { line: 702, column: 9 } }
                  ],
                  line: 689
                },
                '67': {
                  loc: { start: { line: 712, column: 10 }, end: { line: 714, column: 68 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 713, column: 6 }, end: { line: 713, column: 9 } },
                    { start: { line: 714, column: 6 }, end: { line: 714, column: 68 } }
                  ],
                  line: 712
                },
                '68': {
                  loc: { start: { line: 716, column: 2 }, end: { line: 718, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 716, column: 2 }, end: { line: 718, column: 3 } },
                    { start: { line: 716, column: 2 }, end: { line: 718, column: 3 } }
                  ],
                  line: 716
                },
                '69': {
                  loc: { start: { line: 730, column: 2 }, end: { line: 733, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 730, column: 2 }, end: { line: 733, column: 3 } },
                    { start: { line: 730, column: 2 }, end: { line: 733, column: 3 } }
                  ],
                  line: 730
                },
                '70': {
                  loc: { start: { line: 734, column: 2 }, end: { line: 741, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 734, column: 2 }, end: { line: 741, column: 3 } },
                    { start: { line: 734, column: 2 }, end: { line: 741, column: 3 } }
                  ],
                  line: 734
                },
                '71': {
                  loc: { start: { line: 746, column: 4 }, end: { line: 749, column: 41 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 746, column: 4 }, end: { line: 746, column: 26 } },
                    { start: { line: 747, column: 4 }, end: { line: 747, column: 27 } },
                    { start: { line: 748, column: 4 }, end: { line: 748, column: 41 } },
                    { start: { line: 749, column: 4 }, end: { line: 749, column: 41 } }
                  ],
                  line: 746
                },
                '72': {
                  loc: { start: { line: 754, column: 4 }, end: { line: 799, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 754, column: 4 }, end: { line: 799, column: 5 } },
                    { start: { line: 754, column: 4 }, end: { line: 799, column: 5 } }
                  ],
                  line: 754
                },
                '73': {
                  loc: { start: { line: 756, column: 6 }, end: { line: 789, column: 7 } },
                  type: 'switch',
                  locations: [
                    { start: { line: 757, column: 8 }, end: { line: 765, column: 16 } },
                    { start: { line: 766, column: 8 }, end: { line: 768, column: 16 } },
                    { start: { line: 769, column: 8 }, end: { line: 771, column: 16 } },
                    { start: { line: 772, column: 8 }, end: { line: 780, column: 16 } },
                    { start: { line: 781, column: 8 }, end: { line: 784, column: 16 } },
                    { start: { line: 785, column: 8 }, end: { line: 788, column: 11 } }
                  ],
                  line: 756
                },
                '74': {
                  loc: { start: { line: 787, column: 29 }, end: { line: 787, column: 42 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 787, column: 37 }, end: { line: 787, column: 38 } },
                    { start: { line: 787, column: 41 }, end: { line: 787, column: 42 } }
                  ],
                  line: 787
                },
                '75': {
                  loc: { start: { line: 790, column: 11 }, end: { line: 799, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 790, column: 11 }, end: { line: 799, column: 5 } },
                    { start: { line: 790, column: 11 }, end: { line: 799, column: 5 } }
                  ],
                  line: 790
                },
                '76': {
                  loc: { start: { line: 800, column: 4 }, end: { line: 818, column: 5 } },
                  type: 'switch',
                  locations: [
                    { start: { line: 801, column: 6 }, end: { line: 804, column: 14 } },
                    { start: { line: 805, column: 6 }, end: { line: 807, column: 14 } },
                    { start: { line: 808, column: 6 }, end: { line: 810, column: 14 } },
                    { start: { line: 811, column: 6 }, end: { line: 814, column: 14 } },
                    { start: { line: 815, column: 6 }, end: { line: 817, column: 28 } }
                  ],
                  line: 800
                },
                '77': {
                  loc: { start: { line: 825, column: 9 }, end: { line: 825, column: 39 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 825, column: 9 }, end: { line: 825, column: 14 } },
                    { start: { line: 825, column: 18 }, end: { line: 825, column: 39 } }
                  ],
                  line: 825
                },
                '78': {
                  loc: { start: { line: 836, column: 6 }, end: { line: 838, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 836, column: 6 }, end: { line: 838, column: 7 } },
                    { start: { line: 836, column: 6 }, end: { line: 838, column: 7 } }
                  ],
                  line: 836
                },
                '79': {
                  loc: { start: { line: 839, column: 6 }, end: { line: 841, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 839, column: 6 }, end: { line: 841, column: 7 } },
                    { start: { line: 839, column: 6 }, end: { line: 841, column: 7 } }
                  ],
                  line: 839
                },
                '80': {
                  loc: { start: { line: 842, column: 6 }, end: { line: 889, column: 7 } },
                  type: 'switch',
                  locations: [
                    { start: { line: 843, column: 8 }, end: { line: 846, column: 16 } },
                    { start: { line: 847, column: 8 }, end: { line: 849, column: 16 } },
                    { start: { line: 850, column: 8 }, end: { line: 859, column: 16 } },
                    { start: { line: 860, column: 8 }, end: { line: 869, column: 16 } },
                    { start: { line: 870, column: 8 }, end: { line: 876, column: 16 } },
                    { start: { line: 877, column: 8 }, end: { line: 879, column: 16 } },
                    { start: { line: 880, column: 8 }, end: { line: 882, column: 16 } },
                    { start: { line: 883, column: 8 }, end: { line: 885, column: 16 } },
                    { start: { line: 886, column: 8 }, end: { line: 888, column: 16 } }
                  ],
                  line: 842
                },
                '81': {
                  loc: { start: { line: 851, column: 10 }, end: { line: 857, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 851, column: 10 }, end: { line: 857, column: 11 } },
                    { start: { line: 851, column: 10 }, end: { line: 857, column: 11 } }
                  ],
                  line: 851
                },
                '82': {
                  loc: { start: { line: 851, column: 14 }, end: { line: 851, column: 42 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 851, column: 14 }, end: { line: 851, column: 26 } },
                    { start: { line: 851, column: 30 }, end: { line: 851, column: 42 } }
                  ],
                  line: 851
                },
                '83': {
                  loc: { start: { line: 861, column: 10 }, end: { line: 867, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 861, column: 10 }, end: { line: 867, column: 11 } },
                    { start: { line: 861, column: 10 }, end: { line: 867, column: 11 } }
                  ],
                  line: 861
                },
                '84': {
                  loc: { start: { line: 861, column: 14 }, end: { line: 861, column: 42 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 861, column: 14 }, end: { line: 861, column: 26 } },
                    { start: { line: 861, column: 30 }, end: { line: 861, column: 42 } }
                  ],
                  line: 861
                },
                '85': {
                  loc: { start: { line: 893, column: 6 }, end: { line: 905, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 893, column: 6 }, end: { line: 905, column: 7 } },
                    { start: { line: 893, column: 6 }, end: { line: 905, column: 7 } }
                  ],
                  line: 893
                },
                '86': {
                  loc: { start: { line: 898, column: 10 }, end: { line: 900, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 898, column: 10 }, end: { line: 900, column: 11 } },
                    { start: { line: 898, column: 10 }, end: { line: 900, column: 11 } }
                  ],
                  line: 898
                },
                '87': {
                  loc: { start: { line: 904, column: 32 }, end: { line: 904, column: 54 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 904, column: 33 }, end: { line: 904, column: 35 } },
                    { start: { line: 904, column: 39 }, end: { line: 904, column: 48 } },
                    { start: { line: 904, column: 53 }, end: { line: 904, column: 54 } }
                  ],
                  line: 904
                },
                '88': {
                  loc: { start: { line: 908, column: 6 }, end: { line: 915, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 908, column: 6 }, end: { line: 915, column: 7 } },
                    { start: { line: 908, column: 6 }, end: { line: 915, column: 7 } }
                  ],
                  line: 908
                },
                '89': {
                  loc: { start: { line: 908, column: 10 }, end: { line: 908, column: 70 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 908, column: 10 }, end: { line: 908, column: 15 } },
                    { start: { line: 908, column: 19 }, end: { line: 908, column: 24 } },
                    { start: { line: 908, column: 28 }, end: { line: 908, column: 47 } },
                    { start: { line: 908, column: 51 }, end: { line: 908, column: 70 } }
                  ],
                  line: 908
                },
                '90': {
                  loc: { start: { line: 914, column: 32 }, end: { line: 914, column: 54 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 914, column: 33 }, end: { line: 914, column: 35 } },
                    { start: { line: 914, column: 39 }, end: { line: 914, column: 48 } },
                    { start: { line: 914, column: 53 }, end: { line: 914, column: 54 } }
                  ],
                  line: 914
                },
                '91': {
                  loc: { start: { line: 921, column: 26 }, end: { line: 921, column: 48 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 921, column: 27 }, end: { line: 921, column: 29 } },
                    { start: { line: 921, column: 33 }, end: { line: 921, column: 42 } },
                    { start: { line: 921, column: 47 }, end: { line: 921, column: 48 } }
                  ],
                  line: 921
                },
                '92': {
                  loc: { start: { line: 923, column: 4 }, end: { line: 925, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 923, column: 4 }, end: { line: 925, column: 5 } },
                    { start: { line: 923, column: 4 }, end: { line: 925, column: 5 } }
                  ],
                  line: 923
                },
                '93': {
                  loc: { start: { line: 927, column: 4 }, end: { line: 932, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 927, column: 4 }, end: { line: 932, column: 5 } },
                    { start: { line: 927, column: 4 }, end: { line: 932, column: 5 } }
                  ],
                  line: 927
                },
                '94': {
                  loc: { start: { line: 929, column: 6 }, end: { line: 931, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 929, column: 6 }, end: { line: 931, column: 7 } },
                    { start: { line: 929, column: 6 }, end: { line: 931, column: 7 } }
                  ],
                  line: 929
                },
                '95': {
                  loc: { start: { line: 935, column: 4 }, end: { line: 937, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 935, column: 4 }, end: { line: 937, column: 5 } },
                    { start: { line: 935, column: 4 }, end: { line: 937, column: 5 } }
                  ],
                  line: 935
                },
                '96': {
                  loc: { start: { line: 935, column: 8 }, end: { line: 935, column: 43 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 935, column: 8 }, end: { line: 935, column: 25 } },
                    { start: { line: 935, column: 29 }, end: { line: 935, column: 43 } }
                  ],
                  line: 935
                },
                '97': {
                  loc: { start: { line: 941, column: 4 }, end: { line: 959, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 941, column: 4 }, end: { line: 959, column: 5 } },
                    { start: { line: 941, column: 4 }, end: { line: 959, column: 5 } }
                  ],
                  line: 941
                },
                '98': {
                  loc: { start: { line: 943, column: 6 }, end: { line: 945, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 943, column: 6 }, end: { line: 945, column: 7 } },
                    { start: { line: 943, column: 6 }, end: { line: 945, column: 7 } }
                  ],
                  line: 943
                },
                '99': {
                  loc: { start: { line: 946, column: 6 }, end: { line: 951, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 946, column: 6 }, end: { line: 951, column: 7 } },
                    { start: { line: 946, column: 6 }, end: { line: 951, column: 7 } }
                  ],
                  line: 946
                },
                '100': {
                  loc: { start: { line: 948, column: 8 }, end: { line: 950, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 948, column: 8 }, end: { line: 950, column: 9 } },
                    { start: { line: 948, column: 8 }, end: { line: 950, column: 9 } }
                  ],
                  line: 948
                },
                '101': {
                  loc: { start: { line: 954, column: 6 }, end: { line: 956, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 954, column: 6 }, end: { line: 956, column: 7 } },
                    { start: { line: 954, column: 6 }, end: { line: 956, column: 7 } }
                  ],
                  line: 954
                },
                '102': {
                  loc: { start: { line: 954, column: 10 }, end: { line: 954, column: 45 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 954, column: 10 }, end: { line: 954, column: 27 } },
                    { start: { line: 954, column: 31 }, end: { line: 954, column: 45 } }
                  ],
                  line: 954
                },
                '103': {
                  loc: { start: { line: 963, column: 13 }, end: { line: 963, column: 24 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 963, column: 13 }, end: { line: 963, column: 15 } },
                    { start: { line: 963, column: 19 }, end: { line: 963, column: 24 } }
                  ],
                  line: 963
                },
                '104': {
                  loc: { start: { line: 965, column: 16 }, end: { line: 965, column: 33 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 965, column: 16 }, end: { line: 965, column: 18 } },
                    { start: { line: 965, column: 22 }, end: { line: 965, column: 33 } }
                  ],
                  line: 965
                },
                '105': {
                  loc: { start: { line: 968, column: 15 }, end: { line: 968, column: 53 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 968, column: 15 }, end: { line: 968, column: 42 } },
                    { start: { line: 968, column: 46 }, end: { line: 968, column: 53 } }
                  ],
                  line: 968
                },
                '106': {
                  loc: { start: { line: 969, column: 15 }, end: { line: 969, column: 53 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 969, column: 15 }, end: { line: 969, column: 42 } },
                    { start: { line: 969, column: 46 }, end: { line: 969, column: 53 } }
                  ],
                  line: 969
                },
                '107': {
                  loc: { start: { line: 970, column: 16 }, end: { line: 970, column: 65 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 970, column: 16 }, end: { line: 970, column: 18 } },
                    { start: { line: 970, column: 23 }, end: { line: 970, column: 52 } },
                    { start: { line: 970, column: 56 }, end: { line: 970, column: 64 } }
                  ],
                  line: 970
                },
                '108': {
                  loc: { start: { line: 971, column: 16 }, end: { line: 971, column: 65 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 971, column: 16 }, end: { line: 971, column: 18 } },
                    { start: { line: 971, column: 23 }, end: { line: 971, column: 52 } },
                    { start: { line: 971, column: 56 }, end: { line: 971, column: 64 } }
                  ],
                  line: 971
                },
                '109': {
                  loc: { start: { line: 972, column: 15 }, end: { line: 972, column: 38 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 972, column: 15 }, end: { line: 972, column: 17 } },
                    { start: { line: 972, column: 21 }, end: { line: 972, column: 38 } }
                  ],
                  line: 972
                },
                '110': {
                  loc: { start: { line: 973, column: 15 }, end: { line: 973, column: 38 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 973, column: 15 }, end: { line: 973, column: 17 } },
                    { start: { line: 973, column: 21 }, end: { line: 973, column: 38 } }
                  ],
                  line: 973
                },
                '111': {
                  loc: { start: { line: 976, column: 9 }, end: { line: 976, column: 25 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 976, column: 14 }, end: { line: 976, column: 21 } },
                    { start: { line: 976, column: 24 }, end: { line: 976, column: 25 } }
                  ],
                  line: 976
                },
                '112': {
                  loc: { start: { line: 989, column: 26 }, end: { line: 989, column: 37 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 989, column: 26 }, end: { line: 989, column: 32 } },
                    { start: { line: 989, column: 36 }, end: { line: 989, column: 37 } }
                  ],
                  line: 989
                },
                '113': {
                  loc: { start: { line: 999, column: 2 }, end: { line: 1050, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 999, column: 2 }, end: { line: 1050, column: 3 } },
                    { start: { line: 999, column: 2 }, end: { line: 1050, column: 3 } }
                  ],
                  line: 999
                },
                '114': {
                  loc: { start: { line: 1009, column: 4 }, end: { line: 1013, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1009, column: 4 }, end: { line: 1013, column: 5 } },
                    { start: { line: 1009, column: 4 }, end: { line: 1013, column: 5 } }
                  ],
                  line: 1009
                },
                '115': {
                  loc: {
                    start: { line: 1017, column: 7 },
                    end: { line: 1017, column: 34 }
                  },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 1017, column: 28 }, end: { line: 1017, column: 30 } },
                    { start: { line: 1017, column: 33 }, end: { line: 1017, column: 34 } }
                  ],
                  line: 1017
                },
                '116': {
                  loc: {
                    start: { line: 1029, column: 9 },
                    end: { line: 1029, column: 31 }
                  },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 1029, column: 19 }, end: { line: 1029, column: 26 } },
                    { start: { line: 1029, column: 29 }, end: { line: 1029, column: 31 } }
                  ],
                  line: 1029
                },
                '117': {
                  loc: {
                    start: { line: 1030, column: 9 },
                    end: { line: 1030, column: 31 }
                  },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 1030, column: 19 }, end: { line: 1030, column: 26 } },
                    { start: { line: 1030, column: 29 }, end: { line: 1030, column: 31 } }
                  ],
                  line: 1030
                },
                '118': {
                  loc: { start: { line: 1032, column: 4 }, end: { line: 1034, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1032, column: 4 }, end: { line: 1034, column: 5 } },
                    { start: { line: 1032, column: 4 }, end: { line: 1034, column: 5 } }
                  ],
                  line: 1032
                },
                '119': {
                  loc: { start: { line: 1035, column: 4 }, end: { line: 1037, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1035, column: 4 }, end: { line: 1037, column: 5 } },
                    { start: { line: 1035, column: 4 }, end: { line: 1037, column: 5 } }
                  ],
                  line: 1035
                },
                '120': {
                  loc: { start: { line: 1039, column: 4 }, end: { line: 1041, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1039, column: 4 }, end: { line: 1041, column: 5 } },
                    { start: { line: 1039, column: 4 }, end: { line: 1041, column: 5 } }
                  ],
                  line: 1039
                },
                '121': {
                  loc: {
                    start: { line: 1039, column: 8 },
                    end: { line: 1039, column: 29 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1039, column: 8 }, end: { line: 1039, column: 18 } },
                    { start: { line: 1039, column: 22 }, end: { line: 1039, column: 29 } }
                  ],
                  line: 1039
                },
                '122': {
                  loc: { start: { line: 1042, column: 4 }, end: { line: 1044, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1042, column: 4 }, end: { line: 1044, column: 5 } },
                    { start: { line: 1042, column: 4 }, end: { line: 1044, column: 5 } }
                  ],
                  line: 1042
                },
                '123': {
                  loc: {
                    start: { line: 1042, column: 8 },
                    end: { line: 1042, column: 30 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1042, column: 8 }, end: { line: 1042, column: 19 } },
                    { start: { line: 1042, column: 23 }, end: { line: 1042, column: 30 } }
                  ],
                  line: 1042
                },
                '124': {
                  loc: { start: { line: 1052, column: 2 }, end: { line: 1065, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1052, column: 2 }, end: { line: 1065, column: 3 } },
                    { start: { line: 1052, column: 2 }, end: { line: 1065, column: 3 } }
                  ],
                  line: 1052
                },
                '125': {
                  loc: {
                    start: { line: 1056, column: 22 },
                    end: { line: 1056, column: 52 }
                  },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 1056, column: 46 }, end: { line: 1056, column: 47 } },
                    { start: { line: 1056, column: 50 }, end: { line: 1056, column: 52 } }
                  ],
                  line: 1056
                },
                '126': {
                  loc: {
                    start: { line: 1056, column: 22 },
                    end: { line: 1056, column: 43 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1056, column: 22 }, end: { line: 1056, column: 32 } },
                    { start: { line: 1056, column: 36 }, end: { line: 1056, column: 43 } }
                  ],
                  line: 1056
                },
                '127': {
                  loc: { start: { line: 1080, column: 2 }, end: { line: 1095, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1080, column: 2 }, end: { line: 1095, column: 3 } },
                    { start: { line: 1080, column: 2 }, end: { line: 1095, column: 3 } }
                  ],
                  line: 1080
                },
                '128': {
                  loc: {
                    start: { line: 1090, column: 8 },
                    end: { line: 1092, column: 45 }
                  },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 1091, column: 12 }, end: { line: 1091, column: 45 } },
                    { start: { line: 1092, column: 12 }, end: { line: 1092, column: 45 } }
                  ],
                  line: 1090
                },
                '129': {
                  loc: { start: { line: 1120, column: 4 }, end: { line: 1150, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1120, column: 4 }, end: { line: 1150, column: 5 } },
                    { start: { line: 1120, column: 4 }, end: { line: 1150, column: 5 } }
                  ],
                  line: 1120
                },
                '130': {
                  loc: { start: { line: 1121, column: 6 }, end: { line: 1140, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1121, column: 6 }, end: { line: 1140, column: 7 } },
                    { start: { line: 1121, column: 6 }, end: { line: 1140, column: 7 } }
                  ],
                  line: 1121
                },
                '131': {
                  loc: {
                    start: { line: 1126, column: 13 },
                    end: { line: 1140, column: 7 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1126, column: 13 }, end: { line: 1140, column: 7 } },
                    { start: { line: 1126, column: 13 }, end: { line: 1140, column: 7 } }
                  ],
                  line: 1126
                },
                '132': {
                  loc: {
                    start: { line: 1131, column: 13 },
                    end: { line: 1140, column: 7 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1131, column: 13 }, end: { line: 1140, column: 7 } },
                    { start: { line: 1131, column: 13 }, end: { line: 1140, column: 7 } }
                  ],
                  line: 1131
                },
                '133': {
                  loc: { start: { line: 1142, column: 6 }, end: { line: 1149, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1142, column: 6 }, end: { line: 1149, column: 7 } },
                    { start: { line: 1142, column: 6 }, end: { line: 1149, column: 7 } }
                  ],
                  line: 1142
                },
                '134': {
                  loc: {
                    start: { line: 1144, column: 13 },
                    end: { line: 1149, column: 7 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1144, column: 13 }, end: { line: 1149, column: 7 } },
                    { start: { line: 1144, column: 13 }, end: { line: 1149, column: 7 } }
                  ],
                  line: 1144
                },
                '135': {
                  loc: { start: { line: 1183, column: 2 }, end: { line: 1185, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1183, column: 2 }, end: { line: 1185, column: 3 } },
                    { start: { line: 1183, column: 2 }, end: { line: 1185, column: 3 } }
                  ],
                  line: 1183
                },
                '136': {
                  loc: {
                    start: { line: 1186, column: 6 },
                    end: { line: 1186, column: 31 }
                  },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 1186, column: 14 }, end: { line: 1186, column: 15 } },
                    { start: { line: 1186, column: 18 }, end: { line: 1186, column: 31 } }
                  ],
                  line: 1186
                },
                '137': {
                  loc: {
                    start: { line: 1186, column: 18 },
                    end: { line: 1186, column: 31 }
                  },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 1186, column: 26 }, end: { line: 1186, column: 27 } },
                    { start: { line: 1186, column: 30 }, end: { line: 1186, column: 31 } }
                  ],
                  line: 1186
                },
                '138': {
                  loc: { start: { line: 1231, column: 2 }, end: { line: 1233, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1231, column: 2 }, end: { line: 1233, column: 3 } },
                    { start: { line: 1231, column: 2 }, end: { line: 1233, column: 3 } }
                  ],
                  line: 1231
                },
                '139': {
                  loc: {
                    start: { line: 1231, column: 6 },
                    end: { line: 1231, column: 59 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1231, column: 6 }, end: { line: 1231, column: 12 } },
                    { start: { line: 1231, column: 16 }, end: { line: 1231, column: 59 } }
                  ],
                  line: 1231
                },
                '140': {
                  loc: {
                    start: { line: 1242, column: 11 },
                    end: { line: 1242, column: 26 }
                  },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 1242, column: 20 }, end: { line: 1242, column: 21 } },
                    { start: { line: 1242, column: 24 }, end: { line: 1242, column: 26 } }
                  ],
                  line: 1242
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0,
                '118': 0,
                '119': 0,
                '120': 0,
                '121': 0,
                '122': 0,
                '123': 0,
                '124': 0,
                '125': 0,
                '126': 0,
                '127': 0,
                '128': 0,
                '129': 0,
                '130': 0,
                '131': 0,
                '132': 0,
                '133': 0,
                '134': 0,
                '135': 0,
                '136': 0,
                '137': 0,
                '138': 0,
                '139': 0,
                '140': 0,
                '141': 0,
                '142': 0,
                '143': 0,
                '144': 0,
                '145': 0,
                '146': 0,
                '147': 0,
                '148': 0,
                '149': 0,
                '150': 0,
                '151': 0,
                '152': 0,
                '153': 0,
                '154': 0,
                '155': 0,
                '156': 0,
                '157': 0,
                '158': 0,
                '159': 0,
                '160': 0,
                '161': 0,
                '162': 0,
                '163': 0,
                '164': 0,
                '165': 0,
                '166': 0,
                '167': 0,
                '168': 0,
                '169': 0,
                '170': 0,
                '171': 0,
                '172': 0,
                '173': 0,
                '174': 0,
                '175': 0,
                '176': 0,
                '177': 0,
                '178': 0,
                '179': 0,
                '180': 0,
                '181': 0,
                '182': 0,
                '183': 0,
                '184': 0,
                '185': 0,
                '186': 0,
                '187': 0,
                '188': 0,
                '189': 0,
                '190': 0,
                '191': 0,
                '192': 0,
                '193': 0,
                '194': 0,
                '195': 0,
                '196': 0,
                '197': 0,
                '198': 0,
                '199': 0,
                '200': 0,
                '201': 0,
                '202': 0,
                '203': 0,
                '204': 0,
                '205': 0,
                '206': 0,
                '207': 0,
                '208': 0,
                '209': 0,
                '210': 0,
                '211': 0,
                '212': 0,
                '213': 0,
                '214': 0,
                '215': 0,
                '216': 0,
                '217': 0,
                '218': 0,
                '219': 0,
                '220': 0,
                '221': 0,
                '222': 0,
                '223': 0,
                '224': 0,
                '225': 0,
                '226': 0,
                '227': 0,
                '228': 0,
                '229': 0,
                '230': 0,
                '231': 0,
                '232': 0,
                '233': 0,
                '234': 0,
                '235': 0,
                '236': 0,
                '237': 0,
                '238': 0,
                '239': 0,
                '240': 0,
                '241': 0,
                '242': 0,
                '243': 0,
                '244': 0,
                '245': 0,
                '246': 0,
                '247': 0,
                '248': 0,
                '249': 0,
                '250': 0,
                '251': 0,
                '252': 0,
                '253': 0,
                '254': 0,
                '255': 0,
                '256': 0,
                '257': 0,
                '258': 0,
                '259': 0,
                '260': 0,
                '261': 0,
                '262': 0,
                '263': 0,
                '264': 0,
                '265': 0,
                '266': 0,
                '267': 0,
                '268': 0,
                '269': 0,
                '270': 0,
                '271': 0,
                '272': 0,
                '273': 0,
                '274': 0,
                '275': 0,
                '276': 0,
                '277': 0,
                '278': 0,
                '279': 0,
                '280': 0,
                '281': 0,
                '282': 0,
                '283': 0,
                '284': 0,
                '285': 0,
                '286': 0,
                '287': 0,
                '288': 0,
                '289': 0,
                '290': 0,
                '291': 0,
                '292': 0,
                '293': 0,
                '294': 0,
                '295': 0,
                '296': 0,
                '297': 0,
                '298': 0,
                '299': 0,
                '300': 0,
                '301': 0,
                '302': 0,
                '303': 0,
                '304': 0,
                '305': 0,
                '306': 0,
                '307': 0,
                '308': 0,
                '309': 0,
                '310': 0,
                '311': 0,
                '312': 0,
                '313': 0,
                '314': 0,
                '315': 0,
                '316': 0,
                '317': 0,
                '318': 0,
                '319': 0,
                '320': 0,
                '321': 0,
                '322': 0,
                '323': 0,
                '324': 0,
                '325': 0,
                '326': 0,
                '327': 0,
                '328': 0,
                '329': 0,
                '330': 0,
                '331': 0,
                '332': 0,
                '333': 0,
                '334': 0,
                '335': 0,
                '336': 0,
                '337': 0,
                '338': 0,
                '339': 0,
                '340': 0,
                '341': 0,
                '342': 0,
                '343': 0,
                '344': 0,
                '345': 0,
                '346': 0,
                '347': 0,
                '348': 0,
                '349': 0,
                '350': 0,
                '351': 0,
                '352': 0,
                '353': 0,
                '354': 0,
                '355': 0,
                '356': 0,
                '357': 0,
                '358': 0,
                '359': 0,
                '360': 0,
                '361': 0,
                '362': 0,
                '363': 0,
                '364': 0,
                '365': 0,
                '366': 0,
                '367': 0,
                '368': 0,
                '369': 0,
                '370': 0,
                '371': 0,
                '372': 0,
                '373': 0,
                '374': 0,
                '375': 0,
                '376': 0,
                '377': 0,
                '378': 0,
                '379': 0,
                '380': 0,
                '381': 0,
                '382': 0,
                '383': 0,
                '384': 0,
                '385': 0,
                '386': 0,
                '387': 0,
                '388': 0,
                '389': 0,
                '390': 0,
                '391': 0,
                '392': 0,
                '393': 0,
                '394': 0,
                '395': 0,
                '396': 0,
                '397': 0,
                '398': 0,
                '399': 0,
                '400': 0,
                '401': 0,
                '402': 0,
                '403': 0,
                '404': 0,
                '405': 0,
                '406': 0,
                '407': 0,
                '408': 0,
                '409': 0,
                '410': 0,
                '411': 0,
                '412': 0,
                '413': 0,
                '414': 0,
                '415': 0,
                '416': 0,
                '417': 0,
                '418': 0,
                '419': 0,
                '420': 0,
                '421': 0,
                '422': 0,
                '423': 0,
                '424': 0,
                '425': 0,
                '426': 0,
                '427': 0,
                '428': 0,
                '429': 0,
                '430': 0,
                '431': 0,
                '432': 0,
                '433': 0,
                '434': 0,
                '435': 0,
                '436': 0,
                '437': 0,
                '438': 0,
                '439': 0,
                '440': 0,
                '441': 0,
                '442': 0,
                '443': 0,
                '444': 0,
                '445': 0,
                '446': 0,
                '447': 0,
                '448': 0,
                '449': 0,
                '450': 0,
                '451': 0,
                '452': 0,
                '453': 0,
                '454': 0,
                '455': 0,
                '456': 0,
                '457': 0,
                '458': 0,
                '459': 0,
                '460': 0,
                '461': 0,
                '462': 0,
                '463': 0,
                '464': 0,
                '465': 0,
                '466': 0,
                '467': 0,
                '468': 0,
                '469': 0,
                '470': 0,
                '471': 0,
                '472': 0,
                '473': 0,
                '474': 0,
                '475': 0,
                '476': 0,
                '477': 0,
                '478': 0,
                '479': 0,
                '480': 0,
                '481': 0,
                '482': 0,
                '483': 0,
                '484': 0,
                '485': 0,
                '486': 0,
                '487': 0,
                '488': 0,
                '489': 0,
                '490': 0,
                '491': 0,
                '492': 0,
                '493': 0,
                '494': 0,
                '495': 0,
                '496': 0,
                '497': 0,
                '498': 0,
                '499': 0,
                '500': 0,
                '501': 0,
                '502': 0,
                '503': 0,
                '504': 0,
                '505': 0,
                '506': 0,
                '507': 0,
                '508': 0,
                '509': 0,
                '510': 0,
                '511': 0,
                '512': 0,
                '513': 0,
                '514': 0,
                '515': 0,
                '516': 0,
                '517': 0,
                '518': 0,
                '519': 0,
                '520': 0,
                '521': 0,
                '522': 0,
                '523': 0,
                '524': 0,
                '525': 0,
                '526': 0,
                '527': 0,
                '528': 0,
                '529': 0,
                '530': 0,
                '531': 0,
                '532': 0,
                '533': 0,
                '534': 0,
                '535': 0,
                '536': 0,
                '537': 0,
                '538': 0,
                '539': 0,
                '540': 0,
                '541': 0,
                '542': 0,
                '543': 0,
                '544': 0,
                '545': 0,
                '546': 0,
                '547': 0,
                '548': 0,
                '549': 0,
                '550': 0,
                '551': 0,
                '552': 0,
                '553': 0,
                '554': 0,
                '555': 0,
                '556': 0,
                '557': 0,
                '558': 0,
                '559': 0,
                '560': 0,
                '561': 0,
                '562': 0,
                '563': 0,
                '564': 0,
                '565': 0,
                '566': 0,
                '567': 0,
                '568': 0,
                '569': 0,
                '570': 0,
                '571': 0,
                '572': 0,
                '573': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0
              },
              b: {
                '0': [0],
                '1': [0],
                '2': [0, 0, 0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0, 0, 0, 0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0, 0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0],
                '20': [0, 0],
                '21': [0, 0],
                '22': [0, 0],
                '23': [0, 0],
                '24': [0, 0],
                '25': [0, 0],
                '26': [0, 0],
                '27': [0, 0],
                '28': [0, 0],
                '29': [0, 0],
                '30': [0, 0, 0],
                '31': [0, 0],
                '32': [0, 0],
                '33': [0, 0],
                '34': [0, 0],
                '35': [0, 0],
                '36': [0, 0],
                '37': [0, 0],
                '38': [0, 0],
                '39': [0, 0],
                '40': [0, 0],
                '41': [0, 0],
                '42': [0, 0],
                '43': [0, 0],
                '44': [0, 0],
                '45': [0, 0, 0],
                '46': [0, 0],
                '47': [0],
                '48': [0, 0],
                '49': [0, 0],
                '50': [0, 0],
                '51': [0, 0],
                '52': [0, 0],
                '53': [0, 0],
                '54': [0, 0],
                '55': [0, 0],
                '56': [0, 0],
                '57': [0, 0],
                '58': [0, 0],
                '59': [0, 0],
                '60': [0, 0],
                '61': [0, 0],
                '62': [0, 0],
                '63': [0, 0],
                '64': [0, 0],
                '65': [0, 0],
                '66': [0, 0],
                '67': [0, 0],
                '68': [0, 0],
                '69': [0, 0],
                '70': [0, 0],
                '71': [0, 0, 0, 0],
                '72': [0, 0],
                '73': [0, 0, 0, 0, 0, 0],
                '74': [0, 0],
                '75': [0, 0],
                '76': [0, 0, 0, 0, 0],
                '77': [0, 0],
                '78': [0, 0],
                '79': [0, 0],
                '80': [0, 0, 0, 0, 0, 0, 0, 0, 0],
                '81': [0, 0],
                '82': [0, 0],
                '83': [0, 0],
                '84': [0, 0],
                '85': [0, 0],
                '86': [0, 0],
                '87': [0, 0, 0],
                '88': [0, 0],
                '89': [0, 0, 0, 0],
                '90': [0, 0, 0],
                '91': [0, 0, 0],
                '92': [0, 0],
                '93': [0, 0],
                '94': [0, 0],
                '95': [0, 0],
                '96': [0, 0],
                '97': [0, 0],
                '98': [0, 0],
                '99': [0, 0],
                '100': [0, 0],
                '101': [0, 0],
                '102': [0, 0],
                '103': [0, 0],
                '104': [0, 0],
                '105': [0, 0],
                '106': [0, 0],
                '107': [0, 0, 0],
                '108': [0, 0, 0],
                '109': [0, 0],
                '110': [0, 0],
                '111': [0, 0],
                '112': [0, 0],
                '113': [0, 0],
                '114': [0, 0],
                '115': [0, 0],
                '116': [0, 0],
                '117': [0, 0],
                '118': [0, 0],
                '119': [0, 0],
                '120': [0, 0],
                '121': [0, 0],
                '122': [0, 0],
                '123': [0, 0],
                '124': [0, 0],
                '125': [0, 0],
                '126': [0, 0],
                '127': [0, 0],
                '128': [0, 0],
                '129': [0, 0],
                '130': [0, 0],
                '131': [0, 0],
                '132': [0, 0],
                '133': [0, 0],
                '134': [0, 0],
                '135': [0, 0],
                '136': [0, 0],
                '137': [0, 0],
                '138': [0, 0],
                '139': [0, 0],
                '140': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: 'abc32bf343547fcdab80bb1602af61b54880d734'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.symbol');
          _dereq_('core-js/modules/es.symbol.description');
          _dereq_('core-js/modules/es.symbol.iterator');
          _dereq_('core-js/modules/es.array.concat');
          _dereq_('core-js/modules/es.array.fill');
          _dereq_('core-js/modules/es.array.iterator');
          _dereq_('core-js/modules/es.array.join');
          _dereq_('core-js/modules/es.array.slice');
          _dereq_('core-js/modules/es.array.splice');
          _dereq_('core-js/modules/es.function.name');
          _dereq_('core-js/modules/es.number.to-fixed');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.regexp.exec');
          _dereq_('core-js/modules/es.string.iterator');
          _dereq_('core-js/modules/es.string.split');
          _dereq_('core-js/modules/web.dom-collections.iterator');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          var constants = _interopRequireWildcard(_dereq_('../core/constants'));
          function _getRequireWildcardCache() {
            if (typeof WeakMap !== 'function') return null;
            var cache = new WeakMap();
            _getRequireWildcardCache = function _getRequireWildcardCache() {
              return cache;
            };
            return cache;
          }
          function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
              return obj;
            }
            if (obj === null || (_typeof(obj) !== 'object' && typeof obj !== 'function')) {
              return { default: obj };
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
              return cache.get(obj);
            }
            var newObj = {};
            var hasPropertyDescriptor =
              Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
              if (Object.prototype.hasOwnProperty.call(obj, key)) {
                var desc = hasPropertyDescriptor
                  ? Object.getOwnPropertyDescriptor(obj, key)
                  : null;
                if (desc && (desc.get || desc.set)) {
                  Object.defineProperty(newObj, key, desc);
                } else {
                  newObj[key] = obj[key];
                }
              }
            }
            newObj.default = obj;
            if (cache) {
              cache.set(obj, newObj);
            }
            return newObj;
          }
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          function _typeof(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof = function _typeof(obj) {
                return typeof obj;
              };
            } else {
              _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof(obj);
          }
          cov_ip0rn67kt.s[0]++;

          /**
           * Base class for font handling
           * @class p5.Font
           * @constructor
           * @param {p5} [pInst] pointer to p5 instance
           */
          _main.default.Font = function(p) {
            cov_ip0rn67kt.f[0]++;
            cov_ip0rn67kt.s[1]++;
            this.parent = p;
            cov_ip0rn67kt.s[2]++;

            this.cache = {};

            /**
             * Underlying opentype font implementation
             * @property font
             */ cov_ip0rn67kt.s[3]++;
            this.font = undefined;
          };

          /**
           * Returns a tight bounding box for the given text string using this
           * font
           *
           * @method textBounds
           * @param  {String} line     a line of text
           * @param  {Number} x        x-position
           * @param  {Number} y        y-position
           * @param  {Number} [fontSize] font size to use (optional) Default is 12.
           * @param  {Object} [options] opentype options (optional)
           *                            opentype fonts contains alignment and baseline options.
           *                            Default is 'LEFT' and 'alphabetic'
           *
           * @return {Object}          a rectangle object with properties: x, y, w, h
           *
           * @example
           * <div>
           * <code>
           * let font;
           * let textString = 'Lorem ipsum dolor sit amet.';
           * function preload() {
           *   font = loadFont('./assets/Regular.otf');
           * }
           * function setup() {
           *   background(210);
           *
           *   let bbox = font.textBounds(textString, 10, 30, 12);
           *   fill(255);
           *   stroke(0);
           *   rect(bbox.x, bbox.y, bbox.w, bbox.h);
           *   fill(0);
           *   noStroke();
           *
           *   textFont(font);
           *   textSize(12);
           *   text(textString, 10, 30);
           * }
           * </code>
           * </div>
           *
           * @alt
           *words Lorem ipsum dol go off canvas and contained by white bounding box
           */ cov_ip0rn67kt.s[4]++;
          _main.default.Font.prototype.textBounds = function(str) {
            var x =
              arguments.length > 1 && arguments[1] !== undefined
                ? arguments[1]
                : (cov_ip0rn67kt.b[0][0]++, 0);
            var y =
              arguments.length > 2 && arguments[2] !== undefined
                ? arguments[2]
                : (cov_ip0rn67kt.b[1][0]++, 0);
            var fontSize = arguments.length > 3 ? arguments[3] : undefined;
            var opts = arguments.length > 4 ? arguments[4] : undefined;
            cov_ip0rn67kt.f[1]++;
            // Check cache for existing bounds. Take into consideration the text alignment
            // settings. Default alignment should match opentype's origin: left-aligned &
            // alphabetic baseline.
            var p = (cov_ip0rn67kt.s[5]++,
            ((cov_ip0rn67kt.b[2][0]++, opts) &&
              (cov_ip0rn67kt.b[2][1]++, opts.renderer) &&
              (cov_ip0rn67kt.b[2][2]++, opts.renderer._pInst)) ||
              (cov_ip0rn67kt.b[2][3]++, this.parent));

            var ctx = (cov_ip0rn67kt.s[6]++, p._renderer.drawingContext);
            var alignment = (cov_ip0rn67kt.s[7]++,
            (cov_ip0rn67kt.b[3][0]++, ctx.textAlign) ||
              (cov_ip0rn67kt.b[3][1]++, constants.LEFT));
            var baseline = (cov_ip0rn67kt.s[8]++,
            (cov_ip0rn67kt.b[4][0]++, ctx.textBaseline) ||
              (cov_ip0rn67kt.b[4][1]++, constants.BASELINE));
            var cacheResults = (cov_ip0rn67kt.s[9]++, false);
            var result;
            var key;
            cov_ip0rn67kt.s[10]++;

            fontSize =
              (cov_ip0rn67kt.b[5][0]++, fontSize) ||
              (cov_ip0rn67kt.b[5][1]++, p._renderer._textSize);

            // NOTE: cache disabled for now pending further discussion of #3436
            cov_ip0rn67kt.s[11]++;
            if (cacheResults) {
              cov_ip0rn67kt.b[6][0]++;
              cov_ip0rn67kt.s[12]++;
              key = cacheKey('textBounds', str, x, y, fontSize, alignment, baseline);
              cov_ip0rn67kt.s[13]++;
              result = this.cache[key];
            } else {
              cov_ip0rn67kt.b[6][1]++;
            }
            cov_ip0rn67kt.s[14]++;

            if (!result) {
              cov_ip0rn67kt.b[7][0]++;
              var minX = (cov_ip0rn67kt.s[15]++, []);
              var minY;
              var maxX = (cov_ip0rn67kt.s[16]++, []);
              var maxY;
              var pos;
              var xCoords = (cov_ip0rn67kt.s[17]++, []);
              cov_ip0rn67kt.s[18]++;
              xCoords[0] = [];
              var yCoords = (cov_ip0rn67kt.s[19]++, []);
              var scale = (cov_ip0rn67kt.s[20]++, this._scale(fontSize));
              var lineHeight = (cov_ip0rn67kt.s[21]++, p._renderer.textLeading());
              var lineCount = (cov_ip0rn67kt.s[22]++, 0);
              cov_ip0rn67kt.s[23]++;

              this.font.forEachGlyph(str, x, y, fontSize, opts, function(
                glyph,
                gX,
                gY,
                gFontSize
              ) {
                cov_ip0rn67kt.f[2]++;
                var gm = (cov_ip0rn67kt.s[24]++, glyph.getMetrics());
                cov_ip0rn67kt.s[25]++;
                if (
                  (cov_ip0rn67kt.b[9][0]++, glyph.index === 0) ||
                  (cov_ip0rn67kt.b[9][1]++, glyph.index === 10)
                ) {
                  cov_ip0rn67kt.b[8][0]++;
                  cov_ip0rn67kt.s[26]++;
                  lineCount += 1;
                  cov_ip0rn67kt.s[27]++;
                  xCoords[lineCount] = [];
                } else {
                  cov_ip0rn67kt.b[8][1]++;
                  cov_ip0rn67kt.s[28]++;
                  xCoords[lineCount].push(gX + gm.xMin * scale);
                  cov_ip0rn67kt.s[29]++;
                  xCoords[lineCount].push(gX + gm.xMax * scale);
                  cov_ip0rn67kt.s[30]++;
                  yCoords.push(gY + lineCount * lineHeight + -gm.yMin * scale);
                  cov_ip0rn67kt.s[31]++;
                  yCoords.push(gY + lineCount * lineHeight + -gm.yMax * scale);
                }
              });
              cov_ip0rn67kt.s[32]++;

              if (xCoords[lineCount].length > 0) {
                cov_ip0rn67kt.b[10][0]++;
                cov_ip0rn67kt.s[33]++;
                minX[lineCount] = Math.min.apply(null, xCoords[lineCount]);
                cov_ip0rn67kt.s[34]++;
                maxX[lineCount] = Math.max.apply(null, xCoords[lineCount]);
              } else {
                cov_ip0rn67kt.b[10][1]++;
              }

              var finalMaxX = (cov_ip0rn67kt.s[35]++, 0);
              cov_ip0rn67kt.s[36]++;
              for (var i = (cov_ip0rn67kt.s[37]++, 0); i <= lineCount; i++) {
                cov_ip0rn67kt.s[38]++;
                minX[i] = Math.min.apply(null, xCoords[i]);
                cov_ip0rn67kt.s[39]++;
                maxX[i] = Math.max.apply(null, xCoords[i]);
                var lineLength = (cov_ip0rn67kt.s[40]++, maxX[i] - minX[i]);
                cov_ip0rn67kt.s[41]++;
                if (lineLength > finalMaxX) {
                  cov_ip0rn67kt.b[11][0]++;
                  cov_ip0rn67kt.s[42]++;
                  finalMaxX = lineLength;
                } else {
                  cov_ip0rn67kt.b[11][1]++;
                }
              }

              var finalMinX = (cov_ip0rn67kt.s[43]++, Math.min.apply(null, minX));
              cov_ip0rn67kt.s[44]++;
              minY = Math.min.apply(null, yCoords);
              cov_ip0rn67kt.s[45]++;
              maxY = Math.max.apply(null, yCoords);
              cov_ip0rn67kt.s[46]++;

              result = {
                x: finalMinX,
                y: minY,
                h: maxY - minY,
                w: finalMaxX,
                advance: finalMinX - x
              };

              // Bounds are now calculated, so shift the x & y to match alignment settings
              cov_ip0rn67kt.s[47]++;
              pos = this._handleAlignment(
                p._renderer,
                str,
                result.x,
                result.y,
                result.w + result.advance
              );
              cov_ip0rn67kt.s[48]++;

              result.x = pos.x;
              cov_ip0rn67kt.s[49]++;
              result.y = pos.y;
              cov_ip0rn67kt.s[50]++;

              if (cacheResults) {
                cov_ip0rn67kt.b[12][0]++;
                cov_ip0rn67kt.s[51]++;
                this.cache[key] = result;
              } else {
                cov_ip0rn67kt.b[12][1]++;
              }
            } else {
              cov_ip0rn67kt.b[7][1]++;
            }
            cov_ip0rn67kt.s[52]++;

            return result;
          };

          /**
           * Computes an array of points following the path for specified text
           *
           * @method textToPoints
           * @param  {String} txt     a line of text
           * @param  {Number} x        x-position
           * @param  {Number} y        y-position
           * @param  {Number} fontSize font size to use (optional)
           * @param  {Object} [options] an (optional) object that can contain:
           *
           * <br>sampleFactor - the ratio of path-length to number of samples
           * (default=.1); higher values yield more points and are therefore
           * more precise
           *
           * <br>simplifyThreshold - if set to a non-zero value, collinear points will be
           * be removed from the polygon; the value represents the threshold angle to use
           * when determining whether two edges are collinear
           *
           * @return {Array}  an array of points, each with x, y, alpha (the path angle)
           * @example
           * <div>
           * <code>
           * let font;
           * function preload() {
           *   font = loadFont('assets/inconsolata.otf');
           * }
           *
           * let points;
           * let bounds;
           * function setup() {
           *   createCanvas(100, 100);
           *   stroke(0);
           *   fill(255, 104, 204);
           *
           *   points = font.textToPoints('p5', 0, 0, 10, {
           *     sampleFactor: 5,
           *     simplifyThreshold: 0
           *   });
           *   bounds = font.textBounds(' p5 ', 0, 0, 10);
           * }
           *
           * function draw() {
           *   background(255);
           *   beginShape();
           *   translate(-bounds.x * width / bounds.w, -bounds.y * height / bounds.h);
           *   for (let i = 0; i < points.length; i++) {
           *     let p = points[i];
           *     vertex(
           *       p.x * width / bounds.w +
           *         sin(20 * p.y / bounds.h + millis() / 1000) * width / 30,
           *       p.y * height / bounds.h
           *     );
           *   }
           *   endShape(CLOSE);
           * }
           * </code>
           * </div>
           */ cov_ip0rn67kt.s[53]++;
          _main.default.Font.prototype.textToPoints = function(
            txt,
            x,
            y,
            fontSize,
            options
          ) {
            cov_ip0rn67kt.f[3]++;
            var xoff = (cov_ip0rn67kt.s[54]++, 0);
            var result = (cov_ip0rn67kt.s[55]++, []);
            var glyphs = (cov_ip0rn67kt.s[56]++, this._getGlyphs(txt));

            function isSpace(i) {
              cov_ip0rn67kt.f[4]++;
              cov_ip0rn67kt.s[57]++;
              return (
                ((cov_ip0rn67kt.b[13][0]++, glyphs[i].name) &&
                  (cov_ip0rn67kt.b[13][1]++, glyphs[i].name === 'space')) ||
                ((cov_ip0rn67kt.b[13][2]++, txt.length === glyphs.length) &&
                  (cov_ip0rn67kt.b[13][3]++, txt[i] === ' ')) ||
                ((cov_ip0rn67kt.b[13][4]++, glyphs[i].index) &&
                  (cov_ip0rn67kt.b[13][5]++, glyphs[i].index === 3))
              );
            }
            cov_ip0rn67kt.s[58]++;

            fontSize =
              (cov_ip0rn67kt.b[14][0]++, fontSize) ||
              (cov_ip0rn67kt.b[14][1]++, this.parent._renderer._textSize);
            cov_ip0rn67kt.s[59]++;

            for (var i = (cov_ip0rn67kt.s[60]++, 0); i < glyphs.length; i++) {
              cov_ip0rn67kt.s[61]++;
              if (!isSpace(i)) {
                cov_ip0rn67kt.b[15][0]++;
                // fix to #1817, #2069

                var gpath = (cov_ip0rn67kt.s[62]++, glyphs[i].getPath(x, y, fontSize)),
                  paths = (cov_ip0rn67kt.s[63]++, splitPaths(gpath.commands));
                cov_ip0rn67kt.s[64]++;

                for (var j = (cov_ip0rn67kt.s[65]++, 0); j < paths.length; j++) {
                  var pts = (cov_ip0rn67kt.s[66]++, pathToPoints(paths[j], options));
                  cov_ip0rn67kt.s[67]++;

                  for (var k = (cov_ip0rn67kt.s[68]++, 0); k < pts.length; k++) {
                    cov_ip0rn67kt.s[69]++;
                    pts[k].x += xoff;
                    cov_ip0rn67kt.s[70]++;
                    result.push(pts[k]);
                  }
                }
              } else {
                cov_ip0rn67kt.b[15][1]++;
              }
              cov_ip0rn67kt.s[71]++;

              xoff += glyphs[i].advanceWidth * this._scale(fontSize);
            }
            cov_ip0rn67kt.s[72]++;

            return result;
          };

          // ----------------------------- End API ------------------------------

          /**
           * Returns the set of opentype glyphs for the supplied string.
           *
           * Note that there is not a strict one-to-one mapping between characters
           * and glyphs, so the list of returned glyphs can be larger or smaller
           *  than the length of the given string.
           *
           * @private
           * @param  {String} str the string to be converted
           * @return {Array}     the opentype glyphs
           */ cov_ip0rn67kt.s[73]++;
          _main.default.Font.prototype._getGlyphs = function(str) {
            cov_ip0rn67kt.f[5]++;
            cov_ip0rn67kt.s[74]++;
            return this.font.stringToGlyphs(str);
          };

          /**
           * Returns an opentype path for the supplied string and position.
           *
           * @private
           * @param  {String} line     a line of text
           * @param  {Number} x        x-position
           * @param  {Number} y        y-position
           * @param  {Object} options opentype options (optional)
           * @return {Object}     the opentype path
           */ cov_ip0rn67kt.s[75]++;
          _main.default.Font.prototype._getPath = function(line, x, y, options) {
            cov_ip0rn67kt.f[6]++;
            var p = (cov_ip0rn67kt.s[76]++,
              ((cov_ip0rn67kt.b[16][0]++, options) &&
                (cov_ip0rn67kt.b[16][1]++, options.renderer) &&
                (cov_ip0rn67kt.b[16][2]++, options.renderer._pInst)) ||
                (cov_ip0rn67kt.b[16][3]++, this.parent)),
              renderer = (cov_ip0rn67kt.s[77]++, p._renderer),
              pos = (cov_ip0rn67kt.s[78]++, this._handleAlignment(renderer, line, x, y));
            cov_ip0rn67kt.s[79]++;

            return this.font.getPath(line, pos.x, pos.y, renderer._textSize, options);
          };

          /*
    * Creates an SVG-formatted path-data string
    * (See http://www.w3.org/TR/SVG/paths.html#PathData)
    * from the given opentype path or string/position
    *
    * @param  {Object} path    an opentype path, OR the following:
    *
    * @param  {String} line     a line of text
    * @param  {Number} x        x-position
    * @param  {Number} y        y-position
    * @param  {Object} options opentype options (optional), set options.decimals
    * to set the decimal precision of the path-data
    *
    * @return {Object}     this p5.Font object
    */ cov_ip0rn67kt
            .s[80]++;
          _main.default.Font.prototype._getPathData = function(line, x, y, options) {
            cov_ip0rn67kt.f[7]++;
            var decimals = (cov_ip0rn67kt.s[81]++, 3);

            // create path from string/position
            cov_ip0rn67kt.s[82]++;
            if (
              (cov_ip0rn67kt.b[18][0]++, typeof line === 'string') &&
              (cov_ip0rn67kt.b[18][1]++, arguments.length > 2)
            ) {
              cov_ip0rn67kt.b[17][0]++;
              cov_ip0rn67kt.s[83]++;
              line = this._getPath(line, x, y, options);
            } else {
              cov_ip0rn67kt.b[17][1]++;
              cov_ip0rn67kt.s[84]++;
              if (_typeof(x) === 'object') {
                cov_ip0rn67kt.b[19][0]++;
                cov_ip0rn67kt.s[85]++;
                // handle options specified in 2nd arg
                options = x;
              } else {
                cov_ip0rn67kt.b[19][1]++;
              }
            }

            // handle svg arguments
            cov_ip0rn67kt.s[86]++;
            if (
              (cov_ip0rn67kt.b[21][0]++, options) &&
              (cov_ip0rn67kt.b[21][1]++, typeof options.decimals === 'number')
            ) {
              cov_ip0rn67kt.b[20][0]++;
              cov_ip0rn67kt.s[87]++;
              decimals = options.decimals;
            } else {
              cov_ip0rn67kt.b[20][1]++;
            }
            cov_ip0rn67kt.s[88]++;

            return line.toPathData(decimals);
          };

          /*
    * Creates an SVG <path> element, as a string,
    * from the given opentype path or string/position
    *
    * @param  {Object} path    an opentype path, OR the following:
    *
    * @param  {String} line     a line of text
    * @param  {Number} x        x-position
    * @param  {Number} y        y-position
    * @param  {Object} options opentype options (optional), set options.decimals
    * to set the decimal precision of the path-data in the <path> element,
    *  options.fill to set the fill color for the <path> element,
    *  options.stroke to set the stroke color for the <path> element,
    *  options.strokeWidth to set the strokeWidth for the <path> element.
    *
    * @return {Object}     this p5.Font object
    */ cov_ip0rn67kt
            .s[89]++;
          _main.default.Font.prototype._getSVG = function(line, x, y, options) {
            cov_ip0rn67kt.f[8]++;
            var decimals = (cov_ip0rn67kt.s[90]++, 3);

            // create path from string/position
            cov_ip0rn67kt.s[91]++;
            if (
              (cov_ip0rn67kt.b[23][0]++, typeof line === 'string') &&
              (cov_ip0rn67kt.b[23][1]++, arguments.length > 2)
            ) {
              cov_ip0rn67kt.b[22][0]++;
              cov_ip0rn67kt.s[92]++;
              line = this._getPath(line, x, y, options);
            } else {
              cov_ip0rn67kt.b[22][1]++;
              cov_ip0rn67kt.s[93]++;
              if (_typeof(x) === 'object') {
                cov_ip0rn67kt.b[24][0]++;
                cov_ip0rn67kt.s[94]++;
                // handle options specified in 2nd arg
                options = x;
              } else {
                cov_ip0rn67kt.b[24][1]++;
              }
            }

            // handle svg arguments
            cov_ip0rn67kt.s[95]++;
            if (options) {
              cov_ip0rn67kt.b[25][0]++;
              cov_ip0rn67kt.s[96]++;
              if (typeof options.decimals === 'number') {
                cov_ip0rn67kt.b[26][0]++;
                cov_ip0rn67kt.s[97]++;
                decimals = options.decimals;
              } else {
                cov_ip0rn67kt.b[26][1]++;
              }
              cov_ip0rn67kt.s[98]++;
              if (typeof options.strokeWidth === 'number') {
                cov_ip0rn67kt.b[27][0]++;
                cov_ip0rn67kt.s[99]++;
                line.strokeWidth = options.strokeWidth;
              } else {
                cov_ip0rn67kt.b[27][1]++;
              }
              cov_ip0rn67kt.s[100]++;
              if (typeof options.fill !== 'undefined') {
                cov_ip0rn67kt.b[28][0]++;
                cov_ip0rn67kt.s[101]++;
                line.fill = options.fill;
              } else {
                cov_ip0rn67kt.b[28][1]++;
              }
              cov_ip0rn67kt.s[102]++;
              if (typeof options.stroke !== 'undefined') {
                cov_ip0rn67kt.b[29][0]++;
                cov_ip0rn67kt.s[103]++;
                line.stroke = options.stroke;
              } else {
                cov_ip0rn67kt.b[29][1]++;
              }
            } else {
              cov_ip0rn67kt.b[25][1]++;
            }
            cov_ip0rn67kt.s[104]++;

            return line.toSVG(decimals);
          };

          /*
    * Renders an opentype path or string/position
    * to the current graphics context
    *
    * @param  {Object} path    an opentype path, OR the following:
    *
    * @param  {String} line     a line of text
    * @param  {Number} x        x-position
    * @param  {Number} y        y-position
    * @param  {Object} options opentype options (optional)
    *
    * @return {p5.Font}     this p5.Font object
    */ cov_ip0rn67kt
            .s[105]++;
          _main.default.Font.prototype._renderPath = function(line, x, y, options) {
            cov_ip0rn67kt.f[9]++;
            var pdata;
            var pg = (cov_ip0rn67kt.s[106]++,
            ((cov_ip0rn67kt.b[30][0]++, options) &&
              (cov_ip0rn67kt.b[30][1]++, options.renderer)) ||
              (cov_ip0rn67kt.b[30][2]++, this.parent._renderer));
            var ctx = (cov_ip0rn67kt.s[107]++, pg.drawingContext);
            cov_ip0rn67kt.s[108]++;

            if (
              (cov_ip0rn67kt.b[32][0]++, _typeof(line) === 'object') &&
              (cov_ip0rn67kt.b[32][1]++, line.commands)
            ) {
              cov_ip0rn67kt.b[31][0]++;
              cov_ip0rn67kt.s[109]++;
              pdata = line.commands;
            } else {
              cov_ip0rn67kt.b[31][1]++;
              cov_ip0rn67kt.s[110]++;
              //pos = handleAlignment(p, ctx, line, x, y);
              pdata = this._getPath(line, x, y, options).commands;
            }
            cov_ip0rn67kt.s[111]++;

            ctx.beginPath();
            cov_ip0rn67kt.s[112]++;
            var _iteratorNormalCompletion = true;
            var _didIteratorError = false;
            var _iteratorError = undefined;
            try {
              for (
                var _iterator = pdata[Symbol.iterator](), _step;
                !(_iteratorNormalCompletion = (_step = _iterator.next()).done);
                _iteratorNormalCompletion = true
              ) {
                var cmd = _step.value;
                cov_ip0rn67kt.s[113]++;
                if (cmd.type === 'M') {
                  cov_ip0rn67kt.b[33][0]++;
                  cov_ip0rn67kt.s[114]++;
                  ctx.moveTo(cmd.x, cmd.y);
                } else {
                  cov_ip0rn67kt.b[33][1]++;
                  cov_ip0rn67kt.s[115]++;
                  if (cmd.type === 'L') {
                    cov_ip0rn67kt.b[34][0]++;
                    cov_ip0rn67kt.s[116]++;
                    ctx.lineTo(cmd.x, cmd.y);
                  } else {
                    cov_ip0rn67kt.b[34][1]++;
                    cov_ip0rn67kt.s[117]++;
                    if (cmd.type === 'C') {
                      cov_ip0rn67kt.b[35][0]++;
                      cov_ip0rn67kt.s[118]++;
                      ctx.bezierCurveTo(cmd.x1, cmd.y1, cmd.x2, cmd.y2, cmd.x, cmd.y);
                    } else {
                      cov_ip0rn67kt.b[35][1]++;
                      cov_ip0rn67kt.s[119]++;
                      if (cmd.type === 'Q') {
                        cov_ip0rn67kt.b[36][0]++;
                        cov_ip0rn67kt.s[120]++;
                        ctx.quadraticCurveTo(cmd.x1, cmd.y1, cmd.x, cmd.y);
                      } else {
                        cov_ip0rn67kt.b[36][1]++;
                        cov_ip0rn67kt.s[121]++;
                        if (cmd.type === 'Z') {
                          cov_ip0rn67kt.b[37][0]++;
                          cov_ip0rn67kt.s[122]++;
                          ctx.closePath();
                        } else {
                          cov_ip0rn67kt.b[37][1]++;
                        }
                      }
                    }
                  }
                }
              }

              // only draw stroke if manually set by user
            } catch (err) {
              _didIteratorError = true;
              _iteratorError = err;
            } finally {
              try {
                if (!_iteratorNormalCompletion && _iterator.return != null) {
                  _iterator.return();
                }
              } finally {
                if (_didIteratorError) {
                  throw _iteratorError;
                }
              }
            }
            cov_ip0rn67kt.s[123]++;
            if (
              (cov_ip0rn67kt.b[39][0]++, pg._doStroke) &&
              (cov_ip0rn67kt.b[39][1]++, pg._strokeSet)
            ) {
              cov_ip0rn67kt.b[38][0]++;
              cov_ip0rn67kt.s[124]++;
              ctx.stroke();
            } else {
              cov_ip0rn67kt.b[38][1]++;
            }
            cov_ip0rn67kt.s[125]++;

            if (pg._doFill) {
              cov_ip0rn67kt.b[40][0]++;
              cov_ip0rn67kt.s[126]++;
              // if fill hasn't been set by user, use default-text-fill
              if (!pg._fillSet) {
                cov_ip0rn67kt.b[41][0]++;
                cov_ip0rn67kt.s[127]++;
                pg._setFill(constants._DEFAULT_TEXT_FILL);
              } else {
                cov_ip0rn67kt.b[41][1]++;
              }
              cov_ip0rn67kt.s[128]++;
              ctx.fill();
            } else {
              cov_ip0rn67kt.b[40][1]++;
            }
            cov_ip0rn67kt.s[129]++;

            return this;
          };
          cov_ip0rn67kt.s[130]++;

          _main.default.Font.prototype._textWidth = function(str, fontSize) {
            cov_ip0rn67kt.f[10]++;
            cov_ip0rn67kt.s[131]++;
            return this.font.getAdvanceWidth(str, fontSize);
          };
          cov_ip0rn67kt.s[132]++;

          _main.default.Font.prototype._textAscent = function(fontSize) {
            cov_ip0rn67kt.f[11]++;
            cov_ip0rn67kt.s[133]++;
            return this.font.ascender * this._scale(fontSize);
          };
          cov_ip0rn67kt.s[134]++;

          _main.default.Font.prototype._textDescent = function(fontSize) {
            cov_ip0rn67kt.f[12]++;
            cov_ip0rn67kt.s[135]++;
            return -this.font.descender * this._scale(fontSize);
          };
          cov_ip0rn67kt.s[136]++;

          _main.default.Font.prototype._scale = function(fontSize) {
            cov_ip0rn67kt.f[13]++;
            cov_ip0rn67kt.s[137]++;
            return (
              1 /
              this.font.unitsPerEm *
              ((cov_ip0rn67kt.b[42][0]++, fontSize) ||
                (cov_ip0rn67kt.b[42][1]++, this.parent._renderer._textSize))
            );
          };
          cov_ip0rn67kt.s[138]++;

          _main.default.Font.prototype._handleAlignment = function(
            renderer,
            line,
            x,
            y,
            textWidth
          ) {
            cov_ip0rn67kt.f[14]++;
            var fontSize = (cov_ip0rn67kt.s[139]++, renderer._textSize);
            cov_ip0rn67kt.s[140]++;

            if (typeof textWidth === 'undefined') {
              cov_ip0rn67kt.b[43][0]++;
              cov_ip0rn67kt.s[141]++;
              textWidth = this._textWidth(line, fontSize);
            } else {
              cov_ip0rn67kt.b[43][1]++;
            }
            cov_ip0rn67kt.s[142]++;

            switch (renderer._textAlign) {
              case constants.CENTER:
                cov_ip0rn67kt.b[44][0]++;
                cov_ip0rn67kt.s[143]++;
                x -= textWidth / 2;
                cov_ip0rn67kt.s[144]++;
                break;
              case constants.RIGHT:
                cov_ip0rn67kt.b[44][1]++;
                cov_ip0rn67kt.s[145]++;
                x -= textWidth;
                cov_ip0rn67kt.s[146]++;
                break;
            }
            cov_ip0rn67kt.s[147]++;

            switch (renderer._textBaseline) {
              case constants.TOP:
                cov_ip0rn67kt.b[45][0]++;
                cov_ip0rn67kt.s[148]++;
                y += this._textAscent(fontSize);
                cov_ip0rn67kt.s[149]++;
                break;
              case constants.CENTER:
                cov_ip0rn67kt.b[45][1]++;
                cov_ip0rn67kt.s[150]++;
                y += this._textAscent(fontSize) / 2;
                cov_ip0rn67kt.s[151]++;
                break;
              case constants.BOTTOM:
                cov_ip0rn67kt.b[45][2]++;
                cov_ip0rn67kt.s[152]++;
                y -= this._textDescent(fontSize);
                cov_ip0rn67kt.s[153]++;
                break;
            }
            cov_ip0rn67kt.s[154]++;

            return { x: x, y: y };
          };

          // path-utils

          function pathToPoints(cmds, options) {
            cov_ip0rn67kt.f[15]++;
            var opts = (cov_ip0rn67kt.s[155]++,
            parseOpts(options, {
              sampleFactor: 0.1,
              simplifyThreshold: 0
            }));

            var // total-length
              len = (cov_ip0rn67kt.s[156]++, pointAtLength(cmds, 0, 1)),
              t = (cov_ip0rn67kt.s[157]++, len / (len * opts.sampleFactor)),
              pts = (cov_ip0rn67kt.s[158]++, []);
            cov_ip0rn67kt.s[159]++;

            for (var i = (cov_ip0rn67kt.s[160]++, 0); i < len; i += t) {
              cov_ip0rn67kt.s[161]++;
              pts.push(pointAtLength(cmds, i));
            }
            cov_ip0rn67kt.s[162]++;

            if (opts.simplifyThreshold) {
              cov_ip0rn67kt.b[46][0]++;
              cov_ip0rn67kt.s[163]++;
              simplify(pts, opts.simplifyThreshold);
            } else {
              cov_ip0rn67kt.b[46][1]++;
            }
            cov_ip0rn67kt.s[164]++;

            return pts;
          }

          function simplify(pts) {
            var angle =
              arguments.length > 1 && arguments[1] !== undefined
                ? arguments[1]
                : (cov_ip0rn67kt.b[47][0]++, 0);
            cov_ip0rn67kt.f[16]++;
            var num = (cov_ip0rn67kt.s[165]++, 0);
            cov_ip0rn67kt.s[166]++;
            for (
              var i = (cov_ip0rn67kt.s[167]++, pts.length - 1);
              (cov_ip0rn67kt.b[48][0]++, pts.length > 3) &&
              (cov_ip0rn67kt.b[48][1]++, i >= 0);
              --i
            ) {
              cov_ip0rn67kt.s[168]++;
              if (collinear(at(pts, i - 1), at(pts, i), at(pts, i + 1), angle)) {
                cov_ip0rn67kt.b[49][0]++;
                cov_ip0rn67kt.s[169]++;
                // Remove the middle point
                pts.splice(i % pts.length, 1);
                cov_ip0rn67kt.s[170]++;
                num++;
              } else {
                cov_ip0rn67kt.b[49][1]++;
              }
            }
            cov_ip0rn67kt.s[171]++;
            return num;
          }

          function splitPaths(cmds) {
            cov_ip0rn67kt.f[17]++;
            var paths = (cov_ip0rn67kt.s[172]++, []);
            var current;
            cov_ip0rn67kt.s[173]++;
            for (var i = (cov_ip0rn67kt.s[174]++, 0); i < cmds.length; i++) {
              cov_ip0rn67kt.s[175]++;
              if (cmds[i].type === 'M') {
                cov_ip0rn67kt.b[50][0]++;
                cov_ip0rn67kt.s[176]++;
                if (current) {
                  cov_ip0rn67kt.b[51][0]++;
                  cov_ip0rn67kt.s[177]++;
                  paths.push(current);
                } else {
                  cov_ip0rn67kt.b[51][1]++;
                }
                cov_ip0rn67kt.s[178]++;
                current = [];
              } else {
                cov_ip0rn67kt.b[50][1]++;
              }
              cov_ip0rn67kt.s[179]++;
              current.push(cmdToArr(cmds[i]));
            }
            cov_ip0rn67kt.s[180]++;
            paths.push(current);
            cov_ip0rn67kt.s[181]++;

            return paths;
          }

          function cmdToArr(cmd) {
            cov_ip0rn67kt.f[18]++;
            var arr = (cov_ip0rn67kt.s[182]++, [cmd.type]);
            cov_ip0rn67kt.s[183]++;
            if (
              (cov_ip0rn67kt.b[53][0]++, cmd.type === 'M') ||
              (cov_ip0rn67kt.b[53][1]++, cmd.type === 'L')
            ) {
              cov_ip0rn67kt.b[52][0]++;
              cov_ip0rn67kt.s[184]++;
              // moveto or lineto
              arr.push(cmd.x, cmd.y);
            } else {
              cov_ip0rn67kt.b[52][1]++;
              cov_ip0rn67kt.s[185]++;
              if (cmd.type === 'C') {
                cov_ip0rn67kt.b[54][0]++;
                cov_ip0rn67kt.s[186]++;
                arr.push(cmd.x1, cmd.y1, cmd.x2, cmd.y2, cmd.x, cmd.y);
              } else {
                cov_ip0rn67kt.b[54][1]++;
                cov_ip0rn67kt.s[187]++;
                if (cmd.type === 'Q') {
                  cov_ip0rn67kt.b[55][0]++;
                  cov_ip0rn67kt.s[188]++;
                  arr.push(cmd.x1, cmd.y1, cmd.x, cmd.y);
                } else {
                  cov_ip0rn67kt.b[55][1]++;
                }
              }
            }
            // else if (cmd.type === 'Z') { /* no-op */ }
            cov_ip0rn67kt.s[189]++;
            return arr;
          }

          function parseOpts(options, defaults) {
            cov_ip0rn67kt.f[19]++;
            cov_ip0rn67kt.s[190]++;
            if (_typeof(options) !== 'object') {
              cov_ip0rn67kt.b[56][0]++;
              cov_ip0rn67kt.s[191]++;
              options = defaults;
            } else {
              cov_ip0rn67kt.b[56][1]++;
              cov_ip0rn67kt.s[192]++;
              for (var key in defaults) {
                cov_ip0rn67kt.s[193]++;
                if (typeof options[key] === 'undefined') {
                  cov_ip0rn67kt.b[57][0]++;
                  cov_ip0rn67kt.s[194]++;
                  options[key] = defaults[key];
                } else {
                  cov_ip0rn67kt.b[57][1]++;
                }
              }
            }
            cov_ip0rn67kt.s[195]++;
            return options;
          }

          //////////////////////// Helpers ////////////////////////////

          function at(v, i) {
            cov_ip0rn67kt.f[20]++;
            var s = (cov_ip0rn67kt.s[196]++, v.length);
            cov_ip0rn67kt.s[197]++;
            return v[
              i < 0
                ? (cov_ip0rn67kt.b[58][0]++, i % s + s)
                : (cov_ip0rn67kt.b[58][1]++, i % s)
            ];
          }

          function collinear(a, b, c, thresholdAngle) {
            cov_ip0rn67kt.f[21]++;
            cov_ip0rn67kt.s[198]++;
            if (!thresholdAngle) {
              cov_ip0rn67kt.b[59][0]++;
              cov_ip0rn67kt.s[199]++;
              return areaTriangle(a, b, c) === 0;
            } else {
              cov_ip0rn67kt.b[59][1]++;
            }
            cov_ip0rn67kt.s[200]++;

            if (typeof collinear.tmpPoint1 === 'undefined') {
              cov_ip0rn67kt.b[60][0]++;
              cov_ip0rn67kt.s[201]++;
              collinear.tmpPoint1 = [];
              cov_ip0rn67kt.s[202]++;
              collinear.tmpPoint2 = [];
            } else {
              cov_ip0rn67kt.b[60][1]++;
            }

            var ab = (cov_ip0rn67kt.s[203]++, collinear.tmpPoint1),
              bc = (cov_ip0rn67kt.s[204]++, collinear.tmpPoint2);
            cov_ip0rn67kt.s[205]++;
            ab.x = b.x - a.x;
            cov_ip0rn67kt.s[206]++;
            ab.y = b.y - a.y;
            cov_ip0rn67kt.s[207]++;
            bc.x = c.x - b.x;
            cov_ip0rn67kt.s[208]++;
            bc.y = c.y - b.y;

            var dot = (cov_ip0rn67kt.s[209]++, ab.x * bc.x + ab.y * bc.y),
              magA = (cov_ip0rn67kt.s[210]++, Math.sqrt(ab.x * ab.x + ab.y * ab.y)),
              magB = (cov_ip0rn67kt.s[211]++, Math.sqrt(bc.x * bc.x + bc.y * bc.y)),
              angle = (cov_ip0rn67kt.s[212]++, Math.acos(dot / (magA * magB)));
            cov_ip0rn67kt.s[213]++;

            return angle < thresholdAngle;
          }

          function areaTriangle(a, b, c) {
            cov_ip0rn67kt.f[22]++;
            cov_ip0rn67kt.s[214]++;
            return (b[0] - a[0]) * (c[1] - a[1]) - (c[0] - a[0]) * (b[1] - a[1]);
          }

          // Portions of below code copyright 2008 Dmitry Baranovskiy (via MIT license)

          function findDotsAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {
            cov_ip0rn67kt.f[23]++;
            var t1 = (cov_ip0rn67kt.s[215]++, 1 - t);
            var t13 = (cov_ip0rn67kt.s[216]++, Math.pow(t1, 3));
            var t12 = (cov_ip0rn67kt.s[217]++, Math.pow(t1, 2));
            var t2 = (cov_ip0rn67kt.s[218]++, t * t);
            var t3 = (cov_ip0rn67kt.s[219]++, t2 * t);
            var x = (cov_ip0rn67kt.s[220]++,
            t13 * p1x + t12 * 3 * t * c1x + t1 * 3 * t * t * c2x + t3 * p2x);
            var y = (cov_ip0rn67kt.s[221]++,
            t13 * p1y + t12 * 3 * t * c1y + t1 * 3 * t * t * c2y + t3 * p2y);
            var mx = (cov_ip0rn67kt.s[222]++,
            p1x + 2 * t * (c1x - p1x) + t2 * (c2x - 2 * c1x + p1x));
            var my = (cov_ip0rn67kt.s[223]++,
            p1y + 2 * t * (c1y - p1y) + t2 * (c2y - 2 * c1y + p1y));
            var nx = (cov_ip0rn67kt.s[224]++,
            c1x + 2 * t * (c2x - c1x) + t2 * (p2x - 2 * c2x + c1x));
            var ny = (cov_ip0rn67kt.s[225]++,
            c1y + 2 * t * (c2y - c1y) + t2 * (p2y - 2 * c2y + c1y));
            var ax = (cov_ip0rn67kt.s[226]++, t1 * p1x + t * c1x);
            var ay = (cov_ip0rn67kt.s[227]++, t1 * p1y + t * c1y);
            var cx = (cov_ip0rn67kt.s[228]++, t1 * c2x + t * p2x);
            var cy = (cov_ip0rn67kt.s[229]++, t1 * c2y + t * p2y);
            var alpha = (cov_ip0rn67kt.s[230]++,
            90 - Math.atan2(mx - nx, my - ny) * 180 / Math.PI);
            cov_ip0rn67kt.s[231]++;

            if (
              (cov_ip0rn67kt.b[62][0]++, mx > nx) ||
              (cov_ip0rn67kt.b[62][1]++, my < ny)
            ) {
              cov_ip0rn67kt.b[61][0]++;
              cov_ip0rn67kt.s[232]++;
              alpha += 180;
            } else {
              cov_ip0rn67kt.b[61][1]++;
            }
            cov_ip0rn67kt.s[233]++;

            return {
              x: x,
              y: y,
              m: { x: mx, y: my },
              n: { x: nx, y: ny },
              start: { x: ax, y: ay },
              end: { x: cx, y: cy },
              alpha: alpha
            };
          }

          function getPointAtSegmentLength(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, length) {
            cov_ip0rn67kt.f[24]++;
            cov_ip0rn67kt.s[234]++;
            return length == null
              ? (cov_ip0rn67kt.b[63][0]++, bezlen(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y))
              : (cov_ip0rn67kt.b[63][1]++,
                findDotsAtSegment(
                  p1x,
                  p1y,
                  c1x,
                  c1y,
                  c2x,
                  c2y,
                  p2x,
                  p2y,
                  getTatLen(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, length)
                ));
          }

          function pointAtLength(path, length, istotal) {
            cov_ip0rn67kt.f[25]++;
            cov_ip0rn67kt.s[235]++;
            path = path2curve(path);
            var x;
            var y;
            var p;
            var l;
            var sp = (cov_ip0rn67kt.s[236]++, '');
            var subpaths = (cov_ip0rn67kt.s[237]++, {});
            var point;
            var len = (cov_ip0rn67kt.s[238]++, 0);
            cov_ip0rn67kt.s[239]++;
            for (
              var i = (cov_ip0rn67kt.s[240]++, 0),
                ii = (cov_ip0rn67kt.s[241]++, path.length);
              i < ii;
              i++
            ) {
              cov_ip0rn67kt.s[242]++;
              p = path[i];
              cov_ip0rn67kt.s[243]++;
              if (p[0] === 'M') {
                cov_ip0rn67kt.b[64][0]++;
                cov_ip0rn67kt.s[244]++;
                x = +p[1];
                cov_ip0rn67kt.s[245]++;
                y = +p[2];
              } else {
                cov_ip0rn67kt.b[64][1]++;
                cov_ip0rn67kt.s[246]++;
                l = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6]);
                cov_ip0rn67kt.s[247]++;
                if (len + l > length) {
                  cov_ip0rn67kt.b[65][0]++;
                  cov_ip0rn67kt.s[248]++;
                  if (!istotal) {
                    cov_ip0rn67kt.b[66][0]++;
                    cov_ip0rn67kt.s[249]++;
                    point = getPointAtSegmentLength(
                      x,
                      y,
                      p[1],
                      p[2],
                      p[3],
                      p[4],
                      p[5],
                      p[6],
                      length - len
                    );
                    cov_ip0rn67kt.s[250]++;

                    return { x: point.x, y: point.y, alpha: point.alpha };
                  } else {
                    cov_ip0rn67kt.b[66][1]++;
                  }
                } else {
                  cov_ip0rn67kt.b[65][1]++;
                }
                cov_ip0rn67kt.s[251]++;
                len += l;
                cov_ip0rn67kt.s[252]++;
                x = +p[5];
                cov_ip0rn67kt.s[253]++;
                y = +p[6];
              }
              cov_ip0rn67kt.s[254]++;
              sp += p.shift() + p;
            }
            cov_ip0rn67kt.s[255]++;
            subpaths.end = sp;
            cov_ip0rn67kt.s[256]++;

            point = istotal
              ? (cov_ip0rn67kt.b[67][0]++, len)
              : (cov_ip0rn67kt.b[67][1]++,
                findDotsAtSegment(x, y, p[0], p[1], p[2], p[3], p[4], p[5], 1));
            cov_ip0rn67kt.s[257]++;

            if (point.alpha) {
              cov_ip0rn67kt.b[68][0]++;
              cov_ip0rn67kt.s[258]++;
              point = { x: point.x, y: point.y, alpha: point.alpha };
            } else {
              cov_ip0rn67kt.b[68][1]++;
            }
            cov_ip0rn67kt.s[259]++;

            return point;
          }

          function pathToAbsolute(pathArray) {
            cov_ip0rn67kt.f[26]++;
            var res = (cov_ip0rn67kt.s[260]++, []),
              x = (cov_ip0rn67kt.s[261]++, 0),
              y = (cov_ip0rn67kt.s[262]++, 0),
              mx = (cov_ip0rn67kt.s[263]++, 0),
              my = (cov_ip0rn67kt.s[264]++, 0),
              start = (cov_ip0rn67kt.s[265]++, 0);
            cov_ip0rn67kt.s[266]++;
            if (!pathArray) {
              cov_ip0rn67kt.b[69][0]++;
              cov_ip0rn67kt.s[267]++;
              // console.warn("Unexpected state: undefined pathArray"); // shouldn't happen
              return res;
            } else {
              cov_ip0rn67kt.b[69][1]++;
            }
            cov_ip0rn67kt.s[268]++;
            if (pathArray[0][0] === 'M') {
              cov_ip0rn67kt.b[70][0]++;
              cov_ip0rn67kt.s[269]++;
              x = +pathArray[0][1];
              cov_ip0rn67kt.s[270]++;
              y = +pathArray[0][2];
              cov_ip0rn67kt.s[271]++;
              mx = x;
              cov_ip0rn67kt.s[272]++;
              my = y;
              cov_ip0rn67kt.s[273]++;
              start++;
              cov_ip0rn67kt.s[274]++;
              res[0] = ['M', x, y];
            } else {
              cov_ip0rn67kt.b[70][1]++;
            }

            var dots;

            var crz = (cov_ip0rn67kt.s[275]++,
            (cov_ip0rn67kt.b[71][0]++, pathArray.length === 3) &&
              (cov_ip0rn67kt.b[71][1]++, pathArray[0][0] === 'M') &&
              (cov_ip0rn67kt.b[71][2]++, pathArray[1][0].toUpperCase() === 'R') &&
              (cov_ip0rn67kt.b[71][3]++, pathArray[2][0].toUpperCase() === 'Z'));
            cov_ip0rn67kt.s[276]++;

            for (
              var r,
                pa,
                i = (cov_ip0rn67kt.s[277]++, start),
                ii = (cov_ip0rn67kt.s[278]++, pathArray.length);
              i < ii;
              i++
            ) {
              cov_ip0rn67kt.s[279]++;
              res.push((r = []));
              cov_ip0rn67kt.s[280]++;
              pa = pathArray[i];
              cov_ip0rn67kt.s[281]++;
              if (pa[0] !== String.prototype.toUpperCase.call(pa[0])) {
                cov_ip0rn67kt.b[72][0]++;
                cov_ip0rn67kt.s[282]++;
                r[0] = String.prototype.toUpperCase.call(pa[0]);
                cov_ip0rn67kt.s[283]++;
                switch (r[0]) {
                  case 'A':
                    cov_ip0rn67kt.b[73][0]++;
                    cov_ip0rn67kt.s[284]++;
                    r[1] = pa[1];
                    cov_ip0rn67kt.s[285]++;
                    r[2] = pa[2];
                    cov_ip0rn67kt.s[286]++;
                    r[3] = pa[3];
                    cov_ip0rn67kt.s[287]++;
                    r[4] = pa[4];
                    cov_ip0rn67kt.s[288]++;
                    r[5] = pa[5];
                    cov_ip0rn67kt.s[289]++;
                    r[6] = +(pa[6] + x);
                    cov_ip0rn67kt.s[290]++;
                    r[7] = +(pa[7] + y);
                    cov_ip0rn67kt.s[291]++;
                    break;
                  case 'V':
                    cov_ip0rn67kt.b[73][1]++;
                    cov_ip0rn67kt.s[292]++;
                    r[1] = +pa[1] + y;
                    cov_ip0rn67kt.s[293]++;
                    break;
                  case 'H':
                    cov_ip0rn67kt.b[73][2]++;
                    cov_ip0rn67kt.s[294]++;
                    r[1] = +pa[1] + x;
                    cov_ip0rn67kt.s[295]++;
                    break;
                  case 'R':
                    cov_ip0rn67kt.b[73][3]++;
                    cov_ip0rn67kt.s[296]++;
                    dots = [x, y].concat(pa.slice(1));
                    cov_ip0rn67kt.s[297]++;
                    for (
                      var j = (cov_ip0rn67kt.s[298]++, 2),
                        jj = (cov_ip0rn67kt.s[299]++, dots.length);
                      j < jj;
                      j++
                    ) {
                      cov_ip0rn67kt.s[300]++;
                      dots[j] = +dots[j] + x;
                      cov_ip0rn67kt.s[301]++;
                      dots[++j] = +dots[j] + y;
                    }
                    cov_ip0rn67kt.s[302]++;
                    res.pop();
                    cov_ip0rn67kt.s[303]++;
                    res = res.concat(catmullRom2bezier(dots, crz));
                    cov_ip0rn67kt.s[304]++;
                    break;
                  case 'M':
                    cov_ip0rn67kt.b[73][4]++;
                    cov_ip0rn67kt.s[305]++;
                    mx = +pa[1] + x;
                    cov_ip0rn67kt.s[306]++;
                    my = +pa[2] + y;
                    cov_ip0rn67kt.s[307]++;
                    break;
                  default:
                    cov_ip0rn67kt.b[73][5]++;
                    cov_ip0rn67kt.s[308]++;
                    for (
                      var _j = (cov_ip0rn67kt.s[309]++, 1),
                        _jj = (cov_ip0rn67kt.s[310]++, pa.length);
                      _j < _jj;
                      _j++
                    ) {
                      cov_ip0rn67kt.s[311]++;
                      r[_j] =
                        +pa[_j] +
                        (_j % 2
                          ? (cov_ip0rn67kt.b[74][0]++, x)
                          : (cov_ip0rn67kt.b[74][1]++, y));
                    }
                }
              } else {
                cov_ip0rn67kt.b[72][1]++;
                cov_ip0rn67kt.s[312]++;
                if (pa[0] === 'R') {
                  cov_ip0rn67kt.b[75][0]++;
                  cov_ip0rn67kt.s[313]++;
                  dots = [x, y].concat(pa.slice(1));
                  cov_ip0rn67kt.s[314]++;
                  res.pop();
                  cov_ip0rn67kt.s[315]++;
                  res = res.concat(catmullRom2bezier(dots, crz));
                  cov_ip0rn67kt.s[316]++;
                  r = ['R'].concat(pa.slice(-2));
                } else {
                  cov_ip0rn67kt.b[75][1]++;
                  cov_ip0rn67kt.s[317]++;
                  for (
                    var k = (cov_ip0rn67kt.s[318]++, 0),
                      kk = (cov_ip0rn67kt.s[319]++, pa.length);
                    k < kk;
                    k++
                  ) {
                    cov_ip0rn67kt.s[320]++;
                    r[k] = pa[k];
                  }
                }
              }
              cov_ip0rn67kt.s[321]++;
              switch (r[0]) {
                case 'Z':
                  cov_ip0rn67kt.b[76][0]++;
                  cov_ip0rn67kt.s[322]++;
                  x = mx;
                  cov_ip0rn67kt.s[323]++;
                  y = my;
                  cov_ip0rn67kt.s[324]++;
                  break;
                case 'H':
                  cov_ip0rn67kt.b[76][1]++;
                  cov_ip0rn67kt.s[325]++;
                  x = r[1];
                  cov_ip0rn67kt.s[326]++;
                  break;
                case 'V':
                  cov_ip0rn67kt.b[76][2]++;
                  cov_ip0rn67kt.s[327]++;
                  y = r[1];
                  cov_ip0rn67kt.s[328]++;
                  break;
                case 'M':
                  cov_ip0rn67kt.b[76][3]++;
                  cov_ip0rn67kt.s[329]++;
                  mx = r[r.length - 2];
                  cov_ip0rn67kt.s[330]++;
                  my = r[r.length - 1];
                  cov_ip0rn67kt.s[331]++;
                  break;
                default:
                  cov_ip0rn67kt.b[76][4]++;
                  cov_ip0rn67kt.s[332]++;
                  x = r[r.length - 2];
                  cov_ip0rn67kt.s[333]++;
                  y = r[r.length - 1];
              }
            }
            cov_ip0rn67kt.s[334]++;
            return res;
          }

          function path2curve(path, path2) {
            cov_ip0rn67kt.f[27]++;
            var p = (cov_ip0rn67kt.s[335]++, pathToAbsolute(path)),
              p2 = (cov_ip0rn67kt.s[336]++,
              (cov_ip0rn67kt.b[77][0]++, path2) &&
                (cov_ip0rn67kt.b[77][1]++, pathToAbsolute(path2)));
            var attrs = (cov_ip0rn67kt.s[337]++,
            { x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null });
            var attrs2 = (cov_ip0rn67kt.s[338]++,
            { x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null });
            var pcoms1 = (cov_ip0rn67kt.s[339]++, []); // path commands of original path p
            var pcoms2 = (cov_ip0rn67kt.s[340]++, []); // path commands of original path p2
            var ii;
            cov_ip0rn67kt.s[341]++;
            cov_ip0rn67kt.s[380]++;
            cov_ip0rn67kt.s[391]++;

            var processPath = function processPath(path, d, pcom) {
                cov_ip0rn67kt.f[28]++;
                var nx;
                var ny;
                var tq = (cov_ip0rn67kt.s[342]++, { T: 1, Q: 1 });
                cov_ip0rn67kt.s[343]++;
                if (!path) {
                  cov_ip0rn67kt.b[78][0]++;
                  cov_ip0rn67kt.s[344]++;
                  return ['C', d.x, d.y, d.x, d.y, d.x, d.y];
                } else {
                  cov_ip0rn67kt.b[78][1]++;
                }
                cov_ip0rn67kt.s[345]++;
                if (!(path[0] in tq)) {
                  cov_ip0rn67kt.b[79][0]++;
                  cov_ip0rn67kt.s[346]++;
                  d.qx = d.qy = null;
                } else {
                  cov_ip0rn67kt.b[79][1]++;
                }
                cov_ip0rn67kt.s[347]++;
                switch (path[0]) {
                  case 'M':
                    cov_ip0rn67kt.b[80][0]++;
                    cov_ip0rn67kt.s[348]++;
                    d.X = path[1];
                    cov_ip0rn67kt.s[349]++;
                    d.Y = path[2];
                    cov_ip0rn67kt.s[350]++;
                    break;
                  case 'A':
                    cov_ip0rn67kt.b[80][1]++;
                    cov_ip0rn67kt.s[351]++;
                    path = ['C'].concat(a2c.apply(0, [d.x, d.y].concat(path.slice(1))));
                    cov_ip0rn67kt.s[352]++;
                    break;
                  case 'S':
                    cov_ip0rn67kt.b[80][2]++;
                    cov_ip0rn67kt.s[353]++;
                    if (
                      (cov_ip0rn67kt.b[82][0]++, pcom === 'C') ||
                      (cov_ip0rn67kt.b[82][1]++, pcom === 'S')
                    ) {
                      cov_ip0rn67kt.b[81][0]++;
                      cov_ip0rn67kt.s[354]++;
                      nx = d.x * 2 - d.bx;
                      cov_ip0rn67kt.s[355]++;
                      ny = d.y * 2 - d.by;
                    } else {
                      cov_ip0rn67kt.b[81][1]++;
                      cov_ip0rn67kt.s[356]++;
                      nx = d.x;
                      cov_ip0rn67kt.s[357]++;
                      ny = d.y;
                    }
                    cov_ip0rn67kt.s[358]++;
                    path = ['C', nx, ny].concat(path.slice(1));
                    cov_ip0rn67kt.s[359]++;
                    break;
                  case 'T':
                    cov_ip0rn67kt.b[80][3]++;
                    cov_ip0rn67kt.s[360]++;
                    if (
                      (cov_ip0rn67kt.b[84][0]++, pcom === 'Q') ||
                      (cov_ip0rn67kt.b[84][1]++, pcom === 'T')
                    ) {
                      cov_ip0rn67kt.b[83][0]++;
                      cov_ip0rn67kt.s[361]++;
                      d.qx = d.x * 2 - d.qx;
                      cov_ip0rn67kt.s[362]++;
                      d.qy = d.y * 2 - d.qy;
                    } else {
                      cov_ip0rn67kt.b[83][1]++;
                      cov_ip0rn67kt.s[363]++;
                      d.qx = d.x;
                      cov_ip0rn67kt.s[364]++;
                      d.qy = d.y;
                    }
                    cov_ip0rn67kt.s[365]++;
                    path = ['C'].concat(q2c(d.x, d.y, d.qx, d.qy, path[1], path[2]));
                    cov_ip0rn67kt.s[366]++;
                    break;
                  case 'Q':
                    cov_ip0rn67kt.b[80][4]++;
                    cov_ip0rn67kt.s[367]++;
                    d.qx = path[1];
                    cov_ip0rn67kt.s[368]++;
                    d.qy = path[2];
                    cov_ip0rn67kt.s[369]++;
                    path = ['C'].concat(q2c(d.x, d.y, path[1], path[2], path[3], path[4]));
                    cov_ip0rn67kt.s[370]++;

                    break;
                  case 'L':
                    cov_ip0rn67kt.b[80][5]++;
                    cov_ip0rn67kt.s[371]++;
                    path = ['C'].concat(l2c(d.x, d.y, path[1], path[2]));
                    cov_ip0rn67kt.s[372]++;
                    break;
                  case 'H':
                    cov_ip0rn67kt.b[80][6]++;
                    cov_ip0rn67kt.s[373]++;
                    path = ['C'].concat(l2c(d.x, d.y, path[1], d.y));
                    cov_ip0rn67kt.s[374]++;
                    break;
                  case 'V':
                    cov_ip0rn67kt.b[80][7]++;
                    cov_ip0rn67kt.s[375]++;
                    path = ['C'].concat(l2c(d.x, d.y, d.x, path[1]));
                    cov_ip0rn67kt.s[376]++;
                    break;
                  case 'Z':
                    cov_ip0rn67kt.b[80][8]++;
                    cov_ip0rn67kt.s[377]++;
                    path = ['C'].concat(l2c(d.x, d.y, d.X, d.Y));
                    cov_ip0rn67kt.s[378]++;
                    break;
                }
                cov_ip0rn67kt.s[379]++;

                return path;
              },
              fixArc = function fixArc(pp, i) {
                cov_ip0rn67kt.f[29]++;
                cov_ip0rn67kt.s[381]++;
                if (pp[i].length > 7) {
                  cov_ip0rn67kt.b[85][0]++;
                  cov_ip0rn67kt.s[382]++;
                  pp[i].shift();
                  var pi = (cov_ip0rn67kt.s[383]++, pp[i]);
                  cov_ip0rn67kt.s[384]++;
                  while (pi.length) {
                    cov_ip0rn67kt.s[385]++;
                    pcoms1[i] = 'A';
                    cov_ip0rn67kt.s[386]++;
                    if (p2) {
                      cov_ip0rn67kt.b[86][0]++;
                      cov_ip0rn67kt.s[387]++;
                      pcoms2[i] = 'A';
                    } else {
                      cov_ip0rn67kt.b[86][1]++;
                    }
                    cov_ip0rn67kt.s[388]++;
                    pp.splice(i++, 0, ['C'].concat(pi.splice(0, 6)));
                  }
                  cov_ip0rn67kt.s[389]++;
                  pp.splice(i, 1);
                  cov_ip0rn67kt.s[390]++;
                  ii = Math.max(
                    p.length,
                    ((cov_ip0rn67kt.b[87][0]++, p2) &&
                      (cov_ip0rn67kt.b[87][1]++, p2.length)) ||
                      (cov_ip0rn67kt.b[87][2]++, 0)
                  );
                } else {
                  cov_ip0rn67kt.b[85][1]++;
                }
              },
              fixM = function fixM(path1, path2, a1, a2, i) {
                cov_ip0rn67kt.f[30]++;
                cov_ip0rn67kt.s[392]++;
                if (
                  (cov_ip0rn67kt.b[89][0]++, path1) &&
                  (cov_ip0rn67kt.b[89][1]++, path2) &&
                  (cov_ip0rn67kt.b[89][2]++, path1[i][0] === 'M') &&
                  (cov_ip0rn67kt.b[89][3]++, path2[i][0] !== 'M')
                ) {
                  cov_ip0rn67kt.b[88][0]++;
                  cov_ip0rn67kt.s[393]++;
                  path2.splice(i, 0, ['M', a2.x, a2.y]);
                  cov_ip0rn67kt.s[394]++;
                  a1.bx = 0;
                  cov_ip0rn67kt.s[395]++;
                  a1.by = 0;
                  cov_ip0rn67kt.s[396]++;
                  a1.x = path1[i][1];
                  cov_ip0rn67kt.s[397]++;
                  a1.y = path1[i][2];
                  cov_ip0rn67kt.s[398]++;
                  ii = Math.max(
                    p.length,
                    ((cov_ip0rn67kt.b[90][0]++, p2) &&
                      (cov_ip0rn67kt.b[90][1]++, p2.length)) ||
                      (cov_ip0rn67kt.b[90][2]++, 0)
                  );
                } else {
                  cov_ip0rn67kt.b[88][1]++;
                }
              };

            var pfirst = (cov_ip0rn67kt.s[399]++, ''); // temporary holder for original path command
            var pcom = (cov_ip0rn67kt.s[400]++, ''); // holder for previous path command of original path
            cov_ip0rn67kt.s[401]++;
            ii = Math.max(
              p.length,
              ((cov_ip0rn67kt.b[91][0]++, p2) && (cov_ip0rn67kt.b[91][1]++, p2.length)) ||
                (cov_ip0rn67kt.b[91][2]++, 0)
            );
            cov_ip0rn67kt.s[402]++;
            for (var i = (cov_ip0rn67kt.s[403]++, 0); i < ii; i++) {
              cov_ip0rn67kt.s[404]++;
              if (p[i]) {
                cov_ip0rn67kt.b[92][0]++;
                cov_ip0rn67kt.s[405]++;
                pfirst = p[i][0];
              } else {
                cov_ip0rn67kt.b[92][1]++;
              } // save current path command
              cov_ip0rn67kt.s[406]++;
              if (pfirst !== 'C') {
                cov_ip0rn67kt.b[93][0]++;
                cov_ip0rn67kt.s[407]++;
                pcoms1[i] = pfirst; // Save current path command
                cov_ip0rn67kt.s[408]++;
                if (i) {
                  cov_ip0rn67kt.b[94][0]++;
                  cov_ip0rn67kt.s[409]++;
                  pcom = pcoms1[i - 1];
                } else {
                  cov_ip0rn67kt.b[94][1]++;
                } // Get previous path command pcom
              } else {
                cov_ip0rn67kt.b[93][1]++;
              }
              cov_ip0rn67kt.s[410]++;
              p[i] = processPath(p[i], attrs, pcom);
              cov_ip0rn67kt.s[411]++;

              if (
                (cov_ip0rn67kt.b[96][0]++, pcoms1[i] !== 'A') &&
                (cov_ip0rn67kt.b[96][1]++, pfirst === 'C')
              ) {
                cov_ip0rn67kt.b[95][0]++;
                cov_ip0rn67kt.s[412]++;
                pcoms1[i] = 'C';
              } else {
                cov_ip0rn67kt.b[95][1]++;
              }
              cov_ip0rn67kt.s[413]++;

              fixArc(p, i); // fixArc adds also the right amount of A:s to pcoms1
              cov_ip0rn67kt.s[414]++;
              if (p2) {
                cov_ip0rn67kt.b[97][0]++;
                cov_ip0rn67kt.s[415]++;
                // the same procedures is done to p2
                if (p2[i]) {
                  cov_ip0rn67kt.b[98][0]++;
                  cov_ip0rn67kt.s[416]++;
                  pfirst = p2[i][0];
                } else {
                  cov_ip0rn67kt.b[98][1]++;
                }
                cov_ip0rn67kt.s[417]++;
                if (pfirst !== 'C') {
                  cov_ip0rn67kt.b[99][0]++;
                  cov_ip0rn67kt.s[418]++;
                  pcoms2[i] = pfirst;
                  cov_ip0rn67kt.s[419]++;
                  if (i) {
                    cov_ip0rn67kt.b[100][0]++;
                    cov_ip0rn67kt.s[420]++;
                    pcom = pcoms2[i - 1];
                  } else {
                    cov_ip0rn67kt.b[100][1]++;
                  }
                } else {
                  cov_ip0rn67kt.b[99][1]++;
                }
                cov_ip0rn67kt.s[421]++;
                p2[i] = processPath(p2[i], attrs2, pcom);
                cov_ip0rn67kt.s[422]++;

                if (
                  (cov_ip0rn67kt.b[102][0]++, pcoms2[i] !== 'A') &&
                  (cov_ip0rn67kt.b[102][1]++, pfirst === 'C')
                ) {
                  cov_ip0rn67kt.b[101][0]++;
                  cov_ip0rn67kt.s[423]++;
                  pcoms2[i] = 'C';
                } else {
                  cov_ip0rn67kt.b[101][1]++;
                }
                cov_ip0rn67kt.s[424]++;

                fixArc(p2, i);
              } else {
                cov_ip0rn67kt.b[97][1]++;
              }
              cov_ip0rn67kt.s[425]++;
              fixM(p, p2, attrs, attrs2, i);
              cov_ip0rn67kt.s[426]++;
              fixM(p2, p, attrs2, attrs, i);
              var seg = (cov_ip0rn67kt.s[427]++, p[i]),
                seg2 = (cov_ip0rn67kt.s[428]++,
                (cov_ip0rn67kt.b[103][0]++, p2) && (cov_ip0rn67kt.b[103][1]++, p2[i])),
                seglen = (cov_ip0rn67kt.s[429]++, seg.length),
                seg2len = (cov_ip0rn67kt.s[430]++,
                (cov_ip0rn67kt.b[104][0]++, p2) &&
                  (cov_ip0rn67kt.b[104][1]++, seg2.length));
              cov_ip0rn67kt.s[431]++;
              attrs.x = seg[seglen - 2];
              cov_ip0rn67kt.s[432]++;
              attrs.y = seg[seglen - 1];
              cov_ip0rn67kt.s[433]++;
              attrs.bx =
                (cov_ip0rn67kt.b[105][0]++, parseFloat(seg[seglen - 4])) ||
                (cov_ip0rn67kt.b[105][1]++, attrs.x);
              cov_ip0rn67kt.s[434]++;
              attrs.by =
                (cov_ip0rn67kt.b[106][0]++, parseFloat(seg[seglen - 3])) ||
                (cov_ip0rn67kt.b[106][1]++, attrs.y);
              cov_ip0rn67kt.s[435]++;
              attrs2.bx =
                (cov_ip0rn67kt.b[107][0]++, p2) &&
                ((cov_ip0rn67kt.b[107][1]++, parseFloat(seg2[seg2len - 4])) ||
                  (cov_ip0rn67kt.b[107][2]++, attrs2.x));
              cov_ip0rn67kt.s[436]++;
              attrs2.by =
                (cov_ip0rn67kt.b[108][0]++, p2) &&
                ((cov_ip0rn67kt.b[108][1]++, parseFloat(seg2[seg2len - 3])) ||
                  (cov_ip0rn67kt.b[108][2]++, attrs2.y));
              cov_ip0rn67kt.s[437]++;
              attrs2.x =
                (cov_ip0rn67kt.b[109][0]++, p2) &&
                (cov_ip0rn67kt.b[109][1]++, seg2[seg2len - 2]);
              cov_ip0rn67kt.s[438]++;
              attrs2.y =
                (cov_ip0rn67kt.b[110][0]++, p2) &&
                (cov_ip0rn67kt.b[110][1]++, seg2[seg2len - 1]);
            }
            cov_ip0rn67kt.s[439]++;

            return p2
              ? (cov_ip0rn67kt.b[111][0]++, [p, p2])
              : (cov_ip0rn67kt.b[111][1]++, p);
          }

          function a2c(x1, y1, rx, ry, angle, lac, sweep_flag, x2, y2, recursive) {
            cov_ip0rn67kt.f[31]++;
            // for more information of where this Math came from visit:
            // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes
            var PI = (cov_ip0rn67kt.s[440]++, Math.PI);

            var _120 = (cov_ip0rn67kt.s[441]++, PI * 120 / 180);
            var f1;
            var f2;
            var cx;
            var cy;
            var rad = (cov_ip0rn67kt.s[442]++,
            PI /
              180 *
              ((cov_ip0rn67kt.b[112][0]++, +angle) || (cov_ip0rn67kt.b[112][1]++, 0)));
            var res = (cov_ip0rn67kt.s[443]++, []);
            var xy;
            cov_ip0rn67kt.s[444]++;

            var rotate = function rotate(x, y, rad) {
              cov_ip0rn67kt.f[32]++;
              var X = (cov_ip0rn67kt.s[445]++, x * Math.cos(rad) - y * Math.sin(rad)),
                Y = (cov_ip0rn67kt.s[446]++, x * Math.sin(rad) + y * Math.cos(rad));
              cov_ip0rn67kt.s[447]++;
              return { x: X, y: Y };
            };
            cov_ip0rn67kt.s[448]++;

            if (!recursive) {
              cov_ip0rn67kt.b[113][0]++;
              cov_ip0rn67kt.s[449]++;
              xy = rotate(x1, y1, -rad);
              cov_ip0rn67kt.s[450]++;
              x1 = xy.x;
              cov_ip0rn67kt.s[451]++;
              y1 = xy.y;
              cov_ip0rn67kt.s[452]++;
              xy = rotate(x2, y2, -rad);
              cov_ip0rn67kt.s[453]++;
              x2 = xy.x;
              cov_ip0rn67kt.s[454]++;
              y2 = xy.y;
              var x = (cov_ip0rn67kt.s[455]++, (x1 - x2) / 2);
              var y = (cov_ip0rn67kt.s[456]++, (y1 - y2) / 2);
              var h = (cov_ip0rn67kt.s[457]++, x * x / (rx * rx) + y * y / (ry * ry));
              cov_ip0rn67kt.s[458]++;
              if (h > 1) {
                cov_ip0rn67kt.b[114][0]++;
                cov_ip0rn67kt.s[459]++;
                h = Math.sqrt(h);
                cov_ip0rn67kt.s[460]++;
                rx = h * rx;
                cov_ip0rn67kt.s[461]++;
                ry = h * ry;
              } else {
                cov_ip0rn67kt.b[114][1]++;
              }
              var rx2 = (cov_ip0rn67kt.s[462]++, rx * rx),
                ry2 = (cov_ip0rn67kt.s[463]++, ry * ry);
              var k = (cov_ip0rn67kt.s[464]++,
              (lac === sweep_flag
                ? (cov_ip0rn67kt.b[115][0]++, -1)
                : (cov_ip0rn67kt.b[115][1]++, 1)) *
                Math.sqrt(
                  Math.abs(
                    (rx2 * ry2 - rx2 * y * y - ry2 * x * x) / (rx2 * y * y + ry2 * x * x)
                  )
                ));
              cov_ip0rn67kt.s[465]++;

              cx = k * rx * y / ry + (x1 + x2) / 2;
              cov_ip0rn67kt.s[466]++;
              cy = k * -ry * x / rx + (y1 + y2) / 2;
              cov_ip0rn67kt.s[467]++;
              f1 = Math.asin(((y1 - cy) / ry).toFixed(9));
              cov_ip0rn67kt.s[468]++;
              f2 = Math.asin(((y2 - cy) / ry).toFixed(9));
              cov_ip0rn67kt.s[469]++;

              f1 =
                x1 < cx
                  ? (cov_ip0rn67kt.b[116][0]++, PI - f1)
                  : (cov_ip0rn67kt.b[116][1]++, f1);
              cov_ip0rn67kt.s[470]++;
              f2 =
                x2 < cx
                  ? (cov_ip0rn67kt.b[117][0]++, PI - f2)
                  : (cov_ip0rn67kt.b[117][1]++, f2);
              cov_ip0rn67kt.s[471]++;

              if (f1 < 0) {
                cov_ip0rn67kt.b[118][0]++;
                cov_ip0rn67kt.s[472]++;
                f1 = PI * 2 + f1;
              } else {
                cov_ip0rn67kt.b[118][1]++;
              }
              cov_ip0rn67kt.s[473]++;
              if (f2 < 0) {
                cov_ip0rn67kt.b[119][0]++;
                cov_ip0rn67kt.s[474]++;
                f2 = PI * 2 + f2;
              } else {
                cov_ip0rn67kt.b[119][1]++;
              }
              cov_ip0rn67kt.s[475]++;

              if (
                (cov_ip0rn67kt.b[121][0]++, sweep_flag) &&
                (cov_ip0rn67kt.b[121][1]++, f1 > f2)
              ) {
                cov_ip0rn67kt.b[120][0]++;
                cov_ip0rn67kt.s[476]++;
                f1 = f1 - PI * 2;
              } else {
                cov_ip0rn67kt.b[120][1]++;
              }
              cov_ip0rn67kt.s[477]++;
              if (
                (cov_ip0rn67kt.b[123][0]++, !sweep_flag) &&
                (cov_ip0rn67kt.b[123][1]++, f2 > f1)
              ) {
                cov_ip0rn67kt.b[122][0]++;
                cov_ip0rn67kt.s[478]++;
                f2 = f2 - PI * 2;
              } else {
                cov_ip0rn67kt.b[122][1]++;
              }
            } else {
              cov_ip0rn67kt.b[113][1]++;
              cov_ip0rn67kt.s[479]++;
              f1 = recursive[0];
              cov_ip0rn67kt.s[480]++;
              f2 = recursive[1];
              cov_ip0rn67kt.s[481]++;
              cx = recursive[2];
              cov_ip0rn67kt.s[482]++;
              cy = recursive[3];
            }
            var df = (cov_ip0rn67kt.s[483]++, f2 - f1);
            cov_ip0rn67kt.s[484]++;
            if (Math.abs(df) > _120) {
              cov_ip0rn67kt.b[124][0]++;
              var f2old = (cov_ip0rn67kt.s[485]++, f2),
                x2old = (cov_ip0rn67kt.s[486]++, x2),
                y2old = (cov_ip0rn67kt.s[487]++, y2);
              cov_ip0rn67kt.s[488]++;
              f2 =
                f1 +
                _120 *
                  ((cov_ip0rn67kt.b[126][0]++, sweep_flag) &&
                  (cov_ip0rn67kt.b[126][1]++, f2 > f1)
                    ? (cov_ip0rn67kt.b[125][0]++, 1)
                    : (cov_ip0rn67kt.b[125][1]++, -1));
              cov_ip0rn67kt.s[489]++;
              x2 = cx + rx * Math.cos(f2);
              cov_ip0rn67kt.s[490]++;
              y2 = cy + ry * Math.sin(f2);
              cov_ip0rn67kt.s[491]++;
              res = a2c(x2, y2, rx, ry, angle, 0, sweep_flag, x2old, y2old, [
                f2,
                f2old,
                cx,
                cy
              ]);
            } else {
              cov_ip0rn67kt.b[124][1]++;
            }
            cov_ip0rn67kt.s[492]++;
            df = f2 - f1;
            var c1 = (cov_ip0rn67kt.s[493]++, Math.cos(f1)),
              s1 = (cov_ip0rn67kt.s[494]++, Math.sin(f1)),
              c2 = (cov_ip0rn67kt.s[495]++, Math.cos(f2)),
              s2 = (cov_ip0rn67kt.s[496]++, Math.sin(f2)),
              t = (cov_ip0rn67kt.s[497]++, Math.tan(df / 4)),
              hx = (cov_ip0rn67kt.s[498]++, 4 / 3 * rx * t),
              hy = (cov_ip0rn67kt.s[499]++, 4 / 3 * ry * t),
              m1 = (cov_ip0rn67kt.s[500]++, [x1, y1]),
              m2 = (cov_ip0rn67kt.s[501]++, [x1 + hx * s1, y1 - hy * c1]),
              m3 = (cov_ip0rn67kt.s[502]++, [x2 + hx * s2, y2 - hy * c2]),
              m4 = (cov_ip0rn67kt.s[503]++, [x2, y2]);
            cov_ip0rn67kt.s[504]++;
            m2[0] = 2 * m1[0] - m2[0];
            cov_ip0rn67kt.s[505]++;
            m2[1] = 2 * m1[1] - m2[1];
            cov_ip0rn67kt.s[506]++;
            if (recursive) {
              cov_ip0rn67kt.b[127][0]++;
              cov_ip0rn67kt.s[507]++;
              return [m2, m3, m4].concat(res);
            } else {
              cov_ip0rn67kt.b[127][1]++;
              cov_ip0rn67kt.s[508]++;
              res = [m2, m3, m4]
                .concat(res)
                .join()
                .split(',');
              var newres = (cov_ip0rn67kt.s[509]++, []);
              cov_ip0rn67kt.s[510]++;
              for (
                var i = (cov_ip0rn67kt.s[511]++, 0),
                  ii = (cov_ip0rn67kt.s[512]++, res.length);
                i < ii;
                i++
              ) {
                cov_ip0rn67kt.s[513]++;
                newres[i] =
                  i % 2
                    ? (cov_ip0rn67kt.b[128][0]++, rotate(res[i - 1], res[i], rad).y)
                    : (cov_ip0rn67kt.b[128][1]++, rotate(res[i], res[i + 1], rad).x);
              }
              cov_ip0rn67kt.s[514]++;
              return newres;
            }
          }

          // http://schepers.cc/getting-to-the-point
          function catmullRom2bezier(crp, z) {
            cov_ip0rn67kt.f[33]++;
            var d = (cov_ip0rn67kt.s[515]++, []);
            cov_ip0rn67kt.s[516]++;
            for (
              var i = (cov_ip0rn67kt.s[517]++, 0),
                iLen = (cov_ip0rn67kt.s[518]++, crp.length);
              iLen - 2 * !z > i;
              i += 2
            ) {
              var p = (cov_ip0rn67kt.s[519]++,
              [
                {
                  x: +crp[i - 2],
                  y: +crp[i - 1]
                },

                {
                  x: +crp[i],
                  y: +crp[i + 1]
                },

                {
                  x: +crp[i + 2],
                  y: +crp[i + 3]
                },

                {
                  x: +crp[i + 4],
                  y: +crp[i + 5]
                }
              ]);
              cov_ip0rn67kt.s[520]++;

              if (z) {
                cov_ip0rn67kt.b[129][0]++;
                cov_ip0rn67kt.s[521]++;
                if (!i) {
                  cov_ip0rn67kt.b[130][0]++;
                  cov_ip0rn67kt.s[522]++;
                  p[0] = {
                    x: +crp[iLen - 2],
                    y: +crp[iLen - 1]
                  };
                } else {
                  cov_ip0rn67kt.b[130][1]++;
                  cov_ip0rn67kt.s[523]++;
                  if (iLen - 4 === i) {
                    cov_ip0rn67kt.b[131][0]++;
                    cov_ip0rn67kt.s[524]++;
                    p[3] = {
                      x: +crp[0],
                      y: +crp[1]
                    };
                  } else {
                    cov_ip0rn67kt.b[131][1]++;
                    cov_ip0rn67kt.s[525]++;
                    if (iLen - 2 === i) {
                      cov_ip0rn67kt.b[132][0]++;
                      cov_ip0rn67kt.s[526]++;
                      p[2] = {
                        x: +crp[0],
                        y: +crp[1]
                      };
                      cov_ip0rn67kt.s[527]++;

                      p[3] = {
                        x: +crp[2],
                        y: +crp[3]
                      };
                    } else {
                      cov_ip0rn67kt.b[132][1]++;
                    }
                  }
                }
              } else {
                cov_ip0rn67kt.b[129][1]++;
                cov_ip0rn67kt.s[528]++;
                if (iLen - 4 === i) {
                  cov_ip0rn67kt.b[133][0]++;
                  cov_ip0rn67kt.s[529]++;
                  p[3] = p[2];
                } else {
                  cov_ip0rn67kt.b[133][1]++;
                  cov_ip0rn67kt.s[530]++;
                  if (!i) {
                    cov_ip0rn67kt.b[134][0]++;
                    cov_ip0rn67kt.s[531]++;
                    p[0] = {
                      x: +crp[i],
                      y: +crp[i + 1]
                    };
                  } else {
                    cov_ip0rn67kt.b[134][1]++;
                  }
                }
              }
              cov_ip0rn67kt.s[532]++;
              d.push([
                'C',
                (-p[0].x + 6 * p[1].x + p[2].x) / 6,
                (-p[0].y + 6 * p[1].y + p[2].y) / 6,
                (p[1].x + 6 * p[2].x - p[3].x) / 6,
                (p[1].y + 6 * p[2].y - p[3].y) / 6,
                p[2].x,
                p[2].y
              ]);
            }
            cov_ip0rn67kt.s[533]++;

            return d;
          }

          function l2c(x1, y1, x2, y2) {
            cov_ip0rn67kt.f[34]++;
            cov_ip0rn67kt.s[534]++;
            return [x1, y1, x2, y2, x2, y2];
          }

          function q2c(x1, y1, ax, ay, x2, y2) {
            cov_ip0rn67kt.f[35]++;
            var _13 = (cov_ip0rn67kt.s[535]++, 1 / 3),
              _23 = (cov_ip0rn67kt.s[536]++, 2 / 3);
            cov_ip0rn67kt.s[537]++;
            return [
              _13 * x1 + _23 * ax,
              _13 * y1 + _23 * ay,
              _13 * x2 + _23 * ax,
              _13 * y2 + _23 * ay,
              x2,
              y2
            ];
          }

          function bezlen(x1, y1, x2, y2, x3, y3, x4, y4, z) {
            cov_ip0rn67kt.f[36]++;
            cov_ip0rn67kt.s[538]++;
            if (z == null) {
              cov_ip0rn67kt.b[135][0]++;
              cov_ip0rn67kt.s[539]++;
              z = 1;
            } else {
              cov_ip0rn67kt.b[135][1]++;
            }
            cov_ip0rn67kt.s[540]++;
            z =
              z > 1
                ? (cov_ip0rn67kt.b[136][0]++, 1)
                : (cov_ip0rn67kt.b[136][1]++,
                  z < 0 ? (cov_ip0rn67kt.b[137][0]++, 0) : (cov_ip0rn67kt.b[137][1]++, z));
            var z2 = (cov_ip0rn67kt.s[541]++, z / 2);
            var n = (cov_ip0rn67kt.s[542]++, 12);
            var Tvalues = (cov_ip0rn67kt.s[543]++,
            [
              -0.1252,
              0.1252,
              -0.3678,
              0.3678,
              -0.5873,
              0.5873,
              -0.7699,
              0.7699,
              -0.9041,
              0.9041,
              -0.9816,
              0.9816
            ]);

            var sum = (cov_ip0rn67kt.s[544]++, 0);
            var Cvalues = (cov_ip0rn67kt.s[545]++,
            [
              0.2491,
              0.2491,
              0.2335,
              0.2335,
              0.2032,
              0.2032,
              0.1601,
              0.1601,
              0.1069,
              0.1069,
              0.0472,
              0.0472
            ]);
            cov_ip0rn67kt.s[546]++;

            for (var i = (cov_ip0rn67kt.s[547]++, 0); i < n; i++) {
              var ct = (cov_ip0rn67kt.s[548]++, z2 * Tvalues[i] + z2),
                xbase = (cov_ip0rn67kt.s[549]++, base3(ct, x1, x2, x3, x4)),
                ybase = (cov_ip0rn67kt.s[550]++, base3(ct, y1, y2, y3, y4)),
                comb = (cov_ip0rn67kt.s[551]++, xbase * xbase + ybase * ybase);
              cov_ip0rn67kt.s[552]++;
              sum += Cvalues[i] * Math.sqrt(comb);
            }
            cov_ip0rn67kt.s[553]++;
            return z2 * sum;
          }

          function getTatLen(x1, y1, x2, y2, x3, y3, x4, y4, ll) {
            cov_ip0rn67kt.f[37]++;
            cov_ip0rn67kt.s[554]++;
            if (
              (cov_ip0rn67kt.b[139][0]++, ll < 0) ||
              (cov_ip0rn67kt.b[139][1]++, bezlen(x1, y1, x2, y2, x3, y3, x4, y4) < ll)
            ) {
              cov_ip0rn67kt.b[138][0]++;
              cov_ip0rn67kt.s[555]++;
              return;
            } else {
              cov_ip0rn67kt.b[138][1]++;
            }
            var t = (cov_ip0rn67kt.s[556]++, 1);
            var step = (cov_ip0rn67kt.s[557]++, t / 2);
            var t2 = (cov_ip0rn67kt.s[558]++, t - step);
            var l;
            var e = (cov_ip0rn67kt.s[559]++, 0.01);
            cov_ip0rn67kt.s[560]++;
            l = bezlen(x1, y1, x2, y2, x3, y3, x4, y4, t2);
            cov_ip0rn67kt.s[561]++;
            while (Math.abs(l - ll) > e) {
              cov_ip0rn67kt.s[562]++;
              step /= 2;
              cov_ip0rn67kt.s[563]++;
              t2 +=
                (l < ll
                  ? (cov_ip0rn67kt.b[140][0]++, 1)
                  : (cov_ip0rn67kt.b[140][1]++, -1)) * step;
              cov_ip0rn67kt.s[564]++;
              l = bezlen(x1, y1, x2, y2, x3, y3, x4, y4, t2);
            }
            cov_ip0rn67kt.s[565]++;
            return t2;
          }

          function base3(t, p1, p2, p3, p4) {
            cov_ip0rn67kt.f[38]++;
            var t1 = (cov_ip0rn67kt.s[566]++, -3 * p1 + 9 * p2 - 9 * p3 + 3 * p4),
              t2 = (cov_ip0rn67kt.s[567]++, t * t1 + 6 * p1 - 12 * p2 + 6 * p3);
            cov_ip0rn67kt.s[568]++;
            return t * t2 - 3 * p1 + 3 * p2;
          }

          function cacheKey() {
            cov_ip0rn67kt.f[39]++;
            var hash = (cov_ip0rn67kt.s[569]++, '');
            cov_ip0rn67kt.s[570]++;
            for (var i = (cov_ip0rn67kt.s[571]++, arguments.length - 1); i >= 0; --i) {
              cov_ip0rn67kt.s[572]++;
              hash += '\uFF1F'.concat(
                i < 0 || arguments.length <= i ? undefined : arguments[i]
              );
            }
            cov_ip0rn67kt.s[573]++;
            return hash;
          }
          var _default = _main.default;
          exports.default = _default;
        },
        {
          '../core/constants': 272,
          '../core/main': 283,
          'core-js/modules/es.array.concat': 166,
          'core-js/modules/es.array.fill': 168,
          'core-js/modules/es.array.iterator': 174,
          'core-js/modules/es.array.join': 175,
          'core-js/modules/es.array.slice': 178,
          'core-js/modules/es.array.splice': 180,
          'core-js/modules/es.function.name': 181,
          'core-js/modules/es.number.to-fixed': 187,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.regexp.exec': 196,
          'core-js/modules/es.string.iterator': 201,
          'core-js/modules/es.string.split': 206,
          'core-js/modules/es.symbol': 211,
          'core-js/modules/es.symbol.description': 209,
          'core-js/modules/es.symbol.iterator': 210,
          'core-js/modules/web.dom-collections.iterator': 244
        }
      ],
      322: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_291klxiubc = (function() {
            var path = '/Users/outofambit/src/p5.js/src/utilities/array_functions.js';
            var hash = 'b943979d7623799f6cccf4534763dee3e36eea7c';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/utilities/array_functions.js',
              statementMap: {
                '0': { start: { line: 30, column: 0 }, end: { line: 33, column: 2 } },
                '1': { start: { line: 31, column: 2 }, end: { line: 31, column: 20 } },
                '2': { start: { line: 32, column: 2 }, end: { line: 32, column: 15 } },
                '3': { start: { line: 80, column: 0 }, end: { line: 110, column: 2 } },
                '4': { start: { line: 85, column: 2 }, end: { line: 104, column: 3 } },
                '5': { start: { line: 86, column: 4 }, end: { line: 86, column: 39 } },
                '6': { start: { line: 87, column: 4 }, end: { line: 87, column: 24 } },
                '7': { start: { line: 88, column: 4 }, end: { line: 88, column: 52 } },
                '8': { start: { line: 90, column: 4 }, end: { line: 98, column: 5 } },
                '9': { start: { line: 93, column: 6 }, end: { line: 93, column: 16 } },
                '10': { start: { line: 94, column: 6 }, end: { line: 94, column: 38 } },
                '11': { start: { line: 97, column: 6 }, end: { line: 97, column: 23 } },
                '12': { start: { line: 100, column: 4 }, end: { line: 100, column: 14 } },
                '13': { start: { line: 102, column: 4 }, end: { line: 102, column: 22 } },
                '14': { start: { line: 103, column: 4 }, end: { line: 103, column: 28 } },
                '15': { start: { line: 109, column: 2 }, end: { line: 109, column: 62 } },
                '16': { start: { line: 139, column: 0 }, end: { line: 139, column: 60 } },
                '17': { start: { line: 139, column: 40 }, end: { line: 139, column: 59 } },
                '18': { start: { line: 159, column: 0 }, end: { line: 159, column: 46 } },
                '19': { start: { line: 159, column: 31 }, end: { line: 159, column: 45 } },
                '20': { start: { line: 180, column: 0 }, end: { line: 183, column: 2 } },
                '21': { start: { line: 181, column: 2 }, end: { line: 181, column: 13 } },
                '22': { start: { line: 182, column: 2 }, end: { line: 182, column: 14 } },
                '23': { start: { line: 209, column: 0 }, end: { line: 225, column: 2 } },
                '24': { start: { line: 210, column: 17 }, end: { line: 210, column: 77 } },
                '25': { start: { line: 211, column: 2 }, end: { line: 211, column: 43 } },
                '26': { start: { line: 215, column: 10 }, end: { line: 215, column: 20 } },
                '27': { start: { line: 216, column: 2 }, end: { line: 222, column: 3 } },
                '28': { start: { line: 217, column: 4 }, end: { line: 217, column: 40 } },
                '29': { start: { line: 219, column: 4 }, end: { line: 219, column: 21 } },
                '30': { start: { line: 220, column: 4 }, end: { line: 220, column: 24 } },
                '31': { start: { line: 221, column: 4 }, end: { line: 221, column: 19 } },
                '32': { start: { line: 224, column: 2 }, end: { line: 224, column: 13 } },
                '33': { start: { line: 262, column: 0 }, end: { line: 271, column: 2 } },
                '34': { start: { line: 263, column: 12 }, end: { line: 263, column: 70 } },
                '35': { start: { line: 264, column: 15 }, end: { line: 264, column: 68 } },
                '36': { start: { line: 265, column: 2 }, end: { line: 269, column: 3 } },
                '37': { start: { line: 266, column: 4 }, end: { line: 266, column: 21 } },
                '38': { start: { line: 268, column: 4 }, end: { line: 268, column: 36 } },
                '39': { start: { line: 268, column: 29 }, end: { line: 268, column: 34 } },
                '40': { start: { line: 270, column: 2 }, end: { line: 270, column: 26 } },
                '41': { start: { line: 301, column: 0 }, end: { line: 306, column: 2 } },
                '42': { start: { line: 303, column: 2 }, end: { line: 303, column: 63 } },
                '43': { start: { line: 305, column: 2 }, end: { line: 305, column: 14 } },
                '44': { start: { line: 336, column: 0 }, end: { line: 342, column: 2 } },
                '45': { start: { line: 337, column: 2 }, end: { line: 341, column: 3 } },
                '46': { start: { line: 338, column: 4 }, end: { line: 338, column: 44 } },
                '47': { start: { line: 340, column: 4 }, end: { line: 340, column: 42 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 30, column: 22 }, end: { line: 30, column: 23 } },
                  loc: { start: { line: 30, column: 45 }, end: { line: 33, column: 1 } },
                  line: 30
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 80, column: 25 }, end: { line: 80, column: 26 } },
                  loc: { start: { line: 80, column: 78 }, end: { line: 110, column: 1 } },
                  line: 80
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 139, column: 22 },
                    end: { line: 139, column: 23 }
                  },
                  loc: { start: { line: 139, column: 40 }, end: { line: 139, column: 59 } },
                  line: 139
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 159, column: 23 },
                    end: { line: 159, column: 24 }
                  },
                  loc: { start: { line: 159, column: 31 }, end: { line: 159, column: 45 } },
                  line: 159
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 180, column: 23 },
                    end: { line: 180, column: 24 }
                  },
                  loc: { start: { line: 180, column: 38 }, end: { line: 183, column: 1 } },
                  line: 180
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 209, column: 23 },
                    end: { line: 209, column: 24 }
                  },
                  loc: { start: { line: 209, column: 43 }, end: { line: 225, column: 1 } },
                  line: 209
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 262, column: 20 },
                    end: { line: 262, column: 21 }
                  },
                  loc: { start: { line: 262, column: 42 }, end: { line: 271, column: 1 } },
                  line: 262
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 268, column: 19 },
                    end: { line: 268, column: 20 }
                  },
                  loc: { start: { line: 268, column: 29 }, end: { line: 268, column: 34 } },
                  line: 268
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 301, column: 22 },
                    end: { line: 301, column: 23 }
                  },
                  loc: { start: { line: 301, column: 51 }, end: { line: 306, column: 1 } },
                  line: 301
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 336, column: 22 },
                    end: { line: 336, column: 23 }
                  },
                  loc: { start: { line: 336, column: 51 }, end: { line: 342, column: 1 } },
                  line: 336
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 85, column: 2 }, end: { line: 104, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 85, column: 2 }, end: { line: 104, column: 3 } },
                    { start: { line: 85, column: 2 }, end: { line: 104, column: 3 } }
                  ],
                  line: 85
                },
                '1': {
                  loc: { start: { line: 90, column: 4 }, end: { line: 98, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 90, column: 4 }, end: { line: 98, column: 5 } },
                    { start: { line: 90, column: 4 }, end: { line: 98, column: 5 } }
                  ],
                  line: 90
                },
                '2': {
                  loc: { start: { line: 210, column: 17 }, end: { line: 210, column: 77 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 210, column: 17 }, end: { line: 210, column: 28 } },
                    { start: { line: 210, column: 32 }, end: { line: 210, column: 50 } },
                    { start: { line: 210, column: 54 }, end: { line: 210, column: 77 } }
                  ],
                  line: 210
                },
                '3': {
                  loc: { start: { line: 211, column: 8 }, end: { line: 211, column: 42 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 211, column: 25 }, end: { line: 211, column: 28 } },
                    { start: { line: 211, column: 31 }, end: { line: 211, column: 42 } }
                  ],
                  line: 211
                },
                '4': {
                  loc: { start: { line: 211, column: 8 }, end: { line: 211, column: 22 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 211, column: 8 }, end: { line: 211, column: 12 } },
                    { start: { line: 211, column: 16 }, end: { line: 211, column: 22 } }
                  ],
                  line: 211
                },
                '5': {
                  loc: { start: { line: 263, column: 12 }, end: { line: 263, column: 70 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 263, column: 20 }, end: { line: 263, column: 63 } },
                    { start: { line: 263, column: 66 }, end: { line: 263, column: 70 } }
                  ],
                  line: 263
                },
                '6': {
                  loc: { start: { line: 264, column: 15 }, end: { line: 264, column: 68 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 264, column: 23 }, end: { line: 264, column: 63 } },
                    { start: { line: 264, column: 66 }, end: { line: 264, column: 68 } }
                  ],
                  line: 264
                },
                '7': {
                  loc: { start: { line: 265, column: 2 }, end: { line: 269, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 265, column: 2 }, end: { line: 269, column: 3 } },
                    { start: { line: 265, column: 2 }, end: { line: 269, column: 3 } }
                  ],
                  line: 265
                },
                '8': {
                  loc: { start: { line: 337, column: 2 }, end: { line: 341, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 337, column: 2 }, end: { line: 341, column: 3 } },
                    { start: { line: 337, column: 2 }, end: { line: 341, column: 3 } }
                  ],
                  line: 337
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: 'b943979d7623799f6cccf4534763dee3e36eea7c'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.concat');
          _dereq_('core-js/modules/es.array.slice');
          _dereq_('core-js/modules/es.array.splice');
          _dereq_('core-js/modules/es.array-buffer.constructor');
          _dereq_('core-js/modules/es.object.to-string');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_291klxiubc.s[0]++;

          /**
           * Adds a value to the end of an array. Extends the length of
           * the array by one. Maps to Array.push().
           *
           * @method append
           * @deprecated Use <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push">array.push(value)</a> instead.
           * @param {Array} array Array to append
           * @param {any} value to be added to the Array
           * @return {Array} the array that was appended to
           * @example
           * <div class='norender'><code>
           * function setup() {
           *   let myArray = ['Mango', 'Apple', 'Papaya'];
           *   print(myArray); // ['Mango', 'Apple', 'Papaya']
           *
           *   append(myArray, 'Peach');
           *   print(myArray); // ['Mango', 'Apple', 'Papaya', 'Peach']
           * }
           * </code></div>
           */
          _main.default.prototype.append = function(array, value) {
            cov_291klxiubc.f[0]++;
            cov_291klxiubc.s[1]++;
            array.push(value);
            cov_291klxiubc.s[2]++;
            return array;
          };

          /**
           * Copies an array (or part of an array) to another array. The src array is
           * copied to the dst array, beginning at the position specified by
           * srcPosition and into the position specified by dstPosition. The number of
           * elements to copy is determined by length. Note that copying values
           * overwrites existing values in the destination array. To append values
           * instead of overwriting them, use <a href="#/p5/concat">concat()</a>.
           *
           * The simplified version with only two arguments, arrayCopy(src, dst),
           * copies an entire array to another of the same size. It is equivalent to
           * arrayCopy(src, 0, dst, 0, src.length).
           *
           * Using this function is far more efficient for copying array data than
           * iterating through a for() loop and copying each element individually.
           *
           * @method arrayCopy
           * @deprecated Use <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/copyWithin">arr1.copyWithin(arr2)</a> instead.
           * @param {Array}  src           the source Array
           * @param {Integer} srcPosition  starting position in the source Array
           * @param {Array}  dst           the destination Array
           * @param {Integer} dstPosition   starting position in the destination Array
           * @param {Integer} length        number of Array elements to be copied
           *
           * @example
           * <div class='norender'><code>
           * let src = ['A', 'B', 'C'];
           * let dst = [1, 2, 3];
           * let srcPosition = 1;
           * let dstPosition = 0;
           * let length = 2;
           *
           * print(src); // ['A', 'B', 'C']
           * print(dst); // [ 1 ,  2 ,  3 ]
           *
           * arrayCopy(src, srcPosition, dst, dstPosition, length);
           * print(dst); // ['B', 'C', 3]
           * </code></div>
           */
          /**
           * @method arrayCopy
           * @deprecated Use <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/copyWithin">arr1.copyWithin(arr2)</a> instead.
           * @param {Array}  src
           * @param {Array}  dst
           * @param {Integer} [length]
           */ cov_291klxiubc.s[3]++;
          _main.default.prototype.arrayCopy = function(
            src,
            srcPosition,
            dst,
            dstPosition,
            length
          ) {
            cov_291klxiubc.f[1]++;
            // the index to begin splicing from dst array
            var start;
            var end;
            cov_291klxiubc.s[4]++;

            if (typeof length !== 'undefined') {
              cov_291klxiubc.b[0][0]++;
              cov_291klxiubc.s[5]++;
              end = Math.min(length, src.length);
              cov_291klxiubc.s[6]++;
              start = dstPosition;
              cov_291klxiubc.s[7]++;
              src = src.slice(srcPosition, end + srcPosition);
            } else {
              cov_291klxiubc.b[0][1]++;
              cov_291klxiubc.s[8]++;
              if (typeof dst !== 'undefined') {
                cov_291klxiubc.b[1][0]++;
                cov_291klxiubc.s[9]++;
                // src, dst, length
                // rename  so we don't get confused
                end = dst;
                cov_291klxiubc.s[10]++;
                end = Math.min(end, src.length);
              } else {
                cov_291klxiubc.b[1][1]++;
                cov_291klxiubc.s[11]++;
                // src, dst
                end = src.length;
              }
              cov_291klxiubc.s[12]++;

              start = 0;
              // rename  so we don't get confused
              cov_291klxiubc.s[13]++;
              dst = srcPosition;
              cov_291klxiubc.s[14]++;
              src = src.slice(0, end);
            }

            // Since we are not returning the array and JavaScript is pass by reference
            // we must modify the actual values of the array
            // instead of reassigning arrays
            cov_291klxiubc.s[15]++;
            Array.prototype.splice.apply(dst, [start, end].concat(src));
          };

          /**
           * Concatenates two arrays, maps to Array.concat(). Does not modify the
           * input arrays.
           *
           * @method concat
           * @deprecated Use <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat">arr1.concat(arr2)</a> instead.
           * @param {Array} a first Array to concatenate
           * @param {Array} b second Array to concatenate
           * @return {Array} concatenated array
           *
           * @example
           * <div class = 'norender'><code>
           * function setup() {
           *   let arr1 = ['A', 'B', 'C'];
           *   let arr2 = [1, 2, 3];
           *
           *   print(arr1); // ['A','B','C']
           *   print(arr2); // [1,2,3]
           *
           *   let arr3 = concat(arr1, arr2);
           *
           *   print(arr1); // ['A','B','C']
           *   print(arr2); // [1, 2, 3]
           *   print(arr3); // ['A','B','C', 1, 2, 3]
           * }
           * </code></div>
           */ cov_291klxiubc.s[16]++;
          _main.default.prototype.concat = function(list0, list1) {
            cov_291klxiubc.f[2]++;
            cov_291klxiubc.s[17]++;
            return list0.concat(list1);
          };

          /**
           * Reverses the order of an array, maps to Array.reverse()
           *
           * @method reverse
           * @deprecated Use <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse">array.reverse()</a> instead.
           * @param {Array} list Array to reverse
           * @return {Array} the reversed list
           * @example
           * <div class='norender'><code>
           * function setup() {
           *   let myArray = ['A', 'B', 'C'];
           *   print(myArray); // ['A','B','C']
           *
           *   reverse(myArray);
           *   print(myArray); // ['C','B','A']
           * }
           * </code></div>
           */ cov_291klxiubc.s[18]++;
          _main.default.prototype.reverse = function(list) {
            cov_291klxiubc.f[3]++;
            cov_291klxiubc.s[19]++;
            return list.reverse();
          };

          /**
           * Decreases an array by one element and returns the shortened array,
           * maps to Array.pop().
           *
           * @method shorten
           * @deprecated Use <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/pop">array.pop()</a> instead.
           * @param  {Array} list Array to shorten
           * @return {Array} shortened Array
           * @example
           * <div class = 'norender'><code>
           * function setup() {
           *   let myArray = ['A', 'B', 'C'];
           *   print(myArray); // ['A', 'B', 'C']
           *   let newArray = shorten(myArray);
           *   print(myArray); // ['A','B','C']
           *   print(newArray); // ['A','B']
           * }
           * </code></div>
           */ cov_291klxiubc.s[20]++;
          _main.default.prototype.shorten = function(list) {
            cov_291klxiubc.f[4]++;
            cov_291klxiubc.s[21]++;
            list.pop();
            cov_291klxiubc.s[22]++;
            return list;
          };

          /**
           * Randomizes the order of the elements of an array. Implements
           * <a href='http://Bost.Ocks.org/mike/shuffle/' target=_blank>
           * Fisher-Yates Shuffle Algorithm</a>.
           *
           * @method shuffle
           * @param  {Array}   array  Array to shuffle
           * @param  {Boolean} [bool] modify passed array
           * @return {Array}   shuffled Array
           * @example
           * <div><code>
           * function setup() {
           *   let regularArr = ['ABC', 'def', createVector(), TAU, Math.E];
           *   print(regularArr);
           *   shuffle(regularArr, true); // force modifications to passed array
           *   print(regularArr);
           *
           *   // By default shuffle() returns a shuffled cloned array:
           *   let newArr = shuffle(regularArr);
           *   print(regularArr);
           *   print(newArr);
           * }
           * </code></div>
           */ cov_291klxiubc.s[23]++;
          _main.default.prototype.shuffle = function(arr, bool) {
            cov_291klxiubc.f[5]++;
            var isView = (cov_291klxiubc.s[24]++,
            (cov_291klxiubc.b[2][0]++, ArrayBuffer) &&
              (cov_291klxiubc.b[2][1]++, ArrayBuffer.isView) &&
              (cov_291klxiubc.b[2][2]++, ArrayBuffer.isView(arr)));
            cov_291klxiubc.s[25]++;
            arr =
              (cov_291klxiubc.b[4][0]++, bool) || (cov_291klxiubc.b[4][1]++, isView)
                ? (cov_291klxiubc.b[3][0]++, arr)
                : (cov_291klxiubc.b[3][1]++, arr.slice());

            var rnd,
              tmp,
              idx = (cov_291klxiubc.s[26]++, arr.length);
            cov_291klxiubc.s[27]++;
            while (idx > 1) {
              cov_291klxiubc.s[28]++;
              rnd = (this.random(0, 1) * idx) | 0;
              cov_291klxiubc.s[29]++;

              tmp = arr[--idx];
              cov_291klxiubc.s[30]++;
              arr[idx] = arr[rnd];
              cov_291klxiubc.s[31]++;
              arr[rnd] = tmp;
            }
            cov_291klxiubc.s[32]++;

            return arr;
          };

          /**
           * Sorts an array of numbers from smallest to largest, or puts an array of
           * words in alphabetical order. The original array is not modified; a
           * re-ordered array is returned. The count parameter states the number of
           * elements to sort. For example, if there are 12 elements in an array and
           * count is set to 5, only the first 5 elements in the array will be sorted.
           *
           * @method sort
           * @deprecated Use <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort">array.sort()</a> instead.
           * @param {Array} list Array to sort
           * @param {Integer} [count] number of elements to sort, starting from 0
           * @return {Array} the sorted list
           *
           * @example
           * <div class = 'norender'><code>
           * function setup() {
           *   let words = ['banana', 'apple', 'pear', 'lime'];
           *   print(words); // ['banana', 'apple', 'pear', 'lime']
           *   let count = 4; // length of array
           *
           *   words = sort(words, count);
           *   print(words); // ['apple', 'banana', 'lime', 'pear']
           * }
           * </code></div>
           * <div class = 'norender'><code>
           * function setup() {
           *   let numbers = [2, 6, 1, 5, 14, 9, 8, 12];
           *   print(numbers); // [2, 6, 1, 5, 14, 9, 8, 12]
           *   let count = 5; // Less than the length of the array
           *
           *   numbers = sort(numbers, count);
           *   print(numbers); // [1,2,5,6,14,9,8,12]
           * }
           * </code></div>
           */ cov_291klxiubc.s[33]++;
          _main.default.prototype.sort = function(list, count) {
            cov_291klxiubc.f[6]++;
            var arr = (cov_291klxiubc.s[34]++,
            count
              ? (cov_291klxiubc.b[5][0]++, list.slice(0, Math.min(count, list.length)))
              : (cov_291klxiubc.b[5][1]++, list));
            var rest = (cov_291klxiubc.s[35]++,
            count
              ? (cov_291klxiubc.b[6][0]++, list.slice(Math.min(count, list.length)))
              : (cov_291klxiubc.b[6][1]++, []));
            cov_291klxiubc.s[36]++;
            if (typeof arr[0] === 'string') {
              cov_291klxiubc.b[7][0]++;
              cov_291klxiubc.s[37]++;
              arr = arr.sort();
            } else {
              cov_291klxiubc.b[7][1]++;
              cov_291klxiubc.s[38]++;
              arr = arr.sort(function(a, b) {
                cov_291klxiubc.f[7]++;
                cov_291klxiubc.s[39]++;
                return a - b;
              });
            }
            cov_291klxiubc.s[40]++;
            return arr.concat(rest);
          };

          /**
           * Inserts a value or an array of values into an existing array. The first
           * parameter specifies the initial array to be modified, and the second
           * parameter defines the data to be inserted. The third parameter is an index
           * value which specifies the array position from which to insert data.
           * (Remember that array index numbering starts at zero, so the first position
           * is 0, the second position is 1, and so on.)
           *
           * @method splice
           * @deprecated Use <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice">array.splice()</a> instead.
           * @param {Array}  list Array to splice into
           * @param {any}    value value to be spliced in
           * @param {Integer} position in the array from which to insert data
           * @return {Array} the list
           *
           * @example
           * <div class = 'norender'><code>
           * function setup() {
           *   let myArray = [0, 1, 2, 3, 4];
           *   let insArray = ['A', 'B', 'C'];
           *   print(myArray); // [0, 1, 2, 3, 4]
           *   print(insArray); // ['A','B','C']
           *
           *   splice(myArray, insArray, 3);
           *   print(myArray); // [0,1,2,'A','B','C',3,4]
           * }
           * </code></div>
           */ cov_291klxiubc.s[41]++;
          _main.default.prototype.splice = function(list, value, index) {
            cov_291klxiubc.f[8]++;
            cov_291klxiubc.s[42]++;
            // note that splice returns spliced elements and not an array
            Array.prototype.splice.apply(list, [index, 0].concat(value));
            cov_291klxiubc.s[43]++;

            return list;
          };

          /**
           * Extracts an array of elements from an existing array. The list parameter
           * defines the array from which the elements will be copied, and the start
           * and count parameters specify which elements to extract. If no count is
           * given, elements will be extracted from the start to the end of the array.
           * When specifying the start, remember that the first array element is 0.
           * This function does not change the source array.
           *
           * @method subset
           * @deprecated Use <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice">array.slice()</a> instead.
           * @param  {Array}  list    Array to extract from
           * @param  {Integer} start   position to begin
           * @param  {Integer} [count] number of values to extract
           * @return {Array}          Array of extracted elements
           *
           * @example
           * <div class = 'norender'><code>
           * function setup() {
           *   let myArray = [1, 2, 3, 4, 5];
           *   print(myArray); // [1, 2, 3, 4, 5]
           *
           *   let sub1 = subset(myArray, 0, 3);
           *   let sub2 = subset(myArray, 2, 2);
           *   print(sub1); // [1,2,3]
           *   print(sub2); // [3,4]
           * }
           * </code></div>
           */ cov_291klxiubc.s[44]++;
          _main.default.prototype.subset = function(list, start, count) {
            cov_291klxiubc.f[9]++;
            cov_291klxiubc.s[45]++;
            if (typeof count !== 'undefined') {
              cov_291klxiubc.b[8][0]++;
              cov_291klxiubc.s[46]++;
              return list.slice(start, start + count);
            } else {
              cov_291klxiubc.b[8][1]++;
              cov_291klxiubc.s[47]++;
              return list.slice(start, list.length);
            }
          };
          var _default = _main.default;
          exports.default = _default;
        },
        {
          '../core/main': 283,
          'core-js/modules/es.array-buffer.constructor': 165,
          'core-js/modules/es.array.concat': 166,
          'core-js/modules/es.array.slice': 178,
          'core-js/modules/es.array.splice': 180,
          'core-js/modules/es.object.to-string': 192
        }
      ],
      323: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_21i0t9vdir = (function() {
            var path = '/Users/outofambit/src/p5.js/src/utilities/conversion.js';
            var hash = '297d8e36bb2b949220a1d0ad6d36c8a7c036c603';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/utilities/conversion.js',
              statementMap: {
                '0': { start: { line: 37, column: 0 }, end: { line: 42, column: 2 } },
                '1': { start: { line: 38, column: 2 }, end: { line: 40, column: 3 } },
                '2': { start: { line: 39, column: 4 }, end: { line: 39, column: 31 } },
                '3': { start: { line: 41, column: 2 }, end: { line: 41, column: 25 } },
                '4': { start: { line: 72, column: 0 }, end: { line: 86, column: 2 } },
                '5': { start: { line: 73, column: 2 }, end: { line: 85, column: 3 } },
                '6': { start: { line: 74, column: 4 }, end: { line: 74, column: 20 } },
                '7': { start: { line: 75, column: 9 }, end: { line: 85, column: 3 } },
                '8': { start: { line: 76, column: 4 }, end: { line: 76, column: 21 } },
                '9': { start: { line: 77, column: 9 }, end: { line: 85, column: 3 } },
                '10': { start: { line: 78, column: 4 }, end: { line: 78, column: 30 } },
                '11': { start: { line: 79, column: 9 }, end: { line: 85, column: 3 } },
                '12': { start: { line: 80, column: 4 }, end: { line: 80, column: 17 } },
                '13': { start: { line: 81, column: 9 }, end: { line: 85, column: 3 } },
                '14': { start: { line: 82, column: 4 }, end: { line: 82, column: 21 } },
                '15': { start: { line: 83, column: 9 }, end: { line: 85, column: 3 } },
                '16': { start: { line: 84, column: 4 }, end: { line: 84, column: 50 } },
                '17': { start: { line: 84, column: 22 }, end: { line: 84, column: 48 } },
                '18': { start: { line: 106, column: 0 }, end: { line: 112, column: 2 } },
                '19': { start: { line: 107, column: 2 }, end: { line: 111, column: 3 } },
                '20': { start: { line: 108, column: 4 }, end: { line: 108, column: 35 } },
                '21': { start: { line: 110, column: 4 }, end: { line: 110, column: 21 } },
                '22': { start: { line: 134, column: 0 }, end: { line: 144, column: 2 } },
                '23': { start: { line: 135, column: 2 }, end: { line: 143, column: 3 } },
                '24': { start: { line: 136, column: 4 }, end: { line: 136, column: 19 } },
                '25': { start: { line: 137, column: 9 }, end: { line: 143, column: 3 } },
                '26': { start: { line: 138, column: 4 }, end: { line: 138, column: 38 } },
                '27': { start: { line: 139, column: 9 }, end: { line: 143, column: 3 } },
                '28': { start: { line: 140, column: 4 }, end: { line: 140, column: 13 } },
                '29': { start: { line: 141, column: 9 }, end: { line: 143, column: 3 } },
                '30': { start: { line: 142, column: 4 }, end: { line: 142, column: 39 } },
                '31': { start: { line: 173, column: 0 }, end: { line: 180, column: 2 } },
                '32': { start: { line: 174, column: 13 }, end: { line: 174, column: 36 } },
                '33': { start: { line: 175, column: 2 }, end: { line: 179, column: 3 } },
                '34': { start: { line: 176, column: 4 }, end: { line: 176, column: 34 } },
                '35': { start: { line: 177, column: 9 }, end: { line: 179, column: 3 } },
                '36': { start: { line: 178, column: 4 }, end: { line: 178, column: 37 } },
                '37': { start: { line: 206, column: 0 }, end: { line: 214, column: 2 } },
                '38': { start: { line: 207, column: 2 }, end: { line: 213, column: 3 } },
                '39': { start: { line: 208, column: 4 }, end: { line: 208, column: 34 } },
                '40': { start: { line: 209, column: 9 }, end: { line: 213, column: 3 } },
                '41': { start: { line: 210, column: 4 }, end: { line: 210, column: 36 } },
                '42': { start: { line: 211, column: 9 }, end: { line: 213, column: 3 } },
                '43': { start: { line: 212, column: 4 }, end: { line: 212, column: 46 } },
                '44': { start: { line: 237, column: 0 }, end: { line: 243, column: 2 } },
                '45': { start: { line: 238, column: 2 }, end: { line: 242, column: 3 } },
                '46': { start: { line: 239, column: 4 }, end: { line: 239, column: 27 } },
                '47': { start: { line: 240, column: 9 }, end: { line: 242, column: 3 } },
                '48': { start: { line: 241, column: 4 }, end: { line: 241, column: 38 } },
                '49': { start: { line: 271, column: 0 }, end: { line: 293, column: 2 } },
                '50': { start: { line: 272, column: 2 }, end: { line: 272, column: 75 } },
                '51': { start: { line: 273, column: 2 }, end: { line: 292, column: 3 } },
                '52': { start: { line: 274, column: 4 }, end: { line: 274, column: 51 } },
                '53': { start: { line: 274, column: 22 }, end: { line: 274, column: 49 } },
                '54': { start: { line: 275, column: 9 }, end: { line: 292, column: 3 } },
                '55': { start: { line: 276, column: 14 }, end: { line: 276, column: 40 } },
                '56': { start: { line: 277, column: 4 }, end: { line: 277, column: 28 } },
                '57': { start: { line: 278, column: 9 }, end: { line: 292, column: 3 } },
                '58': { start: { line: 279, column: 4 }, end: { line: 281, column: 5 } },
                '59': { start: { line: 280, column: 6 }, end: { line: 280, column: 29 } },
                '60': { start: { line: 282, column: 14 }, end: { line: 284, column: 20 } },
                '61': { start: { line: 285, column: 4 }, end: { line: 287, column: 5 } },
                '62': { start: { line: 286, column: 6 }, end: { line: 286, column: 22 } },
                '63': { start: { line: 288, column: 4 }, end: { line: 290, column: 5 } },
                '64': { start: { line: 289, column: 6 }, end: { line: 289, column: 59 } },
                '65': { start: { line: 291, column: 4 }, end: { line: 291, column: 15 } },
                '66': { start: { line: 316, column: 0 }, end: { line: 322, column: 2 } },
                '67': { start: { line: 317, column: 2 }, end: { line: 321, column: 3 } },
                '68': { start: { line: 318, column: 4 }, end: { line: 318, column: 37 } },
                '69': { start: { line: 320, column: 4 }, end: { line: 320, column: 34 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 37, column: 21 }, end: { line: 37, column: 22 } },
                  loc: { start: { line: 37, column: 35 }, end: { line: 42, column: 1 } },
                  line: 37
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 72, column: 19 }, end: { line: 72, column: 20 } },
                  loc: { start: { line: 72, column: 43 }, end: { line: 86, column: 1 } },
                  line: 72
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: { start: { line: 84, column: 17 }, end: { line: 84, column: 18 } },
                  loc: { start: { line: 84, column: 22 }, end: { line: 84, column: 48 } },
                  line: 84
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 106, column: 19 },
                    end: { line: 106, column: 20 }
                  },
                  loc: { start: { line: 106, column: 31 }, end: { line: 112, column: 1 } },
                  line: 106
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 134, column: 23 },
                    end: { line: 134, column: 24 }
                  },
                  loc: { start: { line: 134, column: 35 }, end: { line: 144, column: 1 } },
                  line: 134
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 173, column: 20 },
                    end: { line: 173, column: 21 }
                  },
                  loc: { start: { line: 173, column: 32 }, end: { line: 180, column: 1 } },
                  line: 173
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 206, column: 20 },
                    end: { line: 206, column: 21 }
                  },
                  loc: { start: { line: 206, column: 32 }, end: { line: 214, column: 1 } },
                  line: 206
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 237, column: 22 },
                    end: { line: 237, column: 23 }
                  },
                  loc: { start: { line: 237, column: 34 }, end: { line: 243, column: 1 } },
                  line: 237
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 271, column: 19 },
                    end: { line: 271, column: 20 }
                  },
                  loc: { start: { line: 271, column: 39 }, end: { line: 293, column: 1 } },
                  line: 271
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 274, column: 17 },
                    end: { line: 274, column: 18 }
                  },
                  loc: { start: { line: 274, column: 22 }, end: { line: 274, column: 49 } },
                  line: 274
                },
                '10': {
                  name: '(anonymous_10)',
                  decl: {
                    start: { line: 316, column: 21 },
                    end: { line: 316, column: 22 }
                  },
                  loc: { start: { line: 316, column: 33 }, end: { line: 322, column: 1 } },
                  line: 316
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 38, column: 2 }, end: { line: 40, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 38, column: 2 }, end: { line: 40, column: 3 } },
                    { start: { line: 38, column: 2 }, end: { line: 40, column: 3 } }
                  ],
                  line: 38
                },
                '1': {
                  loc: { start: { line: 72, column: 31 }, end: { line: 72, column: 41 } },
                  type: 'default-arg',
                  locations: [
                    { start: { line: 72, column: 39 }, end: { line: 72, column: 41 } }
                  ],
                  line: 72
                },
                '2': {
                  loc: { start: { line: 73, column: 2 }, end: { line: 85, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 73, column: 2 }, end: { line: 85, column: 3 } },
                    { start: { line: 73, column: 2 }, end: { line: 85, column: 3 } }
                  ],
                  line: 73
                },
                '3': {
                  loc: { start: { line: 73, column: 6 }, end: { line: 73, column: 40 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 73, column: 6 }, end: { line: 73, column: 20 } },
                    { start: { line: 73, column: 24 }, end: { line: 73, column: 40 } }
                  ],
                  line: 73
                },
                '4': {
                  loc: { start: { line: 75, column: 9 }, end: { line: 85, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 75, column: 9 }, end: { line: 85, column: 3 } },
                    { start: { line: 75, column: 9 }, end: { line: 85, column: 3 } }
                  ],
                  line: 75
                },
                '5': {
                  loc: { start: { line: 75, column: 13 }, end: { line: 75, column: 49 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 75, column: 13 }, end: { line: 75, column: 28 } },
                    { start: { line: 75, column: 32 }, end: { line: 75, column: 49 } }
                  ],
                  line: 75
                },
                '6': {
                  loc: { start: { line: 77, column: 9 }, end: { line: 85, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 77, column: 9 }, end: { line: 85, column: 3 } },
                    { start: { line: 77, column: 9 }, end: { line: 85, column: 3 } }
                  ],
                  line: 77
                },
                '7': {
                  loc: { start: { line: 79, column: 9 }, end: { line: 85, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 79, column: 9 }, end: { line: 85, column: 3 } },
                    { start: { line: 79, column: 9 }, end: { line: 85, column: 3 } }
                  ],
                  line: 79
                },
                '8': {
                  loc: { start: { line: 81, column: 9 }, end: { line: 85, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 81, column: 9 }, end: { line: 85, column: 3 } },
                    { start: { line: 81, column: 9 }, end: { line: 85, column: 3 } }
                  ],
                  line: 81
                },
                '9': {
                  loc: { start: { line: 82, column: 11 }, end: { line: 82, column: 20 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 82, column: 15 }, end: { line: 82, column: 16 } },
                    { start: { line: 82, column: 19 }, end: { line: 82, column: 20 } }
                  ],
                  line: 82
                },
                '10': {
                  loc: { start: { line: 83, column: 9 }, end: { line: 85, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 83, column: 9 }, end: { line: 85, column: 3 } },
                    { start: { line: 83, column: 9 }, end: { line: 85, column: 3 } }
                  ],
                  line: 83
                },
                '11': {
                  loc: { start: { line: 107, column: 2 }, end: { line: 111, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 107, column: 2 }, end: { line: 111, column: 3 } },
                    { start: { line: 107, column: 2 }, end: { line: 111, column: 3 } }
                  ],
                  line: 107
                },
                '12': {
                  loc: { start: { line: 135, column: 2 }, end: { line: 143, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 135, column: 2 }, end: { line: 143, column: 3 } },
                    { start: { line: 135, column: 2 }, end: { line: 143, column: 3 } }
                  ],
                  line: 135
                },
                '13': {
                  loc: { start: { line: 137, column: 9 }, end: { line: 143, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 137, column: 9 }, end: { line: 143, column: 3 } },
                    { start: { line: 137, column: 9 }, end: { line: 143, column: 3 } }
                  ],
                  line: 137
                },
                '14': {
                  loc: { start: { line: 139, column: 9 }, end: { line: 143, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 139, column: 9 }, end: { line: 143, column: 3 } },
                    { start: { line: 139, column: 9 }, end: { line: 143, column: 3 } }
                  ],
                  line: 139
                },
                '15': {
                  loc: { start: { line: 141, column: 9 }, end: { line: 143, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 141, column: 9 }, end: { line: 143, column: 3 } },
                    { start: { line: 141, column: 9 }, end: { line: 143, column: 3 } }
                  ],
                  line: 141
                },
                '16': {
                  loc: { start: { line: 175, column: 2 }, end: { line: 179, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 175, column: 2 }, end: { line: 179, column: 3 } },
                    { start: { line: 175, column: 2 }, end: { line: 179, column: 3 } }
                  ],
                  line: 175
                },
                '17': {
                  loc: { start: { line: 177, column: 9 }, end: { line: 179, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 177, column: 9 }, end: { line: 179, column: 3 } },
                    { start: { line: 177, column: 9 }, end: { line: 179, column: 3 } }
                  ],
                  line: 177
                },
                '18': {
                  loc: { start: { line: 207, column: 2 }, end: { line: 213, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 207, column: 2 }, end: { line: 213, column: 3 } },
                    { start: { line: 207, column: 2 }, end: { line: 213, column: 3 } }
                  ],
                  line: 207
                },
                '19': {
                  loc: { start: { line: 207, column: 6 }, end: { line: 207, column: 40 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 207, column: 6 }, end: { line: 207, column: 27 } },
                    { start: { line: 207, column: 31 }, end: { line: 207, column: 40 } }
                  ],
                  line: 207
                },
                '20': {
                  loc: { start: { line: 209, column: 9 }, end: { line: 213, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 209, column: 9 }, end: { line: 213, column: 3 } },
                    { start: { line: 209, column: 9 }, end: { line: 213, column: 3 } }
                  ],
                  line: 209
                },
                '21': {
                  loc: { start: { line: 211, column: 9 }, end: { line: 213, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 211, column: 9 }, end: { line: 213, column: 3 } },
                    { start: { line: 211, column: 9 }, end: { line: 213, column: 3 } }
                  ],
                  line: 211
                },
                '22': {
                  loc: { start: { line: 238, column: 2 }, end: { line: 242, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 238, column: 2 }, end: { line: 242, column: 3 } },
                    { start: { line: 238, column: 2 }, end: { line: 242, column: 3 } }
                  ],
                  line: 238
                },
                '23': {
                  loc: { start: { line: 238, column: 6 }, end: { line: 238, column: 45 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 238, column: 6 }, end: { line: 238, column: 27 } },
                    { start: { line: 238, column: 31 }, end: { line: 238, column: 45 } }
                  ],
                  line: 238
                },
                '24': {
                  loc: { start: { line: 240, column: 9 }, end: { line: 242, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 240, column: 9 }, end: { line: 242, column: 3 } },
                    { start: { line: 240, column: 9 }, end: { line: 242, column: 3 } }
                  ],
                  line: 240
                },
                '25': {
                  loc: { start: { line: 272, column: 11 }, end: { line: 272, column: 74 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 272, column: 54 }, end: { line: 272, column: 64 } },
                    { start: { line: 272, column: 68 }, end: { line: 272, column: 74 } }
                  ],
                  line: 272
                },
                '26': {
                  loc: { start: { line: 272, column: 11 }, end: { line: 272, column: 50 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 272, column: 11 }, end: { line: 272, column: 31 } },
                    { start: { line: 272, column: 35 }, end: { line: 272, column: 50 } }
                  ],
                  line: 272
                },
                '27': {
                  loc: { start: { line: 273, column: 2 }, end: { line: 292, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 273, column: 2 }, end: { line: 292, column: 3 } },
                    { start: { line: 273, column: 2 }, end: { line: 292, column: 3 } }
                  ],
                  line: 273
                },
                '28': {
                  loc: { start: { line: 275, column: 9 }, end: { line: 292, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 275, column: 9 }, end: { line: 292, column: 3 } },
                    { start: { line: 275, column: 9 }, end: { line: 292, column: 3 } }
                  ],
                  line: 275
                },
                '29': {
                  loc: { start: { line: 275, column: 13 }, end: { line: 275, column: 46 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 275, column: 13 }, end: { line: 275, column: 27 } },
                    { start: { line: 275, column: 31 }, end: { line: 275, column: 46 } }
                  ],
                  line: 275
                },
                '30': {
                  loc: { start: { line: 276, column: 14 }, end: { line: 276, column: 40 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 276, column: 31 }, end: { line: 276, column: 34 } },
                    { start: { line: 276, column: 37 }, end: { line: 276, column: 40 } }
                  ],
                  line: 276
                },
                '31': {
                  loc: { start: { line: 278, column: 9 }, end: { line: 292, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 278, column: 9 }, end: { line: 292, column: 3 } },
                    { start: { line: 278, column: 9 }, end: { line: 292, column: 3 } }
                  ],
                  line: 278
                },
                '32': {
                  loc: { start: { line: 279, column: 4 }, end: { line: 281, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 279, column: 4 }, end: { line: 281, column: 5 } },
                    { start: { line: 279, column: 4 }, end: { line: 281, column: 5 } }
                  ],
                  line: 279
                },
                '33': {
                  loc: { start: { line: 288, column: 4 }, end: { line: 290, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 288, column: 4 }, end: { line: 290, column: 5 } },
                    { start: { line: 288, column: 4 }, end: { line: 290, column: 5 } }
                  ],
                  line: 288
                },
                '34': {
                  loc: { start: { line: 317, column: 2 }, end: { line: 321, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 317, column: 2 }, end: { line: 321, column: 3 } },
                    { start: { line: 317, column: 2 }, end: { line: 321, column: 3 } }
                  ],
                  line: 317
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0
              },
              b: {
                '0': [0, 0],
                '1': [0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0],
                '20': [0, 0],
                '21': [0, 0],
                '22': [0, 0],
                '23': [0, 0],
                '24': [0, 0],
                '25': [0, 0],
                '26': [0, 0],
                '27': [0, 0],
                '28': [0, 0],
                '29': [0, 0],
                '30': [0, 0],
                '31': [0, 0],
                '32': [0, 0],
                '33': [0, 0],
                '34': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '297d8e36bb2b949220a1d0ad6d36c8a7c036c603'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.map');
          _dereq_('core-js/modules/es.number.constructor');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.regexp.to-string');
          _dereq_('core-js/modules/es.string.repeat');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_21i0t9vdir.s[0]++;

          /**
           * Converts a string to its floating point representation. The contents of a
           * string must resemble a number, or NaN (not a number) will be returned.
           * For example, float("1234.56") evaluates to 1234.56, but float("giraffe")
           * will return NaN.
           *
           * When an array of values is passed in, then an array of floats of the same
           * length is returned.
           *
           * @method float
           * @param {String}  str float string to parse
           * @return {Number}     floating point representation of string
           * @example
           * <div><code>
           * let str = '20';
           * let diameter = float(str);
           * ellipse(width / 2, height / 2, diameter, diameter);
           * </code></div>
           * <div class='norender'><code>
           * print(float('10.31')); // 10.31
           * print(float('Infinity')); // Infinity
           * print(float('-Infinity')); // -Infinity
           * </code></div>
           *
           * @alt
           * 20 by 20 white ellipse in the center of the canvas
           */
          _main.default.prototype.float = function(str) {
            cov_21i0t9vdir.f[0]++;
            cov_21i0t9vdir.s[1]++;
            if (str instanceof Array) {
              cov_21i0t9vdir.b[0][0]++;
              cov_21i0t9vdir.s[2]++;
              return str.map(parseFloat);
            } else {
              cov_21i0t9vdir.b[0][1]++;
            }
            cov_21i0t9vdir.s[3]++;
            return parseFloat(str);
          };

          /**
           * Converts a boolean, string, or float to its integer representation.
           * When an array of values is passed in, then an int array of the same length
           * is returned.
           *
           * @method int
           * @param {String|Boolean|Number}       n value to parse
           * @param {Integer}       [radix] the radix to convert to (default: 10)
           * @return {Number}                     integer representation of value
           *
           * @example
           * <div class='norender'><code>
           * print(int('10')); // 10
           * print(int(10.31)); // 10
           * print(int(-10)); // -10
           * print(int(true)); // 1
           * print(int(false)); // 0
           * print(int([false, true, '10.3', 9.8])); // [0, 1, 10, 9]
           * print(int(Infinity)); // Infinity
           * print(int('-Infinity')); // -Infinity
           * </code></div>
           */
          /**
           * @method int
           * @param {Array} ns                    values to parse
           * @param {Integer}       [radix]
           * @return {Number[]}                   integer representation of values
           */ cov_21i0t9vdir.s[4]++;
          _main.default.prototype.int = function(n) {
            var radix =
              arguments.length > 1 && arguments[1] !== undefined
                ? arguments[1]
                : (cov_21i0t9vdir.b[1][0]++, 10);
            cov_21i0t9vdir.f[1]++;
            cov_21i0t9vdir.s[5]++;
            if (
              (cov_21i0t9vdir.b[3][0]++, n === Infinity) ||
              (cov_21i0t9vdir.b[3][1]++, n === 'Infinity')
            ) {
              cov_21i0t9vdir.b[2][0]++;
              cov_21i0t9vdir.s[6]++;
              return Infinity;
            } else {
              cov_21i0t9vdir.b[2][1]++;
              cov_21i0t9vdir.s[7]++;
              if (
                (cov_21i0t9vdir.b[5][0]++, n === -Infinity) ||
                (cov_21i0t9vdir.b[5][1]++, n === '-Infinity')
              ) {
                cov_21i0t9vdir.b[4][0]++;
                cov_21i0t9vdir.s[8]++;
                return -Infinity;
              } else {
                cov_21i0t9vdir.b[4][1]++;
                cov_21i0t9vdir.s[9]++;
                if (typeof n === 'string') {
                  cov_21i0t9vdir.b[6][0]++;
                  cov_21i0t9vdir.s[10]++;
                  return parseInt(n, radix);
                } else {
                  cov_21i0t9vdir.b[6][1]++;
                  cov_21i0t9vdir.s[11]++;
                  if (typeof n === 'number') {
                    cov_21i0t9vdir.b[7][0]++;
                    cov_21i0t9vdir.s[12]++;
                    return n | 0;
                  } else {
                    cov_21i0t9vdir.b[7][1]++;
                    cov_21i0t9vdir.s[13]++;
                    if (typeof n === 'boolean') {
                      cov_21i0t9vdir.b[8][0]++;
                      cov_21i0t9vdir.s[14]++;
                      return n
                        ? (cov_21i0t9vdir.b[9][0]++, 1)
                        : (cov_21i0t9vdir.b[9][1]++, 0);
                    } else {
                      cov_21i0t9vdir.b[8][1]++;
                      cov_21i0t9vdir.s[15]++;
                      if (n instanceof Array) {
                        cov_21i0t9vdir.b[10][0]++;
                        cov_21i0t9vdir.s[16]++;
                        return n.map(function(n) {
                          cov_21i0t9vdir.f[2]++;
                          cov_21i0t9vdir.s[17]++;
                          return _main.default.prototype.int(n, radix);
                        });
                      } else {
                        cov_21i0t9vdir.b[10][1]++;
                      }
                    }
                  }
                }
              }
            }
          };

          /**
           * Converts a boolean, string or number to its string representation.
           * When an array of values is passed in, then an array of strings of the same
           * length is returned.
           *
           * @method str
           * @param {String|Boolean|Number|Array} n value to parse
           * @return {String}                     string representation of value
           * @example
           * <div class='norender'><code>
           * print(str('10')); // "10"
           * print(str(10.31)); // "10.31"
           * print(str(-10)); // "-10"
           * print(str(true)); // "true"
           * print(str(false)); // "false"
           * print(str([true, '10.3', 9.8])); // [ "true", "10.3", "9.8" ]
           * </code></div>
           */ cov_21i0t9vdir.s[18]++;
          _main.default.prototype.str = function(n) {
            cov_21i0t9vdir.f[3]++;
            cov_21i0t9vdir.s[19]++;
            if (n instanceof Array) {
              cov_21i0t9vdir.b[11][0]++;
              cov_21i0t9vdir.s[20]++;
              return n.map(_main.default.prototype.str);
            } else {
              cov_21i0t9vdir.b[11][1]++;
              cov_21i0t9vdir.s[21]++;
              return String(n);
            }
          };

          /**
           * Converts a number or string to its boolean representation.
           * For a number, any non-zero value (positive or negative) evaluates to true,
           * while zero evaluates to false. For a string, the value "true" evaluates to
           * true, while any other value evaluates to false. When an array of number or
           * string values is passed in, then a array of booleans of the same length is
           * returned.
           *
           * @method boolean
           * @param {String|Boolean|Number|Array} n value to parse
           * @return {Boolean}                    boolean representation of value
           * @example
           * <div class='norender'><code>
           * print(boolean(0)); // false
           * print(boolean(1)); // true
           * print(boolean('true')); // true
           * print(boolean('abcd')); // false
           * print(boolean([0, 12, 'true'])); // [false, true, true]
           * </code></div>
           */ cov_21i0t9vdir.s[22]++;
          _main.default.prototype.boolean = function(n) {
            cov_21i0t9vdir.f[4]++;
            cov_21i0t9vdir.s[23]++;
            if (typeof n === 'number') {
              cov_21i0t9vdir.b[12][0]++;
              cov_21i0t9vdir.s[24]++;
              return n !== 0;
            } else {
              cov_21i0t9vdir.b[12][1]++;
              cov_21i0t9vdir.s[25]++;
              if (typeof n === 'string') {
                cov_21i0t9vdir.b[13][0]++;
                cov_21i0t9vdir.s[26]++;
                return n.toLowerCase() === 'true';
              } else {
                cov_21i0t9vdir.b[13][1]++;
                cov_21i0t9vdir.s[27]++;
                if (typeof n === 'boolean') {
                  cov_21i0t9vdir.b[14][0]++;
                  cov_21i0t9vdir.s[28]++;
                  return n;
                } else {
                  cov_21i0t9vdir.b[14][1]++;
                  cov_21i0t9vdir.s[29]++;
                  if (n instanceof Array) {
                    cov_21i0t9vdir.b[15][0]++;
                    cov_21i0t9vdir.s[30]++;
                    return n.map(_main.default.prototype.boolean);
                  } else {
                    cov_21i0t9vdir.b[15][1]++;
                  }
                }
              }
            }
          };

          /**
           * Converts a number, string representation of a number, or boolean to its byte
           * representation. A byte can be only a whole number between -128 and 127, so
           * when a value outside of this range is converted, it wraps around to the
           * corresponding byte representation. When an array of number, string or boolean
           * values is passed in, then an array of bytes the same length is returned.
           *
           * @method byte
           * @param {String|Boolean|Number}       n value to parse
           * @return {Number}                     byte representation of value
           *
           * @example
           * <div class='norender'><code>
           * print(byte(127)); // 127
           * print(byte(128)); // -128
           * print(byte(23.4)); // 23
           * print(byte('23.4')); // 23
           * print(byte('hello')); // NaN
           * print(byte(true)); // 1
           * print(byte([0, 255, '100'])); // [0, -1, 100]
           * </code></div>
           */
          /**
           * @method byte
           * @param {Array} ns                   values to parse
           * @return {Number[]}                  array of byte representation of values
           */ cov_21i0t9vdir.s[31]++;
          _main.default.prototype.byte = function(n) {
            cov_21i0t9vdir.f[5]++;
            var nn = (cov_21i0t9vdir.s[32]++, _main.default.prototype.int(n, 10));
            cov_21i0t9vdir.s[33]++;
            if (typeof nn === 'number') {
              cov_21i0t9vdir.b[16][0]++;
              cov_21i0t9vdir.s[34]++;
              return (nn + 128) % 256 - 128;
            } else {
              cov_21i0t9vdir.b[16][1]++;
              cov_21i0t9vdir.s[35]++;
              if (nn instanceof Array) {
                cov_21i0t9vdir.b[17][0]++;
                cov_21i0t9vdir.s[36]++;
                return nn.map(_main.default.prototype.byte);
              } else {
                cov_21i0t9vdir.b[17][1]++;
              }
            }
          };

          /**
           * Converts a number or string to its corresponding single-character
           * string representation. If a string parameter is provided, it is first
           * parsed as an integer and then translated into a single-character string.
           * When an array of number or string values is passed in, then an array of
           * single-character strings of the same length is returned.
           *
           * @method char
           * @param {String|Number}       n value to parse
           * @return {String}             string representation of value
           *
           * @example
           * <div class='norender'><code>
           * print(char(65)); // "A"
           * print(char('65')); // "A"
           * print(char([65, 66, 67])); // [ "A", "B", "C" ]
           * print(join(char([65, 66, 67]), '')); // "ABC"
           * </code></div>
           */
          /**
           * @method char
           * @param {Array} ns              values to parse
           * @return {String[]}             array of string representation of values
           */ cov_21i0t9vdir.s[37]++;
          _main.default.prototype.char = function(n) {
            cov_21i0t9vdir.f[6]++;
            cov_21i0t9vdir.s[38]++;
            if (
              (cov_21i0t9vdir.b[19][0]++, typeof n === 'number') &&
              (cov_21i0t9vdir.b[19][1]++, !isNaN(n))
            ) {
              cov_21i0t9vdir.b[18][0]++;
              cov_21i0t9vdir.s[39]++;
              return String.fromCharCode(n);
            } else {
              cov_21i0t9vdir.b[18][1]++;
              cov_21i0t9vdir.s[40]++;
              if (n instanceof Array) {
                cov_21i0t9vdir.b[20][0]++;
                cov_21i0t9vdir.s[41]++;
                return n.map(_main.default.prototype.char);
              } else {
                cov_21i0t9vdir.b[20][1]++;
                cov_21i0t9vdir.s[42]++;
                if (typeof n === 'string') {
                  cov_21i0t9vdir.b[21][0]++;
                  cov_21i0t9vdir.s[43]++;
                  return _main.default.prototype.char(parseInt(n, 10));
                } else {
                  cov_21i0t9vdir.b[21][1]++;
                }
              }
            }
          };

          /**
           * Converts a single-character string to its corresponding integer
           * representation. When an array of single-character string values is passed
           * in, then an array of integers of the same length is returned.
           *
           * @method unchar
           * @param {String} n     value to parse
           * @return {Number}      integer representation of value
           *
           * @example
           * <div class='norender'><code>
           * print(unchar('A')); // 65
           * print(unchar(['A', 'B', 'C'])); // [ 65, 66, 67 ]
           * print(unchar(split('ABC', ''))); // [ 65, 66, 67 ]
           * </code></div>
           */
          /**
           * @method unchar
           * @param {Array} ns       values to parse
           * @return {Number[]}      integer representation of values
           */ cov_21i0t9vdir.s[44]++;
          _main.default.prototype.unchar = function(n) {
            cov_21i0t9vdir.f[7]++;
            cov_21i0t9vdir.s[45]++;
            if (
              (cov_21i0t9vdir.b[23][0]++, typeof n === 'string') &&
              (cov_21i0t9vdir.b[23][1]++, n.length === 1)
            ) {
              cov_21i0t9vdir.b[22][0]++;
              cov_21i0t9vdir.s[46]++;
              return n.charCodeAt(0);
            } else {
              cov_21i0t9vdir.b[22][1]++;
              cov_21i0t9vdir.s[47]++;
              if (n instanceof Array) {
                cov_21i0t9vdir.b[24][0]++;
                cov_21i0t9vdir.s[48]++;
                return n.map(_main.default.prototype.unchar);
              } else {
                cov_21i0t9vdir.b[24][1]++;
              }
            }
          };

          /**
           * Converts a number to a string in its equivalent hexadecimal notation. If a
           * second parameter is passed, it is used to set the number of characters to
           * generate in the hexadecimal notation. When an array is passed in, an
           * array of strings in hexadecimal notation of the same length is returned.
           *
           * @method hex
           * @param {Number} n     value to parse
           * @param {Number} [digits]
           * @return {String}      hexadecimal string representation of value
           *
           * @example
           * <div class='norender'><code>
           * print(hex(255)); // "000000FF"
           * print(hex(255, 6)); // "0000FF"
           * print(hex([0, 127, 255], 6)); // [ "000000", "00007F", "0000FF" ]
           * print(Infinity); // "FFFFFFFF"
           * print(-Infinity); // "00000000"
           * </code></div>
           */
          /**
           * @method hex
           * @param {Number[]} ns    array of values to parse
           * @param {Number} [digits]
           * @return {String[]}      hexadecimal string representation of values
           */ cov_21i0t9vdir.s[49]++;
          _main.default.prototype.hex = function(n, digits) {
            cov_21i0t9vdir.f[8]++;
            cov_21i0t9vdir.s[50]++;
            digits =
              (cov_21i0t9vdir.b[26][0]++, digits === undefined) ||
              (cov_21i0t9vdir.b[26][1]++, digits === null)
                ? (cov_21i0t9vdir.b[25][0]++, (digits = 8))
                : (cov_21i0t9vdir.b[25][1]++, digits);
            cov_21i0t9vdir.s[51]++;
            if (n instanceof Array) {
              cov_21i0t9vdir.b[27][0]++;
              cov_21i0t9vdir.s[52]++;
              return n.map(function(n) {
                cov_21i0t9vdir.f[9]++;
                cov_21i0t9vdir.s[53]++;
                return _main.default.prototype.hex(n, digits);
              });
            } else {
              cov_21i0t9vdir.b[27][1]++;
              cov_21i0t9vdir.s[54]++;
              if (
                (cov_21i0t9vdir.b[29][0]++, n === Infinity) ||
                (cov_21i0t9vdir.b[29][1]++, n === -Infinity)
              ) {
                cov_21i0t9vdir.b[28][0]++;
                var c = (cov_21i0t9vdir.s[55]++,
                n === Infinity
                  ? (cov_21i0t9vdir.b[30][0]++, 'F')
                  : (cov_21i0t9vdir.b[30][1]++, '0'));
                cov_21i0t9vdir.s[56]++;
                return c.repeat(digits);
              } else {
                cov_21i0t9vdir.b[28][1]++;
                cov_21i0t9vdir.s[57]++;
                if (typeof n === 'number') {
                  cov_21i0t9vdir.b[31][0]++;
                  cov_21i0t9vdir.s[58]++;
                  if (n < 0) {
                    cov_21i0t9vdir.b[32][0]++;
                    cov_21i0t9vdir.s[59]++;
                    n = 0xffffffff + n + 1;
                  } else {
                    cov_21i0t9vdir.b[32][1]++;
                  }
                  var hex = (cov_21i0t9vdir.s[60]++,
                  Number(n)
                    .toString(16)
                    .toUpperCase());
                  cov_21i0t9vdir.s[61]++;
                  while (hex.length < digits) {
                    cov_21i0t9vdir.s[62]++;
                    hex = '0'.concat(hex);
                  }
                  cov_21i0t9vdir.s[63]++;
                  if (hex.length >= digits) {
                    cov_21i0t9vdir.b[33][0]++;
                    cov_21i0t9vdir.s[64]++;
                    hex = hex.substring(hex.length - digits, hex.length);
                  } else {
                    cov_21i0t9vdir.b[33][1]++;
                  }
                  cov_21i0t9vdir.s[65]++;
                  return hex;
                } else {
                  cov_21i0t9vdir.b[31][1]++;
                }
              }
            }
          };

          /**
           * Converts a string representation of a hexadecimal number to its equivalent
           * integer value. When an array of strings in hexadecimal notation is passed
           * in, an array of integers of the same length is returned.
           *
           * @method unhex
           * @param {String} n value to parse
           * @return {Number}      integer representation of hexadecimal value
           *
           * @example
           * <div class='norender'><code>
           * print(unhex('A')); // 10
           * print(unhex('FF')); // 255
           * print(unhex(['FF', 'AA', '00'])); // [ 255, 170, 0 ]
           * </code></div>
           */
          /**
           * @method unhex
           * @param {Array} ns values to parse
           * @return {Number[]}      integer representations of hexadecimal value
           */ cov_21i0t9vdir.s[66]++;
          _main.default.prototype.unhex = function(n) {
            cov_21i0t9vdir.f[10]++;
            cov_21i0t9vdir.s[67]++;
            if (n instanceof Array) {
              cov_21i0t9vdir.b[34][0]++;
              cov_21i0t9vdir.s[68]++;
              return n.map(_main.default.prototype.unhex);
            } else {
              cov_21i0t9vdir.b[34][1]++;
              cov_21i0t9vdir.s[69]++;
              return parseInt('0x'.concat(n), 16);
            }
          };
          var _default = _main.default;
          exports.default = _default;
        },
        {
          '../core/main': 283,
          'core-js/modules/es.array.map': 177,
          'core-js/modules/es.number.constructor': 185,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.regexp.to-string': 197,
          'core-js/modules/es.string.repeat': 203
        }
      ],
      324: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_2kni7zukv8 = (function() {
            var path = '/Users/outofambit/src/p5.js/src/utilities/string_functions.js';
            var hash = 'a66176d4a4542cf29a5aaba8544986bae227a8d8';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/utilities/string_functions.js',
              statementMap: {
                '0': { start: { line: 38, column: 0 }, end: { line: 41, column: 2 } },
                '1': { start: { line: 39, column: 2 }, end: { line: 39, column: 44 } },
                '2': { start: { line: 40, column: 2 }, end: { line: 40, column: 30 } },
                '3': { start: { line: 78, column: 0 }, end: { line: 81, column: 2 } },
                '4': { start: { line: 79, column: 2 }, end: { line: 79, column: 45 } },
                '5': { start: { line: 80, column: 2 }, end: { line: 80, column: 24 } },
                '6': { start: { line: 115, column: 0 }, end: { line: 128, column: 2 } },
                '7': { start: { line: 116, column: 2 }, end: { line: 116, column: 48 } },
                '8': { start: { line: 117, column: 13 }, end: { line: 117, column: 33 } },
                '9': { start: { line: 118, column: 14 }, end: { line: 118, column: 26 } },
                '10': { start: { line: 119, column: 18 }, end: { line: 119, column: 20 } },
                '11': { start: { line: 120, column: 2 }, end: { line: 126, column: 3 } },
                '12': { start: { line: 121, column: 4 }, end: { line: 121, column: 24 } },
                '13': { start: { line: 125, column: 4 }, end: { line: 125, column: 25 } },
                '14': { start: { line: 127, column: 2 }, end: { line: 127, column: 17 } },
                '15': { start: { line: 185, column: 0 }, end: { line: 203, column: 2 } },
                '16': { start: { line: 186, column: 2 }, end: { line: 186, column: 42 } },
                '17': { start: { line: 187, column: 2 }, end: { line: 202, column: 3 } },
                '18': { start: { line: 188, column: 4 }, end: { line: 188, column: 47 } },
                '19': { start: { line: 188, column: 25 }, end: { line: 188, column: 45 } },
                '20': { start: { line: 190, column: 24 }, end: { line: 190, column: 60 } },
                '21': { start: { line: 191, column: 4 }, end: { line: 201, column: 5 } },
                '22': { start: { line: 192, column: 6 }, end: { line: 198, column: 7 } },
                '23': { start: { line: 193, column: 8 }, end: { line: 193, column: 50 } },
                '24': { start: { line: 194, column: 13 }, end: { line: 198, column: 7 } },
                '25': { start: { line: 195, column: 8 }, end: { line: 195, column: 41 } },
                '26': { start: { line: 197, column: 8 }, end: { line: 197, column: 32 } },
                '27': { start: { line: 200, column: 6 }, end: { line: 200, column: 37 } },
                '28': { start: { line: 206, column: 14 }, end: { line: 206, column: 21 } },
                '29': { start: { line: 207, column: 12 }, end: { line: 207, column: 62 } },
                '30': { start: { line: 208, column: 21 }, end: { line: 208, column: 35 } },
                '31': { start: { line: 209, column: 18 }, end: { line: 209, column: 68 } },
                '32': { start: { line: 210, column: 16 }, end: { line: 210, column: 68 } },
                '33': { start: { line: 211, column: 12 }, end: { line: 211, column: 26 } },
                '34': { start: { line: 212, column: 2 }, end: { line: 236, column: 3 } },
                '35': { start: { line: 213, column: 18 }, end: { line: 213, column: 20 } },
                '36': { start: { line: 214, column: 4 }, end: { line: 216, column: 5 } },
                '37': { start: { line: 215, column: 6 }, end: { line: 215, column: 20 } },
                '38': { start: { line: 217, column: 4 }, end: { line: 219, column: 5 } },
                '39': { start: { line: 218, column: 6 }, end: { line: 218, column: 44 } },
                '40': { start: { line: 220, column: 4 }, end: { line: 222, column: 5 } },
                '41': { start: { line: 220, column: 17 }, end: { line: 220, column: 18 } },
                '42': { start: { line: 221, column: 6 }, end: { line: 221, column: 17 } },
                '43': { start: { line: 223, column: 4 }, end: { line: 223, column: 19 } },
                '44': { start: { line: 224, column: 4 }, end: { line: 224, column: 19 } },
                '45': { start: { line: 225, column: 4 }, end: { line: 225, column: 19 } },
                '46': { start: { line: 226, column: 4 }, end: { line: 228, column: 5 } },
                '47': { start: { line: 226, column: 17 }, end: { line: 226, column: 18 } },
                '48': { start: { line: 227, column: 6 }, end: { line: 227, column: 17 } },
                '49': { start: { line: 229, column: 4 }, end: { line: 229, column: 15 } },
                '50': { start: { line: 231, column: 4 }, end: { line: 233, column: 5 } },
                '51': { start: { line: 231, column: 17 }, end: { line: 231, column: 18 } },
                '52': { start: { line: 232, column: 6 }, end: { line: 232, column: 17 } },
                '53': { start: { line: 234, column: 4 }, end: { line: 234, column: 13 } },
                '54': { start: { line: 235, column: 4 }, end: { line: 235, column: 15 } },
                '55': { start: { line: 283, column: 0 }, end: { line: 290, column: 2 } },
                '56': { start: { line: 284, column: 2 }, end: { line: 284, column: 43 } },
                '57': { start: { line: 285, column: 2 }, end: { line: 289, column: 3 } },
                '58': { start: { line: 286, column: 4 }, end: { line: 286, column: 41 } },
                '59': { start: { line: 286, column: 24 }, end: { line: 286, column: 39 } },
                '60': { start: { line: 288, column: 4 }, end: { line: 288, column: 29 } },
                '61': { start: { line: 292, column: 2 }, end: { line: 292, column: 23 } },
                '62': { start: { line: 293, column: 14 }, end: { line: 293, column: 30 } },
                '63': { start: { line: 294, column: 12 }, end: { line: 294, column: 48 } },
                '64': { start: { line: 295, column: 10 }, end: { line: 295, column: 50 } },
                '65': { start: { line: 296, column: 2 }, end: { line: 296, column: 57 } },
                '66': { start: { line: 297, column: 2 }, end: { line: 309, column: 3 } },
                '67': { start: { line: 298, column: 4 }, end: { line: 298, column: 13 } },
                '68': { start: { line: 299, column: 9 }, end: { line: 309, column: 3 } },
                '69': { start: { line: 300, column: 4 }, end: { line: 308, column: 5 } },
                '70': { start: { line: 301, column: 6 }, end: { line: 301, column: 35 } },
                '71': { start: { line: 302, column: 18 }, end: { line: 302, column: 40 } },
                '72': { start: { line: 303, column: 6 }, end: { line: 305, column: 7 } },
                '73': { start: { line: 303, column: 19 }, end: { line: 303, column: 20 } },
                '74': { start: { line: 304, column: 8 }, end: { line: 304, column: 19 } },
                '75': { start: { line: 307, column: 6 }, end: { line: 307, column: 40 } },
                '76': { start: { line: 310, column: 2 }, end: { line: 310, column: 17 } },
                '77': { start: { line: 361, column: 0 }, end: { line: 369, column: 2 } },
                '78': { start: { line: 362, column: 2 }, end: { line: 362, column: 38 } },
                '79': { start: { line: 363, column: 16 }, end: { line: 363, column: 49 } },
                '80': { start: { line: 364, column: 2 }, end: { line: 368, column: 3 } },
                '81': { start: { line: 365, column: 4 }, end: { line: 365, column: 29 } },
                '82': { start: { line: 367, column: 4 }, end: { line: 367, column: 25 } },
                '83': { start: { line: 372, column: 2 }, end: { line: 372, column: 69 } },
                '84': { start: { line: 439, column: 0 }, end: { line: 447, column: 2 } },
                '85': { start: { line: 440, column: 2 }, end: { line: 440, column: 38 } },
                '86': { start: { line: 441, column: 16 }, end: { line: 441, column: 49 } },
                '87': { start: { line: 442, column: 2 }, end: { line: 446, column: 3 } },
                '88': { start: { line: 443, column: 4 }, end: { line: 443, column: 29 } },
                '89': { start: { line: 445, column: 4 }, end: { line: 445, column: 25 } },
                '90': { start: { line: 450, column: 2 }, end: { line: 450, column: 70 } },
                '91': { start: { line: 481, column: 0 }, end: { line: 484, column: 2 } },
                '92': { start: { line: 482, column: 2 }, end: { line: 482, column: 45 } },
                '93': { start: { line: 483, column: 2 }, end: { line: 483, column: 26 } },
                '94': { start: { line: 512, column: 0 }, end: { line: 537, column: 2 } },
                '95': { start: { line: 513, column: 2 }, end: { line: 513, column: 51 } },
                '96': { start: { line: 515, column: 2 }, end: { line: 535, column: 3 } },
                '97': { start: { line: 516, column: 14 }, end: { line: 516, column: 20 } },
                '98': { start: { line: 517, column: 16 }, end: { line: 517, column: 31 } },
                '99': { start: { line: 518, column: 14 }, end: { line: 518, column: 29 } },
                '100': { start: { line: 519, column: 4 }, end: { line: 532, column: 5 } },
                '101': { start: { line: 520, column: 6 }, end: { line: 520, column: 63 } },
                '102': { start: { line: 521, column: 6 }, end: { line: 521, column: 28 } },
                '103': { start: { line: 522, column: 6 }, end: { line: 522, column: 63 } },
                '104': { start: { line: 523, column: 6 }, end: { line: 523, column: 44 } },
                '105': { start: { line: 524, column: 11 }, end: { line: 532, column: 5 } },
                '106': { start: { line: 525, column: 6 }, end: { line: 525, column: 63 } },
                '107': { start: { line: 526, column: 6 }, end: { line: 526, column: 41 } },
                '108': { start: { line: 527, column: 11 }, end: { line: 532, column: 5 } },
                '109': { start: { line: 528, column: 6 }, end: { line: 528, column: 63 } },
                '110': { start: { line: 529, column: 6 }, end: { line: 529, column: 41 } },
                '111': { start: { line: 531, column: 6 }, end: { line: 531, column: 38 } },
                '112': { start: { line: 534, column: 4 }, end: { line: 534, column: 14 } },
                '113': { start: { line: 536, column: 2 }, end: { line: 536, column: 39 } },
                '114': { start: { line: 536, column: 36 }, end: { line: 536, column: 37 } },
                '115': { start: { line: 564, column: 0 }, end: { line: 571, column: 2 } },
                '116': { start: { line: 565, column: 2 }, end: { line: 565, column: 44 } },
                '117': { start: { line: 566, column: 2 }, end: { line: 570, column: 3 } },
                '118': { start: { line: 567, column: 4 }, end: { line: 567, column: 30 } },
                '119': { start: { line: 569, column: 4 }, end: { line: 569, column: 22 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 38, column: 20 }, end: { line: 38, column: 21 } },
                  loc: { start: { line: 38, column: 46 }, end: { line: 41, column: 1 } },
                  line: 38
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 78, column: 21 }, end: { line: 78, column: 22 } },
                  loc: { start: { line: 78, column: 40 }, end: { line: 81, column: 1 } },
                  line: 78
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 115, column: 24 },
                    end: { line: 115, column: 25 }
                  },
                  loc: { start: { line: 115, column: 43 }, end: { line: 128, column: 1 } },
                  line: 115
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 185, column: 18 },
                    end: { line: 185, column: 19 }
                  },
                  loc: { start: { line: 185, column: 46 }, end: { line: 203, column: 1 } },
                  line: 185
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 188, column: 20 },
                    end: { line: 188, column: 21 }
                  },
                  loc: { start: { line: 188, column: 25 }, end: { line: 188, column: 45 } },
                  line: 188
                },
                '5': {
                  name: 'doNf',
                  decl: { start: { line: 205, column: 9 }, end: { line: 205, column: 13 } },
                  loc: { start: { line: 205, column: 32 }, end: { line: 237, column: 1 } },
                  line: 205
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 283, column: 19 },
                    end: { line: 283, column: 20 }
                  },
                  loc: { start: { line: 283, column: 40 }, end: { line: 290, column: 1 } },
                  line: 283
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 286, column: 19 },
                    end: { line: 286, column: 20 }
                  },
                  loc: { start: { line: 286, column: 24 }, end: { line: 286, column: 39 } },
                  line: 286
                },
                '8': {
                  name: 'doNfc',
                  decl: { start: { line: 291, column: 9 }, end: { line: 291, column: 14 } },
                  loc: { start: { line: 291, column: 27 }, end: { line: 311, column: 1 } },
                  line: 291
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 361, column: 19 },
                    end: { line: 361, column: 20 }
                  },
                  loc: { start: { line: 361, column: 37 }, end: { line: 369, column: 1 } },
                  line: 361
                },
                '10': {
                  name: 'addNfp',
                  decl: { start: { line: 371, column: 9 }, end: { line: 371, column: 15 } },
                  loc: { start: { line: 371, column: 21 }, end: { line: 373, column: 1 } },
                  line: 371
                },
                '11': {
                  name: '(anonymous_11)',
                  decl: {
                    start: { line: 439, column: 19 },
                    end: { line: 439, column: 20 }
                  },
                  loc: { start: { line: 439, column: 37 }, end: { line: 447, column: 1 } },
                  line: 439
                },
                '12': {
                  name: 'addNfs',
                  decl: { start: { line: 449, column: 9 }, end: { line: 449, column: 15 } },
                  loc: { start: { line: 449, column: 21 }, end: { line: 451, column: 1 } },
                  line: 449
                },
                '13': {
                  name: '(anonymous_13)',
                  decl: {
                    start: { line: 481, column: 21 },
                    end: { line: 481, column: 22 }
                  },
                  loc: { start: { line: 481, column: 42 }, end: { line: 484, column: 1 } },
                  line: 481
                },
                '14': {
                  name: '(anonymous_14)',
                  decl: {
                    start: { line: 512, column: 27 },
                    end: { line: 512, column: 28 }
                  },
                  loc: { start: { line: 512, column: 51 }, end: { line: 537, column: 1 } },
                  line: 512
                },
                '15': {
                  name: '(anonymous_15)',
                  decl: {
                    start: { line: 536, column: 31 },
                    end: { line: 536, column: 32 }
                  },
                  loc: { start: { line: 536, column: 36 }, end: { line: 536, column: 37 } },
                  line: 536
                },
                '16': {
                  name: '(anonymous_16)',
                  decl: {
                    start: { line: 564, column: 20 },
                    end: { line: 564, column: 21 }
                  },
                  loc: { start: { line: 564, column: 34 }, end: { line: 571, column: 1 } },
                  line: 564
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 187, column: 2 }, end: { line: 202, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 187, column: 2 }, end: { line: 202, column: 3 } },
                    { start: { line: 187, column: 2 }, end: { line: 202, column: 3 } }
                  ],
                  line: 187
                },
                '1': {
                  loc: { start: { line: 191, column: 4 }, end: { line: 201, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 191, column: 4 }, end: { line: 201, column: 5 } },
                    { start: { line: 191, column: 4 }, end: { line: 201, column: 5 } }
                  ],
                  line: 191
                },
                '2': {
                  loc: { start: { line: 192, column: 6 }, end: { line: 198, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 192, column: 6 }, end: { line: 198, column: 7 } },
                    { start: { line: 192, column: 6 }, end: { line: 198, column: 7 } }
                  ],
                  line: 192
                },
                '3': {
                  loc: { start: { line: 194, column: 13 }, end: { line: 198, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 194, column: 13 }, end: { line: 198, column: 7 } },
                    { start: { line: 194, column: 13 }, end: { line: 198, column: 7 } }
                  ],
                  line: 194
                },
                '4': {
                  loc: { start: { line: 207, column: 12 }, end: { line: 207, column: 62 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 207, column: 18 }, end: { line: 207, column: 45 } },
                    { start: { line: 207, column: 48 }, end: { line: 207, column: 62 } }
                  ],
                  line: 207
                },
                '5': {
                  loc: { start: { line: 209, column: 18 }, end: { line: 209, column: 68 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 209, column: 38 }, end: { line: 209, column: 64 } },
                    { start: { line: 209, column: 67 }, end: { line: 209, column: 68 } }
                  ],
                  line: 209
                },
                '6': {
                  loc: { start: { line: 210, column: 16 }, end: { line: 210, column: 68 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 210, column: 36 }, end: { line: 210, column: 63 } },
                    { start: { line: 210, column: 66 }, end: { line: 210, column: 68 } }
                  ],
                  line: 210
                },
                '7': {
                  loc: { start: { line: 211, column: 12 }, end: { line: 211, column: 26 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 211, column: 18 }, end: { line: 211, column: 21 } },
                    { start: { line: 211, column: 24 }, end: { line: 211, column: 26 } }
                  ],
                  line: 211
                },
                '8': {
                  loc: { start: { line: 212, column: 2 }, end: { line: 236, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 212, column: 2 }, end: { line: 236, column: 3 } },
                    { start: { line: 212, column: 2 }, end: { line: 236, column: 3 } }
                  ],
                  line: 212
                },
                '9': {
                  loc: { start: { line: 214, column: 4 }, end: { line: 216, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 214, column: 4 }, end: { line: 216, column: 5 } },
                    { start: { line: 214, column: 4 }, end: { line: 216, column: 5 } }
                  ],
                  line: 214
                },
                '10': {
                  loc: { start: { line: 214, column: 8 }, end: { line: 214, column: 55 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 214, column: 8 }, end: { line: 214, column: 25 } },
                    { start: { line: 214, column: 29 }, end: { line: 214, column: 55 } }
                  ],
                  line: 214
                },
                '11': {
                  loc: { start: { line: 217, column: 4 }, end: { line: 219, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 217, column: 4 }, end: { line: 219, column: 5 } },
                    { start: { line: 217, column: 4 }, end: { line: 219, column: 5 } }
                  ],
                  line: 217
                },
                '12': {
                  loc: { start: { line: 285, column: 2 }, end: { line: 289, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 285, column: 2 }, end: { line: 289, column: 3 } },
                    { start: { line: 285, column: 2 }, end: { line: 289, column: 3 } }
                  ],
                  line: 285
                },
                '13': {
                  loc: { start: { line: 294, column: 12 }, end: { line: 294, column: 48 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 294, column: 25 }, end: { line: 294, column: 43 } },
                    { start: { line: 294, column: 46 }, end: { line: 294, column: 48 } }
                  ],
                  line: 294
                },
                '14': {
                  loc: { start: { line: 295, column: 10 }, end: { line: 295, column: 50 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 295, column: 23 }, end: { line: 295, column: 44 } },
                    { start: { line: 295, column: 47 }, end: { line: 295, column: 50 } }
                  ],
                  line: 295
                },
                '15': {
                  loc: { start: { line: 297, column: 2 }, end: { line: 309, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 297, column: 2 }, end: { line: 309, column: 3 } },
                    { start: { line: 297, column: 2 }, end: { line: 309, column: 3 } }
                  ],
                  line: 297
                },
                '16': {
                  loc: { start: { line: 299, column: 9 }, end: { line: 309, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 299, column: 9 }, end: { line: 309, column: 3 } },
                    { start: { line: 299, column: 9 }, end: { line: 309, column: 3 } }
                  ],
                  line: 299
                },
                '17': {
                  loc: { start: { line: 300, column: 4 }, end: { line: 308, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 300, column: 4 }, end: { line: 308, column: 5 } },
                    { start: { line: 300, column: 4 }, end: { line: 308, column: 5 } }
                  ],
                  line: 300
                },
                '18': {
                  loc: { start: { line: 301, column: 13 }, end: { line: 301, column: 34 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 301, column: 26 }, end: { line: 301, column: 29 } },
                    { start: { line: 301, column: 32 }, end: { line: 301, column: 34 } }
                  ],
                  line: 301
                },
                '19': {
                  loc: { start: { line: 364, column: 2 }, end: { line: 368, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 364, column: 2 }, end: { line: 368, column: 3 } },
                    { start: { line: 364, column: 2 }, end: { line: 368, column: 3 } }
                  ],
                  line: 364
                },
                '20': {
                  loc: { start: { line: 372, column: 9 }, end: { line: 372, column: 68 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 372, column: 31 }, end: { line: 372, column: 51 } },
                    { start: { line: 372, column: 54 }, end: { line: 372, column: 68 } }
                  ],
                  line: 372
                },
                '21': {
                  loc: { start: { line: 442, column: 2 }, end: { line: 446, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 442, column: 2 }, end: { line: 446, column: 3 } },
                    { start: { line: 442, column: 2 }, end: { line: 446, column: 3 } }
                  ],
                  line: 442
                },
                '22': {
                  loc: { start: { line: 450, column: 9 }, end: { line: 450, column: 69 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 450, column: 32 }, end: { line: 450, column: 52 } },
                    { start: { line: 450, column: 55 }, end: { line: 450, column: 69 } }
                  ],
                  line: 450
                },
                '23': {
                  loc: { start: { line: 515, column: 2 }, end: { line: 535, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 515, column: 2 }, end: { line: 535, column: 3 } },
                    { start: { line: 515, column: 2 }, end: { line: 535, column: 3 } }
                  ],
                  line: 515
                },
                '24': {
                  loc: { start: { line: 519, column: 4 }, end: { line: 532, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 519, column: 4 }, end: { line: 532, column: 5 } },
                    { start: { line: 519, column: 4 }, end: { line: 532, column: 5 } }
                  ],
                  line: 519
                },
                '25': {
                  loc: { start: { line: 519, column: 8 }, end: { line: 519, column: 18 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 519, column: 8 }, end: { line: 519, column: 11 } },
                    { start: { line: 519, column: 15 }, end: { line: 519, column: 18 } }
                  ],
                  line: 519
                },
                '26': {
                  loc: { start: { line: 524, column: 11 }, end: { line: 532, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 524, column: 11 }, end: { line: 532, column: 5 } },
                    { start: { line: 524, column: 11 }, end: { line: 532, column: 5 } }
                  ],
                  line: 524
                },
                '27': {
                  loc: { start: { line: 527, column: 11 }, end: { line: 532, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 527, column: 11 }, end: { line: 532, column: 5 } },
                    { start: { line: 527, column: 11 }, end: { line: 532, column: 5 } }
                  ],
                  line: 527
                },
                '28': {
                  loc: { start: { line: 566, column: 2 }, end: { line: 570, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 566, column: 2 }, end: { line: 570, column: 3 } },
                    { start: { line: 566, column: 2 }, end: { line: 570, column: 3 } }
                  ],
                  line: 566
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0,
                '118': 0,
                '119': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0],
                '20': [0, 0],
                '21': [0, 0],
                '22': [0, 0],
                '23': [0, 0],
                '24': [0, 0],
                '25': [0, 0],
                '26': [0, 0],
                '27': [0, 0],
                '28': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: 'a66176d4a4542cf29a5aaba8544986bae227a8d8'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.filter');
          _dereq_('core-js/modules/es.array.index-of');
          _dereq_('core-js/modules/es.array.join');
          _dereq_('core-js/modules/es.array.map');
          _dereq_('core-js/modules/es.array.slice');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.regexp.constructor');
          _dereq_('core-js/modules/es.regexp.exec');
          _dereq_('core-js/modules/es.regexp.to-string');
          _dereq_('core-js/modules/es.string.match');
          _dereq_('core-js/modules/es.string.replace');
          _dereq_('core-js/modules/es.string.split');
          _dereq_('core-js/modules/es.string.trim');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          _dereq_('../core/friendly_errors/validate_params');
          _dereq_('../core/friendly_errors/file_errors');
          _dereq_('../core/friendly_errors/fes_core');
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_2kni7zukv8.s[0]++;

          //return p5; //LM is this a mistake?

          /**
           * Combines an array of Strings into one String, each separated by the
           * character(s) used for the separator parameter. To join arrays of ints or
           * floats, it's necessary to first convert them to Strings using <a href="#/p5/nf">nf()</a> or
           * nfs().
           *
           * @method join
           * @param  {Array}  list      array of Strings to be joined
           * @param  {String} separator String to be placed between each item
           * @return {String}           joined String
           * @example
           * <div>
           * <code>
           * let array = ['Hello', 'world!'];
           * let separator = ' ';
           * let message = join(array, separator);
           * text(message, 5, 50);
           * </code>
           * </div>
           *
           * @alt
           * "hello world!" displayed middle left of canvas.
           */
          _main.default.prototype.join = function(list, separator) {
            cov_2kni7zukv8.f[0]++;
            cov_2kni7zukv8.s[1]++;
            _main.default._validateParameters('join', arguments);
            cov_2kni7zukv8.s[2]++;
            return list.join(separator);
          };

          /**
           * This function is used to apply a regular expression to a piece of text,
           * and return matching groups (elements found inside parentheses) as a
           * String array. If there are no matches, a null value will be returned.
           * If no groups are specified in the regular expression, but the sequence
           * matches, an array of length 1 (with the matched text as the first element
           * of the array) will be returned.
           *
           * To use the function, first check to see if the result is null. If the
           * result is null, then the sequence did not match at all. If the sequence
           * did match, an array is returned.
           *
           * If there are groups (specified by sets of parentheses) in the regular
           * expression, then the contents of each will be returned in the array.
           * Element [0] of a regular expression match returns the entire matching
           * string, and the match groups start at element [1] (the first group is [1],
           * the second [2], and so on).
           *
           * @method match
           * @param  {String} str    the String to be searched
           * @param  {String} regexp the regexp to be used for matching
           * @return {String[]}      Array of Strings found
           * @example
           * <div>
           * <code>
           * let string = 'Hello p5js*!';
           * let regexp = 'p5js\\*';
           * let m = match(string, regexp);
           * text(m, 5, 50);
           * </code>
           * </div>
           *
           * @alt
           * "p5js*" displayed middle left of canvas.
           */ cov_2kni7zukv8.s[3]++;
          _main.default.prototype.match = function(str, reg) {
            cov_2kni7zukv8.f[1]++;
            cov_2kni7zukv8.s[4]++;
            _main.default._validateParameters('match', arguments);
            cov_2kni7zukv8.s[5]++;
            return str.match(reg);
          };

          /**
           * This function is used to apply a regular expression to a piece of text,
           * and return a list of matching groups (elements found inside parentheses)
           * as a two-dimensional String array. If there are no matches, a null value
           * will be returned. If no groups are specified in the regular expression,
           * but the sequence matches, a two dimensional array is still returned, but
           * the second dimension is only of length one.
           *
           * To use the function, first check to see if the result is null. If the
           * result is null, then the sequence did not match at all. If the sequence
           * did match, a 2D array is returned.
           *
           * If there are groups (specified by sets of parentheses) in the regular
           * expression, then the contents of each will be returned in the array.
           * Assuming a loop with counter variable i, element [i][0] of a regular
           * expression match returns the entire matching string, and the match groups
           * start at element [i][1] (the first group is [i][1], the second [i][2],
           * and so on).
           *
           * @method matchAll
           * @param  {String} str    the String to be searched
           * @param  {String} regexp the regexp to be used for matching
           * @return {String[]}         2d Array of Strings found
           * @example
           * <div class="norender">
           * <code>
           * let string = 'Hello p5js*! Hello world!';
           * let regexp = 'Hello';
           * matchAll(string, regexp);
           * </code>
           * </div>
           */ cov_2kni7zukv8.s[6]++;
          _main.default.prototype.matchAll = function(str, reg) {
            cov_2kni7zukv8.f[2]++;
            cov_2kni7zukv8.s[7]++;
            _main.default._validateParameters('matchAll', arguments);
            var re = (cov_2kni7zukv8.s[8]++, new RegExp(reg, 'g'));
            var match = (cov_2kni7zukv8.s[9]++, re.exec(str));
            var matches = (cov_2kni7zukv8.s[10]++, []);
            cov_2kni7zukv8.s[11]++;
            while (match !== null) {
              cov_2kni7zukv8.s[12]++;
              matches.push(match);
              // matched text: match[0]
              // match start: match.index
              // capturing group n: match[n]
              cov_2kni7zukv8.s[13]++;
              match = re.exec(str);
            }
            cov_2kni7zukv8.s[14]++;
            return matches;
          };

          /**
           * Utility function for formatting numbers into strings. There are two
           * versions: one for formatting floats, and one for formatting ints.
           * The values for the digits, left, and right parameters should always
           * be positive integers.
           * (NOTE): Be cautious when using left and right parameters as it prepends numbers of 0's if the parameter
           * if greater than the current length of the number.
           * For example if number is 123.2 and left parameter passed is 4 which is greater than length of 123
           * (integer part) i.e 3 than result will be 0123.2. Same case for right parameter i.e. if right is 3 than
           * the result will be 123.200.
           *
           * @method nf
           * @param {Number|String}       num      the Number to format
           * @param {Integer|String}      [left]   number of digits to the left of the
           *                                decimal point
           * @param {Integer|String}      [right]  number of digits to the right of the
           *                                decimal point
           * @return {String}               formatted String
           *
           * @example
           * <div>
           * <code>
           * let myFont;
           * function preload() {
           *   myFont = loadFont('assets/fonts/inconsolata.ttf');
           * }
           * function setup() {
           *   background(200);
           *   let num1 = 321;
           *   let num2 = -1321;
           *
           *   noStroke();
           *   fill(0);
           *   textFont(myFont);
           *   textSize(22);
           *
           *   text(nf(num1, 4, 2), 10, 30);
           *   text(nf(num2, 4, 2), 10, 80);
           *   // Draw dividing line
           *   stroke(120);
           *   line(0, 50, width, 50);
           * }
           * </code>
           * </div>
           *
           * @alt
           * "0321.00" middle top, -1321.00" middle bottom canvas
           */
          /**
           * @method nf
           * @param {Array}        nums     the Numbers to format
           * @param {Integer|String}      [left]
           * @param {Integer|String}      [right]
           * @return {String[]}                formatted Strings
           */ cov_2kni7zukv8.s[15]++;
          _main.default.prototype.nf = function(nums, left, right) {
            cov_2kni7zukv8.f[3]++;
            cov_2kni7zukv8.s[16]++;
            _main.default._validateParameters('nf', arguments);
            cov_2kni7zukv8.s[17]++;
            if (nums instanceof Array) {
              cov_2kni7zukv8.b[0][0]++;
              cov_2kni7zukv8.s[18]++;
              return nums.map(function(x) {
                cov_2kni7zukv8.f[4]++;
                cov_2kni7zukv8.s[19]++;
                return doNf(x, left, right);
              });
            } else {
              cov_2kni7zukv8.b[0][1]++;
              var typeOfFirst = (cov_2kni7zukv8.s[20]++,
              Object.prototype.toString.call(nums));
              cov_2kni7zukv8.s[21]++;
              if (typeOfFirst === '[object Arguments]') {
                cov_2kni7zukv8.b[1][0]++;
                cov_2kni7zukv8.s[22]++;
                if (nums.length === 3) {
                  cov_2kni7zukv8.b[2][0]++;
                  cov_2kni7zukv8.s[23]++;
                  return this.nf(nums[0], nums[1], nums[2]);
                } else {
                  cov_2kni7zukv8.b[2][1]++;
                  cov_2kni7zukv8.s[24]++;
                  if (nums.length === 2) {
                    cov_2kni7zukv8.b[3][0]++;
                    cov_2kni7zukv8.s[25]++;
                    return this.nf(nums[0], nums[1]);
                  } else {
                    cov_2kni7zukv8.b[3][1]++;
                    cov_2kni7zukv8.s[26]++;
                    return this.nf(nums[0]);
                  }
                }
              } else {
                cov_2kni7zukv8.b[1][1]++;
                cov_2kni7zukv8.s[27]++;
                return doNf(nums, left, right);
              }
            }
          };

          function doNf(num, left, right) {
            cov_2kni7zukv8.f[5]++;
            var neg = (cov_2kni7zukv8.s[28]++, num < 0);
            var n = (cov_2kni7zukv8.s[29]++,
            neg
              ? (cov_2kni7zukv8.b[4][0]++, num.toString().substring(1))
              : (cov_2kni7zukv8.b[4][1]++, num.toString()));
            var decimalInd = (cov_2kni7zukv8.s[30]++, n.indexOf('.'));
            var intPart = (cov_2kni7zukv8.s[31]++,
            decimalInd !== -1
              ? (cov_2kni7zukv8.b[5][0]++, n.substring(0, decimalInd))
              : (cov_2kni7zukv8.b[5][1]++, n));
            var decPart = (cov_2kni7zukv8.s[32]++,
            decimalInd !== -1
              ? (cov_2kni7zukv8.b[6][0]++, n.substring(decimalInd + 1))
              : (cov_2kni7zukv8.b[6][1]++, ''));
            var str = (cov_2kni7zukv8.s[33]++,
            neg ? (cov_2kni7zukv8.b[7][0]++, '-') : (cov_2kni7zukv8.b[7][1]++, ''));
            cov_2kni7zukv8.s[34]++;
            if (typeof right !== 'undefined') {
              cov_2kni7zukv8.b[8][0]++;
              var decimal = (cov_2kni7zukv8.s[35]++, '');
              cov_2kni7zukv8.s[36]++;
              if (
                (cov_2kni7zukv8.b[10][0]++, decimalInd !== -1) ||
                (cov_2kni7zukv8.b[10][1]++, right - decPart.length > 0)
              ) {
                cov_2kni7zukv8.b[9][0]++;
                cov_2kni7zukv8.s[37]++;
                decimal = '.';
              } else {
                cov_2kni7zukv8.b[9][1]++;
              }
              cov_2kni7zukv8.s[38]++;
              if (decPart.length > right) {
                cov_2kni7zukv8.b[11][0]++;
                cov_2kni7zukv8.s[39]++;
                decPart = decPart.substring(0, right);
              } else {
                cov_2kni7zukv8.b[11][1]++;
              }
              cov_2kni7zukv8.s[40]++;
              for (var i = (cov_2kni7zukv8.s[41]++, 0); i < left - intPart.length; i++) {
                cov_2kni7zukv8.s[42]++;
                str += '0';
              }
              cov_2kni7zukv8.s[43]++;
              str += intPart;
              cov_2kni7zukv8.s[44]++;
              str += decimal;
              cov_2kni7zukv8.s[45]++;
              str += decPart;
              cov_2kni7zukv8.s[46]++;
              for (var j = (cov_2kni7zukv8.s[47]++, 0); j < right - decPart.length; j++) {
                cov_2kni7zukv8.s[48]++;
                str += '0';
              }
              cov_2kni7zukv8.s[49]++;
              return str;
            } else {
              cov_2kni7zukv8.b[8][1]++;
              cov_2kni7zukv8.s[50]++;
              for (
                var k = (cov_2kni7zukv8.s[51]++, 0);
                k < Math.max(left - intPart.length, 0);
                k++
              ) {
                cov_2kni7zukv8.s[52]++;
                str += '0';
              }
              cov_2kni7zukv8.s[53]++;
              str += n;
              cov_2kni7zukv8.s[54]++;
              return str;
            }
          }

          /**
           * Utility function for formatting numbers into strings and placing
           * appropriate commas to mark units of 1000. There are two versions: one
           * for formatting ints, and one for formatting an array of ints. The value
           * for the right parameter should always be a positive integer.
           *
           * @method nfc
           * @param  {Number|String}   num     the Number to format
           * @param  {Integer|String}  [right] number of digits to the right of the
           *                                  decimal point
           * @return {String}           formatted String
           *
           * @example
           * <div>
           * <code>
           * function setup() {
           *   background(200);
           *   let num = 11253106.115;
           *   let numArr = [1, 1, 2];
           *
           *   noStroke();
           *   fill(0);
           *   textSize(12);
           *
           *   // Draw formatted numbers
           *   text(nfc(num, 4), 10, 30);
           *   text(nfc(numArr, 2), 10, 80);
           *
           *   // Draw dividing line
           *   stroke(120);
           *   line(0, 50, width, 50);
           * }
           * </code>
           * </div>
           *
           * @alt
           * "11,253,106.115" top middle and "1.00,1.00,2.00" displayed bottom mid
           */
          /**
           * @method nfc
           * @param  {Array}    nums     the Numbers to format
           * @param  {Integer|String}  [right]
           * @return {String[]}           formatted Strings
           */ cov_2kni7zukv8.s[55]++;
          _main.default.prototype.nfc = function(num, right) {
            cov_2kni7zukv8.f[6]++;
            cov_2kni7zukv8.s[56]++;
            _main.default._validateParameters('nfc', arguments);
            cov_2kni7zukv8.s[57]++;
            if (num instanceof Array) {
              cov_2kni7zukv8.b[12][0]++;
              cov_2kni7zukv8.s[58]++;
              return num.map(function(x) {
                cov_2kni7zukv8.f[7]++;
                cov_2kni7zukv8.s[59]++;
                return doNfc(x, right);
              });
            } else {
              cov_2kni7zukv8.b[12][1]++;
              cov_2kni7zukv8.s[60]++;
              return doNfc(num, right);
            }
          };
          function doNfc(num, right) {
            cov_2kni7zukv8.f[8]++;
            cov_2kni7zukv8.s[61]++;
            num = num.toString();
            var dec = (cov_2kni7zukv8.s[62]++, num.indexOf('.'));
            var rem = (cov_2kni7zukv8.s[63]++,
            dec !== -1
              ? (cov_2kni7zukv8.b[13][0]++, num.substring(dec))
              : (cov_2kni7zukv8.b[13][1]++, ''));
            var n = (cov_2kni7zukv8.s[64]++,
            dec !== -1
              ? (cov_2kni7zukv8.b[14][0]++, num.substring(0, dec))
              : (cov_2kni7zukv8.b[14][1]++, num));
            cov_2kni7zukv8.s[65]++;
            n = n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
            cov_2kni7zukv8.s[66]++;
            if (right === 0) {
              cov_2kni7zukv8.b[15][0]++;
              cov_2kni7zukv8.s[67]++;
              rem = '';
            } else {
              cov_2kni7zukv8.b[15][1]++;
              cov_2kni7zukv8.s[68]++;
              if (typeof right !== 'undefined') {
                cov_2kni7zukv8.b[16][0]++;
                cov_2kni7zukv8.s[69]++;
                if (right > rem.length) {
                  cov_2kni7zukv8.b[17][0]++;
                  cov_2kni7zukv8.s[70]++;
                  rem +=
                    dec === -1
                      ? (cov_2kni7zukv8.b[18][0]++, '.')
                      : (cov_2kni7zukv8.b[18][1]++, '');
                  var len = (cov_2kni7zukv8.s[71]++, right - rem.length + 1);
                  cov_2kni7zukv8.s[72]++;
                  for (var i = (cov_2kni7zukv8.s[73]++, 0); i < len; i++) {
                    cov_2kni7zukv8.s[74]++;
                    rem += '0';
                  }
                } else {
                  cov_2kni7zukv8.b[17][1]++;
                  cov_2kni7zukv8.s[75]++;
                  rem = rem.substring(0, right + 1);
                }
              } else {
                cov_2kni7zukv8.b[16][1]++;
              }
            }
            cov_2kni7zukv8.s[76]++;
            return n + rem;
          }

          /**
           * Utility function for formatting numbers into strings. Similar to <a href="#/p5/nf">nf()</a> but
           * puts a "+" in front of positive numbers and a "-" in front of negative
           * numbers. There are two versions: one for formatting floats, and one for
           * formatting ints. The values for left, and right parameters
           * should always be positive integers.
           *
           * @method nfp
           * @param {Number} num      the Number to format
           * @param {Integer}      [left]   number of digits to the left of the decimal
           *                                point
           * @param {Integer}      [right]  number of digits to the right of the
           *                                decimal point
           * @return {String}         formatted String
           *
           * @example
           * <div>
           * <code>
           * function setup() {
           *   background(200);
           *   let num1 = 11253106.115;
           *   let num2 = -11253106.115;
           *
           *   noStroke();
           *   fill(0);
           *   textSize(12);
           *
           *   // Draw formatted numbers
           *   text(nfp(num1, 4, 2), 10, 30);
           *   text(nfp(num2, 4, 2), 10, 80);
           *
           *   // Draw dividing line
           *   stroke(120);
           *   line(0, 50, width, 50);
           * }
           * </code>
           * </div>
           *
           * @alt
           * "+11253106.11" top middle and "-11253106.11" displayed bottom middle
           */
          /**
           * @method nfp
           * @param {Number[]} nums      the Numbers to format
           * @param {Integer}      [left]
           * @param {Integer}      [right]
           * @return {String[]}         formatted Strings
           */ cov_2kni7zukv8.s[77]++;
          _main.default.prototype.nfp = function() {
            cov_2kni7zukv8.f[9]++;
            cov_2kni7zukv8.s[78]++;
            for (
              var _len = arguments.length, args = new Array(_len), _key = 0;
              _key < _len;
              _key++
            ) {
              args[_key] = arguments[_key];
            }
            _main.default._validateParameters('nfp', args);
            var nfRes = (cov_2kni7zukv8.s[79]++,
            _main.default.prototype.nf.apply(this, args));
            cov_2kni7zukv8.s[80]++;
            if (nfRes instanceof Array) {
              cov_2kni7zukv8.b[19][0]++;
              cov_2kni7zukv8.s[81]++;
              return nfRes.map(addNfp);
            } else {
              cov_2kni7zukv8.b[19][1]++;
              cov_2kni7zukv8.s[82]++;
              return addNfp(nfRes);
            }
          };

          function addNfp(num) {
            cov_2kni7zukv8.f[10]++;
            cov_2kni7zukv8.s[83]++;
            return parseFloat(num) > 0
              ? (cov_2kni7zukv8.b[20][0]++, '+'.concat(num.toString()))
              : (cov_2kni7zukv8.b[20][1]++, num.toString());
          }

          /**
           * Utility function for formatting numbers into strings. Similar to <a href="#/p5/nf">nf()</a> but
           * puts an additional "_" (space) in front of positive numbers just in case to align it with negative
           * numbers which includes "-" (minus) sign.
           * The main usecase of nfs() can be seen when one wants to align the digits (place values) of a non-negative
           * number with some negative number (See the example to get a clear picture).
           * There are two versions: one for formatting float, and one for formatting int.
           * The values for the digits, left, and right parameters should always be positive integers.
           * (IMP): The result on the canvas basically the expected alignment can vary based on the typeface you are using.
           * (NOTE): Be cautious when using left and right parameters as it prepends numbers of 0's if the parameter
           * if greater than the current length of the number.
           * For example if number is 123.2 and left parameter passed is 4 which is greater than length of 123
           * (integer part) i.e 3 than result will be 0123.2. Same case for right parameter i.e. if right is 3 than
           * the result will be 123.200.
           *
           * @method nfs
           * @param {Number}       num      the Number to format
           * @param {Integer}      [left]   number of digits to the left of the decimal
           *                                point
           * @param {Integer}      [right]  number of digits to the right of the
           *                                decimal point
           * @return {String}         formatted String
           *
           * @example
           * <div>
           * <code>
           * let myFont;
           * function preload() {
           *   myFont = loadFont('assets/fonts/inconsolata.ttf');
           * }
           * function setup() {
           *   background(200);
           *   let num1 = 321;
           *   let num2 = -1321;
           *
           *   noStroke();
           *   fill(0);
           *   textFont(myFont);
           *   textSize(22);
           *
           *   // nfs() aligns num1 (positive number) with num2 (negative number) by
           *   // adding a blank space in front of the num1 (positive number)
           *   // [left = 4] in num1 add one 0 in front, to align the digits with num2
           *   // [right = 2] in num1 and num2 adds two 0's after both numbers
           *   // To see the differences check the example of nf() too.
           *   text(nfs(num1, 4, 2), 10, 30);
           *   text(nfs(num2, 4, 2), 10, 80);
           *   // Draw dividing line
           *   stroke(120);
           *   line(0, 50, width, 50);
           * }
           * </code>
           * </div>
           *
           * @alt
           * "0321.00" top middle and "-1321.00" displayed bottom middle
           */
          /**
           * @method nfs
           * @param {Array}        nums     the Numbers to format
           * @param {Integer}      [left]
           * @param {Integer}      [right]
           * @return {String[]}         formatted Strings
           */ cov_2kni7zukv8.s[84]++;
          _main.default.prototype.nfs = function() {
            cov_2kni7zukv8.f[11]++;
            cov_2kni7zukv8.s[85]++;
            for (
              var _len2 = arguments.length, args = new Array(_len2), _key2 = 0;
              _key2 < _len2;
              _key2++
            ) {
              args[_key2] = arguments[_key2];
            }
            _main.default._validateParameters('nfs', args);
            var nfRes = (cov_2kni7zukv8.s[86]++,
            _main.default.prototype.nf.apply(this, args));
            cov_2kni7zukv8.s[87]++;
            if (nfRes instanceof Array) {
              cov_2kni7zukv8.b[21][0]++;
              cov_2kni7zukv8.s[88]++;
              return nfRes.map(addNfs);
            } else {
              cov_2kni7zukv8.b[21][1]++;
              cov_2kni7zukv8.s[89]++;
              return addNfs(nfRes);
            }
          };

          function addNfs(num) {
            cov_2kni7zukv8.f[12]++;
            cov_2kni7zukv8.s[90]++;
            return parseFloat(num) >= 0
              ? (cov_2kni7zukv8.b[22][0]++, ' '.concat(num.toString()))
              : (cov_2kni7zukv8.b[22][1]++, num.toString());
          }

          /**
           * The <a href="#/p5/split">split()</a> function maps to String.split(), it breaks a String into
           * pieces using a character or string as the delimiter. The delim parameter
           * specifies the character or characters that mark the boundaries between
           * each piece. A String[] array is returned that contains each of the pieces.
           *
           * The <a href="#/p5/splitTokens">splitTokens()</a> function works in a similar fashion, except that it
           * splits using a range of characters instead of a specific character or
           * sequence.
           *
           * @method split
           * @param  {String} value the String to be split
           * @param  {String} delim the String used to separate the data
           * @return {String[]}  Array of Strings
           * @example
           * <div>
           * <code>
           * let names = 'Pat,Xio,Alex';
           * let splitString = split(names, ',');
           * text(splitString[0], 5, 30);
           * text(splitString[1], 5, 50);
           * text(splitString[2], 5, 70);
           * </code>
           * </div>
           *
           * @alt
           * "pat" top left, "Xio" mid left and "Alex" displayed bottom left
           */ cov_2kni7zukv8.s[91]++;
          _main.default.prototype.split = function(str, delim) {
            cov_2kni7zukv8.f[13]++;
            cov_2kni7zukv8.s[92]++;
            _main.default._validateParameters('split', arguments);
            cov_2kni7zukv8.s[93]++;
            return str.split(delim);
          };

          /**
           * The <a href="#/p5/splitTokens">splitTokens()</a> function splits a String at one or many character
           * delimiters or "tokens." The delim parameter specifies the character or
           * characters to be used as a boundary.
           *
           * If no delim characters are specified, any whitespace character is used to
           * split. Whitespace characters include tab (\t), line feed (\n), carriage
           * return (\r), form feed (\f), and space.
           *
           * @method splitTokens
           * @param  {String} value   the String to be split
           * @param  {String} [delim] list of individual Strings that will be used as
           *                          separators
           * @return {String[]}          Array of Strings
           * @example
           * <div class = "norender">
           * <code>
           * function setup() {
           *   let myStr = 'Mango, Banana, Lime';
           *   let myStrArr = splitTokens(myStr, ',');
           *
           *   print(myStrArr); // prints : ["Mango"," Banana"," Lime"]
           * }
           * </code>
           * </div>
           */ cov_2kni7zukv8.s[94]++;
          _main.default.prototype.splitTokens = function(value, delims) {
            cov_2kni7zukv8.f[14]++;
            cov_2kni7zukv8.s[95]++;
            _main.default._validateParameters('splitTokens', arguments);
            var d;
            cov_2kni7zukv8.s[96]++;
            if (typeof delims !== 'undefined') {
              cov_2kni7zukv8.b[23][0]++;
              var str = (cov_2kni7zukv8.s[97]++, delims);
              var sqc = (cov_2kni7zukv8.s[98]++, /\]/g.exec(str));
              var sqo = (cov_2kni7zukv8.s[99]++, /\[/g.exec(str));
              cov_2kni7zukv8.s[100]++;
              if ((cov_2kni7zukv8.b[25][0]++, sqo) && (cov_2kni7zukv8.b[25][1]++, sqc)) {
                cov_2kni7zukv8.b[24][0]++;
                cov_2kni7zukv8.s[101]++;
                str = str.slice(0, sqc.index) + str.slice(sqc.index + 1);
                cov_2kni7zukv8.s[102]++;
                sqo = /\[/g.exec(str);
                cov_2kni7zukv8.s[103]++;
                str = str.slice(0, sqo.index) + str.slice(sqo.index + 1);
                cov_2kni7zukv8.s[104]++;
                d = new RegExp('[\\['.concat(str, '\\]]'), 'g');
              } else {
                cov_2kni7zukv8.b[24][1]++;
                cov_2kni7zukv8.s[105]++;
                if (sqc) {
                  cov_2kni7zukv8.b[26][0]++;
                  cov_2kni7zukv8.s[106]++;
                  str = str.slice(0, sqc.index) + str.slice(sqc.index + 1);
                  cov_2kni7zukv8.s[107]++;
                  d = new RegExp('['.concat(str, '\\]]'), 'g');
                } else {
                  cov_2kni7zukv8.b[26][1]++;
                  cov_2kni7zukv8.s[108]++;
                  if (sqo) {
                    cov_2kni7zukv8.b[27][0]++;
                    cov_2kni7zukv8.s[109]++;
                    str = str.slice(0, sqo.index) + str.slice(sqo.index + 1);
                    cov_2kni7zukv8.s[110]++;
                    d = new RegExp('['.concat(str, '\\[]'), 'g');
                  } else {
                    cov_2kni7zukv8.b[27][1]++;
                    cov_2kni7zukv8.s[111]++;
                    d = new RegExp('['.concat(str, ']'), 'g');
                  }
                }
              }
            } else {
              cov_2kni7zukv8.b[23][1]++;
              cov_2kni7zukv8.s[112]++;
              d = /\s/g;
            }
            cov_2kni7zukv8.s[113]++;
            return value.split(d).filter(function(n) {
              cov_2kni7zukv8.f[15]++;
              cov_2kni7zukv8.s[114]++;
              return n;
            });
          };

          /**
           * Removes whitespace characters from the beginning and end of a String. In
           * addition to standard whitespace characters such as space, carriage return,
           * and tab, this function also removes the Unicode "nbsp" character.
           *
           * @method trim
           * @param  {String} str a String to be trimmed
           * @return {String}       a trimmed String
           *
           * @example
           * <div>
           * <code>
           * let string = trim('  No new lines\n   ');
           * text(string + ' here', 2, 50);
           * </code>
           * </div>
           *
           * @alt
           * "No new lines here" displayed center canvas
           */
          /**
           * @method trim
           * @param  {Array} strs an Array of Strings to be trimmed
           * @return {String[]}   an Array of trimmed Strings
           */ cov_2kni7zukv8.s[115]++;
          _main.default.prototype.trim = function(str) {
            cov_2kni7zukv8.f[16]++;
            cov_2kni7zukv8.s[116]++;
            _main.default._validateParameters('trim', arguments);
            cov_2kni7zukv8.s[117]++;
            if (str instanceof Array) {
              cov_2kni7zukv8.b[28][0]++;
              cov_2kni7zukv8.s[118]++;
              return str.map(this.trim);
            } else {
              cov_2kni7zukv8.b[28][1]++;
              cov_2kni7zukv8.s[119]++;
              return str.trim();
            }
          };
          var _default = _main.default;
          exports.default = _default;
        },
        {
          '../core/friendly_errors/fes_core': 275,
          '../core/friendly_errors/file_errors': 276,
          '../core/friendly_errors/validate_params': 278,
          '../core/main': 283,
          'core-js/modules/es.array.filter': 169,
          'core-js/modules/es.array.index-of': 173,
          'core-js/modules/es.array.join': 175,
          'core-js/modules/es.array.map': 177,
          'core-js/modules/es.array.slice': 178,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.regexp.constructor': 195,
          'core-js/modules/es.regexp.exec': 196,
          'core-js/modules/es.regexp.to-string': 197,
          'core-js/modules/es.string.match': 202,
          'core-js/modules/es.string.replace': 204,
          'core-js/modules/es.string.split': 206,
          'core-js/modules/es.string.trim': 208
        }
      ],
      325: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_24q67vupmf = (function() {
            var path = '/Users/outofambit/src/p5.js/src/utilities/time_date.js';
            var hash = '115241e223b1cd6fca7bbab847e82ecdc1c54a37';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/utilities/time_date.js',
              statementMap: {
                '0': { start: { line: 27, column: 0 }, end: { line: 29, column: 2 } },
                '1': { start: { line: 28, column: 2 }, end: { line: 28, column: 30 } },
                '2': { start: { line: 48, column: 0 }, end: { line: 50, column: 2 } },
                '3': { start: { line: 49, column: 2 }, end: { line: 49, column: 31 } },
                '4': { start: { line: 69, column: 0 }, end: { line: 71, column: 2 } },
                '5': { start: { line: 70, column: 2 }, end: { line: 70, column: 33 } },
                '6': { start: { line: 91, column: 0 }, end: { line: 98, column: 2 } },
                '7': { start: { line: 92, column: 2 }, end: { line: 97, column: 3 } },
                '8': { start: { line: 94, column: 4 }, end: { line: 94, column: 13 } },
                '9': { start: { line: 96, column: 4 }, end: { line: 96, column: 56 } },
                '10': { start: { line: 117, column: 0 }, end: { line: 120, column: 2 } },
                '11': { start: { line: 119, column: 2 }, end: { line: 119, column: 35 } },
                '12': { start: { line: 139, column: 0 }, end: { line: 141, column: 2 } },
                '13': { start: { line: 140, column: 2 }, end: { line: 140, column: 33 } },
                '14': { start: { line: 160, column: 0 }, end: { line: 162, column: 2 } },
                '15': { start: { line: 161, column: 2 }, end: { line: 161, column: 34 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 27, column: 19 }, end: { line: 27, column: 20 } },
                  loc: { start: { line: 27, column: 30 }, end: { line: 29, column: 1 } },
                  line: 27
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 48, column: 20 }, end: { line: 48, column: 21 } },
                  loc: { start: { line: 48, column: 31 }, end: { line: 50, column: 1 } },
                  line: 48
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: { start: { line: 69, column: 22 }, end: { line: 69, column: 23 } },
                  loc: { start: { line: 69, column: 33 }, end: { line: 71, column: 1 } },
                  line: 69
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: { start: { line: 91, column: 22 }, end: { line: 91, column: 23 } },
                  loc: { start: { line: 91, column: 33 }, end: { line: 98, column: 1 } },
                  line: 91
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 117, column: 21 },
                    end: { line: 117, column: 22 }
                  },
                  loc: { start: { line: 117, column: 32 }, end: { line: 120, column: 1 } },
                  line: 117
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 139, column: 22 },
                    end: { line: 139, column: 23 }
                  },
                  loc: { start: { line: 139, column: 33 }, end: { line: 141, column: 1 } },
                  line: 139
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 160, column: 20 },
                    end: { line: 160, column: 21 }
                  },
                  loc: { start: { line: 160, column: 31 }, end: { line: 162, column: 1 } },
                  line: 160
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 92, column: 2 }, end: { line: 97, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 92, column: 2 }, end: { line: 97, column: 3 } },
                    { start: { line: 92, column: 2 }, end: { line: 97, column: 3 } }
                  ],
                  line: 92
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0
              },
              f: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0 },
              b: { '0': [0, 0] },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '115241e223b1cd6fca7bbab847e82ecdc1c54a37'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_24q67vupmf.s[0]++;

          /**
           * p5.js communicates with the clock on your computer. The <a href="#/p5/day">day()</a> function
           * returns the current day as a value from 1 - 31.
           *
           * @method day
           * @return {Integer} the current day
           * @example
           * <div>
           * <code>
           * let d = day();
           * text('Current day: \n' + d, 5, 50);
           * </code>
           * </div>
           *
           * @alt
           * Current day is displayed
           */
          _main.default.prototype.day = function() {
            cov_24q67vupmf.f[0]++;
            cov_24q67vupmf.s[1]++;
            return new Date().getDate();
          };

          /**
           * p5.js communicates with the clock on your computer. The <a href="#/p5/hour">hour()</a> function
           * returns the current hour as a value from 0 - 23.
           *
           * @method hour
           * @return {Integer} the current hour
           * @example
           * <div>
           * <code>
           * let h = hour();
           * text('Current hour:\n' + h, 5, 50);
           * </code>
           * </div>
           *
           * @alt
           * Current hour is displayed
           */ cov_24q67vupmf.s[2]++;
          _main.default.prototype.hour = function() {
            cov_24q67vupmf.f[1]++;
            cov_24q67vupmf.s[3]++;
            return new Date().getHours();
          };

          /**
           * p5.js communicates with the clock on your computer. The <a href="#/p5/minute">minute()</a> function
           * returns the current minute as a value from 0 - 59.
           *
           * @method minute
           * @return {Integer} the current minute
           * @example
           * <div>
           * <code>
           * let m = minute();
           * text('Current minute: \n' + m, 5, 50);
           * </code>
           * </div>
           *
           * @alt
           * Current minute is displayed
           */ cov_24q67vupmf.s[4]++;
          _main.default.prototype.minute = function() {
            cov_24q67vupmf.f[2]++;
            cov_24q67vupmf.s[5]++;
            return new Date().getMinutes();
          };

          /**
           * Returns the number of milliseconds (thousandths of a second) since
           * starting the sketch (when `setup()` is called). This information is often
           * used for timing events and animation sequences.
           *
           * @method millis
           * @return {Number} the number of milliseconds since starting the sketch
           * @example
           * <div>
           * <code>
           * let millisecond = millis();
           * text('Milliseconds \nrunning: \n' + millisecond, 5, 40);
           * </code>
           * </div>
           *
           * @alt
           * number of milliseconds since sketch has started displayed
           */ cov_24q67vupmf.s[6]++;
          _main.default.prototype.millis = function() {
            cov_24q67vupmf.f[3]++;
            cov_24q67vupmf.s[7]++;
            if (this._millisStart === -1) {
              cov_24q67vupmf.b[0][0]++;
              cov_24q67vupmf.s[8]++;
              // Sketch has not started
              return 0;
            } else {
              cov_24q67vupmf.b[0][1]++;
              cov_24q67vupmf.s[9]++;
              return window.performance.now() - this._millisStart;
            }
          };

          /**
           * p5.js communicates with the clock on your computer. The <a href="#/p5/month">month()</a> function
           * returns the current month as a value from 1 - 12.
           *
           * @method month
           * @return {Integer} the current month
           * @example
           * <div>
           * <code>
           * let m = month();
           * text('Current month: \n' + m, 5, 50);
           * </code>
           * </div>
           *
           * @alt
           * Current month is displayed
           */ cov_24q67vupmf.s[10]++;
          _main.default.prototype.month = function() {
            cov_24q67vupmf.f[4]++;
            cov_24q67vupmf.s[11]++;
            //January is 0!
            return new Date().getMonth() + 1;
          };

          /**
           * p5.js communicates with the clock on your computer. The <a href="#/p5/second">second()</a> function
           * returns the current second as a value from 0 - 59.
           *
           * @method second
           * @return {Integer} the current second
           * @example
           * <div>
           * <code>
           * let s = second();
           * text('Current second: \n' + s, 5, 50);
           * </code>
           * </div>
           *
           * @alt
           * Current second is displayed
           */ cov_24q67vupmf.s[12]++;
          _main.default.prototype.second = function() {
            cov_24q67vupmf.f[5]++;
            cov_24q67vupmf.s[13]++;
            return new Date().getSeconds();
          };

          /**
           * p5.js communicates with the clock on your computer. The <a href="#/p5/year">year()</a> function
           * returns the current year as an integer (2014, 2015, 2016, etc).
           *
           * @method year
           * @return {Integer} the current year
           * @example
           * <div>
           * <code>
           * let y = year();
           * text('Current year: \n' + y, 5, 50);
           * </code>
           * </div>
           *
           * @alt
           * Current year is displayed
           */ cov_24q67vupmf.s[14]++;
          _main.default.prototype.year = function() {
            cov_24q67vupmf.f[6]++;
            cov_24q67vupmf.s[15]++;
            return new Date().getFullYear();
          };
          var _default = _main.default;
          exports.default = _default;
        },
        { '../core/main': 283 }
      ],
      326: [
        function(_dereq_, module, exports) {
          'use strict';
          function _typeof(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof = function _typeof(obj) {
                return typeof obj;
              };
            } else {
              _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof(obj);
          }
          var cov_2r7v3rpmrq = (function() {
            var path = '/Users/outofambit/src/p5.js/src/webgl/3d_primitives.js';
            var hash = 'b9294e65ff039519ae22e04b3a3d8d195c07f3a5';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/webgl/3d_primitives.js',
              statementMap: {
                '0': { start: { line: 48, column: 0 }, end: { line: 95, column: 2 } },
                '1': { start: { line: 49, column: 2 }, end: { line: 49, column: 26 } },
                '2': { start: { line: 50, column: 2 }, end: { line: 50, column: 45 } },
                '3': { start: { line: 51, column: 2 }, end: { line: 53, column: 3 } },
                '4': { start: { line: 52, column: 4 }, end: { line: 52, column: 15 } },
                '5': { start: { line: 54, column: 2 }, end: { line: 56, column: 3 } },
                '6': { start: { line: 55, column: 4 }, end: { line: 55, column: 19 } },
                '7': { start: { line: 58, column: 2 }, end: { line: 60, column: 3 } },
                '8': { start: { line: 59, column: 4 }, end: { line: 59, column: 16 } },
                '9': { start: { line: 61, column: 2 }, end: { line: 63, column: 3 } },
                '10': { start: { line: 62, column: 4 }, end: { line: 62, column: 16 } },
                '11': { start: { line: 65, column: 14 }, end: { line: 65, column: 43 } },
                '12': { start: { line: 67, column: 2 }, end: { line: 91, column: 3 } },
                '13': { start: { line: 68, column: 19 }, end: { line: 79, column: 5 } },
                '14': { start: { line: 70, column: 6 }, end: { line: 78, column: 7 } },
                '15': { start: { line: 70, column: 19 }, end: { line: 70, column: 20 } },
                '16': { start: { line: 71, column: 8 }, end: { line: 71, column: 29 } },
                '17': { start: { line: 72, column: 8 }, end: { line: 77, column: 9 } },
                '18': { start: { line: 72, column: 21 }, end: { line: 72, column: 22 } },
                '19': { start: { line: 73, column: 10 }, end: { line: 73, column: 31 } },
                '20': { start: { line: 74, column: 10 }, end: { line: 74, column: 49 } },
                '21': { start: { line: 75, column: 10 }, end: { line: 75, column: 32 } },
                '22': { start: { line: 76, column: 10 }, end: { line: 76, column: 30 } },
                '23': { start: { line: 80, column: 22 }, end: { line: 80, column: 63 } },
                '24': { start: { line: 81, column: 4 }, end: { line: 81, column: 46 } },
                '25': { start: { line: 82, column: 4 }, end: { line: 89, column: 5 } },
                '26': { start: { line: 83, column: 6 }, end: { line: 83, column: 56 } },
                '27': { start: { line: 84, column: 11 }, end: { line: 89, column: 5 } },
                '28': { start: { line: 85, column: 6 }, end: { line: 88, column: 8 } },
                '29': { start: { line: 90, column: 4 }, end: { line: 90, column: 49 } },
                '30': { start: { line: 93, column: 2 }, end: { line: 93, column: 58 } },
                '31': { start: { line: 94, column: 2 }, end: { line: 94, column: 14 } },
                '32': { start: { line: 126, column: 0 }, end: { line: 213, column: 2 } },
                '33': { start: { line: 127, column: 2 }, end: { line: 127, column: 24 } },
                '34': { start: { line: 128, column: 2 }, end: { line: 128, column: 43 } },
                '35': { start: { line: 129, column: 2 }, end: { line: 131, column: 3 } },
                '36': { start: { line: 130, column: 4 }, end: { line: 130, column: 15 } },
                '37': { start: { line: 132, column: 2 }, end: { line: 134, column: 3 } },
                '38': { start: { line: 133, column: 4 }, end: { line: 133, column: 19 } },
                '39': { start: { line: 135, column: 2 }, end: { line: 137, column: 3 } },
                '40': { start: { line: 136, column: 4 }, end: { line: 136, column: 19 } },
                '41': { start: { line: 140, column: 4 }, end: { line: 140, column: 75 } },
                '42': { start: { line: 141, column: 2 }, end: { line: 143, column: 3 } },
                '43': { start: { line: 142, column: 4 }, end: { line: 142, column: 39 } },
                '44': { start: { line: 144, column: 2 }, end: { line: 146, column: 3 } },
                '45': { start: { line: 145, column: 4 }, end: { line: 145, column: 39 } },
                '46': { start: { line: 148, column: 14 }, end: { line: 148, column: 41 } },
                '47': { start: { line: 149, column: 2 }, end: { line: 209, column: 3 } },
                '48': { start: { line: 150, column: 17 }, end: { line: 194, column: 5 } },
                '49': { start: { line: 151, column: 26 }, end: { line: 158, column: 7 } },
                '50': { start: { line: 161, column: 6 }, end: { line: 174, column: 8 } },
                '51': { start: { line: 175, column: 6 }, end: { line: 193, column: 7 } },
                '52': { start: { line: 175, column: 19 }, end: { line: 175, column: 20 } },
                '53': { start: { line: 176, column: 26 }, end: { line: 176, column: 40 } },
                '54': { start: { line: 177, column: 18 }, end: { line: 177, column: 23 } },
                '55': { start: { line: 178, column: 8 }, end: { line: 190, column: 9 } },
                '56': { start: { line: 178, column: 21 }, end: { line: 178, column: 22 } },
                '57': { start: { line: 179, column: 20 }, end: { line: 179, column: 32 } },
                '58': { start: { line: 183, column: 25 }, end: { line: 187, column: 11 } },
                '59': { start: { line: 188, column: 10 }, end: { line: 188, column: 37 } },
                '60': { start: { line: 189, column: 10 }, end: { line: 189, column: 44 } },
                '61': { start: { line: 191, column: 8 }, end: { line: 191, column: 43 } },
                '62': { start: { line: 192, column: 8 }, end: { line: 192, column: 47 } },
                '63': { start: { line: 195, column: 20 }, end: { line: 195, column: 59 } },
                '64': { start: { line: 196, column: 4 }, end: { line: 196, column: 29 } },
                '65': { start: { line: 197, column: 4 }, end: { line: 204, column: 5 } },
                '66': { start: { line: 198, column: 6 }, end: { line: 198, column: 54 } },
                '67': { start: { line: 199, column: 11 }, end: { line: 204, column: 5 } },
                '68': { start: { line: 200, column: 6 }, end: { line: 203, column: 8 } },
                '69': { start: { line: 208, column: 4 }, end: { line: 208, column: 47 } },
                '70': { start: { line: 210, column: 2 }, end: { line: 210, column: 62 } },
                '71': { start: { line: 212, column: 2 }, end: { line: 212, column: 14 } },
                '72': { start: { line: 283, column: 0 }, end: { line: 299, column: 2 } },
                '73': { start: { line: 284, column: 2 }, end: { line: 284, column: 27 } },
                '74': { start: { line: 285, column: 2 }, end: { line: 285, column: 46 } },
                '75': { start: { line: 286, column: 2 }, end: { line: 288, column: 3 } },
                '76': { start: { line: 287, column: 4 }, end: { line: 287, column: 16 } },
                '77': { start: { line: 289, column: 2 }, end: { line: 291, column: 3 } },
                '78': { start: { line: 290, column: 4 }, end: { line: 290, column: 17 } },
                '79': { start: { line: 292, column: 2 }, end: { line: 294, column: 3 } },
                '80': { start: { line: 293, column: 4 }, end: { line: 293, column: 17 } },
                '81': { start: { line: 296, column: 2 }, end: { line: 296, column: 59 } },
                '82': { start: { line: 298, column: 2 }, end: { line: 298, column: 14 } },
                '83': { start: { line: 308, column: 23 }, end: { line: 417, column: 1 } },
                '84': { start: { line: 317, column: 2 }, end: { line: 317, column: 54 } },
                '85': { start: { line: 318, column: 2 }, end: { line: 318, column: 44 } },
                '86': { start: { line: 319, column: 2 }, end: { line: 319, column: 47 } },
                '87': { start: { line: 320, column: 2 }, end: { line: 320, column: 38 } },
                '88': { start: { line: 321, column: 2 }, end: { line: 321, column: 38 } },
                '89': { start: { line: 322, column: 2 }, end: { line: 322, column: 57 } },
                '90': { start: { line: 323, column: 2 }, end: { line: 323, column: 59 } },
                '91': { start: { line: 324, column: 16 }, end: { line: 324, column: 34 } },
                '92': { start: { line: 325, column: 14 }, end: { line: 325, column: 40 } },
                '93': { start: { line: 327, column: 16 }, end: { line: 327, column: 60 } },
                '94': { start: { line: 328, column: 19 }, end: { line: 328, column: 34 } },
                '95': { start: { line: 329, column: 19 }, end: { line: 329, column: 34 } },
                '96': { start: { line: 331, column: 2 }, end: { line: 377, column: 3 } },
                '97': { start: { line: 332, column: 12 }, end: { line: 332, column: 24 } },
                '98': { start: { line: 333, column: 12 }, end: { line: 333, column: 22 } },
                '99': { start: { line: 335, column: 4 }, end: { line: 348, column: 5 } },
                '100': { start: { line: 337, column: 6 }, end: { line: 337, column: 12 } },
                '101': { start: { line: 338, column: 6 }, end: { line: 338, column: 12 } },
                '102': { start: { line: 339, column: 6 }, end: { line: 339, column: 32 } },
                '103': { start: { line: 340, column: 11 }, end: { line: 348, column: 5 } },
                '104': { start: { line: 342, column: 6 }, end: { line: 342, column: 17 } },
                '105': { start: { line: 343, column: 6 }, end: { line: 343, column: 12 } },
                '106': { start: { line: 344, column: 6 }, end: { line: 344, column: 29 } },
                '107': { start: { line: 347, column: 6 }, end: { line: 347, column: 65 } },
                '108': { start: { line: 349, column: 4 }, end: { line: 352, column: 5 } },
                '109': { start: { line: 351, column: 6 }, end: { line: 351, column: 21 } },
                '110': { start: { line: 354, column: 4 }, end: { line: 354, column: 20 } },
                '111': { start: { line: 355, column: 4 }, end: { line: 376, column: 5 } },
                '112': { start: { line: 356, column: 16 }, end: { line: 356, column: 34 } },
                '113': { start: { line: 357, column: 17 }, end: { line: 357, column: 32 } },
                '114': { start: { line: 358, column: 18 }, end: { line: 358, column: 30 } },
                '115': { start: { line: 359, column: 18 }, end: { line: 359, column: 30 } },
                '116': { start: { line: 362, column: 6 }, end: { line: 362, column: 79 } },
                '117': { start: { line: 366, column: 6 }, end: { line: 372, column: 7 } },
                '118': { start: { line: 367, column: 8 }, end: { line: 367, column: 47 } },
                '119': { start: { line: 368, column: 13 }, end: { line: 372, column: 7 } },
                '120': { start: { line: 369, column: 8 }, end: { line: 369, column: 46 } },
                '121': { start: { line: 371, column: 8 }, end: { line: 371, column: 79 } },
                '122': { start: { line: 373, column: 6 }, end: { line: 373, column: 44 } },
                '123': { start: { line: 375, column: 6 }, end: { line: 375, column: 26 } },
                '124': { start: { line: 379, column: 19 }, end: { line: 379, column: 20 } },
                '125': { start: { line: 380, column: 2 }, end: { line: 390, column: 3 } },
                '126': { start: { line: 381, column: 4 }, end: { line: 388, column: 5 } },
                '127': { start: { line: 382, column: 21 }, end: { line: 382, column: 39 } },
                '128': { start: { line: 383, column: 6 }, end: { line: 387, column: 9 } },
                '129': { start: { line: 389, column: 4 }, end: { line: 389, column: 30 } },
                '130': { start: { line: 391, column: 2 }, end: { line: 406, column: 3 } },
                '131': { start: { line: 392, column: 4 }, end: { line: 404, column: 5 } },
                '132': { start: { line: 393, column: 21 }, end: { line: 393, column: 39 } },
                '133': { start: { line: 394, column: 6 }, end: { line: 398, column: 9 } },
                '134': { start: { line: 399, column: 6 }, end: { line: 403, column: 9 } },
                '135': { start: { line: 405, column: 4 }, end: { line: 405, column: 26 } },
                '136': { start: { line: 407, column: 2 }, end: { line: 416, column: 3 } },
                '137': { start: { line: 408, column: 4 }, end: { line: 408, column: 26 } },
                '138': { start: { line: 409, column: 4 }, end: { line: 415, column: 5 } },
                '139': { start: { line: 410, column: 6 }, end: { line: 414, column: 9 } },
                '140': { start: { line: 495, column: 0 }, end: { line: 552, column: 2 } },
                '141': { start: { line: 503, column: 2 }, end: { line: 503, column: 29 } },
                '142': { start: { line: 504, column: 2 }, end: { line: 504, column: 48 } },
                '143': { start: { line: 505, column: 2 }, end: { line: 507, column: 3 } },
                '144': { start: { line: 506, column: 4 }, end: { line: 506, column: 16 } },
                '145': { start: { line: 508, column: 2 }, end: { line: 510, column: 3 } },
                '146': { start: { line: 509, column: 4 }, end: { line: 509, column: 20 } },
                '147': { start: { line: 511, column: 2 }, end: { line: 513, column: 3 } },
                '148': { start: { line: 512, column: 4 }, end: { line: 512, column: 17 } },
                '149': { start: { line: 514, column: 2 }, end: { line: 516, column: 3 } },
                '150': { start: { line: 515, column: 4 }, end: { line: 515, column: 16 } },
                '151': { start: { line: 517, column: 2 }, end: { line: 519, column: 3 } },
                '152': { start: { line: 518, column: 4 }, end: { line: 518, column: 18 } },
                '153': { start: { line: 520, column: 2 }, end: { line: 522, column: 3 } },
                '154': { start: { line: 521, column: 4 }, end: { line: 521, column: 21 } },
                '155': { start: { line: 524, column: 14 }, end: { line: 524, column: 69 } },
                '156': { start: { line: 525, column: 2 }, end: { line: 547, column: 3 } },
                '157': { start: { line: 526, column: 25 }, end: { line: 526, column: 58 } },
                '158': { start: { line: 527, column: 4 }, end: { line: 536, column: 6 } },
                '159': { start: { line: 538, column: 4 }, end: { line: 545, column: 5 } },
                '160': { start: { line: 539, column: 6 }, end: { line: 539, column: 59 } },
                '161': { start: { line: 540, column: 11 }, end: { line: 545, column: 5 } },
                '162': { start: { line: 541, column: 6 }, end: { line: 544, column: 8 } },
                '163': { start: { line: 546, column: 4 }, end: { line: 546, column: 52 } },
                '164': { start: { line: 549, column: 2 }, end: { line: 549, column: 64 } },
                '165': { start: { line: 551, column: 2 }, end: { line: 551, column: 14 } },
                '166': { start: { line: 630, column: 0 }, end: { line: 667, column: 2 } },
                '167': { start: { line: 631, column: 2 }, end: { line: 631, column: 25 } },
                '168': { start: { line: 632, column: 2 }, end: { line: 632, column: 44 } },
                '169': { start: { line: 633, column: 2 }, end: { line: 635, column: 3 } },
                '170': { start: { line: 634, column: 4 }, end: { line: 634, column: 16 } },
                '171': { start: { line: 636, column: 2 }, end: { line: 638, column: 3 } },
                '172': { start: { line: 637, column: 4 }, end: { line: 637, column: 20 } },
                '173': { start: { line: 639, column: 2 }, end: { line: 641, column: 3 } },
                '174': { start: { line: 640, column: 4 }, end: { line: 640, column: 17 } },
                '175': { start: { line: 642, column: 2 }, end: { line: 644, column: 3 } },
                '176': { start: { line: 643, column: 4 }, end: { line: 643, column: 16 } },
                '177': { start: { line: 645, column: 2 }, end: { line: 647, column: 3 } },
                '178': { start: { line: 646, column: 4 }, end: { line: 646, column: 15 } },
                '179': { start: { line: 649, column: 14 }, end: { line: 649, column: 49 } },
                '180': { start: { line: 650, column: 2 }, end: { line: 662, column: 3 } },
                '181': { start: { line: 651, column: 21 }, end: { line: 651, column: 54 } },
                '182': { start: { line: 652, column: 4 }, end: { line: 652, column: 73 } },
                '183': { start: { line: 653, column: 4 }, end: { line: 660, column: 5 } },
                '184': { start: { line: 654, column: 6 }, end: { line: 654, column: 55 } },
                '185': { start: { line: 655, column: 11 }, end: { line: 660, column: 5 } },
                '186': { start: { line: 656, column: 6 }, end: { line: 659, column: 8 } },
                '187': { start: { line: 661, column: 4 }, end: { line: 661, column: 48 } },
                '188': { start: { line: 664, column: 2 }, end: { line: 664, column: 64 } },
                '189': { start: { line: 666, column: 2 }, end: { line: 666, column: 14 } },
                '190': { start: { line: 744, column: 0 }, end: { line: 802, column: 2 } },
                '191': { start: { line: 745, column: 2 }, end: { line: 745, column: 30 } },
                '192': { start: { line: 746, column: 2 }, end: { line: 746, column: 49 } },
                '193': { start: { line: 747, column: 2 }, end: { line: 749, column: 3 } },
                '194': { start: { line: 748, column: 4 }, end: { line: 748, column: 17 } },
                '195': { start: { line: 750, column: 2 }, end: { line: 752, column: 3 } },
                '196': { start: { line: 751, column: 4 }, end: { line: 751, column: 22 } },
                '197': { start: { line: 753, column: 2 }, end: { line: 755, column: 3 } },
                '198': { start: { line: 754, column: 4 }, end: { line: 754, column: 22 } },
                '199': { start: { line: 757, column: 2 }, end: { line: 759, column: 3 } },
                '200': { start: { line: 758, column: 4 }, end: { line: 758, column: 17 } },
                '201': { start: { line: 760, column: 2 }, end: { line: 762, column: 3 } },
                '202': { start: { line: 761, column: 4 }, end: { line: 761, column: 17 } },
                '203': { start: { line: 764, column: 14 }, end: { line: 764, column: 47 } },
                '204': { start: { line: 766, column: 2 }, end: { line: 797, column: 3 } },
                '205': { start: { line: 767, column: 23 }, end: { line: 785, column: 5 } },
                '206': { start: { line: 768, column: 6 }, end: { line: 784, column: 7 } },
                '207': { start: { line: 768, column: 19 }, end: { line: 768, column: 20 } },
                '208': { start: { line: 769, column: 18 }, end: { line: 769, column: 34 } },
                '209': { start: { line: 770, column: 20 }, end: { line: 770, column: 45 } },
                '210': { start: { line: 771, column: 23 }, end: { line: 771, column: 36 } },
                '211': { start: { line: 772, column: 23 }, end: { line: 772, column: 36 } },
                '212': { start: { line: 774, column: 8 }, end: { line: 783, column: 9 } },
                '213': { start: { line: 774, column: 21 }, end: { line: 774, column: 22 } },
                '214': { start: { line: 775, column: 20 }, end: { line: 775, column: 36 } },
                '215': { start: { line: 776, column: 24 }, end: { line: 776, column: 39 } },
                '216': { start: { line: 777, column: 27 }, end: { line: 777, column: 42 } },
                '217': { start: { line: 778, column: 27 }, end: { line: 778, column: 42 } },
                '218': { start: { line: 779, column: 20 }, end: { line: 779, column: 79 } },
                '219': { start: { line: 780, column: 10 }, end: { line: 780, column: 32 } },
                '220': { start: { line: 781, column: 10 }, end: { line: 781, column: 37 } },
                '221': { start: { line: 782, column: 10 }, end: { line: 782, column: 30 } },
                '222': { start: { line: 786, column: 26 }, end: { line: 786, column: 71 } },
                '223': { start: { line: 787, column: 4 }, end: { line: 787, column: 33 } },
                '224': { start: { line: 788, column: 4 }, end: { line: 795, column: 5 } },
                '225': { start: { line: 789, column: 6 }, end: { line: 789, column: 60 } },
                '226': { start: { line: 790, column: 11 }, end: { line: 795, column: 5 } },
                '227': { start: { line: 791, column: 6 }, end: { line: 794, column: 8 } },
                '228': { start: { line: 796, column: 4 }, end: { line: 796, column: 53 } },
                '229': { start: { line: 799, column: 2 }, end: { line: 799, column: 67 } },
                '230': { start: { line: 801, column: 2 }, end: { line: 801, column: 14 } },
                '231': { start: { line: 880, column: 0 }, end: { line: 949, column: 2 } },
                '232': { start: { line: 881, column: 2 }, end: { line: 881, column: 26 } },
                '233': { start: { line: 882, column: 2 }, end: { line: 882, column: 45 } },
                '234': { start: { line: 883, column: 2 }, end: { line: 887, column: 3 } },
                '235': { start: { line: 884, column: 4 }, end: { line: 884, column: 16 } },
                '236': { start: { line: 885, column: 9 }, end: { line: 887, column: 3 } },
                '237': { start: { line: 886, column: 4 }, end: { line: 886, column: 11 } },
                '238': { start: { line: 889, column: 2 }, end: { line: 893, column: 3 } },
                '239': { start: { line: 890, column: 4 }, end: { line: 890, column: 20 } },
                '240': { start: { line: 891, column: 9 }, end: { line: 893, column: 3 } },
                '241': { start: { line: 892, column: 4 }, end: { line: 892, column: 11 } },
                '242': { start: { line: 895, column: 2 }, end: { line: 897, column: 3 } },
                '243': { start: { line: 896, column: 4 }, end: { line: 896, column: 17 } },
                '244': { start: { line: 898, column: 2 }, end: { line: 900, column: 3 } },
                '245': { start: { line: 899, column: 4 }, end: { line: 899, column: 17 } },
                '246': { start: { line: 902, column: 20 }, end: { line: 902, column: 56 } },
                '247': { start: { line: 903, column: 14 }, end: { line: 903, column: 56 } },
                '248': { start: { line: 905, column: 2 }, end: { line: 945, column: 3 } },
                '249': { start: { line: 906, column: 19 }, end: { line: 933, column: 5 } },
                '250': { start: { line: 907, column: 6 }, end: { line: 932, column: 7 } },
                '251': { start: { line: 907, column: 19 }, end: { line: 907, column: 20 } },
                '252': { start: { line: 908, column: 18 }, end: { line: 908, column: 34 } },
                '253': { start: { line: 909, column: 20 }, end: { line: 909, column: 35 } },
                '254': { start: { line: 910, column: 23 }, end: { line: 910, column: 36 } },
                '255': { start: { line: 911, column: 23 }, end: { line: 911, column: 36 } },
                '256': { start: { line: 912, column: 18 }, end: { line: 912, column: 40 } },
                '257': { start: { line: 914, column: 8 }, end: { line: 931, column: 9 } },
                '258': { start: { line: 914, column: 21 }, end: { line: 914, column: 22 } },
                '259': { start: { line: 915, column: 20 }, end: { line: 915, column: 36 } },
                '260': { start: { line: 916, column: 24 }, end: { line: 916, column: 39 } },
                '261': { start: { line: 917, column: 27 }, end: { line: 917, column: 42 } },
                '262': { start: { line: 918, column: 27 }, end: { line: 918, column: 42 } },
                '263': { start: { line: 920, column: 20 }, end: { line: 924, column: 11 } },
                '264': { start: { line: 926, column: 20 }, end: { line: 926, column: 79 } },
                '265': { start: { line: 928, column: 10 }, end: { line: 928, column: 32 } },
                '266': { start: { line: 929, column: 10 }, end: { line: 929, column: 37 } },
                '267': { start: { line: 930, column: 10 }, end: { line: 930, column: 30 } },
                '268': { start: { line: 934, column: 22 }, end: { line: 934, column: 63 } },
                '269': { start: { line: 935, column: 4 }, end: { line: 935, column: 29 } },
                '270': { start: { line: 936, column: 4 }, end: { line: 943, column: 5 } },
                '271': { start: { line: 937, column: 6 }, end: { line: 937, column: 56 } },
                '272': { start: { line: 938, column: 11 }, end: { line: 943, column: 5 } },
                '273': { start: { line: 939, column: 6 }, end: { line: 942, column: 8 } },
                '274': { start: { line: 944, column: 4 }, end: { line: 944, column: 49 } },
                '275': { start: { line: 946, column: 2 }, end: { line: 946, column: 64 } },
                '276': { start: { line: 948, column: 2 }, end: { line: 948, column: 14 } },
                '277': { start: { line: 987, column: 0 }, end: { line: 997, column: 2 } },
                '278': { start: { line: 988, column: 2 }, end: { line: 990, column: 3 } },
                '279': { start: { line: 989, column: 4 }, end: { line: 989, column: 10 } },
                '280': { start: { line: 992, column: 18 }, end: { line: 992, column: 20 } },
                '281': { start: { line: 993, column: 2 }, end: { line: 993, column: 39 } },
                '282': { start: { line: 994, column: 2 }, end: { line: 994, column: 62 } },
                '283': { start: { line: 996, column: 2 }, end: { line: 996, column: 14 } },
                '284': { start: { line: 999, column: 0 }, end: { line: 1049, column: 2 } },
                '285': {
                  start: { line: 1000, column: 13 },
                  end: { line: 1000, column: 20 }
                },
                '286': {
                  start: { line: 1001, column: 9 },
                  end: { line: 1001, column: 16 }
                },
                '287': {
                  start: { line: 1002, column: 13 },
                  end: { line: 1002, column: 20 }
                },
                '288': {
                  start: { line: 1003, column: 9 },
                  end: { line: 1003, column: 16 }
                },
                '289': {
                  start: { line: 1004, column: 13 },
                  end: { line: 1004, column: 20 }
                },
                '290': {
                  start: { line: 1005, column: 9 },
                  end: { line: 1005, column: 16 }
                },
                '291': {
                  start: { line: 1007, column: 14 },
                  end: { line: 1007, column: 19 }
                },
                '292': { start: { line: 1008, column: 2 }, end: { line: 1023, column: 3 } },
                '293': {
                  start: { line: 1009, column: 22 },
                  end: { line: 1018, column: 5 }
                },
                '294': {
                  start: { line: 1010, column: 23 },
                  end: { line: 1010, column: 25 }
                },
                '295': {
                  start: { line: 1011, column: 6 },
                  end: { line: 1011, column: 44 }
                },
                '296': {
                  start: { line: 1012, column: 6 },
                  end: { line: 1012, column: 44 }
                },
                '297': {
                  start: { line: 1013, column: 6 },
                  end: { line: 1013, column: 44 }
                },
                '298': {
                  start: { line: 1014, column: 6 },
                  end: { line: 1014, column: 52 }
                },
                '299': {
                  start: { line: 1015, column: 6 },
                  end: { line: 1015, column: 31 }
                },
                '300': {
                  start: { line: 1016, column: 6 },
                  end: { line: 1016, column: 31 }
                },
                '301': {
                  start: { line: 1017, column: 6 },
                  end: { line: 1017, column: 36 }
                },
                '302': {
                  start: { line: 1019, column: 20 },
                  end: { line: 1019, column: 52 }
                },
                '303': {
                  start: { line: 1020, column: 4 },
                  end: { line: 1020, column: 52 }
                },
                '304': {
                  start: { line: 1021, column: 4 },
                  end: { line: 1021, column: 29 }
                },
                '305': {
                  start: { line: 1022, column: 4 },
                  end: { line: 1022, column: 37 }
                },
                '306': {
                  start: { line: 1031, column: 20 },
                  end: { line: 1031, column: 41 }
                },
                '307': { start: { line: 1032, column: 2 }, end: { line: 1046, column: 3 } },
                '308': {
                  start: { line: 1034, column: 17 },
                  end: { line: 1039, column: 27 }
                },
                '309': {
                  start: { line: 1041, column: 4 },
                  end: { line: 1041, column: 26 }
                },
                '310': {
                  start: { line: 1043, column: 4 },
                  end: { line: 1043, column: 26 }
                },
                '311': {
                  start: { line: 1045, column: 4 },
                  end: { line: 1045, column: 31 }
                },
                '312': {
                  start: { line: 1048, column: 2 },
                  end: { line: 1048, column: 14 }
                },
                '313': { start: { line: 1051, column: 0 }, end: { line: 1062, column: 2 } },
                '314': { start: { line: 1052, column: 2 }, end: { line: 1061, column: 4 } },
                '315': { start: { line: 1064, column: 0 }, end: { line: 1180, column: 2 } },
                '316': {
                  start: { line: 1065, column: 12 },
                  end: { line: 1065, column: 24 }
                },
                '317': {
                  start: { line: 1066, column: 12 },
                  end: { line: 1066, column: 24 }
                },
                '318': {
                  start: { line: 1067, column: 16 },
                  end: { line: 1067, column: 28 }
                },
                '319': {
                  start: { line: 1068, column: 17 },
                  end: { line: 1068, column: 29 }
                },
                '320': {
                  start: { line: 1069, column: 16 },
                  end: { line: 1069, column: 28 }
                },
                '321': {
                  start: { line: 1070, column: 15 },
                  end: { line: 1070, column: 27 }
                },
                '322': {
                  start: { line: 1071, column: 15 },
                  end: { line: 1071, column: 27 }
                },
                '323': {
                  start: { line: 1072, column: 17 },
                  end: { line: 1072, column: 35 }
                },
                '324': { start: { line: 1078, column: 2 }, end: { line: 1084, column: 3 } },
                '325': {
                  start: { line: 1079, column: 4 },
                  end: { line: 1079, column: 22 }
                },
                '326': {
                  start: { line: 1080, column: 4 },
                  end: { line: 1080, column: 32 }
                },
                '327': {
                  start: { line: 1082, column: 4 },
                  end: { line: 1082, column: 18 }
                },
                '328': {
                  start: { line: 1083, column: 4 },
                  end: { line: 1083, column: 57 }
                },
                '329': { start: { line: 1086, column: 2 }, end: { line: 1166, column: 3 } },
                '330': {
                  start: { line: 1087, column: 17 },
                  end: { line: 1152, column: 5 }
                },
                '331': {
                  start: { line: 1088, column: 6 },
                  end: { line: 1088, column: 30 }
                },
                '332': { start: { line: 1091, column: 6 }, end: { line: 1151, column: 7 } },
                '333': { start: { line: 1093, column: 8 }, end: { line: 1096, column: 9 } },
                '334': {
                  start: { line: 1094, column: 10 },
                  end: { line: 1094, column: 57 }
                },
                '335': {
                  start: { line: 1095, column: 10 },
                  end: { line: 1095, column: 36 }
                },
                '336': { start: { line: 1099, column: 8 }, end: { line: 1113, column: 9 } },
                '337': {
                  start: { line: 1099, column: 21 },
                  end: { line: 1099, column: 22 }
                },
                '338': {
                  start: { line: 1100, column: 20 },
                  end: { line: 1100, column: 30 }
                },
                '339': {
                  start: { line: 1101, column: 24 },
                  end: { line: 1101, column: 50 }
                },
                '340': {
                  start: { line: 1103, column: 21 },
                  end: { line: 1103, column: 46 }
                },
                '341': {
                  start: { line: 1104, column: 21 },
                  end: { line: 1104, column: 46 }
                },
                '342': {
                  start: { line: 1106, column: 10 },
                  end: { line: 1106, column: 55 }
                },
                '343': {
                  start: { line: 1107, column: 10 },
                  end: { line: 1107, column: 34 }
                },
                '344': {
                  start: { line: 1109, column: 10 },
                  end: { line: 1112, column: 11 }
                },
                '345': {
                  start: { line: 1110, column: 12 },
                  end: { line: 1110, column: 47 }
                },
                '346': {
                  start: { line: 1111, column: 12 },
                  end: { line: 1111, column: 52 }
                },
                '347': { start: { line: 1116, column: 8 }, end: { line: 1150, column: 9 } },
                '348': {
                  start: { line: 1118, column: 12 },
                  end: { line: 1122, column: 15 }
                },
                '349': {
                  start: { line: 1123, column: 12 },
                  end: { line: 1123, column: 44 }
                },
                '350': {
                  start: { line: 1124, column: 12 },
                  end: { line: 1127, column: 15 }
                },
                '351': {
                  start: { line: 1128, column: 12 },
                  end: { line: 1128, column: 67 }
                },
                '352': {
                  start: { line: 1129, column: 12 },
                  end: { line: 1129, column: 18 }
                },
                '353': {
                  start: { line: 1132, column: 12 },
                  end: { line: 1132, column: 44 }
                },
                '354': {
                  start: { line: 1133, column: 12 },
                  end: { line: 1133, column: 67 }
                },
                '355': {
                  start: { line: 1134, column: 12 },
                  end: { line: 1134, column: 18 }
                },
                '356': {
                  start: { line: 1137, column: 12 },
                  end: { line: 1137, column: 44 }
                },
                '357': {
                  start: { line: 1138, column: 12 },
                  end: { line: 1138, column: 18 }
                },
                '358': {
                  start: { line: 1141, column: 12 },
                  end: { line: 1145, column: 15 }
                },
                '359': {
                  start: { line: 1146, column: 12 },
                  end: { line: 1149, column: 15 }
                },
                '360': {
                  start: { line: 1154, column: 20 },
                  end: { line: 1154, column: 52 }
                },
                '361': {
                  start: { line: 1155, column: 4 },
                  end: { line: 1155, column: 29 }
                },
                '362': { start: { line: 1157, column: 4 }, end: { line: 1163, column: 5 } },
                '363': {
                  start: { line: 1158, column: 6 },
                  end: { line: 1158, column: 61 }
                },
                '364': {
                  start: { line: 1159, column: 11 },
                  end: { line: 1163, column: 5 }
                },
                '365': { start: { line: 1160, column: 6 }, end: { line: 1162, column: 8 } },
                '366': {
                  start: { line: 1165, column: 4 },
                  end: { line: 1165, column: 37 }
                },
                '367': {
                  start: { line: 1168, column: 20 },
                  end: { line: 1168, column: 41 }
                },
                '368': { start: { line: 1170, column: 2 }, end: { line: 1177, column: 3 } },
                '369': {
                  start: { line: 1171, column: 4 },
                  end: { line: 1171, column: 40 }
                },
                '370': {
                  start: { line: 1172, column: 4 },
                  end: { line: 1172, column: 43 }
                },
                '371': {
                  start: { line: 1174, column: 4 },
                  end: { line: 1174, column: 26 }
                },
                '372': {
                  start: { line: 1176, column: 4 },
                  end: { line: 1176, column: 31 }
                },
                '373': {
                  start: { line: 1179, column: 2 },
                  end: { line: 1179, column: 14 }
                },
                '374': { start: { line: 1182, column: 0 }, end: { line: 1235, column: 2 } },
                '375': {
                  start: { line: 1183, column: 27 },
                  end: { line: 1183, column: 69 }
                },
                '376': {
                  start: { line: 1184, column: 12 },
                  end: { line: 1184, column: 19 }
                },
                '377': {
                  start: { line: 1185, column: 12 },
                  end: { line: 1185, column: 19 }
                },
                '378': {
                  start: { line: 1186, column: 16 },
                  end: { line: 1186, column: 23 }
                },
                '379': {
                  start: { line: 1187, column: 17 },
                  end: { line: 1187, column: 24 }
                },
                '380': {
                  start: { line: 1188, column: 18 },
                  end: { line: 1188, column: 56 }
                },
                '381': {
                  start: { line: 1189, column: 18 },
                  end: { line: 1189, column: 56 }
                },
                '382': {
                  start: { line: 1190, column: 14 },
                  end: { line: 1190, column: 42 }
                },
                '383': { start: { line: 1191, column: 2 }, end: { line: 1219, column: 3 } },
                '384': {
                  start: { line: 1192, column: 18 },
                  end: { line: 1211, column: 5 }
                },
                '385': { start: { line: 1193, column: 6 }, end: { line: 1201, column: 7 } },
                '386': {
                  start: { line: 1193, column: 19 },
                  end: { line: 1193, column: 20 }
                },
                '387': {
                  start: { line: 1194, column: 18 },
                  end: { line: 1194, column: 34 }
                },
                '388': { start: { line: 1195, column: 8 }, end: { line: 1200, column: 9 } },
                '389': {
                  start: { line: 1195, column: 21 },
                  end: { line: 1195, column: 22 }
                },
                '390': {
                  start: { line: 1196, column: 20 },
                  end: { line: 1196, column: 36 }
                },
                '391': {
                  start: { line: 1197, column: 20 },
                  end: { line: 1197, column: 42 }
                },
                '392': {
                  start: { line: 1198, column: 10 },
                  end: { line: 1198, column: 32 }
                },
                '393': {
                  start: { line: 1199, column: 10 },
                  end: { line: 1199, column: 30 }
                },
                '394': { start: { line: 1203, column: 6 }, end: { line: 1210, column: 7 } },
                '395': {
                  start: { line: 1204, column: 8 },
                  end: { line: 1209, column: 10 }
                },
                '396': {
                  start: { line: 1212, column: 21 },
                  end: { line: 1212, column: 61 }
                },
                '397': {
                  start: { line: 1213, column: 4 },
                  end: { line: 1217, column: 26 }
                },
                '398': {
                  start: { line: 1218, column: 4 },
                  end: { line: 1218, column: 38 }
                },
                '399': {
                  start: { line: 1225, column: 20 },
                  end: { line: 1225, column: 41 }
                },
                '400': { start: { line: 1226, column: 2 }, end: { line: 1233, column: 3 } },
                '401': {
                  start: { line: 1227, column: 4 },
                  end: { line: 1227, column: 40 }
                },
                '402': {
                  start: { line: 1228, column: 4 },
                  end: { line: 1228, column: 43 }
                },
                '403': {
                  start: { line: 1230, column: 4 },
                  end: { line: 1230, column: 26 }
                },
                '404': {
                  start: { line: 1232, column: 4 },
                  end: { line: 1232, column: 31 }
                },
                '405': {
                  start: { line: 1234, column: 2 },
                  end: { line: 1234, column: 14 }
                },
                '406': { start: { line: 1238, column: 0 }, end: { line: 1296, column: 2 } },
                '407': { start: { line: 1239, column: 2 }, end: { line: 1241, column: 3 } },
                '408': {
                  start: { line: 1240, column: 4 },
                  end: { line: 1240, column: 16 }
                },
                '409': { start: { line: 1242, column: 2 }, end: { line: 1244, column: 3 } },
                '410': {
                  start: { line: 1243, column: 4 },
                  end: { line: 1243, column: 16 }
                },
                '411': {
                  start: { line: 1247, column: 4 },
                  end: { line: 1247, column: 104 }
                },
                '412': { start: { line: 1249, column: 2 }, end: { line: 1293, column: 3 } },
                '413': {
                  start: { line: 1250, column: 21 },
                  end: { line: 1275, column: 6 }
                },
                '414': {
                  start: { line: 1253, column: 17 },
                  end: { line: 1253, column: 41 }
                },
                '415': {
                  start: { line: 1254, column: 17 },
                  end: { line: 1254, column: 41 }
                },
                '416': { start: { line: 1255, column: 6 }, end: { line: 1274, column: 7 } },
                '417': {
                  start: { line: 1255, column: 19 },
                  end: { line: 1255, column: 20 }
                },
                '418': { start: { line: 1256, column: 8 }, end: { line: 1273, column: 9 } },
                '419': {
                  start: { line: 1256, column: 21 },
                  end: { line: 1256, column: 22 }
                },
                '420': {
                  start: { line: 1257, column: 21 },
                  end: { line: 1257, column: 29 }
                },
                '421': {
                  start: { line: 1258, column: 21 },
                  end: { line: 1258, column: 29 }
                },
                '422': {
                  start: { line: 1260, column: 25 },
                  end: { line: 1260, column: 52 }
                },
                '423': {
                  start: { line: 1261, column: 25 },
                  end: { line: 1261, column: 52 }
                },
                '424': {
                  start: { line: 1262, column: 25 },
                  end: { line: 1262, column: 52 }
                },
                '425': {
                  start: { line: 1263, column: 25 },
                  end: { line: 1263, column: 52 }
                },
                '426': {
                  start: { line: 1264, column: 25 },
                  end: { line: 1264, column: 52 }
                },
                '427': {
                  start: { line: 1265, column: 25 },
                  end: { line: 1265, column: 52 }
                },
                '428': {
                  start: { line: 1267, column: 20 },
                  end: { line: 1267, column: 59 }
                },
                '429': {
                  start: { line: 1268, column: 20 },
                  end: { line: 1268, column: 59 }
                },
                '430': {
                  start: { line: 1269, column: 20 },
                  end: { line: 1269, column: 59 }
                },
                '431': {
                  start: { line: 1271, column: 10 },
                  end: { line: 1271, column: 59 }
                },
                '432': {
                  start: { line: 1272, column: 10 },
                  end: { line: 1272, column: 38 }
                },
                '433': {
                  start: { line: 1277, column: 4 },
                  end: { line: 1277, column: 24 }
                },
                '434': { start: { line: 1278, column: 4 }, end: { line: 1287, column: 5 } },
                '435': {
                  start: { line: 1278, column: 16 },
                  end: { line: 1278, column: 17 }
                },
                '436': { start: { line: 1279, column: 6 }, end: { line: 1286, column: 7 } },
                '437': {
                  start: { line: 1279, column: 18 },
                  end: { line: 1279, column: 19 }
                },
                '438': {
                  start: { line: 1280, column: 18 },
                  end: { line: 1280, column: 33 }
                },
                '439': {
                  start: { line: 1281, column: 18 },
                  end: { line: 1281, column: 39 }
                },
                '440': {
                  start: { line: 1282, column: 18 },
                  end: { line: 1282, column: 45 }
                },
                '441': {
                  start: { line: 1283, column: 18 },
                  end: { line: 1283, column: 39 }
                },
                '442': {
                  start: { line: 1284, column: 8 },
                  end: { line: 1284, column: 45 }
                },
                '443': {
                  start: { line: 1285, column: 8 },
                  end: { line: 1285, column: 45 }
                },
                '444': {
                  start: { line: 1288, column: 4 },
                  end: { line: 1291, column: 26 }
                },
                '445': {
                  start: { line: 1292, column: 4 },
                  end: { line: 1292, column: 38 }
                },
                '446': {
                  start: { line: 1294, column: 2 },
                  end: { line: 1294, column: 24 }
                },
                '447': {
                  start: { line: 1295, column: 2 },
                  end: { line: 1295, column: 14 }
                },
                '448': { start: { line: 1301, column: 0 }, end: { line: 1339, column: 2 } },
                '449': { start: { line: 1315, column: 2 }, end: { line: 1323, column: 3 } },
                '450': {
                  start: { line: 1316, column: 4 },
                  end: { line: 1316, column: 12 }
                },
                '451': {
                  start: { line: 1317, column: 4 },
                  end: { line: 1317, column: 12 }
                },
                '452': {
                  start: { line: 1318, column: 4 },
                  end: { line: 1318, column: 12 }
                },
                '453': {
                  start: { line: 1319, column: 4 },
                  end: { line: 1319, column: 12 }
                },
                '454': {
                  start: { line: 1320, column: 4 },
                  end: { line: 1320, column: 12 }
                },
                '455': {
                  start: { line: 1321, column: 4 },
                  end: { line: 1321, column: 12 }
                },
                '456': {
                  start: { line: 1322, column: 4 },
                  end: { line: 1322, column: 26 }
                },
                '457': {
                  start: { line: 1324, column: 23 },
                  end: { line: 1324, column: 54 }
                },
                '458': {
                  start: { line: 1325, column: 2 },
                  end: { line: 1325, column: 20 }
                },
                '459': { start: { line: 1326, column: 2 }, end: { line: 1336, column: 3 } },
                '460': {
                  start: { line: 1326, column: 15 },
                  end: { line: 1326, column: 16 }
                },
                '461': {
                  start: { line: 1327, column: 15 },
                  end: { line: 1327, column: 48 }
                },
                '462': {
                  start: { line: 1328, column: 15 },
                  end: { line: 1328, column: 73 }
                },
                '463': {
                  start: { line: 1329, column: 15 },
                  end: { line: 1329, column: 73 }
                },
                '464': {
                  start: { line: 1330, column: 15 },
                  end: { line: 1330, column: 44 }
                },
                '465': { start: { line: 1331, column: 4 }, end: { line: 1335, column: 6 } },
                '466': {
                  start: { line: 1337, column: 2 },
                  end: { line: 1337, column: 18 }
                },
                '467': {
                  start: { line: 1338, column: 2 },
                  end: { line: 1338, column: 14 }
                },
                '468': { start: { line: 1342, column: 0 }, end: { line: 1391, column: 2 } },
                '469': { start: { line: 1356, column: 2 }, end: { line: 1364, column: 3 } },
                '470': {
                  start: { line: 1357, column: 4 },
                  end: { line: 1357, column: 12 }
                },
                '471': {
                  start: { line: 1358, column: 4 },
                  end: { line: 1358, column: 12 }
                },
                '472': {
                  start: { line: 1359, column: 4 },
                  end: { line: 1359, column: 12 }
                },
                '473': {
                  start: { line: 1360, column: 4 },
                  end: { line: 1360, column: 12 }
                },
                '474': {
                  start: { line: 1361, column: 4 },
                  end: { line: 1361, column: 12 }
                },
                '475': {
                  start: { line: 1362, column: 4 },
                  end: { line: 1362, column: 12 }
                },
                '476': {
                  start: { line: 1363, column: 4 },
                  end: { line: 1363, column: 26 }
                },
                '477': {
                  start: { line: 1365, column: 22 },
                  end: { line: 1365, column: 46 }
                },
                '478': {
                  start: { line: 1366, column: 2 },
                  end: { line: 1366, column: 20 }
                },
                '479': { start: { line: 1367, column: 2 }, end: { line: 1388, column: 3 } },
                '480': {
                  start: { line: 1367, column: 15 },
                  end: { line: 1367, column: 16 }
                },
                '481': {
                  start: { line: 1368, column: 15 },
                  end: { line: 1368, column: 49 }
                },
                '482': {
                  start: { line: 1369, column: 15 },
                  end: { line: 1369, column: 49 }
                },
                '483': {
                  start: { line: 1370, column: 15 },
                  end: { line: 1370, column: 36 }
                },
                '484': {
                  start: { line: 1371, column: 15 },
                  end: { line: 1371, column: 18 }
                },
                '485': {
                  start: { line: 1373, column: 6 },
                  end: { line: 1376, column: 19 }
                },
                '486': {
                  start: { line: 1378, column: 6 },
                  end: { line: 1381, column: 19 }
                },
                '487': {
                  start: { line: 1383, column: 6 },
                  end: { line: 1386, column: 19 }
                },
                '488': {
                  start: { line: 1387, column: 4 },
                  end: { line: 1387, column: 28 }
                },
                '489': {
                  start: { line: 1389, column: 2 },
                  end: { line: 1389, column: 18 }
                },
                '490': {
                  start: { line: 1390, column: 2 },
                  end: { line: 1390, column: 14 }
                },
                '491': { start: { line: 1422, column: 0 }, end: { line: 1435, column: 2 } },
                '492': { start: { line: 1423, column: 2 }, end: { line: 1433, column: 3 } },
                '493': {
                  start: { line: 1424, column: 4 },
                  end: { line: 1424, column: 37 }
                },
                '494': {
                  start: { line: 1425, column: 4 },
                  end: { line: 1425, column: 43 }
                },
                '495': {
                  start: { line: 1426, column: 4 },
                  end: { line: 1426, column: 43 }
                },
                '496': {
                  start: { line: 1427, column: 4 },
                  end: { line: 1427, column: 20 }
                },
                '497': { start: { line: 1428, column: 9 }, end: { line: 1433, column: 3 } },
                '498': {
                  start: { line: 1429, column: 4 },
                  end: { line: 1429, column: 37 }
                },
                '499': {
                  start: { line: 1430, column: 4 },
                  end: { line: 1430, column: 37 }
                },
                '500': {
                  start: { line: 1431, column: 4 },
                  end: { line: 1431, column: 37 }
                },
                '501': {
                  start: { line: 1432, column: 4 },
                  end: { line: 1432, column: 20 }
                },
                '502': {
                  start: { line: 1434, column: 2 },
                  end: { line: 1434, column: 14 }
                },
                '503': { start: { line: 1437, column: 0 }, end: { line: 1526, column: 2 } },
                '504': { start: { line: 1438, column: 2 }, end: { line: 1525, column: 3 } },
                '505': {
                  start: { line: 1439, column: 4 },
                  end: { line: 1439, column: 76 }
                },
                '506': {
                  start: { line: 1441, column: 14 },
                  end: { line: 1441, column: 16 }
                },
                '507': {
                  start: { line: 1442, column: 14 },
                  end: { line: 1442, column: 16 }
                },
                '508': {
                  start: { line: 1443, column: 14 },
                  end: { line: 1443, column: 16 }
                },
                '509': {
                  start: { line: 1445, column: 22 },
                  end: { line: 1445, column: 33 }
                },
                '510': {
                  start: { line: 1447, column: 4 },
                  end: { line: 1447, column: 10 }
                },
                '511': { start: { line: 1449, column: 4 }, end: { line: 1472, column: 5 } },
                '512': {
                  start: { line: 1453, column: 6 },
                  end: { line: 1453, column: 35 }
                },
                '513': {
                  start: { line: 1454, column: 6 },
                  end: { line: 1454, column: 55 }
                },
                '514': {
                  start: { line: 1455, column: 19 },
                  end: { line: 1455, column: 44 }
                },
                '515': {
                  start: { line: 1456, column: 18 },
                  end: { line: 1456, column: 19 }
                },
                '516': {
                  start: { line: 1457, column: 16 },
                  end: { line: 1457, column: 17 }
                },
                '517': {
                  start: { line: 1458, column: 14 },
                  end: { line: 1458, column: 15 }
                },
                '518': { start: { line: 1459, column: 6 }, end: { line: 1471, column: 7 } },
                '519': {
                  start: { line: 1460, column: 8 },
                  end: { line: 1460, column: 41 }
                },
                '520': {
                  start: { line: 1461, column: 8 },
                  end: { line: 1461, column: 65 }
                },
                '521': { start: { line: 1462, column: 8 }, end: { line: 1467, column: 9 } },
                '522': {
                  start: { line: 1463, column: 10 },
                  end: { line: 1463, column: 72 }
                },
                '523': {
                  start: { line: 1464, column: 10 },
                  end: { line: 1464, column: 14 }
                },
                '524': {
                  start: { line: 1465, column: 10 },
                  end: { line: 1465, column: 67 }
                },
                '525': {
                  start: { line: 1466, column: 10 },
                  end: { line: 1466, column: 16 }
                },
                '526': {
                  start: { line: 1468, column: 8 },
                  end: { line: 1468, column: 22 }
                },
                '527': {
                  start: { line: 1469, column: 8 },
                  end: { line: 1469, column: 20 }
                },
                '528': {
                  start: { line: 1470, column: 8 },
                  end: { line: 1470, column: 12 }
                },
                '529': {
                  start: { line: 1474, column: 22 },
                  end: { line: 1474, column: 52 }
                },
                '530': { start: { line: 1476, column: 4 }, end: { line: 1524, column: 5 } },
                '531': {
                  start: { line: 1477, column: 6 },
                  end: { line: 1477, column: 27 }
                },
                '532': {
                  start: { line: 1479, column: 6 },
                  end: { line: 1479, column: 77 }
                },
                '533': {
                  start: { line: 1480, column: 6 },
                  end: { line: 1480, column: 77 }
                },
                '534': { start: { line: 1482, column: 6 }, end: { line: 1494, column: 7 } },
                '535': {
                  start: { line: 1483, column: 8 },
                  end: { line: 1487, column: 49 }
                },
                '536': {
                  start: { line: 1488, column: 8 },
                  end: { line: 1492, column: 49 }
                },
                '537': {
                  start: { line: 1493, column: 8 },
                  end: { line: 1493, column: 28 }
                },
                '538': {
                  start: { line: 1495, column: 6 },
                  end: { line: 1495, column: 52 }
                },
                '539': {
                  start: { line: 1496, column: 6 },
                  end: { line: 1496, column: 52 }
                },
                '540': {
                  start: { line: 1497, column: 11 },
                  end: { line: 1524, column: 5 }
                },
                '541': {
                  start: { line: 1498, column: 6 },
                  end: { line: 1498, column: 27 }
                },
                '542': {
                  start: { line: 1500, column: 6 },
                  end: { line: 1500, column: 77 }
                },
                '543': {
                  start: { line: 1501, column: 6 },
                  end: { line: 1501, column: 77 }
                },
                '544': {
                  start: { line: 1502, column: 6 },
                  end: { line: 1502, column: 77 }
                },
                '545': { start: { line: 1503, column: 6 }, end: { line: 1520, column: 7 } },
                '546': {
                  start: { line: 1504, column: 8 },
                  end: { line: 1508, column: 49 }
                },
                '547': {
                  start: { line: 1509, column: 8 },
                  end: { line: 1513, column: 49 }
                },
                '548': {
                  start: { line: 1514, column: 8 },
                  end: { line: 1518, column: 49 }
                },
                '549': {
                  start: { line: 1519, column: 8 },
                  end: { line: 1519, column: 32 }
                },
                '550': {
                  start: { line: 1521, column: 6 },
                  end: { line: 1521, column: 52 }
                },
                '551': {
                  start: { line: 1522, column: 6 },
                  end: { line: 1522, column: 52 }
                },
                '552': {
                  start: { line: 1523, column: 6 },
                  end: { line: 1523, column: 52 }
                },
                '553': { start: { line: 1528, column: 0 }, end: { line: 1615, column: 2 } },
                '554': { start: { line: 1529, column: 2 }, end: { line: 1614, column: 3 } },
                '555': {
                  start: { line: 1530, column: 4 },
                  end: { line: 1530, column: 79 }
                },
                '556': {
                  start: { line: 1532, column: 14 },
                  end: { line: 1532, column: 16 }
                },
                '557': {
                  start: { line: 1533, column: 14 },
                  end: { line: 1533, column: 16 }
                },
                '558': {
                  start: { line: 1534, column: 14 },
                  end: { line: 1534, column: 16 }
                },
                '559': {
                  start: { line: 1536, column: 22 },
                  end: { line: 1536, column: 33 }
                },
                '560': {
                  start: { line: 1538, column: 4 },
                  end: { line: 1538, column: 10 }
                },
                '561': { start: { line: 1540, column: 4 }, end: { line: 1563, column: 5 } },
                '562': {
                  start: { line: 1544, column: 6 },
                  end: { line: 1544, column: 38 }
                },
                '563': {
                  start: { line: 1545, column: 6 },
                  end: { line: 1545, column: 58 }
                },
                '564': {
                  start: { line: 1546, column: 19 },
                  end: { line: 1546, column: 47 }
                },
                '565': {
                  start: { line: 1547, column: 18 },
                  end: { line: 1547, column: 19 }
                },
                '566': {
                  start: { line: 1548, column: 16 },
                  end: { line: 1548, column: 17 }
                },
                '567': {
                  start: { line: 1549, column: 14 },
                  end: { line: 1549, column: 15 }
                },
                '568': { start: { line: 1550, column: 6 }, end: { line: 1562, column: 7 } },
                '569': {
                  start: { line: 1551, column: 8 },
                  end: { line: 1551, column: 41 }
                },
                '570': {
                  start: { line: 1552, column: 8 },
                  end: { line: 1552, column: 71 }
                },
                '571': { start: { line: 1553, column: 8 }, end: { line: 1558, column: 9 } },
                '572': {
                  start: { line: 1554, column: 10 },
                  end: { line: 1554, column: 72 }
                },
                '573': {
                  start: { line: 1555, column: 10 },
                  end: { line: 1555, column: 14 }
                },
                '574': {
                  start: { line: 1556, column: 10 },
                  end: { line: 1556, column: 73 }
                },
                '575': {
                  start: { line: 1557, column: 10 },
                  end: { line: 1557, column: 16 }
                },
                '576': {
                  start: { line: 1559, column: 8 },
                  end: { line: 1559, column: 22 }
                },
                '577': {
                  start: { line: 1560, column: 8 },
                  end: { line: 1560, column: 20 }
                },
                '578': {
                  start: { line: 1561, column: 8 },
                  end: { line: 1561, column: 12 }
                },
                '579': {
                  start: { line: 1565, column: 22 },
                  end: { line: 1565, column: 55 }
                },
                '580': { start: { line: 1567, column: 4 }, end: { line: 1613, column: 5 } },
                '581': {
                  start: { line: 1568, column: 6 },
                  end: { line: 1568, column: 30 }
                },
                '582': {
                  start: { line: 1570, column: 6 },
                  end: { line: 1570, column: 71 }
                },
                '583': {
                  start: { line: 1571, column: 6 },
                  end: { line: 1571, column: 71 }
                },
                '584': { start: { line: 1573, column: 6 }, end: { line: 1583, column: 7 } },
                '585': {
                  start: { line: 1574, column: 8 },
                  end: { line: 1577, column: 52 }
                },
                '586': {
                  start: { line: 1578, column: 8 },
                  end: { line: 1581, column: 52 }
                },
                '587': {
                  start: { line: 1582, column: 8 },
                  end: { line: 1582, column: 28 }
                },
                '588': {
                  start: { line: 1585, column: 6 },
                  end: { line: 1585, column: 55 }
                },
                '589': {
                  start: { line: 1586, column: 6 },
                  end: { line: 1586, column: 55 }
                },
                '590': {
                  start: { line: 1587, column: 11 },
                  end: { line: 1613, column: 5 }
                },
                '591': {
                  start: { line: 1588, column: 6 },
                  end: { line: 1588, column: 30 }
                },
                '592': {
                  start: { line: 1590, column: 6 },
                  end: { line: 1590, column: 71 }
                },
                '593': {
                  start: { line: 1591, column: 6 },
                  end: { line: 1591, column: 71 }
                },
                '594': {
                  start: { line: 1592, column: 6 },
                  end: { line: 1592, column: 71 }
                },
                '595': { start: { line: 1594, column: 6 }, end: { line: 1608, column: 7 } },
                '596': {
                  start: { line: 1595, column: 8 },
                  end: { line: 1598, column: 52 }
                },
                '597': {
                  start: { line: 1599, column: 8 },
                  end: { line: 1602, column: 52 }
                },
                '598': {
                  start: { line: 1603, column: 8 },
                  end: { line: 1606, column: 52 }
                },
                '599': {
                  start: { line: 1607, column: 8 },
                  end: { line: 1607, column: 32 }
                },
                '600': {
                  start: { line: 1610, column: 6 },
                  end: { line: 1610, column: 55 }
                },
                '601': {
                  start: { line: 1611, column: 6 },
                  end: { line: 1611, column: 55 }
                },
                '602': {
                  start: { line: 1612, column: 6 },
                  end: { line: 1612, column: 55 }
                },
                '603': { start: { line: 1617, column: 0 }, end: { line: 1733, column: 2 } },
                '604': {
                  start: { line: 1618, column: 12 },
                  end: { line: 1618, column: 14 }
                },
                '605': {
                  start: { line: 1619, column: 12 },
                  end: { line: 1619, column: 14 }
                },
                '606': {
                  start: { line: 1620, column: 12 },
                  end: { line: 1620, column: 14 }
                },
                '607': { start: { line: 1622, column: 2 }, end: { line: 1622, column: 8 } },
                '608': {
                  start: { line: 1623, column: 20 },
                  end: { line: 1623, column: 31 }
                },
                '609': { start: { line: 1625, column: 2 }, end: { line: 1648, column: 3 } },
                '610': {
                  start: { line: 1629, column: 4 },
                  end: { line: 1629, column: 33 }
                },
                '611': {
                  start: { line: 1630, column: 4 },
                  end: { line: 1630, column: 53 }
                },
                '612': {
                  start: { line: 1631, column: 17 },
                  end: { line: 1631, column: 42 }
                },
                '613': {
                  start: { line: 1632, column: 16 },
                  end: { line: 1632, column: 17 }
                },
                '614': {
                  start: { line: 1633, column: 14 },
                  end: { line: 1633, column: 15 }
                },
                '615': {
                  start: { line: 1634, column: 12 },
                  end: { line: 1634, column: 13 }
                },
                '616': { start: { line: 1635, column: 4 }, end: { line: 1647, column: 5 } },
                '617': {
                  start: { line: 1636, column: 6 },
                  end: { line: 1636, column: 39 }
                },
                '618': {
                  start: { line: 1637, column: 6 },
                  end: { line: 1637, column: 63 }
                },
                '619': { start: { line: 1638, column: 6 }, end: { line: 1643, column: 7 } },
                '620': {
                  start: { line: 1639, column: 8 },
                  end: { line: 1639, column: 70 }
                },
                '621': {
                  start: { line: 1640, column: 8 },
                  end: { line: 1640, column: 12 }
                },
                '622': {
                  start: { line: 1641, column: 8 },
                  end: { line: 1641, column: 65 }
                },
                '623': {
                  start: { line: 1642, column: 8 },
                  end: { line: 1642, column: 14 }
                },
                '624': {
                  start: { line: 1644, column: 6 },
                  end: { line: 1644, column: 20 }
                },
                '625': {
                  start: { line: 1645, column: 6 },
                  end: { line: 1645, column: 18 }
                },
                '626': {
                  start: { line: 1646, column: 6 },
                  end: { line: 1646, column: 10 }
                },
                '627': {
                  start: { line: 1650, column: 20 },
                  end: { line: 1650, column: 50 }
                },
                '628': { start: { line: 1652, column: 2 }, end: { line: 1732, column: 3 } },
                '629': {
                  start: { line: 1653, column: 4 },
                  end: { line: 1653, column: 50 }
                },
                '630': {
                  start: { line: 1654, column: 4 },
                  end: { line: 1654, column: 50 }
                },
                '631': { start: { line: 1655, column: 4 }, end: { line: 1685, column: 5 } },
                '632': {
                  start: { line: 1656, column: 6 },
                  end: { line: 1656, column: 26 }
                },
                '633': { start: { line: 1657, column: 6 }, end: { line: 1662, column: 9 } },
                '634': { start: { line: 1663, column: 6 }, end: { line: 1668, column: 9 } },
                '635': { start: { line: 1669, column: 6 }, end: { line: 1681, column: 7 } },
                '636': {
                  start: { line: 1670, column: 8 },
                  end: { line: 1674, column: 49 }
                },
                '637': {
                  start: { line: 1675, column: 8 },
                  end: { line: 1679, column: 49 }
                },
                '638': {
                  start: { line: 1680, column: 8 },
                  end: { line: 1680, column: 28 }
                },
                '639': { start: { line: 1682, column: 6 }, end: { line: 1684, column: 7 } },
                '640': {
                  start: { line: 1683, column: 8 },
                  end: { line: 1683, column: 48 }
                },
                '641': { start: { line: 1686, column: 9 }, end: { line: 1732, column: 3 } },
                '642': {
                  start: { line: 1687, column: 4 },
                  end: { line: 1687, column: 50 }
                },
                '643': {
                  start: { line: 1688, column: 4 },
                  end: { line: 1688, column: 50 }
                },
                '644': {
                  start: { line: 1689, column: 4 },
                  end: { line: 1689, column: 50 }
                },
                '645': { start: { line: 1690, column: 4 }, end: { line: 1731, column: 5 } },
                '646': {
                  start: { line: 1691, column: 6 },
                  end: { line: 1691, column: 26 }
                },
                '647': { start: { line: 1692, column: 6 }, end: { line: 1697, column: 9 } },
                '648': { start: { line: 1698, column: 6 }, end: { line: 1703, column: 9 } },
                '649': { start: { line: 1704, column: 6 }, end: { line: 1709, column: 9 } },
                '650': { start: { line: 1710, column: 6 }, end: { line: 1727, column: 7 } },
                '651': {
                  start: { line: 1711, column: 8 },
                  end: { line: 1715, column: 49 }
                },
                '652': {
                  start: { line: 1716, column: 8 },
                  end: { line: 1720, column: 49 }
                },
                '653': {
                  start: { line: 1721, column: 8 },
                  end: { line: 1725, column: 49 }
                },
                '654': {
                  start: { line: 1726, column: 8 },
                  end: { line: 1726, column: 32 }
                },
                '655': { start: { line: 1728, column: 6 }, end: { line: 1730, column: 7 } },
                '656': {
                  start: { line: 1729, column: 8 },
                  end: { line: 1729, column: 48 }
                },
                '657': { start: { line: 1735, column: 0 }, end: { line: 1789, column: 2 } },
                '658': { start: { line: 1746, column: 2 }, end: { line: 1748, column: 3 } },
                '659': {
                  start: { line: 1747, column: 4 },
                  end: { line: 1747, column: 42 }
                },
                '660': {
                  start: { line: 1750, column: 2 },
                  end: { line: 1750, column: 21 }
                },
                '661': {
                  start: { line: 1752, column: 2 },
                  end: { line: 1752, column: 25 }
                },
                '662': {
                  start: { line: 1754, column: 2 },
                  end: { line: 1754, column: 27 }
                },
                '663': {
                  start: { line: 1755, column: 2 },
                  end: { line: 1755, column: 44 }
                },
                '664': {
                  start: { line: 1757, column: 11 },
                  end: { line: 1757, column: 12 }
                },
                '665': { start: { line: 1758, column: 2 }, end: { line: 1760, column: 3 } },
                '666': {
                  start: { line: 1759, column: 4 },
                  end: { line: 1759, column: 24 }
                },
                '667': {
                  start: { line: 1762, column: 11 },
                  end: { line: 1762, column: 12 }
                },
                '668': { start: { line: 1763, column: 2 }, end: { line: 1765, column: 3 } },
                '669': {
                  start: { line: 1764, column: 4 },
                  end: { line: 1764, column: 35 }
                },
                '670': {
                  start: { line: 1767, column: 11 },
                  end: { line: 1767, column: 12 }
                },
                '671': { start: { line: 1768, column: 2 }, end: { line: 1770, column: 3 } },
                '672': {
                  start: { line: 1769, column: 4 },
                  end: { line: 1769, column: 25 }
                },
                '673': {
                  start: { line: 1772, column: 11 },
                  end: { line: 1772, column: 12 }
                },
                '674': { start: { line: 1773, column: 2 }, end: { line: 1775, column: 3 } },
                '675': {
                  start: { line: 1774, column: 4 },
                  end: { line: 1774, column: 37 }
                },
                '676': {
                  start: { line: 1777, column: 2 },
                  end: { line: 1777, column: 20 }
                },
                '677': {
                  start: { line: 1778, column: 2 },
                  end: { line: 1778, column: 33 }
                },
                '678': {
                  start: { line: 1779, column: 2 },
                  end: { line: 1779, column: 42 }
                },
                '679': {
                  start: { line: 1780, column: 2 },
                  end: { line: 1780, column: 52 }
                },
                '680': {
                  start: { line: 1781, column: 2 },
                  end: { line: 1781, column: 43 }
                },
                '681': {
                  start: { line: 1782, column: 2 },
                  end: { line: 1782, column: 33 }
                },
                '682': {
                  start: { line: 1784, column: 2 },
                  end: { line: 1784, column: 20 }
                },
                '683': { start: { line: 1786, column: 2 }, end: { line: 1788, column: 3 } },
                '684': { start: { line: 1787, column: 4 }, end: { line: 1787, column: 37 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 48, column: 21 }, end: { line: 48, column: 22 } },
                  loc: { start: { line: 48, column: 63 }, end: { line: 95, column: 1 } },
                  line: 48
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 68, column: 19 }, end: { line: 68, column: 20 } },
                  loc: { start: { line: 68, column: 30 }, end: { line: 79, column: 5 } },
                  line: 68
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 126, column: 19 },
                    end: { line: 126, column: 20 }
                  },
                  loc: { start: { line: 126, column: 68 }, end: { line: 213, column: 1 } },
                  line: 126
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 150, column: 17 },
                    end: { line: 150, column: 18 }
                  },
                  loc: { start: { line: 150, column: 28 }, end: { line: 194, column: 5 } },
                  line: 150
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 283, column: 22 },
                    end: { line: 283, column: 23 }
                  },
                  loc: { start: { line: 283, column: 57 }, end: { line: 299, column: 1 } },
                  line: 283
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 308, column: 23 },
                    end: { line: 308, column: 24 }
                  },
                  loc: { start: { line: 316, column: 2 }, end: { line: 417, column: 1 } },
                  line: 316
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 495, column: 24 },
                    end: { line: 495, column: 25 }
                  },
                  loc: { start: { line: 502, column: 2 }, end: { line: 552, column: 1 } },
                  line: 502
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 630, column: 20 },
                    end: { line: 630, column: 21 }
                  },
                  loc: { start: { line: 630, column: 68 }, end: { line: 667, column: 1 } },
                  line: 630
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 744, column: 25 },
                    end: { line: 744, column: 26 }
                  },
                  loc: { start: { line: 744, column: 79 }, end: { line: 802, column: 1 } },
                  line: 744
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 767, column: 23 },
                    end: { line: 767, column: 24 }
                  },
                  loc: { start: { line: 767, column: 34 }, end: { line: 785, column: 5 } },
                  line: 767
                },
                '10': {
                  name: '(anonymous_10)',
                  decl: {
                    start: { line: 880, column: 21 },
                    end: { line: 880, column: 22 }
                  },
                  loc: { start: { line: 880, column: 68 }, end: { line: 949, column: 1 } },
                  line: 880
                },
                '11': {
                  name: '(anonymous_11)',
                  decl: {
                    start: { line: 906, column: 19 },
                    end: { line: 906, column: 20 }
                  },
                  loc: { start: { line: 906, column: 30 }, end: { line: 933, column: 5 } },
                  line: 906
                },
                '12': {
                  name: '(anonymous_12)',
                  decl: {
                    start: { line: 987, column: 32 },
                    end: { line: 987, column: 33 }
                  },
                  loc: { start: { line: 987, column: 50 }, end: { line: 997, column: 1 } },
                  line: 987
                },
                '13': {
                  name: '(anonymous_13)',
                  decl: {
                    start: { line: 999, column: 35 },
                    end: { line: 999, column: 36 }
                  },
                  loc: { start: { line: 999, column: 50 }, end: { line: 1049, column: 1 } },
                  line: 999
                },
                '14': {
                  name: '(anonymous_14)',
                  decl: {
                    start: { line: 1009, column: 22 },
                    end: { line: 1009, column: 23 }
                  },
                  loc: {
                    start: { line: 1009, column: 33 },
                    end: { line: 1018, column: 5 }
                  },
                  line: 1009
                },
                '15': {
                  name: '(anonymous_15)',
                  decl: {
                    start: { line: 1051, column: 34 },
                    end: { line: 1051, column: 35 }
                  },
                  loc: {
                    start: { line: 1051, column: 49 },
                    end: { line: 1062, column: 1 }
                  },
                  line: 1051
                },
                '16': {
                  name: '(anonymous_16)',
                  decl: {
                    start: { line: 1064, column: 30 },
                    end: { line: 1064, column: 31 }
                  },
                  loc: {
                    start: { line: 1064, column: 45 },
                    end: { line: 1180, column: 1 }
                  },
                  line: 1064
                },
                '17': {
                  name: '(anonymous_17)',
                  decl: {
                    start: { line: 1087, column: 17 },
                    end: { line: 1087, column: 18 }
                  },
                  loc: {
                    start: { line: 1087, column: 28 },
                    end: { line: 1152, column: 5 }
                  },
                  line: 1087
                },
                '18': {
                  name: '(anonymous_18)',
                  decl: {
                    start: { line: 1182, column: 31 },
                    end: { line: 1182, column: 32 }
                  },
                  loc: {
                    start: { line: 1182, column: 46 },
                    end: { line: 1235, column: 1 }
                  },
                  line: 1182
                },
                '19': {
                  name: '(anonymous_19)',
                  decl: {
                    start: { line: 1192, column: 18 },
                    end: { line: 1192, column: 19 }
                  },
                  loc: {
                    start: { line: 1192, column: 29 },
                    end: { line: 1211, column: 5 }
                  },
                  line: 1192
                },
                '20': {
                  name: '(anonymous_20)',
                  decl: {
                    start: { line: 1238, column: 31 },
                    end: { line: 1238, column: 32 }
                  },
                  loc: {
                    start: { line: 1238, column: 106 },
                    end: { line: 1296, column: 1 }
                  },
                  line: 1238
                },
                '21': {
                  name: '(anonymous_21)',
                  decl: {
                    start: { line: 1250, column: 55 },
                    end: { line: 1250, column: 56 }
                  },
                  loc: {
                    start: { line: 1250, column: 66 },
                    end: { line: 1275, column: 5 }
                  },
                  line: 1250
                },
                '22': {
                  name: '(anonymous_22)',
                  decl: {
                    start: { line: 1301, column: 33 },
                    end: { line: 1301, column: 34 }
                  },
                  loc: { start: { line: 1314, column: 2 }, end: { line: 1339, column: 1 } },
                  line: 1314
                },
                '23': {
                  name: '(anonymous_23)',
                  decl: {
                    start: { line: 1342, column: 32 },
                    end: { line: 1342, column: 33 }
                  },
                  loc: { start: { line: 1355, column: 2 }, end: { line: 1391, column: 1 } },
                  line: 1355
                },
                '24': {
                  name: '(anonymous_24)',
                  decl: {
                    start: { line: 1422, column: 31 },
                    end: { line: 1422, column: 32 }
                  },
                  loc: {
                    start: { line: 1422, column: 49 },
                    end: { line: 1435, column: 1 }
                  },
                  line: 1422
                },
                '25': {
                  name: '(anonymous_25)',
                  decl: {
                    start: { line: 1437, column: 39 },
                    end: { line: 1437, column: 40 }
                  },
                  loc: {
                    start: { line: 1437, column: 57 },
                    end: { line: 1526, column: 1 }
                  },
                  line: 1437
                },
                '26': {
                  name: '(anonymous_26)',
                  decl: {
                    start: { line: 1528, column: 42 },
                    end: { line: 1528, column: 43 }
                  },
                  loc: {
                    start: { line: 1528, column: 60 },
                    end: { line: 1615, column: 1 }
                  },
                  line: 1528
                },
                '27': {
                  name: '(anonymous_27)',
                  decl: {
                    start: { line: 1617, column: 38 },
                    end: { line: 1617, column: 39 }
                  },
                  loc: {
                    start: { line: 1617, column: 56 },
                    end: { line: 1733, column: 1 }
                  },
                  line: 1617
                },
                '28': {
                  name: '(anonymous_28)',
                  decl: {
                    start: { line: 1735, column: 32 },
                    end: { line: 1735, column: 33 }
                  },
                  loc: { start: { line: 1745, column: 2 }, end: { line: 1789, column: 1 } },
                  line: 1745
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 51, column: 2 }, end: { line: 53, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 51, column: 2 }, end: { line: 53, column: 3 } },
                    { start: { line: 51, column: 2 }, end: { line: 53, column: 3 } }
                  ],
                  line: 51
                },
                '1': {
                  loc: { start: { line: 54, column: 2 }, end: { line: 56, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 54, column: 2 }, end: { line: 56, column: 3 } },
                    { start: { line: 54, column: 2 }, end: { line: 56, column: 3 } }
                  ],
                  line: 54
                },
                '2': {
                  loc: { start: { line: 58, column: 2 }, end: { line: 60, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 58, column: 2 }, end: { line: 60, column: 3 } },
                    { start: { line: 58, column: 2 }, end: { line: 60, column: 3 } }
                  ],
                  line: 58
                },
                '3': {
                  loc: { start: { line: 61, column: 2 }, end: { line: 63, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 61, column: 2 }, end: { line: 63, column: 3 } },
                    { start: { line: 61, column: 2 }, end: { line: 63, column: 3 } }
                  ],
                  line: 61
                },
                '4': {
                  loc: { start: { line: 67, column: 2 }, end: { line: 91, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 67, column: 2 }, end: { line: 91, column: 3 } },
                    { start: { line: 67, column: 2 }, end: { line: 91, column: 3 } }
                  ],
                  line: 67
                },
                '5': {
                  loc: { start: { line: 82, column: 4 }, end: { line: 89, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 82, column: 4 }, end: { line: 89, column: 5 } },
                    { start: { line: 82, column: 4 }, end: { line: 89, column: 5 } }
                  ],
                  line: 82
                },
                '6': {
                  loc: { start: { line: 82, column: 8 }, end: { line: 82, column: 36 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 82, column: 8 }, end: { line: 82, column: 20 } },
                    { start: { line: 82, column: 24 }, end: { line: 82, column: 36 } }
                  ],
                  line: 82
                },
                '7': {
                  loc: { start: { line: 84, column: 11 }, end: { line: 89, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 84, column: 11 }, end: { line: 89, column: 5 } },
                    { start: { line: 84, column: 11 }, end: { line: 89, column: 5 } }
                  ],
                  line: 84
                },
                '8': {
                  loc: { start: { line: 129, column: 2 }, end: { line: 131, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 129, column: 2 }, end: { line: 131, column: 3 } },
                    { start: { line: 129, column: 2 }, end: { line: 131, column: 3 } }
                  ],
                  line: 129
                },
                '9': {
                  loc: { start: { line: 132, column: 2 }, end: { line: 134, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 132, column: 2 }, end: { line: 134, column: 3 } },
                    { start: { line: 132, column: 2 }, end: { line: 134, column: 3 } }
                  ],
                  line: 132
                },
                '10': {
                  loc: { start: { line: 135, column: 2 }, end: { line: 137, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 135, column: 2 }, end: { line: 137, column: 3 } },
                    { start: { line: 135, column: 2 }, end: { line: 137, column: 3 } }
                  ],
                  line: 135
                },
                '11': {
                  loc: { start: { line: 140, column: 4 }, end: { line: 140, column: 75 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 140, column: 4 }, end: { line: 140, column: 29 } },
                    { start: { line: 140, column: 33 }, end: { line: 140, column: 75 } }
                  ],
                  line: 140
                },
                '12': {
                  loc: { start: { line: 141, column: 2 }, end: { line: 143, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 141, column: 2 }, end: { line: 143, column: 3 } },
                    { start: { line: 141, column: 2 }, end: { line: 143, column: 3 } }
                  ],
                  line: 141
                },
                '13': {
                  loc: { start: { line: 142, column: 14 }, end: { line: 142, column: 38 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 142, column: 33 }, end: { line: 142, column: 34 } },
                    { start: { line: 142, column: 37 }, end: { line: 142, column: 38 } }
                  ],
                  line: 142
                },
                '14': {
                  loc: { start: { line: 144, column: 2 }, end: { line: 146, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 144, column: 2 }, end: { line: 146, column: 3 } },
                    { start: { line: 144, column: 2 }, end: { line: 146, column: 3 } }
                  ],
                  line: 144
                },
                '15': {
                  loc: { start: { line: 145, column: 14 }, end: { line: 145, column: 38 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 145, column: 33 }, end: { line: 145, column: 34 } },
                    { start: { line: 145, column: 37 }, end: { line: 145, column: 38 } }
                  ],
                  line: 145
                },
                '16': {
                  loc: { start: { line: 149, column: 2 }, end: { line: 209, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 149, column: 2 }, end: { line: 209, column: 3 } },
                    { start: { line: 149, column: 2 }, end: { line: 209, column: 3 } }
                  ],
                  line: 149
                },
                '17': {
                  loc: { start: { line: 197, column: 4 }, end: { line: 204, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 197, column: 4 }, end: { line: 204, column: 5 } },
                    { start: { line: 197, column: 4 }, end: { line: 204, column: 5 } }
                  ],
                  line: 197
                },
                '18': {
                  loc: { start: { line: 197, column: 8 }, end: { line: 197, column: 36 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 197, column: 8 }, end: { line: 197, column: 20 } },
                    { start: { line: 197, column: 24 }, end: { line: 197, column: 36 } }
                  ],
                  line: 197
                },
                '19': {
                  loc: { start: { line: 199, column: 11 }, end: { line: 204, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 199, column: 11 }, end: { line: 204, column: 5 } },
                    { start: { line: 199, column: 11 }, end: { line: 204, column: 5 } }
                  ],
                  line: 199
                },
                '20': {
                  loc: { start: { line: 286, column: 2 }, end: { line: 288, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 286, column: 2 }, end: { line: 288, column: 3 } },
                    { start: { line: 286, column: 2 }, end: { line: 288, column: 3 } }
                  ],
                  line: 286
                },
                '21': {
                  loc: { start: { line: 289, column: 2 }, end: { line: 291, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 289, column: 2 }, end: { line: 291, column: 3 } },
                    { start: { line: 289, column: 2 }, end: { line: 291, column: 3 } }
                  ],
                  line: 289
                },
                '22': {
                  loc: { start: { line: 292, column: 2 }, end: { line: 294, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 292, column: 2 }, end: { line: 294, column: 3 } },
                    { start: { line: 292, column: 2 }, end: { line: 294, column: 3 } }
                  ],
                  line: 292
                },
                '23': {
                  loc: { start: { line: 317, column: 17 }, end: { line: 317, column: 53 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 317, column: 37 }, end: { line: 317, column: 38 } },
                    { start: { line: 317, column: 41 }, end: { line: 317, column: 53 } }
                  ],
                  line: 317
                },
                '24': {
                  loc: { start: { line: 318, column: 14 }, end: { line: 318, column: 43 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 318, column: 30 }, end: { line: 318, column: 31 } },
                    { start: { line: 318, column: 34 }, end: { line: 318, column: 43 } }
                  ],
                  line: 318
                },
                '25': {
                  loc: { start: { line: 319, column: 11 }, end: { line: 319, column: 46 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 319, column: 25 }, end: { line: 319, column: 37 } },
                    { start: { line: 319, column: 40 }, end: { line: 319, column: 46 } }
                  ],
                  line: 319
                },
                '26': {
                  loc: { start: { line: 320, column: 12 }, end: { line: 320, column: 37 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 320, column: 26 }, end: { line: 320, column: 27 } },
                    { start: { line: 320, column: 30 }, end: { line: 320, column: 37 } }
                  ],
                  line: 320
                },
                '27': {
                  loc: { start: { line: 321, column: 12 }, end: { line: 321, column: 37 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 321, column: 26 }, end: { line: 321, column: 27 } },
                    { start: { line: 321, column: 30 }, end: { line: 321, column: 37 } }
                  ],
                  line: 321
                },
                '28': {
                  loc: { start: { line: 322, column: 14 }, end: { line: 322, column: 56 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 322, column: 40 }, end: { line: 322, column: 44 } },
                    { start: { line: 322, column: 47 }, end: { line: 322, column: 56 } }
                  ],
                  line: 322
                },
                '29': {
                  loc: { start: { line: 323, column: 11 }, end: { line: 323, column: 58 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 323, column: 34 }, end: { line: 323, column: 49 } },
                    { start: { line: 323, column: 52 }, end: { line: 323, column: 58 } }
                  ],
                  line: 323
                },
                '30': {
                  loc: { start: { line: 324, column: 16 }, end: { line: 324, column: 34 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 324, column: 28 }, end: { line: 324, column: 30 } },
                    { start: { line: 324, column: 33 }, end: { line: 324, column: 34 } }
                  ],
                  line: 324
                },
                '31': {
                  loc: { start: { line: 325, column: 25 }, end: { line: 325, column: 39 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 325, column: 34 }, end: { line: 325, column: 35 } },
                    { start: { line: 325, column: 38 }, end: { line: 325, column: 39 } }
                  ],
                  line: 325
                },
                '32': {
                  loc: { start: { line: 335, column: 4 }, end: { line: 348, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 335, column: 4 }, end: { line: 348, column: 5 } },
                    { start: { line: 335, column: 4 }, end: { line: 348, column: 5 } }
                  ],
                  line: 335
                },
                '33': {
                  loc: { start: { line: 340, column: 11 }, end: { line: 348, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 340, column: 11 }, end: { line: 348, column: 5 } },
                    { start: { line: 340, column: 11 }, end: { line: 348, column: 5 } }
                  ],
                  line: 340
                },
                '34': {
                  loc: { start: { line: 349, column: 4 }, end: { line: 352, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 349, column: 4 }, end: { line: 352, column: 5 } },
                    { start: { line: 349, column: 4 }, end: { line: 352, column: 5 } }
                  ],
                  line: 349
                },
                '35': {
                  loc: { start: { line: 349, column: 8 }, end: { line: 349, column: 39 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 349, column: 8 }, end: { line: 349, column: 17 } },
                    { start: { line: 349, column: 21 }, end: { line: 349, column: 39 } }
                  ],
                  line: 349
                },
                '36': {
                  loc: { start: { line: 366, column: 6 }, end: { line: 372, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 366, column: 6 }, end: { line: 372, column: 7 } },
                    { start: { line: 366, column: 6 }, end: { line: 372, column: 7 } }
                  ],
                  line: 366
                },
                '37': {
                  loc: { start: { line: 368, column: 13 }, end: { line: 372, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 368, column: 13 }, end: { line: 372, column: 7 } },
                    { start: { line: 368, column: 13 }, end: { line: 372, column: 7 } }
                  ],
                  line: 368
                },
                '38': {
                  loc: { start: { line: 368, column: 17 }, end: { line: 368, column: 42 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 368, column: 17 }, end: { line: 368, column: 29 } },
                    { start: { line: 368, column: 33 }, end: { line: 368, column: 42 } }
                  ],
                  line: 368
                },
                '39': {
                  loc: { start: { line: 380, column: 2 }, end: { line: 390, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 380, column: 2 }, end: { line: 390, column: 3 } },
                    { start: { line: 380, column: 2 }, end: { line: 390, column: 3 } }
                  ],
                  line: 380
                },
                '40': {
                  loc: { start: { line: 407, column: 2 }, end: { line: 416, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 407, column: 2 }, end: { line: 416, column: 3 } },
                    { start: { line: 407, column: 2 }, end: { line: 416, column: 3 } }
                  ],
                  line: 407
                },
                '41': {
                  loc: { start: { line: 505, column: 2 }, end: { line: 507, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 505, column: 2 }, end: { line: 507, column: 3 } },
                    { start: { line: 505, column: 2 }, end: { line: 507, column: 3 } }
                  ],
                  line: 505
                },
                '42': {
                  loc: { start: { line: 508, column: 2 }, end: { line: 510, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 508, column: 2 }, end: { line: 510, column: 3 } },
                    { start: { line: 508, column: 2 }, end: { line: 510, column: 3 } }
                  ],
                  line: 508
                },
                '43': {
                  loc: { start: { line: 511, column: 2 }, end: { line: 513, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 511, column: 2 }, end: { line: 513, column: 3 } },
                    { start: { line: 511, column: 2 }, end: { line: 513, column: 3 } }
                  ],
                  line: 511
                },
                '44': {
                  loc: { start: { line: 514, column: 2 }, end: { line: 516, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 514, column: 2 }, end: { line: 516, column: 3 } },
                    { start: { line: 514, column: 2 }, end: { line: 516, column: 3 } }
                  ],
                  line: 514
                },
                '45': {
                  loc: { start: { line: 517, column: 2 }, end: { line: 519, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 517, column: 2 }, end: { line: 519, column: 3 } },
                    { start: { line: 517, column: 2 }, end: { line: 519, column: 3 } }
                  ],
                  line: 517
                },
                '46': {
                  loc: { start: { line: 520, column: 2 }, end: { line: 522, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 520, column: 2 }, end: { line: 522, column: 3 } },
                    { start: { line: 520, column: 2 }, end: { line: 522, column: 3 } }
                  ],
                  line: 520
                },
                '47': {
                  loc: { start: { line: 525, column: 2 }, end: { line: 547, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 525, column: 2 }, end: { line: 547, column: 3 } },
                    { start: { line: 525, column: 2 }, end: { line: 547, column: 3 } }
                  ],
                  line: 525
                },
                '48': {
                  loc: { start: { line: 538, column: 4 }, end: { line: 545, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 538, column: 4 }, end: { line: 545, column: 5 } },
                    { start: { line: 538, column: 4 }, end: { line: 545, column: 5 } }
                  ],
                  line: 538
                },
                '49': {
                  loc: { start: { line: 538, column: 8 }, end: { line: 538, column: 38 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 538, column: 8 }, end: { line: 538, column: 21 } },
                    { start: { line: 538, column: 25 }, end: { line: 538, column: 38 } }
                  ],
                  line: 538
                },
                '50': {
                  loc: { start: { line: 540, column: 11 }, end: { line: 545, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 540, column: 11 }, end: { line: 545, column: 5 } },
                    { start: { line: 540, column: 11 }, end: { line: 545, column: 5 } }
                  ],
                  line: 540
                },
                '51': {
                  loc: { start: { line: 633, column: 2 }, end: { line: 635, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 633, column: 2 }, end: { line: 635, column: 3 } },
                    { start: { line: 633, column: 2 }, end: { line: 635, column: 3 } }
                  ],
                  line: 633
                },
                '52': {
                  loc: { start: { line: 636, column: 2 }, end: { line: 638, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 636, column: 2 }, end: { line: 638, column: 3 } },
                    { start: { line: 636, column: 2 }, end: { line: 638, column: 3 } }
                  ],
                  line: 636
                },
                '53': {
                  loc: { start: { line: 639, column: 2 }, end: { line: 641, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 639, column: 2 }, end: { line: 641, column: 3 } },
                    { start: { line: 639, column: 2 }, end: { line: 641, column: 3 } }
                  ],
                  line: 639
                },
                '54': {
                  loc: { start: { line: 642, column: 2 }, end: { line: 644, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 642, column: 2 }, end: { line: 644, column: 3 } },
                    { start: { line: 642, column: 2 }, end: { line: 644, column: 3 } }
                  ],
                  line: 642
                },
                '55': {
                  loc: { start: { line: 645, column: 2 }, end: { line: 647, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 645, column: 2 }, end: { line: 647, column: 3 } },
                    { start: { line: 645, column: 2 }, end: { line: 647, column: 3 } }
                  ],
                  line: 645
                },
                '56': {
                  loc: { start: { line: 650, column: 2 }, end: { line: 662, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 650, column: 2 }, end: { line: 662, column: 3 } },
                    { start: { line: 650, column: 2 }, end: { line: 662, column: 3 } }
                  ],
                  line: 650
                },
                '57': {
                  loc: { start: { line: 653, column: 4 }, end: { line: 660, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 653, column: 4 }, end: { line: 660, column: 5 } },
                    { start: { line: 653, column: 4 }, end: { line: 660, column: 5 } }
                  ],
                  line: 653
                },
                '58': {
                  loc: { start: { line: 653, column: 8 }, end: { line: 653, column: 38 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 653, column: 8 }, end: { line: 653, column: 21 } },
                    { start: { line: 653, column: 25 }, end: { line: 653, column: 38 } }
                  ],
                  line: 653
                },
                '59': {
                  loc: { start: { line: 655, column: 11 }, end: { line: 660, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 655, column: 11 }, end: { line: 660, column: 5 } },
                    { start: { line: 655, column: 11 }, end: { line: 660, column: 5 } }
                  ],
                  line: 655
                },
                '60': {
                  loc: { start: { line: 747, column: 2 }, end: { line: 749, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 747, column: 2 }, end: { line: 749, column: 3 } },
                    { start: { line: 747, column: 2 }, end: { line: 749, column: 3 } }
                  ],
                  line: 747
                },
                '61': {
                  loc: { start: { line: 750, column: 2 }, end: { line: 752, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 750, column: 2 }, end: { line: 752, column: 3 } },
                    { start: { line: 750, column: 2 }, end: { line: 752, column: 3 } }
                  ],
                  line: 750
                },
                '62': {
                  loc: { start: { line: 753, column: 2 }, end: { line: 755, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 753, column: 2 }, end: { line: 755, column: 3 } },
                    { start: { line: 753, column: 2 }, end: { line: 755, column: 3 } }
                  ],
                  line: 753
                },
                '63': {
                  loc: { start: { line: 757, column: 2 }, end: { line: 759, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 757, column: 2 }, end: { line: 759, column: 3 } },
                    { start: { line: 757, column: 2 }, end: { line: 759, column: 3 } }
                  ],
                  line: 757
                },
                '64': {
                  loc: { start: { line: 760, column: 2 }, end: { line: 762, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 760, column: 2 }, end: { line: 762, column: 3 } },
                    { start: { line: 760, column: 2 }, end: { line: 762, column: 3 } }
                  ],
                  line: 760
                },
                '65': {
                  loc: { start: { line: 766, column: 2 }, end: { line: 797, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 766, column: 2 }, end: { line: 797, column: 3 } },
                    { start: { line: 766, column: 2 }, end: { line: 797, column: 3 } }
                  ],
                  line: 766
                },
                '66': {
                  loc: { start: { line: 788, column: 4 }, end: { line: 795, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 788, column: 4 }, end: { line: 795, column: 5 } },
                    { start: { line: 788, column: 4 }, end: { line: 795, column: 5 } }
                  ],
                  line: 788
                },
                '67': {
                  loc: { start: { line: 788, column: 8 }, end: { line: 788, column: 38 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 788, column: 8 }, end: { line: 788, column: 21 } },
                    { start: { line: 788, column: 25 }, end: { line: 788, column: 38 } }
                  ],
                  line: 788
                },
                '68': {
                  loc: { start: { line: 790, column: 11 }, end: { line: 795, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 790, column: 11 }, end: { line: 795, column: 5 } },
                    { start: { line: 790, column: 11 }, end: { line: 795, column: 5 } }
                  ],
                  line: 790
                },
                '69': {
                  loc: { start: { line: 883, column: 2 }, end: { line: 887, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 883, column: 2 }, end: { line: 887, column: 3 } },
                    { start: { line: 883, column: 2 }, end: { line: 887, column: 3 } }
                  ],
                  line: 883
                },
                '70': {
                  loc: { start: { line: 885, column: 9 }, end: { line: 887, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 885, column: 9 }, end: { line: 887, column: 3 } },
                    { start: { line: 885, column: 9 }, end: { line: 887, column: 3 } }
                  ],
                  line: 885
                },
                '71': {
                  loc: { start: { line: 889, column: 2 }, end: { line: 893, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 889, column: 2 }, end: { line: 893, column: 3 } },
                    { start: { line: 889, column: 2 }, end: { line: 893, column: 3 } }
                  ],
                  line: 889
                },
                '72': {
                  loc: { start: { line: 891, column: 9 }, end: { line: 893, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 891, column: 9 }, end: { line: 893, column: 3 } },
                    { start: { line: 891, column: 9 }, end: { line: 893, column: 3 } }
                  ],
                  line: 891
                },
                '73': {
                  loc: { start: { line: 895, column: 2 }, end: { line: 897, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 895, column: 2 }, end: { line: 897, column: 3 } },
                    { start: { line: 895, column: 2 }, end: { line: 897, column: 3 } }
                  ],
                  line: 895
                },
                '74': {
                  loc: { start: { line: 898, column: 2 }, end: { line: 900, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 898, column: 2 }, end: { line: 900, column: 3 } },
                    { start: { line: 898, column: 2 }, end: { line: 900, column: 3 } }
                  ],
                  line: 898
                },
                '75': {
                  loc: { start: { line: 905, column: 2 }, end: { line: 945, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 905, column: 2 }, end: { line: 945, column: 3 } },
                    { start: { line: 905, column: 2 }, end: { line: 945, column: 3 } }
                  ],
                  line: 905
                },
                '76': {
                  loc: { start: { line: 936, column: 4 }, end: { line: 943, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 936, column: 4 }, end: { line: 943, column: 5 } },
                    { start: { line: 936, column: 4 }, end: { line: 943, column: 5 } }
                  ],
                  line: 936
                },
                '77': {
                  loc: { start: { line: 936, column: 8 }, end: { line: 936, column: 38 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 936, column: 8 }, end: { line: 936, column: 21 } },
                    { start: { line: 936, column: 25 }, end: { line: 936, column: 38 } }
                  ],
                  line: 936
                },
                '78': {
                  loc: { start: { line: 938, column: 11 }, end: { line: 943, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 938, column: 11 }, end: { line: 943, column: 5 } },
                    { start: { line: 938, column: 11 }, end: { line: 943, column: 5 } }
                  ],
                  line: 938
                },
                '79': {
                  loc: { start: { line: 988, column: 2 }, end: { line: 990, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 988, column: 2 }, end: { line: 990, column: 3 } },
                    { start: { line: 988, column: 2 }, end: { line: 990, column: 3 } }
                  ],
                  line: 988
                },
                '80': {
                  loc: { start: { line: 1008, column: 2 }, end: { line: 1023, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1008, column: 2 }, end: { line: 1023, column: 3 } },
                    { start: { line: 1008, column: 2 }, end: { line: 1023, column: 3 } }
                  ],
                  line: 1008
                },
                '81': {
                  loc: {
                    start: { line: 1072, column: 17 },
                    end: { line: 1072, column: 35 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1072, column: 17 }, end: { line: 1072, column: 29 } },
                    { start: { line: 1072, column: 33 }, end: { line: 1072, column: 35 } }
                  ],
                  line: 1072
                },
                '82': {
                  loc: { start: { line: 1078, column: 2 }, end: { line: 1084, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1078, column: 2 }, end: { line: 1084, column: 3 } },
                    { start: { line: 1078, column: 2 }, end: { line: 1084, column: 3 } }
                  ],
                  line: 1078
                },
                '83': {
                  loc: { start: { line: 1086, column: 2 }, end: { line: 1166, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1086, column: 2 }, end: { line: 1166, column: 3 } },
                    { start: { line: 1086, column: 2 }, end: { line: 1166, column: 3 } }
                  ],
                  line: 1086
                },
                '84': {
                  loc: { start: { line: 1091, column: 6 }, end: { line: 1151, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1091, column: 6 }, end: { line: 1151, column: 7 } },
                    { start: { line: 1091, column: 6 }, end: { line: 1151, column: 7 } }
                  ],
                  line: 1091
                },
                '85': {
                  loc: { start: { line: 1093, column: 8 }, end: { line: 1096, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1093, column: 8 }, end: { line: 1096, column: 9 } },
                    { start: { line: 1093, column: 8 }, end: { line: 1096, column: 9 } }
                  ],
                  line: 1093
                },
                '86': {
                  loc: {
                    start: { line: 1093, column: 12 },
                    end: { line: 1093, column: 65 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1093, column: 12 }, end: { line: 1093, column: 34 } },
                    { start: { line: 1093, column: 38 }, end: { line: 1093, column: 65 } }
                  ],
                  line: 1093
                },
                '87': {
                  loc: {
                    start: { line: 1109, column: 10 },
                    end: { line: 1112, column: 11 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1109, column: 10 }, end: { line: 1112, column: 11 } },
                    { start: { line: 1109, column: 10 }, end: { line: 1112, column: 11 } }
                  ],
                  line: 1109
                },
                '88': {
                  loc: { start: { line: 1116, column: 8 }, end: { line: 1150, column: 9 } },
                  type: 'switch',
                  locations: [
                    { start: { line: 1117, column: 10 }, end: { line: 1129, column: 18 } },
                    { start: { line: 1131, column: 10 }, end: { line: 1134, column: 18 } },
                    { start: { line: 1136, column: 10 }, end: { line: 1138, column: 18 } },
                    { start: { line: 1140, column: 10 }, end: { line: 1149, column: 15 } }
                  ],
                  line: 1116
                },
                '89': {
                  loc: { start: { line: 1157, column: 4 }, end: { line: 1163, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1157, column: 4 }, end: { line: 1163, column: 5 } },
                    { start: { line: 1157, column: 4 }, end: { line: 1163, column: 5 } }
                  ],
                  line: 1157
                },
                '90': {
                  loc: {
                    start: { line: 1159, column: 11 },
                    end: { line: 1163, column: 5 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1159, column: 11 }, end: { line: 1163, column: 5 } },
                    { start: { line: 1159, column: 11 }, end: { line: 1163, column: 5 } }
                  ],
                  line: 1159
                },
                '91': {
                  loc: {
                    start: { line: 1188, column: 18 },
                    end: { line: 1188, column: 56 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1188, column: 18 }, end: { line: 1188, column: 25 } },
                    { start: { line: 1188, column: 30 }, end: { line: 1188, column: 55 } }
                  ],
                  line: 1188
                },
                '92': {
                  loc: {
                    start: { line: 1188, column: 30 },
                    end: { line: 1188, column: 55 }
                  },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 1188, column: 49 }, end: { line: 1188, column: 50 } },
                    { start: { line: 1188, column: 53 }, end: { line: 1188, column: 55 } }
                  ],
                  line: 1188
                },
                '93': {
                  loc: {
                    start: { line: 1189, column: 18 },
                    end: { line: 1189, column: 56 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1189, column: 18 }, end: { line: 1189, column: 25 } },
                    { start: { line: 1189, column: 30 }, end: { line: 1189, column: 55 } }
                  ],
                  line: 1189
                },
                '94': {
                  loc: {
                    start: { line: 1189, column: 30 },
                    end: { line: 1189, column: 55 }
                  },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 1189, column: 49 }, end: { line: 1189, column: 50 } },
                    { start: { line: 1189, column: 53 }, end: { line: 1189, column: 55 } }
                  ],
                  line: 1189
                },
                '95': {
                  loc: { start: { line: 1191, column: 2 }, end: { line: 1219, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1191, column: 2 }, end: { line: 1219, column: 3 } },
                    { start: { line: 1191, column: 2 }, end: { line: 1219, column: 3 } }
                  ],
                  line: 1191
                },
                '96': {
                  loc: { start: { line: 1203, column: 6 }, end: { line: 1210, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1203, column: 6 }, end: { line: 1210, column: 7 } },
                    { start: { line: 1203, column: 6 }, end: { line: 1210, column: 7 } }
                  ],
                  line: 1203
                },
                '97': {
                  loc: {
                    start: { line: 1203, column: 10 },
                    end: { line: 1203, column: 36 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1203, column: 10 }, end: { line: 1203, column: 21 } },
                    { start: { line: 1203, column: 25 }, end: { line: 1203, column: 36 } }
                  ],
                  line: 1203
                },
                '98': {
                  loc: { start: { line: 1239, column: 2 }, end: { line: 1241, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1239, column: 2 }, end: { line: 1241, column: 3 } },
                    { start: { line: 1239, column: 2 }, end: { line: 1241, column: 3 } }
                  ],
                  line: 1239
                },
                '99': {
                  loc: { start: { line: 1242, column: 2 }, end: { line: 1244, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1242, column: 2 }, end: { line: 1244, column: 3 } },
                    { start: { line: 1242, column: 2 }, end: { line: 1244, column: 3 } }
                  ],
                  line: 1242
                },
                '100': {
                  loc: { start: { line: 1249, column: 2 }, end: { line: 1293, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1249, column: 2 }, end: { line: 1293, column: 3 } },
                    { start: { line: 1249, column: 2 }, end: { line: 1293, column: 3 } }
                  ],
                  line: 1249
                },
                '101': {
                  loc: { start: { line: 1315, column: 2 }, end: { line: 1323, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1315, column: 2 }, end: { line: 1323, column: 3 } },
                    { start: { line: 1315, column: 2 }, end: { line: 1323, column: 3 } }
                  ],
                  line: 1315
                },
                '102': {
                  loc: {
                    start: { line: 1324, column: 23 },
                    end: { line: 1324, column: 54 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1324, column: 23 }, end: { line: 1324, column: 48 } },
                    { start: { line: 1324, column: 52 }, end: { line: 1324, column: 54 } }
                  ],
                  line: 1324
                },
                '103': {
                  loc: { start: { line: 1356, column: 2 }, end: { line: 1364, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1356, column: 2 }, end: { line: 1364, column: 3 } },
                    { start: { line: 1356, column: 2 }, end: { line: 1364, column: 3 } }
                  ],
                  line: 1356
                },
                '104': {
                  loc: { start: { line: 1423, column: 2 }, end: { line: 1433, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1423, column: 2 }, end: { line: 1433, column: 3 } },
                    { start: { line: 1423, column: 2 }, end: { line: 1433, column: 3 } }
                  ],
                  line: 1423
                },
                '105': {
                  loc: { start: { line: 1428, column: 9 }, end: { line: 1433, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1428, column: 9 }, end: { line: 1433, column: 3 } },
                    { start: { line: 1428, column: 9 }, end: { line: 1433, column: 3 } }
                  ],
                  line: 1428
                },
                '106': {
                  loc: { start: { line: 1438, column: 2 }, end: { line: 1525, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1438, column: 2 }, end: { line: 1525, column: 3 } },
                    { start: { line: 1438, column: 2 }, end: { line: 1525, column: 3 } }
                  ],
                  line: 1438
                },
                '107': {
                  loc: { start: { line: 1449, column: 4 }, end: { line: 1472, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1449, column: 4 }, end: { line: 1472, column: 5 } },
                    { start: { line: 1449, column: 4 }, end: { line: 1472, column: 5 } }
                  ],
                  line: 1449
                },
                '108': {
                  loc: {
                    start: { line: 1450, column: 6 },
                    end: { line: 1451, column: 56 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1450, column: 6 }, end: { line: 1450, column: 42 } },
                    { start: { line: 1451, column: 6 }, end: { line: 1451, column: 56 } }
                  ],
                  line: 1450
                },
                '109': {
                  loc: { start: { line: 1462, column: 8 }, end: { line: 1467, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1462, column: 8 }, end: { line: 1467, column: 9 } },
                    { start: { line: 1462, column: 8 }, end: { line: 1467, column: 9 } }
                  ],
                  line: 1462
                },
                '110': {
                  loc: { start: { line: 1476, column: 4 }, end: { line: 1524, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1476, column: 4 }, end: { line: 1524, column: 5 } },
                    { start: { line: 1476, column: 4 }, end: { line: 1524, column: 5 } }
                  ],
                  line: 1476
                },
                '111': {
                  loc: {
                    start: { line: 1497, column: 11 },
                    end: { line: 1524, column: 5 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1497, column: 11 }, end: { line: 1524, column: 5 } },
                    { start: { line: 1497, column: 11 }, end: { line: 1524, column: 5 } }
                  ],
                  line: 1497
                },
                '112': {
                  loc: { start: { line: 1529, column: 2 }, end: { line: 1614, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1529, column: 2 }, end: { line: 1614, column: 3 } },
                    { start: { line: 1529, column: 2 }, end: { line: 1614, column: 3 } }
                  ],
                  line: 1529
                },
                '113': {
                  loc: { start: { line: 1540, column: 4 }, end: { line: 1563, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1540, column: 4 }, end: { line: 1563, column: 5 } },
                    { start: { line: 1540, column: 4 }, end: { line: 1563, column: 5 } }
                  ],
                  line: 1540
                },
                '114': {
                  loc: {
                    start: { line: 1541, column: 6 },
                    end: { line: 1542, column: 59 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1541, column: 6 }, end: { line: 1541, column: 45 } },
                    { start: { line: 1542, column: 6 }, end: { line: 1542, column: 59 } }
                  ],
                  line: 1541
                },
                '115': {
                  loc: { start: { line: 1553, column: 8 }, end: { line: 1558, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1553, column: 8 }, end: { line: 1558, column: 9 } },
                    { start: { line: 1553, column: 8 }, end: { line: 1558, column: 9 } }
                  ],
                  line: 1553
                },
                '116': {
                  loc: { start: { line: 1567, column: 4 }, end: { line: 1613, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1567, column: 4 }, end: { line: 1613, column: 5 } },
                    { start: { line: 1567, column: 4 }, end: { line: 1613, column: 5 } }
                  ],
                  line: 1567
                },
                '117': {
                  loc: {
                    start: { line: 1587, column: 11 },
                    end: { line: 1613, column: 5 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1587, column: 11 }, end: { line: 1613, column: 5 } },
                    { start: { line: 1587, column: 11 }, end: { line: 1613, column: 5 } }
                  ],
                  line: 1587
                },
                '118': {
                  loc: { start: { line: 1625, column: 2 }, end: { line: 1648, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1625, column: 2 }, end: { line: 1648, column: 3 } },
                    { start: { line: 1625, column: 2 }, end: { line: 1648, column: 3 } }
                  ],
                  line: 1625
                },
                '119': {
                  loc: {
                    start: { line: 1626, column: 4 },
                    end: { line: 1627, column: 54 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1626, column: 4 }, end: { line: 1626, column: 40 } },
                    { start: { line: 1627, column: 4 }, end: { line: 1627, column: 54 } }
                  ],
                  line: 1626
                },
                '120': {
                  loc: { start: { line: 1638, column: 6 }, end: { line: 1643, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1638, column: 6 }, end: { line: 1643, column: 7 } },
                    { start: { line: 1638, column: 6 }, end: { line: 1643, column: 7 } }
                  ],
                  line: 1638
                },
                '121': {
                  loc: { start: { line: 1652, column: 2 }, end: { line: 1732, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1652, column: 2 }, end: { line: 1732, column: 3 } },
                    { start: { line: 1652, column: 2 }, end: { line: 1732, column: 3 } }
                  ],
                  line: 1652
                },
                '122': {
                  loc: { start: { line: 1655, column: 4 }, end: { line: 1685, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1655, column: 4 }, end: { line: 1685, column: 5 } },
                    { start: { line: 1655, column: 4 }, end: { line: 1685, column: 5 } }
                  ],
                  line: 1655
                },
                '123': {
                  loc: { start: { line: 1686, column: 9 }, end: { line: 1732, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1686, column: 9 }, end: { line: 1732, column: 3 } },
                    { start: { line: 1686, column: 9 }, end: { line: 1732, column: 3 } }
                  ],
                  line: 1686
                },
                '124': {
                  loc: { start: { line: 1690, column: 4 }, end: { line: 1731, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1690, column: 4 }, end: { line: 1731, column: 5 } },
                    { start: { line: 1690, column: 4 }, end: { line: 1731, column: 5 } }
                  ],
                  line: 1690
                },
                '125': {
                  loc: { start: { line: 1746, column: 2 }, end: { line: 1748, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1746, column: 2 }, end: { line: 1748, column: 3 } },
                    { start: { line: 1746, column: 2 }, end: { line: 1748, column: 3 } }
                  ],
                  line: 1746
                },
                '126': {
                  loc: { start: { line: 1758, column: 2 }, end: { line: 1760, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1758, column: 2 }, end: { line: 1760, column: 3 } },
                    { start: { line: 1758, column: 2 }, end: { line: 1760, column: 3 } }
                  ],
                  line: 1758
                },
                '127': {
                  loc: { start: { line: 1763, column: 2 }, end: { line: 1765, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1763, column: 2 }, end: { line: 1765, column: 3 } },
                    { start: { line: 1763, column: 2 }, end: { line: 1765, column: 3 } }
                  ],
                  line: 1763
                },
                '128': {
                  loc: { start: { line: 1768, column: 2 }, end: { line: 1770, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1768, column: 2 }, end: { line: 1770, column: 3 } },
                    { start: { line: 1768, column: 2 }, end: { line: 1770, column: 3 } }
                  ],
                  line: 1768
                },
                '129': {
                  loc: { start: { line: 1773, column: 2 }, end: { line: 1775, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1773, column: 2 }, end: { line: 1775, column: 3 } },
                    { start: { line: 1773, column: 2 }, end: { line: 1775, column: 3 } }
                  ],
                  line: 1773
                },
                '130': {
                  loc: { start: { line: 1786, column: 2 }, end: { line: 1788, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1786, column: 2 }, end: { line: 1788, column: 3 } },
                    { start: { line: 1786, column: 2 }, end: { line: 1788, column: 3 } }
                  ],
                  line: 1786
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0,
                '118': 0,
                '119': 0,
                '120': 0,
                '121': 0,
                '122': 0,
                '123': 0,
                '124': 0,
                '125': 0,
                '126': 0,
                '127': 0,
                '128': 0,
                '129': 0,
                '130': 0,
                '131': 0,
                '132': 0,
                '133': 0,
                '134': 0,
                '135': 0,
                '136': 0,
                '137': 0,
                '138': 0,
                '139': 0,
                '140': 0,
                '141': 0,
                '142': 0,
                '143': 0,
                '144': 0,
                '145': 0,
                '146': 0,
                '147': 0,
                '148': 0,
                '149': 0,
                '150': 0,
                '151': 0,
                '152': 0,
                '153': 0,
                '154': 0,
                '155': 0,
                '156': 0,
                '157': 0,
                '158': 0,
                '159': 0,
                '160': 0,
                '161': 0,
                '162': 0,
                '163': 0,
                '164': 0,
                '165': 0,
                '166': 0,
                '167': 0,
                '168': 0,
                '169': 0,
                '170': 0,
                '171': 0,
                '172': 0,
                '173': 0,
                '174': 0,
                '175': 0,
                '176': 0,
                '177': 0,
                '178': 0,
                '179': 0,
                '180': 0,
                '181': 0,
                '182': 0,
                '183': 0,
                '184': 0,
                '185': 0,
                '186': 0,
                '187': 0,
                '188': 0,
                '189': 0,
                '190': 0,
                '191': 0,
                '192': 0,
                '193': 0,
                '194': 0,
                '195': 0,
                '196': 0,
                '197': 0,
                '198': 0,
                '199': 0,
                '200': 0,
                '201': 0,
                '202': 0,
                '203': 0,
                '204': 0,
                '205': 0,
                '206': 0,
                '207': 0,
                '208': 0,
                '209': 0,
                '210': 0,
                '211': 0,
                '212': 0,
                '213': 0,
                '214': 0,
                '215': 0,
                '216': 0,
                '217': 0,
                '218': 0,
                '219': 0,
                '220': 0,
                '221': 0,
                '222': 0,
                '223': 0,
                '224': 0,
                '225': 0,
                '226': 0,
                '227': 0,
                '228': 0,
                '229': 0,
                '230': 0,
                '231': 0,
                '232': 0,
                '233': 0,
                '234': 0,
                '235': 0,
                '236': 0,
                '237': 0,
                '238': 0,
                '239': 0,
                '240': 0,
                '241': 0,
                '242': 0,
                '243': 0,
                '244': 0,
                '245': 0,
                '246': 0,
                '247': 0,
                '248': 0,
                '249': 0,
                '250': 0,
                '251': 0,
                '252': 0,
                '253': 0,
                '254': 0,
                '255': 0,
                '256': 0,
                '257': 0,
                '258': 0,
                '259': 0,
                '260': 0,
                '261': 0,
                '262': 0,
                '263': 0,
                '264': 0,
                '265': 0,
                '266': 0,
                '267': 0,
                '268': 0,
                '269': 0,
                '270': 0,
                '271': 0,
                '272': 0,
                '273': 0,
                '274': 0,
                '275': 0,
                '276': 0,
                '277': 0,
                '278': 0,
                '279': 0,
                '280': 0,
                '281': 0,
                '282': 0,
                '283': 0,
                '284': 0,
                '285': 0,
                '286': 0,
                '287': 0,
                '288': 0,
                '289': 0,
                '290': 0,
                '291': 0,
                '292': 0,
                '293': 0,
                '294': 0,
                '295': 0,
                '296': 0,
                '297': 0,
                '298': 0,
                '299': 0,
                '300': 0,
                '301': 0,
                '302': 0,
                '303': 0,
                '304': 0,
                '305': 0,
                '306': 0,
                '307': 0,
                '308': 0,
                '309': 0,
                '310': 0,
                '311': 0,
                '312': 0,
                '313': 0,
                '314': 0,
                '315': 0,
                '316': 0,
                '317': 0,
                '318': 0,
                '319': 0,
                '320': 0,
                '321': 0,
                '322': 0,
                '323': 0,
                '324': 0,
                '325': 0,
                '326': 0,
                '327': 0,
                '328': 0,
                '329': 0,
                '330': 0,
                '331': 0,
                '332': 0,
                '333': 0,
                '334': 0,
                '335': 0,
                '336': 0,
                '337': 0,
                '338': 0,
                '339': 0,
                '340': 0,
                '341': 0,
                '342': 0,
                '343': 0,
                '344': 0,
                '345': 0,
                '346': 0,
                '347': 0,
                '348': 0,
                '349': 0,
                '350': 0,
                '351': 0,
                '352': 0,
                '353': 0,
                '354': 0,
                '355': 0,
                '356': 0,
                '357': 0,
                '358': 0,
                '359': 0,
                '360': 0,
                '361': 0,
                '362': 0,
                '363': 0,
                '364': 0,
                '365': 0,
                '366': 0,
                '367': 0,
                '368': 0,
                '369': 0,
                '370': 0,
                '371': 0,
                '372': 0,
                '373': 0,
                '374': 0,
                '375': 0,
                '376': 0,
                '377': 0,
                '378': 0,
                '379': 0,
                '380': 0,
                '381': 0,
                '382': 0,
                '383': 0,
                '384': 0,
                '385': 0,
                '386': 0,
                '387': 0,
                '388': 0,
                '389': 0,
                '390': 0,
                '391': 0,
                '392': 0,
                '393': 0,
                '394': 0,
                '395': 0,
                '396': 0,
                '397': 0,
                '398': 0,
                '399': 0,
                '400': 0,
                '401': 0,
                '402': 0,
                '403': 0,
                '404': 0,
                '405': 0,
                '406': 0,
                '407': 0,
                '408': 0,
                '409': 0,
                '410': 0,
                '411': 0,
                '412': 0,
                '413': 0,
                '414': 0,
                '415': 0,
                '416': 0,
                '417': 0,
                '418': 0,
                '419': 0,
                '420': 0,
                '421': 0,
                '422': 0,
                '423': 0,
                '424': 0,
                '425': 0,
                '426': 0,
                '427': 0,
                '428': 0,
                '429': 0,
                '430': 0,
                '431': 0,
                '432': 0,
                '433': 0,
                '434': 0,
                '435': 0,
                '436': 0,
                '437': 0,
                '438': 0,
                '439': 0,
                '440': 0,
                '441': 0,
                '442': 0,
                '443': 0,
                '444': 0,
                '445': 0,
                '446': 0,
                '447': 0,
                '448': 0,
                '449': 0,
                '450': 0,
                '451': 0,
                '452': 0,
                '453': 0,
                '454': 0,
                '455': 0,
                '456': 0,
                '457': 0,
                '458': 0,
                '459': 0,
                '460': 0,
                '461': 0,
                '462': 0,
                '463': 0,
                '464': 0,
                '465': 0,
                '466': 0,
                '467': 0,
                '468': 0,
                '469': 0,
                '470': 0,
                '471': 0,
                '472': 0,
                '473': 0,
                '474': 0,
                '475': 0,
                '476': 0,
                '477': 0,
                '478': 0,
                '479': 0,
                '480': 0,
                '481': 0,
                '482': 0,
                '483': 0,
                '484': 0,
                '485': 0,
                '486': 0,
                '487': 0,
                '488': 0,
                '489': 0,
                '490': 0,
                '491': 0,
                '492': 0,
                '493': 0,
                '494': 0,
                '495': 0,
                '496': 0,
                '497': 0,
                '498': 0,
                '499': 0,
                '500': 0,
                '501': 0,
                '502': 0,
                '503': 0,
                '504': 0,
                '505': 0,
                '506': 0,
                '507': 0,
                '508': 0,
                '509': 0,
                '510': 0,
                '511': 0,
                '512': 0,
                '513': 0,
                '514': 0,
                '515': 0,
                '516': 0,
                '517': 0,
                '518': 0,
                '519': 0,
                '520': 0,
                '521': 0,
                '522': 0,
                '523': 0,
                '524': 0,
                '525': 0,
                '526': 0,
                '527': 0,
                '528': 0,
                '529': 0,
                '530': 0,
                '531': 0,
                '532': 0,
                '533': 0,
                '534': 0,
                '535': 0,
                '536': 0,
                '537': 0,
                '538': 0,
                '539': 0,
                '540': 0,
                '541': 0,
                '542': 0,
                '543': 0,
                '544': 0,
                '545': 0,
                '546': 0,
                '547': 0,
                '548': 0,
                '549': 0,
                '550': 0,
                '551': 0,
                '552': 0,
                '553': 0,
                '554': 0,
                '555': 0,
                '556': 0,
                '557': 0,
                '558': 0,
                '559': 0,
                '560': 0,
                '561': 0,
                '562': 0,
                '563': 0,
                '564': 0,
                '565': 0,
                '566': 0,
                '567': 0,
                '568': 0,
                '569': 0,
                '570': 0,
                '571': 0,
                '572': 0,
                '573': 0,
                '574': 0,
                '575': 0,
                '576': 0,
                '577': 0,
                '578': 0,
                '579': 0,
                '580': 0,
                '581': 0,
                '582': 0,
                '583': 0,
                '584': 0,
                '585': 0,
                '586': 0,
                '587': 0,
                '588': 0,
                '589': 0,
                '590': 0,
                '591': 0,
                '592': 0,
                '593': 0,
                '594': 0,
                '595': 0,
                '596': 0,
                '597': 0,
                '598': 0,
                '599': 0,
                '600': 0,
                '601': 0,
                '602': 0,
                '603': 0,
                '604': 0,
                '605': 0,
                '606': 0,
                '607': 0,
                '608': 0,
                '609': 0,
                '610': 0,
                '611': 0,
                '612': 0,
                '613': 0,
                '614': 0,
                '615': 0,
                '616': 0,
                '617': 0,
                '618': 0,
                '619': 0,
                '620': 0,
                '621': 0,
                '622': 0,
                '623': 0,
                '624': 0,
                '625': 0,
                '626': 0,
                '627': 0,
                '628': 0,
                '629': 0,
                '630': 0,
                '631': 0,
                '632': 0,
                '633': 0,
                '634': 0,
                '635': 0,
                '636': 0,
                '637': 0,
                '638': 0,
                '639': 0,
                '640': 0,
                '641': 0,
                '642': 0,
                '643': 0,
                '644': 0,
                '645': 0,
                '646': 0,
                '647': 0,
                '648': 0,
                '649': 0,
                '650': 0,
                '651': 0,
                '652': 0,
                '653': 0,
                '654': 0,
                '655': 0,
                '656': 0,
                '657': 0,
                '658': 0,
                '659': 0,
                '660': 0,
                '661': 0,
                '662': 0,
                '663': 0,
                '664': 0,
                '665': 0,
                '666': 0,
                '667': 0,
                '668': 0,
                '669': 0,
                '670': 0,
                '671': 0,
                '672': 0,
                '673': 0,
                '674': 0,
                '675': 0,
                '676': 0,
                '677': 0,
                '678': 0,
                '679': 0,
                '680': 0,
                '681': 0,
                '682': 0,
                '683': 0,
                '684': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0],
                '20': [0, 0],
                '21': [0, 0],
                '22': [0, 0],
                '23': [0, 0],
                '24': [0, 0],
                '25': [0, 0],
                '26': [0, 0],
                '27': [0, 0],
                '28': [0, 0],
                '29': [0, 0],
                '30': [0, 0],
                '31': [0, 0],
                '32': [0, 0],
                '33': [0, 0],
                '34': [0, 0],
                '35': [0, 0],
                '36': [0, 0],
                '37': [0, 0],
                '38': [0, 0],
                '39': [0, 0],
                '40': [0, 0],
                '41': [0, 0],
                '42': [0, 0],
                '43': [0, 0],
                '44': [0, 0],
                '45': [0, 0],
                '46': [0, 0],
                '47': [0, 0],
                '48': [0, 0],
                '49': [0, 0],
                '50': [0, 0],
                '51': [0, 0],
                '52': [0, 0],
                '53': [0, 0],
                '54': [0, 0],
                '55': [0, 0],
                '56': [0, 0],
                '57': [0, 0],
                '58': [0, 0],
                '59': [0, 0],
                '60': [0, 0],
                '61': [0, 0],
                '62': [0, 0],
                '63': [0, 0],
                '64': [0, 0],
                '65': [0, 0],
                '66': [0, 0],
                '67': [0, 0],
                '68': [0, 0],
                '69': [0, 0],
                '70': [0, 0],
                '71': [0, 0],
                '72': [0, 0],
                '73': [0, 0],
                '74': [0, 0],
                '75': [0, 0],
                '76': [0, 0],
                '77': [0, 0],
                '78': [0, 0],
                '79': [0, 0],
                '80': [0, 0],
                '81': [0, 0],
                '82': [0, 0],
                '83': [0, 0],
                '84': [0, 0],
                '85': [0, 0],
                '86': [0, 0],
                '87': [0, 0],
                '88': [0, 0, 0, 0],
                '89': [0, 0],
                '90': [0, 0],
                '91': [0, 0],
                '92': [0, 0],
                '93': [0, 0],
                '94': [0, 0],
                '95': [0, 0],
                '96': [0, 0],
                '97': [0, 0],
                '98': [0, 0],
                '99': [0, 0],
                '100': [0, 0],
                '101': [0, 0],
                '102': [0, 0],
                '103': [0, 0],
                '104': [0, 0],
                '105': [0, 0],
                '106': [0, 0],
                '107': [0, 0],
                '108': [0, 0],
                '109': [0, 0],
                '110': [0, 0],
                '111': [0, 0],
                '112': [0, 0],
                '113': [0, 0],
                '114': [0, 0],
                '115': [0, 0],
                '116': [0, 0],
                '117': [0, 0],
                '118': [0, 0],
                '119': [0, 0],
                '120': [0, 0],
                '121': [0, 0],
                '122': [0, 0],
                '123': [0, 0],
                '124': [0, 0],
                '125': [0, 0],
                '126': [0, 0],
                '127': [0, 0],
                '128': [0, 0],
                '129': [0, 0],
                '130': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: 'b9294e65ff039519ae22e04b3a3d8d195c07f3a5'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.concat');
          _dereq_('core-js/modules/es.number.to-fixed');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          _dereq_('./p5.Geometry');
          var constants = _interopRequireWildcard(_dereq_('../core/constants'));
          function _getRequireWildcardCache() {
            if (typeof WeakMap !== 'function') return null;
            var cache = new WeakMap();
            _getRequireWildcardCache = function _getRequireWildcardCache() {
              return cache;
            };
            return cache;
          }
          function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
              return obj;
            }
            if (obj === null || (_typeof(obj) !== 'object' && typeof obj !== 'function')) {
              return { default: obj };
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
              return cache.get(obj);
            }
            var newObj = {};
            var hasPropertyDescriptor =
              Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
              if (Object.prototype.hasOwnProperty.call(obj, key)) {
                var desc = hasPropertyDescriptor
                  ? Object.getOwnPropertyDescriptor(obj, key)
                  : null;
                if (desc && (desc.get || desc.set)) {
                  Object.defineProperty(newObj, key, desc);
                } else {
                  newObj[key] = obj[key];
                }
              }
            }
            newObj.default = obj;
            if (cache) {
              cache.set(obj, newObj);
            }
            return newObj;
          }
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_2r7v3rpmrq.s[0]++;

          /**
           * Draw a plane with given a width and height
           * @method plane
           * @param  {Number} [width]    width of the plane
           * @param  {Number} [height]   height of the plane
           * @param  {Integer} [detailX]  Optional number of triangle
           *                             subdivisions in x-dimension
           * @param {Integer} [detailY]   Optional number of triangle
           *                             subdivisions in y-dimension
           * @chainable
           * @example
           * <div>
           * <code>
           * // draw a plane
           * // with width 50 and height 50
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           *
           * function draw() {
           *   background(200);
           *   plane(50, 50);
           * }
           * </code>
           * </div>
           *
           * @alt
           * Nothing displayed on canvas
           * Rotating interior view of a box with sides that change color.
           * 3d red and green gradient.
           * Rotating interior view of a cylinder with sides that change color.
           * Rotating view of a cylinder with sides that change color.
           * 3d red and green gradient.
           * rotating view of a multi-colored cylinder with concave sides.
           */
          _main.default.prototype.plane = function(width, height, detailX, detailY) {
            cov_2r7v3rpmrq.f[0]++;
            cov_2r7v3rpmrq.s[1]++;
            this._assert3d('plane');
            cov_2r7v3rpmrq.s[2]++;
            _main.default._validateParameters('plane', arguments);
            cov_2r7v3rpmrq.s[3]++;
            if (typeof width === 'undefined') {
              cov_2r7v3rpmrq.b[0][0]++;
              cov_2r7v3rpmrq.s[4]++;
              width = 50;
            } else {
              cov_2r7v3rpmrq.b[0][1]++;
            }
            cov_2r7v3rpmrq.s[5]++;
            if (typeof height === 'undefined') {
              cov_2r7v3rpmrq.b[1][0]++;
              cov_2r7v3rpmrq.s[6]++;
              height = width;
            } else {
              cov_2r7v3rpmrq.b[1][1]++;
            }
            cov_2r7v3rpmrq.s[7]++;

            if (typeof detailX === 'undefined') {
              cov_2r7v3rpmrq.b[2][0]++;
              cov_2r7v3rpmrq.s[8]++;
              detailX = 1;
            } else {
              cov_2r7v3rpmrq.b[2][1]++;
            }
            cov_2r7v3rpmrq.s[9]++;
            if (typeof detailY === 'undefined') {
              cov_2r7v3rpmrq.b[3][0]++;
              cov_2r7v3rpmrq.s[10]++;
              detailY = 1;
            } else {
              cov_2r7v3rpmrq.b[3][1]++;
            }

            var gId = (cov_2r7v3rpmrq.s[11]++,
            'plane|'.concat(detailX, '|').concat(detailY));
            cov_2r7v3rpmrq.s[12]++;

            if (!this._renderer.geometryInHash(gId)) {
              cov_2r7v3rpmrq.b[4][0]++;
              cov_2r7v3rpmrq.s[13]++;
              var _plane = function _plane() {
                cov_2r7v3rpmrq.f[1]++;
                var u, v, p;
                cov_2r7v3rpmrq.s[14]++;
                for (var i = (cov_2r7v3rpmrq.s[15]++, 0); i <= this.detailY; i++) {
                  cov_2r7v3rpmrq.s[16]++;
                  v = i / this.detailY;
                  cov_2r7v3rpmrq.s[17]++;
                  for (var j = (cov_2r7v3rpmrq.s[18]++, 0); j <= this.detailX; j++) {
                    cov_2r7v3rpmrq.s[19]++;
                    u = j / this.detailX;
                    cov_2r7v3rpmrq.s[20]++;
                    p = new _main.default.Vector(u - 0.5, v - 0.5, 0);
                    cov_2r7v3rpmrq.s[21]++;
                    this.vertices.push(p);
                    cov_2r7v3rpmrq.s[22]++;
                    this.uvs.push(u, v);
                  }
                }
              };
              var planeGeom = (cov_2r7v3rpmrq.s[23]++,
              new _main.default.Geometry(detailX, detailY, _plane));
              cov_2r7v3rpmrq.s[24]++;
              planeGeom.computeFaces().computeNormals();
              cov_2r7v3rpmrq.s[25]++;
              if (
                (cov_2r7v3rpmrq.b[6][0]++, detailX <= 1) &&
                (cov_2r7v3rpmrq.b[6][1]++, detailY <= 1)
              ) {
                cov_2r7v3rpmrq.b[5][0]++;
                cov_2r7v3rpmrq.s[26]++;
                planeGeom._makeTriangleEdges()._edgesToVertices();
              } else {
                cov_2r7v3rpmrq.b[5][1]++;
                cov_2r7v3rpmrq.s[27]++;
                if (this._renderer._doStroke) {
                  cov_2r7v3rpmrq.b[7][0]++;
                  cov_2r7v3rpmrq.s[28]++;
                  console.log(
                    'Cannot draw stroke on plane objects with more' +
                      ' than 1 detailX or 1 detailY'
                  );
                } else {
                  cov_2r7v3rpmrq.b[7][1]++;
                }
              }
              cov_2r7v3rpmrq.s[29]++;
              this._renderer.createBuffers(gId, planeGeom);
            } else {
              cov_2r7v3rpmrq.b[4][1]++;
            }
            cov_2r7v3rpmrq.s[30]++;

            this._renderer.drawBuffersScaled(gId, width, height, 1);
            cov_2r7v3rpmrq.s[31]++;
            return this;
          };

          /**
           * Draw a box with given width, height and depth
           * @method  box
           * @param  {Number} [width]     width of the box
           * @param  {Number} [Height]    height of the box
           * @param  {Number} [depth]     depth of the box
           * @param {Integer} [detailX]  Optional number of triangle
           *                            subdivisions in x-dimension
           * @param {Integer} [detailY]  Optional number of triangle
           *                            subdivisions in y-dimension
           * @chainable
           * @example
           * <div>
           * <code>
           * // draw a spinning box
           * // with width, height and depth of 50
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           *
           * function draw() {
           *   background(200);
           *   rotateX(frameCount * 0.01);
           *   rotateY(frameCount * 0.01);
           *   box(50);
           * }
           * </code>
           * </div>
           */ cov_2r7v3rpmrq.s[32]++;
          _main.default.prototype.box = function(width, height, depth, detailX, detailY) {
            cov_2r7v3rpmrq.f[2]++;
            cov_2r7v3rpmrq.s[33]++;
            this._assert3d('box');
            cov_2r7v3rpmrq.s[34]++;
            _main.default._validateParameters('box', arguments);
            cov_2r7v3rpmrq.s[35]++;
            if (typeof width === 'undefined') {
              cov_2r7v3rpmrq.b[8][0]++;
              cov_2r7v3rpmrq.s[36]++;
              width = 50;
            } else {
              cov_2r7v3rpmrq.b[8][1]++;
            }
            cov_2r7v3rpmrq.s[37]++;
            if (typeof height === 'undefined') {
              cov_2r7v3rpmrq.b[9][0]++;
              cov_2r7v3rpmrq.s[38]++;
              height = width;
            } else {
              cov_2r7v3rpmrq.b[9][1]++;
            }
            cov_2r7v3rpmrq.s[39]++;
            if (typeof depth === 'undefined') {
              cov_2r7v3rpmrq.b[10][0]++;
              cov_2r7v3rpmrq.s[40]++;
              depth = height;
            } else {
              cov_2r7v3rpmrq.b[10][1]++;
            }

            var perPixelLighting = (cov_2r7v3rpmrq.s[41]++,
            (cov_2r7v3rpmrq.b[11][0]++, this._renderer.attributes) &&
              (cov_2r7v3rpmrq.b[11][1]++, this._renderer.attributes.perPixelLighting));
            cov_2r7v3rpmrq.s[42]++;
            if (typeof detailX === 'undefined') {
              cov_2r7v3rpmrq.b[12][0]++;
              cov_2r7v3rpmrq.s[43]++;
              detailX = perPixelLighting
                ? (cov_2r7v3rpmrq.b[13][0]++, 1)
                : (cov_2r7v3rpmrq.b[13][1]++, 4);
            } else {
              cov_2r7v3rpmrq.b[12][1]++;
            }
            cov_2r7v3rpmrq.s[44]++;
            if (typeof detailY === 'undefined') {
              cov_2r7v3rpmrq.b[14][0]++;
              cov_2r7v3rpmrq.s[45]++;
              detailY = perPixelLighting
                ? (cov_2r7v3rpmrq.b[15][0]++, 1)
                : (cov_2r7v3rpmrq.b[15][1]++, 4);
            } else {
              cov_2r7v3rpmrq.b[14][1]++;
            }

            var gId = (cov_2r7v3rpmrq.s[46]++, 'box|'.concat(detailX, '|').concat(detailY));
            cov_2r7v3rpmrq.s[47]++;
            if (!this._renderer.geometryInHash(gId)) {
              cov_2r7v3rpmrq.b[16][0]++;
              cov_2r7v3rpmrq.s[48]++;
              var _box = function _box() {
                cov_2r7v3rpmrq.f[3]++;
                var cubeIndices = (cov_2r7v3rpmrq.s[49]++,
                [
                  [0, 4, 2, 6], // -1, 0, 0],// -x
                  [1, 3, 5, 7], // +1, 0, 0],// +x
                  [0, 1, 4, 5], // 0, -1, 0],// -y
                  [2, 6, 3, 7], // 0, +1, 0],// +y
                  [0, 2, 1, 3], // 0, 0, -1],// -z
                  [4, 5, 6, 7] // 0, 0, +1] // +z
                ]);
                //using strokeIndices instead of faces for strokes
                //to avoid diagonal stroke lines across face of box
                cov_2r7v3rpmrq.s[50]++;
                this.strokeIndices = [
                  [0, 1],
                  [1, 3],
                  [3, 2],
                  [6, 7],
                  [8, 9],
                  [9, 11],
                  [14, 15],
                  [16, 17],
                  [17, 19],
                  [18, 19],
                  [20, 21],
                  [22, 23]
                ];
                cov_2r7v3rpmrq.s[51]++;

                for (var i = (cov_2r7v3rpmrq.s[52]++, 0); i < cubeIndices.length; i++) {
                  var cubeIndex = (cov_2r7v3rpmrq.s[53]++, cubeIndices[i]);
                  var v = (cov_2r7v3rpmrq.s[54]++, i * 4);
                  cov_2r7v3rpmrq.s[55]++;
                  for (var j = (cov_2r7v3rpmrq.s[56]++, 0); j < 4; j++) {
                    var d = (cov_2r7v3rpmrq.s[57]++, cubeIndex[j]);
                    //inspired by lightgl:
                    //https://github.com/evanw/lightgl.js
                    //octants:https://en.wikipedia.org/wiki/Octant_(solid_geometry)
                    var octant = (cov_2r7v3rpmrq.s[58]++,
                    new _main.default.Vector(
                      ((d & 1) * 2 - 1) / 2,
                      ((d & 2) - 1) / 2,
                      ((d & 4) / 2 - 1) / 2
                    ));
                    cov_2r7v3rpmrq.s[59]++;

                    this.vertices.push(octant);
                    cov_2r7v3rpmrq.s[60]++;
                    this.uvs.push(j & 1, (j & 2) / 2);
                  }
                  cov_2r7v3rpmrq.s[61]++;
                  this.faces.push([v, v + 1, v + 2]);
                  cov_2r7v3rpmrq.s[62]++;
                  this.faces.push([v + 2, v + 1, v + 3]);
                }
              };
              var boxGeom = (cov_2r7v3rpmrq.s[63]++,
              new _main.default.Geometry(detailX, detailY, _box));
              cov_2r7v3rpmrq.s[64]++;
              boxGeom.computeNormals();
              cov_2r7v3rpmrq.s[65]++;
              if (
                (cov_2r7v3rpmrq.b[18][0]++, detailX <= 4) &&
                (cov_2r7v3rpmrq.b[18][1]++, detailY <= 4)
              ) {
                cov_2r7v3rpmrq.b[17][0]++;
                cov_2r7v3rpmrq.s[66]++;
                boxGeom._makeTriangleEdges()._edgesToVertices();
              } else {
                cov_2r7v3rpmrq.b[17][1]++;
                cov_2r7v3rpmrq.s[67]++;
                if (this._renderer._doStroke) {
                  cov_2r7v3rpmrq.b[19][0]++;
                  cov_2r7v3rpmrq.s[68]++;
                  console.log(
                    'Cannot draw stroke on box objects with more' +
                      ' than 4 detailX or 4 detailY'
                  );
                } else {
                  cov_2r7v3rpmrq.b[19][1]++;
                }
              }
              //initialize our geometry buffer with
              //the key val pair:
              //geometry Id, Geom object
              cov_2r7v3rpmrq.s[69]++;
              this._renderer.createBuffers(gId, boxGeom);
            } else {
              cov_2r7v3rpmrq.b[16][1]++;
            }
            cov_2r7v3rpmrq.s[70]++;
            this._renderer.drawBuffersScaled(gId, width, height, depth);
            cov_2r7v3rpmrq.s[71]++;

            return this;
          };

          /**
           * Draw a sphere with given radius.
           *
           * DetailX and detailY determines the number of subdivisions in the x-dimension
           * and the y-dimension of a sphere. More subdivisions make the sphere seem
           * smoother. The recommended maximum values are both 24. Using a value greater
           * than 24 may cause a warning or slow down the browser.
           * @method sphere
           * @param  {Number} [radius]          radius of circle
           * @param  {Integer} [detailX]        optional number of subdivisions in x-dimension
           * @param  {Integer} [detailY]        optional number of subdivisions in y-dimension
           *
           * @chainable
           * @example
           * <div>
           * <code>
           * // draw a sphere with radius 40
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           *
           * function draw() {
           *   background(205, 102, 94);
           *   sphere(40);
           * }
           * </code>
           * </div>
           *
           * @example
           * <div>
           * <code>
           * let detailX;
           * // slide to see how detailX works
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   detailX = createSlider(3, 24, 3);
           *   detailX.position(10, height + 5);
           *   detailX.style('width', '80px');
           * }
           *
           * function draw() {
           *   background(205, 105, 94);
           *   rotateY(millis() / 1000);
           *   sphere(40, detailX.value(), 16);
           * }
           * </code>
           * </div>
           *
           * @example
           * <div>
           * <code>
           * let detailY;
           * // slide to see how detailY works
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   detailY = createSlider(3, 16, 3);
           *   detailY.position(10, height + 5);
           *   detailY.style('width', '80px');
           * }
           *
           * function draw() {
           *   background(205, 105, 94);
           *   rotateY(millis() / 1000);
           *   sphere(40, 16, detailY.value());
           * }
           * </code>
           * </div>
           */ cov_2r7v3rpmrq.s[72]++;
          _main.default.prototype.sphere = function(radius, detailX, detailY) {
            cov_2r7v3rpmrq.f[4]++;
            cov_2r7v3rpmrq.s[73]++;
            this._assert3d('sphere');
            cov_2r7v3rpmrq.s[74]++;
            _main.default._validateParameters('sphere', arguments);
            cov_2r7v3rpmrq.s[75]++;
            if (typeof radius === 'undefined') {
              cov_2r7v3rpmrq.b[20][0]++;
              cov_2r7v3rpmrq.s[76]++;
              radius = 50;
            } else {
              cov_2r7v3rpmrq.b[20][1]++;
            }
            cov_2r7v3rpmrq.s[77]++;
            if (typeof detailX === 'undefined') {
              cov_2r7v3rpmrq.b[21][0]++;
              cov_2r7v3rpmrq.s[78]++;
              detailX = 24;
            } else {
              cov_2r7v3rpmrq.b[21][1]++;
            }
            cov_2r7v3rpmrq.s[79]++;
            if (typeof detailY === 'undefined') {
              cov_2r7v3rpmrq.b[22][0]++;
              cov_2r7v3rpmrq.s[80]++;
              detailY = 16;
            } else {
              cov_2r7v3rpmrq.b[22][1]++;
            }
            cov_2r7v3rpmrq.s[81]++;

            this.ellipsoid(radius, radius, radius, detailX, detailY);
            cov_2r7v3rpmrq.s[82]++;

            return this;
          };

          /**
           * @private
           * Helper function for creating both cones and cylinders
           * Will only generate well-defined geometry when bottomRadius, height > 0
           * and topRadius >= 0
           * If topRadius == 0, topCap should be false
           */ cov_2r7v3rpmrq.s[83]++;
          var _truncatedCone = function _truncatedCone(
            bottomRadius,
            topRadius,
            height,
            detailX,
            detailY,
            bottomCap,
            topCap
          ) {
            cov_2r7v3rpmrq.f[5]++;
            cov_2r7v3rpmrq.s[84]++;
            bottomRadius =
              bottomRadius <= 0
                ? (cov_2r7v3rpmrq.b[23][0]++, 1)
                : (cov_2r7v3rpmrq.b[23][1]++, bottomRadius);
            cov_2r7v3rpmrq.s[85]++;
            topRadius =
              topRadius < 0
                ? (cov_2r7v3rpmrq.b[24][0]++, 0)
                : (cov_2r7v3rpmrq.b[24][1]++, topRadius);
            cov_2r7v3rpmrq.s[86]++;
            height =
              height <= 0
                ? (cov_2r7v3rpmrq.b[25][0]++, bottomRadius)
                : (cov_2r7v3rpmrq.b[25][1]++, height);
            cov_2r7v3rpmrq.s[87]++;
            detailX =
              detailX < 3
                ? (cov_2r7v3rpmrq.b[26][0]++, 3)
                : (cov_2r7v3rpmrq.b[26][1]++, detailX);
            cov_2r7v3rpmrq.s[88]++;
            detailY =
              detailY < 1
                ? (cov_2r7v3rpmrq.b[27][0]++, 1)
                : (cov_2r7v3rpmrq.b[27][1]++, detailY);
            cov_2r7v3rpmrq.s[89]++;
            bottomCap =
              bottomCap === undefined
                ? (cov_2r7v3rpmrq.b[28][0]++, true)
                : (cov_2r7v3rpmrq.b[28][1]++, bottomCap);
            cov_2r7v3rpmrq.s[90]++;
            topCap =
              topCap === undefined
                ? (cov_2r7v3rpmrq.b[29][0]++, topRadius !== 0)
                : (cov_2r7v3rpmrq.b[29][1]++, topCap);
            var start = (cov_2r7v3rpmrq.s[91]++,
            bottomCap ? (cov_2r7v3rpmrq.b[30][0]++, -2) : (cov_2r7v3rpmrq.b[30][1]++, 0));
            var end = (cov_2r7v3rpmrq.s[92]++,
            detailY +
              (topCap ? (cov_2r7v3rpmrq.b[31][0]++, 2) : (cov_2r7v3rpmrq.b[31][1]++, 0)));
            //ensure constant slant for interior vertex normals
            var slant = (cov_2r7v3rpmrq.s[93]++,
            Math.atan2(bottomRadius - topRadius, height));
            var sinSlant = (cov_2r7v3rpmrq.s[94]++, Math.sin(slant));
            var cosSlant = (cov_2r7v3rpmrq.s[95]++, Math.cos(slant));
            var yy, ii, jj;
            cov_2r7v3rpmrq.s[96]++;
            for (yy = start; yy <= end; ++yy) {
              var v = (cov_2r7v3rpmrq.s[97]++, yy / detailY);
              var y = (cov_2r7v3rpmrq.s[98]++, height * v);
              var ringRadius = void 0;
              cov_2r7v3rpmrq.s[99]++;
              if (yy < 0) {
                cov_2r7v3rpmrq.b[32][0]++;
                cov_2r7v3rpmrq.s[100]++;
                //for the bottomCap edge
                y = 0;
                cov_2r7v3rpmrq.s[101]++;
                v = 0;
                cov_2r7v3rpmrq.s[102]++;
                ringRadius = bottomRadius;
              } else {
                cov_2r7v3rpmrq.b[32][1]++;
                cov_2r7v3rpmrq.s[103]++;
                if (yy > detailY) {
                  cov_2r7v3rpmrq.b[33][0]++;
                  cov_2r7v3rpmrq.s[104]++;
                  //for the topCap edge
                  y = height;
                  cov_2r7v3rpmrq.s[105]++;
                  v = 1;
                  cov_2r7v3rpmrq.s[106]++;
                  ringRadius = topRadius;
                } else {
                  cov_2r7v3rpmrq.b[33][1]++;
                  cov_2r7v3rpmrq.s[107]++;
                  //for the middle
                  ringRadius = bottomRadius + (topRadius - bottomRadius) * v;
                }
              }
              cov_2r7v3rpmrq.s[108]++;
              if (
                (cov_2r7v3rpmrq.b[35][0]++, yy === -2) ||
                (cov_2r7v3rpmrq.b[35][1]++, yy === detailY + 2)
              ) {
                cov_2r7v3rpmrq.b[34][0]++;
                cov_2r7v3rpmrq.s[109]++;
                //center of bottom or top caps
                ringRadius = 0;
              } else {
                cov_2r7v3rpmrq.b[34][1]++;
              }
              cov_2r7v3rpmrq.s[110]++;

              y -= height / 2; //shift coordiate origin to the center of object
              cov_2r7v3rpmrq.s[111]++;
              for (ii = 0; ii < detailX; ++ii) {
                var u = (cov_2r7v3rpmrq.s[112]++, ii / (detailX - 1));
                var ur = (cov_2r7v3rpmrq.s[113]++, 2 * Math.PI * u);
                var sur = (cov_2r7v3rpmrq.s[114]++, Math.sin(ur));
                var cur = (cov_2r7v3rpmrq.s[115]++, Math.cos(ur));

                //VERTICES
                cov_2r7v3rpmrq.s[116]++;
                this.vertices.push(
                  new _main.default.Vector(sur * ringRadius, y, cur * ringRadius)
                );

                //VERTEX NORMALS
                var vertexNormal = void 0;
                cov_2r7v3rpmrq.s[117]++;
                if (yy < 0) {
                  cov_2r7v3rpmrq.b[36][0]++;
                  cov_2r7v3rpmrq.s[118]++;
                  vertexNormal = new _main.default.Vector(0, -1, 0);
                } else {
                  cov_2r7v3rpmrq.b[36][1]++;
                  cov_2r7v3rpmrq.s[119]++;
                  if (
                    (cov_2r7v3rpmrq.b[38][0]++, yy > detailY) &&
                    (cov_2r7v3rpmrq.b[38][1]++, topRadius)
                  ) {
                    cov_2r7v3rpmrq.b[37][0]++;
                    cov_2r7v3rpmrq.s[120]++;
                    vertexNormal = new _main.default.Vector(0, 1, 0);
                  } else {
                    cov_2r7v3rpmrq.b[37][1]++;
                    cov_2r7v3rpmrq.s[121]++;
                    vertexNormal = new _main.default.Vector(
                      sur * cosSlant,
                      sinSlant,
                      cur * cosSlant
                    );
                  }
                }
                cov_2r7v3rpmrq.s[122]++;
                this.vertexNormals.push(vertexNormal);
                //UVs
                cov_2r7v3rpmrq.s[123]++;
                this.uvs.push(u, v);
              }
            }

            var startIndex = (cov_2r7v3rpmrq.s[124]++, 0);
            cov_2r7v3rpmrq.s[125]++;
            if (bottomCap) {
              cov_2r7v3rpmrq.b[39][0]++;
              cov_2r7v3rpmrq.s[126]++;
              for (jj = 0; jj < detailX; ++jj) {
                var nextjj = (cov_2r7v3rpmrq.s[127]++, (jj + 1) % detailX);
                cov_2r7v3rpmrq.s[128]++;
                this.faces.push([
                  startIndex + jj,
                  startIndex + detailX + nextjj,
                  startIndex + detailX + jj
                ]);
              }
              cov_2r7v3rpmrq.s[129]++;
              startIndex += detailX * 2;
            } else {
              cov_2r7v3rpmrq.b[39][1]++;
            }
            cov_2r7v3rpmrq.s[130]++;
            for (yy = 0; yy < detailY; ++yy) {
              cov_2r7v3rpmrq.s[131]++;
              for (ii = 0; ii < detailX; ++ii) {
                var nextii = (cov_2r7v3rpmrq.s[132]++, (ii + 1) % detailX);
                cov_2r7v3rpmrq.s[133]++;
                this.faces.push([
                  startIndex + ii,
                  startIndex + nextii,
                  startIndex + detailX + nextii
                ]);
                cov_2r7v3rpmrq.s[134]++;

                this.faces.push([
                  startIndex + ii,
                  startIndex + detailX + nextii,
                  startIndex + detailX + ii
                ]);
              }
              cov_2r7v3rpmrq.s[135]++;
              startIndex += detailX;
            }
            cov_2r7v3rpmrq.s[136]++;
            if (topCap) {
              cov_2r7v3rpmrq.b[40][0]++;
              cov_2r7v3rpmrq.s[137]++;
              startIndex += detailX;
              cov_2r7v3rpmrq.s[138]++;
              for (ii = 0; ii < detailX; ++ii) {
                cov_2r7v3rpmrq.s[139]++;
                this.faces.push([
                  startIndex + ii,
                  startIndex + (ii + 1) % detailX,
                  startIndex + detailX
                ]);
              }
            } else {
              cov_2r7v3rpmrq.b[40][1]++;
            }
          };

          /**
           * Draw a cylinder with given radius and height
           *
           * DetailX and detailY determines the number of subdivisions in the x-dimension
           * and the y-dimension of a cylinder. More subdivisions make the cylinder seem smoother.
           * The recommended maximum value for detailX is 24. Using a value greater than 24
           * may cause a warning or slow down the browser.
           *
           * @method cylinder
           * @param  {Number}  [radius]    radius of the surface
           * @param  {Number}  [height]    height of the cylinder
           * @param  {Integer} [detailX]   number of subdivisions in x-dimension;
           *                               default is 24
           * @param  {Integer} [detailY]   number of subdivisions in y-dimension;
           *                               default is 1
           * @param  {Boolean} [bottomCap] whether to draw the bottom of the cylinder
           * @param  {Boolean} [topCap]    whether to draw the top of the cylinder
           * @chainable
           * @example
           * <div>
           * <code>
           * // draw a spinning cylinder
           * // with radius 20 and height 50
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           *
           * function draw() {
           *   background(205, 105, 94);
           *   rotateX(frameCount * 0.01);
           *   rotateZ(frameCount * 0.01);
           *   cylinder(20, 50);
           * }
           * </code>
           * </div>
           *
           * @example
           * <div>
           * <code>
           * // slide to see how detailX works
           * let detailX;
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   detailX = createSlider(3, 24, 3);
           *   detailX.position(10, height + 5);
           *   detailX.style('width', '80px');
           * }
           *
           * function draw() {
           *   background(205, 105, 94);
           *   rotateY(millis() / 1000);
           *   cylinder(20, 75, detailX.value(), 1);
           * }
           * </code>
           * </div>
           *
           * @example
           * <div>
           * <code>
           * // slide to see how detailY works
           * let detailY;
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   detailY = createSlider(1, 16, 1);
           *   detailY.position(10, height + 5);
           *   detailY.style('width', '80px');
           * }
           *
           * function draw() {
           *   background(205, 105, 94);
           *   rotateY(millis() / 1000);
           *   cylinder(20, 75, 16, detailY.value());
           * }
           * </code>
           * </div>
           */ cov_2r7v3rpmrq.s[140]++;
          _main.default.prototype.cylinder = function(
            radius,
            height,
            detailX,
            detailY,
            bottomCap,
            topCap
          ) {
            cov_2r7v3rpmrq.f[6]++;
            cov_2r7v3rpmrq.s[141]++;
            this._assert3d('cylinder');
            cov_2r7v3rpmrq.s[142]++;
            _main.default._validateParameters('cylinder', arguments);
            cov_2r7v3rpmrq.s[143]++;
            if (typeof radius === 'undefined') {
              cov_2r7v3rpmrq.b[41][0]++;
              cov_2r7v3rpmrq.s[144]++;
              radius = 50;
            } else {
              cov_2r7v3rpmrq.b[41][1]++;
            }
            cov_2r7v3rpmrq.s[145]++;
            if (typeof height === 'undefined') {
              cov_2r7v3rpmrq.b[42][0]++;
              cov_2r7v3rpmrq.s[146]++;
              height = radius;
            } else {
              cov_2r7v3rpmrq.b[42][1]++;
            }
            cov_2r7v3rpmrq.s[147]++;
            if (typeof detailX === 'undefined') {
              cov_2r7v3rpmrq.b[43][0]++;
              cov_2r7v3rpmrq.s[148]++;
              detailX = 24;
            } else {
              cov_2r7v3rpmrq.b[43][1]++;
            }
            cov_2r7v3rpmrq.s[149]++;
            if (typeof detailY === 'undefined') {
              cov_2r7v3rpmrq.b[44][0]++;
              cov_2r7v3rpmrq.s[150]++;
              detailY = 1;
            } else {
              cov_2r7v3rpmrq.b[44][1]++;
            }
            cov_2r7v3rpmrq.s[151]++;
            if (typeof topCap === 'undefined') {
              cov_2r7v3rpmrq.b[45][0]++;
              cov_2r7v3rpmrq.s[152]++;
              topCap = true;
            } else {
              cov_2r7v3rpmrq.b[45][1]++;
            }
            cov_2r7v3rpmrq.s[153]++;
            if (typeof bottomCap === 'undefined') {
              cov_2r7v3rpmrq.b[46][0]++;
              cov_2r7v3rpmrq.s[154]++;
              bottomCap = true;
            } else {
              cov_2r7v3rpmrq.b[46][1]++;
            }

            var gId = (cov_2r7v3rpmrq.s[155]++,
            'cylinder|'
              .concat(detailX, '|')
              .concat(detailY, '|')
              .concat(bottomCap, '|')
              .concat(topCap));
            cov_2r7v3rpmrq.s[156]++;
            if (!this._renderer.geometryInHash(gId)) {
              cov_2r7v3rpmrq.b[47][0]++;
              var cylinderGeom = (cov_2r7v3rpmrq.s[157]++,
              new _main.default.Geometry(detailX, detailY));
              cov_2r7v3rpmrq.s[158]++;
              _truncatedCone.call(
                cylinderGeom,
                1,
                1,
                1,
                detailX,
                detailY,
                bottomCap,
                topCap
              );

              // normals are computed in call to _truncatedCone
              cov_2r7v3rpmrq.s[159]++;
              if (
                (cov_2r7v3rpmrq.b[49][0]++, detailX <= 24) &&
                (cov_2r7v3rpmrq.b[49][1]++, detailY <= 16)
              ) {
                cov_2r7v3rpmrq.b[48][0]++;
                cov_2r7v3rpmrq.s[160]++;
                cylinderGeom._makeTriangleEdges()._edgesToVertices();
              } else {
                cov_2r7v3rpmrq.b[48][1]++;
                cov_2r7v3rpmrq.s[161]++;
                if (this._renderer._doStroke) {
                  cov_2r7v3rpmrq.b[50][0]++;
                  cov_2r7v3rpmrq.s[162]++;
                  console.log(
                    'Cannot draw stroke on cylinder objects with more' +
                      ' than 24 detailX or 16 detailY'
                  );
                } else {
                  cov_2r7v3rpmrq.b[50][1]++;
                }
              }
              cov_2r7v3rpmrq.s[163]++;
              this._renderer.createBuffers(gId, cylinderGeom);
            } else {
              cov_2r7v3rpmrq.b[47][1]++;
            }
            cov_2r7v3rpmrq.s[164]++;

            this._renderer.drawBuffersScaled(gId, radius, height, radius);
            cov_2r7v3rpmrq.s[165]++;

            return this;
          };

          /**
           * Draw a cone with given radius and height
           *
           * DetailX and detailY determine the number of subdivisions in the x-dimension and
           * the y-dimension of a cone. More subdivisions make the cone seem smoother. The
           * recommended maximum value for detailX is 24. Using a value greater than 24
           * may cause a warning or slow down the browser.
           * @method cone
           * @param  {Number}  [radius]  radius of the bottom surface
           * @param  {Number}  [height]  height of the cone
           * @param  {Integer} [detailX] number of segments,
           *                             the more segments the smoother geometry
           *                             default is 24
           * @param  {Integer} [detailY] number of segments,
           *                             the more segments the smoother geometry
           *                             default is 1
           * @param  {Boolean} [cap]     whether to draw the base of the cone
           * @chainable
           * @example
           * <div>
           * <code>
           * // draw a spinning cone
           * // with radius 40 and height 70
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           *
           * function draw() {
           *   background(200);
           *   rotateX(frameCount * 0.01);
           *   rotateZ(frameCount * 0.01);
           *   cone(40, 70);
           * }
           * </code>
           * </div>
           *
           * @example
           * <div>
           * <code>
           * // slide to see how detailx works
           * let detailX;
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   detailX = createSlider(3, 16, 3);
           *   detailX.position(10, height + 5);
           *   detailX.style('width', '80px');
           * }
           *
           * function draw() {
           *   background(205, 102, 94);
           *   rotateY(millis() / 1000);
           *   cone(30, 65, detailX.value(), 16);
           * }
           * </code>
           * </div>
           *
           * @example
           * <div>
           * <code>
           * // slide to see how detailY works
           * let detailY;
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   detailY = createSlider(3, 16, 3);
           *   detailY.position(10, height + 5);
           *   detailY.style('width', '80px');
           * }
           *
           * function draw() {
           *   background(205, 102, 94);
           *   rotateY(millis() / 1000);
           *   cone(30, 65, 16, detailY.value());
           * }
           * </code>
           * </div>
           */ cov_2r7v3rpmrq.s[166]++;
          _main.default.prototype.cone = function(radius, height, detailX, detailY, cap) {
            cov_2r7v3rpmrq.f[7]++;
            cov_2r7v3rpmrq.s[167]++;
            this._assert3d('cone');
            cov_2r7v3rpmrq.s[168]++;
            _main.default._validateParameters('cone', arguments);
            cov_2r7v3rpmrq.s[169]++;
            if (typeof radius === 'undefined') {
              cov_2r7v3rpmrq.b[51][0]++;
              cov_2r7v3rpmrq.s[170]++;
              radius = 50;
            } else {
              cov_2r7v3rpmrq.b[51][1]++;
            }
            cov_2r7v3rpmrq.s[171]++;
            if (typeof height === 'undefined') {
              cov_2r7v3rpmrq.b[52][0]++;
              cov_2r7v3rpmrq.s[172]++;
              height = radius;
            } else {
              cov_2r7v3rpmrq.b[52][1]++;
            }
            cov_2r7v3rpmrq.s[173]++;
            if (typeof detailX === 'undefined') {
              cov_2r7v3rpmrq.b[53][0]++;
              cov_2r7v3rpmrq.s[174]++;
              detailX = 24;
            } else {
              cov_2r7v3rpmrq.b[53][1]++;
            }
            cov_2r7v3rpmrq.s[175]++;
            if (typeof detailY === 'undefined') {
              cov_2r7v3rpmrq.b[54][0]++;
              cov_2r7v3rpmrq.s[176]++;
              detailY = 1;
            } else {
              cov_2r7v3rpmrq.b[54][1]++;
            }
            cov_2r7v3rpmrq.s[177]++;
            if (typeof cap === 'undefined') {
              cov_2r7v3rpmrq.b[55][0]++;
              cov_2r7v3rpmrq.s[178]++;
              cap = true;
            } else {
              cov_2r7v3rpmrq.b[55][1]++;
            }

            var gId = (cov_2r7v3rpmrq.s[179]++,
            'cone|'
              .concat(detailX, '|')
              .concat(detailY, '|')
              .concat(cap));
            cov_2r7v3rpmrq.s[180]++;
            if (!this._renderer.geometryInHash(gId)) {
              cov_2r7v3rpmrq.b[56][0]++;
              var coneGeom = (cov_2r7v3rpmrq.s[181]++,
              new _main.default.Geometry(detailX, detailY));
              cov_2r7v3rpmrq.s[182]++;
              _truncatedCone.call(coneGeom, 1, 0, 1, detailX, detailY, cap, false);
              cov_2r7v3rpmrq.s[183]++;
              if (
                (cov_2r7v3rpmrq.b[58][0]++, detailX <= 24) &&
                (cov_2r7v3rpmrq.b[58][1]++, detailY <= 16)
              ) {
                cov_2r7v3rpmrq.b[57][0]++;
                cov_2r7v3rpmrq.s[184]++;
                coneGeom._makeTriangleEdges()._edgesToVertices();
              } else {
                cov_2r7v3rpmrq.b[57][1]++;
                cov_2r7v3rpmrq.s[185]++;
                if (this._renderer._doStroke) {
                  cov_2r7v3rpmrq.b[59][0]++;
                  cov_2r7v3rpmrq.s[186]++;
                  console.log(
                    'Cannot draw stroke on cone objects with more' +
                      ' than 24 detailX or 16 detailY'
                  );
                } else {
                  cov_2r7v3rpmrq.b[59][1]++;
                }
              }
              cov_2r7v3rpmrq.s[187]++;
              this._renderer.createBuffers(gId, coneGeom);
            } else {
              cov_2r7v3rpmrq.b[56][1]++;
            }
            cov_2r7v3rpmrq.s[188]++;

            this._renderer.drawBuffersScaled(gId, radius, height, radius);
            cov_2r7v3rpmrq.s[189]++;

            return this;
          };

          /**
           * Draw an ellipsoid with given radius
           *
           * DetailX and detailY determine the number of subdivisions in the x-dimension and
           * the y-dimension of a cone. More subdivisions make the ellipsoid appear to be smoother.
           * Avoid detail number above 150, it may crash the browser.
           * @method ellipsoid
           * @param  {Number} [radiusx]         x-radius of ellipsoid
           * @param  {Number} [radiusy]         y-radius of ellipsoid
           * @param  {Number} [radiusz]         z-radius of ellipsoid
           * @param  {Integer} [detailX]        number of segments,
           *                                    the more segments the smoother geometry
           *                                    default is 24. Avoid detail number above
           *                                    150, it may crash the browser.
           * @param  {Integer} [detailY]        number of segments,
           *                                    the more segments the smoother geometry
           *                                    default is 16. Avoid detail number above
           *                                    150, it may crash the browser.
           * @chainable
           * @example
           * <div>
           * <code>
           * // draw an ellipsoid
           * // with radius 30, 40 and 40.
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           *
           * function draw() {
           *   background(205, 105, 94);
           *   ellipsoid(30, 40, 40);
           * }
           * </code>
           * </div>
           *
           * @example
           * <div>
           * <code>
           * // slide to see how detailX works
           * let detailX;
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   detailX = createSlider(2, 24, 12);
           *   detailX.position(10, height + 5);
           *   detailX.style('width', '80px');
           * }
           *
           * function draw() {
           *   background(205, 105, 94);
           *   rotateY(millis() / 1000);
           *   ellipsoid(30, 40, 40, detailX.value(), 8);
           * }
           * </code>
           * </div>
           *
           * @example
           * <div>
           * <code>
           * // slide to see how detailY works
           * let detailY;
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   detailY = createSlider(2, 24, 6);
           *   detailY.position(10, height + 5);
           *   detailY.style('width', '80px');
           * }
           *
           * function draw() {
           *   background(205, 105, 9);
           *   rotateY(millis() / 1000);
           *   ellipsoid(30, 40, 40, 12, detailY.value());
           * }
           * </code>
           * </div>
           */ cov_2r7v3rpmrq.s[190]++;
          _main.default.prototype.ellipsoid = function(
            radiusX,
            radiusY,
            radiusZ,
            detailX,
            detailY
          ) {
            cov_2r7v3rpmrq.f[8]++;
            cov_2r7v3rpmrq.s[191]++;
            this._assert3d('ellipsoid');
            cov_2r7v3rpmrq.s[192]++;
            _main.default._validateParameters('ellipsoid', arguments);
            cov_2r7v3rpmrq.s[193]++;
            if (typeof radiusX === 'undefined') {
              cov_2r7v3rpmrq.b[60][0]++;
              cov_2r7v3rpmrq.s[194]++;
              radiusX = 50;
            } else {
              cov_2r7v3rpmrq.b[60][1]++;
            }
            cov_2r7v3rpmrq.s[195]++;
            if (typeof radiusY === 'undefined') {
              cov_2r7v3rpmrq.b[61][0]++;
              cov_2r7v3rpmrq.s[196]++;
              radiusY = radiusX;
            } else {
              cov_2r7v3rpmrq.b[61][1]++;
            }
            cov_2r7v3rpmrq.s[197]++;
            if (typeof radiusZ === 'undefined') {
              cov_2r7v3rpmrq.b[62][0]++;
              cov_2r7v3rpmrq.s[198]++;
              radiusZ = radiusX;
            } else {
              cov_2r7v3rpmrq.b[62][1]++;
            }
            cov_2r7v3rpmrq.s[199]++;

            if (typeof detailX === 'undefined') {
              cov_2r7v3rpmrq.b[63][0]++;
              cov_2r7v3rpmrq.s[200]++;
              detailX = 24;
            } else {
              cov_2r7v3rpmrq.b[63][1]++;
            }
            cov_2r7v3rpmrq.s[201]++;
            if (typeof detailY === 'undefined') {
              cov_2r7v3rpmrq.b[64][0]++;
              cov_2r7v3rpmrq.s[202]++;
              detailY = 16;
            } else {
              cov_2r7v3rpmrq.b[64][1]++;
            }

            var gId = (cov_2r7v3rpmrq.s[203]++,
            'ellipsoid|'.concat(detailX, '|').concat(detailY));
            cov_2r7v3rpmrq.s[204]++;

            if (!this._renderer.geometryInHash(gId)) {
              cov_2r7v3rpmrq.b[65][0]++;
              cov_2r7v3rpmrq.s[205]++;
              var _ellipsoid = function _ellipsoid() {
                cov_2r7v3rpmrq.f[9]++;
                cov_2r7v3rpmrq.s[206]++;
                for (var i = (cov_2r7v3rpmrq.s[207]++, 0); i <= this.detailY; i++) {
                  var v = (cov_2r7v3rpmrq.s[208]++, i / this.detailY);
                  var phi = (cov_2r7v3rpmrq.s[209]++, Math.PI * v - Math.PI / 2);
                  var cosPhi = (cov_2r7v3rpmrq.s[210]++, Math.cos(phi));
                  var sinPhi = (cov_2r7v3rpmrq.s[211]++, Math.sin(phi));
                  cov_2r7v3rpmrq.s[212]++;

                  for (var j = (cov_2r7v3rpmrq.s[213]++, 0); j <= this.detailX; j++) {
                    var u = (cov_2r7v3rpmrq.s[214]++, j / this.detailX);
                    var theta = (cov_2r7v3rpmrq.s[215]++, 2 * Math.PI * u);
                    var cosTheta = (cov_2r7v3rpmrq.s[216]++, Math.cos(theta));
                    var sinTheta = (cov_2r7v3rpmrq.s[217]++, Math.sin(theta));
                    var p = (cov_2r7v3rpmrq.s[218]++,
                    new _main.default.Vector(cosPhi * sinTheta, sinPhi, cosPhi * cosTheta));
                    cov_2r7v3rpmrq.s[219]++;
                    this.vertices.push(p);
                    cov_2r7v3rpmrq.s[220]++;
                    this.vertexNormals.push(p);
                    cov_2r7v3rpmrq.s[221]++;
                    this.uvs.push(u, v);
                  }
                }
              };
              var ellipsoidGeom = (cov_2r7v3rpmrq.s[222]++,
              new _main.default.Geometry(detailX, detailY, _ellipsoid));
              cov_2r7v3rpmrq.s[223]++;
              ellipsoidGeom.computeFaces();
              cov_2r7v3rpmrq.s[224]++;
              if (
                (cov_2r7v3rpmrq.b[67][0]++, detailX <= 24) &&
                (cov_2r7v3rpmrq.b[67][1]++, detailY <= 24)
              ) {
                cov_2r7v3rpmrq.b[66][0]++;
                cov_2r7v3rpmrq.s[225]++;
                ellipsoidGeom._makeTriangleEdges()._edgesToVertices();
              } else {
                cov_2r7v3rpmrq.b[66][1]++;
                cov_2r7v3rpmrq.s[226]++;
                if (this._renderer._doStroke) {
                  cov_2r7v3rpmrq.b[68][0]++;
                  cov_2r7v3rpmrq.s[227]++;
                  console.log(
                    'Cannot draw stroke on ellipsoids with more' +
                      ' than 24 detailX or 24 detailY'
                  );
                } else {
                  cov_2r7v3rpmrq.b[68][1]++;
                }
              }
              cov_2r7v3rpmrq.s[228]++;
              this._renderer.createBuffers(gId, ellipsoidGeom);
            } else {
              cov_2r7v3rpmrq.b[65][1]++;
            }
            cov_2r7v3rpmrq.s[229]++;

            this._renderer.drawBuffersScaled(gId, radiusX, radiusY, radiusZ);
            cov_2r7v3rpmrq.s[230]++;

            return this;
          };

          /**
           * Draw a torus with given radius and tube radius
           *
           * DetailX and detailY determine the number of subdivisions in the x-dimension and
           * the y-dimension of a torus. More subdivisions make the torus appear to be smoother.
           * The default and maximum values for detailX and detailY are 24 and 16, respectively.
           * Setting them to relatively small values like 4 and 6 allows you to create new
           * shapes other than a torus.
           * @method torus
           * @param  {Number} [radius]      radius of the whole ring
           * @param  {Number} [tubeRadius]  radius of the tube
           * @param  {Integer} [detailX]    number of segments in x-dimension,
           *                                the more segments the smoother geometry
           *                                default is 24
           * @param  {Integer} [detailY]    number of segments in y-dimension,
           *                                the more segments the smoother geometry
           *                                default is 16
           * @chainable
           * @example
           * <div>
           * <code>
           * // draw a spinning torus
           * // with ring radius 30 and tube radius 15
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           *
           * function draw() {
           *   background(205, 102, 94);
           *   rotateX(frameCount * 0.01);
           *   rotateY(frameCount * 0.01);
           *   torus(30, 15);
           * }
           * </code>
           * </div>
           *
           * @example
           * <div>
           * <code>
           * // slide to see how detailX works
           * let detailX;
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   detailX = createSlider(3, 24, 3);
           *   detailX.position(10, height + 5);
           *   detailX.style('width', '80px');
           * }
           *
           * function draw() {
           *   background(205, 102, 94);
           *   rotateY(millis() / 1000);
           *   torus(30, 15, detailX.value(), 12);
           * }
           * </code>
           * </div>
           *
           * @example
           * <div>
           * <code>
           * // slide to see how detailY works
           * let detailY;
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   detailY = createSlider(3, 16, 3);
           *   detailY.position(10, height + 5);
           *   detailY.style('width', '80px');
           * }
           *
           * function draw() {
           *   background(205, 102, 94);
           *   rotateY(millis() / 1000);
           *   torus(30, 15, 16, detailY.value());
           * }
           * </code>
           * </div>
           */ cov_2r7v3rpmrq.s[231]++;
          _main.default.prototype.torus = function(radius, tubeRadius, detailX, detailY) {
            cov_2r7v3rpmrq.f[10]++;
            cov_2r7v3rpmrq.s[232]++;
            this._assert3d('torus');
            cov_2r7v3rpmrq.s[233]++;
            _main.default._validateParameters('torus', arguments);
            cov_2r7v3rpmrq.s[234]++;
            if (typeof radius === 'undefined') {
              cov_2r7v3rpmrq.b[69][0]++;
              cov_2r7v3rpmrq.s[235]++;
              radius = 50;
            } else {
              cov_2r7v3rpmrq.b[69][1]++;
              cov_2r7v3rpmrq.s[236]++;
              if (!radius) {
                cov_2r7v3rpmrq.b[70][0]++;
                cov_2r7v3rpmrq.s[237]++;
                return; // nothing to draw
              } else {
                cov_2r7v3rpmrq.b[70][1]++;
              }
            }
            cov_2r7v3rpmrq.s[238]++;

            if (typeof tubeRadius === 'undefined') {
              cov_2r7v3rpmrq.b[71][0]++;
              cov_2r7v3rpmrq.s[239]++;
              tubeRadius = 10;
            } else {
              cov_2r7v3rpmrq.b[71][1]++;
              cov_2r7v3rpmrq.s[240]++;
              if (!tubeRadius) {
                cov_2r7v3rpmrq.b[72][0]++;
                cov_2r7v3rpmrq.s[241]++;
                return; // nothing to draw
              } else {
                cov_2r7v3rpmrq.b[72][1]++;
              }
            }
            cov_2r7v3rpmrq.s[242]++;

            if (typeof detailX === 'undefined') {
              cov_2r7v3rpmrq.b[73][0]++;
              cov_2r7v3rpmrq.s[243]++;
              detailX = 24;
            } else {
              cov_2r7v3rpmrq.b[73][1]++;
            }
            cov_2r7v3rpmrq.s[244]++;
            if (typeof detailY === 'undefined') {
              cov_2r7v3rpmrq.b[74][0]++;
              cov_2r7v3rpmrq.s[245]++;
              detailY = 16;
            } else {
              cov_2r7v3rpmrq.b[74][1]++;
            }

            var tubeRatio = (cov_2r7v3rpmrq.s[246]++, (tubeRadius / radius).toPrecision(4));
            var gId = (cov_2r7v3rpmrq.s[247]++,
            'torus|'
              .concat(tubeRatio, '|')
              .concat(detailX, '|')
              .concat(detailY));
            cov_2r7v3rpmrq.s[248]++;

            if (!this._renderer.geometryInHash(gId)) {
              cov_2r7v3rpmrq.b[75][0]++;
              cov_2r7v3rpmrq.s[249]++;
              var _torus = function _torus() {
                cov_2r7v3rpmrq.f[11]++;
                cov_2r7v3rpmrq.s[250]++;
                for (var i = (cov_2r7v3rpmrq.s[251]++, 0); i <= this.detailY; i++) {
                  var v = (cov_2r7v3rpmrq.s[252]++, i / this.detailY);
                  var phi = (cov_2r7v3rpmrq.s[253]++, 2 * Math.PI * v);
                  var cosPhi = (cov_2r7v3rpmrq.s[254]++, Math.cos(phi));
                  var sinPhi = (cov_2r7v3rpmrq.s[255]++, Math.sin(phi));
                  var r = (cov_2r7v3rpmrq.s[256]++, 1 + tubeRatio * cosPhi);
                  cov_2r7v3rpmrq.s[257]++;

                  for (var j = (cov_2r7v3rpmrq.s[258]++, 0); j <= this.detailX; j++) {
                    var u = (cov_2r7v3rpmrq.s[259]++, j / this.detailX);
                    var theta = (cov_2r7v3rpmrq.s[260]++, 2 * Math.PI * u);
                    var cosTheta = (cov_2r7v3rpmrq.s[261]++, Math.cos(theta));
                    var sinTheta = (cov_2r7v3rpmrq.s[262]++, Math.sin(theta));

                    var p = (cov_2r7v3rpmrq.s[263]++,
                    new _main.default.Vector(
                      r * cosTheta,
                      r * sinTheta,
                      tubeRatio * sinPhi
                    ));

                    var n = (cov_2r7v3rpmrq.s[264]++,
                    new _main.default.Vector(cosPhi * cosTheta, cosPhi * sinTheta, sinPhi));
                    cov_2r7v3rpmrq.s[265]++;

                    this.vertices.push(p);
                    cov_2r7v3rpmrq.s[266]++;
                    this.vertexNormals.push(n);
                    cov_2r7v3rpmrq.s[267]++;
                    this.uvs.push(u, v);
                  }
                }
              };
              var torusGeom = (cov_2r7v3rpmrq.s[268]++,
              new _main.default.Geometry(detailX, detailY, _torus));
              cov_2r7v3rpmrq.s[269]++;
              torusGeom.computeFaces();
              cov_2r7v3rpmrq.s[270]++;
              if (
                (cov_2r7v3rpmrq.b[77][0]++, detailX <= 24) &&
                (cov_2r7v3rpmrq.b[77][1]++, detailY <= 16)
              ) {
                cov_2r7v3rpmrq.b[76][0]++;
                cov_2r7v3rpmrq.s[271]++;
                torusGeom._makeTriangleEdges()._edgesToVertices();
              } else {
                cov_2r7v3rpmrq.b[76][1]++;
                cov_2r7v3rpmrq.s[272]++;
                if (this._renderer._doStroke) {
                  cov_2r7v3rpmrq.b[78][0]++;
                  cov_2r7v3rpmrq.s[273]++;
                  console.log(
                    'Cannot draw strokes on torus object with more' +
                      ' than 24 detailX or 16 detailY'
                  );
                } else {
                  cov_2r7v3rpmrq.b[78][1]++;
                }
              }
              cov_2r7v3rpmrq.s[274]++;
              this._renderer.createBuffers(gId, torusGeom);
            } else {
              cov_2r7v3rpmrq.b[75][1]++;
            }
            cov_2r7v3rpmrq.s[275]++;
            this._renderer.drawBuffersScaled(gId, radius, radius, radius);
            cov_2r7v3rpmrq.s[276]++;

            return this;
          };

          ///////////////////////
          /// 2D primitives
          /////////////////////////

          /**
           * Draws a point, a coordinate in space at the dimension of one pixel,
           * given x, y and z coordinates. The color of the point is determined
           * by the current stroke, while the point size is determined by current
           * stroke weight.
           * @private
           * @param {Number} x x-coordinate of point
           * @param {Number} y y-coordinate of point
           * @param {Number} z z-coordinate of point
           * @chainable
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           *
           * function draw() {
           *   background(50);
           *   stroke(255);
           *   strokeWeight(4);
           *   point(25, 0);
           *   strokeWeight(3);
           *   point(-25, 0);
           *   strokeWeight(2);
           *   point(0, 25);
           *   strokeWeight(1);
           *   point(0, -25);
           * }
           * </code>
           * </div>
           */ cov_2r7v3rpmrq.s[277]++;
          _main.default.RendererGL.prototype.point = function(x, y, z) {
            cov_2r7v3rpmrq.f[12]++;
            cov_2r7v3rpmrq.s[278]++;
            if (typeof z === 'undefined') {
              cov_2r7v3rpmrq.b[79][0]++;
              cov_2r7v3rpmrq.s[279]++;
              z = 0;
            } else {
              cov_2r7v3rpmrq.b[79][1]++;
            }

            var _vertex = (cov_2r7v3rpmrq.s[280]++, []);
            cov_2r7v3rpmrq.s[281]++;
            _vertex.push(new _main.default.Vector(x, y, z));
            cov_2r7v3rpmrq.s[282]++;
            this._drawPoints(_vertex, this.immediateMode.buffers.point);
            cov_2r7v3rpmrq.s[283]++;

            return this;
          };
          cov_2r7v3rpmrq.s[284]++;

          _main.default.RendererGL.prototype.triangle = function(args) {
            cov_2r7v3rpmrq.f[13]++;
            var x1 = (cov_2r7v3rpmrq.s[285]++, args[0]),
              y1 = (cov_2r7v3rpmrq.s[286]++, args[1]);
            var x2 = (cov_2r7v3rpmrq.s[287]++, args[2]),
              y2 = (cov_2r7v3rpmrq.s[288]++, args[3]);
            var x3 = (cov_2r7v3rpmrq.s[289]++, args[4]),
              y3 = (cov_2r7v3rpmrq.s[290]++, args[5]);

            var gId = (cov_2r7v3rpmrq.s[291]++, 'tri');
            cov_2r7v3rpmrq.s[292]++;
            if (!this.geometryInHash(gId)) {
              cov_2r7v3rpmrq.b[80][0]++;
              cov_2r7v3rpmrq.s[293]++;
              var _triangle = function _triangle() {
                cov_2r7v3rpmrq.f[14]++;
                var vertices = (cov_2r7v3rpmrq.s[294]++, []);
                cov_2r7v3rpmrq.s[295]++;
                vertices.push(new _main.default.Vector(0, 0, 0));
                cov_2r7v3rpmrq.s[296]++;
                vertices.push(new _main.default.Vector(0, 1, 0));
                cov_2r7v3rpmrq.s[297]++;
                vertices.push(new _main.default.Vector(1, 0, 0));
                cov_2r7v3rpmrq.s[298]++;
                this.strokeIndices = [[0, 1], [1, 2], [2, 0]];
                cov_2r7v3rpmrq.s[299]++;
                this.vertices = vertices;
                cov_2r7v3rpmrq.s[300]++;
                this.faces = [[0, 1, 2]];
                cov_2r7v3rpmrq.s[301]++;
                this.uvs = [0, 0, 0, 1, 1, 1];
              };
              var triGeom = (cov_2r7v3rpmrq.s[302]++,
              new _main.default.Geometry(1, 1, _triangle));
              cov_2r7v3rpmrq.s[303]++;
              triGeom._makeTriangleEdges()._edgesToVertices();
              cov_2r7v3rpmrq.s[304]++;
              triGeom.computeNormals();
              cov_2r7v3rpmrq.s[305]++;
              this.createBuffers(gId, triGeom);
            } else {
              cov_2r7v3rpmrq.b[80][1]++;
            }

            // only one triangle is cached, one point is at the origin, and the
            // two adjacent sides are tne unit vectors along the X & Y axes.
            //
            // this matrix multiplication transforms those two unit vectors
            // onto the required vector prior to rendering, and moves the
            // origin appropriately.
            var uMVMatrix = (cov_2r7v3rpmrq.s[306]++, this.uMVMatrix.copy());
            cov_2r7v3rpmrq.s[307]++;
            try {
              // prettier-ignore
              var mult = (cov_2r7v3rpmrq.s[308]++, new _main.default.Matrix([
    x2 - x1, y2 - y1, 0, 0, // the resulting unit X-axis
    x3 - x1, y3 - y1, 0, 0, // the resulting unit Y-axis
    0, 0, 1, 0, // the resulting unit Z-axis (unchanged)
    x1, y1, 0, 1 // the resulting origin
    ]).mult(this.uMVMatrix));
              cov_2r7v3rpmrq.s[309]++;

              this.uMVMatrix = mult;
              cov_2r7v3rpmrq.s[310]++;

              this.drawBuffers(gId);
            } finally {
              cov_2r7v3rpmrq.s[311]++;
              this.uMVMatrix = uMVMatrix;
            }
            cov_2r7v3rpmrq.s[312]++;

            return this;
          };
          cov_2r7v3rpmrq.s[313]++;

          _main.default.RendererGL.prototype.ellipse = function(args) {
            cov_2r7v3rpmrq.f[15]++;
            cov_2r7v3rpmrq.s[314]++;
            this.arc(
              args[0],
              args[1],
              args[2],
              args[3],
              0,
              constants.TWO_PI,
              constants.OPEN,
              args[4]
            );
          };
          cov_2r7v3rpmrq.s[315]++;

          _main.default.RendererGL.prototype.arc = function(args) {
            cov_2r7v3rpmrq.f[16]++;
            var x = (cov_2r7v3rpmrq.s[316]++, arguments[0]);
            var y = (cov_2r7v3rpmrq.s[317]++, arguments[1]);
            var width = (cov_2r7v3rpmrq.s[318]++, arguments[2]);
            var height = (cov_2r7v3rpmrq.s[319]++, arguments[3]);
            var start = (cov_2r7v3rpmrq.s[320]++, arguments[4]);
            var stop = (cov_2r7v3rpmrq.s[321]++, arguments[5]);
            var mode = (cov_2r7v3rpmrq.s[322]++, arguments[6]);
            var detail = (cov_2r7v3rpmrq.s[323]++,
            (cov_2r7v3rpmrq.b[81][0]++, arguments[7]) || (cov_2r7v3rpmrq.b[81][1]++, 25));

            var shape;
            var gId;

            // check if it is an ellipse or an arc
            cov_2r7v3rpmrq.s[324]++;
            if (Math.abs(stop - start) >= constants.TWO_PI) {
              cov_2r7v3rpmrq.b[82][0]++;
              cov_2r7v3rpmrq.s[325]++;
              shape = 'ellipse';
              cov_2r7v3rpmrq.s[326]++;
              gId = ''.concat(shape, '|').concat(detail, '|');
            } else {
              cov_2r7v3rpmrq.b[82][1]++;
              cov_2r7v3rpmrq.s[327]++;
              shape = 'arc';
              cov_2r7v3rpmrq.s[328]++;
              gId = ''
                .concat(shape, '|')
                .concat(start, '|')
                .concat(stop, '|')
                .concat(mode, '|')
                .concat(detail, '|');
            }
            cov_2r7v3rpmrq.s[329]++;

            if (!this.geometryInHash(gId)) {
              cov_2r7v3rpmrq.b[83][0]++;
              cov_2r7v3rpmrq.s[330]++;
              var _arc = function _arc() {
                cov_2r7v3rpmrq.f[17]++;
                cov_2r7v3rpmrq.s[331]++;
                this.strokeIndices = [];

                // if the start and stop angles are not the same, push vertices to the array
                cov_2r7v3rpmrq.s[332]++;
                if (start.toFixed(10) !== stop.toFixed(10)) {
                  cov_2r7v3rpmrq.b[84][0]++;
                  cov_2r7v3rpmrq.s[333]++;
                  // if the mode specified is PIE or null, push the mid point of the arc in vertices
                  if (
                    (cov_2r7v3rpmrq.b[86][0]++, mode === constants.PIE) ||
                    (cov_2r7v3rpmrq.b[86][1]++, typeof mode === 'undefined')
                  ) {
                    cov_2r7v3rpmrq.b[85][0]++;
                    cov_2r7v3rpmrq.s[334]++;
                    this.vertices.push(new _main.default.Vector(0.5, 0.5, 0));
                    cov_2r7v3rpmrq.s[335]++;
                    this.uvs.push([0.5, 0.5]);
                  } else {
                    cov_2r7v3rpmrq.b[85][1]++;
                  }

                  // vertices for the perimeter of the circle
                  cov_2r7v3rpmrq.s[336]++;
                  for (var i = (cov_2r7v3rpmrq.s[337]++, 0); i <= detail; i++) {
                    var u = (cov_2r7v3rpmrq.s[338]++, i / detail);
                    var theta = (cov_2r7v3rpmrq.s[339]++, (stop - start) * u + start);

                    var _x = (cov_2r7v3rpmrq.s[340]++, 0.5 + Math.cos(theta) / 2);
                    var _y = (cov_2r7v3rpmrq.s[341]++, 0.5 + Math.sin(theta) / 2);
                    cov_2r7v3rpmrq.s[342]++;

                    this.vertices.push(new _main.default.Vector(_x, _y, 0));
                    cov_2r7v3rpmrq.s[343]++;
                    this.uvs.push([_x, _y]);
                    cov_2r7v3rpmrq.s[344]++;

                    if (i < detail - 1) {
                      cov_2r7v3rpmrq.b[87][0]++;
                      cov_2r7v3rpmrq.s[345]++;
                      this.faces.push([0, i + 1, i + 2]);
                      cov_2r7v3rpmrq.s[346]++;
                      this.strokeIndices.push([i + 1, i + 2]);
                    } else {
                      cov_2r7v3rpmrq.b[87][1]++;
                    }
                  }

                  // check the mode specified in order to push vertices and faces, different for each mode
                  cov_2r7v3rpmrq.s[347]++;
                  switch (mode) {
                    case constants.PIE:
                      cov_2r7v3rpmrq.b[88][0]++;
                      cov_2r7v3rpmrq.s[348]++;
                      this.faces.push([
                        0,
                        this.vertices.length - 2,
                        this.vertices.length - 1
                      ]);
                      cov_2r7v3rpmrq.s[349]++;

                      this.strokeIndices.push([0, 1]);
                      cov_2r7v3rpmrq.s[350]++;
                      this.strokeIndices.push([
                        this.vertices.length - 2,
                        this.vertices.length - 1
                      ]);
                      cov_2r7v3rpmrq.s[351]++;

                      this.strokeIndices.push([0, this.vertices.length - 1]);
                      cov_2r7v3rpmrq.s[352]++;
                      break;

                    case constants.CHORD:
                      cov_2r7v3rpmrq.b[88][1]++;
                      cov_2r7v3rpmrq.s[353]++;
                      this.strokeIndices.push([0, 1]);
                      cov_2r7v3rpmrq.s[354]++;
                      this.strokeIndices.push([0, this.vertices.length - 1]);
                      cov_2r7v3rpmrq.s[355]++;
                      break;

                    case constants.OPEN:
                      cov_2r7v3rpmrq.b[88][2]++;
                      cov_2r7v3rpmrq.s[356]++;
                      this.strokeIndices.push([0, 1]);
                      cov_2r7v3rpmrq.s[357]++;
                      break;

                    default:
                      cov_2r7v3rpmrq.b[88][3]++;
                      cov_2r7v3rpmrq.s[358]++;
                      this.faces.push([
                        0,
                        this.vertices.length - 2,
                        this.vertices.length - 1
                      ]);
                      cov_2r7v3rpmrq.s[359]++;

                      this.strokeIndices.push([
                        this.vertices.length - 2,
                        this.vertices.length - 1
                      ]);
                  }
                } else {
                  cov_2r7v3rpmrq.b[84][1]++;
                }
              };

              var arcGeom = (cov_2r7v3rpmrq.s[360]++,
              new _main.default.Geometry(detail, 1, _arc));
              cov_2r7v3rpmrq.s[361]++;
              arcGeom.computeNormals();
              cov_2r7v3rpmrq.s[362]++;

              if (detail <= 50) {
                cov_2r7v3rpmrq.b[89][0]++;
                cov_2r7v3rpmrq.s[363]++;
                arcGeom._makeTriangleEdges()._edgesToVertices(arcGeom);
              } else {
                cov_2r7v3rpmrq.b[89][1]++;
                cov_2r7v3rpmrq.s[364]++;
                if (this._doStroke) {
                  cov_2r7v3rpmrq.b[90][0]++;
                  cov_2r7v3rpmrq.s[365]++;
                  console.log(
                    'Cannot apply a stroke to an '.concat(
                      shape,
                      ' with more than 50 detail'
                    )
                  );
                } else {
                  cov_2r7v3rpmrq.b[90][1]++;
                }
              }
              cov_2r7v3rpmrq.s[366]++;

              this.createBuffers(gId, arcGeom);
            } else {
              cov_2r7v3rpmrq.b[83][1]++;
            }

            var uMVMatrix = (cov_2r7v3rpmrq.s[367]++, this.uMVMatrix.copy());
            cov_2r7v3rpmrq.s[368]++;

            try {
              cov_2r7v3rpmrq.s[369]++;
              this.uMVMatrix.translate([x, y, 0]);
              cov_2r7v3rpmrq.s[370]++;
              this.uMVMatrix.scale(width, height, 1);
              cov_2r7v3rpmrq.s[371]++;

              this.drawBuffers(gId);
            } finally {
              cov_2r7v3rpmrq.s[372]++;
              this.uMVMatrix = uMVMatrix;
            }
            cov_2r7v3rpmrq.s[373]++;

            return this;
          };
          cov_2r7v3rpmrq.s[374]++;

          _main.default.RendererGL.prototype.rect = function(args) {
            cov_2r7v3rpmrq.f[18]++;
            var perPixelLighting = (cov_2r7v3rpmrq.s[375]++,
            this._pInst._glAttributes.perPixelLighting);
            var x = (cov_2r7v3rpmrq.s[376]++, args[0]);
            var y = (cov_2r7v3rpmrq.s[377]++, args[1]);
            var width = (cov_2r7v3rpmrq.s[378]++, args[2]);
            var height = (cov_2r7v3rpmrq.s[379]++, args[3]);
            var detailX = (cov_2r7v3rpmrq.s[380]++,
            (cov_2r7v3rpmrq.b[91][0]++, args[4]) ||
              (cov_2r7v3rpmrq.b[91][1]++,
              perPixelLighting
                ? (cov_2r7v3rpmrq.b[92][0]++, 1)
                : (cov_2r7v3rpmrq.b[92][1]++, 24)));
            var detailY = (cov_2r7v3rpmrq.s[381]++,
            (cov_2r7v3rpmrq.b[93][0]++, args[5]) ||
              (cov_2r7v3rpmrq.b[93][1]++,
              perPixelLighting
                ? (cov_2r7v3rpmrq.b[94][0]++, 1)
                : (cov_2r7v3rpmrq.b[94][1]++, 16)));
            var gId = (cov_2r7v3rpmrq.s[382]++,
            'rect|'.concat(detailX, '|').concat(detailY));
            cov_2r7v3rpmrq.s[383]++;
            if (!this.geometryInHash(gId)) {
              cov_2r7v3rpmrq.b[95][0]++;
              cov_2r7v3rpmrq.s[384]++;
              var _rect = function _rect() {
                cov_2r7v3rpmrq.f[19]++;
                cov_2r7v3rpmrq.s[385]++;
                for (var i = (cov_2r7v3rpmrq.s[386]++, 0); i <= this.detailY; i++) {
                  var v = (cov_2r7v3rpmrq.s[387]++, i / this.detailY);
                  cov_2r7v3rpmrq.s[388]++;
                  for (var j = (cov_2r7v3rpmrq.s[389]++, 0); j <= this.detailX; j++) {
                    var u = (cov_2r7v3rpmrq.s[390]++, j / this.detailX);
                    var p = (cov_2r7v3rpmrq.s[391]++, new _main.default.Vector(u, v, 0));
                    cov_2r7v3rpmrq.s[392]++;
                    this.vertices.push(p);
                    cov_2r7v3rpmrq.s[393]++;
                    this.uvs.push(u, v);
                  }
                }
                // using stroke indices to avoid stroke over face(s) of rectangle
                cov_2r7v3rpmrq.s[394]++;
                if (
                  (cov_2r7v3rpmrq.b[97][0]++, detailX > 0) &&
                  (cov_2r7v3rpmrq.b[97][1]++, detailY > 0)
                ) {
                  cov_2r7v3rpmrq.b[96][0]++;
                  cov_2r7v3rpmrq.s[395]++;
                  this.strokeIndices = [
                    [0, detailX],
                    [detailX, (detailX + 1) * (detailY + 1) - 1],
                    [(detailX + 1) * (detailY + 1) - 1, (detailX + 1) * detailY],
                    [(detailX + 1) * detailY, 0]
                  ];
                } else {
                  cov_2r7v3rpmrq.b[96][1]++;
                }
              };
              var rectGeom = (cov_2r7v3rpmrq.s[396]++,
              new _main.default.Geometry(detailX, detailY, _rect));
              cov_2r7v3rpmrq.s[397]++;
              rectGeom
                .computeFaces()
                .computeNormals()
                ._makeTriangleEdges()
                ._edgesToVertices();
              cov_2r7v3rpmrq.s[398]++;
              this.createBuffers(gId, rectGeom);
            } else {
              cov_2r7v3rpmrq.b[95][1]++;
            }

            // only a single rectangle (of a given detail) is cached: a square with
            // opposite corners at (0,0) & (1,1).
            //
            // before rendering, this square is scaled & moved to the required location.
            var uMVMatrix = (cov_2r7v3rpmrq.s[399]++, this.uMVMatrix.copy());
            cov_2r7v3rpmrq.s[400]++;
            try {
              cov_2r7v3rpmrq.s[401]++;
              this.uMVMatrix.translate([x, y, 0]);
              cov_2r7v3rpmrq.s[402]++;
              this.uMVMatrix.scale(width, height, 1);
              cov_2r7v3rpmrq.s[403]++;

              this.drawBuffers(gId);
            } finally {
              cov_2r7v3rpmrq.s[404]++;
              this.uMVMatrix = uMVMatrix;
            }
            cov_2r7v3rpmrq.s[405]++;
            return this;
          };

          // prettier-ignore
          cov_2r7v3rpmrq.s[406]++;
          _main.default.RendererGL.prototype.quad = function(
            x1,
            y1,
            z1,
            x2,
            y2,
            z2,
            x3,
            y3,
            z3,
            x4,
            y4,
            z4,
            detailX,
            detailY
          ) {
            cov_2r7v3rpmrq.f[20]++;
            cov_2r7v3rpmrq.s[407]++;
            if (typeof detailX === 'undefined') {
              cov_2r7v3rpmrq.b[98][0]++;
              cov_2r7v3rpmrq.s[408]++;
              detailX = 2;
            } else {
              cov_2r7v3rpmrq.b[98][1]++;
            }
            cov_2r7v3rpmrq.s[409]++;
            if (typeof detailY === 'undefined') {
              cov_2r7v3rpmrq.b[99][0]++;
              cov_2r7v3rpmrq.s[410]++;
              detailY = 2;
            } else {
              cov_2r7v3rpmrq.b[99][1]++;
            }

            var gId = (cov_2r7v3rpmrq.s[411]++,
            'quad|'
              .concat(x1, '|')
              .concat(y1, '|')
              .concat(z1, '|')
              .concat(x2, '|')
              .concat(y2, '|')
              .concat(z2, '|')
              .concat(x3, '|')
              .concat(y3, '|')
              .concat(z3, '|')
              .concat(x4, '|')
              .concat(y4, '|')
              .concat(z4, '|')
              .concat(detailX, '|')
              .concat(detailY));
            cov_2r7v3rpmrq.s[412]++;

            if (!this.geometryInHash(gId)) {
              cov_2r7v3rpmrq.b[100][0]++;
              var quadGeom = (cov_2r7v3rpmrq.s[413]++,
              new _main.default.Geometry(detailX, detailY, function() {
                cov_2r7v3rpmrq.f[21]++;
                //algorithm adapted from c++ to js
                //https://stackoverflow.com/questions/16989181/whats-the-correct-way-to-draw-a-distorted-plane-in-opengl/16993202#16993202
                var xRes = (cov_2r7v3rpmrq.s[414]++, 1.0 / (this.detailX - 1));
                var yRes = (cov_2r7v3rpmrq.s[415]++, 1.0 / (this.detailY - 1));
                cov_2r7v3rpmrq.s[416]++;
                for (var y = (cov_2r7v3rpmrq.s[417]++, 0); y < this.detailY; y++) {
                  cov_2r7v3rpmrq.s[418]++;
                  for (var x = (cov_2r7v3rpmrq.s[419]++, 0); x < this.detailX; x++) {
                    var pctx = (cov_2r7v3rpmrq.s[420]++, x * xRes);
                    var pcty = (cov_2r7v3rpmrq.s[421]++, y * yRes);

                    var linePt0x = (cov_2r7v3rpmrq.s[422]++, (1 - pcty) * x1 + pcty * x4);
                    var linePt0y = (cov_2r7v3rpmrq.s[423]++, (1 - pcty) * y1 + pcty * y4);
                    var linePt0z = (cov_2r7v3rpmrq.s[424]++, (1 - pcty) * z1 + pcty * z4);
                    var linePt1x = (cov_2r7v3rpmrq.s[425]++, (1 - pcty) * x2 + pcty * x3);
                    var linePt1y = (cov_2r7v3rpmrq.s[426]++, (1 - pcty) * y2 + pcty * y3);
                    var linePt1z = (cov_2r7v3rpmrq.s[427]++, (1 - pcty) * z2 + pcty * z3);

                    var ptx = (cov_2r7v3rpmrq.s[428]++,
                    (1 - pctx) * linePt0x + pctx * linePt1x);
                    var pty = (cov_2r7v3rpmrq.s[429]++,
                    (1 - pctx) * linePt0y + pctx * linePt1y);
                    var ptz = (cov_2r7v3rpmrq.s[430]++,
                    (1 - pctx) * linePt0z + pctx * linePt1z);
                    cov_2r7v3rpmrq.s[431]++;

                    this.vertices.push(new _main.default.Vector(ptx, pty, ptz));
                    cov_2r7v3rpmrq.s[432]++;
                    this.uvs.push([pctx, pcty]);
                  }
                }
              }));
              cov_2r7v3rpmrq.s[433]++;

              quadGeom.faces = [];
              cov_2r7v3rpmrq.s[434]++;
              for (var y = (cov_2r7v3rpmrq.s[435]++, 0); y < detailY - 1; y++) {
                cov_2r7v3rpmrq.s[436]++;
                for (var x = (cov_2r7v3rpmrq.s[437]++, 0); x < detailX - 1; x++) {
                  var pt0 = (cov_2r7v3rpmrq.s[438]++, x + y * detailX);
                  var pt1 = (cov_2r7v3rpmrq.s[439]++, x + 1 + y * detailX);
                  var pt2 = (cov_2r7v3rpmrq.s[440]++, x + 1 + (y + 1) * detailX);
                  var pt3 = (cov_2r7v3rpmrq.s[441]++, x + (y + 1) * detailX);
                  cov_2r7v3rpmrq.s[442]++;
                  quadGeom.faces.push([pt0, pt1, pt2]);
                  cov_2r7v3rpmrq.s[443]++;
                  quadGeom.faces.push([pt0, pt2, pt3]);
                }
              }
              cov_2r7v3rpmrq.s[444]++;
              quadGeom
                .computeNormals()
                ._makeTriangleEdges()
                ._edgesToVertices();
              cov_2r7v3rpmrq.s[445]++;
              this.createBuffers(gId, quadGeom);
            } else {
              cov_2r7v3rpmrq.b[100][1]++;
            }
            cov_2r7v3rpmrq.s[446]++;
            this.drawBuffers(gId);
            cov_2r7v3rpmrq.s[447]++;
            return this;
          };

          //this implementation of bezier curve
          //is based on Bernstein polynomial
          // pretier-ignore
          cov_2r7v3rpmrq.s[448]++;
          _main.default.RendererGL.prototype.bezier = function(
            x1,
            y1,
            z1, // x2
            x2, // y2
            y2, // x3
            z2, // y3
            x3, // x4
            y3, // y4
            z3,
            x4,
            y4,
            z4
          ) {
            cov_2r7v3rpmrq.f[22]++;
            cov_2r7v3rpmrq.s[449]++;
            if (arguments.length === 8) {
              cov_2r7v3rpmrq.b[101][0]++;
              cov_2r7v3rpmrq.s[450]++;
              y4 = y3;
              cov_2r7v3rpmrq.s[451]++;
              x4 = x3;
              cov_2r7v3rpmrq.s[452]++;
              y3 = z2;
              cov_2r7v3rpmrq.s[453]++;
              x3 = y2;
              cov_2r7v3rpmrq.s[454]++;
              y2 = x2;
              cov_2r7v3rpmrq.s[455]++;
              x2 = z1;
              cov_2r7v3rpmrq.s[456]++;
              z1 = z2 = z3 = z4 = 0;
            } else {
              cov_2r7v3rpmrq.b[101][1]++;
            }
            var bezierDetail = (cov_2r7v3rpmrq.s[457]++,
            (cov_2r7v3rpmrq.b[102][0]++, this._pInst._bezierDetail) ||
              (cov_2r7v3rpmrq.b[102][1]++, 20)); //value of Bezier detail
            cov_2r7v3rpmrq.s[458]++;
            this.beginShape();
            cov_2r7v3rpmrq.s[459]++;
            for (var i = (cov_2r7v3rpmrq.s[460]++, 0); i <= bezierDetail; i++) {
              var c1 = (cov_2r7v3rpmrq.s[461]++, Math.pow(1 - i / bezierDetail, 3));
              var c2 = (cov_2r7v3rpmrq.s[462]++,
              3 * (i / bezierDetail) * Math.pow(1 - i / bezierDetail, 2));
              var c3 = (cov_2r7v3rpmrq.s[463]++,
              3 * Math.pow(i / bezierDetail, 2) * (1 - i / bezierDetail));
              var c4 = (cov_2r7v3rpmrq.s[464]++, Math.pow(i / bezierDetail, 3));
              cov_2r7v3rpmrq.s[465]++;
              this.vertex(
                x1 * c1 + x2 * c2 + x3 * c3 + x4 * c4,
                y1 * c1 + y2 * c2 + y3 * c3 + y4 * c4,
                z1 * c1 + z2 * c2 + z3 * c3 + z4 * c4
              );
            }
            cov_2r7v3rpmrq.s[466]++;
            this.endShape();
            cov_2r7v3rpmrq.s[467]++;
            return this;
          };

          // pretier-ignore
          cov_2r7v3rpmrq.s[468]++;
          _main.default.RendererGL.prototype.curve = function(
            x1,
            y1,
            z1, // x2
            x2, // y2
            y2, // x3
            z2, // y3
            x3, // x4
            y3, // y4
            z3,
            x4,
            y4,
            z4
          ) {
            cov_2r7v3rpmrq.f[23]++;
            cov_2r7v3rpmrq.s[469]++;
            if (arguments.length === 8) {
              cov_2r7v3rpmrq.b[103][0]++;
              cov_2r7v3rpmrq.s[470]++;
              x4 = x3;
              cov_2r7v3rpmrq.s[471]++;
              y4 = y3;
              cov_2r7v3rpmrq.s[472]++;
              x3 = y2;
              cov_2r7v3rpmrq.s[473]++;
              y3 = x2;
              cov_2r7v3rpmrq.s[474]++;
              x2 = z1;
              cov_2r7v3rpmrq.s[475]++;
              y2 = x2;
              cov_2r7v3rpmrq.s[476]++;
              z1 = z2 = z3 = z4 = 0;
            } else {
              cov_2r7v3rpmrq.b[103][1]++;
            }
            var curveDetail = (cov_2r7v3rpmrq.s[477]++, this._pInst._curveDetail);
            cov_2r7v3rpmrq.s[478]++;
            this.beginShape();
            cov_2r7v3rpmrq.s[479]++;
            for (var i = (cov_2r7v3rpmrq.s[480]++, 0); i <= curveDetail; i++) {
              var c1 = (cov_2r7v3rpmrq.s[481]++, Math.pow(i / curveDetail, 3) * 0.5);
              var c2 = (cov_2r7v3rpmrq.s[482]++, Math.pow(i / curveDetail, 2) * 0.5);
              var c3 = (cov_2r7v3rpmrq.s[483]++, i / curveDetail * 0.5);
              var c4 = (cov_2r7v3rpmrq.s[484]++, 0.5);
              var vx = (cov_2r7v3rpmrq.s[485]++,
              c1 * (-x1 + 3 * x2 - 3 * x3 + x4) +
                c2 * (2 * x1 - 5 * x2 + 4 * x3 - x4) +
                c3 * (-x1 + x3) +
                c4 * (2 * x2));
              var vy = (cov_2r7v3rpmrq.s[486]++,
              c1 * (-y1 + 3 * y2 - 3 * y3 + y4) +
                c2 * (2 * y1 - 5 * y2 + 4 * y3 - y4) +
                c3 * (-y1 + y3) +
                c4 * (2 * y2));
              var vz = (cov_2r7v3rpmrq.s[487]++,
              c1 * (-z1 + 3 * z2 - 3 * z3 + z4) +
                c2 * (2 * z1 - 5 * z2 + 4 * z3 - z4) +
                c3 * (-z1 + z3) +
                c4 * (2 * z2));
              cov_2r7v3rpmrq.s[488]++;
              this.vertex(vx, vy, vz);
            }
            cov_2r7v3rpmrq.s[489]++;
            this.endShape();
            cov_2r7v3rpmrq.s[490]++;
            return this;
          };

          /**
           * Draw a line given two points
           * @private
           * @param {Number} x0 x-coordinate of first vertex
           * @param {Number} y0 y-coordinate of first vertex
           * @param {Number} z0 z-coordinate of first vertex
           * @param {Number} x1 x-coordinate of second vertex
           * @param {Number} y1 y-coordinate of second vertex
           * @param {Number} z1 z-coordinate of second vertex
           * @chainable
           * @example
           * <div>
           * <code>
           * //draw a line
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           *
           * function draw() {
           *   background(200);
           *   rotateX(frameCount * 0.01);
           *   rotateY(frameCount * 0.01);
           *   // Use fill instead of stroke to change the color of shape.
           *   fill(255, 0, 0);
           *   line(10, 10, 0, 60, 60, 20);
           * }
           * </code>
           * </div>
           */ cov_2r7v3rpmrq.s[491]++;
          _main.default.RendererGL.prototype.line = function() {
            cov_2r7v3rpmrq.f[24]++;
            cov_2r7v3rpmrq.s[492]++;
            if (arguments.length === 6) {
              cov_2r7v3rpmrq.b[104][0]++;
              cov_2r7v3rpmrq.s[493]++;
              this.beginShape(constants.LINES);
              cov_2r7v3rpmrq.s[494]++;
              this.vertex(
                arguments.length <= 0 ? undefined : arguments[0],
                arguments.length <= 1 ? undefined : arguments[1],
                arguments.length <= 2 ? undefined : arguments[2]
              );
              cov_2r7v3rpmrq.s[495]++;
              this.vertex(
                arguments.length <= 3 ? undefined : arguments[3],
                arguments.length <= 4 ? undefined : arguments[4],
                arguments.length <= 5 ? undefined : arguments[5]
              );
              cov_2r7v3rpmrq.s[496]++;
              this.endShape();
            } else {
              cov_2r7v3rpmrq.b[104][1]++;
              cov_2r7v3rpmrq.s[497]++;
              if (arguments.length === 4) {
                cov_2r7v3rpmrq.b[105][0]++;
                cov_2r7v3rpmrq.s[498]++;
                this.beginShape(constants.LINES);
                cov_2r7v3rpmrq.s[499]++;
                this.vertex(
                  arguments.length <= 0 ? undefined : arguments[0],
                  arguments.length <= 1 ? undefined : arguments[1],
                  0
                );
                cov_2r7v3rpmrq.s[500]++;
                this.vertex(
                  arguments.length <= 2 ? undefined : arguments[2],
                  arguments.length <= 3 ? undefined : arguments[3],
                  0
                );
                cov_2r7v3rpmrq.s[501]++;
                this.endShape();
              } else {
                cov_2r7v3rpmrq.b[105][1]++;
              }
            }
            cov_2r7v3rpmrq.s[502]++;
            return this;
          };
          cov_2r7v3rpmrq.s[503]++;

          _main.default.RendererGL.prototype.bezierVertex = function() {
            cov_2r7v3rpmrq.f[25]++;
            cov_2r7v3rpmrq.s[504]++;
            if (this.immediateMode._bezierVertex.length === 0) {
              cov_2r7v3rpmrq.b[106][0]++;
              cov_2r7v3rpmrq.s[505]++;
              throw Error('vertex() must be used once before calling bezierVertex()');
            } else {
              cov_2r7v3rpmrq.b[106][1]++;
              var w_x = (cov_2r7v3rpmrq.s[506]++, []);
              var w_y = (cov_2r7v3rpmrq.s[507]++, []);
              var w_z = (cov_2r7v3rpmrq.s[508]++, []);
              var t, _x, _y, _z, i;
              var argLength = (cov_2r7v3rpmrq.s[509]++, arguments.length);
              cov_2r7v3rpmrq.s[510]++;

              t = 0;
              cov_2r7v3rpmrq.s[511]++;

              if (
                (cov_2r7v3rpmrq.b[108][0]++, this._lookUpTableBezier.length === 0) ||
                (cov_2r7v3rpmrq.b[108][1]++,
                this._lutBezierDetail !== this._pInst._curveDetail)
              ) {
                cov_2r7v3rpmrq.b[107][0]++;
                cov_2r7v3rpmrq.s[512]++;
                this._lookUpTableBezier = [];
                cov_2r7v3rpmrq.s[513]++;
                this._lutBezierDetail = this._pInst._curveDetail;
                var step = (cov_2r7v3rpmrq.s[514]++, 1 / this._lutBezierDetail);
                var start = (cov_2r7v3rpmrq.s[515]++, 0);
                var end = (cov_2r7v3rpmrq.s[516]++, 1);
                var j = (cov_2r7v3rpmrq.s[517]++, 0);
                cov_2r7v3rpmrq.s[518]++;
                while (start < 1) {
                  cov_2r7v3rpmrq.s[519]++;
                  t = parseFloat(start.toFixed(6));
                  cov_2r7v3rpmrq.s[520]++;
                  this._lookUpTableBezier[j] = this._bezierCoefficients(t);
                  cov_2r7v3rpmrq.s[521]++;
                  if (end.toFixed(6) === step.toFixed(6)) {
                    cov_2r7v3rpmrq.b[109][0]++;
                    cov_2r7v3rpmrq.s[522]++;
                    t = parseFloat(end.toFixed(6)) + parseFloat(start.toFixed(6));
                    cov_2r7v3rpmrq.s[523]++;
                    ++j;
                    cov_2r7v3rpmrq.s[524]++;
                    this._lookUpTableBezier[j] = this._bezierCoefficients(t);
                    cov_2r7v3rpmrq.s[525]++;
                    break;
                  } else {
                    cov_2r7v3rpmrq.b[109][1]++;
                  }
                  cov_2r7v3rpmrq.s[526]++;
                  start += step;
                  cov_2r7v3rpmrq.s[527]++;
                  end -= step;
                  cov_2r7v3rpmrq.s[528]++;
                  ++j;
                }
              } else {
                cov_2r7v3rpmrq.b[107][1]++;
              }

              var LUTLength = (cov_2r7v3rpmrq.s[529]++, this._lookUpTableBezier.length);
              cov_2r7v3rpmrq.s[530]++;

              if (argLength === 6) {
                cov_2r7v3rpmrq.b[110][0]++;
                cov_2r7v3rpmrq.s[531]++;
                this.isBezier = true;
                cov_2r7v3rpmrq.s[532]++;

                w_x = [
                  this.immediateMode._bezierVertex[0],
                  arguments.length <= 0 ? undefined : arguments[0],
                  arguments.length <= 2 ? undefined : arguments[2],
                  arguments.length <= 4 ? undefined : arguments[4]
                ];
                cov_2r7v3rpmrq.s[533]++;
                w_y = [
                  this.immediateMode._bezierVertex[1],
                  arguments.length <= 1 ? undefined : arguments[1],
                  arguments.length <= 3 ? undefined : arguments[3],
                  arguments.length <= 5 ? undefined : arguments[5]
                ];
                cov_2r7v3rpmrq.s[534]++;

                for (i = 0; i < LUTLength; i++) {
                  cov_2r7v3rpmrq.s[535]++;
                  _x =
                    w_x[0] * this._lookUpTableBezier[i][0] +
                    w_x[1] * this._lookUpTableBezier[i][1] +
                    w_x[2] * this._lookUpTableBezier[i][2] +
                    w_x[3] * this._lookUpTableBezier[i][3];
                  cov_2r7v3rpmrq.s[536]++;
                  _y =
                    w_y[0] * this._lookUpTableBezier[i][0] +
                    w_y[1] * this._lookUpTableBezier[i][1] +
                    w_y[2] * this._lookUpTableBezier[i][2] +
                    w_y[3] * this._lookUpTableBezier[i][3];
                  cov_2r7v3rpmrq.s[537]++;
                  this.vertex(_x, _y);
                }
                cov_2r7v3rpmrq.s[538]++;
                this.immediateMode._bezierVertex[0] =
                  arguments.length <= 4 ? undefined : arguments[4];
                cov_2r7v3rpmrq.s[539]++;
                this.immediateMode._bezierVertex[1] =
                  arguments.length <= 5 ? undefined : arguments[5];
              } else {
                cov_2r7v3rpmrq.b[110][1]++;
                cov_2r7v3rpmrq.s[540]++;
                if (argLength === 9) {
                  cov_2r7v3rpmrq.b[111][0]++;
                  cov_2r7v3rpmrq.s[541]++;
                  this.isBezier = true;
                  cov_2r7v3rpmrq.s[542]++;

                  w_x = [
                    this.immediateMode._bezierVertex[0],
                    arguments.length <= 0 ? undefined : arguments[0],
                    arguments.length <= 3 ? undefined : arguments[3],
                    arguments.length <= 6 ? undefined : arguments[6]
                  ];
                  cov_2r7v3rpmrq.s[543]++;
                  w_y = [
                    this.immediateMode._bezierVertex[1],
                    arguments.length <= 1 ? undefined : arguments[1],
                    arguments.length <= 4 ? undefined : arguments[4],
                    arguments.length <= 7 ? undefined : arguments[7]
                  ];
                  cov_2r7v3rpmrq.s[544]++;
                  w_z = [
                    this.immediateMode._bezierVertex[2],
                    arguments.length <= 2 ? undefined : arguments[2],
                    arguments.length <= 5 ? undefined : arguments[5],
                    arguments.length <= 8 ? undefined : arguments[8]
                  ];
                  cov_2r7v3rpmrq.s[545]++;
                  for (i = 0; i < LUTLength; i++) {
                    cov_2r7v3rpmrq.s[546]++;
                    _x =
                      w_x[0] * this._lookUpTableBezier[i][0] +
                      w_x[1] * this._lookUpTableBezier[i][1] +
                      w_x[2] * this._lookUpTableBezier[i][2] +
                      w_x[3] * this._lookUpTableBezier[i][3];
                    cov_2r7v3rpmrq.s[547]++;
                    _y =
                      w_y[0] * this._lookUpTableBezier[i][0] +
                      w_y[1] * this._lookUpTableBezier[i][1] +
                      w_y[2] * this._lookUpTableBezier[i][2] +
                      w_y[3] * this._lookUpTableBezier[i][3];
                    cov_2r7v3rpmrq.s[548]++;
                    _z =
                      w_z[0] * this._lookUpTableBezier[i][0] +
                      w_z[1] * this._lookUpTableBezier[i][1] +
                      w_z[2] * this._lookUpTableBezier[i][2] +
                      w_z[3] * this._lookUpTableBezier[i][3];
                    cov_2r7v3rpmrq.s[549]++;
                    this.vertex(_x, _y, _z);
                  }
                  cov_2r7v3rpmrq.s[550]++;
                  this.immediateMode._bezierVertex[0] =
                    arguments.length <= 6 ? undefined : arguments[6];
                  cov_2r7v3rpmrq.s[551]++;
                  this.immediateMode._bezierVertex[1] =
                    arguments.length <= 7 ? undefined : arguments[7];
                  cov_2r7v3rpmrq.s[552]++;
                  this.immediateMode._bezierVertex[2] =
                    arguments.length <= 8 ? undefined : arguments[8];
                } else {
                  cov_2r7v3rpmrq.b[111][1]++;
                }
              }
            }
          };
          cov_2r7v3rpmrq.s[553]++;

          _main.default.RendererGL.prototype.quadraticVertex = function() {
            cov_2r7v3rpmrq.f[26]++;
            cov_2r7v3rpmrq.s[554]++;
            if (this.immediateMode._quadraticVertex.length === 0) {
              cov_2r7v3rpmrq.b[112][0]++;
              cov_2r7v3rpmrq.s[555]++;
              throw Error('vertex() must be used once before calling quadraticVertex()');
            } else {
              cov_2r7v3rpmrq.b[112][1]++;
              var w_x = (cov_2r7v3rpmrq.s[556]++, []);
              var w_y = (cov_2r7v3rpmrq.s[557]++, []);
              var w_z = (cov_2r7v3rpmrq.s[558]++, []);
              var t, _x, _y, _z, i;
              var argLength = (cov_2r7v3rpmrq.s[559]++, arguments.length);
              cov_2r7v3rpmrq.s[560]++;

              t = 0;
              cov_2r7v3rpmrq.s[561]++;

              if (
                (cov_2r7v3rpmrq.b[114][0]++, this._lookUpTableQuadratic.length === 0) ||
                (cov_2r7v3rpmrq.b[114][1]++,
                this._lutQuadraticDetail !== this._pInst._curveDetail)
              ) {
                cov_2r7v3rpmrq.b[113][0]++;
                cov_2r7v3rpmrq.s[562]++;
                this._lookUpTableQuadratic = [];
                cov_2r7v3rpmrq.s[563]++;
                this._lutQuadraticDetail = this._pInst._curveDetail;
                var step = (cov_2r7v3rpmrq.s[564]++, 1 / this._lutQuadraticDetail);
                var start = (cov_2r7v3rpmrq.s[565]++, 0);
                var end = (cov_2r7v3rpmrq.s[566]++, 1);
                var j = (cov_2r7v3rpmrq.s[567]++, 0);
                cov_2r7v3rpmrq.s[568]++;
                while (start < 1) {
                  cov_2r7v3rpmrq.s[569]++;
                  t = parseFloat(start.toFixed(6));
                  cov_2r7v3rpmrq.s[570]++;
                  this._lookUpTableQuadratic[j] = this._quadraticCoefficients(t);
                  cov_2r7v3rpmrq.s[571]++;
                  if (end.toFixed(6) === step.toFixed(6)) {
                    cov_2r7v3rpmrq.b[115][0]++;
                    cov_2r7v3rpmrq.s[572]++;
                    t = parseFloat(end.toFixed(6)) + parseFloat(start.toFixed(6));
                    cov_2r7v3rpmrq.s[573]++;
                    ++j;
                    cov_2r7v3rpmrq.s[574]++;
                    this._lookUpTableQuadratic[j] = this._quadraticCoefficients(t);
                    cov_2r7v3rpmrq.s[575]++;
                    break;
                  } else {
                    cov_2r7v3rpmrq.b[115][1]++;
                  }
                  cov_2r7v3rpmrq.s[576]++;
                  start += step;
                  cov_2r7v3rpmrq.s[577]++;
                  end -= step;
                  cov_2r7v3rpmrq.s[578]++;
                  ++j;
                }
              } else {
                cov_2r7v3rpmrq.b[113][1]++;
              }

              var LUTLength = (cov_2r7v3rpmrq.s[579]++, this._lookUpTableQuadratic.length);
              cov_2r7v3rpmrq.s[580]++;

              if (argLength === 4) {
                cov_2r7v3rpmrq.b[116][0]++;
                cov_2r7v3rpmrq.s[581]++;
                this.isQuadratic = true;
                cov_2r7v3rpmrq.s[582]++;

                w_x = [
                  this.immediateMode._quadraticVertex[0],
                  arguments.length <= 0 ? undefined : arguments[0],
                  arguments.length <= 2 ? undefined : arguments[2]
                ];
                cov_2r7v3rpmrq.s[583]++;
                w_y = [
                  this.immediateMode._quadraticVertex[1],
                  arguments.length <= 1 ? undefined : arguments[1],
                  arguments.length <= 3 ? undefined : arguments[3]
                ];
                cov_2r7v3rpmrq.s[584]++;

                for (i = 0; i < LUTLength; i++) {
                  cov_2r7v3rpmrq.s[585]++;
                  _x =
                    w_x[0] * this._lookUpTableQuadratic[i][0] +
                    w_x[1] * this._lookUpTableQuadratic[i][1] +
                    w_x[2] * this._lookUpTableQuadratic[i][2];
                  cov_2r7v3rpmrq.s[586]++;
                  _y =
                    w_y[0] * this._lookUpTableQuadratic[i][0] +
                    w_y[1] * this._lookUpTableQuadratic[i][1] +
                    w_y[2] * this._lookUpTableQuadratic[i][2];
                  cov_2r7v3rpmrq.s[587]++;
                  this.vertex(_x, _y);
                }
                cov_2r7v3rpmrq.s[588]++;

                this.immediateMode._quadraticVertex[0] =
                  arguments.length <= 2 ? undefined : arguments[2];
                cov_2r7v3rpmrq.s[589]++;
                this.immediateMode._quadraticVertex[1] =
                  arguments.length <= 3 ? undefined : arguments[3];
              } else {
                cov_2r7v3rpmrq.b[116][1]++;
                cov_2r7v3rpmrq.s[590]++;
                if (argLength === 6) {
                  cov_2r7v3rpmrq.b[117][0]++;
                  cov_2r7v3rpmrq.s[591]++;
                  this.isQuadratic = true;
                  cov_2r7v3rpmrq.s[592]++;

                  w_x = [
                    this.immediateMode._quadraticVertex[0],
                    arguments.length <= 0 ? undefined : arguments[0],
                    arguments.length <= 3 ? undefined : arguments[3]
                  ];
                  cov_2r7v3rpmrq.s[593]++;
                  w_y = [
                    this.immediateMode._quadraticVertex[1],
                    arguments.length <= 1 ? undefined : arguments[1],
                    arguments.length <= 4 ? undefined : arguments[4]
                  ];
                  cov_2r7v3rpmrq.s[594]++;
                  w_z = [
                    this.immediateMode._quadraticVertex[2],
                    arguments.length <= 2 ? undefined : arguments[2],
                    arguments.length <= 5 ? undefined : arguments[5]
                  ];
                  cov_2r7v3rpmrq.s[595]++;

                  for (i = 0; i < LUTLength; i++) {
                    cov_2r7v3rpmrq.s[596]++;
                    _x =
                      w_x[0] * this._lookUpTableQuadratic[i][0] +
                      w_x[1] * this._lookUpTableQuadratic[i][1] +
                      w_x[2] * this._lookUpTableQuadratic[i][2];
                    cov_2r7v3rpmrq.s[597]++;
                    _y =
                      w_y[0] * this._lookUpTableQuadratic[i][0] +
                      w_y[1] * this._lookUpTableQuadratic[i][1] +
                      w_y[2] * this._lookUpTableQuadratic[i][2];
                    cov_2r7v3rpmrq.s[598]++;
                    _z =
                      w_z[0] * this._lookUpTableQuadratic[i][0] +
                      w_z[1] * this._lookUpTableQuadratic[i][1] +
                      w_z[2] * this._lookUpTableQuadratic[i][2];
                    cov_2r7v3rpmrq.s[599]++;
                    this.vertex(_x, _y, _z);
                  }
                  cov_2r7v3rpmrq.s[600]++;

                  this.immediateMode._quadraticVertex[0] =
                    arguments.length <= 3 ? undefined : arguments[3];
                  cov_2r7v3rpmrq.s[601]++;
                  this.immediateMode._quadraticVertex[1] =
                    arguments.length <= 4 ? undefined : arguments[4];
                  cov_2r7v3rpmrq.s[602]++;
                  this.immediateMode._quadraticVertex[2] =
                    arguments.length <= 5 ? undefined : arguments[5];
                } else {
                  cov_2r7v3rpmrq.b[117][1]++;
                }
              }
            }
          };
          cov_2r7v3rpmrq.s[603]++;

          _main.default.RendererGL.prototype.curveVertex = function() {
            cov_2r7v3rpmrq.f[27]++;
            var w_x = (cov_2r7v3rpmrq.s[604]++, []);
            var w_y = (cov_2r7v3rpmrq.s[605]++, []);
            var w_z = (cov_2r7v3rpmrq.s[606]++, []);
            var t, _x, _y, _z, i;
            cov_2r7v3rpmrq.s[607]++;
            t = 0;
            var argLength = (cov_2r7v3rpmrq.s[608]++, arguments.length);
            cov_2r7v3rpmrq.s[609]++;

            if (
              (cov_2r7v3rpmrq.b[119][0]++, this._lookUpTableBezier.length === 0) ||
              (cov_2r7v3rpmrq.b[119][1]++,
              this._lutBezierDetail !== this._pInst._curveDetail)
            ) {
              cov_2r7v3rpmrq.b[118][0]++;
              cov_2r7v3rpmrq.s[610]++;
              this._lookUpTableBezier = [];
              cov_2r7v3rpmrq.s[611]++;
              this._lutBezierDetail = this._pInst._curveDetail;
              var step = (cov_2r7v3rpmrq.s[612]++, 1 / this._lutBezierDetail);
              var start = (cov_2r7v3rpmrq.s[613]++, 0);
              var end = (cov_2r7v3rpmrq.s[614]++, 1);
              var j = (cov_2r7v3rpmrq.s[615]++, 0);
              cov_2r7v3rpmrq.s[616]++;
              while (start < 1) {
                cov_2r7v3rpmrq.s[617]++;
                t = parseFloat(start.toFixed(6));
                cov_2r7v3rpmrq.s[618]++;
                this._lookUpTableBezier[j] = this._bezierCoefficients(t);
                cov_2r7v3rpmrq.s[619]++;
                if (end.toFixed(6) === step.toFixed(6)) {
                  cov_2r7v3rpmrq.b[120][0]++;
                  cov_2r7v3rpmrq.s[620]++;
                  t = parseFloat(end.toFixed(6)) + parseFloat(start.toFixed(6));
                  cov_2r7v3rpmrq.s[621]++;
                  ++j;
                  cov_2r7v3rpmrq.s[622]++;
                  this._lookUpTableBezier[j] = this._bezierCoefficients(t);
                  cov_2r7v3rpmrq.s[623]++;
                  break;
                } else {
                  cov_2r7v3rpmrq.b[120][1]++;
                }
                cov_2r7v3rpmrq.s[624]++;
                start += step;
                cov_2r7v3rpmrq.s[625]++;
                end -= step;
                cov_2r7v3rpmrq.s[626]++;
                ++j;
              }
            } else {
              cov_2r7v3rpmrq.b[118][1]++;
            }

            var LUTLength = (cov_2r7v3rpmrq.s[627]++, this._lookUpTableBezier.length);
            cov_2r7v3rpmrq.s[628]++;

            if (argLength === 2) {
              cov_2r7v3rpmrq.b[121][0]++;
              cov_2r7v3rpmrq.s[629]++;
              this.immediateMode._curveVertex.push(
                arguments.length <= 0 ? undefined : arguments[0]
              );
              cov_2r7v3rpmrq.s[630]++;
              this.immediateMode._curveVertex.push(
                arguments.length <= 1 ? undefined : arguments[1]
              );
              cov_2r7v3rpmrq.s[631]++;
              if (this.immediateMode._curveVertex.length === 8) {
                cov_2r7v3rpmrq.b[122][0]++;
                cov_2r7v3rpmrq.s[632]++;
                this.isCurve = true;
                cov_2r7v3rpmrq.s[633]++;
                w_x = this._bezierToCatmull([
                  this.immediateMode._curveVertex[0],
                  this.immediateMode._curveVertex[2],
                  this.immediateMode._curveVertex[4],
                  this.immediateMode._curveVertex[6]
                ]);
                cov_2r7v3rpmrq.s[634]++;

                w_y = this._bezierToCatmull([
                  this.immediateMode._curveVertex[1],
                  this.immediateMode._curveVertex[3],
                  this.immediateMode._curveVertex[5],
                  this.immediateMode._curveVertex[7]
                ]);
                cov_2r7v3rpmrq.s[635]++;

                for (i = 0; i < LUTLength; i++) {
                  cov_2r7v3rpmrq.s[636]++;
                  _x =
                    w_x[0] * this._lookUpTableBezier[i][0] +
                    w_x[1] * this._lookUpTableBezier[i][1] +
                    w_x[2] * this._lookUpTableBezier[i][2] +
                    w_x[3] * this._lookUpTableBezier[i][3];
                  cov_2r7v3rpmrq.s[637]++;
                  _y =
                    w_y[0] * this._lookUpTableBezier[i][0] +
                    w_y[1] * this._lookUpTableBezier[i][1] +
                    w_y[2] * this._lookUpTableBezier[i][2] +
                    w_y[3] * this._lookUpTableBezier[i][3];
                  cov_2r7v3rpmrq.s[638]++;
                  this.vertex(_x, _y);
                }
                cov_2r7v3rpmrq.s[639]++;
                for (i = 0; i < argLength; i++) {
                  cov_2r7v3rpmrq.s[640]++;
                  this.immediateMode._curveVertex.shift();
                }
              } else {
                cov_2r7v3rpmrq.b[122][1]++;
              }
            } else {
              cov_2r7v3rpmrq.b[121][1]++;
              cov_2r7v3rpmrq.s[641]++;
              if (argLength === 3) {
                cov_2r7v3rpmrq.b[123][0]++;
                cov_2r7v3rpmrq.s[642]++;
                this.immediateMode._curveVertex.push(
                  arguments.length <= 0 ? undefined : arguments[0]
                );
                cov_2r7v3rpmrq.s[643]++;
                this.immediateMode._curveVertex.push(
                  arguments.length <= 1 ? undefined : arguments[1]
                );
                cov_2r7v3rpmrq.s[644]++;
                this.immediateMode._curveVertex.push(
                  arguments.length <= 2 ? undefined : arguments[2]
                );
                cov_2r7v3rpmrq.s[645]++;
                if (this.immediateMode._curveVertex.length === 12) {
                  cov_2r7v3rpmrq.b[124][0]++;
                  cov_2r7v3rpmrq.s[646]++;
                  this.isCurve = true;
                  cov_2r7v3rpmrq.s[647]++;
                  w_x = this._bezierToCatmull([
                    this.immediateMode._curveVertex[0],
                    this.immediateMode._curveVertex[3],
                    this.immediateMode._curveVertex[6],
                    this.immediateMode._curveVertex[9]
                  ]);
                  cov_2r7v3rpmrq.s[648]++;

                  w_y = this._bezierToCatmull([
                    this.immediateMode._curveVertex[1],
                    this.immediateMode._curveVertex[4],
                    this.immediateMode._curveVertex[7],
                    this.immediateMode._curveVertex[10]
                  ]);
                  cov_2r7v3rpmrq.s[649]++;

                  w_z = this._bezierToCatmull([
                    this.immediateMode._curveVertex[2],
                    this.immediateMode._curveVertex[5],
                    this.immediateMode._curveVertex[8],
                    this.immediateMode._curveVertex[11]
                  ]);
                  cov_2r7v3rpmrq.s[650]++;

                  for (i = 0; i < LUTLength; i++) {
                    cov_2r7v3rpmrq.s[651]++;
                    _x =
                      w_x[0] * this._lookUpTableBezier[i][0] +
                      w_x[1] * this._lookUpTableBezier[i][1] +
                      w_x[2] * this._lookUpTableBezier[i][2] +
                      w_x[3] * this._lookUpTableBezier[i][3];
                    cov_2r7v3rpmrq.s[652]++;
                    _y =
                      w_y[0] * this._lookUpTableBezier[i][0] +
                      w_y[1] * this._lookUpTableBezier[i][1] +
                      w_y[2] * this._lookUpTableBezier[i][2] +
                      w_y[3] * this._lookUpTableBezier[i][3];
                    cov_2r7v3rpmrq.s[653]++;
                    _z =
                      w_z[0] * this._lookUpTableBezier[i][0] +
                      w_z[1] * this._lookUpTableBezier[i][1] +
                      w_z[2] * this._lookUpTableBezier[i][2] +
                      w_z[3] * this._lookUpTableBezier[i][3];
                    cov_2r7v3rpmrq.s[654]++;
                    this.vertex(_x, _y, _z);
                  }
                  cov_2r7v3rpmrq.s[655]++;
                  for (i = 0; i < argLength; i++) {
                    cov_2r7v3rpmrq.s[656]++;
                    this.immediateMode._curveVertex.shift();
                  }
                } else {
                  cov_2r7v3rpmrq.b[124][1]++;
                }
              } else {
                cov_2r7v3rpmrq.b[123][1]++;
              }
            }
          };
          cov_2r7v3rpmrq.s[657]++;

          _main.default.RendererGL.prototype.image = function(
            img,
            sx,
            sy,
            sWidth,
            sHeight,
            dx,
            dy,
            dWidth,
            dHeight
          ) {
            cov_2r7v3rpmrq.f[28]++;
            cov_2r7v3rpmrq.s[658]++;
            if (this._isErasing) {
              cov_2r7v3rpmrq.b[125][0]++;
              cov_2r7v3rpmrq.s[659]++;
              this.blendMode(this._cachedBlendMode);
            } else {
              cov_2r7v3rpmrq.b[125][1]++;
            }
            cov_2r7v3rpmrq.s[660]++;

            this._pInst.push();
            cov_2r7v3rpmrq.s[661]++;

            this._pInst.noLights();
            cov_2r7v3rpmrq.s[662]++;

            this._pInst.texture(img);
            cov_2r7v3rpmrq.s[663]++;
            this._pInst.textureMode(constants.NORMAL);

            var u0 = (cov_2r7v3rpmrq.s[664]++, 0);
            cov_2r7v3rpmrq.s[665]++;
            if (sx <= img.width) {
              cov_2r7v3rpmrq.b[126][0]++;
              cov_2r7v3rpmrq.s[666]++;
              u0 = sx / img.width;
            } else {
              cov_2r7v3rpmrq.b[126][1]++;
            }

            var u1 = (cov_2r7v3rpmrq.s[667]++, 1);
            cov_2r7v3rpmrq.s[668]++;
            if (sx + sWidth <= img.width) {
              cov_2r7v3rpmrq.b[127][0]++;
              cov_2r7v3rpmrq.s[669]++;
              u1 = (sx + sWidth) / img.width;
            } else {
              cov_2r7v3rpmrq.b[127][1]++;
            }

            var v0 = (cov_2r7v3rpmrq.s[670]++, 0);
            cov_2r7v3rpmrq.s[671]++;
            if (sy <= img.height) {
              cov_2r7v3rpmrq.b[128][0]++;
              cov_2r7v3rpmrq.s[672]++;
              v0 = sy / img.height;
            } else {
              cov_2r7v3rpmrq.b[128][1]++;
            }

            var v1 = (cov_2r7v3rpmrq.s[673]++, 1);
            cov_2r7v3rpmrq.s[674]++;
            if (sy + sHeight <= img.height) {
              cov_2r7v3rpmrq.b[129][0]++;
              cov_2r7v3rpmrq.s[675]++;
              v1 = (sy + sHeight) / img.height;
            } else {
              cov_2r7v3rpmrq.b[129][1]++;
            }
            cov_2r7v3rpmrq.s[676]++;

            this.beginShape();
            cov_2r7v3rpmrq.s[677]++;
            this.vertex(dx, dy, 0, u0, v0);
            cov_2r7v3rpmrq.s[678]++;
            this.vertex(dx + dWidth, dy, 0, u1, v0);
            cov_2r7v3rpmrq.s[679]++;
            this.vertex(dx + dWidth, dy + dHeight, 0, u1, v1);
            cov_2r7v3rpmrq.s[680]++;
            this.vertex(dx, dy + dHeight, 0, u0, v1);
            cov_2r7v3rpmrq.s[681]++;
            this.endShape(constants.CLOSE);
            cov_2r7v3rpmrq.s[682]++;

            this._pInst.pop();
            cov_2r7v3rpmrq.s[683]++;

            if (this._isErasing) {
              cov_2r7v3rpmrq.b[130][0]++;
              cov_2r7v3rpmrq.s[684]++;
              this.blendMode(constants.REMOVE);
            } else {
              cov_2r7v3rpmrq.b[130][1]++;
            }
          };
          var _default = _main.default;
          exports.default = _default;
        },
        {
          '../core/constants': 272,
          '../core/main': 283,
          './p5.Geometry': 332,
          'core-js/modules/es.array.concat': 166,
          'core-js/modules/es.number.to-fixed': 187
        }
      ],
      327: [
        function(_dereq_, module, exports) {
          'use strict';
          function _typeof(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof = function _typeof(obj) {
                return typeof obj;
              };
            } else {
              _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof(obj);
          }
          var cov_27lc6w6x5f = (function() {
            var path = '/Users/outofambit/src/p5.js/src/webgl/interaction.js';
            var hash = 'ab935aeed44a0c6d3e7e4d4c52e10e8b476fff6a';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/webgl/interaction.js',
              statementMap: {
                '0': { start: { line: 49, column: 0 }, end: { line: 143, column: 2 } },
                '1': { start: { line: 50, column: 2 }, end: { line: 50, column: 33 } },
                '2': { start: { line: 51, column: 2 }, end: { line: 51, column: 52 } },
                '3': { start: { line: 55, column: 4 }, end: { line: 58, column: 19 } },
                '4': { start: { line: 59, column: 2 }, end: { line: 59, column: 29 } },
                '5': { start: { line: 59, column: 22 }, end: { line: 59, column: 29 } },
                '6': { start: { line: 61, column: 14 }, end: { line: 61, column: 39 } },
                '7': { start: { line: 63, column: 2 }, end: { line: 65, column: 3 } },
                '8': { start: { line: 64, column: 4 }, end: { line: 64, column: 21 } },
                '9': { start: { line: 66, column: 2 }, end: { line: 68, column: 3 } },
                '10': { start: { line: 67, column: 4 }, end: { line: 67, column: 32 } },
                '11': { start: { line: 69, column: 2 }, end: { line: 71, column: 3 } },
                '12': { start: { line: 70, column: 4 }, end: { line: 70, column: 23 } },
                '13': { start: { line: 79, column: 2 }, end: { line: 82, column: 3 } },
                '14': { start: { line: 80, column: 4 }, end: { line: 80, column: 44 } },
                '15': { start: { line: 80, column: 38 }, end: { line: 80, column: 43 } },
                '16': { start: { line: 81, column: 4 }, end: { line: 81, column: 51 } },
                '17': { start: { line: 86, column: 2 }, end: { line: 89, column: 3 } },
                '18': { start: { line: 87, column: 4 }, end: { line: 87, column: 38 } },
                '19': { start: { line: 87, column: 32 }, end: { line: 87, column: 37 } },
                '20': { start: { line: 88, column: 4 }, end: { line: 88, column: 52 } },
                '21': { start: { line: 91, column: 22 }, end: { line: 91, column: 73 } },
                '22': { start: { line: 94, column: 2 }, end: { line: 101, column: 3 } },
                '23': { start: { line: 96, column: 4 }, end: { line: 100, column: 5 } },
                '24': { start: { line: 97, column: 6 }, end: { line: 97, column: 73 } },
                '25': { start: { line: 99, column: 6 }, end: { line: 99, column: 74 } },
                '26': { start: { line: 103, column: 2 }, end: { line: 141, column: 3 } },
                '27': { start: { line: 105, column: 4 }, end: { line: 140, column: 5 } },
                '28': { start: { line: 107, column: 8 }, end: { line: 107, column: 66 } },
                '29': { start: { line: 109, column: 8 }, end: { line: 109, column: 65 } },
                '30': { start: { line: 110, column: 6 }, end: { line: 110, column: 64 } },
                '31': { start: { line: 111, column: 11 }, end: { line: 140, column: 5 } },
                '32': { start: { line: 114, column: 20 }, end: { line: 114, column: 39 } },
                '33': { start: { line: 117, column: 19 }, end: { line: 117, column: 79 } },
                '34': { start: { line: 118, column: 6 }, end: { line: 121, column: 7 } },
                '35': { start: { line: 119, column: 8 }, end: { line: 119, column: 27 } },
                '36': { start: { line: 120, column: 8 }, end: { line: 120, column: 27 } },
                '37': { start: { line: 124, column: 19 }, end: { line: 124, column: 79 } },
                '38': { start: { line: 125, column: 6 }, end: { line: 128, column: 7 } },
                '39': { start: { line: 126, column: 8 }, end: { line: 126, column: 27 } },
                '40': { start: { line: 127, column: 8 }, end: { line: 127, column: 27 } },
                '41': { start: { line: 131, column: 17 }, end: { line: 131, column: 65 } },
                '42': { start: { line: 132, column: 17 }, end: { line: 132, column: 65 } },
                '43': { start: { line: 135, column: 6 }, end: { line: 139, column: 8 } },
                '44': { start: { line: 142, column: 2 }, end: { line: 142, column: 14 } },
                '45': { start: { line: 315, column: 0 }, end: { line: 351, column: 2 } },
                '46': { start: { line: 316, column: 2 }, end: { line: 316, column: 30 } },
                '47': { start: { line: 317, column: 2 }, end: { line: 317, column: 44 } },
                '48': { start: { line: 320, column: 2 }, end: { line: 328, column: 3 } },
                '49': { start: { line: 320, column: 15 }, end: { line: 320, column: 54 } },
                '50': { start: { line: 322, column: 4 }, end: { line: 327, column: 5 } },
                '51': { start: { line: 326, column: 6 }, end: { line: 326, column: 48 } },
                '52': { start: { line: 331, column: 2 }, end: { line: 350, column: 3 } },
                '53': { start: { line: 332, column: 4 }, end: { line: 335, column: 6 } },
                '54': { start: { line: 336, column: 9 }, end: { line: 350, column: 3 } },
                '55': { start: { line: 337, column: 4 }, end: { line: 340, column: 6 } },
                '56': { start: { line: 342, column: 4 }, end: { line: 345, column: 6 } },
                '57': { start: { line: 346, column: 4 }, end: { line: 349, column: 6 } },
                '58': { start: { line: 383, column: 0 }, end: { line: 396, column: 2 } },
                '59': { start: { line: 384, column: 2 }, end: { line: 384, column: 32 } },
                '60': { start: { line: 387, column: 2 }, end: { line: 395, column: 3 } },
                '61': { start: { line: 387, column: 15 }, end: { line: 387, column: 54 } },
                '62': { start: { line: 389, column: 4 }, end: { line: 394, column: 5 } },
                '63': { start: { line: 393, column: 6 }, end: { line: 393, column: 48 } },
                '64': { start: { line: 408, column: 0 }, end: { line: 473, column: 2 } },
                '65': { start: { line: 409, column: 2 }, end: { line: 411, column: 3 } },
                '66': { start: { line: 410, column: 4 }, end: { line: 410, column: 26 } },
                '67': { start: { line: 412, column: 2 }, end: { line: 415, column: 3 } },
                '68': { start: { line: 414, column: 4 }, end: { line: 414, column: 68 } },
                '69': { start: { line: 416, column: 2 }, end: { line: 418, column: 3 } },
                '70': { start: { line: 417, column: 4 }, end: { line: 417, column: 13 } },
                '71': { start: { line: 419, column: 2 }, end: { line: 421, column: 3 } },
                '72': { start: { line: 420, column: 4 }, end: { line: 420, column: 13 } },
                '73': { start: { line: 422, column: 2 }, end: { line: 424, column: 3 } },
                '74': { start: { line: 423, column: 4 }, end: { line: 423, column: 13 } },
                '75': { start: { line: 426, column: 18 }, end: { line: 426, column: 32 } },
                '76': { start: { line: 427, column: 19 }, end: { line: 427, column: 27 } },
                '77': { start: { line: 429, column: 2 }, end: { line: 472, column: 4 } },
                '78': { start: { line: 430, column: 4 }, end: { line: 430, column: 16 } },
                '79': { start: { line: 431, column: 4 }, end: { line: 435, column: 6 } },
                '80': { start: { line: 436, column: 4 }, end: { line: 453, column: 6 } },
                '81': { start: { line: 456, column: 4 }, end: { line: 461, column: 5 } },
                '82': { start: { line: 456, column: 17 }, end: { line: 456, column: 18 } },
                '83': { start: { line: 457, column: 6 }, end: { line: 457, column: 34 } },
                '84': { start: { line: 458, column: 6 }, end: { line: 458, column: 73 } },
                '85': { start: { line: 459, column: 6 }, end: { line: 459, column: 73 } },
                '86': { start: { line: 460, column: 6 }, end: { line: 460, column: 22 } },
                '87': { start: { line: 464, column: 4 }, end: { line: 469, column: 5 } },
                '88': { start: { line: 464, column: 17 }, end: { line: 464, column: 18 } },
                '89': { start: { line: 465, column: 6 }, end: { line: 465, column: 34 } },
                '90': { start: { line: 466, column: 6 }, end: { line: 466, column: 73 } },
                '91': { start: { line: 467, column: 6 }, end: { line: 467, column: 73 } },
                '92': { start: { line: 468, column: 6 }, end: { line: 468, column: 22 } },
                '93': { start: { line: 471, column: 4 }, end: { line: 471, column: 15 } },
                '94': { start: { line: 484, column: 0 }, end: { line: 540, column: 2 } },
                '95': { start: { line: 485, column: 2 }, end: { line: 487, column: 3 } },
                '96': { start: { line: 486, column: 4 }, end: { line: 486, column: 55 } },
                '97': { start: { line: 488, column: 2 }, end: { line: 490, column: 3 } },
                '98': { start: { line: 489, column: 4 }, end: { line: 489, column: 27 } },
                '99': { start: { line: 491, column: 2 }, end: { line: 493, column: 3 } },
                '100': { start: { line: 492, column: 4 }, end: { line: 492, column: 16 } },
                '101': { start: { line: 494, column: 2 }, end: { line: 496, column: 3 } },
                '102': { start: { line: 495, column: 4 }, end: { line: 495, column: 16 } },
                '103': { start: { line: 498, column: 2 }, end: { line: 539, column: 4 } },
                '104': { start: { line: 499, column: 4 }, end: { line: 499, column: 16 } },
                '105': { start: { line: 500, column: 4 }, end: { line: 517, column: 6 } },
                '106': { start: { line: 520, column: 4 }, end: { line: 520, column: 25 } },
                '107': { start: { line: 521, column: 4 }, end: { line: 521, column: 27 } },
                '108': { start: { line: 522, column: 4 }, end: { line: 522, column: 32 } },
                '109': { start: { line: 523, column: 4 }, end: { line: 523, column: 34 } },
                '110': { start: { line: 524, column: 4 }, end: { line: 524, column: 41 } },
                '111': { start: { line: 525, column: 4 }, end: { line: 525, column: 20 } },
                '112': { start: { line: 527, column: 4 }, end: { line: 527, column: 27 } },
                '113': { start: { line: 528, column: 4 }, end: { line: 528, column: 32 } },
                '114': { start: { line: 529, column: 4 }, end: { line: 529, column: 34 } },
                '115': { start: { line: 530, column: 4 }, end: { line: 530, column: 41 } },
                '116': { start: { line: 531, column: 4 }, end: { line: 531, column: 20 } },
                '117': { start: { line: 533, column: 4 }, end: { line: 533, column: 27 } },
                '118': { start: { line: 534, column: 4 }, end: { line: 534, column: 32 } },
                '119': { start: { line: 535, column: 4 }, end: { line: 535, column: 34 } },
                '120': { start: { line: 536, column: 4 }, end: { line: 536, column: 41 } },
                '121': { start: { line: 537, column: 4 }, end: { line: 537, column: 20 } },
                '122': { start: { line: 538, column: 4 }, end: { line: 538, column: 15 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 49, column: 28 }, end: { line: 49, column: 29 } },
                  loc: { start: { line: 49, column: 79 }, end: { line: 143, column: 1 } },
                  line: 49
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 80, column: 32 }, end: { line: 80, column: 33 } },
                  loc: { start: { line: 80, column: 38 }, end: { line: 80, column: 43 } },
                  line: 80
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: { start: { line: 87, column: 26 }, end: { line: 87, column: 27 } },
                  loc: { start: { line: 87, column: 32 }, end: { line: 87, column: 37 } },
                  line: 87
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 315, column: 25 },
                    end: { line: 315, column: 26 }
                  },
                  loc: { start: { line: 315, column: 43 }, end: { line: 351, column: 1 } },
                  line: 315
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 383, column: 27 },
                    end: { line: 383, column: 28 }
                  },
                  loc: { start: { line: 383, column: 38 }, end: { line: 396, column: 1 } },
                  line: 383
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 408, column: 21 },
                    end: { line: 408, column: 22 }
                  },
                  loc: { start: { line: 408, column: 63 }, end: { line: 473, column: 1 } },
                  line: 408
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: { start: { line: 429, column: 9 }, end: { line: 429, column: 10 } },
                  loc: { start: { line: 429, column: 20 }, end: { line: 472, column: 3 } },
                  line: 429
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 484, column: 25 },
                    end: { line: 484, column: 26 }
                  },
                  loc: { start: { line: 484, column: 58 }, end: { line: 540, column: 1 } },
                  line: 484
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: { start: { line: 498, column: 9 }, end: { line: 498, column: 10 } },
                  loc: { start: { line: 498, column: 20 }, end: { line: 539, column: 3 } },
                  line: 498
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 55, column: 4 }, end: { line: 58, column: 19 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 55, column: 4 }, end: { line: 55, column: 28 } },
                    { start: { line: 56, column: 4 }, end: { line: 56, column: 19 } },
                    { start: { line: 57, column: 4 }, end: { line: 57, column: 29 } },
                    { start: { line: 58, column: 4 }, end: { line: 58, column: 19 } }
                  ],
                  line: 55
                },
                '1': {
                  loc: { start: { line: 59, column: 2 }, end: { line: 59, column: 29 } },
                  type: 'if',
                  locations: [
                    { start: { line: 59, column: 2 }, end: { line: 59, column: 29 } },
                    { start: { line: 59, column: 2 }, end: { line: 59, column: 29 } }
                  ],
                  line: 59
                },
                '2': {
                  loc: { start: { line: 63, column: 2 }, end: { line: 65, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 63, column: 2 }, end: { line: 65, column: 3 } },
                    { start: { line: 63, column: 2 }, end: { line: 65, column: 3 } }
                  ],
                  line: 63
                },
                '3': {
                  loc: { start: { line: 66, column: 2 }, end: { line: 68, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 66, column: 2 }, end: { line: 68, column: 3 } },
                    { start: { line: 66, column: 2 }, end: { line: 68, column: 3 } }
                  ],
                  line: 66
                },
                '4': {
                  loc: { start: { line: 69, column: 2 }, end: { line: 71, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 69, column: 2 }, end: { line: 71, column: 3 } },
                    { start: { line: 69, column: 2 }, end: { line: 71, column: 3 } }
                  ],
                  line: 69
                },
                '5': {
                  loc: { start: { line: 79, column: 2 }, end: { line: 82, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 79, column: 2 }, end: { line: 82, column: 3 } },
                    { start: { line: 79, column: 2 }, end: { line: 82, column: 3 } }
                  ],
                  line: 79
                },
                '6': {
                  loc: { start: { line: 86, column: 2 }, end: { line: 89, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 86, column: 2 }, end: { line: 89, column: 3 } },
                    { start: { line: 86, column: 2 }, end: { line: 89, column: 3 } }
                  ],
                  line: 86
                },
                '7': {
                  loc: { start: { line: 91, column: 22 }, end: { line: 91, column: 73 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 91, column: 49 }, end: { line: 91, column: 60 } },
                    { start: { line: 91, column: 63 }, end: { line: 91, column: 73 } }
                  ],
                  line: 91
                },
                '8': {
                  loc: { start: { line: 94, column: 2 }, end: { line: 101, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 94, column: 2 }, end: { line: 101, column: 3 } },
                    { start: { line: 94, column: 2 }, end: { line: 101, column: 3 } }
                  ],
                  line: 94
                },
                '9': {
                  loc: { start: { line: 96, column: 4 }, end: { line: 100, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 96, column: 4 }, end: { line: 100, column: 5 } },
                    { start: { line: 96, column: 4 }, end: { line: 100, column: 5 } }
                  ],
                  line: 96
                },
                '10': {
                  loc: { start: { line: 103, column: 2 }, end: { line: 141, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 103, column: 2 }, end: { line: 141, column: 3 } },
                    { start: { line: 103, column: 2 }, end: { line: 141, column: 3 } }
                  ],
                  line: 103
                },
                '11': {
                  loc: { start: { line: 105, column: 4 }, end: { line: 140, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 105, column: 4 }, end: { line: 140, column: 5 } },
                    { start: { line: 105, column: 4 }, end: { line: 140, column: 5 } }
                  ],
                  line: 105
                },
                '12': {
                  loc: { start: { line: 111, column: 11 }, end: { line: 140, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 111, column: 11 }, end: { line: 140, column: 5 } },
                    { start: { line: 111, column: 11 }, end: { line: 140, column: 5 } }
                  ],
                  line: 111
                },
                '13': {
                  loc: { start: { line: 118, column: 6 }, end: { line: 121, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 118, column: 6 }, end: { line: 121, column: 7 } },
                    { start: { line: 118, column: 6 }, end: { line: 121, column: 7 } }
                  ],
                  line: 118
                },
                '14': {
                  loc: { start: { line: 125, column: 6 }, end: { line: 128, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 125, column: 6 }, end: { line: 128, column: 7 } },
                    { start: { line: 125, column: 6 }, end: { line: 128, column: 7 } }
                  ],
                  line: 125
                },
                '15': {
                  loc: { start: { line: 322, column: 4 }, end: { line: 327, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 322, column: 4 }, end: { line: 327, column: 5 } },
                    { start: { line: 322, column: 4 }, end: { line: 327, column: 5 } }
                  ],
                  line: 322
                },
                '16': {
                  loc: { start: { line: 323, column: 6 }, end: { line: 324, column: 80 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 323, column: 6 }, end: { line: 323, column: 76 } },
                    { start: { line: 324, column: 6 }, end: { line: 324, column: 80 } }
                  ],
                  line: 323
                },
                '17': {
                  loc: { start: { line: 331, column: 2 }, end: { line: 350, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 331, column: 2 }, end: { line: 350, column: 3 } },
                    { start: { line: 331, column: 2 }, end: { line: 350, column: 3 } }
                  ],
                  line: 331
                },
                '18': {
                  loc: { start: { line: 336, column: 9 }, end: { line: 350, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 336, column: 9 }, end: { line: 350, column: 3 } },
                    { start: { line: 336, column: 9 }, end: { line: 350, column: 3 } }
                  ],
                  line: 336
                },
                '19': {
                  loc: { start: { line: 389, column: 4 }, end: { line: 394, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 389, column: 4 }, end: { line: 394, column: 5 } },
                    { start: { line: 389, column: 4 }, end: { line: 394, column: 5 } }
                  ],
                  line: 389
                },
                '20': {
                  loc: { start: { line: 390, column: 6 }, end: { line: 391, column: 80 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 390, column: 6 }, end: { line: 390, column: 76 } },
                    { start: { line: 391, column: 6 }, end: { line: 391, column: 80 } }
                  ],
                  line: 390
                },
                '21': {
                  loc: { start: { line: 409, column: 2 }, end: { line: 411, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 409, column: 2 }, end: { line: 411, column: 3 } },
                    { start: { line: 409, column: 2 }, end: { line: 411, column: 3 } }
                  ],
                  line: 409
                },
                '22': {
                  loc: { start: { line: 412, column: 2 }, end: { line: 415, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 412, column: 2 }, end: { line: 415, column: 3 } },
                    { start: { line: 412, column: 2 }, end: { line: 415, column: 3 } }
                  ],
                  line: 412
                },
                '23': {
                  loc: { start: { line: 414, column: 14 }, end: { line: 414, column: 67 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 414, column: 42 }, end: { line: 414, column: 43 } },
                    { start: { line: 414, column: 46 }, end: { line: 414, column: 67 } }
                  ],
                  line: 414
                },
                '24': {
                  loc: { start: { line: 416, column: 2 }, end: { line: 418, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 416, column: 2 }, end: { line: 418, column: 3 } },
                    { start: { line: 416, column: 2 }, end: { line: 418, column: 3 } }
                  ],
                  line: 416
                },
                '25': {
                  loc: { start: { line: 419, column: 2 }, end: { line: 421, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 419, column: 2 }, end: { line: 421, column: 3 } },
                    { start: { line: 419, column: 2 }, end: { line: 421, column: 3 } }
                  ],
                  line: 419
                },
                '26': {
                  loc: { start: { line: 422, column: 2 }, end: { line: 424, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 422, column: 2 }, end: { line: 424, column: 3 } },
                    { start: { line: 422, column: 2 }, end: { line: 424, column: 3 } }
                  ],
                  line: 422
                },
                '27': {
                  loc: { start: { line: 485, column: 2 }, end: { line: 487, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 485, column: 2 }, end: { line: 487, column: 3 } },
                    { start: { line: 485, column: 2 }, end: { line: 487, column: 3 } }
                  ],
                  line: 485
                },
                '28': {
                  loc: { start: { line: 486, column: 11 }, end: { line: 486, column: 54 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 486, column: 34 }, end: { line: 486, column: 49 } },
                    { start: { line: 486, column: 52 }, end: { line: 486, column: 54 } }
                  ],
                  line: 486
                },
                '29': {
                  loc: { start: { line: 488, column: 2 }, end: { line: 490, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 488, column: 2 }, end: { line: 490, column: 3 } },
                    { start: { line: 488, column: 2 }, end: { line: 490, column: 3 } }
                  ],
                  line: 488
                },
                '30': {
                  loc: { start: { line: 491, column: 2 }, end: { line: 493, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 491, column: 2 }, end: { line: 493, column: 3 } },
                    { start: { line: 491, column: 2 }, end: { line: 493, column: 3 } }
                  ],
                  line: 491
                },
                '31': {
                  loc: { start: { line: 494, column: 2 }, end: { line: 496, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 494, column: 2 }, end: { line: 496, column: 3 } },
                    { start: { line: 494, column: 2 }, end: { line: 496, column: 3 } }
                  ],
                  line: 494
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0,
                '118': 0,
                '119': 0,
                '120': 0,
                '121': 0,
                '122': 0
              },
              f: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0, '8': 0 },
              b: {
                '0': [0, 0, 0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0],
                '20': [0, 0],
                '21': [0, 0],
                '22': [0, 0],
                '23': [0, 0],
                '24': [0, 0],
                '25': [0, 0],
                '26': [0, 0],
                '27': [0, 0],
                '28': [0, 0],
                '29': [0, 0],
                '30': [0, 0],
                '31': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: 'ab935aeed44a0c6d3e7e4d4c52e10e8b476fff6a'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.splice');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.regexp.to-string');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          var constants = _interopRequireWildcard(_dereq_('../core/constants'));
          function _getRequireWildcardCache() {
            if (typeof WeakMap !== 'function') return null;
            var cache = new WeakMap();
            _getRequireWildcardCache = function _getRequireWildcardCache() {
              return cache;
            };
            return cache;
          }
          function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
              return obj;
            }
            if (obj === null || (_typeof(obj) !== 'object' && typeof obj !== 'function')) {
              return { default: obj };
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
              return cache.get(obj);
            }
            var newObj = {};
            var hasPropertyDescriptor =
              Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
              if (Object.prototype.hasOwnProperty.call(obj, key)) {
                var desc = hasPropertyDescriptor
                  ? Object.getOwnPropertyDescriptor(obj, key)
                  : null;
                if (desc && (desc.get || desc.set)) {
                  Object.defineProperty(newObj, key, desc);
                } else {
                  newObj[key] = obj[key];
                }
              }
            }
            newObj.default = obj;
            if (cache) {
              cache.set(obj, newObj);
            }
            return newObj;
          }
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_27lc6w6x5f.s[0]++;

          /**
           * Allows movement around a 3D sketch using a mouse or trackpad.  Left-clicking
           * and dragging will rotate the camera position about the center of the sketch,
           * right-clicking and dragging will pan the camera position without rotation,
           * and using the mouse wheel (scrolling) will move the camera closer or further
           * from the center of the sketch. This function can be called with parameters
           * dictating sensitivity to mouse movement along the X and Y axes.  Calling
           * this function without parameters is equivalent to calling orbitControl(1,1).
           * To reverse direction of movement in either axis, enter a negative number
           * for sensitivity.
           * @method orbitControl
           * @for p5
           * @param  {Number} [sensitivityX] sensitivity to mouse movement along X axis
           * @param  {Number} [sensitivityY] sensitivity to mouse movement along Y axis
           * @param  {Number} [sensitivityZ] sensitivity to scroll movement along Z axis
           * @chainable
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   normalMaterial();
           * }
           * function draw() {
           *   background(200);
           *   orbitControl();
           *   rotateY(0.5);
           *   box(30, 50);
           * }
           * </code>
           * </div>
           *
           * @alt
           * Camera orbits around a box when mouse is hold-clicked & then moved.
           */

          // implementation based on three.js 'orbitControls':
          // https://github.com/mrdoob/three.js/blob/dev/examples/js/controls/OrbitControls.js
          _main.default.prototype.orbitControl = function(
            sensitivityX,
            sensitivityY,
            sensitivityZ
          ) {
            cov_27lc6w6x5f.f[0]++;
            cov_27lc6w6x5f.s[1]++;
            this._assert3d('orbitControl');
            cov_27lc6w6x5f.s[2]++;
            _main.default._validateParameters('orbitControl', arguments);

            // If the mouse is not in bounds of the canvas, disable all behaviors:
            var mouseInCanvas = (cov_27lc6w6x5f.s[3]++,
            (cov_27lc6w6x5f.b[0][0]++, this.mouseX < this.width) &&
              (cov_27lc6w6x5f.b[0][1]++, this.mouseX > 0) &&
              (cov_27lc6w6x5f.b[0][2]++, this.mouseY < this.height) &&
              (cov_27lc6w6x5f.b[0][3]++, this.mouseY > 0));
            cov_27lc6w6x5f.s[4]++;
            if (!mouseInCanvas) {
              cov_27lc6w6x5f.b[1][0]++;
              cov_27lc6w6x5f.s[5]++;
              return;
            } else {
              cov_27lc6w6x5f.b[1][1]++;
            }

            var cam = (cov_27lc6w6x5f.s[6]++, this._renderer._curCamera);
            cov_27lc6w6x5f.s[7]++;

            if (typeof sensitivityX === 'undefined') {
              cov_27lc6w6x5f.b[2][0]++;
              cov_27lc6w6x5f.s[8]++;
              sensitivityX = 1;
            } else {
              cov_27lc6w6x5f.b[2][1]++;
            }
            cov_27lc6w6x5f.s[9]++;
            if (typeof sensitivityY === 'undefined') {
              cov_27lc6w6x5f.b[3][0]++;
              cov_27lc6w6x5f.s[10]++;
              sensitivityY = sensitivityX;
            } else {
              cov_27lc6w6x5f.b[3][1]++;
            }
            cov_27lc6w6x5f.s[11]++;
            if (typeof sensitivityZ === 'undefined') {
              cov_27lc6w6x5f.b[4][0]++;
              cov_27lc6w6x5f.s[12]++;
              sensitivityZ = 0.5;
            } else {
              cov_27lc6w6x5f.b[4][1]++;
            }

            // default right-mouse and mouse-wheel behaviors (context menu and scrolling,
            // respectively) are disabled here to allow use of those events for panning and
            // zooming

            // disable context menu for canvas element and add 'contextMenuDisabled'
            // flag to p5 instance
            cov_27lc6w6x5f.s[13]++;
            if (this.contextMenuDisabled !== true) {
              cov_27lc6w6x5f.b[5][0]++;
              cov_27lc6w6x5f.s[14]++;
              this.canvas.oncontextmenu = function() {
                cov_27lc6w6x5f.f[1]++;
                cov_27lc6w6x5f.s[15]++;
                return false;
              };
              cov_27lc6w6x5f.s[16]++;
              this._setProperty('contextMenuDisabled', true);
            } else {
              cov_27lc6w6x5f.b[5][1]++;
            }

            // disable default scrolling behavior on the canvas element and add
            // 'wheelDefaultDisabled' flag to p5 instance
            cov_27lc6w6x5f.s[17]++;
            if (this.wheelDefaultDisabled !== true) {
              cov_27lc6w6x5f.b[6][0]++;
              cov_27lc6w6x5f.s[18]++;
              this.canvas.onwheel = function() {
                cov_27lc6w6x5f.f[2]++;
                cov_27lc6w6x5f.s[19]++;
                return false;
              };
              cov_27lc6w6x5f.s[20]++;
              this._setProperty('wheelDefaultDisabled', true);
            } else {
              cov_27lc6w6x5f.b[6][1]++;
            }

            var scaleFactor = (cov_27lc6w6x5f.s[21]++,
            this.height < this.width
              ? (cov_27lc6w6x5f.b[7][0]++, this.height)
              : (cov_27lc6w6x5f.b[7][1]++, this.width));

            // ZOOM if there is a change in mouseWheelDelta
            cov_27lc6w6x5f.s[22]++;
            if (this._mouseWheelDeltaY !== this._pmouseWheelDeltaY) {
              cov_27lc6w6x5f.b[8][0]++;
              cov_27lc6w6x5f.s[23]++;
              // zoom according to direction of mouseWheelDeltaY rather than value
              if (this._mouseWheelDeltaY > 0) {
                cov_27lc6w6x5f.b[9][0]++;
                cov_27lc6w6x5f.s[24]++;
                this._renderer._curCamera._orbit(0, 0, sensitivityZ * scaleFactor);
              } else {
                cov_27lc6w6x5f.b[9][1]++;
                cov_27lc6w6x5f.s[25]++;
                this._renderer._curCamera._orbit(0, 0, -sensitivityZ * scaleFactor);
              }
            } else {
              cov_27lc6w6x5f.b[8][1]++;
            }
            cov_27lc6w6x5f.s[26]++;

            if (this.mouseIsPressed) {
              cov_27lc6w6x5f.b[10][0]++;
              cov_27lc6w6x5f.s[27]++;
              // ORBIT BEHAVIOR
              if (this.mouseButton === this.LEFT) {
                cov_27lc6w6x5f.b[11][0]++;
                var deltaTheta = (cov_27lc6w6x5f.s[28]++,
                -sensitivityX * (this.mouseX - this.pmouseX) / scaleFactor);
                var deltaPhi = (cov_27lc6w6x5f.s[29]++,
                sensitivityY * (this.mouseY - this.pmouseY) / scaleFactor);
                cov_27lc6w6x5f.s[30]++;
                this._renderer._curCamera._orbit(deltaTheta, deltaPhi, 0);
              } else {
                cov_27lc6w6x5f.b[11][1]++;
                cov_27lc6w6x5f.s[31]++;
                if (this.mouseButton === this.RIGHT) {
                  cov_27lc6w6x5f.b[12][0]++;
                  // PANNING BEHAVIOR along X/Z camera axes and restricted to X/Z plane
                  // in world space
                  var local = (cov_27lc6w6x5f.s[32]++, cam._getLocalAxes());

                  // normalize portions along X/Z axes
                  var xmag = (cov_27lc6w6x5f.s[33]++,
                  Math.sqrt(local.x[0] * local.x[0] + local.x[2] * local.x[2]));
                  cov_27lc6w6x5f.s[34]++;
                  if (xmag !== 0) {
                    cov_27lc6w6x5f.b[13][0]++;
                    cov_27lc6w6x5f.s[35]++;
                    local.x[0] /= xmag;
                    cov_27lc6w6x5f.s[36]++;
                    local.x[2] /= xmag;
                  } else {
                    cov_27lc6w6x5f.b[13][1]++;
                  }

                  // normalize portions along X/Z axes
                  var ymag = (cov_27lc6w6x5f.s[37]++,
                  Math.sqrt(local.y[0] * local.y[0] + local.y[2] * local.y[2]));
                  cov_27lc6w6x5f.s[38]++;
                  if (ymag !== 0) {
                    cov_27lc6w6x5f.b[14][0]++;
                    cov_27lc6w6x5f.s[39]++;
                    local.y[0] /= ymag;
                    cov_27lc6w6x5f.s[40]++;
                    local.y[2] /= ymag;
                  } else {
                    cov_27lc6w6x5f.b[14][1]++;
                  }

                  // move along those vectors by amount controlled by mouseX, pmouseY
                  var dx = (cov_27lc6w6x5f.s[41]++,
                  -1 * sensitivityX * (this.mouseX - this.pmouseX));
                  var dz = (cov_27lc6w6x5f.s[42]++,
                  -1 * sensitivityY * (this.mouseY - this.pmouseY));

                  // restrict movement to XZ plane in world space
                  cov_27lc6w6x5f.s[43]++;
                  cam.setPosition(
                    cam.eyeX + dx * local.x[0] + dz * local.z[0],
                    cam.eyeY,
                    cam.eyeZ + dx * local.x[2] + dz * local.z[2]
                  );
                } else {
                  cov_27lc6w6x5f.b[12][1]++;
                }
              }
            } else {
              cov_27lc6w6x5f.b[10][1]++;
            }
            cov_27lc6w6x5f.s[44]++;
            return this;
          };

          /**
           * debugMode() helps visualize 3D space by adding a grid to indicate where the
           * ‘ground’ is in a sketch and an axes icon which indicates the +X, +Y, and +Z
           * directions. This function can be called without parameters to create a
           * default grid and axes icon, or it can be called according to the examples
           * above to customize the size and position of the grid and/or axes icon.  The
           * grid is drawn using the most recently set stroke color and weight.  To
           * specify these parameters, add a call to stroke() and strokeWeight()
           * just before the end of the draw() loop.
           *
           * By default, the grid will run through the origin (0,0,0) of the sketch
           * along the XZ plane
           * and the axes icon will be offset from the origin.  Both the grid and axes
           * icon will be sized according to the current canvas size.  Note that because the
           * grid runs parallel to the default camera view, it is often helpful to use
           * debugMode along with orbitControl to allow full view of the grid.
           * @method debugMode
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   camera(0, -30, 100, 0, 0, 0, 0, 1, 0);
           *   normalMaterial();
           *   debugMode();
           * }
           *
           * function draw() {
           *   background(200);
           *   orbitControl();
           *   box(15, 30);
           *   // Press the spacebar to turn debugMode off!
           *   if (keyIsDown(32)) {
           *     noDebugMode();
           *   }
           * }
           * </code>
           * </div>
           * @alt
           * a 3D box is centered on a grid in a 3D sketch. an icon
           * indicates the direction of each axis: a red line points +X,
           * a green line +Y, and a blue line +Z. the grid and icon disappear when the
           * spacebar is pressed.
           *
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   camera(0, -30, 100, 0, 0, 0, 0, 1, 0);
           *   normalMaterial();
           *   debugMode(GRID);
           * }
           *
           * function draw() {
           *   background(200);
           *   orbitControl();
           *   box(15, 30);
           * }
           * </code>
           * </div>
           * @alt
           * a 3D box is centered on a grid in a 3D sketch.
           *
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   camera(0, -30, 100, 0, 0, 0, 0, 1, 0);
           *   normalMaterial();
           *   debugMode(AXES);
           * }
           *
           * function draw() {
           *   background(200);
           *   orbitControl();
           *   box(15, 30);
           * }
           * </code>
           * </div>
           * @alt
           * a 3D box is centered in a 3D sketch. an icon
           * indicates the direction of each axis: a red line points +X,
           * a green line +Y, and a blue line +Z.
           *
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   camera(0, -30, 100, 0, 0, 0, 0, 1, 0);
           *   normalMaterial();
           *   debugMode(GRID, 100, 10, 0, 0, 0);
           * }
           *
           * function draw() {
           *   background(200);
           *   orbitControl();
           *   box(15, 30);
           * }
           * </code>
           * </div>
           * @alt
           * a 3D box is centered on a grid in a 3D sketch
           *
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   camera(0, -30, 100, 0, 0, 0, 0, 1, 0);
           *   normalMaterial();
           *   debugMode(100, 10, 0, 0, 0, 20, 0, -40, 0);
           * }
           *
           * function draw() {
           *   noStroke();
           *   background(200);
           *   orbitControl();
           *   box(15, 30);
           *   // set the stroke color and weight for the grid!
           *   stroke(255, 0, 150);
           *   strokeWeight(0.8);
           * }
           * </code>
           * </div>
           * @alt
           * a 3D box is centered on a grid in a 3D sketch. an icon
           * indicates the direction of each axis: a red line points +X,
           * a green line +Y, and a blue line +Z.
           */

          /**
           * @method debugMode
           * @param {Constant} mode either GRID or AXES
           */

          /**
           * @method debugMode
           * @param {Constant} mode
           * @param {Number} [gridSize] size of one side of the grid
           * @param {Number} [gridDivisions] number of divisions in the grid
           * @param {Number} [xOff] X axis offset from origin (0,0,0)
           * @param {Number} [yOff] Y axis offset from origin (0,0,0)
           * @param {Number} [zOff] Z axis offset from origin (0,0,0)
           */

          /**
           * @method debugMode
           * @param {Constant} mode
           * @param {Number} [axesSize] size of axes icon
           * @param {Number} [xOff]
           * @param {Number} [yOff]
           * @param {Number} [zOff]
           */

          /**
           * @method debugMode
           * @param {Number} [gridSize]
           * @param {Number} [gridDivisions]
           * @param {Number} [gridXOff]
           * @param {Number} [gridYOff]
           * @param {Number} [gridZOff]
           * @param {Number} [axesSize]
           * @param {Number} [axesXOff]
           * @param {Number} [axesYOff]
           * @param {Number} [axesZOff]
           */ cov_27lc6w6x5f.s[45]++;

          _main.default.prototype.debugMode = function() {
            cov_27lc6w6x5f.f[3]++;
            cov_27lc6w6x5f.s[46]++;
            this._assert3d('debugMode');
            cov_27lc6w6x5f.s[47]++;
            for (
              var _len = arguments.length, args = new Array(_len), _key = 0;
              _key < _len;
              _key++
            ) {
              args[_key] = arguments[_key];
            }
            _main.default._validateParameters('debugMode', args);

            // start by removing existing 'post' registered debug methods
            cov_27lc6w6x5f.s[48]++;
            for (
              var i = (cov_27lc6w6x5f.s[49]++, this._registeredMethods.post.length - 1);
              i >= 0;
              i--
            ) {
              cov_27lc6w6x5f.s[50]++;
              // test for equality...
              if (
                (cov_27lc6w6x5f.b[16][0]++,
                this._registeredMethods.post[i].toString() === this._grid().toString()) ||
                (cov_27lc6w6x5f.b[16][1]++,
                this._registeredMethods.post[i].toString() === this._axesIcon().toString())
              ) {
                cov_27lc6w6x5f.b[15][0]++;
                cov_27lc6w6x5f.s[51]++;
                this._registeredMethods.post.splice(i, 1);
              } else {
                cov_27lc6w6x5f.b[15][1]++;
              }
            }

            // then add new debugMode functions according to the argument list
            cov_27lc6w6x5f.s[52]++;
            if (args[0] === constants.GRID) {
              cov_27lc6w6x5f.b[17][0]++;
              cov_27lc6w6x5f.s[53]++;
              this.registerMethod(
                'post',
                this._grid.call(this, args[1], args[2], args[3], args[4], args[5])
              );
            } else {
              cov_27lc6w6x5f.b[17][1]++;
              cov_27lc6w6x5f.s[54]++;
              if (args[0] === constants.AXES) {
                cov_27lc6w6x5f.b[18][0]++;
                cov_27lc6w6x5f.s[55]++;
                this.registerMethod(
                  'post',
                  this._axesIcon.call(this, args[1], args[2], args[3], args[4])
                );
              } else {
                cov_27lc6w6x5f.b[18][1]++;
                cov_27lc6w6x5f.s[56]++;
                this.registerMethod(
                  'post',
                  this._grid.call(this, args[0], args[1], args[2], args[3], args[4])
                );
                cov_27lc6w6x5f.s[57]++;

                this.registerMethod(
                  'post',
                  this._axesIcon.call(this, args[5], args[6], args[7], args[8])
                );
              }
            }
          };

          /**
           * Turns off debugMode() in a 3D sketch.
           * @method noDebugMode
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   camera(0, -30, 100, 0, 0, 0, 0, 1, 0);
           *   normalMaterial();
           *   debugMode();
           * }
           *
           * function draw() {
           *   background(200);
           *   orbitControl();
           *   box(15, 30);
           *   // Press the spacebar to turn debugMode off!
           *   if (keyIsDown(32)) {
           *     noDebugMode();
           *   }
           * }
           * </code>
           * </div>
           * @alt
           * a 3D box is centered on a grid in a 3D sketch. an icon
           * indicates the direction of each axis: a red line points +X,
           * a green line +Y, and a blue line +Z. the grid and icon disappear when the
           * spacebar is pressed.
           */ cov_27lc6w6x5f.s[58]++;
          _main.default.prototype.noDebugMode = function() {
            cov_27lc6w6x5f.f[4]++;
            cov_27lc6w6x5f.s[59]++;
            this._assert3d('noDebugMode');

            // start by removing existing 'post' registered debug methods
            cov_27lc6w6x5f.s[60]++;
            for (
              var i = (cov_27lc6w6x5f.s[61]++, this._registeredMethods.post.length - 1);
              i >= 0;
              i--
            ) {
              cov_27lc6w6x5f.s[62]++;
              // test for equality...
              if (
                (cov_27lc6w6x5f.b[20][0]++,
                this._registeredMethods.post[i].toString() === this._grid().toString()) ||
                (cov_27lc6w6x5f.b[20][1]++,
                this._registeredMethods.post[i].toString() === this._axesIcon().toString())
              ) {
                cov_27lc6w6x5f.b[19][0]++;
                cov_27lc6w6x5f.s[63]++;
                this._registeredMethods.post.splice(i, 1);
              } else {
                cov_27lc6w6x5f.b[19][1]++;
              }
            }
          };

          /**
           * For use with debugMode
           * @private
           * @method _grid
           * @param {Number} [size] size of grid sides
           * @param {Number} [div] number of grid divisions
           * @param {Number} [xOff] offset of grid center from origin in X axis
           * @param {Number} [yOff] offset of grid center from origin in Y axis
           * @param {Number} [zOff] offset of grid center from origin in Z axis
           */ cov_27lc6w6x5f.s[64]++;
          _main.default.prototype._grid = function(size, numDivs, xOff, yOff, zOff) {
            cov_27lc6w6x5f.f[5]++;
            cov_27lc6w6x5f.s[65]++;
            if (typeof size === 'undefined') {
              cov_27lc6w6x5f.b[21][0]++;
              cov_27lc6w6x5f.s[66]++;
              size = this.width / 2;
            } else {
              cov_27lc6w6x5f.b[21][1]++;
            }
            cov_27lc6w6x5f.s[67]++;
            if (typeof numDivs === 'undefined') {
              cov_27lc6w6x5f.b[22][0]++;
              cov_27lc6w6x5f.s[68]++;
              // ensure at least 2 divisions
              numDivs =
                Math.round(size / 30) < 4
                  ? (cov_27lc6w6x5f.b[23][0]++, 4)
                  : (cov_27lc6w6x5f.b[23][1]++, Math.round(size / 30));
            } else {
              cov_27lc6w6x5f.b[22][1]++;
            }
            cov_27lc6w6x5f.s[69]++;
            if (typeof xOff === 'undefined') {
              cov_27lc6w6x5f.b[24][0]++;
              cov_27lc6w6x5f.s[70]++;
              xOff = 0;
            } else {
              cov_27lc6w6x5f.b[24][1]++;
            }
            cov_27lc6w6x5f.s[71]++;
            if (typeof yOff === 'undefined') {
              cov_27lc6w6x5f.b[25][0]++;
              cov_27lc6w6x5f.s[72]++;
              yOff = 0;
            } else {
              cov_27lc6w6x5f.b[25][1]++;
            }
            cov_27lc6w6x5f.s[73]++;
            if (typeof zOff === 'undefined') {
              cov_27lc6w6x5f.b[26][0]++;
              cov_27lc6w6x5f.s[74]++;
              zOff = 0;
            } else {
              cov_27lc6w6x5f.b[26][1]++;
            }

            var spacing = (cov_27lc6w6x5f.s[75]++, size / numDivs);
            var halfSize = (cov_27lc6w6x5f.s[76]++, size / 2);
            cov_27lc6w6x5f.s[77]++;

            return function() {
              cov_27lc6w6x5f.f[6]++;
              cov_27lc6w6x5f.s[78]++;
              this.push();
              cov_27lc6w6x5f.s[79]++;
              this.stroke(
                this._renderer.curStrokeColor[0] * 255,
                this._renderer.curStrokeColor[1] * 255,
                this._renderer.curStrokeColor[2] * 255
              );
              cov_27lc6w6x5f.s[80]++;

              this._renderer.uMVMatrix.set(
                this._renderer._curCamera.cameraMatrix.mat4[0],
                this._renderer._curCamera.cameraMatrix.mat4[1],
                this._renderer._curCamera.cameraMatrix.mat4[2],
                this._renderer._curCamera.cameraMatrix.mat4[3],
                this._renderer._curCamera.cameraMatrix.mat4[4],
                this._renderer._curCamera.cameraMatrix.mat4[5],
                this._renderer._curCamera.cameraMatrix.mat4[6],
                this._renderer._curCamera.cameraMatrix.mat4[7],
                this._renderer._curCamera.cameraMatrix.mat4[8],
                this._renderer._curCamera.cameraMatrix.mat4[9],
                this._renderer._curCamera.cameraMatrix.mat4[10],
                this._renderer._curCamera.cameraMatrix.mat4[11],
                this._renderer._curCamera.cameraMatrix.mat4[12],
                this._renderer._curCamera.cameraMatrix.mat4[13],
                this._renderer._curCamera.cameraMatrix.mat4[14],
                this._renderer._curCamera.cameraMatrix.mat4[15]
              );

              // Lines along X axis
              cov_27lc6w6x5f.s[81]++;
              for (var q = (cov_27lc6w6x5f.s[82]++, 0); q <= numDivs; q++) {
                cov_27lc6w6x5f.s[83]++;
                this.beginShape(this.LINES);
                cov_27lc6w6x5f.s[84]++;
                this.vertex(-halfSize + xOff, yOff, q * spacing - halfSize + zOff);
                cov_27lc6w6x5f.s[85]++;
                this.vertex(+halfSize + xOff, yOff, q * spacing - halfSize + zOff);
                cov_27lc6w6x5f.s[86]++;
                this.endShape();
              }

              // Lines along Z axis
              cov_27lc6w6x5f.s[87]++;
              for (var i = (cov_27lc6w6x5f.s[88]++, 0); i <= numDivs; i++) {
                cov_27lc6w6x5f.s[89]++;
                this.beginShape(this.LINES);
                cov_27lc6w6x5f.s[90]++;
                this.vertex(i * spacing - halfSize + xOff, yOff, -halfSize + zOff);
                cov_27lc6w6x5f.s[91]++;
                this.vertex(i * spacing - halfSize + xOff, yOff, +halfSize + zOff);
                cov_27lc6w6x5f.s[92]++;
                this.endShape();
              }
              cov_27lc6w6x5f.s[93]++;

              this.pop();
            };
          };

          /**
           * For use with debugMode
           * @private
           * @method _axesIcon
           * @param {Number} [size] size of axes icon lines
           * @param {Number} [xOff] offset of icon from origin in X axis
           * @param {Number} [yOff] offset of icon from origin in Y axis
           * @param {Number} [zOff] offset of icon from origin in Z axis
           */ cov_27lc6w6x5f.s[94]++;
          _main.default.prototype._axesIcon = function(size, xOff, yOff, zOff) {
            cov_27lc6w6x5f.f[7]++;
            cov_27lc6w6x5f.s[95]++;
            if (typeof size === 'undefined') {
              cov_27lc6w6x5f.b[27][0]++;
              cov_27lc6w6x5f.s[96]++;
              size =
                this.width / 20 > 40
                  ? (cov_27lc6w6x5f.b[28][0]++, this.width / 20)
                  : (cov_27lc6w6x5f.b[28][1]++, 40);
            } else {
              cov_27lc6w6x5f.b[27][1]++;
            }
            cov_27lc6w6x5f.s[97]++;
            if (typeof xOff === 'undefined') {
              cov_27lc6w6x5f.b[29][0]++;
              cov_27lc6w6x5f.s[98]++;
              xOff = -this.width / 4;
            } else {
              cov_27lc6w6x5f.b[29][1]++;
            }
            cov_27lc6w6x5f.s[99]++;
            if (typeof yOff === 'undefined') {
              cov_27lc6w6x5f.b[30][0]++;
              cov_27lc6w6x5f.s[100]++;
              yOff = xOff;
            } else {
              cov_27lc6w6x5f.b[30][1]++;
            }
            cov_27lc6w6x5f.s[101]++;
            if (typeof zOff === 'undefined') {
              cov_27lc6w6x5f.b[31][0]++;
              cov_27lc6w6x5f.s[102]++;
              zOff = xOff;
            } else {
              cov_27lc6w6x5f.b[31][1]++;
            }
            cov_27lc6w6x5f.s[103]++;

            return function() {
              cov_27lc6w6x5f.f[8]++;
              cov_27lc6w6x5f.s[104]++;
              this.push();
              cov_27lc6w6x5f.s[105]++;
              this._renderer.uMVMatrix.set(
                this._renderer._curCamera.cameraMatrix.mat4[0],
                this._renderer._curCamera.cameraMatrix.mat4[1],
                this._renderer._curCamera.cameraMatrix.mat4[2],
                this._renderer._curCamera.cameraMatrix.mat4[3],
                this._renderer._curCamera.cameraMatrix.mat4[4],
                this._renderer._curCamera.cameraMatrix.mat4[5],
                this._renderer._curCamera.cameraMatrix.mat4[6],
                this._renderer._curCamera.cameraMatrix.mat4[7],
                this._renderer._curCamera.cameraMatrix.mat4[8],
                this._renderer._curCamera.cameraMatrix.mat4[9],
                this._renderer._curCamera.cameraMatrix.mat4[10],
                this._renderer._curCamera.cameraMatrix.mat4[11],
                this._renderer._curCamera.cameraMatrix.mat4[12],
                this._renderer._curCamera.cameraMatrix.mat4[13],
                this._renderer._curCamera.cameraMatrix.mat4[14],
                this._renderer._curCamera.cameraMatrix.mat4[15]
              );

              // X axis
              cov_27lc6w6x5f.s[106]++;
              this.strokeWeight(2);
              cov_27lc6w6x5f.s[107]++;
              this.stroke(255, 0, 0);
              cov_27lc6w6x5f.s[108]++;
              this.beginShape(this.LINES);
              cov_27lc6w6x5f.s[109]++;
              this.vertex(xOff, yOff, zOff);
              cov_27lc6w6x5f.s[110]++;
              this.vertex(xOff + size, yOff, zOff);
              cov_27lc6w6x5f.s[111]++;
              this.endShape();
              // Y axis
              cov_27lc6w6x5f.s[112]++;
              this.stroke(0, 255, 0);
              cov_27lc6w6x5f.s[113]++;
              this.beginShape(this.LINES);
              cov_27lc6w6x5f.s[114]++;
              this.vertex(xOff, yOff, zOff);
              cov_27lc6w6x5f.s[115]++;
              this.vertex(xOff, yOff + size, zOff);
              cov_27lc6w6x5f.s[116]++;
              this.endShape();
              // Z axis
              cov_27lc6w6x5f.s[117]++;
              this.stroke(0, 0, 255);
              cov_27lc6w6x5f.s[118]++;
              this.beginShape(this.LINES);
              cov_27lc6w6x5f.s[119]++;
              this.vertex(xOff, yOff, zOff);
              cov_27lc6w6x5f.s[120]++;
              this.vertex(xOff, yOff, zOff + size);
              cov_27lc6w6x5f.s[121]++;
              this.endShape();
              cov_27lc6w6x5f.s[122]++;
              this.pop();
            };
          };
          var _default = _main.default;
          exports.default = _default;
        },
        {
          '../core/constants': 272,
          '../core/main': 283,
          'core-js/modules/es.array.splice': 180,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.regexp.to-string': 197
        }
      ],
      328: [
        function(_dereq_, module, exports) {
          'use strict';
          function _typeof(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof = function _typeof(obj) {
                return typeof obj;
              };
            } else {
              _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof(obj);
          }
          var cov_139va9y9s8 = (function() {
            var path = '/Users/outofambit/src/p5.js/src/webgl/light.js';
            var hash = '2b0882e2b94dfcf65a510101c5ee98f69bca1070';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/webgl/light.js',
              statementMap: {
                '0': { start: { line: 76, column: 0 }, end: { line: 90, column: 2 } },
                '1': { start: { line: 77, column: 2 }, end: { line: 77, column: 33 } },
                '2': { start: { line: 78, column: 2 }, end: { line: 78, column: 52 } },
                '3': { start: { line: 79, column: 16 }, end: { line: 79, column: 40 } },
                '4': { start: { line: 81, column: 2 }, end: { line: 85, column: 4 } },
                '5': { start: { line: 87, column: 2 }, end: { line: 87, column: 40 } },
                '6': { start: { line: 89, column: 2 }, end: { line: 89, column: 14 } },
                '7': { start: { line: 163, column: 0 }, end: { line: 175, column: 2 } },
                '8': { start: { line: 164, column: 2 }, end: { line: 164, column: 34 } },
                '9': { start: { line: 165, column: 2 }, end: { line: 165, column: 53 } },
                '10': { start: { line: 166, column: 16 }, end: { line: 166, column: 40 } },
                '11': { start: { line: 168, column: 2 }, end: { line: 172, column: 4 } },
                '12': { start: { line: 174, column: 2 }, end: { line: 174, column: 14 } },
                '13': { start: { line: 237, column: 0 }, end: { line: 278, column: 2 } },
                '14': { start: { line: 238, column: 2 }, end: { line: 238, column: 37 } },
                '15': { start: { line: 239, column: 2 }, end: { line: 239, column: 56 } },
                '16': { start: { line: 243, column: 2 }, end: { line: 247, column: 3 } },
                '17': { start: { line: 244, column: 4 }, end: { line: 244, column: 15 } },
                '18': { start: { line: 246, column: 4 }, end: { line: 246, column: 35 } },
                '19': { start: { line: 250, column: 12 }, end: { line: 250, column: 43 } },
                '20': { start: { line: 251, column: 2 }, end: { line: 259, column: 3 } },
                '21': { start: { line: 252, column: 4 }, end: { line: 252, column: 41 } },
                '22': { start: { line: 253, column: 4 }, end: { line: 253, column: 41 } },
                '23': { start: { line: 254, column: 4 }, end: { line: 254, column: 41 } },
                '24': { start: { line: 256, column: 4 }, end: { line: 256, column: 13 } },
                '25': { start: { line: 257, column: 4 }, end: { line: 257, column: 13 } },
                '26': { start: { line: 258, column: 4 }, end: { line: 258, column: 13 } },
                '27': { start: { line: 262, column: 12 }, end: { line: 262, column: 50 } },
                '28': { start: { line: 263, column: 2 }, end: { line: 263, column: 73 } },
                '29': { start: { line: 265, column: 2 }, end: { line: 269, column: 4 } },
                '30': { start: { line: 270, column: 2 }, end: { line: 273, column: 4 } },
                '31': { start: { line: 275, column: 2 }, end: { line: 275, column: 40 } },
                '32': { start: { line: 277, column: 2 }, end: { line: 277, column: 14 } },
                '33': { start: { line: 347, column: 0 }, end: { line: 385, column: 2 } },
                '34': { start: { line: 348, column: 2 }, end: { line: 348, column: 31 } },
                '35': { start: { line: 349, column: 2 }, end: { line: 349, column: 50 } },
                '36': { start: { line: 353, column: 2 }, end: { line: 357, column: 3 } },
                '37': { start: { line: 354, column: 4 }, end: { line: 354, column: 15 } },
                '38': { start: { line: 356, column: 4 }, end: { line: 356, column: 35 } },
                '39': { start: { line: 360, column: 12 }, end: { line: 360, column: 43 } },
                '40': { start: { line: 361, column: 2 }, end: { line: 369, column: 3 } },
                '41': { start: { line: 362, column: 4 }, end: { line: 362, column: 41 } },
                '42': { start: { line: 363, column: 4 }, end: { line: 363, column: 41 } },
                '43': { start: { line: 364, column: 4 }, end: { line: 364, column: 41 } },
                '44': { start: { line: 366, column: 4 }, end: { line: 366, column: 13 } },
                '45': { start: { line: 367, column: 4 }, end: { line: 367, column: 13 } },
                '46': { start: { line: 368, column: 4 }, end: { line: 368, column: 13 } },
                '47': { start: { line: 371, column: 2 }, end: { line: 371, column: 54 } },
                '48': { start: { line: 372, column: 2 }, end: { line: 376, column: 4 } },
                '49': { start: { line: 377, column: 2 }, end: { line: 380, column: 4 } },
                '50': { start: { line: 382, column: 2 }, end: { line: 382, column: 40 } },
                '51': { start: { line: 384, column: 2 }, end: { line: 384, column: 14 } },
                '52': { start: { line: 411, column: 0 }, end: { line: 423, column: 2 } },
                '53': { start: { line: 412, column: 2 }, end: { line: 412, column: 27 } },
                '54': { start: { line: 414, column: 2 }, end: { line: 421, column: 3 } },
                '55': { start: { line: 415, column: 4 }, end: { line: 415, column: 37 } },
                '56': { start: { line: 416, column: 4 }, end: { line: 416, column: 51 } },
                '57': { start: { line: 418, column: 22 }, end: { line: 418, column: 58 } },
                '58': { start: { line: 419, column: 4 }, end: { line: 419, column: 39 } },
                '59': { start: { line: 420, column: 4 }, end: { line: 420, column: 53 } },
                '60': { start: { line: 422, column: 2 }, end: { line: 422, column: 14 } },
                '61': { start: { line: 464, column: 0 }, end: { line: 508, column: 2 } },
                '62': { start: { line: 469, column: 2 }, end: { line: 469, column: 33 } },
                '63': { start: { line: 470, column: 2 }, end: { line: 470, column: 52 } },
                '64': { start: { line: 472, column: 2 }, end: { line: 477, column: 3 } },
                '65': { start: { line: 473, column: 4 }, end: { line: 473, column: 28 } },
                '66': { start: { line: 474, column: 4 }, end: { line: 476, column: 6 } },
                '67': { start: { line: 479, column: 2 }, end: { line: 484, column: 3 } },
                '68': { start: { line: 480, column: 4 }, end: { line: 480, column: 26 } },
                '69': { start: { line: 481, column: 4 }, end: { line: 483, column: 6 } },
                '70': { start: { line: 486, column: 2 }, end: { line: 491, column: 3 } },
                '71': { start: { line: 487, column: 4 }, end: { line: 487, column: 29 } },
                '72': { start: { line: 488, column: 4 }, end: { line: 490, column: 6 } },
                '73': { start: { line: 493, column: 2 }, end: { line: 501, column: 3 } },
                '74': { start: { line: 497, column: 4 }, end: { line: 497, column: 28 } },
                '75': { start: { line: 498, column: 4 }, end: { line: 500, column: 6 } },
                '76': { start: { line: 503, column: 2 }, end: { line: 503, column: 59 } },
                '77': { start: { line: 504, column: 2 }, end: { line: 504, column: 55 } },
                '78': { start: { line: 505, column: 2 }, end: { line: 505, column: 61 } },
                '79': { start: { line: 507, column: 2 }, end: { line: 507, column: 14 } },
                '80': { start: { line: 637, column: 0 }, end: { line: 848, column: 2 } },
                '81': { start: { line: 650, column: 2 }, end: { line: 650, column: 30 } },
                '82': { start: { line: 651, column: 2 }, end: { line: 651, column: 49 } },
                '83': { start: { line: 654, column: 17 }, end: { line: 654, column: 33 } },
                '84': { start: { line: 656, column: 2 }, end: { line: 808, column: 3 } },
                '85': { start: { line: 659, column: 6 }, end: { line: 659, column: 37 } },
                '86': { start: { line: 660, column: 6 }, end: { line: 660, column: 40 } },
                '87': { start: { line: 661, column: 6 }, end: { line: 661, column: 44 } },
                '88': { start: { line: 662, column: 6 }, end: { line: 662, column: 12 } },
                '89': { start: { line: 665, column: 6 }, end: { line: 687, column: 7 } },
                '90': { start: { line: 666, column: 8 }, end: { line: 666, column: 19 } },
                '91': { start: { line: 667, column: 8 }, end: { line: 667, column: 44 } },
                '92': { start: { line: 668, column: 8 }, end: { line: 668, column: 44 } },
                '93': { start: { line: 669, column: 8 }, end: { line: 669, column: 19 } },
                '94': { start: { line: 670, column: 8 }, end: { line: 670, column: 27 } },
                '95': { start: { line: 671, column: 13 }, end: { line: 687, column: 7 } },
                '96': { start: { line: 672, column: 8 }, end: { line: 672, column: 39 } },
                '97': { start: { line: 673, column: 8 }, end: { line: 673, column: 21 } },
                '98': { start: { line: 674, column: 8 }, end: { line: 674, column: 44 } },
                '99': { start: { line: 675, column: 8 }, end: { line: 675, column: 19 } },
                '100': { start: { line: 676, column: 8 }, end: { line: 676, column: 27 } },
                '101': { start: { line: 677, column: 13 }, end: { line: 687, column: 7 } },
                '102': { start: { line: 678, column: 8 }, end: { line: 678, column: 39 } },
                '103': { start: { line: 679, column: 8 }, end: { line: 679, column: 42 } },
                '104': { start: { line: 680, column: 8 }, end: { line: 680, column: 23 } },
                '105': { start: { line: 681, column: 8 }, end: { line: 681, column: 19 } },
                '106': { start: { line: 682, column: 8 }, end: { line: 682, column: 27 } },
                '107': { start: { line: 684, column: 8 }, end: { line: 684, column: 39 } },
                '108': { start: { line: 685, column: 8 }, end: { line: 685, column: 42 } },
                '109': { start: { line: 686, column: 8 }, end: { line: 686, column: 46 } },
                '110': { start: { line: 688, column: 6 }, end: { line: 688, column: 12 } },
                '111': { start: { line: 691, column: 6 }, end: { line: 706, column: 7 } },
                '112': { start: { line: 692, column: 8 }, end: { line: 692, column: 19 } },
                '113': { start: { line: 693, column: 8 }, end: { line: 693, column: 44 } },
                '114': { start: { line: 694, column: 8 }, end: { line: 694, column: 44 } },
                '115': { start: { line: 695, column: 8 }, end: { line: 695, column: 19 } },
                '116': { start: { line: 696, column: 13 }, end: { line: 706, column: 7 } },
                '117': { start: { line: 697, column: 8 }, end: { line: 697, column: 39 } },
                '118': { start: { line: 698, column: 8 }, end: { line: 698, column: 21 } },
                '119': { start: { line: 699, column: 8 }, end: { line: 699, column: 44 } },
                '120': { start: { line: 700, column: 8 }, end: { line: 700, column: 19 } },
                '121': { start: { line: 702, column: 8 }, end: { line: 702, column: 39 } },
                '122': { start: { line: 703, column: 8 }, end: { line: 703, column: 42 } },
                '123': { start: { line: 704, column: 8 }, end: { line: 704, column: 23 } },
                '124': { start: { line: 705, column: 8 }, end: { line: 705, column: 19 } },
                '125': { start: { line: 707, column: 6 }, end: { line: 707, column: 12 } },
                '126': { start: { line: 710, column: 6 }, end: { line: 740, column: 7 } },
                '127': { start: { line: 711, column: 8 }, end: { line: 711, column: 19 } },
                '128': { start: { line: 712, column: 8 }, end: { line: 712, column: 22 } },
                '129': { start: { line: 713, column: 8 }, end: { line: 713, column: 44 } },
                '130': { start: { line: 714, column: 8 }, end: { line: 714, column: 18 } },
                '131': { start: { line: 715, column: 8 }, end: { line: 715, column: 27 } },
                '132': { start: { line: 716, column: 13 }, end: { line: 740, column: 7 } },
                '133': { start: { line: 717, column: 8 }, end: { line: 717, column: 19 } },
                '134': { start: { line: 718, column: 8 }, end: { line: 718, column: 44 } },
                '135': { start: { line: 719, column: 8 }, end: { line: 719, column: 22 } },
                '136': { start: { line: 720, column: 8 }, end: { line: 720, column: 18 } },
                '137': { start: { line: 721, column: 8 }, end: { line: 721, column: 27 } },
                '138': { start: { line: 722, column: 13 }, end: { line: 740, column: 7 } },
                '139': { start: { line: 723, column: 8 }, end: { line: 723, column: 39 } },
                '140': { start: { line: 724, column: 8 }, end: { line: 724, column: 21 } },
                '141': { start: { line: 725, column: 8 }, end: { line: 725, column: 22 } },
                '142': { start: { line: 726, column: 8 }, end: { line: 726, column: 18 } },
                '143': { start: { line: 727, column: 8 }, end: { line: 727, column: 27 } },
                '144': { start: { line: 728, column: 13 }, end: { line: 740, column: 7 } },
                '145': { start: { line: 729, column: 8 }, end: { line: 729, column: 19 } },
                '146': { start: { line: 730, column: 8 }, end: { line: 730, column: 44 } },
                '147': { start: { line: 731, column: 8 }, end: { line: 731, column: 44 } },
                '148': { start: { line: 732, column: 13 }, end: { line: 740, column: 7 } },
                '149': { start: { line: 733, column: 8 }, end: { line: 733, column: 39 } },
                '150': { start: { line: 734, column: 8 }, end: { line: 734, column: 21 } },
                '151': { start: { line: 735, column: 8 }, end: { line: 735, column: 44 } },
                '152': { start: { line: 737, column: 8 }, end: { line: 737, column: 39 } },
                '153': { start: { line: 738, column: 8 }, end: { line: 738, column: 42 } },
                '154': { start: { line: 739, column: 8 }, end: { line: 739, column: 23 } },
                '155': { start: { line: 741, column: 6 }, end: { line: 741, column: 12 } },
                '156': { start: { line: 744, column: 6 }, end: { line: 759, column: 7 } },
                '157': { start: { line: 745, column: 8 }, end: { line: 745, column: 39 } },
                '158': { start: { line: 746, column: 8 }, end: { line: 746, column: 21 } },
                '159': { start: { line: 747, column: 8 }, end: { line: 747, column: 22 } },
                '160': { start: { line: 748, column: 8 }, end: { line: 748, column: 18 } },
                '161': { start: { line: 749, column: 13 }, end: { line: 759, column: 7 } },
                '162': { start: { line: 750, column: 8 }, end: { line: 750, column: 19 } },
                '163': { start: { line: 751, column: 8 }, end: { line: 751, column: 44 } },
                '164': { start: { line: 752, column: 8 }, end: { line: 752, column: 22 } },
                '165': { start: { line: 753, column: 8 }, end: { line: 753, column: 18 } },
                '166': { start: { line: 754, column: 13 }, end: { line: 759, column: 7 } },
                '167': { start: { line: 755, column: 8 }, end: { line: 755, column: 19 } },
                '168': { start: { line: 756, column: 8 }, end: { line: 756, column: 22 } },
                '169': { start: { line: 757, column: 8 }, end: { line: 757, column: 44 } },
                '170': { start: { line: 758, column: 8 }, end: { line: 758, column: 18 } },
                '171': { start: { line: 760, column: 6 }, end: { line: 760, column: 12 } },
                '172': { start: { line: 763, column: 6 }, end: { line: 785, column: 7 } },
                '173': { start: { line: 768, column: 8 }, end: { line: 768, column: 19 } },
                '174': { start: { line: 769, column: 8 }, end: { line: 769, column: 22 } },
                '175': { start: { line: 770, column: 8 }, end: { line: 770, column: 23 } },
                '176': { start: { line: 771, column: 8 }, end: { line: 771, column: 18 } },
                '177': { start: { line: 772, column: 8 }, end: { line: 772, column: 26 } },
                '178': { start: { line: 773, column: 13 }, end: { line: 785, column: 7 } },
                '179': { start: { line: 774, column: 8 }, end: { line: 774, column: 39 } },
                '180': { start: { line: 775, column: 8 }, end: { line: 775, column: 21 } },
                '181': { start: { line: 776, column: 8 }, end: { line: 776, column: 22 } },
                '182': { start: { line: 777, column: 13 }, end: { line: 785, column: 7 } },
                '183': { start: { line: 778, column: 8 }, end: { line: 778, column: 19 } },
                '184': { start: { line: 779, column: 8 }, end: { line: 779, column: 44 } },
                '185': { start: { line: 780, column: 8 }, end: { line: 780, column: 22 } },
                '186': { start: { line: 781, column: 13 }, end: { line: 785, column: 7 } },
                '187': { start: { line: 782, column: 8 }, end: { line: 782, column: 19 } },
                '188': { start: { line: 783, column: 8 }, end: { line: 783, column: 22 } },
                '189': { start: { line: 784, column: 8 }, end: { line: 784, column: 44 } },
                '190': { start: { line: 786, column: 6 }, end: { line: 786, column: 12 } },
                '191': { start: { line: 789, column: 6 }, end: { line: 789, column: 17 } },
                '192': { start: { line: 790, column: 6 }, end: { line: 790, column: 20 } },
                '193': { start: { line: 791, column: 6 }, end: { line: 791, column: 21 } },
                '194': { start: { line: 792, column: 6 }, end: { line: 792, column: 16 } },
                '195': { start: { line: 793, column: 6 }, end: { line: 793, column: 12 } },
                '196': { start: { line: 796, column: 6 }, end: { line: 796, column: 17 } },
                '197': { start: { line: 797, column: 6 }, end: { line: 797, column: 20 } },
                '198': { start: { line: 798, column: 6 }, end: { line: 798, column: 21 } },
                '199': { start: { line: 799, column: 6 }, end: { line: 799, column: 12 } },
                '200': { start: { line: 802, column: 6 }, end: { line: 806, column: 8 } },
                '201': { start: { line: 807, column: 6 }, end: { line: 807, column: 18 } },
                '202': { start: { line: 809, column: 2 }, end: { line: 813, column: 4 } },
                '203': { start: { line: 815, column: 2 }, end: { line: 818, column: 4 } },
                '204': { start: { line: 820, column: 2 }, end: { line: 820, column: 77 } },
                '205': { start: { line: 821, column: 2 }, end: { line: 821, column: 24 } },
                '206': { start: { line: 822, column: 2 }, end: { line: 826, column: 4 } },
                '207': { start: { line: 828, column: 2 }, end: { line: 830, column: 3 } },
                '208': { start: { line: 829, column: 4 }, end: { line: 829, column: 24 } },
                '209': { start: { line: 832, column: 2 }, end: { line: 839, column: 3 } },
                '210': { start: { line: 833, column: 4 }, end: { line: 833, column: 22 } },
                '211': { start: { line: 834, column: 4 }, end: { line: 836, column: 6 } },
                '212': { start: { line: 837, column: 9 }, end: { line: 839, column: 3 } },
                '213': { start: { line: 838, column: 4 }, end: { line: 838, column: 24 } },
                '214': { start: { line: 841, column: 2 }, end: { line: 841, column: 50 } },
                '215': { start: { line: 842, column: 2 }, end: { line: 842, column: 54 } },
                '216': { start: { line: 843, column: 2 }, end: { line: 843, column: 51 } },
                '217': { start: { line: 845, column: 2 }, end: { line: 845, column: 40 } },
                '218': { start: { line: 847, column: 2 }, end: { line: 847, column: 14 } },
                '219': { start: { line: 884, column: 0 }, end: { line: 914, column: 2 } },
                '220': { start: { line: 885, column: 2 }, end: { line: 885, column: 29 } },
                '221': { start: { line: 886, column: 2 }, end: { line: 886, column: 48 } },
                '222': { start: { line: 888, column: 2 }, end: { line: 888, column: 41 } },
                '223': { start: { line: 890, column: 2 }, end: { line: 890, column: 47 } },
                '224': { start: { line: 891, column: 2 }, end: { line: 891, column: 44 } },
                '225': { start: { line: 893, column: 2 }, end: { line: 893, column: 55 } },
                '226': { start: { line: 894, column: 2 }, end: { line: 894, column: 58 } },
                '227': { start: { line: 895, column: 2 }, end: { line: 895, column: 59 } },
                '228': { start: { line: 897, column: 2 }, end: { line: 897, column: 48 } },
                '229': { start: { line: 898, column: 2 }, end: { line: 898, column: 52 } },
                '230': { start: { line: 899, column: 2 }, end: { line: 899, column: 53 } },
                '231': { start: { line: 901, column: 2 }, end: { line: 901, column: 47 } },
                '232': { start: { line: 902, column: 2 }, end: { line: 902, column: 48 } },
                '233': { start: { line: 903, column: 2 }, end: { line: 903, column: 51 } },
                '234': { start: { line: 904, column: 2 }, end: { line: 904, column: 52 } },
                '235': { start: { line: 905, column: 2 }, end: { line: 905, column: 43 } },
                '236': { start: { line: 906, column: 2 }, end: { line: 906, column: 42 } },
                '237': { start: { line: 908, column: 2 }, end: { line: 908, column: 41 } },
                '238': { start: { line: 909, column: 2 }, end: { line: 909, column: 39 } },
                '239': { start: { line: 910, column: 2 }, end: { line: 910, column: 42 } },
                '240': { start: { line: 911, column: 2 }, end: { line: 911, column: 35 } },
                '241': { start: { line: 913, column: 2 }, end: { line: 913, column: 14 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 76, column: 28 }, end: { line: 76, column: 29 } },
                  loc: { start: { line: 76, column: 52 }, end: { line: 90, column: 1 } },
                  line: 76
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: {
                    start: { line: 163, column: 29 },
                    end: { line: 163, column: 30 }
                  },
                  loc: { start: { line: 163, column: 50 }, end: { line: 175, column: 1 } },
                  line: 163
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 237, column: 32 },
                    end: { line: 237, column: 33 }
                  },
                  loc: { start: { line: 237, column: 62 }, end: { line: 278, column: 1 } },
                  line: 237
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 347, column: 26 },
                    end: { line: 347, column: 27 }
                  },
                  loc: { start: { line: 347, column: 56 }, end: { line: 385, column: 1 } },
                  line: 347
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 411, column: 22 },
                    end: { line: 411, column: 23 }
                  },
                  loc: { start: { line: 411, column: 33 }, end: { line: 423, column: 1 } },
                  line: 411
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 464, column: 28 },
                    end: { line: 464, column: 29 }
                  },
                  loc: { start: { line: 468, column: 2 }, end: { line: 508, column: 1 } },
                  line: 468
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 637, column: 25 },
                    end: { line: 637, column: 26 }
                  },
                  loc: { start: { line: 649, column: 2 }, end: { line: 848, column: 1 } },
                  line: 649
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 884, column: 24 },
                    end: { line: 884, column: 25 }
                  },
                  loc: { start: { line: 884, column: 35 }, end: { line: 914, column: 1 } },
                  line: 884
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 243, column: 2 }, end: { line: 247, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 243, column: 2 }, end: { line: 247, column: 3 } },
                    { start: { line: 243, column: 2 }, end: { line: 247, column: 3 } }
                  ],
                  line: 243
                },
                '1': {
                  loc: { start: { line: 251, column: 2 }, end: { line: 259, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 251, column: 2 }, end: { line: 259, column: 3 } },
                    { start: { line: 251, column: 2 }, end: { line: 259, column: 3 } }
                  ],
                  line: 251
                },
                '2': {
                  loc: { start: { line: 353, column: 2 }, end: { line: 357, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 353, column: 2 }, end: { line: 357, column: 3 } },
                    { start: { line: 353, column: 2 }, end: { line: 357, column: 3 } }
                  ],
                  line: 353
                },
                '3': {
                  loc: { start: { line: 361, column: 2 }, end: { line: 369, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 361, column: 2 }, end: { line: 369, column: 3 } },
                    { start: { line: 361, column: 2 }, end: { line: 369, column: 3 } }
                  ],
                  line: 361
                },
                '4': {
                  loc: { start: { line: 414, column: 2 }, end: { line: 421, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 414, column: 2 }, end: { line: 421, column: 3 } },
                    { start: { line: 414, column: 2 }, end: { line: 421, column: 3 } }
                  ],
                  line: 414
                },
                '5': {
                  loc: { start: { line: 472, column: 2 }, end: { line: 477, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 472, column: 2 }, end: { line: 477, column: 3 } },
                    { start: { line: 472, column: 2 }, end: { line: 477, column: 3 } }
                  ],
                  line: 472
                },
                '6': {
                  loc: { start: { line: 479, column: 2 }, end: { line: 484, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 479, column: 2 }, end: { line: 484, column: 3 } },
                    { start: { line: 479, column: 2 }, end: { line: 484, column: 3 } }
                  ],
                  line: 479
                },
                '7': {
                  loc: { start: { line: 486, column: 2 }, end: { line: 491, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 486, column: 2 }, end: { line: 491, column: 3 } },
                    { start: { line: 486, column: 2 }, end: { line: 491, column: 3 } }
                  ],
                  line: 486
                },
                '8': {
                  loc: { start: { line: 493, column: 2 }, end: { line: 501, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 493, column: 2 }, end: { line: 501, column: 3 } },
                    { start: { line: 493, column: 2 }, end: { line: 501, column: 3 } }
                  ],
                  line: 493
                },
                '9': {
                  loc: { start: { line: 494, column: 4 }, end: { line: 495, column: 59 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 494, column: 4 }, end: { line: 494, column: 29 } },
                    { start: { line: 495, column: 5 }, end: { line: 495, column: 28 } },
                    { start: { line: 495, column: 32 }, end: { line: 495, column: 58 } }
                  ],
                  line: 494
                },
                '10': {
                  loc: { start: { line: 656, column: 2 }, end: { line: 808, column: 3 } },
                  type: 'switch',
                  locations: [
                    { start: { line: 657, column: 4 }, end: { line: 657, column: 12 } },
                    { start: { line: 658, column: 4 }, end: { line: 662, column: 12 } },
                    { start: { line: 664, column: 4 }, end: { line: 688, column: 12 } },
                    { start: { line: 690, column: 4 }, end: { line: 707, column: 12 } },
                    { start: { line: 709, column: 4 }, end: { line: 741, column: 12 } },
                    { start: { line: 743, column: 4 }, end: { line: 760, column: 12 } },
                    { start: { line: 762, column: 4 }, end: { line: 786, column: 12 } },
                    { start: { line: 788, column: 4 }, end: { line: 793, column: 12 } },
                    { start: { line: 795, column: 4 }, end: { line: 799, column: 12 } },
                    { start: { line: 801, column: 4 }, end: { line: 807, column: 18 } }
                  ],
                  line: 656
                },
                '11': {
                  loc: { start: { line: 665, column: 6 }, end: { line: 687, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 665, column: 6 }, end: { line: 687, column: 7 } },
                    { start: { line: 665, column: 6 }, end: { line: 687, column: 7 } }
                  ],
                  line: 665
                },
                '12': {
                  loc: { start: { line: 671, column: 13 }, end: { line: 687, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 671, column: 13 }, end: { line: 687, column: 7 } },
                    { start: { line: 671, column: 13 }, end: { line: 687, column: 7 } }
                  ],
                  line: 671
                },
                '13': {
                  loc: { start: { line: 677, column: 13 }, end: { line: 687, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 677, column: 13 }, end: { line: 687, column: 7 } },
                    { start: { line: 677, column: 13 }, end: { line: 687, column: 7 } }
                  ],
                  line: 677
                },
                '14': {
                  loc: { start: { line: 691, column: 6 }, end: { line: 706, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 691, column: 6 }, end: { line: 706, column: 7 } },
                    { start: { line: 691, column: 6 }, end: { line: 706, column: 7 } }
                  ],
                  line: 691
                },
                '15': {
                  loc: { start: { line: 696, column: 13 }, end: { line: 706, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 696, column: 13 }, end: { line: 706, column: 7 } },
                    { start: { line: 696, column: 13 }, end: { line: 706, column: 7 } }
                  ],
                  line: 696
                },
                '16': {
                  loc: { start: { line: 710, column: 6 }, end: { line: 740, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 710, column: 6 }, end: { line: 740, column: 7 } },
                    { start: { line: 710, column: 6 }, end: { line: 740, column: 7 } }
                  ],
                  line: 710
                },
                '17': {
                  loc: { start: { line: 710, column: 10 }, end: { line: 710, column: 59 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 710, column: 10 }, end: { line: 710, column: 32 } },
                    { start: { line: 710, column: 36 }, end: { line: 710, column: 59 } }
                  ],
                  line: 710
                },
                '18': {
                  loc: { start: { line: 716, column: 13 }, end: { line: 740, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 716, column: 13 }, end: { line: 740, column: 7 } },
                    { start: { line: 716, column: 13 }, end: { line: 740, column: 7 } }
                  ],
                  line: 716
                },
                '19': {
                  loc: { start: { line: 716, column: 17 }, end: { line: 716, column: 65 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 716, column: 17 }, end: { line: 716, column: 39 } },
                    { start: { line: 716, column: 43 }, end: { line: 716, column: 65 } }
                  ],
                  line: 716
                },
                '20': {
                  loc: { start: { line: 722, column: 13 }, end: { line: 740, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 722, column: 13 }, end: { line: 740, column: 7 } },
                    { start: { line: 722, column: 13 }, end: { line: 740, column: 7 } }
                  ],
                  line: 722
                },
                '21': {
                  loc: { start: { line: 722, column: 17 }, end: { line: 722, column: 65 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 722, column: 17 }, end: { line: 722, column: 39 } },
                    { start: { line: 722, column: 43 }, end: { line: 722, column: 65 } }
                  ],
                  line: 722
                },
                '22': {
                  loc: { start: { line: 728, column: 13 }, end: { line: 740, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 728, column: 13 }, end: { line: 740, column: 7 } },
                    { start: { line: 728, column: 13 }, end: { line: 740, column: 7 } }
                  ],
                  line: 728
                },
                '23': {
                  loc: { start: { line: 732, column: 13 }, end: { line: 740, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 732, column: 13 }, end: { line: 740, column: 7 } },
                    { start: { line: 732, column: 13 }, end: { line: 740, column: 7 } }
                  ],
                  line: 732
                },
                '24': {
                  loc: { start: { line: 744, column: 6 }, end: { line: 759, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 744, column: 6 }, end: { line: 759, column: 7 } },
                    { start: { line: 744, column: 6 }, end: { line: 759, column: 7 } }
                  ],
                  line: 744
                },
                '25': {
                  loc: { start: { line: 744, column: 10 }, end: { line: 744, column: 58 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 744, column: 10 }, end: { line: 744, column: 32 } },
                    { start: { line: 744, column: 36 }, end: { line: 744, column: 58 } }
                  ],
                  line: 744
                },
                '26': {
                  loc: { start: { line: 749, column: 13 }, end: { line: 759, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 749, column: 13 }, end: { line: 759, column: 7 } },
                    { start: { line: 749, column: 13 }, end: { line: 759, column: 7 } }
                  ],
                  line: 749
                },
                '27': {
                  loc: { start: { line: 749, column: 17 }, end: { line: 749, column: 65 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 749, column: 17 }, end: { line: 749, column: 39 } },
                    { start: { line: 749, column: 43 }, end: { line: 749, column: 65 } }
                  ],
                  line: 749
                },
                '28': {
                  loc: { start: { line: 754, column: 13 }, end: { line: 759, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 754, column: 13 }, end: { line: 759, column: 7 } },
                    { start: { line: 754, column: 13 }, end: { line: 759, column: 7 } }
                  ],
                  line: 754
                },
                '29': {
                  loc: { start: { line: 754, column: 17 }, end: { line: 754, column: 66 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 754, column: 17 }, end: { line: 754, column: 39 } },
                    { start: { line: 754, column: 43 }, end: { line: 754, column: 66 } }
                  ],
                  line: 754
                },
                '30': {
                  loc: { start: { line: 763, column: 6 }, end: { line: 785, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 763, column: 6 }, end: { line: 785, column: 7 } },
                    { start: { line: 763, column: 6 }, end: { line: 785, column: 7 } }
                  ],
                  line: 763
                },
                '31': {
                  loc: { start: { line: 764, column: 8 }, end: { line: 766, column: 31 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 764, column: 8 }, end: { line: 764, column: 30 } },
                    { start: { line: 765, column: 8 }, end: { line: 765, column: 31 } },
                    { start: { line: 766, column: 8 }, end: { line: 766, column: 31 } }
                  ],
                  line: 764
                },
                '32': {
                  loc: { start: { line: 773, column: 13 }, end: { line: 785, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 773, column: 13 }, end: { line: 785, column: 7 } },
                    { start: { line: 773, column: 13 }, end: { line: 785, column: 7 } }
                  ],
                  line: 773
                },
                '33': {
                  loc: { start: { line: 773, column: 17 }, end: { line: 773, column: 65 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 773, column: 17 }, end: { line: 773, column: 39 } },
                    { start: { line: 773, column: 43 }, end: { line: 773, column: 65 } }
                  ],
                  line: 773
                },
                '34': {
                  loc: { start: { line: 777, column: 13 }, end: { line: 785, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 777, column: 13 }, end: { line: 785, column: 7 } },
                    { start: { line: 777, column: 13 }, end: { line: 785, column: 7 } }
                  ],
                  line: 777
                },
                '35': {
                  loc: { start: { line: 777, column: 17 }, end: { line: 777, column: 65 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 777, column: 17 }, end: { line: 777, column: 39 } },
                    { start: { line: 777, column: 43 }, end: { line: 777, column: 65 } }
                  ],
                  line: 777
                },
                '36': {
                  loc: { start: { line: 781, column: 13 }, end: { line: 785, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 781, column: 13 }, end: { line: 785, column: 7 } },
                    { start: { line: 781, column: 13 }, end: { line: 785, column: 7 } }
                  ],
                  line: 781
                },
                '37': {
                  loc: { start: { line: 781, column: 17 }, end: { line: 781, column: 66 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 781, column: 17 }, end: { line: 781, column: 39 } },
                    { start: { line: 781, column: 43 }, end: { line: 781, column: 66 } }
                  ],
                  line: 781
                },
                '38': {
                  loc: { start: { line: 804, column: 10 }, end: { line: 804, column: 37 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 804, column: 23 }, end: { line: 804, column: 28 } },
                    { start: { line: 804, column: 31 }, end: { line: 804, column: 37 } }
                  ],
                  line: 804
                },
                '39': {
                  loc: { start: { line: 828, column: 2 }, end: { line: 830, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 828, column: 2 }, end: { line: 830, column: 3 } },
                    { start: { line: 828, column: 2 }, end: { line: 830, column: 3 } }
                  ],
                  line: 828
                },
                '40': {
                  loc: { start: { line: 832, column: 2 }, end: { line: 839, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 832, column: 2 }, end: { line: 839, column: 3 } },
                    { start: { line: 832, column: 2 }, end: { line: 839, column: 3 } }
                  ],
                  line: 832
                },
                '41': {
                  loc: { start: { line: 832, column: 6 }, end: { line: 832, column: 54 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 832, column: 6 }, end: { line: 832, column: 33 } },
                    { start: { line: 832, column: 37 }, end: { line: 832, column: 54 } }
                  ],
                  line: 832
                },
                '42': {
                  loc: { start: { line: 837, column: 9 }, end: { line: 839, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 837, column: 9 }, end: { line: 839, column: 3 } },
                    { start: { line: 837, column: 9 }, end: { line: 839, column: 3 } }
                  ],
                  line: 837
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0,
                '118': 0,
                '119': 0,
                '120': 0,
                '121': 0,
                '122': 0,
                '123': 0,
                '124': 0,
                '125': 0,
                '126': 0,
                '127': 0,
                '128': 0,
                '129': 0,
                '130': 0,
                '131': 0,
                '132': 0,
                '133': 0,
                '134': 0,
                '135': 0,
                '136': 0,
                '137': 0,
                '138': 0,
                '139': 0,
                '140': 0,
                '141': 0,
                '142': 0,
                '143': 0,
                '144': 0,
                '145': 0,
                '146': 0,
                '147': 0,
                '148': 0,
                '149': 0,
                '150': 0,
                '151': 0,
                '152': 0,
                '153': 0,
                '154': 0,
                '155': 0,
                '156': 0,
                '157': 0,
                '158': 0,
                '159': 0,
                '160': 0,
                '161': 0,
                '162': 0,
                '163': 0,
                '164': 0,
                '165': 0,
                '166': 0,
                '167': 0,
                '168': 0,
                '169': 0,
                '170': 0,
                '171': 0,
                '172': 0,
                '173': 0,
                '174': 0,
                '175': 0,
                '176': 0,
                '177': 0,
                '178': 0,
                '179': 0,
                '180': 0,
                '181': 0,
                '182': 0,
                '183': 0,
                '184': 0,
                '185': 0,
                '186': 0,
                '187': 0,
                '188': 0,
                '189': 0,
                '190': 0,
                '191': 0,
                '192': 0,
                '193': 0,
                '194': 0,
                '195': 0,
                '196': 0,
                '197': 0,
                '198': 0,
                '199': 0,
                '200': 0,
                '201': 0,
                '202': 0,
                '203': 0,
                '204': 0,
                '205': 0,
                '206': 0,
                '207': 0,
                '208': 0,
                '209': 0,
                '210': 0,
                '211': 0,
                '212': 0,
                '213': 0,
                '214': 0,
                '215': 0,
                '216': 0,
                '217': 0,
                '218': 0,
                '219': 0,
                '220': 0,
                '221': 0,
                '222': 0,
                '223': 0,
                '224': 0,
                '225': 0,
                '226': 0,
                '227': 0,
                '228': 0,
                '229': 0,
                '230': 0,
                '231': 0,
                '232': 0,
                '233': 0,
                '234': 0,
                '235': 0,
                '236': 0,
                '237': 0,
                '238': 0,
                '239': 0,
                '240': 0,
                '241': 0
              },
              f: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0 },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0, 0],
                '10': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0],
                '20': [0, 0],
                '21': [0, 0],
                '22': [0, 0],
                '23': [0, 0],
                '24': [0, 0],
                '25': [0, 0],
                '26': [0, 0],
                '27': [0, 0],
                '28': [0, 0],
                '29': [0, 0],
                '30': [0, 0],
                '31': [0, 0, 0],
                '32': [0, 0],
                '33': [0, 0],
                '34': [0, 0],
                '35': [0, 0],
                '36': [0, 0],
                '37': [0, 0],
                '38': [0, 0],
                '39': [0, 0],
                '40': [0, 0],
                '41': [0, 0],
                '42': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '2b0882e2b94dfcf65a510101c5ee98f69bca1070'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          var constants = _interopRequireWildcard(_dereq_('../core/constants'));
          function _getRequireWildcardCache() {
            if (typeof WeakMap !== 'function') return null;
            var cache = new WeakMap();
            _getRequireWildcardCache = function _getRequireWildcardCache() {
              return cache;
            };
            return cache;
          }
          function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
              return obj;
            }
            if (obj === null || (_typeof(obj) !== 'object' && typeof obj !== 'function')) {
              return { default: obj };
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
              return cache.get(obj);
            }
            var newObj = {};
            var hasPropertyDescriptor =
              Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
              if (Object.prototype.hasOwnProperty.call(obj, key)) {
                var desc = hasPropertyDescriptor
                  ? Object.getOwnPropertyDescriptor(obj, key)
                  : null;
                if (desc && (desc.get || desc.set)) {
                  Object.defineProperty(newObj, key, desc);
                } else {
                  newObj[key] = obj[key];
                }
              }
            }
            newObj.default = obj;
            if (cache) {
              cache.set(obj, newObj);
            }
            return newObj;
          }
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_139va9y9s8.s[0]++;

          /**
           * Creates an ambient light with a color. Ambient light is light that comes from everywhere on the canvas.
           * It has no particular source.
           * @method ambientLight
           * @param  {Number}        v1      red or hue value relative to
           *                                 the current color range
           * @param  {Number}        v2      green or saturation value
           *                                 relative to the current color range
           * @param  {Number}        v3      blue or brightness value
           *                                 relative to the current color range
           * @param  {Number}        [alpha] the alpha value
           * @chainable
           *
           * @example
           * <div>
           * <code>
           * createCanvas(100, 100, WEBGL);
           * ambientLight(0);
           * ambientMaterial(250);
           * sphere(40);
           * </code>
           * </div>
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           * function draw() {
           *   background(51);
           *   ambientLight(100); // white light
           *   ambientMaterial(255, 102, 94); // magenta material
           *   box(30);
           * }
           * </code>
           * </div>
           * @alt
           * evenly distributed light across a sphere
           * evenly distributed light across a rotating sphere
           */

          /**
           * @method ambientLight
           * @param  {String}        value   a color string
           * @chainable
           */

          /**
           * @method ambientLight
           * @param  {Number}        gray   a gray value
           * @param  {Number}        [alpha]
           * @chainable
           */

          /**
           * @method ambientLight
           * @param  {Number[]}      values  an array containing the red,green,blue &
           *                                 and alpha components of the color
           * @chainable
           */

          /**
           * @method ambientLight
           * @param  {p5.Color}      color   the ambient light color
           * @chainable
           */
          _main.default.prototype.ambientLight = function(v1, v2, v3, a) {
            cov_139va9y9s8.f[0]++;
            cov_139va9y9s8.s[1]++;
            this._assert3d('ambientLight');
            cov_139va9y9s8.s[2]++;
            _main.default._validateParameters('ambientLight', arguments);
            var color = (cov_139va9y9s8.s[3]++, this.color.apply(this, arguments));
            cov_139va9y9s8.s[4]++;

            this._renderer.ambientLightColors.push(
              color._array[0],
              color._array[1],
              color._array[2]
            );
            cov_139va9y9s8.s[5]++;

            this._renderer._enableLighting = true;
            cov_139va9y9s8.s[6]++;

            return this;
          };

          /**
           * Set's the color of the specular highlight when using a specular material and
           * specular light.
           *
           * This method can be combined with specularMaterial() and shininess()
           * functions to set specular highlights. The default color is white, ie
           * (255, 255, 255), which is used if this method is not called before
           * specularMaterial(). If this method is called without specularMaterial(),
           * There will be no effect.
           *
           * Note: specularColor is equivalent to the processing function
           * <a href="https://processing.org/reference/lightSpecular_.html">lightSpecular</a>.
           *
           * @method specularColor
           * @param  {Number}        v1      red or hue value relative to
           *                                 the current color range
           * @param  {Number}        v2      green or saturation value
           *                                 relative to the current color range
           * @param  {Number}        v3      blue or brightness value
           *                                 relative to the current color range
           * @chainable
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   noStroke();
           * }
           *
           * function draw() {
           *   background(0);
           *   shininess(20);
           *   ambientLight(50);
           *   specularColor(255, 0, 0);
           *   pointLight(255, 0, 0, 0, -50, 50);
           *   specularColor(0, 255, 0);
           *   pointLight(0, 255, 0, 0, 50, 50);
           *   specularMaterial(255);
           *   sphere(40);
           * }
           * </code>
           * </div>
           *
           * @alt
           * different specular light sources from top and bottom of canvas
           */

          /**
           * @method specularColor
           * @param  {String}        value   a color string
           * @chainable
           */

          /**
           * @method specularColor
           * @param  {Number}        gray   a gray value
           * @chainable
           */

          /**
           * @method specularColor
           * @param  {Number[]}      values  an array containing the red,green,blue &
           *                                 and alpha components of the color
           * @chainable
           */

          /**
           * @method specularColor
           * @param  {p5.Color}      color   the ambient light color
           * @chainable
           */ cov_139va9y9s8.s[7]++;
          _main.default.prototype.specularColor = function(v1, v2, v3) {
            cov_139va9y9s8.f[1]++;
            cov_139va9y9s8.s[8]++;
            this._assert3d('specularColor');
            cov_139va9y9s8.s[9]++;
            _main.default._validateParameters('specularColor', arguments);
            var color = (cov_139va9y9s8.s[10]++, this.color.apply(this, arguments));
            cov_139va9y9s8.s[11]++;

            this._renderer.specularColors = [
              color._array[0],
              color._array[1],
              color._array[2]
            ];
            cov_139va9y9s8.s[12]++;

            return this;
          };

          /**
           * Creates a directional light with a color and a direction
           *
           * A maximum of 5 directionalLight can be active at one time
           * @method directionalLight
           * @param  {Number}    v1       red or hue value (depending on the current
           * color mode),
           * @param  {Number}    v2       green or saturation value
           * @param  {Number}    v3       blue or brightness value
           * @param  {p5.Vector} position the direction of the light
           * @chainable
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           * function draw() {
           *   background(0);
           *   //move your mouse to change light direction
           *   let dirX = (mouseX / width - 0.5) * 2;
           *   let dirY = (mouseY / height - 0.5) * 2;
           *   directionalLight(250, 250, 250, -dirX, -dirY, -1);
           *   noStroke();
           *   sphere(40);
           * }
           * </code>
           * </div>
           *
           * @alt
           * light source on canvas changeable with mouse position
           */

          /**
           * @method directionalLight
           * @param  {Number[]|String|p5.Color} color   color Array, CSS color string,
           *                                             or <a href="#/p5.Color">p5.Color</a> value
           * @param  {Number}                   x       x axis direction
           * @param  {Number}                   y       y axis direction
           * @param  {Number}                   z       z axis direction
           * @chainable
           */

          /**
           * @method directionalLight
           * @param  {Number[]|String|p5.Color} color
           * @param  {p5.Vector}                position
           * @chainable
           */

          /**
           * @method directionalLight
           * @param  {Number}    v1
           * @param  {Number}    v2
           * @param  {Number}    v3
           * @param  {Number}    x
           * @param  {Number}    y
           * @param  {Number}    z
           * @chainable
           */ cov_139va9y9s8.s[13]++;
          _main.default.prototype.directionalLight = function(v1, v2, v3, x, y, z) {
            cov_139va9y9s8.f[2]++;
            cov_139va9y9s8.s[14]++;
            this._assert3d('directionalLight');
            cov_139va9y9s8.s[15]++;
            _main.default._validateParameters('directionalLight', arguments);

            //@TODO: check parameters number
            var color;
            cov_139va9y9s8.s[16]++;
            if (v1 instanceof _main.default.Color) {
              cov_139va9y9s8.b[0][0]++;
              cov_139va9y9s8.s[17]++;
              color = v1;
            } else {
              cov_139va9y9s8.b[0][1]++;
              cov_139va9y9s8.s[18]++;
              color = this.color(v1, v2, v3);
            }

            var _x, _y, _z;
            var v = (cov_139va9y9s8.s[19]++, arguments[arguments.length - 1]);
            cov_139va9y9s8.s[20]++;
            if (typeof v === 'number') {
              cov_139va9y9s8.b[1][0]++;
              cov_139va9y9s8.s[21]++;
              _x = arguments[arguments.length - 3];
              cov_139va9y9s8.s[22]++;
              _y = arguments[arguments.length - 2];
              cov_139va9y9s8.s[23]++;
              _z = arguments[arguments.length - 1];
            } else {
              cov_139va9y9s8.b[1][1]++;
              cov_139va9y9s8.s[24]++;
              _x = v.x;
              cov_139va9y9s8.s[25]++;
              _y = v.y;
              cov_139va9y9s8.s[26]++;
              _z = v.z;
            }

            // normalize direction
            var l = (cov_139va9y9s8.s[27]++, Math.sqrt(_x * _x + _y * _y + _z * _z));
            cov_139va9y9s8.s[28]++;
            this._renderer.directionalLightDirections.push(_x / l, _y / l, _z / l);
            cov_139va9y9s8.s[29]++;

            this._renderer.directionalLightDiffuseColors.push(
              color._array[0],
              color._array[1],
              color._array[2]
            );
            cov_139va9y9s8.s[30]++;

            Array.prototype.push.apply(
              this._renderer.directionalLightSpecularColors,
              this._renderer.specularColors
            );
            cov_139va9y9s8.s[31]++;

            this._renderer._enableLighting = true;
            cov_139va9y9s8.s[32]++;

            return this;
          };

          /**
           * Creates a point light with a color and a light position
           *
           * A maximum of 5 pointLight can be active at one time
           * @method pointLight
           * @param  {Number}    v1       red or hue value (depending on the current
           * color mode),
           * @param  {Number}    v2       green or saturation value
           * @param  {Number}    v3       blue or brightness value
           * @param  {Number}    x        x axis position
           * @param  {Number}    y        y axis position
           * @param  {Number}    z        z axis position
           * @chainable
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           * function draw() {
           *   background(0);
           *   //move your mouse to change light position
           *   let locX = mouseX - width / 2;
           *   let locY = mouseY - height / 2;
           *   // to set the light position,
           *   // think of the world's coordinate as:
           *   // -width/2,-height/2 -------- width/2,-height/2
           *   //                |            |
           *   //                |     0,0    |
           *   //                |            |
           *   // -width/2,height/2--------width/2,height/2
           *   pointLight(250, 250, 250, locX, locY, 50);
           *   noStroke();
           *   sphere(40);
           * }
           * </code>
           * </div>
           *
           * @alt
           * spot light on canvas changes position with mouse
           */

          /**
           * @method pointLight
           * @param  {Number}    v1
           * @param  {Number}    v2
           * @param  {Number}    v3
           * @param  {p5.Vector} position the position of the light
           * @chainable
           */

          /**
           * @method pointLight
           * @param  {Number[]|String|p5.Color} color   color Array, CSS color string,
           * or <a href="#/p5.Color">p5.Color</a> value
           * @param  {Number}                   x
           * @param  {Number}                   y
           * @param  {Number}                   z
           * @chainable
           */

          /**
           * @method pointLight
           * @param  {Number[]|String|p5.Color} color
           * @param  {p5.Vector}                position
           * @chainable
           */ cov_139va9y9s8.s[33]++;
          _main.default.prototype.pointLight = function(v1, v2, v3, x, y, z) {
            cov_139va9y9s8.f[3]++;
            cov_139va9y9s8.s[34]++;
            this._assert3d('pointLight');
            cov_139va9y9s8.s[35]++;
            _main.default._validateParameters('pointLight', arguments);

            //@TODO: check parameters number
            var color;
            cov_139va9y9s8.s[36]++;
            if (v1 instanceof _main.default.Color) {
              cov_139va9y9s8.b[2][0]++;
              cov_139va9y9s8.s[37]++;
              color = v1;
            } else {
              cov_139va9y9s8.b[2][1]++;
              cov_139va9y9s8.s[38]++;
              color = this.color(v1, v2, v3);
            }

            var _x, _y, _z;
            var v = (cov_139va9y9s8.s[39]++, arguments[arguments.length - 1]);
            cov_139va9y9s8.s[40]++;
            if (typeof v === 'number') {
              cov_139va9y9s8.b[3][0]++;
              cov_139va9y9s8.s[41]++;
              _x = arguments[arguments.length - 3];
              cov_139va9y9s8.s[42]++;
              _y = arguments[arguments.length - 2];
              cov_139va9y9s8.s[43]++;
              _z = arguments[arguments.length - 1];
            } else {
              cov_139va9y9s8.b[3][1]++;
              cov_139va9y9s8.s[44]++;
              _x = v.x;
              cov_139va9y9s8.s[45]++;
              _y = v.y;
              cov_139va9y9s8.s[46]++;
              _z = v.z;
            }
            cov_139va9y9s8.s[47]++;

            this._renderer.pointLightPositions.push(_x, _y, _z);
            cov_139va9y9s8.s[48]++;
            this._renderer.pointLightDiffuseColors.push(
              color._array[0],
              color._array[1],
              color._array[2]
            );
            cov_139va9y9s8.s[49]++;

            Array.prototype.push.apply(
              this._renderer.pointLightSpecularColors,
              this._renderer.specularColors
            );
            cov_139va9y9s8.s[50]++;

            this._renderer._enableLighting = true;
            cov_139va9y9s8.s[51]++;

            return this;
          };

          /**
           * Sets the default ambient and directional light. The defaults are <a href="#/p5/ambientLight">ambientLight(128, 128, 128)</a> and <a href="#/p5/directionalLight">directionalLight(128, 128, 128, 0, 0, -1)</a>. Lights need to be included in the <a href="#/p5/draw">draw()</a> to remain persistent in a looping program. Placing them in the <a href="#/p5/setup">setup()</a> of a looping program will cause them to only have an effect the first time through the loop.
           * @method lights
           * @chainable
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           * function draw() {
           *   background(0);
           *   lights();
           *   rotateX(millis() / 1000);
           *   rotateY(millis() / 1000);
           *   rotateZ(millis() / 1000);
           *   box();
           * }
           * </code>
           * </div>
           *
           * @alt
           * the light is partially ambient and partially directional
           */ cov_139va9y9s8.s[52]++;
          _main.default.prototype.lights = function() {
            cov_139va9y9s8.f[4]++;
            cov_139va9y9s8.s[53]++;
            this._assert3d('lights');
            // only restore the colorMode to default if it is not in default already
            cov_139va9y9s8.s[54]++;
            if (this._colorMode === constants.RGB) {
              cov_139va9y9s8.b[4][0]++;
              cov_139va9y9s8.s[55]++;
              this.ambientLight(128, 128, 128);
              cov_139va9y9s8.s[56]++;
              this.directionalLight(128, 128, 128, 0, 0, -1);
            } else {
              cov_139va9y9s8.b[4][1]++;
              var maxBright = (cov_139va9y9s8.s[57]++,
              this._colorMaxes[this._colorMode][2]);
              cov_139va9y9s8.s[58]++;
              this.ambientLight(0, 0, maxBright);
              cov_139va9y9s8.s[59]++;
              this.directionalLight(0, 0, maxBright, 0, 0, -1);
            }
            cov_139va9y9s8.s[60]++;
            return this;
          };

          /**
           * Sets the falloff rates for point lights. It affects only the elements which are created after it in the code.
           * The default value is lightFalloff(1.0, 0.0, 0.0), and the parameters are used to calculate the falloff with the following equation:
           *
           * d = distance from light position to vertex position
           *
           * falloff = 1 / (CONSTANT + d \* LINEAR + ( d \* d ) \* QUADRATIC)
           *
           * @method lightFalloff
           * @param {Number} constant   constant value for determining falloff
           * @param {Number} linear     linear value for determining falloff
           * @param {Number} quadratic  quadratic value for determining falloff
           * @chainable
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   noStroke();
           * }
           * function draw() {
           *   background(0);
           *   let locX = mouseX - width / 2;
           *   let locY = mouseY - height / 2;
           *   translate(-25, 0, 0);
           *   lightFalloff(1, 0, 0);
           *   pointLight(250, 250, 250, locX, locY, 50);
           *   sphere(20);
           *   translate(50, 0, 0);
           *   lightFalloff(0.9, 0.01, 0);
           *   pointLight(250, 250, 250, locX, locY, 50);
           *   sphere(20);
           * }
           * </code>
           * </div>
           *
           * @alt
           * Two spheres with different falloff values show different intensity of light
           */ cov_139va9y9s8.s[61]++;
          _main.default.prototype.lightFalloff = function(
            constantAttenuation,
            linearAttenuation,
            quadraticAttenuation
          ) {
            cov_139va9y9s8.f[5]++;
            cov_139va9y9s8.s[62]++;
            this._assert3d('lightFalloff');
            cov_139va9y9s8.s[63]++;
            _main.default._validateParameters('lightFalloff', arguments);
            cov_139va9y9s8.s[64]++;

            if (constantAttenuation < 0) {
              cov_139va9y9s8.b[5][0]++;
              cov_139va9y9s8.s[65]++;
              constantAttenuation = 0;
              cov_139va9y9s8.s[66]++;
              console.warn(
                'Value of constant argument in lightFalloff() should be never be negative. Set to 0.'
              );
            } else {
              cov_139va9y9s8.b[5][1]++;
            }
            cov_139va9y9s8.s[67]++;

            if (linearAttenuation < 0) {
              cov_139va9y9s8.b[6][0]++;
              cov_139va9y9s8.s[68]++;
              linearAttenuation = 0;
              cov_139va9y9s8.s[69]++;
              console.warn(
                'Value of linear argument in lightFalloff() should be never be negative. Set to 0.'
              );
            } else {
              cov_139va9y9s8.b[6][1]++;
            }
            cov_139va9y9s8.s[70]++;

            if (quadraticAttenuation < 0) {
              cov_139va9y9s8.b[7][0]++;
              cov_139va9y9s8.s[71]++;
              quadraticAttenuation = 0;
              cov_139va9y9s8.s[72]++;
              console.warn(
                'Value of quadratic argument in lightFalloff() should be never be negative. Set to 0.'
              );
            } else {
              cov_139va9y9s8.b[7][1]++;
            }
            cov_139va9y9s8.s[73]++;

            if (
              (cov_139va9y9s8.b[9][0]++, constantAttenuation === 0) &&
              (cov_139va9y9s8.b[9][1]++, linearAttenuation === 0) &&
              (cov_139va9y9s8.b[9][2]++, quadraticAttenuation === 0)
            ) {
              cov_139va9y9s8.b[8][0]++;
              cov_139va9y9s8.s[74]++;
              constantAttenuation = 1;
              cov_139va9y9s8.s[75]++;
              console.warn(
                'Either one of the three arguments in lightFalloff() should be greater than zero. Set constant argument to 1.'
              );
            } else {
              cov_139va9y9s8.b[8][1]++;
            }
            cov_139va9y9s8.s[76]++;

            this._renderer.constantAttenuation = constantAttenuation;
            cov_139va9y9s8.s[77]++;
            this._renderer.linearAttenuation = linearAttenuation;
            cov_139va9y9s8.s[78]++;
            this._renderer.quadraticAttenuation = quadraticAttenuation;
            cov_139va9y9s8.s[79]++;

            return this;
          };

          /**
           * Creates a spotlight with a given color, position, direction of light,
           * angle and concentration. Here, angle refers to the opening or aperture
           * of the cone of the spotlight, and concentration is used to focus the
           * light towards the center. Both angle and concentration are optional, but if
           * you want to provide concentration, you will also have to specify the angle.
           *
           * A maximum of 5 spotLight can be active at one time
           * @method spotLight
           * @param  {Number}    v1       red or hue value (depending on the current
           * color mode),
           * @param  {Number}    v2       green or saturation value
           * @param  {Number}    v3       blue or brightness value
           * @param  {Number}    x        x axis position
           * @param  {Number}    y        y axis position
           * @param  {Number}    z        z axis position
           * @param  {Number}    rx       x axis direction of light
           * @param  {Number}    ry       y axis direction of light
           * @param  {Number}    rz       z axis direction of light
           * @param  {Number}    [angle]  optional parameter for angle. Defaults to PI/3
           * @param  {Number}    [conc]   optional parameter for concentration. Defaults to 100
           * @chainable
           *
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           * function draw() {
           *   background(0);
           *   //move your mouse to change light position
           *   let locX = mouseX - width / 2;
           *   let locY = mouseY - height / 2;
           *   // to set the light position,
           *   // think of the world's coordinate as:
           *   // -width/2,-height/2 -------- width/2,-height/2
           *   //                |            |
           *   //                |     0,0    |
           *   //                |            |
           *   // -width/2,height/2--------width/2,height/2
           *   ambientLight(50);
           *   spotLight(0, 250, 0, locX, locY, 100, 0, 0, -1, Math.PI / 16);
           *   noStroke();
           *   sphere(40);
           * }
           * </code>
           * </div>
           *
           * @alt
           * Spot light on a sphere which changes position with mouse
           */
          /**
           * @method spotLight
           * @param  {Number[]|String|p5.Color} color color Array, CSS color string,
           * or <a href="#/p5.Color">p5.Color</a> value
           * @param  {p5.Vector}                position the position of the light
           * @param  {p5.Vector}                direction the direction of the light
           * @param  {Number}                   [angle]
           * @param  {Number}                   [conc]
           */
          /**
           * @method spotLight
           * @param  {Number}     v1
           * @param  {Number}     v2
           * @param  {Number}     v3
           * @param  {p5.Vector}  position
           * @param  {p5.Vector}  direction
           * @param  {Number}     [angle]
           * @param  {Number}     [conc]
           */
          /**
           * @method spotLight
           * @param  {Number[]|String|p5.Color} color
           * @param  {Number}                   x
           * @param  {Number}                   y
           * @param  {Number}                   z
           * @param  {p5.Vector}                direction
           * @param  {Number}                   [angle]
           * @param  {Number}                   [conc]
           */
          /**
           * @method spotLight
           * @param  {Number[]|String|p5.Color} color
           * @param  {p5.Vector}                position
           * @param  {Number}                   rx
           * @param  {Number}                   ry
           * @param  {Number}                   rz
           * @param  {Number}                   [angle]
           * @param  {Number}                   [conc]
           */
          /**
           * @method spotLight
           * @param  {Number}     v1
           * @param  {Number}     v2
           * @param  {Number}     v3
           * @param  {Number}     x
           * @param  {Number}     y
           * @param  {Number}     z
           * @param  {p5.Vector}  direction
           * @param  {Number}     [angle]
           * @param  {Number}     [conc]
           */
          /**
           * @method spotLight
           * @param  {Number}     v1
           * @param  {Number}     v2
           * @param  {Number}     v3
           * @param  {p5.Vector}  position
           * @param  {Number}     rx
           * @param  {Number}     ry
           * @param  {Number}     rz
           * @param  {Number}     [angle]
           * @param  {Number}     [conc]
           */
          /**
           * @method spotLight
           * @param  {Number[]|String|p5.Color} color
           * @param  {Number}                   x
           * @param  {Number}                   y
           * @param  {Number}                   z
           * @param  {Number}                   rx
           * @param  {Number}                   ry
           * @param  {Number}                   rz
           * @param  {Number}                   [angle]
           * @param  {Number}                   [conc]
           */ cov_139va9y9s8.s[80]++;
          _main.default.prototype.spotLight = function(
            v1,
            v2,
            v3,
            x,
            y,
            z,
            nx,
            ny,
            nz,
            angle,
            concentration
          ) {
            cov_139va9y9s8.f[6]++;
            cov_139va9y9s8.s[81]++;
            this._assert3d('spotLight');
            cov_139va9y9s8.s[82]++;
            _main.default._validateParameters('spotLight', arguments);

            var color, position, direction;
            var length = (cov_139va9y9s8.s[83]++, arguments.length);
            cov_139va9y9s8.s[84]++;

            switch (length) {
              case 11:
                cov_139va9y9s8.b[10][0]++;
              case 10:
                cov_139va9y9s8.b[10][1]++;
                cov_139va9y9s8.s[85]++;
                color = this.color(v1, v2, v3);
                cov_139va9y9s8.s[86]++;
                position = new _main.default.Vector(x, y, z);
                cov_139va9y9s8.s[87]++;
                direction = new _main.default.Vector(nx, ny, nz);
                cov_139va9y9s8.s[88]++;
                break;

              case 9:
                cov_139va9y9s8.b[10][2]++;
                cov_139va9y9s8.s[89]++;
                if (v1 instanceof _main.default.Color) {
                  cov_139va9y9s8.b[11][0]++;
                  cov_139va9y9s8.s[90]++;
                  color = v1;
                  cov_139va9y9s8.s[91]++;
                  position = new _main.default.Vector(v2, v3, x);
                  cov_139va9y9s8.s[92]++;
                  direction = new _main.default.Vector(y, z, nx);
                  cov_139va9y9s8.s[93]++;
                  angle = ny;
                  cov_139va9y9s8.s[94]++;
                  concentration = nz;
                } else {
                  cov_139va9y9s8.b[11][1]++;
                  cov_139va9y9s8.s[95]++;
                  if (x instanceof _main.default.Vector) {
                    cov_139va9y9s8.b[12][0]++;
                    cov_139va9y9s8.s[96]++;
                    color = this.color(v1, v2, v3);
                    cov_139va9y9s8.s[97]++;
                    position = x;
                    cov_139va9y9s8.s[98]++;
                    direction = new _main.default.Vector(y, z, nx);
                    cov_139va9y9s8.s[99]++;
                    angle = ny;
                    cov_139va9y9s8.s[100]++;
                    concentration = nz;
                  } else {
                    cov_139va9y9s8.b[12][1]++;
                    cov_139va9y9s8.s[101]++;
                    if (nx instanceof _main.default.Vector) {
                      cov_139va9y9s8.b[13][0]++;
                      cov_139va9y9s8.s[102]++;
                      color = this.color(v1, v2, v3);
                      cov_139va9y9s8.s[103]++;
                      position = new _main.default.Vector(x, y, z);
                      cov_139va9y9s8.s[104]++;
                      direction = nx;
                      cov_139va9y9s8.s[105]++;
                      angle = ny;
                      cov_139va9y9s8.s[106]++;
                      concentration = nz;
                    } else {
                      cov_139va9y9s8.b[13][1]++;
                      cov_139va9y9s8.s[107]++;
                      color = this.color(v1, v2, v3);
                      cov_139va9y9s8.s[108]++;
                      position = new _main.default.Vector(x, y, z);
                      cov_139va9y9s8.s[109]++;
                      direction = new _main.default.Vector(nx, ny, nz);
                    }
                  }
                }
                cov_139va9y9s8.s[110]++;
                break;

              case 8:
                cov_139va9y9s8.b[10][3]++;
                cov_139va9y9s8.s[111]++;
                if (v1 instanceof _main.default.Color) {
                  cov_139va9y9s8.b[14][0]++;
                  cov_139va9y9s8.s[112]++;
                  color = v1;
                  cov_139va9y9s8.s[113]++;
                  position = new _main.default.Vector(v2, v3, x);
                  cov_139va9y9s8.s[114]++;
                  direction = new _main.default.Vector(y, z, nx);
                  cov_139va9y9s8.s[115]++;
                  angle = ny;
                } else {
                  cov_139va9y9s8.b[14][1]++;
                  cov_139va9y9s8.s[116]++;
                  if (x instanceof _main.default.Vector) {
                    cov_139va9y9s8.b[15][0]++;
                    cov_139va9y9s8.s[117]++;
                    color = this.color(v1, v2, v3);
                    cov_139va9y9s8.s[118]++;
                    position = x;
                    cov_139va9y9s8.s[119]++;
                    direction = new _main.default.Vector(y, z, nx);
                    cov_139va9y9s8.s[120]++;
                    angle = ny;
                  } else {
                    cov_139va9y9s8.b[15][1]++;
                    cov_139va9y9s8.s[121]++;
                    color = this.color(v1, v2, v3);
                    cov_139va9y9s8.s[122]++;
                    position = new _main.default.Vector(x, y, z);
                    cov_139va9y9s8.s[123]++;
                    direction = nx;
                    cov_139va9y9s8.s[124]++;
                    angle = ny;
                  }
                }
                cov_139va9y9s8.s[125]++;
                break;

              case 7:
                cov_139va9y9s8.b[10][4]++;
                cov_139va9y9s8.s[126]++;
                if (
                  (cov_139va9y9s8.b[17][0]++, v1 instanceof _main.default.Color) &&
                  (cov_139va9y9s8.b[17][1]++, v2 instanceof _main.default.Vector)
                ) {
                  cov_139va9y9s8.b[16][0]++;
                  cov_139va9y9s8.s[127]++;
                  color = v1;
                  cov_139va9y9s8.s[128]++;
                  position = v2;
                  cov_139va9y9s8.s[129]++;
                  direction = new _main.default.Vector(v3, x, y);
                  cov_139va9y9s8.s[130]++;
                  angle = z;
                  cov_139va9y9s8.s[131]++;
                  concentration = nx;
                } else {
                  cov_139va9y9s8.b[16][1]++;
                  cov_139va9y9s8.s[132]++;
                  if (
                    (cov_139va9y9s8.b[19][0]++, v1 instanceof _main.default.Color) &&
                    (cov_139va9y9s8.b[19][1]++, y instanceof _main.default.Vector)
                  ) {
                    cov_139va9y9s8.b[18][0]++;
                    cov_139va9y9s8.s[133]++;
                    color = v1;
                    cov_139va9y9s8.s[134]++;
                    position = new _main.default.Vector(v2, v3, x);
                    cov_139va9y9s8.s[135]++;
                    direction = y;
                    cov_139va9y9s8.s[136]++;
                    angle = z;
                    cov_139va9y9s8.s[137]++;
                    concentration = nx;
                  } else {
                    cov_139va9y9s8.b[18][1]++;
                    cov_139va9y9s8.s[138]++;
                    if (
                      (cov_139va9y9s8.b[21][0]++, x instanceof _main.default.Vector) &&
                      (cov_139va9y9s8.b[21][1]++, y instanceof _main.default.Vector)
                    ) {
                      cov_139va9y9s8.b[20][0]++;
                      cov_139va9y9s8.s[139]++;
                      color = this.color(v1, v2, v3);
                      cov_139va9y9s8.s[140]++;
                      position = x;
                      cov_139va9y9s8.s[141]++;
                      direction = y;
                      cov_139va9y9s8.s[142]++;
                      angle = z;
                      cov_139va9y9s8.s[143]++;
                      concentration = nx;
                    } else {
                      cov_139va9y9s8.b[20][1]++;
                      cov_139va9y9s8.s[144]++;
                      if (v1 instanceof _main.default.Color) {
                        cov_139va9y9s8.b[22][0]++;
                        cov_139va9y9s8.s[145]++;
                        color = v1;
                        cov_139va9y9s8.s[146]++;
                        position = new _main.default.Vector(v2, v3, x);
                        cov_139va9y9s8.s[147]++;
                        direction = new _main.default.Vector(y, z, nx);
                      } else {
                        cov_139va9y9s8.b[22][1]++;
                        cov_139va9y9s8.s[148]++;
                        if (x instanceof _main.default.Vector) {
                          cov_139va9y9s8.b[23][0]++;
                          cov_139va9y9s8.s[149]++;
                          color = this.color(v1, v2, v3);
                          cov_139va9y9s8.s[150]++;
                          position = x;
                          cov_139va9y9s8.s[151]++;
                          direction = new _main.default.Vector(y, z, nx);
                        } else {
                          cov_139va9y9s8.b[23][1]++;
                          cov_139va9y9s8.s[152]++;
                          color = this.color(v1, v2, v3);
                          cov_139va9y9s8.s[153]++;
                          position = new _main.default.Vector(x, y, z);
                          cov_139va9y9s8.s[154]++;
                          direction = nx;
                        }
                      }
                    }
                  }
                }
                cov_139va9y9s8.s[155]++;
                break;

              case 6:
                cov_139va9y9s8.b[10][5]++;
                cov_139va9y9s8.s[156]++;
                if (
                  (cov_139va9y9s8.b[25][0]++, x instanceof _main.default.Vector) &&
                  (cov_139va9y9s8.b[25][1]++, y instanceof _main.default.Vector)
                ) {
                  cov_139va9y9s8.b[24][0]++;
                  cov_139va9y9s8.s[157]++;
                  color = this.color(v1, v2, v3);
                  cov_139va9y9s8.s[158]++;
                  position = x;
                  cov_139va9y9s8.s[159]++;
                  direction = y;
                  cov_139va9y9s8.s[160]++;
                  angle = z;
                } else {
                  cov_139va9y9s8.b[24][1]++;
                  cov_139va9y9s8.s[161]++;
                  if (
                    (cov_139va9y9s8.b[27][0]++, v1 instanceof _main.default.Color) &&
                    (cov_139va9y9s8.b[27][1]++, y instanceof _main.default.Vector)
                  ) {
                    cov_139va9y9s8.b[26][0]++;
                    cov_139va9y9s8.s[162]++;
                    color = v1;
                    cov_139va9y9s8.s[163]++;
                    position = new _main.default.Vector(v2, v3, x);
                    cov_139va9y9s8.s[164]++;
                    direction = y;
                    cov_139va9y9s8.s[165]++;
                    angle = z;
                  } else {
                    cov_139va9y9s8.b[26][1]++;
                    cov_139va9y9s8.s[166]++;
                    if (
                      (cov_139va9y9s8.b[29][0]++, v1 instanceof _main.default.Color) &&
                      (cov_139va9y9s8.b[29][1]++, v2 instanceof _main.default.Vector)
                    ) {
                      cov_139va9y9s8.b[28][0]++;
                      cov_139va9y9s8.s[167]++;
                      color = v1;
                      cov_139va9y9s8.s[168]++;
                      position = v2;
                      cov_139va9y9s8.s[169]++;
                      direction = new _main.default.Vector(v3, x, y);
                      cov_139va9y9s8.s[170]++;
                      angle = z;
                    } else {
                      cov_139va9y9s8.b[28][1]++;
                    }
                  }
                }
                cov_139va9y9s8.s[171]++;
                break;

              case 5:
                cov_139va9y9s8.b[10][6]++;
                cov_139va9y9s8.s[172]++;
                if (
                  (cov_139va9y9s8.b[31][0]++, v1 instanceof _main.default.Color) &&
                  (cov_139va9y9s8.b[31][1]++, v2 instanceof _main.default.Vector) &&
                  (cov_139va9y9s8.b[31][2]++, v3 instanceof _main.default.Vector)
                ) {
                  cov_139va9y9s8.b[30][0]++;
                  cov_139va9y9s8.s[173]++;
                  color = v1;
                  cov_139va9y9s8.s[174]++;
                  position = v2;
                  cov_139va9y9s8.s[175]++;
                  direction = v3;
                  cov_139va9y9s8.s[176]++;
                  angle = x;
                  cov_139va9y9s8.s[177]++;
                  concentration = y;
                } else {
                  cov_139va9y9s8.b[30][1]++;
                  cov_139va9y9s8.s[178]++;
                  if (
                    (cov_139va9y9s8.b[33][0]++, x instanceof _main.default.Vector) &&
                    (cov_139va9y9s8.b[33][1]++, y instanceof _main.default.Vector)
                  ) {
                    cov_139va9y9s8.b[32][0]++;
                    cov_139va9y9s8.s[179]++;
                    color = this.color(v1, v2, v3);
                    cov_139va9y9s8.s[180]++;
                    position = x;
                    cov_139va9y9s8.s[181]++;
                    direction = y;
                  } else {
                    cov_139va9y9s8.b[32][1]++;
                    cov_139va9y9s8.s[182]++;
                    if (
                      (cov_139va9y9s8.b[35][0]++, v1 instanceof _main.default.Color) &&
                      (cov_139va9y9s8.b[35][1]++, y instanceof _main.default.Vector)
                    ) {
                      cov_139va9y9s8.b[34][0]++;
                      cov_139va9y9s8.s[183]++;
                      color = v1;
                      cov_139va9y9s8.s[184]++;
                      position = new _main.default.Vector(v2, v3, x);
                      cov_139va9y9s8.s[185]++;
                      direction = y;
                    } else {
                      cov_139va9y9s8.b[34][1]++;
                      cov_139va9y9s8.s[186]++;
                      if (
                        (cov_139va9y9s8.b[37][0]++, v1 instanceof _main.default.Color) &&
                        (cov_139va9y9s8.b[37][1]++, v2 instanceof _main.default.Vector)
                      ) {
                        cov_139va9y9s8.b[36][0]++;
                        cov_139va9y9s8.s[187]++;
                        color = v1;
                        cov_139va9y9s8.s[188]++;
                        position = v2;
                        cov_139va9y9s8.s[189]++;
                        direction = new _main.default.Vector(v3, x, y);
                      } else {
                        cov_139va9y9s8.b[36][1]++;
                      }
                    }
                  }
                }
                cov_139va9y9s8.s[190]++;
                break;

              case 4:
                cov_139va9y9s8.b[10][7]++;
                cov_139va9y9s8.s[191]++;
                color = v1;
                cov_139va9y9s8.s[192]++;
                position = v2;
                cov_139va9y9s8.s[193]++;
                direction = v3;
                cov_139va9y9s8.s[194]++;
                angle = x;
                cov_139va9y9s8.s[195]++;
                break;

              case 3:
                cov_139va9y9s8.b[10][8]++;
                cov_139va9y9s8.s[196]++;
                color = v1;
                cov_139va9y9s8.s[197]++;
                position = v2;
                cov_139va9y9s8.s[198]++;
                direction = v3;
                cov_139va9y9s8.s[199]++;
                break;

              default:
                cov_139va9y9s8.b[10][9]++;
                cov_139va9y9s8.s[200]++;
                console.warn(
                  'Sorry, input for spotlight() is not in prescribed format. Too '.concat(
                    length < 3
                      ? (cov_139va9y9s8.b[38][0]++, 'few')
                      : (cov_139va9y9s8.b[38][1]++, 'many'),
                    ' arguments were provided'
                  )
                );
                cov_139va9y9s8.s[201]++;

                return this;
            }
            cov_139va9y9s8.s[202]++;

            this._renderer.spotLightDiffuseColors.push(
              color._array[0],
              color._array[1],
              color._array[2]
            );
            cov_139va9y9s8.s[203]++;

            Array.prototype.push.apply(
              this._renderer.spotLightSpecularColors,
              this._renderer.specularColors
            );
            cov_139va9y9s8.s[204]++;

            this._renderer.spotLightPositions.push(position.x, position.y, position.z);
            cov_139va9y9s8.s[205]++;
            direction.normalize();
            cov_139va9y9s8.s[206]++;
            this._renderer.spotLightDirections.push(direction.x, direction.y, direction.z);
            cov_139va9y9s8.s[207]++;

            if (angle === undefined) {
              cov_139va9y9s8.b[39][0]++;
              cov_139va9y9s8.s[208]++;
              angle = Math.PI / 3;
            } else {
              cov_139va9y9s8.b[39][1]++;
            }
            cov_139va9y9s8.s[209]++;

            if (
              (cov_139va9y9s8.b[41][0]++, concentration !== undefined) &&
              (cov_139va9y9s8.b[41][1]++, concentration < 1)
            ) {
              cov_139va9y9s8.b[40][0]++;
              cov_139va9y9s8.s[210]++;
              concentration = 1;
              cov_139va9y9s8.s[211]++;
              console.warn(
                'Value of concentration needs to be greater than 1. Setting it to 1'
              );
            } else {
              cov_139va9y9s8.b[40][1]++;
              cov_139va9y9s8.s[212]++;
              if (concentration === undefined) {
                cov_139va9y9s8.b[42][0]++;
                cov_139va9y9s8.s[213]++;
                concentration = 100;
              } else {
                cov_139va9y9s8.b[42][1]++;
              }
            }
            cov_139va9y9s8.s[214]++;

            angle = this._renderer._pInst._toRadians(angle);
            cov_139va9y9s8.s[215]++;
            this._renderer.spotLightAngle.push(Math.cos(angle));
            cov_139va9y9s8.s[216]++;
            this._renderer.spotLightConc.push(concentration);
            cov_139va9y9s8.s[217]++;

            this._renderer._enableLighting = true;
            cov_139va9y9s8.s[218]++;

            return this;
          };

          /**
           * This function will remove all the lights from the sketch for the
           * subsequent materials rendered. It affects all the subsequent methods.
           * Calls to lighting methods made after noLights() will re-enable lights
           * in the sketch.
           * @method noLights
           * @chainable
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           * function draw() {
           *   background(0);
           *   noStroke();
           *
           *   ambientLight(150, 0, 0);
           *   translate(-25, 0, 0);
           *   ambientMaterial(250);
           *   sphere(20);
           *
           *   noLights();
           *   ambientLight(0, 150, 0);
           *   translate(50, 0, 0);
           *   ambientMaterial(250);
           *   sphere(20);
           * }
           * </code>
           * </div>
           *
           * @alt
           * Two spheres showing different colors
           */ cov_139va9y9s8.s[219]++;
          _main.default.prototype.noLights = function() {
            cov_139va9y9s8.f[7]++;
            cov_139va9y9s8.s[220]++;
            this._assert3d('noLights');
            cov_139va9y9s8.s[221]++;
            _main.default._validateParameters('noLights', arguments);
            cov_139va9y9s8.s[222]++;

            this._renderer._enableLighting = false;
            cov_139va9y9s8.s[223]++;

            this._renderer.ambientLightColors.length = 0;
            cov_139va9y9s8.s[224]++;
            this._renderer.specularColors = [1, 1, 1];
            cov_139va9y9s8.s[225]++;

            this._renderer.directionalLightDirections.length = 0;
            cov_139va9y9s8.s[226]++;
            this._renderer.directionalLightDiffuseColors.length = 0;
            cov_139va9y9s8.s[227]++;
            this._renderer.directionalLightSpecularColors.length = 0;
            cov_139va9y9s8.s[228]++;

            this._renderer.pointLightPositions.length = 0;
            cov_139va9y9s8.s[229]++;
            this._renderer.pointLightDiffuseColors.length = 0;
            cov_139va9y9s8.s[230]++;
            this._renderer.pointLightSpecularColors.length = 0;
            cov_139va9y9s8.s[231]++;

            this._renderer.spotLightPositions.length = 0;
            cov_139va9y9s8.s[232]++;
            this._renderer.spotLightDirections.length = 0;
            cov_139va9y9s8.s[233]++;
            this._renderer.spotLightDiffuseColors.length = 0;
            cov_139va9y9s8.s[234]++;
            this._renderer.spotLightSpecularColors.length = 0;
            cov_139va9y9s8.s[235]++;
            this._renderer.spotLightAngle.length = 0;
            cov_139va9y9s8.s[236]++;
            this._renderer.spotLightConc.length = 0;
            cov_139va9y9s8.s[237]++;

            this._renderer.constantAttenuation = 1;
            cov_139va9y9s8.s[238]++;
            this._renderer.linearAttenuation = 0;
            cov_139va9y9s8.s[239]++;
            this._renderer.quadraticAttenuation = 0;
            cov_139va9y9s8.s[240]++;
            this._renderer._useShininess = 1;
            cov_139va9y9s8.s[241]++;

            return this;
          };
          var _default = _main.default;
          exports.default = _default;
        },
        { '../core/constants': 272, '../core/main': 283 }
      ],
      329: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_cy4aglvaq = (function() {
            var path = '/Users/outofambit/src/p5.js/src/webgl/loading.js';
            var hash = 'cae8adcad8bb6abb795116af6e02a7844aad57bf';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/webgl/loading.js',
              statementMap: {
                '0': { start: { line: 104, column: 0 }, end: { line: 177, column: 2 } },
                '1': { start: { line: 105, column: 2 }, end: { line: 105, column: 49 } },
                '2': { start: { line: 109, column: 17 }, end: { line: 109, column: 31 } },
                '3': { start: { line: 110, column: 2 }, end: { line: 124, column: 3 } },
                '4': { start: { line: 111, column: 4 }, end: { line: 111, column: 29 } },
                '5': { start: { line: 112, column: 4 }, end: { line: 112, column: 35 } },
                '6': { start: { line: 113, column: 4 }, end: { line: 113, column: 35 } },
                '7': { start: { line: 114, column: 4 }, end: { line: 116, column: 5 } },
                '8': { start: { line: 115, column: 6 }, end: { line: 115, column: 30 } },
                '9': { start: { line: 118, column: 4 }, end: { line: 118, column: 22 } },
                '10': { start: { line: 119, column: 4 }, end: { line: 119, column: 35 } },
                '11': { start: { line: 120, column: 4 }, end: { line: 120, column: 35 } },
                '12': { start: { line: 121, column: 4 }, end: { line: 123, column: 5 } },
                '13': { start: { line: 122, column: 6 }, end: { line: 122, column: 30 } },
                '14': { start: { line: 126, column: 16 }, end: { line: 126, column: 33 } },
                '15': { start: { line: 127, column: 2 }, end: { line: 127, column: 37 } },
                '16': { start: { line: 128, column: 15 }, end: { line: 128, column: 19 } },
                '17': { start: { line: 130, column: 2 }, end: { line: 175, column: 3 } },
                '18': { start: { line: 131, column: 4 }, end: { line: 147, column: 6 } },
                '19': { start: { line: 136, column: 8 }, end: { line: 136, column: 37 } },
                '20': { start: { line: 138, column: 8 }, end: { line: 140, column: 9 } },
                '21': { start: { line: 139, column: 10 }, end: { line: 139, column: 28 } },
                '22': { start: { line: 141, column: 8 }, end: { line: 141, column: 33 } },
                '23': { start: { line: 142, column: 8 }, end: { line: 144, column: 9 } },
                '24': { start: { line: 143, column: 10 }, end: { line: 143, column: 33 } },
                '25': { start: { line: 148, column: 9 }, end: { line: 175, column: 3 } },
                '26': { start: { line: 149, column: 4 }, end: { line: 164, column: 6 } },
                '27': { start: { line: 152, column: 8 }, end: { line: 152, column: 33 } },
                '28': { start: { line: 154, column: 8 }, end: { line: 156, column: 9 } },
                '29': { start: { line: 155, column: 10 }, end: { line: 155, column: 28 } },
                '30': { start: { line: 158, column: 8 }, end: { line: 158, column: 33 } },
                '31': { start: { line: 159, column: 8 }, end: { line: 161, column: 9 } },
                '32': { start: { line: 160, column: 10 }, end: { line: 160, column: 33 } },
                '33': { start: { line: 166, column: 4 }, end: { line: 166, column: 39 } },
                '34': { start: { line: 168, column: 4 }, end: { line: 174, column: 5 } },
                '35': { start: { line: 169, column: 6 }, end: { line: 169, column: 24 } },
                '36': { start: { line: 171, column: 6 }, end: { line: 173, column: 8 } },
                '37': { start: { line: 176, column: 2 }, end: { line: 176, column: 15 } },
                '38': { start: { line: 200, column: 22 }, end: { line: 204, column: 3 } },
                '39': { start: { line: 205, column: 23 }, end: { line: 205, column: 25 } },
                '40': { start: { line: 207, column: 2 }, end: { line: 281, column: 3 } },
                '41': { start: { line: 207, column: 18 }, end: { line: 207, column: 19 } },
                '42': { start: { line: 211, column: 19 }, end: { line: 211, column: 52 } },
                '43': { start: { line: 213, column: 4 }, end: { line: 280, column: 5 } },
                '44': { start: { line: 214, column: 6 }, end: { line: 279, column: 7 } },
                '45': { start: { line: 217, column: 23 }, end: { line: 221, column: 9 } },
                '46': { start: { line: 222, column: 8 }, end: { line: 222, column: 44 } },
                '47': { start: { line: 223, column: 13 }, end: { line: 279, column: 7 } },
                '48': { start: { line: 228, column: 26 }, end: { line: 228, column: 76 } },
                '49': { start: { line: 229, column: 8 }, end: { line: 229, column: 47 } },
                '50': { start: { line: 230, column: 13 }, end: { line: 279, column: 7 } },
                '51': { start: { line: 233, column: 8 }, end: { line: 278, column: 9 } },
                '52': { start: { line: 233, column: 23 }, end: { line: 233, column: 24 } },
                '53': { start: { line: 234, column: 23 }, end: { line: 234, column: 25 } },
                '54': { start: { line: 236, column: 31 }, end: { line: 236, column: 48 } },
                '55': { start: { line: 238, column: 10 }, end: { line: 269, column: 11 } },
                '56': { start: { line: 238, column: 30 }, end: { line: 238, column: 31 } },
                '57': { start: { line: 240, column: 31 }, end: { line: 240, column: 61 } },
                '58': { start: { line: 241, column: 28 }, end: { line: 241, column: 29 } },
                '59': { start: { line: 247, column: 12 }, end: { line: 266, column: 13 } },
                '60': { start: { line: 248, column: 14 }, end: { line: 248, column: 51 } },
                '61': { start: { line: 250, column: 32 }, end: { line: 250, column: 53 } },
                '62': { start: { line: 251, column: 14 }, end: { line: 253, column: 15 } },
                '63': { start: { line: 251, column: 27 }, end: { line: 251, column: 28 } },
                '64': { start: { line: 252, column: 16 }, end: { line: 252, column: 58 } },
                '65': { start: { line: 255, column: 14 }, end: { line: 255, column: 75 } },
                '66': { start: { line: 256, column: 14 }, end: { line: 256, column: 70 } },
                '67': { start: { line: 257, column: 14 }, end: { line: 261, column: 15 } },
                '68': { start: { line: 258, column: 16 }, end: { line: 258, column: 69 } },
                '69': { start: { line: 260, column: 16 }, end: { line: 260, column: 39 } },
                '70': { start: { line: 263, column: 14 }, end: { line: 265, column: 15 } },
                '71': { start: { line: 264, column: 16 }, end: { line: 264, column: 78 } },
                '72': { start: { line: 268, column: 12 }, end: { line: 268, column: 33 } },
                '73': { start: { line: 271, column: 10 }, end: { line: 277, column: 11 } },
                '74': { start: { line: 276, column: 12 }, end: { line: 276, column: 35 } },
                '75': { start: { line: 283, column: 2 }, end: { line: 285, column: 3 } },
                '76': { start: { line: 284, column: 4 }, end: { line: 284, column: 27 } },
                '77': { start: { line: 287, column: 2 }, end: { line: 287, column: 15 } },
                '78': { start: { line: 297, column: 2 }, end: { line: 313, column: 3 } },
                '79': { start: { line: 298, column: 4 }, end: { line: 298, column: 34 } },
                '80': { start: { line: 300, column: 19 }, end: { line: 300, column: 39 } },
                '81': { start: { line: 302, column: 4 }, end: { line: 307, column: 5 } },
                '82': { start: { line: 303, column: 6 }, end: { line: 305, column: 8 } },
                '83': { start: { line: 306, column: 6 }, end: { line: 306, column: 19 } },
                '84': { start: { line: 309, column: 20 }, end: { line: 309, column: 44 } },
                '85': { start: { line: 310, column: 18 }, end: { line: 310, column: 40 } },
                '86': { start: { line: 311, column: 22 }, end: { line: 311, column: 39 } },
                '87': { start: { line: 312, column: 4 }, end: { line: 312, column: 36 } },
                '88': { start: { line: 314, column: 2 }, end: { line: 314, column: 15 } },
                '89': { start: { line: 331, column: 17 }, end: { line: 331, column: 35 } },
                '90': { start: { line: 334, column: 16 }, end: { line: 334, column: 41 } },
                '91': { start: { line: 335, column: 2 }, end: { line: 338, column: 3 } },
                '92': { start: { line: 335, column: 17 }, end: { line: 335, column: 18 } },
                '93': { start: { line: 337, column: 4 }, end: { line: 337, column: 58 } },
                '94': { start: { line: 337, column: 45 }, end: { line: 337, column: 58 } },
                '95': { start: { line: 341, column: 2 }, end: { line: 341, column: 14 } },
                '96': { start: { line: 349, column: 2 }, end: { line: 351, column: 3 } },
                '97': { start: { line: 349, column: 15 }, end: { line: 349, column: 16 } },
                '98': { start: { line: 349, column: 23 }, end: { line: 349, column: 35 } },
                '99': { start: { line: 350, column: 4 }, end: { line: 350, column: 70 } },
                '100': { start: { line: 350, column: 57 }, end: { line: 350, column: 70 } },
                '101': { start: { line: 353, column: 2 }, end: { line: 353, column: 14 } },
                '102': { start: { line: 363, column: 17 }, end: { line: 363, column: 37 } },
                '103': { start: { line: 366, column: 16 }, end: { line: 366, column: 42 } },
                '104': { start: { line: 370, column: 16 }, end: { line: 370, column: 21 } },
                '105': { start: { line: 375, column: 2 }, end: { line: 391, column: 3 } },
                '106': { start: { line: 375, column: 19 }, end: { line: 375, column: 20 } },
                '107': { start: { line: 377, column: 4 }, end: { line: 390, column: 5 } },
                '108': { start: { line: 382, column: 6 }, end: { line: 382, column: 23 } },
                '109': { start: { line: 383, column: 6 }, end: { line: 383, column: 18 } },
                '110': { start: { line: 385, column: 6 }, end: { line: 385, column: 50 } },
                '111': { start: { line: 386, column: 6 }, end: { line: 386, column: 50 } },
                '112': { start: { line: 387, column: 6 }, end: { line: 387, column: 50 } },
                '113': { start: { line: 392, column: 21 }, end: { line: 392, column: 23 } },
                '114': { start: { line: 393, column: 21 }, end: { line: 393, column: 31 } },
                '115': { start: { line: 396, column: 2 }, end: { line: 437, column: 3 } },
                '116': { start: { line: 396, column: 18 }, end: { line: 396, column: 19 } },
                '117': { start: { line: 397, column: 18 }, end: { line: 397, column: 48 } },
                '118': { start: { line: 398, column: 20 }, end: { line: 398, column: 50 } },
                '119': { start: { line: 399, column: 20 }, end: { line: 399, column: 54 } },
                '120': { start: { line: 400, column: 20 }, end: { line: 400, column: 54 } },
                '121': { start: { line: 402, column: 4 }, end: { line: 415, column: 5 } },
                '122': { start: { line: 403, column: 26 }, end: { line: 403, column: 60 } },
                '123': { start: { line: 405, column: 6 }, end: { line: 414, column: 7 } },
                '124': { start: { line: 407, column: 8 }, end: { line: 407, column: 38 } },
                '125': { start: { line: 408, column: 8 }, end: { line: 408, column: 45 } },
                '126': { start: { line: 409, column: 8 }, end: { line: 409, column: 46 } },
                '127': { start: { line: 411, column: 8 }, end: { line: 411, column: 21 } },
                '128': { start: { line: 412, column: 8 }, end: { line: 412, column: 21 } },
                '129': { start: { line: 413, column: 8 }, end: { line: 413, column: 21 } },
                '130': { start: { line: 416, column: 22 }, end: { line: 416, column: 62 } },
                '131': { start: { line: 418, column: 4 }, end: { line: 433, column: 5 } },
                '132': { start: { line: 418, column: 17 }, end: { line: 418, column: 18 } },
                '133': { start: { line: 419, column: 26 }, end: { line: 419, column: 40 } },
                '134': { start: { line: 421, column: 24 }, end: { line: 425, column: 7 } },
                '135': { start: { line: 427, column: 6 }, end: { line: 427, column: 37 } },
                '136': { start: { line: 428, column: 6 }, end: { line: 428, column: 42 } },
                '137': { start: { line: 430, column: 6 }, end: { line: 432, column: 7 } },
                '138': { start: { line: 431, column: 8 }, end: { line: 431, column: 29 } },
                '139': { start: { line: 435, column: 4 }, end: { line: 435, column: 61 } },
                '140': { start: { line: 436, column: 4 }, end: { line: 436, column: 43 } },
                '141': { start: { line: 438, column: 2 }, end: { line: 440, column: 3 } },
                '142': { start: { line: 441, column: 2 }, end: { line: 441, column: 15 } },
                '143': { start: { line: 455, column: 14 }, end: { line: 455, column: 16 } },
                '144': { start: { line: 456, column: 23 }, end: { line: 456, column: 25 } },
                '145': { start: { line: 459, column: 2 }, end: { line: 584, column: 3 } },
                '146': { start: { line: 459, column: 22 }, end: { line: 459, column: 23 } },
                '147': { start: { line: 460, column: 17 }, end: { line: 460, column: 39 } },
                '148': { start: { line: 461, column: 18 }, end: { line: 461, column: 33 } },
                '149': { start: { line: 463, column: 4 }, end: { line: 468, column: 5 } },
                '150': { start: { line: 463, column: 29 }, end: { line: 463, column: 30 } },
                '151': { start: { line: 464, column: 6 }, end: { line: 467, column: 7 } },
                '152': { start: { line: 466, column: 8 }, end: { line: 466, column: 39 } },
                '153': { start: { line: 470, column: 4 }, end: { line: 473, column: 5 } },
                '154': { start: { line: 472, column: 6 }, end: { line: 472, column: 15 } },
                '155': { start: { line: 475, column: 4 }, end: { line: 583, column: 5 } },
                '156': { start: { line: 477, column: 8 }, end: { line: 484, column: 9 } },
                '157': { start: { line: 479, column: 10 }, end: { line: 479, column: 30 } },
                '158': { start: { line: 480, column: 10 }, end: { line: 480, column: 74 } },
                '159': { start: { line: 481, column: 10 }, end: { line: 481, column: 17 } },
                '160': { start: { line: 483, column: 10 }, end: { line: 483, column: 26 } },
                '161': { start: { line: 485, column: 8 }, end: { line: 485, column: 14 } },
                '162': { start: { line: 488, column: 8 }, end: { line: 504, column: 9 } },
                '163': { start: { line: 490, column: 10 }, end: { line: 490, column: 30 } },
                '164': { start: { line: 491, column: 10 }, end: { line: 493, column: 12 } },
                '165': { start: { line: 494, column: 10 }, end: { line: 494, column: 17 } },
                '166': { start: { line: 497, column: 10 }, end: { line: 501, column: 12 } },
                '167': { start: { line: 502, column: 10 }, end: { line: 502, column: 68 } },
                '168': { start: { line: 503, column: 10 }, end: { line: 503, column: 33 } },
                '169': { start: { line: 505, column: 8 }, end: { line: 505, column: 14 } },
                '170': { start: { line: 508, column: 8 }, end: { line: 516, column: 9 } },
                '171': { start: { line: 510, column: 10 }, end: { line: 510, column: 30 } },
                '172': { start: { line: 511, column: 10 }, end: { line: 511, column: 79 } },
                '173': { start: { line: 512, column: 10 }, end: { line: 512, column: 17 } },
                '174': { start: { line: 515, column: 10 }, end: { line: 515, column: 27 } },
                '175': { start: { line: 517, column: 8 }, end: { line: 517, column: 14 } },
                '176': { start: { line: 520, column: 8 }, end: { line: 542, column: 9 } },
                '177': { start: { line: 522, column: 10 }, end: { line: 526, column: 12 } },
                '178': { start: { line: 527, column: 10 }, end: { line: 527, column: 41 } },
                '179': { start: { line: 528, column: 10 }, end: { line: 528, column: 33 } },
                '180': { start: { line: 529, column: 10 }, end: { line: 529, column: 65 } },
                '181': { start: { line: 530, column: 15 }, end: { line: 542, column: 9 } },
                '182': { start: { line: 532, column: 10 }, end: { line: 532, column: 43 } },
                '183': { start: { line: 533, column: 10 }, end: { line: 533, column: 30 } },
                '184': { start: { line: 534, column: 10 }, end: { line: 534, column: 28 } },
                '185': { start: { line: 537, column: 10 }, end: { line: 537, column: 30 } },
                '186': { start: { line: 538, column: 10 }, end: { line: 540, column: 12 } },
                '187': { start: { line: 541, column: 10 }, end: { line: 541, column: 17 } },
                '188': { start: { line: 543, column: 8 }, end: { line: 543, column: 14 } },
                '189': { start: { line: 546, column: 8 }, end: { line: 553, column: 9 } },
                '190': { start: { line: 548, column: 10 }, end: { line: 548, column: 30 } },
                '191': { start: { line: 549, column: 10 }, end: { line: 549, column: 77 } },
                '192': { start: { line: 550, column: 10 }, end: { line: 550, column: 17 } },
                '193': { start: { line: 552, column: 10 }, end: { line: 552, column: 29 } },
                '194': { start: { line: 554, column: 8 }, end: { line: 554, column: 14 } },
                '195': { start: { line: 557, column: 8 }, end: { line: 577, column: 9 } },
                '196': { start: { line: 559, column: 15 }, end: { line: 577, column: 9 } },
                '197': { start: { line: 561, column: 10 }, end: { line: 565, column: 12 } },
                '198': { start: { line: 566, column: 10 }, end: { line: 566, column: 68 } },
                '199': { start: { line: 567, column: 10 }, end: { line: 567, column: 33 } },
                '200': { start: { line: 570, column: 10 }, end: { line: 570, column: 30 } },
                '201': { start: { line: 571, column: 10 }, end: { line: 575, column: 12 } },
                '202': { start: { line: 576, column: 10 }, end: { line: 576, column: 17 } },
                '203': { start: { line: 578, column: 8 }, end: { line: 578, column: 14 } },
                '204': { start: { line: 581, column: 8 }, end: { line: 581, column: 50 } },
                '205': { start: { line: 582, column: 8 }, end: { line: 582, column: 14 } },
                '206': { start: { line: 585, column: 2 }, end: { line: 585, column: 15 } },
                '207': { start: { line: 619, column: 0 }, end: { line: 630, column: 2 } },
                '208': { start: { line: 620, column: 2 }, end: { line: 620, column: 26 } },
                '209': { start: { line: 621, column: 2 }, end: { line: 621, column: 45 } },
                '210': { start: { line: 622, column: 2 }, end: { line: 629, column: 3 } },
                '211': { start: { line: 623, column: 4 }, end: { line: 626, column: 5 } },
                '212': { start: { line: 624, column: 6 }, end: { line: 624, column: 52 } },
                '213': { start: { line: 625, column: 6 }, end: { line: 625, column: 53 } },
                '214': { start: { line: 628, column: 4 }, end: { line: 628, column: 42 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: {
                    start: { line: 104, column: 25 },
                    end: { line: 104, column: 26 }
                  },
                  loc: { start: { line: 104, column: 40 }, end: { line: 177, column: 1 } },
                  line: 104
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 135, column: 6 }, end: { line: 135, column: 7 } },
                  loc: { start: { line: 135, column: 21 }, end: { line: 145, column: 7 } },
                  line: 135
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: { start: { line: 151, column: 6 }, end: { line: 151, column: 7 } },
                  loc: { start: { line: 151, column: 17 }, end: { line: 162, column: 7 } },
                  line: 151
                },
                '3': {
                  name: 'parseObj',
                  decl: { start: { line: 190, column: 9 }, end: { line: 190, column: 17 } },
                  loc: { start: { line: 190, column: 32 }, end: { line: 288, column: 1 } },
                  line: 190
                },
                '4': {
                  name: 'parseSTL',
                  decl: { start: { line: 296, column: 9 }, end: { line: 296, column: 17 } },
                  loc: { start: { line: 296, column: 33 }, end: { line: 315, column: 1 } },
                  line: 296
                },
                '5': {
                  name: 'isBinary',
                  decl: { start: { line: 330, column: 9 }, end: { line: 330, column: 17 } },
                  loc: { start: { line: 330, column: 24 }, end: { line: 342, column: 1 } },
                  line: 330
                },
                '6': {
                  name: 'matchDataViewAt',
                  decl: { start: { line: 347, column: 9 }, end: { line: 347, column: 24 } },
                  loc: { start: { line: 347, column: 48 }, end: { line: 354, column: 1 } },
                  line: 347
                },
                '7': {
                  name: 'parseBinarySTL',
                  decl: { start: { line: 362, column: 9 }, end: { line: 362, column: 23 } },
                  loc: { start: { line: 362, column: 39 }, end: { line: 442, column: 1 } },
                  line: 362
                },
                '8': {
                  name: 'parseASCIISTL',
                  decl: { start: { line: 454, column: 9 }, end: { line: 454, column: 22 } },
                  loc: { start: { line: 454, column: 37 }, end: { line: 586, column: 1 } },
                  line: 454
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 619, column: 21 },
                    end: { line: 619, column: 22 }
                  },
                  loc: { start: { line: 619, column: 37 }, end: { line: 630, column: 1 } },
                  line: 619
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 110, column: 2 }, end: { line: 124, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 110, column: 2 }, end: { line: 124, column: 3 } },
                    { start: { line: 110, column: 2 }, end: { line: 124, column: 3 } }
                  ],
                  line: 110
                },
                '1': {
                  loc: { start: { line: 114, column: 4 }, end: { line: 116, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 114, column: 4 }, end: { line: 116, column: 5 } },
                    { start: { line: 114, column: 4 }, end: { line: 116, column: 5 } }
                  ],
                  line: 114
                },
                '2': {
                  loc: { start: { line: 121, column: 4 }, end: { line: 123, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 121, column: 4 }, end: { line: 123, column: 5 } },
                    { start: { line: 121, column: 4 }, end: { line: 123, column: 5 } }
                  ],
                  line: 121
                },
                '3': {
                  loc: { start: { line: 130, column: 2 }, end: { line: 175, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 130, column: 2 }, end: { line: 175, column: 3 } },
                    { start: { line: 130, column: 2 }, end: { line: 175, column: 3 } }
                  ],
                  line: 130
                },
                '4': {
                  loc: { start: { line: 138, column: 8 }, end: { line: 140, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 138, column: 8 }, end: { line: 140, column: 9 } },
                    { start: { line: 138, column: 8 }, end: { line: 140, column: 9 } }
                  ],
                  line: 138
                },
                '5': {
                  loc: { start: { line: 142, column: 8 }, end: { line: 144, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 142, column: 8 }, end: { line: 144, column: 9 } },
                    { start: { line: 142, column: 8 }, end: { line: 144, column: 9 } }
                  ],
                  line: 142
                },
                '6': {
                  loc: { start: { line: 148, column: 9 }, end: { line: 175, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 148, column: 9 }, end: { line: 175, column: 3 } },
                    { start: { line: 148, column: 9 }, end: { line: 175, column: 3 } }
                  ],
                  line: 148
                },
                '7': {
                  loc: { start: { line: 154, column: 8 }, end: { line: 156, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 154, column: 8 }, end: { line: 156, column: 9 } },
                    { start: { line: 154, column: 8 }, end: { line: 156, column: 9 } }
                  ],
                  line: 154
                },
                '8': {
                  loc: { start: { line: 159, column: 8 }, end: { line: 161, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 159, column: 8 }, end: { line: 161, column: 9 } },
                    { start: { line: 159, column: 8 }, end: { line: 161, column: 9 } }
                  ],
                  line: 159
                },
                '9': {
                  loc: { start: { line: 168, column: 4 }, end: { line: 174, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 168, column: 4 }, end: { line: 174, column: 5 } },
                    { start: { line: 168, column: 4 }, end: { line: 174, column: 5 } }
                  ],
                  line: 168
                },
                '10': {
                  loc: { start: { line: 213, column: 4 }, end: { line: 280, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 213, column: 4 }, end: { line: 280, column: 5 } },
                    { start: { line: 213, column: 4 }, end: { line: 280, column: 5 } }
                  ],
                  line: 213
                },
                '11': {
                  loc: { start: { line: 214, column: 6 }, end: { line: 279, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 214, column: 6 }, end: { line: 279, column: 7 } },
                    { start: { line: 214, column: 6 }, end: { line: 279, column: 7 } }
                  ],
                  line: 214
                },
                '12': {
                  loc: { start: { line: 214, column: 10 }, end: { line: 214, column: 49 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 214, column: 10 }, end: { line: 214, column: 27 } },
                    { start: { line: 214, column: 31 }, end: { line: 214, column: 49 } }
                  ],
                  line: 214
                },
                '13': {
                  loc: { start: { line: 223, column: 13 }, end: { line: 279, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 223, column: 13 }, end: { line: 279, column: 7 } },
                    { start: { line: 223, column: 13 }, end: { line: 279, column: 7 } }
                  ],
                  line: 223
                },
                '14': {
                  loc: { start: { line: 230, column: 13 }, end: { line: 279, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 230, column: 13 }, end: { line: 279, column: 7 } },
                    { start: { line: 230, column: 13 }, end: { line: 279, column: 7 } }
                  ],
                  line: 230
                },
                '15': {
                  loc: { start: { line: 247, column: 12 }, end: { line: 266, column: 13 } },
                  type: 'if',
                  locations: [
                    { start: { line: 247, column: 12 }, end: { line: 266, column: 13 } },
                    { start: { line: 247, column: 12 }, end: { line: 266, column: 13 } }
                  ],
                  line: 247
                },
                '16': {
                  loc: { start: { line: 257, column: 14 }, end: { line: 261, column: 15 } },
                  type: 'if',
                  locations: [
                    { start: { line: 257, column: 14 }, end: { line: 261, column: 15 } },
                    { start: { line: 257, column: 14 }, end: { line: 261, column: 15 } }
                  ],
                  line: 257
                },
                '17': {
                  loc: { start: { line: 263, column: 14 }, end: { line: 265, column: 15 } },
                  type: 'if',
                  locations: [
                    { start: { line: 263, column: 14 }, end: { line: 265, column: 15 } },
                    { start: { line: 263, column: 14 }, end: { line: 265, column: 15 } }
                  ],
                  line: 263
                },
                '18': {
                  loc: { start: { line: 271, column: 10 }, end: { line: 277, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 271, column: 10 }, end: { line: 277, column: 11 } },
                    { start: { line: 271, column: 10 }, end: { line: 277, column: 11 } }
                  ],
                  line: 271
                },
                '19': {
                  loc: { start: { line: 272, column: 12 }, end: { line: 274, column: 31 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 272, column: 12 }, end: { line: 272, column: 31 } },
                    { start: { line: 273, column: 12 }, end: { line: 273, column: 31 } },
                    { start: { line: 274, column: 12 }, end: { line: 274, column: 31 } }
                  ],
                  line: 272
                },
                '20': {
                  loc: { start: { line: 283, column: 2 }, end: { line: 285, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 283, column: 2 }, end: { line: 285, column: 3 } },
                    { start: { line: 283, column: 2 }, end: { line: 285, column: 3 } }
                  ],
                  line: 283
                },
                '21': {
                  loc: { start: { line: 297, column: 2 }, end: { line: 313, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 297, column: 2 }, end: { line: 313, column: 3 } },
                    { start: { line: 297, column: 2 }, end: { line: 313, column: 3 } }
                  ],
                  line: 297
                },
                '22': {
                  loc: { start: { line: 302, column: 4 }, end: { line: 307, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 302, column: 4 }, end: { line: 307, column: 5 } },
                    { start: { line: 302, column: 4 }, end: { line: 307, column: 5 } }
                  ],
                  line: 302
                },
                '23': {
                  loc: { start: { line: 337, column: 4 }, end: { line: 337, column: 58 } },
                  type: 'if',
                  locations: [
                    { start: { line: 337, column: 4 }, end: { line: 337, column: 58 } },
                    { start: { line: 337, column: 4 }, end: { line: 337, column: 58 } }
                  ],
                  line: 337
                },
                '24': {
                  loc: { start: { line: 350, column: 4 }, end: { line: 350, column: 70 } },
                  type: 'if',
                  locations: [
                    { start: { line: 350, column: 4 }, end: { line: 350, column: 70 } },
                    { start: { line: 350, column: 4 }, end: { line: 350, column: 70 } }
                  ],
                  line: 350
                },
                '25': {
                  loc: { start: { line: 377, column: 4 }, end: { line: 390, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 377, column: 4 }, end: { line: 390, column: 5 } },
                    { start: { line: 377, column: 4 }, end: { line: 390, column: 5 } }
                  ],
                  line: 377
                },
                '26': {
                  loc: { start: { line: 378, column: 6 }, end: { line: 380, column: 41 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 378, column: 6 }, end: { line: 378, column: 51 } },
                    { start: { line: 379, column: 6 }, end: { line: 379, column: 41 } },
                    { start: { line: 380, column: 6 }, end: { line: 380, column: 41 } }
                  ],
                  line: 378
                },
                '27': {
                  loc: { start: { line: 402, column: 4 }, end: { line: 415, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 402, column: 4 }, end: { line: 415, column: 5 } },
                    { start: { line: 402, column: 4 }, end: { line: 415, column: 5 } }
                  ],
                  line: 402
                },
                '28': {
                  loc: { start: { line: 405, column: 6 }, end: { line: 414, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 405, column: 6 }, end: { line: 414, column: 7 } },
                    { start: { line: 405, column: 6 }, end: { line: 414, column: 7 } }
                  ],
                  line: 405
                },
                '29': {
                  loc: { start: { line: 430, column: 6 }, end: { line: 432, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 430, column: 6 }, end: { line: 432, column: 7 } },
                    { start: { line: 430, column: 6 }, end: { line: 432, column: 7 } }
                  ],
                  line: 430
                },
                '30': {
                  loc: { start: { line: 438, column: 2 }, end: { line: 440, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 438, column: 2 }, end: { line: 440, column: 3 } },
                    { start: { line: 438, column: 2 }, end: { line: 440, column: 3 } }
                  ],
                  line: 438
                },
                '31': {
                  loc: { start: { line: 464, column: 6 }, end: { line: 467, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 464, column: 6 }, end: { line: 467, column: 7 } },
                    { start: { line: 464, column: 6 }, end: { line: 467, column: 7 } }
                  ],
                  line: 464
                },
                '32': {
                  loc: { start: { line: 470, column: 4 }, end: { line: 473, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 470, column: 4 }, end: { line: 473, column: 5 } },
                    { start: { line: 470, column: 4 }, end: { line: 473, column: 5 } }
                  ],
                  line: 470
                },
                '33': {
                  loc: { start: { line: 475, column: 4 }, end: { line: 583, column: 5 } },
                  type: 'switch',
                  locations: [
                    { start: { line: 476, column: 6 }, end: { line: 485, column: 14 } },
                    { start: { line: 487, column: 6 }, end: { line: 505, column: 14 } },
                    { start: { line: 507, column: 6 }, end: { line: 517, column: 14 } },
                    { start: { line: 519, column: 6 }, end: { line: 543, column: 14 } },
                    { start: { line: 545, column: 6 }, end: { line: 554, column: 14 } },
                    { start: { line: 556, column: 6 }, end: { line: 578, column: 14 } },
                    { start: { line: 580, column: 6 }, end: { line: 582, column: 14 } }
                  ],
                  line: 475
                },
                '34': {
                  loc: { start: { line: 477, column: 8 }, end: { line: 484, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 477, column: 8 }, end: { line: 484, column: 9 } },
                    { start: { line: 477, column: 8 }, end: { line: 484, column: 9 } }
                  ],
                  line: 477
                },
                '35': {
                  loc: { start: { line: 488, column: 8 }, end: { line: 504, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 488, column: 8 }, end: { line: 504, column: 9 } },
                    { start: { line: 488, column: 8 }, end: { line: 504, column: 9 } }
                  ],
                  line: 488
                },
                '36': {
                  loc: { start: { line: 488, column: 12 }, end: { line: 488, column: 57 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 488, column: 12 }, end: { line: 488, column: 32 } },
                    { start: { line: 488, column: 36 }, end: { line: 488, column: 57 } }
                  ],
                  line: 488
                },
                '37': {
                  loc: { start: { line: 508, column: 8 }, end: { line: 516, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 508, column: 8 }, end: { line: 516, column: 9 } },
                    { start: { line: 508, column: 8 }, end: { line: 516, column: 9 } }
                  ],
                  line: 508
                },
                '38': {
                  loc: { start: { line: 508, column: 12 }, end: { line: 508, column: 55 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 508, column: 12 }, end: { line: 508, column: 32 } },
                    { start: { line: 508, column: 36 }, end: { line: 508, column: 55 } }
                  ],
                  line: 508
                },
                '39': {
                  loc: { start: { line: 520, column: 8 }, end: { line: 542, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 520, column: 8 }, end: { line: 542, column: 9 } },
                    { start: { line: 520, column: 8 }, end: { line: 542, column: 9 } }
                  ],
                  line: 520
                },
                '40': {
                  loc: { start: { line: 530, column: 15 }, end: { line: 542, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 530, column: 15 }, end: { line: 542, column: 9 } },
                    { start: { line: 530, column: 15 }, end: { line: 542, column: 9 } }
                  ],
                  line: 530
                },
                '41': {
                  loc: { start: { line: 546, column: 8 }, end: { line: 553, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 546, column: 8 }, end: { line: 553, column: 9 } },
                    { start: { line: 546, column: 8 }, end: { line: 553, column: 9 } }
                  ],
                  line: 546
                },
                '42': {
                  loc: { start: { line: 557, column: 8 }, end: { line: 577, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 557, column: 8 }, end: { line: 577, column: 9 } },
                    { start: { line: 557, column: 8 }, end: { line: 577, column: 9 } }
                  ],
                  line: 557
                },
                '43': {
                  loc: { start: { line: 559, column: 15 }, end: { line: 577, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 559, column: 15 }, end: { line: 577, column: 9 } },
                    { start: { line: 559, column: 15 }, end: { line: 577, column: 9 } }
                  ],
                  line: 559
                },
                '44': {
                  loc: { start: { line: 559, column: 19 }, end: { line: 559, column: 64 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 559, column: 19 }, end: { line: 559, column: 39 } },
                    { start: { line: 559, column: 43 }, end: { line: 559, column: 64 } }
                  ],
                  line: 559
                },
                '45': {
                  loc: { start: { line: 622, column: 2 }, end: { line: 629, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 622, column: 2 }, end: { line: 629, column: 3 } },
                    { start: { line: 622, column: 2 }, end: { line: 629, column: 3 } }
                  ],
                  line: 622
                },
                '46': {
                  loc: { start: { line: 623, column: 4 }, end: { line: 626, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 623, column: 4 }, end: { line: 626, column: 5 } },
                    { start: { line: 623, column: 4 }, end: { line: 626, column: 5 } }
                  ],
                  line: 623
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0,
                '118': 0,
                '119': 0,
                '120': 0,
                '121': 0,
                '122': 0,
                '123': 0,
                '124': 0,
                '125': 0,
                '126': 0,
                '127': 0,
                '128': 0,
                '129': 0,
                '130': 0,
                '131': 0,
                '132': 0,
                '133': 0,
                '134': 0,
                '135': 0,
                '136': 0,
                '137': 0,
                '138': 0,
                '139': 0,
                '140': 0,
                '141': 0,
                '142': 0,
                '143': 0,
                '144': 0,
                '145': 0,
                '146': 0,
                '147': 0,
                '148': 0,
                '149': 0,
                '150': 0,
                '151': 0,
                '152': 0,
                '153': 0,
                '154': 0,
                '155': 0,
                '156': 0,
                '157': 0,
                '158': 0,
                '159': 0,
                '160': 0,
                '161': 0,
                '162': 0,
                '163': 0,
                '164': 0,
                '165': 0,
                '166': 0,
                '167': 0,
                '168': 0,
                '169': 0,
                '170': 0,
                '171': 0,
                '172': 0,
                '173': 0,
                '174': 0,
                '175': 0,
                '176': 0,
                '177': 0,
                '178': 0,
                '179': 0,
                '180': 0,
                '181': 0,
                '182': 0,
                '183': 0,
                '184': 0,
                '185': 0,
                '186': 0,
                '187': 0,
                '188': 0,
                '189': 0,
                '190': 0,
                '191': 0,
                '192': 0,
                '193': 0,
                '194': 0,
                '195': 0,
                '196': 0,
                '197': 0,
                '198': 0,
                '199': 0,
                '200': 0,
                '201': 0,
                '202': 0,
                '203': 0,
                '204': 0,
                '205': 0,
                '206': 0,
                '207': 0,
                '208': 0,
                '209': 0,
                '210': 0,
                '211': 0,
                '212': 0,
                '213': 0,
                '214': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0, 0],
                '20': [0, 0],
                '21': [0, 0],
                '22': [0, 0],
                '23': [0, 0],
                '24': [0, 0],
                '25': [0, 0],
                '26': [0, 0, 0],
                '27': [0, 0],
                '28': [0, 0],
                '29': [0, 0],
                '30': [0, 0],
                '31': [0, 0],
                '32': [0, 0],
                '33': [0, 0, 0, 0, 0, 0, 0],
                '34': [0, 0],
                '35': [0, 0],
                '36': [0, 0],
                '37': [0, 0],
                '38': [0, 0],
                '39': [0, 0],
                '40': [0, 0],
                '41': [0, 0],
                '42': [0, 0],
                '43': [0, 0],
                '44': [0, 0],
                '45': [0, 0],
                '46': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: 'cae8adcad8bb6abb795116af6e02a7844aad57bf'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.concat');
          _dereq_('core-js/modules/es.array.index-of');
          _dereq_('core-js/modules/es.array.slice');
          _dereq_('core-js/modules/es.array.splice');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.regexp.exec');
          _dereq_('core-js/modules/es.string.match');
          _dereq_('core-js/modules/es.string.split');
          _dereq_('core-js/modules/es.string.trim');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          _dereq_('./p5.Geometry');
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_cy4aglvaq.s[0]++;

          /**
           * Load a 3d model from an OBJ or STL file.
           *
           * <a href="#/p5/loadModel">loadModel()</a> should be placed inside of <a href="#/p5/preload">preload()</a>.
           * This allows the model to load fully before the rest of your code is run.
           *
           * One of the limitations of the OBJ and STL format is that it doesn't have a built-in
           * sense of scale. This means that models exported from different programs might
           * be very different sizes. If your model isn't displaying, try calling
           * <a href="#/p5/loadModel">loadModel()</a> with the normalized parameter set to true. This will resize the
           * model to a scale appropriate for p5. You can also make additional changes to
           * the final size of your model with the <a href="#/p5/scale">scale()</a> function.
           *
           * Also, the support for colored STL files is not present. STL files with color will be
           * rendered without color properties.
           *
           * @method loadModel
           * @param  {String} path              Path of the model to be loaded
           * @param  {Boolean} normalize        If true, scale the model to a
           *                                      standardized size when loading
           * @param  {function(p5.Geometry)} [successCallback] Function to be called
           *                                     once the model is loaded. Will be passed
           *                                     the 3D model object.
           * @param  {function(Event)} [failureCallback] called with event error if
           *                                         the model fails to load.
           * @param  {String} [fileType]          The file extension of the model
           *                                      (<code>.stl</code>, <code>.obj</code>).
           * @return {p5.Geometry} the <a href="#/p5.Geometry">p5.Geometry</a> object
           *
           * @example
           * <div>
           * <code>
           * //draw a spinning octahedron
           * let octahedron;
           *
           * function preload() {
           *   octahedron = loadModel('assets/octahedron.obj');
           * }
           *
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           *
           * function draw() {
           *   background(200);
           *   rotateX(frameCount * 0.01);
           *   rotateY(frameCount * 0.01);
           *   model(octahedron);
           * }
           * </code>
           * </div>
           *
           * @alt
           * Vertically rotating 3-d octahedron.
           *
           * @example
           * <div>
           * <code>
           * //draw a spinning teapot
           * let teapot;
           *
           * function preload() {
           *   // Load model with normalise parameter set to true
           *   teapot = loadModel('assets/teapot.obj', true);
           * }
           *
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           *
           * function draw() {
           *   background(200);
           *   scale(0.4); // Scaled to make model fit into canvas
           *   rotateX(frameCount * 0.01);
           *   rotateY(frameCount * 0.01);
           *   normalMaterial(); // For effect
           *   model(teapot);
           * }
           * </code>
           * </div>
           *
           * @alt
           * Vertically rotating 3-d teapot with red, green and blue gradient.
           */
          /**
           * @method loadModel
           * @param  {String} path
           * @param  {function(p5.Geometry)} [successCallback]
           * @param  {function(Event)} [failureCallback]
           * @param  {String} [fileType]
           * @return {p5.Geometry} the <a href="#/p5.Geometry">p5.Geometry</a> object
           */
          _main.default.prototype.loadModel = function(path) {
            cov_cy4aglvaq.f[0]++;
            cov_cy4aglvaq.s[1]++;
            _main.default._validateParameters('loadModel', arguments);
            var normalize;
            var successCallback;
            var failureCallback;
            var fileType = (cov_cy4aglvaq.s[2]++, path.slice(-4));
            cov_cy4aglvaq.s[3]++;
            if (typeof arguments[1] === 'boolean') {
              cov_cy4aglvaq.b[0][0]++;
              cov_cy4aglvaq.s[4]++;
              normalize = arguments[1];
              cov_cy4aglvaq.s[5]++;
              successCallback = arguments[2];
              cov_cy4aglvaq.s[6]++;
              failureCallback = arguments[3];
              cov_cy4aglvaq.s[7]++;
              if (typeof arguments[4] !== 'undefined') {
                cov_cy4aglvaq.b[1][0]++;
                cov_cy4aglvaq.s[8]++;
                fileType = arguments[4];
              } else {
                cov_cy4aglvaq.b[1][1]++;
              }
            } else {
              cov_cy4aglvaq.b[0][1]++;
              cov_cy4aglvaq.s[9]++;
              normalize = false;
              cov_cy4aglvaq.s[10]++;
              successCallback = arguments[1];
              cov_cy4aglvaq.s[11]++;
              failureCallback = arguments[2];
              cov_cy4aglvaq.s[12]++;
              if (typeof arguments[3] !== 'undefined') {
                cov_cy4aglvaq.b[2][0]++;
                cov_cy4aglvaq.s[13]++;
                fileType = arguments[3];
              } else {
                cov_cy4aglvaq.b[2][1]++;
              }
            }

            var model = (cov_cy4aglvaq.s[14]++, new _main.default.Geometry());
            cov_cy4aglvaq.s[15]++;
            model.gid = ''.concat(path, '|').concat(normalize);
            var self = (cov_cy4aglvaq.s[16]++, this);
            cov_cy4aglvaq.s[17]++;

            if (fileType.match(/\.stl$/i)) {
              cov_cy4aglvaq.b[3][0]++;
              cov_cy4aglvaq.s[18]++;
              this.httpDo(
                path,
                'GET',
                'arrayBuffer',
                function(arrayBuffer) {
                  cov_cy4aglvaq.f[1]++;
                  cov_cy4aglvaq.s[19]++;
                  parseSTL(model, arrayBuffer);
                  cov_cy4aglvaq.s[20]++;

                  if (normalize) {
                    cov_cy4aglvaq.b[4][0]++;
                    cov_cy4aglvaq.s[21]++;
                    model.normalize();
                  } else {
                    cov_cy4aglvaq.b[4][1]++;
                  }
                  cov_cy4aglvaq.s[22]++;
                  self._decrementPreload();
                  cov_cy4aglvaq.s[23]++;
                  if (typeof successCallback === 'function') {
                    cov_cy4aglvaq.b[5][0]++;
                    cov_cy4aglvaq.s[24]++;
                    successCallback(model);
                  } else {
                    cov_cy4aglvaq.b[5][1]++;
                  }
                },
                failureCallback
              );
            } else {
              cov_cy4aglvaq.b[3][1]++;
              cov_cy4aglvaq.s[25]++;
              if (fileType.match(/\.obj$/i)) {
                cov_cy4aglvaq.b[6][0]++;
                cov_cy4aglvaq.s[26]++;
                this.loadStrings(
                  path,
                  function(strings) {
                    cov_cy4aglvaq.f[2]++;
                    cov_cy4aglvaq.s[27]++;
                    parseObj(model, strings);
                    cov_cy4aglvaq.s[28]++;

                    if (normalize) {
                      cov_cy4aglvaq.b[7][0]++;
                      cov_cy4aglvaq.s[29]++;
                      model.normalize();
                    } else {
                      cov_cy4aglvaq.b[7][1]++;
                    }
                    cov_cy4aglvaq.s[30]++;

                    self._decrementPreload();
                    cov_cy4aglvaq.s[31]++;
                    if (typeof successCallback === 'function') {
                      cov_cy4aglvaq.b[8][0]++;
                      cov_cy4aglvaq.s[32]++;
                      successCallback(model);
                    } else {
                      cov_cy4aglvaq.b[8][1]++;
                    }
                  },
                  failureCallback
                );
              } else {
                cov_cy4aglvaq.b[6][1]++;
                cov_cy4aglvaq.s[33]++;
                _main.default._friendlyFileLoadError(3, path);
                cov_cy4aglvaq.s[34]++;

                if (failureCallback) {
                  cov_cy4aglvaq.b[9][0]++;
                  cov_cy4aglvaq.s[35]++;
                  failureCallback();
                } else {
                  cov_cy4aglvaq.b[9][1]++;
                  cov_cy4aglvaq.s[36]++;
                  console.error(
                    'Sorry, the file type is invalid. Only OBJ and STL files are supported.'
                  );
                }
              }
            }
            cov_cy4aglvaq.s[37]++;
            return model;
          };

          /**
           * Parse OBJ lines into model. For reference, this is what a simple model of a
           * square might look like:
           *
           * v -0.5 -0.5 0.5
           * v -0.5 -0.5 -0.5
           * v -0.5 0.5 -0.5
           * v -0.5 0.5 0.5
           *
           * f 4 3 2 1
           */
          function parseObj(model, lines) {
            cov_cy4aglvaq.f[3]++;
            // OBJ allows a face to specify an index for a vertex (in the above example),
            // but it also allows you to specify a custom combination of vertex, UV
            // coordinate, and vertex normal. So, "3/4/3" would mean, "use vertex 3 with
            // UV coordinate 4 and vertex normal 3". In WebGL, every vertex with different
            // parameters must be a different vertex, so loadedVerts is used to
            // temporarily store the parsed vertices, normals, etc., and indexedVerts is
            // used to map a specific combination (keyed on, for example, the string
            // "3/4/3"), to the actual index of the newly created vertex in the final
            // object.
            var loadedVerts = (cov_cy4aglvaq.s[38]++,
            {
              v: [],
              vt: [],
              vn: []
            });

            var indexedVerts = (cov_cy4aglvaq.s[39]++, {});
            cov_cy4aglvaq.s[40]++;

            for (var line = (cov_cy4aglvaq.s[41]++, 0); line < lines.length; ++line) {
              // Each line is a separate object (vertex, face, vertex normal, etc)
              // For each line, split it into tokens on whitespace. The first token
              // describes the type.
              var tokens = (cov_cy4aglvaq.s[42]++, lines[line].trim().split(/\b\s+/));
              cov_cy4aglvaq.s[43]++;

              if (tokens.length > 0) {
                cov_cy4aglvaq.b[10][0]++;
                cov_cy4aglvaq.s[44]++;
                if (
                  (cov_cy4aglvaq.b[12][0]++, tokens[0] === 'v') ||
                  (cov_cy4aglvaq.b[12][1]++, tokens[0] === 'vn')
                ) {
                  cov_cy4aglvaq.b[11][0]++;
                  // Check if this line describes a vertex or vertex normal.
                  // It will have three numeric parameters.
                  var vertex = (cov_cy4aglvaq.s[45]++,
                  new _main.default.Vector(
                    parseFloat(tokens[1]),
                    parseFloat(tokens[2]),
                    parseFloat(tokens[3])
                  ));
                  cov_cy4aglvaq.s[46]++;

                  loadedVerts[tokens[0]].push(vertex);
                } else {
                  cov_cy4aglvaq.b[11][1]++;
                  cov_cy4aglvaq.s[47]++;
                  if (tokens[0] === 'vt') {
                    cov_cy4aglvaq.b[13][0]++;
                    // Check if this line describes a texture coordinate.
                    // It will have two numeric parameters U and V (W is omitted).
                    // Because of WebGL texture coordinates rendering behaviour, the V
                    // coordinate is inversed.
                    var texVertex = (cov_cy4aglvaq.s[48]++,
                    [parseFloat(tokens[1]), 1 - parseFloat(tokens[2])]);
                    cov_cy4aglvaq.s[49]++;
                    loadedVerts[tokens[0]].push(texVertex);
                  } else {
                    cov_cy4aglvaq.b[13][1]++;
                    cov_cy4aglvaq.s[50]++;
                    if (tokens[0] === 'f') {
                      cov_cy4aglvaq.b[14][0]++;
                      cov_cy4aglvaq.s[51]++;
                      // Check if this line describes a face.
                      // OBJ faces can have more than three points. Triangulate points.
                      for (
                        var tri = (cov_cy4aglvaq.s[52]++, 3);
                        tri < tokens.length;
                        ++tri
                      ) {
                        var face = (cov_cy4aglvaq.s[53]++, []);

                        var vertexTokens = (cov_cy4aglvaq.s[54]++, [1, tri - 1, tri]);
                        cov_cy4aglvaq.s[55]++;

                        for (
                          var tokenInd = (cov_cy4aglvaq.s[56]++, 0);
                          tokenInd < vertexTokens.length;
                          ++tokenInd
                        ) {
                          // Now, convert the given token into an index
                          var vertString = (cov_cy4aglvaq.s[57]++,
                          tokens[vertexTokens[tokenInd]]);
                          var vertIndex = (cov_cy4aglvaq.s[58]++, 0);

                          // TODO: Faces can technically use negative numbers to refer to the
                          // previous nth vertex. I haven't seen this used in practice, but
                          // it might be good to implement this in the future.
                          cov_cy4aglvaq.s[59]++;
                          if (indexedVerts[vertString] !== undefined) {
                            cov_cy4aglvaq.b[15][0]++;
                            cov_cy4aglvaq.s[60]++;
                            vertIndex = indexedVerts[vertString];
                          } else {
                            cov_cy4aglvaq.b[15][1]++;
                            var vertParts = (cov_cy4aglvaq.s[61]++, vertString.split('/'));
                            cov_cy4aglvaq.s[62]++;
                            for (
                              var i = (cov_cy4aglvaq.s[63]++, 0);
                              i < vertParts.length;
                              i++
                            ) {
                              cov_cy4aglvaq.s[64]++;
                              vertParts[i] = parseInt(vertParts[i]) - 1;
                            }
                            cov_cy4aglvaq.s[65]++;

                            vertIndex = indexedVerts[vertString] = model.vertices.length;
                            cov_cy4aglvaq.s[66]++;
                            model.vertices.push(loadedVerts.v[vertParts[0]].copy());
                            cov_cy4aglvaq.s[67]++;
                            if (loadedVerts.vt[vertParts[1]]) {
                              cov_cy4aglvaq.b[16][0]++;
                              cov_cy4aglvaq.s[68]++;
                              model.uvs.push(loadedVerts.vt[vertParts[1]].slice());
                            } else {
                              cov_cy4aglvaq.b[16][1]++;
                              cov_cy4aglvaq.s[69]++;
                              model.uvs.push([0, 0]);
                            }
                            cov_cy4aglvaq.s[70]++;

                            if (loadedVerts.vn[vertParts[2]]) {
                              cov_cy4aglvaq.b[17][0]++;
                              cov_cy4aglvaq.s[71]++;
                              model.vertexNormals.push(loadedVerts.vn[vertParts[2]].copy());
                            } else {
                              cov_cy4aglvaq.b[17][1]++;
                            }
                          }
                          cov_cy4aglvaq.s[72]++;

                          face.push(vertIndex);
                        }
                        cov_cy4aglvaq.s[73]++;

                        if (
                          (cov_cy4aglvaq.b[19][0]++, face[0] !== face[1]) &&
                          (cov_cy4aglvaq.b[19][1]++, face[0] !== face[2]) &&
                          (cov_cy4aglvaq.b[19][2]++, face[1] !== face[2])
                        ) {
                          cov_cy4aglvaq.b[18][0]++;
                          cov_cy4aglvaq.s[74]++;
                          model.faces.push(face);
                        } else {
                          cov_cy4aglvaq.b[18][1]++;
                        }
                      }
                    } else {
                      cov_cy4aglvaq.b[14][1]++;
                    }
                  }
                }
              } else {
                cov_cy4aglvaq.b[10][1]++;
              }
            }
            // If the model doesn't have normals, compute the normals
            cov_cy4aglvaq.s[75]++;
            if (model.vertexNormals.length === 0) {
              cov_cy4aglvaq.b[20][0]++;
              cov_cy4aglvaq.s[76]++;
              model.computeNormals();
            } else {
              cov_cy4aglvaq.b[20][1]++;
            }
            cov_cy4aglvaq.s[77]++;

            return model;
          }

          /**
           * STL files can be of two types, ASCII and Binary,
           *
           * We need to convert the arrayBuffer to an array of strings,
           * to parse it as an ASCII file.
           */
          function parseSTL(model, buffer) {
            cov_cy4aglvaq.f[4]++;
            cov_cy4aglvaq.s[78]++;
            if (isBinary(buffer)) {
              cov_cy4aglvaq.b[21][0]++;
              cov_cy4aglvaq.s[79]++;
              parseBinarySTL(model, buffer);
            } else {
              cov_cy4aglvaq.b[21][1]++;
              var reader = (cov_cy4aglvaq.s[80]++, new DataView(buffer));
              cov_cy4aglvaq.s[81]++;

              if (!('TextDecoder' in window)) {
                cov_cy4aglvaq.b[22][0]++;
                cov_cy4aglvaq.s[82]++;
                console.warn(
                  'Sorry, ASCII STL loading only works in browsers that support TextDecoder (https://caniuse.com/#feat=textencoder)'
                );
                cov_cy4aglvaq.s[83]++;

                return model;
              } else {
                cov_cy4aglvaq.b[22][1]++;
              }

              var decoder = (cov_cy4aglvaq.s[84]++, new TextDecoder('utf-8'));
              var lines = (cov_cy4aglvaq.s[85]++, decoder.decode(reader));
              var lineArray = (cov_cy4aglvaq.s[86]++, lines.split('\n'));
              cov_cy4aglvaq.s[87]++;
              parseASCIISTL(model, lineArray);
            }
            cov_cy4aglvaq.s[88]++;
            return model;
          }

          /**
           * This function checks if the file is in ASCII format or in Binary format
           *
           * It is done by searching keyword `solid` at the start of the file.
           *
           * An ASCII STL data must begin with `solid` as the first six bytes.
           * However, ASCII STLs lacking the SPACE after the `d` are known to be
           * plentiful. So, check the first 5 bytes for `solid`.
           *
           * Several encodings, such as UTF-8, precede the text with up to 5 bytes:
           * https://en.wikipedia.org/wiki/Byte_order_mark#Byte_order_marks_by_encoding
           * Search for `solid` to start anywhere after those prefixes.
           */
          function isBinary(data) {
            cov_cy4aglvaq.f[5]++;
            var reader = (cov_cy4aglvaq.s[89]++, new DataView(data));

            // US-ASCII ordinal values for `s`, `o`, `l`, `i`, `d`
            var solid = (cov_cy4aglvaq.s[90]++, [115, 111, 108, 105, 100]);
            cov_cy4aglvaq.s[91]++;
            for (var off = (cov_cy4aglvaq.s[92]++, 0); off < 5; off++) {
              cov_cy4aglvaq.s[93]++;
              // If "solid" text is matched to the current offset, declare it to be an ASCII STL.
              if (matchDataViewAt(solid, reader, off)) {
                cov_cy4aglvaq.b[23][0]++;
                cov_cy4aglvaq.s[94]++;
                return false;
              } else {
                cov_cy4aglvaq.b[23][1]++;
              }
            }

            // Couldn't find "solid" text at the beginning; it is binary STL.
            cov_cy4aglvaq.s[95]++;
            return true;
          }

          /**
           * This function matches the `query` at the provided `offset`
           */
          function matchDataViewAt(query, reader, offset) {
            cov_cy4aglvaq.f[6]++;
            cov_cy4aglvaq.s[96]++;
            // Check if each byte in query matches the corresponding byte from the current offset
            for (
              var i = (cov_cy4aglvaq.s[97]++, 0),
                il = (cov_cy4aglvaq.s[98]++, query.length);
              i < il;
              i++
            ) {
              cov_cy4aglvaq.s[99]++;
              if (query[i] !== reader.getUint8(offset + i, false)) {
                cov_cy4aglvaq.b[24][0]++;
                cov_cy4aglvaq.s[100]++;
                return false;
              } else {
                cov_cy4aglvaq.b[24][1]++;
              }
            }
            cov_cy4aglvaq.s[101]++;

            return true;
          }

          /**
           * This function parses the Binary STL files.
           * https://en.wikipedia.org/wiki/STL_%28file_format%29#Binary_STL
           *
           * Currently there is no support for the colors provided in STL files.
           */
          function parseBinarySTL(model, buffer) {
            cov_cy4aglvaq.f[7]++;
            var reader = (cov_cy4aglvaq.s[102]++, new DataView(buffer));

            // Number of faces is present following the header
            var faces = (cov_cy4aglvaq.s[103]++, reader.getUint32(80, true));
            var r,
              g,
              b,
              hasColors = (cov_cy4aglvaq.s[104]++, false),
              colors;
            var defaultR, defaultG, defaultB;

            // Binary files contain 80-byte header, which is generally ignored.
            cov_cy4aglvaq.s[105]++;
            for (var index = (cov_cy4aglvaq.s[106]++, 0); index < 80 - 10; index++) {
              cov_cy4aglvaq.s[107]++;
              // Check for `COLOR=`
              if (
                (cov_cy4aglvaq.b[26][0]++,
                reader.getUint32(index, false) === 0x434f4c4f /*COLO*/) &&
                (cov_cy4aglvaq.b[26][1]++, reader.getUint8(index + 4) === 0x52) /*'R'*/ &&
                (cov_cy4aglvaq.b[26][2]++, reader.getUint8(index + 5) === 0x3d) /*'='*/
              ) {
                cov_cy4aglvaq.b[25][0]++;
                cov_cy4aglvaq.s[108]++;
                hasColors = true;
                cov_cy4aglvaq.s[109]++;
                colors = [];
                cov_cy4aglvaq.s[110]++;

                defaultR = reader.getUint8(index + 6) / 255;
                cov_cy4aglvaq.s[111]++;
                defaultG = reader.getUint8(index + 7) / 255;
                cov_cy4aglvaq.s[112]++;
                defaultB = reader.getUint8(index + 8) / 255;
                // To be used when color support is added
                // alpha = reader.getUint8(index + 9) / 255;
              } else {
                cov_cy4aglvaq.b[25][1]++;
              }
            }
            var dataOffset = (cov_cy4aglvaq.s[113]++, 84);
            var faceLength = (cov_cy4aglvaq.s[114]++, 12 * 4 + 2);

            // Iterate the faces
            cov_cy4aglvaq.s[115]++;
            for (var face = (cov_cy4aglvaq.s[116]++, 0); face < faces; face++) {
              var start = (cov_cy4aglvaq.s[117]++, dataOffset + face * faceLength);
              var normalX = (cov_cy4aglvaq.s[118]++, reader.getFloat32(start, true));
              var normalY = (cov_cy4aglvaq.s[119]++, reader.getFloat32(start + 4, true));
              var normalZ = (cov_cy4aglvaq.s[120]++, reader.getFloat32(start + 8, true));
              cov_cy4aglvaq.s[121]++;

              if (hasColors) {
                cov_cy4aglvaq.b[27][0]++;
                var packedColor = (cov_cy4aglvaq.s[122]++,
                reader.getUint16(start + 48, true));
                cov_cy4aglvaq.s[123]++;

                if ((packedColor & 0x8000) === 0) {
                  cov_cy4aglvaq.b[28][0]++;
                  cov_cy4aglvaq.s[124]++;
                  // facet has its own unique color
                  r = (packedColor & 0x1f) / 31;
                  cov_cy4aglvaq.s[125]++;
                  g = ((packedColor >> 5) & 0x1f) / 31;
                  cov_cy4aglvaq.s[126]++;
                  b = ((packedColor >> 10) & 0x1f) / 31;
                } else {
                  cov_cy4aglvaq.b[28][1]++;
                  cov_cy4aglvaq.s[127]++;
                  r = defaultR;
                  cov_cy4aglvaq.s[128]++;
                  g = defaultG;
                  cov_cy4aglvaq.s[129]++;
                  b = defaultB;
                }
              } else {
                cov_cy4aglvaq.b[27][1]++;
              }
              var newNormal = (cov_cy4aglvaq.s[130]++,
              new _main.default.Vector(normalX, normalY, normalZ));
              cov_cy4aglvaq.s[131]++;

              for (var i = (cov_cy4aglvaq.s[132]++, 1); i <= 3; i++) {
                var vertexstart = (cov_cy4aglvaq.s[133]++, start + i * 12);

                var newVertex = (cov_cy4aglvaq.s[134]++,
                new _main.default.Vector(
                  reader.getFloat32(vertexstart, true),
                  reader.getFloat32(vertexstart + 4, true),
                  reader.getFloat32(vertexstart + 8, true)
                ));
                cov_cy4aglvaq.s[135]++;

                model.vertices.push(newVertex);
                cov_cy4aglvaq.s[136]++;
                model.vertexNormals.push(newNormal);
                cov_cy4aglvaq.s[137]++;

                if (hasColors) {
                  cov_cy4aglvaq.b[29][0]++;
                  cov_cy4aglvaq.s[138]++;
                  colors.push(r, g, b);
                } else {
                  cov_cy4aglvaq.b[29][1]++;
                }
              }
              cov_cy4aglvaq.s[139]++;

              model.faces.push([3 * face, 3 * face + 1, 3 * face + 2]);
              cov_cy4aglvaq.s[140]++;
              model.uvs.push([0, 0], [0, 0], [0, 0]);
            }
            cov_cy4aglvaq.s[141]++;
            if (hasColors) {
              // add support for colors here.
              cov_cy4aglvaq.b[30][0]++;
            } else {
              cov_cy4aglvaq.b[30][1]++;
            }
            cov_cy4aglvaq.s[142]++;
            return model;
          }

          /**
           * ASCII STL file starts with `solid 'nameOfFile'`
           * Then contain the normal of the face, starting with `facet normal`
           * Next contain a keyword indicating the start of face vertex, `outer loop`
           * Next comes the three vertex, starting with `vertex x y z`
           * Vertices ends with `endloop`
           * Face ends with `endfacet`
           * Next face starts with `facet normal`
           * The end of the file is indicated by `endsolid`
           */
          function parseASCIISTL(model, lines) {
            cov_cy4aglvaq.f[8]++;
            var state = (cov_cy4aglvaq.s[143]++, '');
            var curVertexIndex = (cov_cy4aglvaq.s[144]++, []);
            var newNormal, newVertex;
            cov_cy4aglvaq.s[145]++;

            for (
              var iterator = (cov_cy4aglvaq.s[146]++, 0);
              iterator < lines.length;
              ++iterator
            ) {
              var line = (cov_cy4aglvaq.s[147]++, lines[iterator].trim());
              var parts = (cov_cy4aglvaq.s[148]++, line.split(' '));
              cov_cy4aglvaq.s[149]++;

              for (
                var partsiterator = (cov_cy4aglvaq.s[150]++, 0);
                partsiterator < parts.length;
                ++partsiterator
              ) {
                cov_cy4aglvaq.s[151]++;
                if (parts[partsiterator] === '') {
                  cov_cy4aglvaq.b[31][0]++;
                  cov_cy4aglvaq.s[152]++;
                  // Ignoring multiple whitespaces
                  parts.splice(partsiterator, 1);
                } else {
                  cov_cy4aglvaq.b[31][1]++;
                }
              }
              cov_cy4aglvaq.s[153]++;

              if (parts.length === 0) {
                cov_cy4aglvaq.b[32][0]++;
                cov_cy4aglvaq.s[154]++;
                // Remove newline
                continue;
              } else {
                cov_cy4aglvaq.b[32][1]++;
              }
              cov_cy4aglvaq.s[155]++;

              switch (state) {
                case '':
                  cov_cy4aglvaq.b[33][0]++;
                  cov_cy4aglvaq.s[156]++; // First run
                  if (parts[0] !== 'solid') {
                    cov_cy4aglvaq.b[34][0]++;
                    cov_cy4aglvaq.s[157]++;
                    // Invalid state
                    console.error(line);
                    cov_cy4aglvaq.s[158]++;
                    console.error(
                      'Invalid state "'.concat(parts[0], '", should be "solid"')
                    );
                    cov_cy4aglvaq.s[159]++;
                    return;
                  } else {
                    cov_cy4aglvaq.b[34][1]++;
                    cov_cy4aglvaq.s[160]++;
                    state = 'solid';
                  }
                  cov_cy4aglvaq.s[161]++;
                  break;

                case 'solid':
                  cov_cy4aglvaq.b[33][1]++;
                  cov_cy4aglvaq.s[162]++; // First face
                  if (
                    (cov_cy4aglvaq.b[36][0]++, parts[0] !== 'facet') ||
                    (cov_cy4aglvaq.b[36][1]++, parts[1] !== 'normal')
                  ) {
                    cov_cy4aglvaq.b[35][0]++;
                    cov_cy4aglvaq.s[163]++;
                    // Invalid state
                    console.error(line);
                    cov_cy4aglvaq.s[164]++;
                    console.error(
                      'Invalid state "'.concat(parts[0], '", should be "facet normal"')
                    );
                    cov_cy4aglvaq.s[165]++;

                    return;
                  } else {
                    cov_cy4aglvaq.b[35][1]++;
                    cov_cy4aglvaq.s[166]++;
                    // Push normal for first face
                    newNormal = new _main.default.Vector(
                      parseFloat(parts[2]),
                      parseFloat(parts[3]),
                      parseFloat(parts[4])
                    );
                    cov_cy4aglvaq.s[167]++;

                    model.vertexNormals.push(newNormal, newNormal, newNormal);
                    cov_cy4aglvaq.s[168]++;
                    state = 'facet normal';
                  }
                  cov_cy4aglvaq.s[169]++;
                  break;

                case 'facet normal':
                  cov_cy4aglvaq.b[33][2]++;
                  cov_cy4aglvaq.s[170]++; // After normal is defined
                  if (
                    (cov_cy4aglvaq.b[38][0]++, parts[0] !== 'outer') ||
                    (cov_cy4aglvaq.b[38][1]++, parts[1] !== 'loop')
                  ) {
                    cov_cy4aglvaq.b[37][0]++;
                    cov_cy4aglvaq.s[171]++;
                    // Invalid State
                    console.error(line);
                    cov_cy4aglvaq.s[172]++;
                    console.error(
                      'Invalid state "'.concat(parts[0], '", should be "outer loop"')
                    );
                    cov_cy4aglvaq.s[173]++;
                    return;
                  } else {
                    cov_cy4aglvaq.b[37][1]++;
                    cov_cy4aglvaq.s[174]++;
                    // Next should be vertices
                    state = 'vertex';
                  }
                  cov_cy4aglvaq.s[175]++;
                  break;

                case 'vertex':
                  cov_cy4aglvaq.b[33][3]++;
                  cov_cy4aglvaq.s[176]++;
                  if (parts[0] === 'vertex') {
                    cov_cy4aglvaq.b[39][0]++;
                    cov_cy4aglvaq.s[177]++;
                    //Vertex of triangle
                    newVertex = new _main.default.Vector(
                      parseFloat(parts[1]),
                      parseFloat(parts[2]),
                      parseFloat(parts[3])
                    );
                    cov_cy4aglvaq.s[178]++;

                    model.vertices.push(newVertex);
                    cov_cy4aglvaq.s[179]++;
                    model.uvs.push([0, 0]);
                    cov_cy4aglvaq.s[180]++;
                    curVertexIndex.push(model.vertices.indexOf(newVertex));
                  } else {
                    cov_cy4aglvaq.b[39][1]++;
                    cov_cy4aglvaq.s[181]++;
                    if (parts[0] === 'endloop') {
                      cov_cy4aglvaq.b[40][0]++;
                      cov_cy4aglvaq.s[182]++;
                      // End of vertices
                      model.faces.push(curVertexIndex);
                      cov_cy4aglvaq.s[183]++;
                      curVertexIndex = [];
                      cov_cy4aglvaq.s[184]++;
                      state = 'endloop';
                    } else {
                      cov_cy4aglvaq.b[40][1]++;
                      cov_cy4aglvaq.s[185]++;
                      // Invalid State
                      console.error(line);
                      cov_cy4aglvaq.s[186]++;
                      console.error(
                        'Invalid state "'.concat(
                          parts[0],
                          '", should be "vertex" or "endloop"'
                        )
                      );
                      cov_cy4aglvaq.s[187]++;

                      return;
                    }
                  }
                  cov_cy4aglvaq.s[188]++;
                  break;

                case 'endloop':
                  cov_cy4aglvaq.b[33][4]++;
                  cov_cy4aglvaq.s[189]++;
                  if (parts[0] !== 'endfacet') {
                    cov_cy4aglvaq.b[41][0]++;
                    cov_cy4aglvaq.s[190]++;
                    // End of face
                    console.error(line);
                    cov_cy4aglvaq.s[191]++;
                    console.error(
                      'Invalid state "'.concat(parts[0], '", should be "endfacet"')
                    );
                    cov_cy4aglvaq.s[192]++;
                    return;
                  } else {
                    cov_cy4aglvaq.b[41][1]++;
                    cov_cy4aglvaq.s[193]++;
                    state = 'endfacet';
                  }
                  cov_cy4aglvaq.s[194]++;
                  break;

                case 'endfacet':
                  cov_cy4aglvaq.b[33][5]++;
                  cov_cy4aglvaq.s[195]++;
                  if (parts[0] === 'endsolid') {
                    // End of solid
                    cov_cy4aglvaq.b[42][0]++;
                  } else {
                    cov_cy4aglvaq.b[42][1]++;
                    cov_cy4aglvaq.s[196]++;
                    if (
                      (cov_cy4aglvaq.b[44][0]++, parts[0] === 'facet') &&
                      (cov_cy4aglvaq.b[44][1]++, parts[1] === 'normal')
                    ) {
                      cov_cy4aglvaq.b[43][0]++;
                      cov_cy4aglvaq.s[197]++;
                      // Next face
                      newNormal = new _main.default.Vector(
                        parseFloat(parts[2]),
                        parseFloat(parts[3]),
                        parseFloat(parts[4])
                      );
                      cov_cy4aglvaq.s[198]++;

                      model.vertexNormals.push(newNormal, newNormal, newNormal);
                      cov_cy4aglvaq.s[199]++;
                      state = 'facet normal';
                    } else {
                      cov_cy4aglvaq.b[43][1]++;
                      cov_cy4aglvaq.s[200]++;
                      // Invalid State
                      console.error(line);
                      cov_cy4aglvaq.s[201]++;
                      console.error(
                        'Invalid state "'.concat(
                          parts[0],
                          '", should be "endsolid" or "facet normal"'
                        )
                      );
                      cov_cy4aglvaq.s[202]++;

                      return;
                    }
                  }
                  cov_cy4aglvaq.s[203]++;
                  break;

                default:
                  cov_cy4aglvaq.b[33][6]++;
                  cov_cy4aglvaq.s[204]++;
                  console.error('Invalid state "'.concat(state, '"'));
                  cov_cy4aglvaq.s[205]++;
                  break;
              }
            }
            cov_cy4aglvaq.s[206]++;
            return model;
          }

          /**
           * Render a 3d model to the screen.
           *
           * @method model
           * @param  {p5.Geometry} model Loaded 3d model to be rendered
           * @example
           * <div>
           * <code>
           * //draw a spinning octahedron
           * let octahedron;
           *
           * function preload() {
           *   octahedron = loadModel('assets/octahedron.obj');
           * }
           *
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           *
           * function draw() {
           *   background(200);
           *   rotateX(frameCount * 0.01);
           *   rotateY(frameCount * 0.01);
           *   model(octahedron);
           * }
           * </code>
           * </div>
           *
           * @alt
           * Vertically rotating 3-d octahedron.
           */ cov_cy4aglvaq.s[207]++;
          _main.default.prototype.model = function(model) {
            cov_cy4aglvaq.f[9]++;
            cov_cy4aglvaq.s[208]++;
            this._assert3d('model');
            cov_cy4aglvaq.s[209]++;
            _main.default._validateParameters('model', arguments);
            cov_cy4aglvaq.s[210]++;
            if (model.vertices.length > 0) {
              cov_cy4aglvaq.b[45][0]++;
              cov_cy4aglvaq.s[211]++;
              if (!this._renderer.geometryInHash(model.gid)) {
                cov_cy4aglvaq.b[46][0]++;
                cov_cy4aglvaq.s[212]++;
                model._makeTriangleEdges()._edgesToVertices();
                cov_cy4aglvaq.s[213]++;
                this._renderer.createBuffers(model.gid, model);
              } else {
                cov_cy4aglvaq.b[46][1]++;
              }
              cov_cy4aglvaq.s[214]++;

              this._renderer.drawBuffers(model.gid);
            } else {
              cov_cy4aglvaq.b[45][1]++;
            }
          };
          var _default = _main.default;
          exports.default = _default;
        },
        {
          '../core/main': 283,
          './p5.Geometry': 332,
          'core-js/modules/es.array.concat': 166,
          'core-js/modules/es.array.index-of': 173,
          'core-js/modules/es.array.slice': 178,
          'core-js/modules/es.array.splice': 180,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.regexp.exec': 196,
          'core-js/modules/es.string.match': 202,
          'core-js/modules/es.string.split': 206,
          'core-js/modules/es.string.trim': 208
        }
      ],
      330: [
        function(_dereq_, module, exports) {
          'use strict';
          function _typeof(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof = function _typeof(obj) {
                return typeof obj;
              };
            } else {
              _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof(obj);
          }
          var cov_165wr8g2ia = (function() {
            var path = '/Users/outofambit/src/p5.js/src/webgl/material.js';
            var hash = 'bc5e058e1a0a98ebae1d485e68b7329952feadbd';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/webgl/material.js',
              statementMap: {
                '0': { start: { line: 60, column: 0 }, end: { line: 109, column: 2 } },
                '1': { start: { line: 66, column: 2 }, end: { line: 66, column: 50 } },
                '2': { start: { line: 67, column: 2 }, end: { line: 69, column: 3 } },
                '3': { start: { line: 68, column: 4 }, end: { line: 68, column: 34 } },
                '4': { start: { line: 71, column: 23 }, end: { line: 71, column: 38 } },
                '5': { start: { line: 73, column: 15 }, end: { line: 73, column: 19 } },
                '6': { start: { line: 74, column: 19 }, end: { line: 74, column: 24 } },
                '7': { start: { line: 75, column: 19 }, end: { line: 75, column: 24 } },
                '8': { start: { line: 77, column: 17 }, end: { line: 82, column: 3 } },
                '9': { start: { line: 78, column: 4 }, end: { line: 78, column: 29 } },
                '10': { start: { line: 79, column: 4 }, end: { line: 81, column: 5 } },
                '11': { start: { line: 80, column: 6 }, end: { line: 80, column: 29 } },
                '12': { start: { line: 84, column: 2 }, end: { line: 94, column: 4 } },
                '13': { start: { line: 87, column: 6 }, end: { line: 87, column: 48 } },
                '14': { start: { line: 88, column: 6 }, end: { line: 88, column: 24 } },
                '15': { start: { line: 89, column: 6 }, end: { line: 91, column: 7 } },
                '16': { start: { line: 90, column: 8 }, end: { line: 90, column: 17 } },
                '17': { start: { line: 96, column: 2 }, end: { line: 106, column: 4 } },
                '18': { start: { line: 99, column: 6 }, end: { line: 99, column: 48 } },
                '19': { start: { line: 100, column: 6 }, end: { line: 100, column: 24 } },
                '20': { start: { line: 101, column: 6 }, end: { line: 103, column: 7 } },
                '21': { start: { line: 102, column: 8 }, end: { line: 102, column: 17 } },
                '22': { start: { line: 108, column: 2 }, end: { line: 108, column: 22 } },
                '23': { start: { line: 173, column: 0 }, end: { line: 177, column: 2 } },
                '24': { start: { line: 174, column: 2 }, end: { line: 174, column: 33 } },
                '25': { start: { line: 175, column: 2 }, end: { line: 175, column: 52 } },
                '26': { start: { line: 176, column: 2 }, end: { line: 176, column: 57 } },
                '27': { start: { line: 250, column: 0 }, end: { line: 268, column: 2 } },
                '28': { start: { line: 251, column: 2 }, end: { line: 251, column: 27 } },
                '29': { start: { line: 252, column: 2 }, end: { line: 252, column: 46 } },
                '30': { start: { line: 254, column: 2 }, end: { line: 256, column: 3 } },
                '31': { start: { line: 255, column: 4 }, end: { line: 255, column: 33 } },
                '32': { start: { line: 258, column: 2 }, end: { line: 258, column: 11 } },
                '33': { start: { line: 260, column: 2 }, end: { line: 265, column: 3 } },
                '34': { start: { line: 261, column: 4 }, end: { line: 261, column: 40 } },
                '35': { start: { line: 263, column: 4 }, end: { line: 263, column: 38 } },
                '36': { start: { line: 264, column: 4 }, end: { line: 264, column: 46 } },
                '37': { start: { line: 267, column: 2 }, end: { line: 267, column: 14 } },
                '38': { start: { line: 278, column: 0 }, end: { line: 281, column: 2 } },
                '39': { start: { line: 279, column: 2 }, end: { line: 279, column: 73 } },
                '40': { start: { line: 280, column: 2 }, end: { line: 280, column: 14 } },
                '41': { start: { line: 366, column: 0 }, end: { line: 381, column: 2 } },
                '42': { start: { line: 367, column: 2 }, end: { line: 367, column: 28 } },
                '43': { start: { line: 368, column: 2 }, end: { line: 368, column: 47 } },
                '44': { start: { line: 369, column: 2 }, end: { line: 371, column: 3 } },
                '45': { start: { line: 370, column: 4 }, end: { line: 370, column: 26 } },
                '46': { start: { line: 373, column: 2 }, end: { line: 373, column: 46 } },
                '47': { start: { line: 374, column: 2 }, end: { line: 374, column: 46 } },
                '48': { start: { line: 375, column: 2 }, end: { line: 375, column: 46 } },
                '49': { start: { line: 376, column: 2 }, end: { line: 376, column: 44 } },
                '50': { start: { line: 377, column: 2 }, end: { line: 377, column: 28 } },
                '51': { start: { line: 378, column: 2 }, end: { line: 378, column: 47 } },
                '52': { start: { line: 380, column: 2 }, end: { line: 380, column: 14 } },
                '53': { start: { line: 451, column: 0 }, end: { line: 459, column: 2 } },
                '54': { start: { line: 452, column: 2 }, end: { line: 458, column: 3 } },
                '55': { start: { line: 453, column: 4 }, end: { line: 455, column: 6 } },
                '56': { start: { line: 457, column: 4 }, end: { line: 457, column: 38 } },
                '57': { start: { line: 523, column: 0 }, end: { line: 531, column: 2 } },
                '58': { start: { line: 524, column: 2 }, end: { line: 524, column: 38 } },
                '59': { start: { line: 525, column: 2 }, end: { line: 525, column: 38 } },
                '60': { start: { line: 527, column: 19 }, end: { line: 527, column: 42 } },
                '61': { start: { line: 528, column: 2 }, end: { line: 530, column: 3 } },
                '62': { start: { line: 528, column: 15 }, end: { line: 528, column: 16 } },
                '63': { start: { line: 529, column: 4 }, end: { line: 529, column: 42 } },
                '64': { start: { line: 558, column: 0 }, end: { line: 569, column: 2 } },
                '65': { start: { line: 559, column: 2 }, end: { line: 559, column: 35 } },
                '66': { start: { line: 560, column: 2 }, end: { line: 560, column: 49 } },
                '67': { start: { line: 561, column: 2 }, end: { line: 561, column: 43 } },
                '68': { start: { line: 562, column: 2 }, end: { line: 562, column: 46 } },
                '69': { start: { line: 563, column: 2 }, end: { line: 563, column: 46 } },
                '70': { start: { line: 564, column: 2 }, end: { line: 564, column: 43 } },
                '71': { start: { line: 565, column: 2 }, end: { line: 565, column: 45 } },
                '72': { start: { line: 566, column: 2 }, end: { line: 566, column: 47 } },
                '73': { start: { line: 567, column: 2 }, end: { line: 567, column: 18 } },
                '74': { start: { line: 568, column: 2 }, end: { line: 568, column: 14 } },
                '75': { start: { line: 636, column: 0 }, end: { line: 649, column: 2 } },
                '76': { start: { line: 637, column: 2 }, end: { line: 637, column: 36 } },
                '77': { start: { line: 638, column: 2 }, end: { line: 638, column: 55 } },
                '78': { start: { line: 640, column: 16 }, end: { line: 640, column: 57 } },
                '79': { start: { line: 641, column: 2 }, end: { line: 641, column: 45 } },
                '80': { start: { line: 642, column: 2 }, end: { line: 642, column: 46 } },
                '81': { start: { line: 643, column: 2 }, end: { line: 643, column: 46 } },
                '82': { start: { line: 644, column: 2 }, end: { line: 644, column: 44 } },
                '83': { start: { line: 645, column: 2 }, end: { line: 645, column: 40 } },
                '84': { start: { line: 646, column: 2 }, end: { line: 646, column: 29 } },
                '85': { start: { line: 648, column: 2 }, end: { line: 648, column: 14 } },
                '86': { start: { line: 688, column: 0 }, end: { line: 701, column: 2 } },
                '87': { start: { line: 689, column: 2 }, end: { line: 689, column: 37 } },
                '88': { start: { line: 690, column: 2 }, end: { line: 690, column: 56 } },
                '89': { start: { line: 692, column: 16 }, end: { line: 692, column: 57 } },
                '90': { start: { line: 693, column: 2 }, end: { line: 693, column: 45 } },
                '91': { start: { line: 694, column: 2 }, end: { line: 694, column: 46 } },
                '92': { start: { line: 695, column: 2 }, end: { line: 695, column: 45 } },
                '93': { start: { line: 696, column: 2 }, end: { line: 696, column: 44 } },
                '94': { start: { line: 697, column: 2 }, end: { line: 697, column: 40 } },
                '95': { start: { line: 698, column: 2 }, end: { line: 698, column: 29 } },
                '96': { start: { line: 700, column: 2 }, end: { line: 700, column: 14 } },
                '97': { start: { line: 761, column: 0 }, end: { line: 774, column: 2 } },
                '98': { start: { line: 762, column: 2 }, end: { line: 762, column: 37 } },
                '99': { start: { line: 763, column: 2 }, end: { line: 763, column: 56 } },
                '100': { start: { line: 765, column: 16 }, end: { line: 765, column: 57 } },
                '101': { start: { line: 766, column: 2 }, end: { line: 766, column: 45 } },
                '102': { start: { line: 767, column: 2 }, end: { line: 767, column: 45 } },
                '103': { start: { line: 768, column: 2 }, end: { line: 768, column: 46 } },
                '104': { start: { line: 769, column: 2 }, end: { line: 769, column: 44 } },
                '105': { start: { line: 770, column: 2 }, end: { line: 770, column: 40 } },
                '106': { start: { line: 771, column: 2 }, end: { line: 771, column: 29 } },
                '107': { start: { line: 773, column: 2 }, end: { line: 773, column: 14 } },
                '108': { start: { line: 810, column: 0 }, end: { line: 819, column: 2 } },
                '109': { start: { line: 811, column: 2 }, end: { line: 811, column: 30 } },
                '110': { start: { line: 812, column: 2 }, end: { line: 812, column: 49 } },
                '111': { start: { line: 814, column: 2 }, end: { line: 816, column: 3 } },
                '112': { start: { line: 815, column: 4 }, end: { line: 815, column: 14 } },
                '113': { start: { line: 817, column: 2 }, end: { line: 817, column: 39 } },
                '114': { start: { line: 818, column: 2 }, end: { line: 818, column: 14 } },
                '115': { start: { line: 828, column: 0 }, end: { line: 850, column: 2 } },
                '116': { start: { line: 829, column: 13 }, end: { line: 829, column: 20 } },
                '117': { start: { line: 831, column: 20 }, end: { line: 831, column: 55 } },
                '118': { start: { line: 833, column: 4 }, end: { line: 833, column: 67 } },
                '119': { start: { line: 835, column: 2 }, end: { line: 847, column: 3 } },
                '120': { start: { line: 836, column: 4 }, end: { line: 844, column: 5 } },
                '121': { start: { line: 841, column: 6 }, end: { line: 841, column: 26 } },
                '122': { start: { line: 843, column: 6 }, end: { line: 843, column: 27 } },
                '123': { start: { line: 845, column: 4 }, end: { line: 845, column: 23 } },
                '124': { start: { line: 846, column: 4 }, end: { line: 846, column: 31 } },
                '125': { start: { line: 848, column: 2 }, end: { line: 848, column: 25 } },
                '126': { start: { line: 849, column: 2 }, end: { line: 849, column: 16 } },
                '127': { start: { line: 857, column: 0 }, end: { line: 926, column: 2 } },
                '128': { start: { line: 858, column: 2 }, end: { line: 860, column: 3 } },
                '129': { start: { line: 859, column: 4 }, end: { line: 859, column: 11 } },
                '130': { start: { line: 861, column: 13 }, end: { line: 861, column: 20 } },
                '131': { start: { line: 862, column: 2 }, end: { line: 922, column: 3 } },
                '132': { start: { line: 865, column: 6 }, end: { line: 865, column: 36 } },
                '133': { start: { line: 866, column: 6 }, end: { line: 866, column: 57 } },
                '134': { start: { line: 867, column: 6 }, end: { line: 867, column: 12 } },
                '135': { start: { line: 869, column: 6 }, end: { line: 869, column: 49 } },
                '136': { start: { line: 870, column: 6 }, end: { line: 870, column: 47 } },
                '137': { start: { line: 871, column: 6 }, end: { line: 871, column: 12 } },
                '138': { start: { line: 873, column: 6 }, end: { line: 873, column: 57 } },
                '139': { start: { line: 874, column: 6 }, end: { line: 874, column: 66 } },
                '140': { start: { line: 875, column: 6 }, end: { line: 875, column: 12 } },
                '141': { start: { line: 877, column: 6 }, end: { line: 877, column: 57 } },
                '142': { start: { line: 878, column: 6 }, end: { line: 878, column: 75 } },
                '143': { start: { line: 879, column: 6 }, end: { line: 879, column: 12 } },
                '144': { start: { line: 881, column: 6 }, end: { line: 881, column: 57 } },
                '145': { start: { line: 882, column: 6 }, end: { line: 887, column: 8 } },
                '146': { start: { line: 888, column: 6 }, end: { line: 888, column: 12 } },
                '147': { start: { line: 890, column: 6 }, end: { line: 890, column: 36 } },
                '148': { start: { line: 891, column: 6 }, end: { line: 891, column: 36 } },
                '149': { start: { line: 892, column: 6 }, end: { line: 892, column: 12 } },
                '150': { start: { line: 894, column: 6 }, end: { line: 894, column: 70 } },
                '151': { start: { line: 895, column: 6 }, end: { line: 895, column: 65 } },
                '152': { start: { line: 896, column: 6 }, end: { line: 896, column: 12 } },
                '153': { start: { line: 898, column: 6 }, end: { line: 905, column: 7 } },
                '154': { start: { line: 899, column: 8 }, end: { line: 899, column: 69 } },
                '155': { start: { line: 900, column: 8 }, end: { line: 900, column: 61 } },
                '156': { start: { line: 902, column: 8 }, end: { line: 904, column: 10 } },
                '157': { start: { line: 906, column: 6 }, end: { line: 906, column: 12 } },
                '158': { start: { line: 908, column: 6 }, end: { line: 915, column: 7 } },
                '159': { start: { line: 909, column: 8 }, end: { line: 909, column: 69 } },
                '160': { start: { line: 910, column: 8 }, end: { line: 910, column: 61 } },
                '161': { start: { line: 912, column: 8 }, end: { line: 914, column: 10 } },
                '162': { start: { line: 916, column: 6 }, end: { line: 916, column: 12 } },
                '163': { start: { line: 918, column: 6 }, end: { line: 920, column: 8 } },
                '164': { start: { line: 921, column: 6 }, end: { line: 921, column: 12 } },
                '165': { start: { line: 923, column: 2 }, end: { line: 925, column: 3 } },
                '166': { start: { line: 924, column: 4 }, end: { line: 924, column: 46 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 60, column: 26 }, end: { line: 60, column: 27 } },
                  loc: { start: { line: 65, column: 2 }, end: { line: 109, column: 1 } },
                  line: 65
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 77, column: 17 }, end: { line: 77, column: 18 } },
                  loc: { start: { line: 77, column: 23 }, end: { line: 82, column: 3 } },
                  line: 77
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: { start: { line: 86, column: 4 }, end: { line: 86, column: 5 } },
                  loc: { start: { line: 86, column: 14 }, end: { line: 92, column: 5 } },
                  line: 86
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: { start: { line: 98, column: 4 }, end: { line: 98, column: 5 } },
                  loc: { start: { line: 98, column: 14 }, end: { line: 104, column: 5 } },
                  line: 98
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 173, column: 28 },
                    end: { line: 173, column: 29 }
                  },
                  loc: { start: { line: 173, column: 55 }, end: { line: 177, column: 1 } },
                  line: 173
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 250, column: 22 },
                    end: { line: 250, column: 23 }
                  },
                  loc: { start: { line: 250, column: 34 }, end: { line: 268, column: 1 } },
                  line: 250
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 278, column: 27 },
                    end: { line: 278, column: 28 }
                  },
                  loc: { start: { line: 278, column: 38 }, end: { line: 281, column: 1 } },
                  line: 278
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 366, column: 23 },
                    end: { line: 366, column: 24 }
                  },
                  loc: { start: { line: 366, column: 37 }, end: { line: 381, column: 1 } },
                  line: 366
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 451, column: 27 },
                    end: { line: 451, column: 28 }
                  },
                  loc: { start: { line: 451, column: 42 }, end: { line: 459, column: 1 } },
                  line: 451
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 523, column: 27 },
                    end: { line: 523, column: 28 }
                  },
                  loc: { start: { line: 523, column: 58 }, end: { line: 531, column: 1 } },
                  line: 523
                },
                '10': {
                  name: '(anonymous_10)',
                  decl: {
                    start: { line: 558, column: 30 },
                    end: { line: 558, column: 31 }
                  },
                  loc: { start: { line: 558, column: 48 }, end: { line: 569, column: 1 } },
                  line: 558
                },
                '11': {
                  name: '(anonymous_11)',
                  decl: {
                    start: { line: 636, column: 31 },
                    end: { line: 636, column: 32 }
                  },
                  loc: { start: { line: 636, column: 52 }, end: { line: 649, column: 1 } },
                  line: 636
                },
                '12': {
                  name: '(anonymous_12)',
                  decl: {
                    start: { line: 688, column: 32 },
                    end: { line: 688, column: 33 }
                  },
                  loc: { start: { line: 688, column: 56 }, end: { line: 701, column: 1 } },
                  line: 688
                },
                '13': {
                  name: '(anonymous_13)',
                  decl: {
                    start: { line: 761, column: 32 },
                    end: { line: 761, column: 33 }
                  },
                  loc: { start: { line: 761, column: 60 }, end: { line: 774, column: 1 } },
                  line: 761
                },
                '14': {
                  name: '(anonymous_14)',
                  decl: {
                    start: { line: 810, column: 25 },
                    end: { line: 810, column: 26 }
                  },
                  loc: { start: { line: 810, column: 41 }, end: { line: 819, column: 1 } },
                  line: 810
                },
                '15': {
                  name: '(anonymous_15)',
                  decl: {
                    start: { line: 828, column: 43 },
                    end: { line: 828, column: 44 }
                  },
                  loc: { start: { line: 828, column: 60 }, end: { line: 850, column: 1 } },
                  line: 828
                },
                '16': {
                  name: '(anonymous_16)',
                  decl: {
                    start: { line: 857, column: 42 },
                    end: { line: 857, column: 43 }
                  },
                  loc: { start: { line: 857, column: 53 }, end: { line: 926, column: 1 } },
                  line: 857
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 67, column: 2 }, end: { line: 69, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 67, column: 2 }, end: { line: 69, column: 3 } },
                    { start: { line: 67, column: 2 }, end: { line: 69, column: 3 } }
                  ],
                  line: 67
                },
                '1': {
                  loc: { start: { line: 79, column: 4 }, end: { line: 81, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 79, column: 4 }, end: { line: 81, column: 5 } },
                    { start: { line: 79, column: 4 }, end: { line: 81, column: 5 } }
                  ],
                  line: 79
                },
                '2': {
                  loc: { start: { line: 89, column: 6 }, end: { line: 91, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 89, column: 6 }, end: { line: 91, column: 7 } },
                    { start: { line: 89, column: 6 }, end: { line: 91, column: 7 } }
                  ],
                  line: 89
                },
                '3': {
                  loc: { start: { line: 101, column: 6 }, end: { line: 103, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 101, column: 6 }, end: { line: 103, column: 7 } },
                    { start: { line: 101, column: 6 }, end: { line: 103, column: 7 } }
                  ],
                  line: 101
                },
                '4': {
                  loc: { start: { line: 254, column: 2 }, end: { line: 256, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 254, column: 2 }, end: { line: 256, column: 3 } },
                    { start: { line: 254, column: 2 }, end: { line: 256, column: 3 } }
                  ],
                  line: 254
                },
                '5': {
                  loc: { start: { line: 260, column: 2 }, end: { line: 265, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 260, column: 2 }, end: { line: 265, column: 3 } },
                    { start: { line: 260, column: 2 }, end: { line: 265, column: 3 } }
                  ],
                  line: 260
                },
                '6': {
                  loc: { start: { line: 369, column: 2 }, end: { line: 371, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 369, column: 2 }, end: { line: 371, column: 3 } },
                    { start: { line: 369, column: 2 }, end: { line: 371, column: 3 } }
                  ],
                  line: 369
                },
                '7': {
                  loc: { start: { line: 452, column: 2 }, end: { line: 458, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 452, column: 2 }, end: { line: 458, column: 3 } },
                    { start: { line: 452, column: 2 }, end: { line: 458, column: 3 } }
                  ],
                  line: 452
                },
                '8': {
                  loc: { start: { line: 452, column: 6 }, end: { line: 452, column: 59 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 452, column: 6 }, end: { line: 452, column: 30 } },
                    { start: { line: 452, column: 34 }, end: { line: 452, column: 59 } }
                  ],
                  line: 452
                },
                '9': {
                  loc: { start: { line: 523, column: 43 }, end: { line: 523, column: 56 } },
                  type: 'default-arg',
                  locations: [
                    { start: { line: 523, column: 51 }, end: { line: 523, column: 56 } }
                  ],
                  line: 523
                },
                '10': {
                  loc: { start: { line: 814, column: 2 }, end: { line: 816, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 814, column: 2 }, end: { line: 816, column: 3 } },
                    { start: { line: 814, column: 2 }, end: { line: 816, column: 3 } }
                  ],
                  line: 814
                },
                '11': {
                  loc: { start: { line: 833, column: 4 }, end: { line: 833, column: 67 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 833, column: 4 }, end: { line: 833, column: 13 } },
                    { start: { line: 833, column: 17 }, end: { line: 833, column: 48 } },
                    { start: { line: 833, column: 52 }, end: { line: 833, column: 67 } }
                  ],
                  line: 833
                },
                '12': {
                  loc: { start: { line: 835, column: 2 }, end: { line: 847, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 835, column: 2 }, end: { line: 847, column: 3 } },
                    { start: { line: 835, column: 2 }, end: { line: 847, column: 3 } }
                  ],
                  line: 835
                },
                '13': {
                  loc: { start: { line: 836, column: 4 }, end: { line: 844, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 836, column: 4 }, end: { line: 844, column: 5 } },
                    { start: { line: 836, column: 4 }, end: { line: 844, column: 5 } }
                  ],
                  line: 836
                },
                '14': {
                  loc: { start: { line: 837, column: 6 }, end: { line: 839, column: 44 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 837, column: 6 }, end: { line: 837, column: 13 } },
                    { start: { line: 838, column: 7 }, end: { line: 838, column: 44 } },
                    { start: { line: 839, column: 8 }, end: { line: 839, column: 43 } }
                  ],
                  line: 837
                },
                '15': {
                  loc: { start: { line: 858, column: 2 }, end: { line: 860, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 858, column: 2 }, end: { line: 860, column: 3 } },
                    { start: { line: 858, column: 2 }, end: { line: 860, column: 3 } }
                  ],
                  line: 858
                },
                '16': {
                  loc: { start: { line: 862, column: 2 }, end: { line: 922, column: 3 } },
                  type: 'switch',
                  locations: [
                    { start: { line: 863, column: 4 }, end: { line: 863, column: 25 } },
                    { start: { line: 864, column: 4 }, end: { line: 867, column: 12 } },
                    { start: { line: 868, column: 4 }, end: { line: 871, column: 12 } },
                    { start: { line: 872, column: 4 }, end: { line: 875, column: 12 } },
                    { start: { line: 876, column: 4 }, end: { line: 879, column: 12 } },
                    { start: { line: 880, column: 4 }, end: { line: 888, column: 12 } },
                    { start: { line: 889, column: 4 }, end: { line: 892, column: 12 } },
                    { start: { line: 893, column: 4 }, end: { line: 896, column: 12 } },
                    { start: { line: 897, column: 4 }, end: { line: 906, column: 12 } },
                    { start: { line: 907, column: 4 }, end: { line: 916, column: 12 } },
                    { start: { line: 917, column: 4 }, end: { line: 921, column: 12 } }
                  ],
                  line: 862
                },
                '17': {
                  loc: { start: { line: 898, column: 6 }, end: { line: 905, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 898, column: 6 }, end: { line: 905, column: 7 } },
                    { start: { line: 898, column: 6 }, end: { line: 905, column: 7 } }
                  ],
                  line: 898
                },
                '18': {
                  loc: { start: { line: 908, column: 6 }, end: { line: 915, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 908, column: 6 }, end: { line: 915, column: 7 } },
                    { start: { line: 908, column: 6 }, end: { line: 915, column: 7 } }
                  ],
                  line: 908
                },
                '19': {
                  loc: { start: { line: 923, column: 2 }, end: { line: 925, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 923, column: 2 }, end: { line: 925, column: 3 } },
                    { start: { line: 923, column: 2 }, end: { line: 925, column: 3 } }
                  ],
                  line: 923
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0,
                '118': 0,
                '119': 0,
                '120': 0,
                '121': 0,
                '122': 0,
                '123': 0,
                '124': 0,
                '125': 0,
                '126': 0,
                '127': 0,
                '128': 0,
                '129': 0,
                '130': 0,
                '131': 0,
                '132': 0,
                '133': 0,
                '134': 0,
                '135': 0,
                '136': 0,
                '137': 0,
                '138': 0,
                '139': 0,
                '140': 0,
                '141': 0,
                '142': 0,
                '143': 0,
                '144': 0,
                '145': 0,
                '146': 0,
                '147': 0,
                '148': 0,
                '149': 0,
                '150': 0,
                '151': 0,
                '152': 0,
                '153': 0,
                '154': 0,
                '155': 0,
                '156': 0,
                '157': 0,
                '158': 0,
                '159': 0,
                '160': 0,
                '161': 0,
                '162': 0,
                '163': 0,
                '164': 0,
                '165': 0,
                '166': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0],
                '10': [0, 0],
                '11': [0, 0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0, 0],
                '15': [0, 0],
                '16': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: 'bc5e058e1a0a98ebae1d485e68b7329952feadbd'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.join');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          var constants = _interopRequireWildcard(_dereq_('../core/constants'));
          _dereq_('./p5.Texture');
          function _getRequireWildcardCache() {
            if (typeof WeakMap !== 'function') return null;
            var cache = new WeakMap();
            _getRequireWildcardCache = function _getRequireWildcardCache() {
              return cache;
            };
            return cache;
          }
          function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
              return obj;
            }
            if (obj === null || (_typeof(obj) !== 'object' && typeof obj !== 'function')) {
              return { default: obj };
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
              return cache.get(obj);
            }
            var newObj = {};
            var hasPropertyDescriptor =
              Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
              if (Object.prototype.hasOwnProperty.call(obj, key)) {
                var desc = hasPropertyDescriptor
                  ? Object.getOwnPropertyDescriptor(obj, key)
                  : null;
                if (desc && (desc.get || desc.set)) {
                  Object.defineProperty(newObj, key, desc);
                } else {
                  newObj[key] = obj[key];
                }
              }
            }
            newObj.default = obj;
            if (cache) {
              cache.set(obj, newObj);
            }
            return newObj;
          }
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_165wr8g2ia.s[0]++;

          /**
           * Loads a custom shader from the provided vertex and fragment
           * shader paths. The shader files are loaded asynchronously in the
           * background, so this method should be used in <a href="#/p5/preload">preload()</a>.
           *
           * For now, there are three main types of shaders. p5 will automatically
           * supply appropriate vertices, normals, colors, and lighting attributes
           * if the parameters defined in the shader match the names.
           *
           * @method loadShader
           * @param {String} vertFilename path to file containing vertex shader
           * source code
           * @param {String} fragFilename path to file containing fragment shader
           * source code
           * @param {function} [callback] callback to be executed after loadShader
           * completes. On success, the Shader object is passed as the first argument.
           * @param {function} [errorCallback] callback to be executed when an error
           * occurs inside loadShader. On error, the error is passed as the first
           * argument.
           * @return {p5.Shader} a shader object created from the provided
           * vertex and fragment shader files.
           *
           * @example
           * <div modernizr='webgl'>
           * <code>
           * let mandel;
           * function preload() {
           *   // load the shader definitions from files
           *   mandel = loadShader('assets/shader.vert', 'assets/shader.frag');
           * }
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   // use the shader
           *   shader(mandel);
           *   noStroke();
           *   mandel.setUniform('p', [-0.74364388703, 0.13182590421]);
           * }
           *
           * function draw() {
           *   mandel.setUniform('r', 1.5 * exp(-6.5 * (1 + sin(millis() / 2000))));
           *   quad(-1, -1, 1, -1, 1, 1, -1, 1);
           * }
           * </code>
           * </div>
           *
           * @alt
           * zooming Mandelbrot set. a colorful, infinitely detailed fractal.
           */
          _main.default.prototype.loadShader = function(
            vertFilename,
            fragFilename,
            callback,
            errorCallback
          ) {
            cov_165wr8g2ia.f[0]++;
            cov_165wr8g2ia.s[1]++;
            _main.default._validateParameters('loadShader', arguments);
            cov_165wr8g2ia.s[2]++;
            if (!errorCallback) {
              cov_165wr8g2ia.b[0][0]++;
              cov_165wr8g2ia.s[3]++;
              errorCallback = console.error;
            } else {
              cov_165wr8g2ia.b[0][1]++;
            }

            var loadedShader = (cov_165wr8g2ia.s[4]++, new _main.default.Shader());

            var self = (cov_165wr8g2ia.s[5]++, this);
            var loadedFrag = (cov_165wr8g2ia.s[6]++, false);
            var loadedVert = (cov_165wr8g2ia.s[7]++, false);
            cov_165wr8g2ia.s[8]++;

            var onLoad = function onLoad() {
              cov_165wr8g2ia.f[1]++;
              cov_165wr8g2ia.s[9]++;
              self._decrementPreload();
              cov_165wr8g2ia.s[10]++;
              if (callback) {
                cov_165wr8g2ia.b[1][0]++;
                cov_165wr8g2ia.s[11]++;
                callback(loadedShader);
              } else {
                cov_165wr8g2ia.b[1][1]++;
              }
            };
            cov_165wr8g2ia.s[12]++;

            this.loadStrings(
              vertFilename,
              function(result) {
                cov_165wr8g2ia.f[2]++;
                cov_165wr8g2ia.s[13]++;
                loadedShader._vertSrc = result.join('\n');
                cov_165wr8g2ia.s[14]++;
                loadedVert = true;
                cov_165wr8g2ia.s[15]++;
                if (loadedFrag) {
                  cov_165wr8g2ia.b[2][0]++;
                  cov_165wr8g2ia.s[16]++;
                  onLoad();
                } else {
                  cov_165wr8g2ia.b[2][1]++;
                }
              },
              errorCallback
            );
            cov_165wr8g2ia.s[17]++;

            this.loadStrings(
              fragFilename,
              function(result) {
                cov_165wr8g2ia.f[3]++;
                cov_165wr8g2ia.s[18]++;
                loadedShader._fragSrc = result.join('\n');
                cov_165wr8g2ia.s[19]++;
                loadedFrag = true;
                cov_165wr8g2ia.s[20]++;
                if (loadedVert) {
                  cov_165wr8g2ia.b[3][0]++;
                  cov_165wr8g2ia.s[21]++;
                  onLoad();
                } else {
                  cov_165wr8g2ia.b[3][1]++;
                }
              },
              errorCallback
            );
            cov_165wr8g2ia.s[22]++;

            return loadedShader;
          };

          /**
           * @method createShader
           * @param {String} vertSrc source code for the vertex shader
           * @param {String} fragSrc source code for the fragment shader
           * @returns {p5.Shader} a shader object created from the provided
           * vertex and fragment shaders.
           *
           * @example
           * <div modernizr='webgl'>
           * <code>
           * // the 'varying's are shared between both vertex & fragment shaders
           * let varying = 'precision highp float; varying vec2 vPos;';
           *
           * // the vertex shader is called for each vertex
           * let vs =
           *   varying +
           *   'attribute vec3 aPosition;' +
           *   'void main() { vPos = (gl_Position = vec4(aPosition,1.0)).xy; }';
           *
           * // the fragment shader is called for each pixel
           * let fs =
           *   varying +
           *   'uniform vec2 p;' +
           *   'uniform float r;' +
           *   'const int I = 500;' +
           *   'void main() {' +
           *   '  vec2 c = p + vPos * r, z = c;' +
           *   '  float n = 0.0;' +
           *   '  for (int i = I; i > 0; i --) {' +
           *   '    if(z.x*z.x+z.y*z.y > 4.0) {' +
           *   '      n = float(i)/float(I);' +
           *   '      break;' +
           *   '    }' +
           *   '    z = vec2(z.x*z.x-z.y*z.y, 2.0*z.x*z.y) + c;' +
           *   '  }' +
           *   '  gl_FragColor = vec4(0.5-cos(n*17.0)/2.0,0.5-cos(n*13.0)/2.0,0.5-cos(n*23.0)/2.0,1.0);' +
           *   '}';
           *
           * let mandel;
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *
           *   // create and initialize the shader
           *   mandel = createShader(vs, fs);
           *   shader(mandel);
           *   noStroke();
           *
           *   // 'p' is the center point of the Mandelbrot image
           *   mandel.setUniform('p', [-0.74364388703, 0.13182590421]);
           * }
           *
           * function draw() {
           *   // 'r' is the size of the image in Mandelbrot-space
           *   mandel.setUniform('r', 1.5 * exp(-6.5 * (1 + sin(millis() / 2000))));
           *   quad(-1, -1, 1, -1, 1, 1, -1, 1);
           * }
           * </code>
           * </div>
           *
           * @alt
           * zooming Mandelbrot set. a colorful, infinitely detailed fractal.
           */ cov_165wr8g2ia.s[23]++;
          _main.default.prototype.createShader = function(vertSrc, fragSrc) {
            cov_165wr8g2ia.f[4]++;
            cov_165wr8g2ia.s[24]++;
            this._assert3d('createShader');
            cov_165wr8g2ia.s[25]++;
            _main.default._validateParameters('createShader', arguments);
            cov_165wr8g2ia.s[26]++;
            return new _main.default.Shader(this._renderer, vertSrc, fragSrc);
          };

          /**
           * The <a href="#/p5/shader">shader()</a> function lets the user provide a custom shader
           * to fill in shapes in WEBGL mode. Users can create their
           * own shaders by loading vertex and fragment shaders with
           * <a href="#/p5/loadShader">loadShader()</a>.
           *
           * @method shader
           * @chainable
           * @param {p5.Shader} [s] the desired <a href="#/p5.Shader">p5.Shader</a> to use for rendering
           * shapes.
           *
           * @example
           * <div modernizr='webgl'>
           * <code>
           * // Click within the image to toggle
           * // the shader used by the quad shape
           * // Note: for an alternative approach to the same example,
           * // involving changing uniforms please refer to:
           * // https://p5js.org/reference/#/p5.Shader/setUniform
           *
           * let redGreen;
           * let orangeBlue;
           * let showRedGreen = false;
           *
           * function preload() {
           *   // note that we are using two instances
           *   // of the same vertex and fragment shaders
           *   redGreen = loadShader('assets/shader.vert', 'assets/shader-gradient.frag');
           *   orangeBlue = loadShader('assets/shader.vert', 'assets/shader-gradient.frag');
           * }
           *
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *
           *   // initialize the colors for redGreen shader
           *   shader(redGreen);
           *   redGreen.setUniform('colorCenter', [1.0, 0.0, 0.0]);
           *   redGreen.setUniform('colorBackground', [0.0, 1.0, 0.0]);
           *
           *   // initialize the colors for orangeBlue shader
           *   shader(orangeBlue);
           *   orangeBlue.setUniform('colorCenter', [1.0, 0.5, 0.0]);
           *   orangeBlue.setUniform('colorBackground', [0.226, 0.0, 0.615]);
           *
           *   noStroke();
           * }
           *
           * function draw() {
           *   // update the offset values for each shader,
           *   // moving orangeBlue in vertical and redGreen
           *   // in horizontal direction
           *   orangeBlue.setUniform('offset', [0, sin(millis() / 2000) + 1]);
           *   redGreen.setUniform('offset', [sin(millis() / 2000), 1]);
           *
           *   if (showRedGreen === true) {
           *     shader(redGreen);
           *   } else {
           *     shader(orangeBlue);
           *   }
           *   quad(-1, -1, 1, -1, 1, 1, -1, 1);
           * }
           *
           * function mouseClicked() {
           *   showRedGreen = !showRedGreen;
           * }
           * </code>
           * </div>
           *
           * @alt
           * canvas toggles between a circular gradient of orange and blue vertically. and a circular gradient of red and green moving horizontally when mouse is clicked/pressed.
           */ cov_165wr8g2ia.s[27]++;
          _main.default.prototype.shader = function(s) {
            cov_165wr8g2ia.f[5]++;
            cov_165wr8g2ia.s[28]++;
            this._assert3d('shader');
            cov_165wr8g2ia.s[29]++;
            _main.default._validateParameters('shader', arguments);
            cov_165wr8g2ia.s[30]++;

            if (s._renderer === undefined) {
              cov_165wr8g2ia.b[4][0]++;
              cov_165wr8g2ia.s[31]++;
              s._renderer = this._renderer;
            } else {
              cov_165wr8g2ia.b[4][1]++;
            }
            cov_165wr8g2ia.s[32]++;

            s.init();
            cov_165wr8g2ia.s[33]++;

            if (s.isStrokeShader()) {
              cov_165wr8g2ia.b[5][0]++;
              cov_165wr8g2ia.s[34]++;
              this._renderer.userStrokeShader = s;
            } else {
              cov_165wr8g2ia.b[5][1]++;
              cov_165wr8g2ia.s[35]++;
              this._renderer.userFillShader = s;
              cov_165wr8g2ia.s[36]++;
              this._renderer._useNormalMaterial = false;
            }
            cov_165wr8g2ia.s[37]++;

            return this;
          };

          /**
           * This function restores the default shaders in WEBGL mode. Code that runs
           * after resetShader() will not be affected by previously defined
           * shaders. Should be run after <a href="#/p5/shader">shader()</a>.
           *
           * @method resetShader
           * @chainable
           */ cov_165wr8g2ia.s[38]++;
          _main.default.prototype.resetShader = function() {
            cov_165wr8g2ia.f[6]++;
            cov_165wr8g2ia.s[39]++;
            this._renderer.userFillShader = this._renderer.userStrokeShader = null;
            cov_165wr8g2ia.s[40]++;
            return this;
          };

          /**
           * Texture for geometry.  You can view other possible materials in this
           * <a href="https://p5js.org/examples/3d-materials.html">example</a>.
           * @method texture
           * @param {p5.Image|p5.MediaElement|p5.Graphics} tex 2-dimensional graphics
           *                    to render as texture
           * @chainable
           * @example
           * <div>
           * <code>
           * let img;
           * function preload() {
           *   img = loadImage('assets/laDefense.jpg');
           * }
           *
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           *
           * function draw() {
           *   background(0);
           *   rotateZ(frameCount * 0.01);
           *   rotateX(frameCount * 0.01);
           *   rotateY(frameCount * 0.01);
           *   //pass image as texture
           *   texture(img);
           *   box(width / 2);
           * }
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * let pg;
           *
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   pg = createGraphics(200, 200);
           *   pg.textSize(75);
           * }
           *
           * function draw() {
           *   background(0);
           *   pg.background(255);
           *   pg.text('hello!', 0, 100);
           *   //pass image as texture
           *   texture(pg);
           *   rotateX(0.5);
           *   noStroke();
           *   plane(50);
           * }
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * let vid;
           * function preload() {
           *   vid = createVideo('assets/fingers.mov');
           *   vid.hide();
           * }
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           *
           * function draw() {
           *   background(0);
           *   //pass video frame as texture
           *   texture(vid);
           *   rect(-40, -40, 80, 80);
           * }
           *
           * function mousePressed() {
           *   vid.loop();
           * }
           * </code>
           * </div>
           *
           * @alt
           * Rotating view of many images umbrella and grid roof on a 3d plane
           * black canvas
           * black canvas
           */ cov_165wr8g2ia.s[41]++;
          _main.default.prototype.texture = function(tex) {
            cov_165wr8g2ia.f[7]++;
            cov_165wr8g2ia.s[42]++;
            this._assert3d('texture');
            cov_165wr8g2ia.s[43]++;
            _main.default._validateParameters('texture', arguments);
            cov_165wr8g2ia.s[44]++;
            if (tex.gifProperties) {
              cov_165wr8g2ia.b[6][0]++;
              cov_165wr8g2ia.s[45]++;
              tex._animateGif(this);
            } else {
              cov_165wr8g2ia.b[6][1]++;
            }
            cov_165wr8g2ia.s[46]++;

            this._renderer.drawMode = constants.TEXTURE;
            cov_165wr8g2ia.s[47]++;
            this._renderer._useSpecularMaterial = false;
            cov_165wr8g2ia.s[48]++;
            this._renderer._useEmissiveMaterial = false;
            cov_165wr8g2ia.s[49]++;
            this._renderer._useNormalMaterial = false;
            cov_165wr8g2ia.s[50]++;
            this._renderer._tex = tex;
            cov_165wr8g2ia.s[51]++;
            this._renderer._setProperty('_doFill', true);
            cov_165wr8g2ia.s[52]++;

            return this;
          };

          /**
           * Sets the coordinate space for texture mapping. The default mode is IMAGE
           * which refers to the actual coordinates of the image.
           * NORMAL refers to a normalized space of values ranging from 0 to 1.
           * This function only works in WEBGL mode.
           *
           * With IMAGE, if an image is 100 x 200 pixels, mapping the image onto the entire
           * size of a quad would require the points (0,0) (100, 0) (100,200) (0,200).
           * The same mapping in NORMAL is (0,0) (1,0) (1,1) (0,1).
           * @method  textureMode
           * @param {Constant} mode either IMAGE or NORMAL
           * @example
           * <div>
           * <code>
           * let img;
           *
           * function preload() {
           *   img = loadImage('assets/laDefense.jpg');
           * }
           *
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           *
           * function draw() {
           *   texture(img);
           *   textureMode(NORMAL);
           *   beginShape();
           *   vertex(-50, -50, 0, 0);
           *   vertex(50, -50, 1, 0);
           *   vertex(50, 50, 1, 1);
           *   vertex(-50, 50, 0, 1);
           *   endShape();
           * }
           * </code>
           * </div>
           *
           * @alt
           * the underside of a white umbrella and gridded ceiling above
           *
           * <div>
           * <code>
           * let img;
           *
           * function preload() {
           *   img = loadImage('assets/laDefense.jpg');
           * }
           *
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           *
           * function draw() {
           *   texture(img);
           *   textureMode(NORMAL);
           *   beginShape();
           *   vertex(-50, -50, 0, 0);
           *   vertex(50, -50, img.width, 0);
           *   vertex(50, 50, img.width, img.height);
           *   vertex(-50, 50, 0, img.height);
           *   endShape();
           * }
           * </code>
           * </div>
           *
           * @alt
           * the underside of a white umbrella and gridded ceiling above
           */ cov_165wr8g2ia.s[53]++;
          _main.default.prototype.textureMode = function(mode) {
            cov_165wr8g2ia.f[8]++;
            cov_165wr8g2ia.s[54]++;
            if (
              (cov_165wr8g2ia.b[8][0]++, mode !== constants.IMAGE) &&
              (cov_165wr8g2ia.b[8][1]++, mode !== constants.NORMAL)
            ) {
              cov_165wr8g2ia.b[7][0]++;
              cov_165wr8g2ia.s[55]++;
              console.warn(
                'You tried to set '.concat(
                  mode,
                  ' textureMode only supports IMAGE & NORMAL '
                )
              );
            } else {
              cov_165wr8g2ia.b[7][1]++;
              cov_165wr8g2ia.s[56]++;
              this._renderer.textureMode = mode;
            }
          };

          /**
           * Sets the global texture wrapping mode. This controls how textures behave
           * when their uv's go outside of the 0 - 1 range. There are three options:
           * CLAMP, REPEAT, and MIRROR.
           *
           * CLAMP causes the pixels at the edge of the texture to extend to the bounds
           * REPEAT causes the texture to tile repeatedly until reaching the bounds
           * MIRROR works similarly to REPEAT but it flips the texture with every new tile
           *
           * REPEAT & MIRROR are only available if the texture
           * is a power of two size (128, 256, 512, 1024, etc.).
           *
           * This method will affect all textures in your sketch until a subsequent
           * textureWrap call is made.
           *
           * If only one argument is provided, it will be applied to both the
           * horizontal and vertical axes.
           * @method textureWrap
           * @param {Constant} wrapX either CLAMP, REPEAT, or MIRROR
           * @param {Constant} [wrapY] either CLAMP, REPEAT, or MIRROR
           * @example
           * <div>
           * <code>
           * let img;
           * function preload() {
           *   img = loadImage('assets/rockies128.jpg');
           * }
           *
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   textureWrap(MIRROR);
           * }
           *
           * function draw() {
           *   background(0);
           *
           *   let dX = mouseX;
           *   let dY = mouseY;
           *
           *   let u = lerp(1.0, 2.0, dX);
           *   let v = lerp(1.0, 2.0, dY);
           *
           *   scale(width / 2);
           *
           *   texture(img);
           *
           *   beginShape(TRIANGLES);
           *   vertex(-1, -1, 0, 0, 0);
           *   vertex(1, -1, 0, u, 0);
           *   vertex(1, 1, 0, u, v);
           *
           *   vertex(1, 1, 0, u, v);
           *   vertex(-1, 1, 0, 0, v);
           *   vertex(-1, -1, 0, 0, 0);
           *   endShape();
           * }
           * </code>
           * </div>
           *
           * @alt
           * an image of the rocky mountains repeated in mirrored tiles
           */ cov_165wr8g2ia.s[57]++;
          _main.default.prototype.textureWrap = function(wrapX) {
            var wrapY =
              arguments.length > 1 && arguments[1] !== undefined
                ? arguments[1]
                : (cov_165wr8g2ia.b[9][0]++, wrapX);
            cov_165wr8g2ia.f[9]++;
            cov_165wr8g2ia.s[58]++;
            this._renderer.textureWrapX = wrapX;
            cov_165wr8g2ia.s[59]++;
            this._renderer.textureWrapY = wrapY;

            var textures = (cov_165wr8g2ia.s[60]++, this._renderer.textures);
            cov_165wr8g2ia.s[61]++;
            for (var i = (cov_165wr8g2ia.s[62]++, 0); i < textures.length; i++) {
              cov_165wr8g2ia.s[63]++;
              textures[i].setWrapMode(wrapX, wrapY);
            }
          };

          /**
           * Normal material for geometry is a material that is not affected by light.
           * It is not reflective and is a placeholder material often used for debugging.
           * Surfaces facing the X-axis, become red, those facing the Y-axis, become green and those facing the Z-axis, become blue.
           * You can view all possible materials in this
           * <a href="https://p5js.org/examples/3d-materials.html">example</a>.
           * @method normalMaterial
           * @chainable
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           *
           * function draw() {
           *   background(200);
           *   normalMaterial();
           *   sphere(40);
           * }
           * </code>
           * </div>
           * @alt
           * Red, green and blue gradient.
           */ cov_165wr8g2ia.s[64]++;
          _main.default.prototype.normalMaterial = function() {
            cov_165wr8g2ia.f[10]++;
            cov_165wr8g2ia.s[65]++;
            this._assert3d('normalMaterial');
            cov_165wr8g2ia.s[66]++;
            for (
              var _len = arguments.length, args = new Array(_len), _key = 0;
              _key < _len;
              _key++
            ) {
              args[_key] = arguments[_key];
            }
            _main.default._validateParameters('normalMaterial', args);
            cov_165wr8g2ia.s[67]++;
            this._renderer.drawMode = constants.FILL;
            cov_165wr8g2ia.s[68]++;
            this._renderer._useSpecularMaterial = false;
            cov_165wr8g2ia.s[69]++;
            this._renderer._useEmissiveMaterial = false;
            cov_165wr8g2ia.s[70]++;
            this._renderer._useNormalMaterial = true;
            cov_165wr8g2ia.s[71]++;
            this._renderer.curFillColor = [1, 1, 1, 1];
            cov_165wr8g2ia.s[72]++;
            this._renderer._setProperty('_doFill', true);
            cov_165wr8g2ia.s[73]++;
            this.noStroke();
            cov_165wr8g2ia.s[74]++;
            return this;
          };

          /**
           * Ambient material for geometry with a given color. Ambient material defines the color the object reflects under any lighting.
           * For example, if the ambient material of an object is pure red, but the ambient lighting only contains green, the object will not reflect any light.
           * Here's an <a href="https://p5js.org/examples/3d-materials.html">example containing all possible materials</a>.
           * @method  ambientMaterial
           * @param  {Number} v1  gray value, red or hue value
           *                         (depending on the current color mode),
           * @param  {Number} [v2] green or saturation value
           * @param  {Number} [v3] blue or brightness value
           * @chainable
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           * function draw() {
           *   background(0);
           *   noStroke();
           *   ambientLight(200);
           *   ambientMaterial(70, 130, 230);
           *   sphere(40);
           * }
           * </code>
           * </div>
           * <div>
           * <code>
           * // ambientLight is both red and blue (magenta),
           * // so object only reflects it's red and blue components
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           * function draw() {
           *   background(70);
           *   ambientLight(100); // white light
           *   ambientMaterial(255, 0, 255); // pink material
           *   box(30);
           * }
           * </code>
           * </div>
           * <div>
           * <code>
           * // ambientLight is green. Since object does not contain
           * // green, it does not reflect any light
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           * function draw() {
           *   background(70);
           *   ambientLight(0, 255, 0); // green light
           *   ambientMaterial(255, 0, 255); // pink material
           *   box(30);
           * }
           * </code>
           * </div>
           * @alt
           * radiating light source from top right of canvas
           * box reflecting only red and blue light
           * box reflecting no light
           */
          /**
           * @method  ambientMaterial
           * @param  {Number[]|String|p5.Color} color  color, color Array, or CSS color string
           * @chainable
           */ cov_165wr8g2ia.s[75]++;
          _main.default.prototype.ambientMaterial = function(v1, v2, v3) {
            cov_165wr8g2ia.f[11]++;
            cov_165wr8g2ia.s[76]++;
            this._assert3d('ambientMaterial');
            cov_165wr8g2ia.s[77]++;
            _main.default._validateParameters('ambientMaterial', arguments);

            var color = (cov_165wr8g2ia.s[78]++,
            _main.default.prototype.color.apply(this, arguments));
            cov_165wr8g2ia.s[79]++;
            this._renderer.curFillColor = color._array;
            cov_165wr8g2ia.s[80]++;
            this._renderer._useSpecularMaterial = false;
            cov_165wr8g2ia.s[81]++;
            this._renderer._useEmissiveMaterial = false;
            cov_165wr8g2ia.s[82]++;
            this._renderer._useNormalMaterial = false;
            cov_165wr8g2ia.s[83]++;
            this._renderer._enableLighting = true;
            cov_165wr8g2ia.s[84]++;
            this._renderer._tex = null;
            cov_165wr8g2ia.s[85]++;

            return this;
          };

          /**
           * Sets the emissive color of the material used for geometry drawn to
           * the screen. This is a misnomer in the sense that the material does not
           * actually emit light that effects surrounding polygons. Instead,
           * it gives the appearance that the object is glowing. An emissive material
           * will display at full strength even if there is no light for it to reflect.
           * @method emissiveMaterial
           * @param  {Number} v1  gray value, red or hue value
           *                         (depending on the current color mode),
           * @param  {Number} [v2] green or saturation value
           * @param  {Number} [v3] blue or brightness value
           * @param  {Number} [a]  opacity
           * @chainable
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           * function draw() {
           *   background(0);
           *   noStroke();
           *   ambientLight(0);
           *   emissiveMaterial(130, 230, 0);
           *   sphere(40);
           * }
           * </code>
           * </div>
           *
           * @alt
           * radiating light source from top right of canvas
           */
          /**
           * @method  emissiveMaterial
           * @param  {Number[]|String|p5.Color} color  color, color Array, or CSS color string
           * @chainable
           */ cov_165wr8g2ia.s[86]++;
          _main.default.prototype.emissiveMaterial = function(v1, v2, v3, a) {
            cov_165wr8g2ia.f[12]++;
            cov_165wr8g2ia.s[87]++;
            this._assert3d('emissiveMaterial');
            cov_165wr8g2ia.s[88]++;
            _main.default._validateParameters('emissiveMaterial', arguments);

            var color = (cov_165wr8g2ia.s[89]++,
            _main.default.prototype.color.apply(this, arguments));
            cov_165wr8g2ia.s[90]++;
            this._renderer.curFillColor = color._array;
            cov_165wr8g2ia.s[91]++;
            this._renderer._useSpecularMaterial = false;
            cov_165wr8g2ia.s[92]++;
            this._renderer._useEmissiveMaterial = true;
            cov_165wr8g2ia.s[93]++;
            this._renderer._useNormalMaterial = false;
            cov_165wr8g2ia.s[94]++;
            this._renderer._enableLighting = true;
            cov_165wr8g2ia.s[95]++;
            this._renderer._tex = null;
            cov_165wr8g2ia.s[96]++;

            return this;
          };

          /**
           * Specular material for geometry with a given color. Specular material is a shiny reflective material.
           * Like ambient material it also defines the color the object reflects under ambient lighting.
           * For example, if the specular material of an object is pure red, but the ambient lighting only contains green, the object will not reflect any light.
           * For all other types of light like point and directional light, a specular material will reflect the color of the light source to the viewer.
           * Here's an <a href="https://p5js.org/examples/3d-materials.html">example containing all possible materials</a>.
           *
           * @method specularMaterial
           * @param  {Number} gray number specifying value between white and black.
           * @param  {Number} [alpha] alpha value relative to current color range
           *                                 (default is 0-255)
           * @chainable
           *
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   noStroke();
           * }
           *
           * function draw() {
           *   background(0);
           *
           *   ambientLight(60);
           *
           *   // add point light to showcase specular material
           *   let locX = mouseX - width / 2;
           *   let locY = mouseY - height / 2;
           *   pointLight(255, 255, 255, locX, locY, 50);
           *
           *   specularMaterial(250);
           *   shininess(50);
           *   torus(30, 10, 64, 64);
           * }
           * </code>
           * </div>
           * @alt
           * torus with specular material
           */

          /**
           * @method specularMaterial
           * @param  {Number}        v1      red or hue value relative to
           *                                 the current color range
           * @param  {Number}        v2      green or saturation value
           *                                 relative to the current color range
           * @param  {Number}        v3      blue or brightness value
           *                                 relative to the current color range
           * @param  {Number}        [alpha]
           * @chainable
           */

          /**
           * @method specularMaterial
           * @param  {Number[]|String|p5.Color} color color Array, or CSS color string
           * @chainable
           */ cov_165wr8g2ia.s[97]++;
          _main.default.prototype.specularMaterial = function(v1, v2, v3, alpha) {
            cov_165wr8g2ia.f[13]++;
            cov_165wr8g2ia.s[98]++;
            this._assert3d('specularMaterial');
            cov_165wr8g2ia.s[99]++;
            _main.default._validateParameters('specularMaterial', arguments);

            var color = (cov_165wr8g2ia.s[100]++,
            _main.default.prototype.color.apply(this, arguments));
            cov_165wr8g2ia.s[101]++;
            this._renderer.curFillColor = color._array;
            cov_165wr8g2ia.s[102]++;
            this._renderer._useSpecularMaterial = true;
            cov_165wr8g2ia.s[103]++;
            this._renderer._useEmissiveMaterial = false;
            cov_165wr8g2ia.s[104]++;
            this._renderer._useNormalMaterial = false;
            cov_165wr8g2ia.s[105]++;
            this._renderer._enableLighting = true;
            cov_165wr8g2ia.s[106]++;
            this._renderer._tex = null;
            cov_165wr8g2ia.s[107]++;

            return this;
          };

          /**
           * Sets the amount of gloss in the surface of shapes.
           * Used in combination with specularMaterial() in setting
           * the material properties of shapes. The default and minimum value is 1.
           * @method shininess
           * @param {Number} shine Degree of Shininess.
           *                       Defaults to 1.
           * @chainable
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           * function draw() {
           *   background(0);
           *   noStroke();
           *   let locX = mouseX - width / 2;
           *   let locY = mouseY - height / 2;
           *   ambientLight(60, 60, 60);
           *   pointLight(255, 255, 255, locX, locY, 50);
           *   specularMaterial(250);
           *   translate(-25, 0, 0);
           *   shininess(1);
           *   sphere(20);
           *   translate(50, 0, 0);
           *   shininess(20);
           *   sphere(20);
           * }
           * </code>
           * </div>
           * @alt
           * Shininess on Camera changes position with mouse
           */ cov_165wr8g2ia.s[108]++;
          _main.default.prototype.shininess = function(shine) {
            cov_165wr8g2ia.f[14]++;
            cov_165wr8g2ia.s[109]++;
            this._assert3d('shininess');
            cov_165wr8g2ia.s[110]++;
            _main.default._validateParameters('shininess', arguments);
            cov_165wr8g2ia.s[111]++;

            if (shine < 1) {
              cov_165wr8g2ia.b[10][0]++;
              cov_165wr8g2ia.s[112]++;
              shine = 1;
            } else {
              cov_165wr8g2ia.b[10][1]++;
            }
            cov_165wr8g2ia.s[113]++;
            this._renderer._useShininess = shine;
            cov_165wr8g2ia.s[114]++;
            return this;
          };

          /**
           * @private blends colors according to color components.
           * If alpha value is less than 1, or non-standard blendMode
           * we need to enable blending on our gl context.
           * @param  {Number[]} color [description]
           * @return {Number[]]}  Normalized numbers array
           */ cov_165wr8g2ia.s[115]++;
          _main.default.RendererGL.prototype._applyColorBlend = function(colors) {
            cov_165wr8g2ia.f[15]++;
            var gl = (cov_165wr8g2ia.s[116]++, this.GL);

            var isTexture = (cov_165wr8g2ia.s[117]++, this.drawMode === constants.TEXTURE);
            var doBlend = (cov_165wr8g2ia.s[118]++,
            (cov_165wr8g2ia.b[11][0]++, isTexture) ||
              (cov_165wr8g2ia.b[11][1]++, colors[colors.length - 1] < 1.0) ||
              (cov_165wr8g2ia.b[11][2]++, this._isErasing));
            cov_165wr8g2ia.s[119]++;

            if (doBlend !== this._isBlending) {
              cov_165wr8g2ia.b[12][0]++;
              cov_165wr8g2ia.s[120]++;
              if (
                (cov_165wr8g2ia.b[14][0]++, doBlend) ||
                ((cov_165wr8g2ia.b[14][1]++, this.curBlendMode !== constants.BLEND) &&
                  (cov_165wr8g2ia.b[14][2]++, this.curBlendMode !== constants.ADD))
              ) {
                cov_165wr8g2ia.b[13][0]++;
                cov_165wr8g2ia.s[121]++;
                gl.enable(gl.BLEND);
              } else {
                cov_165wr8g2ia.b[13][1]++;
                cov_165wr8g2ia.s[122]++;
                gl.disable(gl.BLEND);
              }
              cov_165wr8g2ia.s[123]++;
              gl.depthMask(true);
              cov_165wr8g2ia.s[124]++;
              this._isBlending = doBlend;
            } else {
              cov_165wr8g2ia.b[12][1]++;
            }
            cov_165wr8g2ia.s[125]++;
            this._applyBlendMode();
            cov_165wr8g2ia.s[126]++;
            return colors;
          };

          /**
           * @private sets blending in gl context to curBlendMode
           * @param  {Number[]} color [description]
           * @return {Number[]]}  Normalized numbers array
           */ cov_165wr8g2ia.s[127]++;
          _main.default.RendererGL.prototype._applyBlendMode = function() {
            cov_165wr8g2ia.f[16]++;
            cov_165wr8g2ia.s[128]++;
            if (this._cachedBlendMode === this.curBlendMode) {
              cov_165wr8g2ia.b[15][0]++;
              cov_165wr8g2ia.s[129]++;
              return;
            } else {
              cov_165wr8g2ia.b[15][1]++;
            }
            var gl = (cov_165wr8g2ia.s[130]++, this.GL);
            cov_165wr8g2ia.s[131]++;
            switch (this.curBlendMode) {
              case constants.BLEND:
                cov_165wr8g2ia.b[16][0]++;
              case constants.ADD:
                cov_165wr8g2ia.b[16][1]++;
                cov_165wr8g2ia.s[132]++;
                gl.blendEquation(gl.FUNC_ADD);
                cov_165wr8g2ia.s[133]++;
                gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
                cov_165wr8g2ia.s[134]++;
                break;
              case constants.REMOVE:
                cov_165wr8g2ia.b[16][2]++;
                cov_165wr8g2ia.s[135]++;
                gl.blendEquation(gl.FUNC_REVERSE_SUBTRACT);
                cov_165wr8g2ia.s[136]++;
                gl.blendFunc(gl.SRC_ALPHA, gl.DST_ALPHA);
                cov_165wr8g2ia.s[137]++;
                break;
              case constants.MULTIPLY:
                cov_165wr8g2ia.b[16][3]++;
                cov_165wr8g2ia.s[138]++;
                gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_ADD);
                cov_165wr8g2ia.s[139]++;
                gl.blendFuncSeparate(gl.ZERO, gl.SRC_COLOR, gl.ONE, gl.ONE);
                cov_165wr8g2ia.s[140]++;
                break;
              case constants.SCREEN:
                cov_165wr8g2ia.b[16][4]++;
                cov_165wr8g2ia.s[141]++;
                gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_ADD);
                cov_165wr8g2ia.s[142]++;
                gl.blendFuncSeparate(gl.ONE_MINUS_DST_COLOR, gl.ONE, gl.ONE, gl.ONE);
                cov_165wr8g2ia.s[143]++;
                break;
              case constants.EXCLUSION:
                cov_165wr8g2ia.b[16][5]++;
                cov_165wr8g2ia.s[144]++;
                gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_ADD);
                cov_165wr8g2ia.s[145]++;
                gl.blendFuncSeparate(
                  gl.ONE_MINUS_DST_COLOR,
                  gl.ONE_MINUS_SRC_COLOR,
                  gl.ONE,
                  gl.ONE
                );
                cov_165wr8g2ia.s[146]++;

                break;
              case constants.REPLACE:
                cov_165wr8g2ia.b[16][6]++;
                cov_165wr8g2ia.s[147]++;
                gl.blendEquation(gl.FUNC_ADD);
                cov_165wr8g2ia.s[148]++;
                gl.blendFunc(gl.ONE, gl.ZERO);
                cov_165wr8g2ia.s[149]++;
                break;
              case constants.SUBTRACT:
                cov_165wr8g2ia.b[16][7]++;
                cov_165wr8g2ia.s[150]++;
                gl.blendEquationSeparate(gl.FUNC_REVERSE_SUBTRACT, gl.FUNC_ADD);
                cov_165wr8g2ia.s[151]++;
                gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE, gl.ONE, gl.ONE);
                cov_165wr8g2ia.s[152]++;
                break;
              case constants.DARKEST:
                cov_165wr8g2ia.b[16][8]++;
                cov_165wr8g2ia.s[153]++;
                if (this.blendExt) {
                  cov_165wr8g2ia.b[17][0]++;
                  cov_165wr8g2ia.s[154]++;
                  gl.blendEquationSeparate(this.blendExt.MIN_EXT, gl.FUNC_ADD);
                  cov_165wr8g2ia.s[155]++;
                  gl.blendFuncSeparate(gl.ONE, gl.ONE, gl.ONE, gl.ONE);
                } else {
                  cov_165wr8g2ia.b[17][1]++;
                  cov_165wr8g2ia.s[156]++;
                  console.warn(
                    'blendMode(DARKEST) does not work in your browser in WEBGL mode.'
                  );
                }
                cov_165wr8g2ia.s[157]++;
                break;
              case constants.LIGHTEST:
                cov_165wr8g2ia.b[16][9]++;
                cov_165wr8g2ia.s[158]++;
                if (this.blendExt) {
                  cov_165wr8g2ia.b[18][0]++;
                  cov_165wr8g2ia.s[159]++;
                  gl.blendEquationSeparate(this.blendExt.MAX_EXT, gl.FUNC_ADD);
                  cov_165wr8g2ia.s[160]++;
                  gl.blendFuncSeparate(gl.ONE, gl.ONE, gl.ONE, gl.ONE);
                } else {
                  cov_165wr8g2ia.b[18][1]++;
                  cov_165wr8g2ia.s[161]++;
                  console.warn(
                    'blendMode(LIGHTEST) does not work in your browser in WEBGL mode.'
                  );
                }
                cov_165wr8g2ia.s[162]++;
                break;
              default:
                cov_165wr8g2ia.b[16][10]++;
                cov_165wr8g2ia.s[163]++;
                console.error(
                  'Oops! Somehow RendererGL set curBlendMode to an unsupported mode.'
                );
                cov_165wr8g2ia.s[164]++;

                break;
            }
            cov_165wr8g2ia.s[165]++;

            if (!this._isErasing) {
              cov_165wr8g2ia.b[19][0]++;
              cov_165wr8g2ia.s[166]++;
              this._cachedBlendMode = this.curBlendMode;
            } else {
              cov_165wr8g2ia.b[19][1]++;
            }
          };
          var _default = _main.default;
          exports.default = _default;
        },
        {
          '../core/constants': 272,
          '../core/main': 283,
          './p5.Texture': 339,
          'core-js/modules/es.array.join': 175
        }
      ],
      331: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_1uq18gp6pk = (function() {
            var path = '/Users/outofambit/src/p5.js/src/webgl/p5.Camera.js';
            var hash = '9e34a2b7704a57d42c49e20294b8495d92ff0c67';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/webgl/p5.Camera.js',
              statementMap: {
                '0': { start: { line: 108, column: 0 }, end: { line: 113, column: 2 } },
                '1': { start: { line: 109, column: 2 }, end: { line: 109, column: 27 } },
                '2': { start: { line: 110, column: 2 }, end: { line: 110, column: 41 } },
                '3': { start: { line: 111, column: 2 }, end: { line: 111, column: 44 } },
                '4': { start: { line: 112, column: 2 }, end: { line: 112, column: 14 } },
                '5': { start: { line: 169, column: 0 }, end: { line: 174, column: 2 } },
                '6': { start: { line: 170, column: 2 }, end: { line: 170, column: 32 } },
                '7': { start: { line: 171, column: 2 }, end: { line: 171, column: 46 } },
                '8': { start: { line: 172, column: 2 }, end: { line: 172, column: 49 } },
                '9': { start: { line: 173, column: 2 }, end: { line: 173, column: 14 } },
                '10': { start: { line: 229, column: 0 }, end: { line: 234, column: 2 } },
                '11': { start: { line: 230, column: 2 }, end: { line: 230, column: 26 } },
                '12': { start: { line: 231, column: 2 }, end: { line: 231, column: 40 } },
                '13': { start: { line: 232, column: 2 }, end: { line: 232, column: 43 } },
                '14': { start: { line: 233, column: 2 }, end: { line: 233, column: 14 } },
                '15': { start: { line: 292, column: 0 }, end: { line: 297, column: 2 } },
                '16': { start: { line: 293, column: 2 }, end: { line: 293, column: 28 } },
                '17': { start: { line: 294, column: 2 }, end: { line: 294, column: 42 } },
                '18': { start: { line: 295, column: 2 }, end: { line: 295, column: 45 } },
                '19': { start: { line: 296, column: 2 }, end: { line: 296, column: 14 } },
                '20': { start: { line: 343, column: 0 }, end: { line: 355, column: 2 } },
                '21': { start: { line: 344, column: 2 }, end: { line: 344, column: 33 } },
                '22': { start: { line: 345, column: 15 }, end: { line: 345, column: 44 } },
                '23': { start: { line: 348, column: 2 }, end: { line: 348, column: 39 } },
                '24': { start: { line: 349, column: 2 }, end: { line: 349, column: 27 } },
                '25': { start: { line: 352, column: 2 }, end: { line: 352, column: 35 } },
                '26': { start: { line: 354, column: 2 }, end: { line: 354, column: 14 } },
                '27': { start: { line: 436, column: 0 }, end: { line: 443, column: 2 } },
                '28': { start: { line: 437, column: 2 }, end: { line: 437, column: 28 } },
                '29': { start: { line: 439, column: 2 }, end: { line: 439, column: 30 } },
                '30': { start: { line: 441, column: 2 }, end: { line: 441, column: 38 } },
                '31': { start: { line: 442, column: 2 }, end: { line: 442, column: 36 } },
                '32': { start: { line: 728, column: 0 }, end: { line: 799, column: 2 } },
                '33': { start: { line: 729, column: 2 }, end: { line: 729, column: 64 } },
                '34': { start: { line: 730, column: 2 }, end: { line: 738, column: 3 } },
                '35': { start: { line: 731, column: 4 }, end: { line: 731, column: 33 } },
                '36': { start: { line: 735, column: 4 }, end: { line: 735, column: 26 } },
                '37': { start: { line: 737, column: 4 }, end: { line: 737, column: 60 } },
                '38': { start: { line: 739, column: 2 }, end: { line: 741, column: 3 } },
                '39': { start: { line: 740, column: 4 }, end: { line: 740, column: 37 } },
                '40': { start: { line: 742, column: 2 }, end: { line: 744, column: 3 } },
                '41': { start: { line: 743, column: 4 }, end: { line: 743, column: 34 } },
                '42': { start: { line: 745, column: 2 }, end: { line: 747, column: 3 } },
                '43': { start: { line: 746, column: 4 }, end: { line: 746, column: 32 } },
                '44': { start: { line: 749, column: 2 }, end: { line: 755, column: 3 } },
                '45': { start: { line: 750, column: 4 }, end: { line: 750, column: 16 } },
                '46': { start: { line: 751, column: 4 }, end: { line: 754, column: 6 } },
                '47': { start: { line: 757, column: 2 }, end: { line: 762, column: 3 } },
                '48': { start: { line: 758, column: 4 }, end: { line: 761, column: 6 } },
                '49': { start: { line: 764, column: 2 }, end: { line: 764, column: 28 } },
                '50': { start: { line: 765, column: 2 }, end: { line: 765, column: 25 } },
                '51': { start: { line: 766, column: 2 }, end: { line: 766, column: 23 } },
                '52': { start: { line: 768, column: 2 }, end: { line: 768, column: 41 } },
                '53': { start: { line: 770, column: 12 }, end: { line: 770, column: 46 } },
                '54': { start: { line: 771, column: 13 }, end: { line: 771, column: 53 } },
                '55': { start: { line: 774, column: 2 }, end: { line: 777, column: 65 } },
                '56': { start: { line: 779, column: 2 }, end: { line: 798, column: 3 } },
                '57': { start: { line: 780, column: 4 }, end: { line: 797, column: 6 } },
                '58': { start: { line: 844, column: 0 }, end: { line: 895, column: 2 } },
                '59': { start: { line: 845, column: 2 }, end: { line: 845, column: 59 } },
                '60': { start: { line: 845, column: 26 }, end: { line: 845, column: 59 } },
                '61': { start: { line: 846, column: 2 }, end: { line: 846, column: 61 } },
                '62': { start: { line: 846, column: 27 }, end: { line: 846, column: 61 } },
                '63': { start: { line: 847, column: 2 }, end: { line: 847, column: 64 } },
                '64': { start: { line: 847, column: 28 }, end: { line: 847, column: 64 } },
                '65': { start: { line: 848, column: 2 }, end: { line: 848, column: 58 } },
                '66': { start: { line: 848, column: 25 }, end: { line: 848, column: 58 } },
                '67': { start: { line: 849, column: 2 }, end: { line: 849, column: 35 } },
                '68': { start: { line: 849, column: 26 }, end: { line: 849, column: 35 } },
                '69': { start: { line: 850, column: 2 }, end: { line: 851, column: 64 } },
                '70': { start: { line: 851, column: 4 }, end: { line: 851, column: 64 } },
                '71': { start: { line: 853, column: 12 }, end: { line: 853, column: 24 } },
                '72': { start: { line: 854, column: 12 }, end: { line: 854, column: 24 } },
                '73': { start: { line: 855, column: 12 }, end: { line: 855, column: 22 } },
                '74': { start: { line: 857, column: 12 }, end: { line: 857, column: 20 } },
                '75': { start: { line: 858, column: 12 }, end: { line: 858, column: 20 } },
                '76': { start: { line: 859, column: 12 }, end: { line: 859, column: 20 } },
                '77': { start: { line: 861, column: 13 }, end: { line: 861, column: 32 } },
                '78': { start: { line: 862, column: 13 }, end: { line: 862, column: 32 } },
                '79': { start: { line: 863, column: 13 }, end: { line: 863, column: 30 } },
                '80': { start: { line: 865, column: 2 }, end: { line: 865, column: 41 } },
                '81': { start: { line: 868, column: 2 }, end: { line: 871, column: 40 } },
                '82': { start: { line: 873, column: 2 }, end: { line: 892, column: 3 } },
                '83': { start: { line: 874, column: 4 }, end: { line: 891, column: 6 } },
                '84': { start: { line: 894, column: 2 }, end: { line: 894, column: 29 } },
                '85': { start: { line: 939, column: 0 }, end: { line: 990, column: 2 } },
                '86': { start: { line: 940, column: 2 }, end: { line: 940, column: 59 } },
                '87': { start: { line: 940, column: 26 }, end: { line: 940, column: 59 } },
                '88': { start: { line: 941, column: 2 }, end: { line: 941, column: 61 } },
                '89': { start: { line: 941, column: 27 }, end: { line: 941, column: 61 } },
                '90': { start: { line: 942, column: 2 }, end: { line: 942, column: 64 } },
                '91': { start: { line: 942, column: 28 }, end: { line: 942, column: 64 } },
                '92': { start: { line: 943, column: 2 }, end: { line: 943, column: 58 } },
                '93': { start: { line: 943, column: 25 }, end: { line: 943, column: 58 } },
                '94': { start: { line: 944, column: 2 }, end: { line: 944, column: 35 } },
                '95': { start: { line: 944, column: 26 }, end: { line: 944, column: 35 } },
                '96': { start: { line: 945, column: 2 }, end: { line: 946, column: 64 } },
                '97': { start: { line: 946, column: 4 }, end: { line: 946, column: 64 } },
                '98': { start: { line: 948, column: 12 }, end: { line: 948, column: 24 } },
                '99': { start: { line: 949, column: 12 }, end: { line: 949, column: 24 } },
                '100': { start: { line: 950, column: 12 }, end: { line: 950, column: 22 } },
                '101': { start: { line: 952, column: 12 }, end: { line: 952, column: 29 } },
                '102': { start: { line: 953, column: 12 }, end: { line: 953, column: 29 } },
                '103': { start: { line: 954, column: 12 }, end: { line: 954, column: 35 } },
                '104': { start: { line: 956, column: 13 }, end: { line: 956, column: 31 } },
                '105': { start: { line: 957, column: 13 }, end: { line: 957, column: 31 } },
                '106': { start: { line: 958, column: 13 }, end: { line: 958, column: 30 } },
                '107': { start: { line: 960, column: 2 }, end: { line: 960, column: 41 } },
                '108': { start: { line: 963, column: 2 }, end: { line: 966, column: 39 } },
                '109': { start: { line: 968, column: 2 }, end: { line: 987, column: 3 } },
                '110': { start: { line: 969, column: 4 }, end: { line: 986, column: 6 } },
                '111': { start: { line: 989, column: 2 }, end: { line: 989, column: 29 } },
                '112': { start: { line: 1002, column: 0 }, end: { line: 1038, column: 2 } },
                '113': {
                  start: { line: 1003, column: 16 },
                  end: { line: 1003, column: 28 }
                },
                '114': {
                  start: { line: 1004, column: 16 },
                  end: { line: 1004, column: 28 }
                },
                '115': {
                  start: { line: 1005, column: 16 },
                  end: { line: 1005, column: 28 }
                },
                '116': {
                  start: { line: 1008, column: 2 },
                  end: { line: 1008, column: 23 }
                },
                '117': {
                  start: { line: 1009, column: 2 },
                  end: { line: 1009, column: 23 }
                },
                '118': {
                  start: { line: 1010, column: 2 },
                  end: { line: 1010, column: 23 }
                },
                '119': {
                  start: { line: 1012, column: 19 },
                  end: { line: 1012, column: 60 }
                },
                '120': {
                  start: { line: 1013, column: 2 },
                  end: { line: 1013, column: 64 }
                },
                '121': {
                  start: { line: 1016, column: 24 },
                  end: { line: 1020, column: 3 }
                },
                '122': {
                  start: { line: 1023, column: 2 },
                  end: { line: 1023, column: 32 }
                },
                '123': {
                  start: { line: 1024, column: 2 },
                  end: { line: 1024, column: 32 }
                },
                '124': {
                  start: { line: 1025, column: 2 },
                  end: { line: 1025, column: 32 }
                },
                '125': { start: { line: 1027, column: 2 }, end: { line: 1037, column: 4 } },
                '126': { start: { line: 1093, column: 0 }, end: { line: 1096, column: 2 } },
                '127': {
                  start: { line: 1094, column: 16 },
                  end: { line: 1094, column: 36 }
                },
                '128': {
                  start: { line: 1095, column: 2 },
                  end: { line: 1095, column: 63 }
                },
                '129': { start: { line: 1151, column: 0 }, end: { line: 1154, column: 2 } },
                '130': {
                  start: { line: 1152, column: 16 },
                  end: { line: 1152, column: 36 }
                },
                '131': {
                  start: { line: 1153, column: 2 },
                  end: { line: 1153, column: 63 }
                },
                '132': { start: { line: 1205, column: 0 }, end: { line: 1217, column: 2 } },
                '133': { start: { line: 1206, column: 2 }, end: { line: 1216, column: 4 } },
                '134': { start: { line: 1307, column: 0 }, end: { line: 1384, column: 2 } },
                '135': { start: { line: 1318, column: 2 }, end: { line: 1328, column: 3 } },
                '136': {
                  start: { line: 1319, column: 4 },
                  end: { line: 1319, column: 28 }
                },
                '137': {
                  start: { line: 1320, column: 4 },
                  end: { line: 1320, column: 28 }
                },
                '138': {
                  start: { line: 1321, column: 4 },
                  end: { line: 1321, column: 28 }
                },
                '139': {
                  start: { line: 1322, column: 4 },
                  end: { line: 1322, column: 19 }
                },
                '140': {
                  start: { line: 1323, column: 4 },
                  end: { line: 1323, column: 19 }
                },
                '141': {
                  start: { line: 1324, column: 4 },
                  end: { line: 1324, column: 16 }
                },
                '142': {
                  start: { line: 1325, column: 4 },
                  end: { line: 1325, column: 12 }
                },
                '143': {
                  start: { line: 1326, column: 4 },
                  end: { line: 1326, column: 12 }
                },
                '144': {
                  start: { line: 1327, column: 4 },
                  end: { line: 1327, column: 12 }
                },
                '145': {
                  start: { line: 1330, column: 2 },
                  end: { line: 1330, column: 19 }
                },
                '146': {
                  start: { line: 1331, column: 2 },
                  end: { line: 1331, column: 19 }
                },
                '147': {
                  start: { line: 1332, column: 2 },
                  end: { line: 1332, column: 19 }
                },
                '148': { start: { line: 1334, column: 2 }, end: { line: 1338, column: 3 } },
                '149': {
                  start: { line: 1335, column: 4 },
                  end: { line: 1335, column: 27 }
                },
                '150': {
                  start: { line: 1336, column: 4 },
                  end: { line: 1336, column: 27 }
                },
                '151': {
                  start: { line: 1337, column: 4 },
                  end: { line: 1337, column: 27 }
                },
                '152': { start: { line: 1340, column: 2 }, end: { line: 1344, column: 3 } },
                '153': {
                  start: { line: 1341, column: 4 },
                  end: { line: 1341, column: 19 }
                },
                '154': {
                  start: { line: 1342, column: 4 },
                  end: { line: 1342, column: 19 }
                },
                '155': {
                  start: { line: 1343, column: 4 },
                  end: { line: 1343, column: 19 }
                },
                '156': {
                  start: { line: 1346, column: 16 },
                  end: { line: 1346, column: 36 }
                },
                '157': {
                  start: { line: 1352, column: 2 },
                  end: { line: 1355, column: 63 }
                },
                '158': {
                  start: { line: 1357, column: 13 },
                  end: { line: 1357, column: 18 }
                },
                '159': {
                  start: { line: 1358, column: 13 },
                  end: { line: 1358, column: 18 }
                },
                '160': {
                  start: { line: 1359, column: 13 },
                  end: { line: 1359, column: 18 }
                },
                '161': {
                  start: { line: 1361, column: 2 },
                  end: { line: 1361, column: 44 }
                },
                '162': { start: { line: 1363, column: 2 }, end: { line: 1382, column: 3 } },
                '163': { start: { line: 1364, column: 4 }, end: { line: 1381, column: 6 } },
                '164': {
                  start: { line: 1383, column: 2 },
                  end: { line: 1383, column: 14 }
                },
                '165': { start: { line: 1436, column: 0 }, end: { line: 1456, column: 2 } },
                '166': {
                  start: { line: 1437, column: 16 },
                  end: { line: 1437, column: 36 }
                },
                '167': {
                  start: { line: 1441, column: 13 },
                  end: { line: 1441, column: 61 }
                },
                '168': {
                  start: { line: 1442, column: 13 },
                  end: { line: 1442, column: 61 }
                },
                '169': {
                  start: { line: 1443, column: 13 },
                  end: { line: 1443, column: 61 }
                },
                '170': { start: { line: 1445, column: 2 }, end: { line: 1455, column: 4 } },
                '171': { start: { line: 1502, column: 0 }, end: { line: 1518, column: 2 } },
                '172': {
                  start: { line: 1503, column: 16 },
                  end: { line: 1503, column: 29 }
                },
                '173': {
                  start: { line: 1504, column: 16 },
                  end: { line: 1504, column: 29 }
                },
                '174': {
                  start: { line: 1505, column: 16 },
                  end: { line: 1505, column: 29 }
                },
                '175': { start: { line: 1507, column: 2 }, end: { line: 1517, column: 4 } },
                '176': { start: { line: 1526, column: 0 }, end: { line: 1538, column: 2 } },
                '177': {
                  start: { line: 1527, column: 2 },
                  end: { line: 1527, column: 45 }
                },
                '178': {
                  start: { line: 1528, column: 2 },
                  end: { line: 1528, column: 73 }
                },
                '179': {
                  start: { line: 1529, column: 2 },
                  end: { line: 1529, column: 23 }
                },
                '180': {
                  start: { line: 1530, column: 2 },
                  end: { line: 1530, column: 23 }
                },
                '181': {
                  start: { line: 1531, column: 2 },
                  end: { line: 1532, column: 72 }
                },
                '182': {
                  start: { line: 1533, column: 2 },
                  end: { line: 1533, column: 26 }
                },
                '183': {
                  start: { line: 1534, column: 2 },
                  end: { line: 1534, column: 26 }
                },
                '184': {
                  start: { line: 1535, column: 2 },
                  end: { line: 1535, column: 26 }
                },
                '185': {
                  start: { line: 1536, column: 2 },
                  end: { line: 1536, column: 50 }
                },
                '186': {
                  start: { line: 1537, column: 2 },
                  end: { line: 1537, column: 48 }
                },
                '187': { start: { line: 1542, column: 0 }, end: { line: 1561, column: 2 } },
                '188': {
                  start: { line: 1543, column: 2 },
                  end: { line: 1543, column: 41 }
                },
                '189': {
                  start: { line: 1544, column: 2 },
                  end: { line: 1544, column: 45 }
                },
                '190': {
                  start: { line: 1545, column: 2 },
                  end: { line: 1545, column: 31 }
                },
                '191': {
                  start: { line: 1546, column: 2 },
                  end: { line: 1546, column: 31 }
                },
                '192': {
                  start: { line: 1547, column: 2 },
                  end: { line: 1547, column: 31 }
                },
                '193': {
                  start: { line: 1548, column: 2 },
                  end: { line: 1548, column: 37 }
                },
                '194': {
                  start: { line: 1549, column: 2 },
                  end: { line: 1549, column: 37 }
                },
                '195': {
                  start: { line: 1550, column: 2 },
                  end: { line: 1550, column: 37 }
                },
                '196': {
                  start: { line: 1551, column: 2 },
                  end: { line: 1551, column: 15 }
                },
                '197': {
                  start: { line: 1552, column: 2 },
                  end: { line: 1552, column: 15 }
                },
                '198': {
                  start: { line: 1553, column: 2 },
                  end: { line: 1553, column: 15 }
                },
                '199': {
                  start: { line: 1554, column: 2 },
                  end: { line: 1554, column: 43 }
                },
                '200': {
                  start: { line: 1555, column: 2 },
                  end: { line: 1555, column: 41 }
                },
                '201': {
                  start: { line: 1557, column: 2 },
                  end: { line: 1557, column: 21 }
                },
                '202': {
                  start: { line: 1558, column: 2 },
                  end: { line: 1558, column: 16 }
                },
                '203': {
                  start: { line: 1560, column: 2 },
                  end: { line: 1560, column: 30 }
                },
                '204': { start: { line: 1563, column: 0 }, end: { line: 1574, column: 2 } },
                '205': { start: { line: 1565, column: 2 }, end: { line: 1573, column: 3 } },
                '206': {
                  start: { line: 1566, column: 4 },
                  end: { line: 1566, column: 41 }
                },
                '207': {
                  start: { line: 1567, column: 4 },
                  end: { line: 1567, column: 29 }
                },
                '208': { start: { line: 1569, column: 4 }, end: { line: 1572, column: 6 } },
                '209': { start: { line: 1581, column: 0 }, end: { line: 1600, column: 2 } },
                '210': {
                  start: { line: 1582, column: 15 },
                  end: { line: 1582, column: 44 }
                },
                '211': {
                  start: { line: 1583, column: 2 },
                  end: { line: 1583, column: 34 }
                },
                '212': {
                  start: { line: 1584, column: 2 },
                  end: { line: 1584, column: 38 }
                },
                '213': {
                  start: { line: 1585, column: 2 },
                  end: { line: 1585, column: 24 }
                },
                '214': {
                  start: { line: 1586, column: 2 },
                  end: { line: 1586, column: 24 }
                },
                '215': {
                  start: { line: 1587, column: 2 },
                  end: { line: 1587, column: 24 }
                },
                '216': {
                  start: { line: 1588, column: 2 },
                  end: { line: 1588, column: 30 }
                },
                '217': {
                  start: { line: 1589, column: 2 },
                  end: { line: 1589, column: 30 }
                },
                '218': {
                  start: { line: 1590, column: 2 },
                  end: { line: 1590, column: 30 }
                },
                '219': {
                  start: { line: 1591, column: 2 },
                  end: { line: 1591, column: 36 }
                },
                '220': {
                  start: { line: 1592, column: 2 },
                  end: { line: 1592, column: 34 }
                },
                '221': {
                  start: { line: 1594, column: 2 },
                  end: { line: 1594, column: 36 }
                },
                '222': {
                  start: { line: 1596, column: 2 },
                  end: { line: 1596, column: 47 }
                },
                '223': {
                  start: { line: 1597, column: 2 },
                  end: { line: 1597, column: 43 }
                },
                '224': {
                  start: { line: 1599, column: 2 },
                  end: { line: 1599, column: 14 }
                },
                '225': { start: { line: 1608, column: 0 }, end: { line: 1658, column: 2 } },
                '226': {
                  start: { line: 1610, column: 11 },
                  end: { line: 1610, column: 35 }
                },
                '227': {
                  start: { line: 1611, column: 11 },
                  end: { line: 1611, column: 35 }
                },
                '228': {
                  start: { line: 1612, column: 11 },
                  end: { line: 1612, column: 35 }
                },
                '229': {
                  start: { line: 1615, column: 18 },
                  end: { line: 1615, column: 56 }
                },
                '230': { start: { line: 1616, column: 2 }, end: { line: 1620, column: 3 } },
                '231': {
                  start: { line: 1617, column: 4 },
                  end: { line: 1617, column: 18 }
                },
                '232': {
                  start: { line: 1618, column: 4 },
                  end: { line: 1618, column: 18 }
                },
                '233': {
                  start: { line: 1619, column: 4 },
                  end: { line: 1619, column: 18 }
                },
                '234': {
                  start: { line: 1623, column: 11 },
                  end: { line: 1623, column: 19 }
                },
                '235': {
                  start: { line: 1624, column: 11 },
                  end: { line: 1624, column: 19 }
                },
                '236': {
                  start: { line: 1625, column: 11 },
                  end: { line: 1625, column: 19 }
                },
                '237': {
                  start: { line: 1628, column: 11 },
                  end: { line: 1628, column: 28 }
                },
                '238': {
                  start: { line: 1629, column: 11 },
                  end: { line: 1629, column: 29 }
                },
                '239': {
                  start: { line: 1630, column: 11 },
                  end: { line: 1630, column: 28 }
                },
                '240': {
                  start: { line: 1633, column: 2 },
                  end: { line: 1633, column: 25 }
                },
                '241': {
                  start: { line: 1634, column: 2 },
                  end: { line: 1634, column: 26 }
                },
                '242': {
                  start: { line: 1635, column: 2 },
                  end: { line: 1635, column: 25 }
                },
                '243': {
                  start: { line: 1639, column: 15 },
                  end: { line: 1639, column: 53 }
                },
                '244': { start: { line: 1640, column: 2 }, end: { line: 1644, column: 3 } },
                '245': {
                  start: { line: 1641, column: 4 },
                  end: { line: 1641, column: 15 }
                },
                '246': {
                  start: { line: 1642, column: 4 },
                  end: { line: 1642, column: 15 }
                },
                '247': {
                  start: { line: 1643, column: 4 },
                  end: { line: 1643, column: 15 }
                },
                '248': {
                  start: { line: 1646, column: 15 },
                  end: { line: 1646, column: 53 }
                },
                '249': { start: { line: 1647, column: 2 }, end: { line: 1651, column: 3 } },
                '250': {
                  start: { line: 1648, column: 4 },
                  end: { line: 1648, column: 15 }
                },
                '251': {
                  start: { line: 1649, column: 4 },
                  end: { line: 1649, column: 15 }
                },
                '252': {
                  start: { line: 1650, column: 4 },
                  end: { line: 1650, column: 15 }
                },
                '253': { start: { line: 1653, column: 2 }, end: { line: 1657, column: 4 } },
                '254': { start: { line: 1668, column: 0 }, end: { line: 1712, column: 2 } },
                '255': {
                  start: { line: 1669, column: 16 },
                  end: { line: 1669, column: 40 }
                },
                '256': {
                  start: { line: 1670, column: 16 },
                  end: { line: 1670, column: 40 }
                },
                '257': {
                  start: { line: 1671, column: 16 },
                  end: { line: 1671, column: 40 }
                },
                '258': {
                  start: { line: 1674, column: 18 },
                  end: { line: 1674, column: 74 }
                },
                '259': {
                  start: { line: 1676, column: 17 },
                  end: { line: 1676, column: 41 }
                },
                '260': {
                  start: { line: 1677, column: 15 },
                  end: { line: 1677, column: 70 }
                },
                '261': {
                  start: { line: 1680, column: 2 },
                  end: { line: 1680, column: 21 }
                },
                '262': {
                  start: { line: 1681, column: 2 },
                  end: { line: 1681, column: 17 }
                },
                '263': {
                  start: { line: 1682, column: 2 },
                  end: { line: 1682, column: 23 }
                },
                '264': { start: { line: 1685, column: 2 }, end: { line: 1687, column: 3 } },
                '265': {
                  start: { line: 1686, column: 4 },
                  end: { line: 1686, column: 20 }
                },
                '266': { start: { line: 1690, column: 2 }, end: { line: 1694, column: 3 } },
                '267': {
                  start: { line: 1691, column: 4 },
                  end: { line: 1691, column: 21 }
                },
                '268': { start: { line: 1692, column: 9 }, end: { line: 1694, column: 3 } },
                '269': {
                  start: { line: 1693, column: 4 },
                  end: { line: 1693, column: 19 }
                },
                '270': {
                  start: { line: 1697, column: 13 },
                  end: { line: 1697, column: 62 }
                },
                '271': {
                  start: { line: 1698, column: 13 },
                  end: { line: 1698, column: 41 }
                },
                '272': {
                  start: { line: 1699, column: 13 },
                  end: { line: 1699, column: 62 }
                },
                '273': { start: { line: 1701, column: 2 }, end: { line: 1711, column: 4 } },
                '274': { start: { line: 1719, column: 0 }, end: { line: 1721, column: 2 } },
                '275': {
                  start: { line: 1720, column: 2 },
                  end: { line: 1720, column: 44 }
                },
                '276': { start: { line: 1794, column: 0 }, end: { line: 1816, column: 2 } },
                '277': {
                  start: { line: 1795, column: 2 },
                  end: { line: 1795, column: 34 }
                },
                '278': { start: { line: 1798, column: 2 }, end: { line: 1815, column: 4 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: {
                    start: { line: 108, column: 22 },
                    end: { line: 108, column: 23 }
                  },
                  loc: { start: { line: 108, column: 40 }, end: { line: 113, column: 1 } },
                  line: 108
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: {
                    start: { line: 169, column: 27 },
                    end: { line: 169, column: 28 }
                  },
                  loc: { start: { line: 169, column: 45 }, end: { line: 174, column: 1 } },
                  line: 169
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 229, column: 21 },
                    end: { line: 229, column: 22 }
                  },
                  loc: { start: { line: 229, column: 39 }, end: { line: 234, column: 1 } },
                  line: 229
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 292, column: 23 },
                    end: { line: 292, column: 24 }
                  },
                  loc: { start: { line: 292, column: 41 }, end: { line: 297, column: 1 } },
                  line: 292
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 343, column: 28 },
                    end: { line: 343, column: 29 }
                  },
                  loc: { start: { line: 343, column: 39 }, end: { line: 355, column: 1 } },
                  line: 343
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 436, column: 12 },
                    end: { line: 436, column: 13 }
                  },
                  loc: { start: { line: 436, column: 31 }, end: { line: 443, column: 1 } },
                  line: 436
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 728, column: 34 },
                    end: { line: 728, column: 35 }
                  },
                  loc: { start: { line: 728, column: 68 }, end: { line: 799, column: 1 } },
                  line: 728
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 844, column: 28 },
                    end: { line: 844, column: 29 }
                  },
                  loc: { start: { line: 844, column: 74 }, end: { line: 895, column: 1 } },
                  line: 844
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 939, column: 30 },
                    end: { line: 939, column: 31 }
                  },
                  loc: { start: { line: 939, column: 76 }, end: { line: 990, column: 1 } },
                  line: 939
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 1002, column: 34 },
                    end: { line: 1002, column: 35 }
                  },
                  loc: {
                    start: { line: 1002, column: 55 },
                    end: { line: 1038, column: 1 }
                  },
                  line: 1002
                },
                '10': {
                  name: '(anonymous_10)',
                  decl: {
                    start: { line: 1093, column: 26 },
                    end: { line: 1093, column: 27 }
                  },
                  loc: {
                    start: { line: 1093, column: 43 },
                    end: { line: 1096, column: 1 }
                  },
                  line: 1093
                },
                '11': {
                  name: '(anonymous_11)',
                  decl: {
                    start: { line: 1151, column: 27 },
                    end: { line: 1151, column: 28 }
                  },
                  loc: {
                    start: { line: 1151, column: 44 },
                    end: { line: 1154, column: 1 }
                  },
                  line: 1151
                },
                '12': {
                  name: '(anonymous_12)',
                  decl: {
                    start: { line: 1205, column: 29 },
                    end: { line: 1205, column: 30 }
                  },
                  loc: {
                    start: { line: 1205, column: 47 },
                    end: { line: 1217, column: 1 }
                  },
                  line: 1205
                },
                '13': {
                  name: '(anonymous_13)',
                  decl: {
                    start: { line: 1307, column: 29 },
                    end: { line: 1307, column: 30 }
                  },
                  loc: { start: { line: 1317, column: 2 }, end: { line: 1384, column: 1 } },
                  line: 1317
                },
                '14': {
                  name: '(anonymous_14)',
                  decl: {
                    start: { line: 1436, column: 27 },
                    end: { line: 1436, column: 28 }
                  },
                  loc: {
                    start: { line: 1436, column: 45 },
                    end: { line: 1456, column: 1 }
                  },
                  line: 1436
                },
                '15': {
                  name: '(anonymous_15)',
                  decl: {
                    start: { line: 1502, column: 34 },
                    end: { line: 1502, column: 35 }
                  },
                  loc: {
                    start: { line: 1502, column: 52 },
                    end: { line: 1518, column: 1 }
                  },
                  line: 1502
                },
                '16': {
                  name: '(anonymous_16)',
                  decl: {
                    start: { line: 1526, column: 52 },
                    end: { line: 1526, column: 53 }
                  },
                  loc: {
                    start: { line: 1526, column: 63 },
                    end: { line: 1538, column: 1 }
                  },
                  line: 1526
                },
                '17': {
                  name: '(anonymous_17)',
                  decl: {
                    start: { line: 1542, column: 40 },
                    end: { line: 1542, column: 41 }
                  },
                  loc: {
                    start: { line: 1542, column: 51 },
                    end: { line: 1561, column: 1 }
                  },
                  line: 1542
                },
                '18': {
                  name: '(anonymous_18)',
                  decl: {
                    start: { line: 1563, column: 30 },
                    end: { line: 1563, column: 31 }
                  },
                  loc: {
                    start: { line: 1563, column: 41 },
                    end: { line: 1574, column: 1 }
                  },
                  line: 1563
                },
                '19': {
                  name: '(anonymous_19)',
                  decl: {
                    start: { line: 1581, column: 27 },
                    end: { line: 1581, column: 28 }
                  },
                  loc: {
                    start: { line: 1581, column: 38 },
                    end: { line: 1600, column: 1 }
                  },
                  line: 1581
                },
                '20': {
                  name: '(anonymous_20)',
                  decl: {
                    start: { line: 1608, column: 36 },
                    end: { line: 1608, column: 37 }
                  },
                  loc: {
                    start: { line: 1608, column: 47 },
                    end: { line: 1658, column: 1 }
                  },
                  line: 1608
                },
                '21': {
                  name: '(anonymous_21)',
                  decl: {
                    start: { line: 1668, column: 29 },
                    end: { line: 1668, column: 30 }
                  },
                  loc: {
                    start: { line: 1668, column: 61 },
                    end: { line: 1712, column: 1 }
                  },
                  line: 1668
                },
                '22': {
                  name: '(anonymous_22)',
                  decl: {
                    start: { line: 1719, column: 32 },
                    end: { line: 1719, column: 33 }
                  },
                  loc: {
                    start: { line: 1719, column: 43 },
                    end: { line: 1721, column: 1 }
                  },
                  line: 1719
                },
                '23': {
                  name: '(anonymous_23)',
                  decl: {
                    start: { line: 1794, column: 25 },
                    end: { line: 1794, column: 26 }
                  },
                  loc: {
                    start: { line: 1794, column: 39 },
                    end: { line: 1816, column: 1 }
                  },
                  line: 1794
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 729, column: 20 }, end: { line: 729, column: 63 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 729, column: 43 }, end: { line: 729, column: 51 } },
                    { start: { line: 729, column: 54 }, end: { line: 729, column: 63 } }
                  ],
                  line: 729
                },
                '1': {
                  loc: { start: { line: 730, column: 2 }, end: { line: 738, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 730, column: 2 }, end: { line: 738, column: 3 } },
                    { start: { line: 730, column: 2 }, end: { line: 738, column: 3 } }
                  ],
                  line: 730
                },
                '2': {
                  loc: { start: { line: 739, column: 2 }, end: { line: 741, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 739, column: 2 }, end: { line: 741, column: 3 } },
                    { start: { line: 739, column: 2 }, end: { line: 741, column: 3 } }
                  ],
                  line: 739
                },
                '3': {
                  loc: { start: { line: 742, column: 2 }, end: { line: 744, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 742, column: 2 }, end: { line: 744, column: 3 } },
                    { start: { line: 742, column: 2 }, end: { line: 744, column: 3 } }
                  ],
                  line: 742
                },
                '4': {
                  loc: { start: { line: 745, column: 2 }, end: { line: 747, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 745, column: 2 }, end: { line: 747, column: 3 } },
                    { start: { line: 745, column: 2 }, end: { line: 747, column: 3 } }
                  ],
                  line: 745
                },
                '5': {
                  loc: { start: { line: 749, column: 2 }, end: { line: 755, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 749, column: 2 }, end: { line: 755, column: 3 } },
                    { start: { line: 749, column: 2 }, end: { line: 755, column: 3 } }
                  ],
                  line: 749
                },
                '6': {
                  loc: { start: { line: 757, column: 2 }, end: { line: 762, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 757, column: 2 }, end: { line: 762, column: 3 } },
                    { start: { line: 757, column: 2 }, end: { line: 762, column: 3 } }
                  ],
                  line: 757
                },
                '7': {
                  loc: { start: { line: 779, column: 2 }, end: { line: 798, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 779, column: 2 }, end: { line: 798, column: 3 } },
                    { start: { line: 779, column: 2 }, end: { line: 798, column: 3 } }
                  ],
                  line: 779
                },
                '8': {
                  loc: { start: { line: 845, column: 2 }, end: { line: 845, column: 59 } },
                  type: 'if',
                  locations: [
                    { start: { line: 845, column: 2 }, end: { line: 845, column: 59 } },
                    { start: { line: 845, column: 2 }, end: { line: 845, column: 59 } }
                  ],
                  line: 845
                },
                '9': {
                  loc: { start: { line: 846, column: 2 }, end: { line: 846, column: 61 } },
                  type: 'if',
                  locations: [
                    { start: { line: 846, column: 2 }, end: { line: 846, column: 61 } },
                    { start: { line: 846, column: 2 }, end: { line: 846, column: 61 } }
                  ],
                  line: 846
                },
                '10': {
                  loc: { start: { line: 847, column: 2 }, end: { line: 847, column: 64 } },
                  type: 'if',
                  locations: [
                    { start: { line: 847, column: 2 }, end: { line: 847, column: 64 } },
                    { start: { line: 847, column: 2 }, end: { line: 847, column: 64 } }
                  ],
                  line: 847
                },
                '11': {
                  loc: { start: { line: 848, column: 2 }, end: { line: 848, column: 58 } },
                  type: 'if',
                  locations: [
                    { start: { line: 848, column: 2 }, end: { line: 848, column: 58 } },
                    { start: { line: 848, column: 2 }, end: { line: 848, column: 58 } }
                  ],
                  line: 848
                },
                '12': {
                  loc: { start: { line: 849, column: 2 }, end: { line: 849, column: 35 } },
                  type: 'if',
                  locations: [
                    { start: { line: 849, column: 2 }, end: { line: 849, column: 35 } },
                    { start: { line: 849, column: 2 }, end: { line: 849, column: 35 } }
                  ],
                  line: 849
                },
                '13': {
                  loc: { start: { line: 850, column: 2 }, end: { line: 851, column: 64 } },
                  type: 'if',
                  locations: [
                    { start: { line: 850, column: 2 }, end: { line: 851, column: 64 } },
                    { start: { line: 850, column: 2 }, end: { line: 851, column: 64 } }
                  ],
                  line: 850
                },
                '14': {
                  loc: { start: { line: 873, column: 2 }, end: { line: 892, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 873, column: 2 }, end: { line: 892, column: 3 } },
                    { start: { line: 873, column: 2 }, end: { line: 892, column: 3 } }
                  ],
                  line: 873
                },
                '15': {
                  loc: { start: { line: 940, column: 2 }, end: { line: 940, column: 59 } },
                  type: 'if',
                  locations: [
                    { start: { line: 940, column: 2 }, end: { line: 940, column: 59 } },
                    { start: { line: 940, column: 2 }, end: { line: 940, column: 59 } }
                  ],
                  line: 940
                },
                '16': {
                  loc: { start: { line: 941, column: 2 }, end: { line: 941, column: 61 } },
                  type: 'if',
                  locations: [
                    { start: { line: 941, column: 2 }, end: { line: 941, column: 61 } },
                    { start: { line: 941, column: 2 }, end: { line: 941, column: 61 } }
                  ],
                  line: 941
                },
                '17': {
                  loc: { start: { line: 942, column: 2 }, end: { line: 942, column: 64 } },
                  type: 'if',
                  locations: [
                    { start: { line: 942, column: 2 }, end: { line: 942, column: 64 } },
                    { start: { line: 942, column: 2 }, end: { line: 942, column: 64 } }
                  ],
                  line: 942
                },
                '18': {
                  loc: { start: { line: 943, column: 2 }, end: { line: 943, column: 58 } },
                  type: 'if',
                  locations: [
                    { start: { line: 943, column: 2 }, end: { line: 943, column: 58 } },
                    { start: { line: 943, column: 2 }, end: { line: 943, column: 58 } }
                  ],
                  line: 943
                },
                '19': {
                  loc: { start: { line: 944, column: 2 }, end: { line: 944, column: 35 } },
                  type: 'if',
                  locations: [
                    { start: { line: 944, column: 2 }, end: { line: 944, column: 35 } },
                    { start: { line: 944, column: 2 }, end: { line: 944, column: 35 } }
                  ],
                  line: 944
                },
                '20': {
                  loc: { start: { line: 945, column: 2 }, end: { line: 946, column: 64 } },
                  type: 'if',
                  locations: [
                    { start: { line: 945, column: 2 }, end: { line: 946, column: 64 } },
                    { start: { line: 945, column: 2 }, end: { line: 946, column: 64 } }
                  ],
                  line: 945
                },
                '21': {
                  loc: { start: { line: 968, column: 2 }, end: { line: 987, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 968, column: 2 }, end: { line: 987, column: 3 } },
                    { start: { line: 968, column: 2 }, end: { line: 987, column: 3 } }
                  ],
                  line: 968
                },
                '22': {
                  loc: { start: { line: 1318, column: 2 }, end: { line: 1328, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1318, column: 2 }, end: { line: 1328, column: 3 } },
                    { start: { line: 1318, column: 2 }, end: { line: 1328, column: 3 } }
                  ],
                  line: 1318
                },
                '23': {
                  loc: { start: { line: 1334, column: 2 }, end: { line: 1338, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1334, column: 2 }, end: { line: 1338, column: 3 } },
                    { start: { line: 1334, column: 2 }, end: { line: 1338, column: 3 } }
                  ],
                  line: 1334
                },
                '24': {
                  loc: { start: { line: 1340, column: 2 }, end: { line: 1344, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1340, column: 2 }, end: { line: 1344, column: 3 } },
                    { start: { line: 1340, column: 2 }, end: { line: 1344, column: 3 } }
                  ],
                  line: 1340
                },
                '25': {
                  loc: { start: { line: 1363, column: 2 }, end: { line: 1382, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1363, column: 2 }, end: { line: 1382, column: 3 } },
                    { start: { line: 1363, column: 2 }, end: { line: 1382, column: 3 } }
                  ],
                  line: 1363
                },
                '26': {
                  loc: { start: { line: 1565, column: 2 }, end: { line: 1573, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1565, column: 2 }, end: { line: 1573, column: 3 } },
                    { start: { line: 1565, column: 2 }, end: { line: 1573, column: 3 } }
                  ],
                  line: 1565
                },
                '27': {
                  loc: { start: { line: 1616, column: 2 }, end: { line: 1620, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1616, column: 2 }, end: { line: 1620, column: 3 } },
                    { start: { line: 1616, column: 2 }, end: { line: 1620, column: 3 } }
                  ],
                  line: 1616
                },
                '28': {
                  loc: { start: { line: 1640, column: 2 }, end: { line: 1644, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1640, column: 2 }, end: { line: 1644, column: 3 } },
                    { start: { line: 1640, column: 2 }, end: { line: 1644, column: 3 } }
                  ],
                  line: 1640
                },
                '29': {
                  loc: { start: { line: 1647, column: 2 }, end: { line: 1651, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1647, column: 2 }, end: { line: 1651, column: 3 } },
                    { start: { line: 1647, column: 2 }, end: { line: 1651, column: 3 } }
                  ],
                  line: 1647
                },
                '30': {
                  loc: { start: { line: 1685, column: 2 }, end: { line: 1687, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1685, column: 2 }, end: { line: 1687, column: 3 } },
                    { start: { line: 1685, column: 2 }, end: { line: 1687, column: 3 } }
                  ],
                  line: 1685
                },
                '31': {
                  loc: { start: { line: 1690, column: 2 }, end: { line: 1694, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1690, column: 2 }, end: { line: 1694, column: 3 } },
                    { start: { line: 1690, column: 2 }, end: { line: 1694, column: 3 } }
                  ],
                  line: 1690
                },
                '32': {
                  loc: { start: { line: 1692, column: 9 }, end: { line: 1694, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1692, column: 9 }, end: { line: 1694, column: 3 } },
                    { start: { line: 1692, column: 9 }, end: { line: 1694, column: 3 } }
                  ],
                  line: 1692
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0,
                '118': 0,
                '119': 0,
                '120': 0,
                '121': 0,
                '122': 0,
                '123': 0,
                '124': 0,
                '125': 0,
                '126': 0,
                '127': 0,
                '128': 0,
                '129': 0,
                '130': 0,
                '131': 0,
                '132': 0,
                '133': 0,
                '134': 0,
                '135': 0,
                '136': 0,
                '137': 0,
                '138': 0,
                '139': 0,
                '140': 0,
                '141': 0,
                '142': 0,
                '143': 0,
                '144': 0,
                '145': 0,
                '146': 0,
                '147': 0,
                '148': 0,
                '149': 0,
                '150': 0,
                '151': 0,
                '152': 0,
                '153': 0,
                '154': 0,
                '155': 0,
                '156': 0,
                '157': 0,
                '158': 0,
                '159': 0,
                '160': 0,
                '161': 0,
                '162': 0,
                '163': 0,
                '164': 0,
                '165': 0,
                '166': 0,
                '167': 0,
                '168': 0,
                '169': 0,
                '170': 0,
                '171': 0,
                '172': 0,
                '173': 0,
                '174': 0,
                '175': 0,
                '176': 0,
                '177': 0,
                '178': 0,
                '179': 0,
                '180': 0,
                '181': 0,
                '182': 0,
                '183': 0,
                '184': 0,
                '185': 0,
                '186': 0,
                '187': 0,
                '188': 0,
                '189': 0,
                '190': 0,
                '191': 0,
                '192': 0,
                '193': 0,
                '194': 0,
                '195': 0,
                '196': 0,
                '197': 0,
                '198': 0,
                '199': 0,
                '200': 0,
                '201': 0,
                '202': 0,
                '203': 0,
                '204': 0,
                '205': 0,
                '206': 0,
                '207': 0,
                '208': 0,
                '209': 0,
                '210': 0,
                '211': 0,
                '212': 0,
                '213': 0,
                '214': 0,
                '215': 0,
                '216': 0,
                '217': 0,
                '218': 0,
                '219': 0,
                '220': 0,
                '221': 0,
                '222': 0,
                '223': 0,
                '224': 0,
                '225': 0,
                '226': 0,
                '227': 0,
                '228': 0,
                '229': 0,
                '230': 0,
                '231': 0,
                '232': 0,
                '233': 0,
                '234': 0,
                '235': 0,
                '236': 0,
                '237': 0,
                '238': 0,
                '239': 0,
                '240': 0,
                '241': 0,
                '242': 0,
                '243': 0,
                '244': 0,
                '245': 0,
                '246': 0,
                '247': 0,
                '248': 0,
                '249': 0,
                '250': 0,
                '251': 0,
                '252': 0,
                '253': 0,
                '254': 0,
                '255': 0,
                '256': 0,
                '257': 0,
                '258': 0,
                '259': 0,
                '260': 0,
                '261': 0,
                '262': 0,
                '263': 0,
                '264': 0,
                '265': 0,
                '266': 0,
                '267': 0,
                '268': 0,
                '269': 0,
                '270': 0,
                '271': 0,
                '272': 0,
                '273': 0,
                '274': 0,
                '275': 0,
                '276': 0,
                '277': 0,
                '278': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0],
                '20': [0, 0],
                '21': [0, 0],
                '22': [0, 0],
                '23': [0, 0],
                '24': [0, 0],
                '25': [0, 0],
                '26': [0, 0],
                '27': [0, 0],
                '28': [0, 0],
                '29': [0, 0],
                '30': [0, 0],
                '31': [0, 0],
                '32': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '9e34a2b7704a57d42c49e20294b8495d92ff0c67'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_1uq18gp6pk.s[0]++;

          ////////////////////////////////////////////////////////////////////////////////
          // p5.Prototype Methods
          ////////////////////////////////////////////////////////////////////////////////

          /**
           * Sets the position of the current camera in a 3D sketch.
           * Parameters for this function define the camera's position,
           * the center of the sketch (where the camera is pointing),
           * and an up direction (the orientation of the camera).
           *
           * This function simulates the movements of the camera, allowing objects to be
           * viewed from various angles. Remember, it does not move the objects themselves
           * but the camera instead. For example when the centerX value is positive,
           * and the camera is rotating to the right side of the sketch,
           * the object will seem like it's moving to the left.
           *
           * See this <a href = "https://www.openprocessing.org/sketch/740258">example</a>
           * to view the position of your camera.
           *
           * If no parameters are given, the following default is used:
           * camera(0, 0, (height/2) / tan(PI/6), 0, 0, 0, 0, 1, 0)
           * @method camera
           * @constructor
           * @for p5
           * @param  {Number} [x]        camera position value on x axis
           * @param  {Number} [y]        camera position value on y axis
           * @param  {Number} [z]        camera position value on z axis
           * @param  {Number} [centerX]  x coordinate representing center of the sketch
           * @param  {Number} [centerY]  y coordinate representing center of the sketch
           * @param  {Number} [centerZ]  z coordinate representing center of the sketch
           * @param  {Number} [upX]      x component of direction 'up' from camera
           * @param  {Number} [upY]      y component of direction 'up' from camera
           * @param  {Number} [upZ]      z component of direction 'up' from camera
           * @chainable
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           * function draw() {
           *   background(204);
           *   //move the camera away from the plane by a sin wave
           *   camera(0, 0, 20 + sin(frameCount * 0.01) * 10, 0, 0, 0, 0, 1, 0);
           *   plane(10, 10);
           * }
           * </code>
           * </div>
           *
           * @example
           * <div>
           * <code>
           * //move slider to see changes!
           * //sliders control the first 6 parameters of camera()
           * let sliderGroup = [];
           * let X;
           * let Y;
           * let Z;
           * let centerX;
           * let centerY;
           * let centerZ;
           * let h = 20;
           *
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   //create sliders
           *   for (var i = 0; i < 6; i++) {
           *     if (i === 2) {
           *       sliderGroup[i] = createSlider(10, 400, 200);
           *     } else {
           *       sliderGroup[i] = createSlider(-400, 400, 0);
           *     }
           *     h = map(i, 0, 6, 5, 85);
           *     sliderGroup[i].position(10, height + h);
           *     sliderGroup[i].style('width', '80px');
           *   }
           * }
           *
           * function draw() {
           *   background(60);
           *   // assigning sliders' value to each parameters
           *   X = sliderGroup[0].value();
           *   Y = sliderGroup[1].value();
           *   Z = sliderGroup[2].value();
           *   centerX = sliderGroup[3].value();
           *   centerY = sliderGroup[4].value();
           *   centerZ = sliderGroup[5].value();
           *   camera(X, Y, Z, centerX, centerY, centerZ, 0, 1, 0);
           *   stroke(255);
           *   fill(255, 102, 94);
           *   box(85);
           * }
           * </code>
           * </div>
           * @alt
           * White square repeatedly grows to fill canvas and then shrinks.
           * An interactive example of a red cube with 3 sliders for moving it across x, y,
           * z axis and 3 sliders for shifting it's center.
           */
          _main.default.prototype.camera = function() {
            var _this$_renderer$_curC;
            cov_1uq18gp6pk.f[0]++;
            cov_1uq18gp6pk.s[1]++;
            this._assert3d('camera');
            cov_1uq18gp6pk.s[2]++;
            for (
              var _len = arguments.length, args = new Array(_len), _key = 0;
              _key < _len;
              _key++
            ) {
              args[_key] = arguments[_key];
            }
            _main.default._validateParameters('camera', args);
            cov_1uq18gp6pk.s[3]++;
            (_this$_renderer$_curC = this._renderer._curCamera).camera.apply(
              _this$_renderer$_curC,
              args
            );
            cov_1uq18gp6pk.s[4]++;
            return this;
          };

          /**
           * Sets a perspective projection for the current camera in a 3D sketch.
           * This projection represents depth through foreshortening: objects
           * that are close to the camera appear their actual size while those
           * that are further away from the camera appear smaller.
           *
           * The parameters to this function define the viewing frustum
           * (the truncated pyramid within which objects are seen by the camera) through
           * vertical field of view, aspect ratio (usually width/height), and near and far
           * clipping planes.
           *
           * If no parameters are given, the following default is used:
           * perspective(PI/3, width/height, eyeZ/10, eyeZ*10),
           * where eyeZ is equal to ((height/2) / tan(PI/6)).
           * @method  perspective
           * @for p5
           * @param  {Number} [fovy]   camera frustum vertical field of view,
           *                           from bottom to top of view, in <a href="#/p5/angleMode">angleMode</a> units
           * @param  {Number} [aspect] camera frustum aspect ratio
           * @param  {Number} [near]   frustum near plane length
           * @param  {Number} [far]    frustum far plane length
           * @chainable
           * @example
           * <div>
           * <code>
           * //drag the mouse to look around!
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   perspective(PI / 3.0, width / height, 0.1, 500);
           * }
           * function draw() {
           *   background(200);
           *   orbitControl();
           *   normalMaterial();
           *
           *   rotateX(-0.3);
           *   rotateY(-0.2);
           *   translate(0, 0, -50);
           *
           *   push();
           *   translate(-15, 0, sin(frameCount / 30) * 95);
           *   box(30);
           *   pop();
           *   push();
           *   translate(15, 0, sin(frameCount / 30 + PI) * 95);
           *   box(30);
           *   pop();
           * }
           * </code>
           * </div>
           *
           * @alt
           * two colored 3D boxes move back and forth, rotating as mouse is dragged.
           */ cov_1uq18gp6pk.s[5]++;
          _main.default.prototype.perspective = function() {
            var _this$_renderer$_curC2;
            cov_1uq18gp6pk.f[1]++;
            cov_1uq18gp6pk.s[6]++;
            this._assert3d('perspective');
            cov_1uq18gp6pk.s[7]++;
            for (
              var _len2 = arguments.length, args = new Array(_len2), _key2 = 0;
              _key2 < _len2;
              _key2++
            ) {
              args[_key2] = arguments[_key2];
            }
            _main.default._validateParameters('perspective', args);
            cov_1uq18gp6pk.s[8]++;
            (_this$_renderer$_curC2 = this._renderer._curCamera).perspective.apply(
              _this$_renderer$_curC2,
              args
            );
            cov_1uq18gp6pk.s[9]++;
            return this;
          };

          /**
           * Sets an orthographic projection for the current camera in a 3D sketch
           * and defines a box-shaped viewing frustum within which objects are seen.
           * In this projection, all objects with the same dimension appear the same
           * size, regardless of whether they are near or far from the camera.
           *
           * The parameters to this function specify the viewing frustum where
           * left and right are the minimum and maximum x values, top and bottom are
           * the minimum and maximum y values, and near and far are the minimum and
           * maximum z values.
           *
           * If no parameters are given, the following default is used:
           * ortho(-width/2, width/2, -height/2, height/2).
           * @method  ortho
           * @for p5
           * @param  {Number} [left]   camera frustum left plane
           * @param  {Number} [right]  camera frustum right plane
           * @param  {Number} [bottom] camera frustum bottom plane
           * @param  {Number} [top]    camera frustum top plane
           * @param  {Number} [near]   camera frustum near plane
           * @param  {Number} [far]    camera frustum far plane
           * @chainable
           * @example
           * <div>
           * <code>
           * //drag the mouse to look around!
           * //there's no vanishing point
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   ortho(-width / 2, width / 2, height / 2, -height / 2, 0, 500);
           * }
           * function draw() {
           *   background(200);
           *   orbitControl();
           *   normalMaterial();
           *
           *   rotateX(0.2);
           *   rotateY(-0.2);
           *   push();
           *   translate(-15, 0, sin(frameCount / 30) * 65);
           *   box(30);
           *   pop();
           *   push();
           *   translate(15, 0, sin(frameCount / 30 + PI) * 65);
           *   box(30);
           *   pop();
           * }
           * </code>
           * </div>
           *
           * @alt
           * two 3D boxes move back and forth along same plane, rotating as mouse is dragged.
           */ cov_1uq18gp6pk.s[10]++;
          _main.default.prototype.ortho = function() {
            var _this$_renderer$_curC3;
            cov_1uq18gp6pk.f[2]++;
            cov_1uq18gp6pk.s[11]++;
            this._assert3d('ortho');
            cov_1uq18gp6pk.s[12]++;
            for (
              var _len3 = arguments.length, args = new Array(_len3), _key3 = 0;
              _key3 < _len3;
              _key3++
            ) {
              args[_key3] = arguments[_key3];
            }
            _main.default._validateParameters('ortho', args);
            cov_1uq18gp6pk.s[13]++;
            (_this$_renderer$_curC3 = this._renderer._curCamera).ortho.apply(
              _this$_renderer$_curC3,
              args
            );
            cov_1uq18gp6pk.s[14]++;
            return this;
          };

          /**
           * Sets the frustum of the current camera as defined by
           * the parameters.
           *
           * A frustum is a geometric form: a pyramid with its top
           * cut off. With the viewer's eye at the imaginary top of
           * the pyramid, the six planes of the frustum act as clipping
           * planes when rendering a 3D view. Thus, any form inside the
           * clipping planes is visible; anything outside
           * those planes is not visible.
           *
           * Setting the frustum changes the perspective of the scene being rendered.
           * This can be achieved more simply in many cases by using
           * <a href="https://p5js.org/reference/#/p5/perspective">perspective()</a>.
           *
           * If no parameters are given, the following default is used:
           * frustum(-width/2, width/2, -height/2, height/2, 0, max(width, height)).
           * @method frustum
           * @for p5
           * @param  {Number} [left]   camera frustum left plane
           * @param  {Number} [right]  camera frustum right plane
           * @param  {Number} [bottom] camera frustum bottom plane
           * @param  {Number} [top]    camera frustum top plane
           * @param  {Number} [near]   camera frustum near plane
           * @param  {Number} [far]    camera frustum far plane
           * @chainable
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   setAttributes('antialias', true);
           *   frustum(-0.1, 0.1, -0.1, 0.1, 0.1, 200);
           * }
           * function draw() {
           *   background(200);
           *   orbitControl();
           *   normalMaterial();
           *
           *   rotateY(-0.2);
           *   rotateX(-0.3);
           *   push();
           *   translate(-15, 0, sin(frameCount / 30) * 25);
           *   box(30);
           *   pop();
           *   push();
           *   translate(15, 0, sin(frameCount / 30 + PI) * 25);
           *   box(30);
           *   pop();
           * }
           * </code>
           * </div>
           *
           * @alt
           * two 3D boxes move back and forth along same plane, rotating as mouse is dragged.
           */ cov_1uq18gp6pk.s[15]++;
          _main.default.prototype.frustum = function() {
            var _this$_renderer$_curC4;
            cov_1uq18gp6pk.f[3]++;
            cov_1uq18gp6pk.s[16]++;
            this._assert3d('frustum');
            cov_1uq18gp6pk.s[17]++;
            for (
              var _len4 = arguments.length, args = new Array(_len4), _key4 = 0;
              _key4 < _len4;
              _key4++
            ) {
              args[_key4] = arguments[_key4];
            }
            _main.default._validateParameters('frustum', args);
            cov_1uq18gp6pk.s[18]++;
            (_this$_renderer$_curC4 = this._renderer._curCamera).frustum.apply(
              _this$_renderer$_curC4,
              args
            );
            cov_1uq18gp6pk.s[19]++;
            return this;
          };

          ////////////////////////////////////////////////////////////////////////////////
          // p5.Camera
          ////////////////////////////////////////////////////////////////////////////////

          /**
           * Creates a new <a href="#/p5.Camera">p5.Camera</a> object and sets it
           * as the current (active) camera.
           *
           * The new camera is initialized with a default position
           * (see <a href="#/p5.Camera/camera">camera()</a>)
           * and a default perspective projection
           * (see <a href="#/p5.Camera/perspective">perspective()</a>).
           * Its properties can be controlled with the <a href="#/p5.Camera">p5.Camera</a>
           * methods.
           *
           * Note: Every 3D sketch starts with a default camera initialized.
           * This camera can be controlled with the global methods
           * <a href="#/p5/camera">camera()</a>,
           * <a href="#/p5/perspective">perspective()</a>, <a href="#/p5/ortho">ortho()</a>,
           * and <a href="#/p5/frustum">frustum()</a> if it is the only camera
           * in the scene.
           * @method createCamera
           * @return {p5.Camera} The newly created camera object.
           * @for p5
           * @example
           * <div><code>
           * // Creates a camera object and animates it around a box.
           * let camera;
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   background(0);
           *   camera = createCamera();
           * }
           *
           * function draw() {
           *   camera.lookAt(0, 0, 0);
           *   camera.setPosition(sin(frameCount / 60) * 200, 0, 100);
           *   box(20);
           * }
           * </code></div>
           *
           * @alt
           * An example that creates a camera and moves it around the box.
           */ cov_1uq18gp6pk.s[20]++;
          _main.default.prototype.createCamera = function() {
            cov_1uq18gp6pk.f[4]++;
            cov_1uq18gp6pk.s[21]++;
            this._assert3d('createCamera');
            var _cam = (cov_1uq18gp6pk.s[22]++, new _main.default.Camera(this._renderer));

            // compute default camera settings, then set a default camera
            cov_1uq18gp6pk.s[23]++;
            _cam._computeCameraDefaultSettings();
            cov_1uq18gp6pk.s[24]++;
            _cam._setDefaultCamera();

            // set renderer current camera to the new camera
            cov_1uq18gp6pk.s[25]++;
            this._renderer._curCamera = _cam;
            cov_1uq18gp6pk.s[26]++;

            return _cam;
          };

          /**
           * This class describes a camera for use in p5's
           * <a href="https://github.com/processing/p5.js/wiki/Getting-started-with-WebGL-in-p5">
           * WebGL mode</a>. It contains camera position, orientation, and projection
           * information necessary for rendering a 3D scene.
           *
           * New p5.Camera objects can be made through the
           * <a href="#/p5/createCamera">createCamera()</a> function and controlled through
           * the methods described below. A camera created in this way will use a default
           * position in the scene and a default perspective projection until these
           * properties are changed through the various methods available. It is possible
           * to create multiple cameras, in which case the current camera
           * can be set through the <a href="#/p5/setCamera">setCamera()</a> method.
           *
           * Note:
           * The methods below operate in two coordinate systems: the 'world' coordinate
           * system describe positions in terms of their relationship to the origin along
           * the X, Y and Z axes whereas the camera's 'local' coordinate system
           * describes positions from the camera's point of view: left-right, up-down,
           * and forward-backward. The <a href="#/p5.Camera/move">move()</a> method,
           * for instance, moves the camera along its own axes, whereas the
           * <a href="#/p5.Camera/setPosition">setPosition()</a>
           * method sets the camera's position in world-space.
           *
           * The camera object propreties
           * <code>eyeX, eyeY, eyeZ, centerX, centerY, centerZ, upX, upY, upZ</code>
           * which describes camera position, orientation, and projection
           * are also accessible via the camera object generated using
           * <a href="#/p5/createCamera">createCamera()</a>
           *
           * @class p5.Camera
           * @param {rendererGL} rendererGL instance of WebGL renderer
           * @example
           * <div>
           * <code>
           * let cam;
           * let delta = 0.01;
           *
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   normalMaterial();
           *   cam = createCamera();
           *   // set initial pan angle
           *   cam.pan(-0.8);
           * }
           *
           * function draw() {
           *   background(200);
           *
           *   // pan camera according to angle 'delta'
           *   cam.pan(delta);
           *
           *   // every 160 frames, switch direction
           *   if (frameCount % 160 === 0) {
           *     delta *= -1;
           *   }
           *
           *   rotateX(frameCount * 0.01);
           *   translate(-100, 0, 0);
           *   box(20);
           *   translate(35, 0, 0);
           *   box(20);
           *   translate(35, 0, 0);
           *   box(20);
           *   translate(35, 0, 0);
           *   box(20);
           *   translate(35, 0, 0);
           *   box(20);
           *   translate(35, 0, 0);
           *   box(20);
           *   translate(35, 0, 0);
           *   box(20);
           * }
           * </code>
           * </div>
           *
           * @alt
           * camera view pans left and right across a series of rotating 3D boxes.
           */ cov_1uq18gp6pk.s[27]++;
          _main.default.Camera = function(renderer) {
            cov_1uq18gp6pk.f[5]++;
            cov_1uq18gp6pk.s[28]++;
            this._renderer = renderer;
            cov_1uq18gp6pk.s[29]++;

            this.cameraType = 'default';
            cov_1uq18gp6pk.s[30]++;

            this.cameraMatrix = new _main.default.Matrix();
            cov_1uq18gp6pk.s[31]++;
            this.projMatrix = new _main.default.Matrix();
          };
          /**
           * camera position value on x axis
           * @property {Number} eyeX
           * @readonly
           * @example
           *
           * <div class='norender'><code>
           * let cam, div;
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   background(0);
           *   cam = createCamera();
           *   div = createDiv();
           *   div.position(0, 0);
           * }
           *
           * function draw() {
           *   orbitControl();
           *   box(10);
           *   div.html('eyeX = ' + cam.eyeX);
           * }
           * </code></div>
           *
           * @alt
           * An example showing the use of camera object properties
           *
           */

          /**
           * camera position value on y axis
           * @property {Number} eyeY
           * @readonly
           * @example
           * <div class='norender'><code>
           * let cam, div;
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   background(0);
           *   cam = createCamera();
           *   div = createDiv();
           *   div.position(0, 0);
           * }
           *
           * function draw() {
           *   orbitControl();
           *   box(10);
           *   div.html('eyeY = ' + cam.eyeY);
           * }
           * </code></div>
           *
           * @alt
           * An example showing the use of camera object properties
           *
           */

          /**
           * camera position value on z axis
           * @property {Number} eyeZ
           * @readonly
           * @example
           * <div class='norender'><code>
           * let cam, div;
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   background(0);
           *   cam = createCamera();
           *   div = createDiv();
           *   div.position(0, 0);
           * }
           *
           * function draw() {
           *   orbitControl();
           *   box(10);
           *   div.html('eyeZ = ' + cam.eyeZ);
           * }
           * </code></div>
           *
           * @alt
           * An example showing the use of camera object properties
           *
           */

          /**
           * x coordinate representing center of the sketch
           * @property {Number} centerX
           * @readonly
           * @example
           * <div class='norender'><code>
           * let cam, div;
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   background(255);
           *   cam = createCamera();
           *   cam.lookAt(1, 0, 0);
           *   div = createDiv('centerX = ' + cam.centerX);
           *   div.position(0, 0);
           *   div.style('color', 'white');
           * }
           *
           * function draw() {
           *   orbitControl();
           *   box(10);
           * }
           * </code></div>
           *
           * @alt
           * An example showing the use of camera object properties
           *
           */

          /**
           * y coordinate representing center of the sketch
           * @property {Number} centerY
           * @readonly
           * @example
           * <div class='norender'><code>
           * let cam, div;
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   background(255);
           *   cam = createCamera();
           *   cam.lookAt(0, 1, 0);
           *   div = createDiv('centerY = ' + cam.centerY);
           *   div.position(0, 0);
           *   div.style('color', 'white');
           * }
           *
           * function draw() {
           *   orbitControl();
           *   box(10);
           * }
           * </code></div>
           *
           * @alt
           * An example showing the use of camera object properties
           *
           */

          /**
           * z coordinate representing center of the sketch
           * @property {Number} centerZ
           * @readonly
           * @example
           * <div class='norender'><code>
           * let cam, div;
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   background(255);
           *   cam = createCamera();
           *   cam.lookAt(0, 0, 1);
           *   div = createDiv('centerZ = ' + cam.centerZ);
           *   div.position(0, 0);
           *   div.style('color', 'white');
           * }
           *
           * function draw() {
           *   orbitControl();
           *   box(10);
           * }
           * </code></div>
           *
           * @alt
           * An example showing the use of camera object properties
           *
           */

          /**
           * x component of direction 'up' from camera
           * @property {Number} upX
           * @readonly
           * @example
           * <div class='norender'><code>
           * let cam, div;
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   background(255);
           *   cam = createCamera();
           *   div = createDiv('upX = ' + cam.upX);
           *   div.position(0, 0);
           *   div.style('color', 'blue');
           *   div.style('font-size', '18px');
           * }
           * </code></div>
           *
           * @alt
           * An example showing the use of camera object properties
           *
           */

          /**
           * y component of direction 'up' from camera
           * @property {Number} upY
           * @readonly
           * @example
           * <div class='norender'><code>
           * let cam, div;
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   background(255);
           *   cam = createCamera();
           *   div = createDiv('upY = ' + cam.upY);
           *   div.position(0, 0);
           *   div.style('color', 'blue');
           *   div.style('font-size', '18px');
           * }
           * </code></div>
           *
           * @alt
           * An example showing the use of camera object properties
           *
           */

          /**
           * z component of direction 'up' from camera
           * @property {Number} upZ
           * @readonly
           * @example
           * <div class='norender'><code>
           * let cam, div;
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   background(255);
           *   cam = createCamera();
           *   div = createDiv('upZ = ' + cam.upZ);
           *   div.position(0, 0);
           *   div.style('color', 'blue');
           *   div.style('font-size', '18px');
           * }
           * </code></div>
           *
           * @alt
           * An example showing the use of camera object properties
           *
           */

          ////////////////////////////////////////////////////////////////////////////////
          // Camera Projection Methods
          ////////////////////////////////////////////////////////////////////////////////

          /**
           * Sets a perspective projection.
           * Accepts the same parameters as the global
           * <a href="#/p5/perspective">perspective()</a>.
           * More information on this function can be found there.
           * @method perspective
           * @for p5.Camera
           * @example
           * <div>
           * <code>
           * // drag the mouse to look around!
           *
           * let cam;
           *
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   // create a camera
           *   cam = createCamera();
           *   // give it a perspective projection
           *   cam.perspective(PI / 3.0, width / height, 0.1, 500);
           * }
           *
           * function draw() {
           *   background(200);
           *   orbitControl();
           *   normalMaterial();
           *
           *   rotateX(-0.3);
           *   rotateY(-0.2);
           *   translate(0, 0, -50);
           *
           *   push();
           *   translate(-15, 0, sin(frameCount / 30) * 95);
           *   box(30);
           *   pop();
           *   push();
           *   translate(15, 0, sin(frameCount / 30 + PI) * 95);
           *   box(30);
           *   pop();
           * }
           * </code>
           * </div>
           * @alt
           * two colored 3D boxes move back and forth, rotating as mouse is dragged.
           */ cov_1uq18gp6pk.s[32]++;
          _main.default.Camera.prototype.perspective = function(fovy, aspect, near, far) {
            cov_1uq18gp6pk.f[6]++;
            cov_1uq18gp6pk.s[33]++;
            this.cameraType =
              arguments.length > 0
                ? (cov_1uq18gp6pk.b[0][0]++, 'custom')
                : (cov_1uq18gp6pk.b[0][1]++, 'default');
            cov_1uq18gp6pk.s[34]++;
            if (typeof fovy === 'undefined') {
              cov_1uq18gp6pk.b[1][0]++;
              cov_1uq18gp6pk.s[35]++;
              fovy = this.defaultCameraFOV;
              // this avoids issue where setting angleMode(DEGREES) before calling
              // perspective leads to a smaller than expected FOV (because
              // _computeCameraDefaultSettings computes in radians)
              cov_1uq18gp6pk.s[36]++;
              this.cameraFOV = fovy;
            } else {
              cov_1uq18gp6pk.b[1][1]++;
              cov_1uq18gp6pk.s[37]++;
              this.cameraFOV = this._renderer._pInst._toRadians(fovy);
            }
            cov_1uq18gp6pk.s[38]++;
            if (typeof aspect === 'undefined') {
              cov_1uq18gp6pk.b[2][0]++;
              cov_1uq18gp6pk.s[39]++;
              aspect = this.defaultAspectRatio;
            } else {
              cov_1uq18gp6pk.b[2][1]++;
            }
            cov_1uq18gp6pk.s[40]++;
            if (typeof near === 'undefined') {
              cov_1uq18gp6pk.b[3][0]++;
              cov_1uq18gp6pk.s[41]++;
              near = this.defaultCameraNear;
            } else {
              cov_1uq18gp6pk.b[3][1]++;
            }
            cov_1uq18gp6pk.s[42]++;
            if (typeof far === 'undefined') {
              cov_1uq18gp6pk.b[4][0]++;
              cov_1uq18gp6pk.s[43]++;
              far = this.defaultCameraFar;
            } else {
              cov_1uq18gp6pk.b[4][1]++;
            }
            cov_1uq18gp6pk.s[44]++;

            if (near <= 0.0001) {
              cov_1uq18gp6pk.b[5][0]++;
              cov_1uq18gp6pk.s[45]++;
              near = 0.01;
              cov_1uq18gp6pk.s[46]++;
              console.log(
                'Avoid perspective near plane values close to or below 0. ' +
                  'Setting value to 0.01.'
              );
            } else {
              cov_1uq18gp6pk.b[5][1]++;
            }
            cov_1uq18gp6pk.s[47]++;

            if (far < near) {
              cov_1uq18gp6pk.b[6][0]++;
              cov_1uq18gp6pk.s[48]++;
              console.log(
                'Perspective far plane value is less than near plane value. ' +
                  'Nothing will be shown.'
              );
            } else {
              cov_1uq18gp6pk.b[6][1]++;
            }
            cov_1uq18gp6pk.s[49]++;

            this.aspectRatio = aspect;
            cov_1uq18gp6pk.s[50]++;
            this.cameraNear = near;
            cov_1uq18gp6pk.s[51]++;
            this.cameraFar = far;
            cov_1uq18gp6pk.s[52]++;

            this.projMatrix = _main.default.Matrix.identity();

            var f = (cov_1uq18gp6pk.s[53]++, 1.0 / Math.tan(this.cameraFOV / 2));
            var nf = (cov_1uq18gp6pk.s[54]++, 1.0 / (this.cameraNear - this.cameraFar));

            // prettier-ignore
            cov_1uq18gp6pk.s[55]++;
            this.projMatrix.set(
              f / aspect,
              0,
              0,
              0,
              0,
              -f,
              0,
              0,
              0,
              0,
              (far + near) * nf,
              -1,
              0,
              0,
              2 * far * near * nf,
              0
            );
            cov_1uq18gp6pk.s[56]++;

            if (this._isActive()) {
              cov_1uq18gp6pk.b[7][0]++;
              cov_1uq18gp6pk.s[57]++;
              this._renderer.uPMatrix.set(
                this.projMatrix.mat4[0],
                this.projMatrix.mat4[1],
                this.projMatrix.mat4[2],
                this.projMatrix.mat4[3],
                this.projMatrix.mat4[4],
                this.projMatrix.mat4[5],
                this.projMatrix.mat4[6],
                this.projMatrix.mat4[7],
                this.projMatrix.mat4[8],
                this.projMatrix.mat4[9],
                this.projMatrix.mat4[10],
                this.projMatrix.mat4[11],
                this.projMatrix.mat4[12],
                this.projMatrix.mat4[13],
                this.projMatrix.mat4[14],
                this.projMatrix.mat4[15]
              );
            } else {
              cov_1uq18gp6pk.b[7][1]++;
            }
          };

          /**
           * Sets an orthographic projection.
           * Accepts the same parameters as the global
           * <a href="#/p5/ortho">ortho()</a>.
           * More information on this function can be found there.
           * @method ortho
           * @for p5.Camera
           * @example
           * <div>
           * <code>
           * // drag the mouse to look around!
           * // there's no vanishing point
           *
           * let cam;
           *
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   // create a camera
           *   cam = createCamera();
           *   // give it an orthographic projection
           *   cam.ortho(-width / 2, width / 2, height / 2, -height / 2, 0, 500);
           * }
           * function draw() {
           *   background(200);
           *   orbitControl();
           *   normalMaterial();
           *
           *   rotateX(0.2);
           *   rotateY(-0.2);
           *   push();
           *   translate(-15, 0, sin(frameCount / 30) * 65);
           *   box(30);
           *   pop();
           *   push();
           *   translate(15, 0, sin(frameCount / 30 + PI) * 65);
           *   box(30);
           *   pop();
           * }
           * </code>
           * </div>
           * @alt
           * two 3D boxes move back and forth along same plane, rotating as mouse is dragged.
           */ cov_1uq18gp6pk.s[58]++;
          _main.default.Camera.prototype.ortho = function(
            left,
            right,
            bottom,
            top,
            near,
            far
          ) {
            cov_1uq18gp6pk.f[7]++;
            cov_1uq18gp6pk.s[59]++;
            if (left === undefined) {
              cov_1uq18gp6pk.b[8][0]++;
              cov_1uq18gp6pk.s[60]++;
              left = -this._renderer.width / 2;
            } else {
              cov_1uq18gp6pk.b[8][1]++;
            }
            cov_1uq18gp6pk.s[61]++;
            if (right === undefined) {
              cov_1uq18gp6pk.b[9][0]++;
              cov_1uq18gp6pk.s[62]++;
              right = +this._renderer.width / 2;
            } else {
              cov_1uq18gp6pk.b[9][1]++;
            }
            cov_1uq18gp6pk.s[63]++;
            if (bottom === undefined) {
              cov_1uq18gp6pk.b[10][0]++;
              cov_1uq18gp6pk.s[64]++;
              bottom = -this._renderer.height / 2;
            } else {
              cov_1uq18gp6pk.b[10][1]++;
            }
            cov_1uq18gp6pk.s[65]++;
            if (top === undefined) {
              cov_1uq18gp6pk.b[11][0]++;
              cov_1uq18gp6pk.s[66]++;
              top = +this._renderer.height / 2;
            } else {
              cov_1uq18gp6pk.b[11][1]++;
            }
            cov_1uq18gp6pk.s[67]++;
            if (near === undefined) {
              cov_1uq18gp6pk.b[12][0]++;
              cov_1uq18gp6pk.s[68]++;
              near = 0;
            } else {
              cov_1uq18gp6pk.b[12][1]++;
            }
            cov_1uq18gp6pk.s[69]++;
            if (far === undefined) {
              cov_1uq18gp6pk.b[13][0]++;
              cov_1uq18gp6pk.s[70]++;
              far = Math.max(this._renderer.width, this._renderer.height);
            } else {
              cov_1uq18gp6pk.b[13][1]++;
            }

            var w = (cov_1uq18gp6pk.s[71]++, right - left);
            var h = (cov_1uq18gp6pk.s[72]++, top - bottom);
            var d = (cov_1uq18gp6pk.s[73]++, far - near);

            var x = (cov_1uq18gp6pk.s[74]++, +2.0 / w);
            var y = (cov_1uq18gp6pk.s[75]++, +2.0 / h);
            var z = (cov_1uq18gp6pk.s[76]++, -2.0 / d);

            var tx = (cov_1uq18gp6pk.s[77]++, -(right + left) / w);
            var ty = (cov_1uq18gp6pk.s[78]++, -(top + bottom) / h);
            var tz = (cov_1uq18gp6pk.s[79]++, -(far + near) / d);
            cov_1uq18gp6pk.s[80]++;

            this.projMatrix = _main.default.Matrix.identity();

            // prettier-ignore
            cov_1uq18gp6pk.s[81]++;
            this.projMatrix.set(x, 0, 0, 0, 0, -y, 0, 0, 0, 0, z, 0, tx, ty, tz, 1);
            cov_1uq18gp6pk.s[82]++;

            if (this._isActive()) {
              cov_1uq18gp6pk.b[14][0]++;
              cov_1uq18gp6pk.s[83]++;
              this._renderer.uPMatrix.set(
                this.projMatrix.mat4[0],
                this.projMatrix.mat4[1],
                this.projMatrix.mat4[2],
                this.projMatrix.mat4[3],
                this.projMatrix.mat4[4],
                this.projMatrix.mat4[5],
                this.projMatrix.mat4[6],
                this.projMatrix.mat4[7],
                this.projMatrix.mat4[8],
                this.projMatrix.mat4[9],
                this.projMatrix.mat4[10],
                this.projMatrix.mat4[11],
                this.projMatrix.mat4[12],
                this.projMatrix.mat4[13],
                this.projMatrix.mat4[14],
                this.projMatrix.mat4[15]
              );
            } else {
              cov_1uq18gp6pk.b[14][1]++;
            }
            cov_1uq18gp6pk.s[84]++;

            this.cameraType = 'custom';
          };

          /**
           * Sets the camera's frustum.
           * Accepts the same parameters as the global
           * <a href="#/p5/frustum">frustum()</a>.
           * More information on this function can be found there.
           * @method frustum
           * @for p5.Camera
           * @example
           * <div>
           * <code>
           * let cam;
           *
           * function setup() {
           *   x = createCanvas(100, 100, WEBGL);
           *   setAttributes('antialias', true);
           *   // create a camera
           *   cam = createCamera();
           *   // set its frustum
           *   cam.frustum(-0.1, 0.1, -0.1, 0.1, 0.1, 200);
           * }
           *
           * function draw() {
           *   background(200);
           *   orbitControl();
           *   normalMaterial();
           *
           *   rotateY(-0.2);
           *   rotateX(-0.3);
           *   push();
           *   translate(-15, 0, sin(frameCount / 30) * 25);
           *   box(30);
           *   pop();
           *   push();
           *   translate(15, 0, sin(frameCount / 30 + PI) * 25);
           *   box(30);
           *   pop();
           * }
           * </code>
           * </div>
           * @alt
           * two 3D boxes move back and forth along same plane, rotating as mouse is dragged.
           */ cov_1uq18gp6pk.s[85]++;
          _main.default.Camera.prototype.frustum = function(
            left,
            right,
            bottom,
            top,
            near,
            far
          ) {
            cov_1uq18gp6pk.f[8]++;
            cov_1uq18gp6pk.s[86]++;
            if (left === undefined) {
              cov_1uq18gp6pk.b[15][0]++;
              cov_1uq18gp6pk.s[87]++;
              left = -this._renderer.width / 2;
            } else {
              cov_1uq18gp6pk.b[15][1]++;
            }
            cov_1uq18gp6pk.s[88]++;
            if (right === undefined) {
              cov_1uq18gp6pk.b[16][0]++;
              cov_1uq18gp6pk.s[89]++;
              right = +this._renderer.width / 2;
            } else {
              cov_1uq18gp6pk.b[16][1]++;
            }
            cov_1uq18gp6pk.s[90]++;
            if (bottom === undefined) {
              cov_1uq18gp6pk.b[17][0]++;
              cov_1uq18gp6pk.s[91]++;
              bottom = -this._renderer.height / 2;
            } else {
              cov_1uq18gp6pk.b[17][1]++;
            }
            cov_1uq18gp6pk.s[92]++;
            if (top === undefined) {
              cov_1uq18gp6pk.b[18][0]++;
              cov_1uq18gp6pk.s[93]++;
              top = +this._renderer.height / 2;
            } else {
              cov_1uq18gp6pk.b[18][1]++;
            }
            cov_1uq18gp6pk.s[94]++;
            if (near === undefined) {
              cov_1uq18gp6pk.b[19][0]++;
              cov_1uq18gp6pk.s[95]++;
              near = 0;
            } else {
              cov_1uq18gp6pk.b[19][1]++;
            }
            cov_1uq18gp6pk.s[96]++;
            if (far === undefined) {
              cov_1uq18gp6pk.b[20][0]++;
              cov_1uq18gp6pk.s[97]++;
              far = Math.max(this._renderer.width, this._renderer.height);
            } else {
              cov_1uq18gp6pk.b[20][1]++;
            }

            var w = (cov_1uq18gp6pk.s[98]++, right - left);
            var h = (cov_1uq18gp6pk.s[99]++, top - bottom);
            var d = (cov_1uq18gp6pk.s[100]++, far - near);

            var x = (cov_1uq18gp6pk.s[101]++, +(2.0 * near) / w);
            var y = (cov_1uq18gp6pk.s[102]++, +(2.0 * near) / h);
            var z = (cov_1uq18gp6pk.s[103]++, -(2.0 * far * near) / d);

            var tx = (cov_1uq18gp6pk.s[104]++, (right + left) / w);
            var ty = (cov_1uq18gp6pk.s[105]++, (top + bottom) / h);
            var tz = (cov_1uq18gp6pk.s[106]++, -(far + near) / d);
            cov_1uq18gp6pk.s[107]++;

            this.projMatrix = _main.default.Matrix.identity();

            // prettier-ignore
            cov_1uq18gp6pk.s[108]++;
            this.projMatrix.set(x, 0, 0, 0, 0, y, 0, 0, tx, ty, tz, -1, 0, 0, z, 0);
            cov_1uq18gp6pk.s[109]++;

            if (this._isActive()) {
              cov_1uq18gp6pk.b[21][0]++;
              cov_1uq18gp6pk.s[110]++;
              this._renderer.uPMatrix.set(
                this.projMatrix.mat4[0],
                this.projMatrix.mat4[1],
                this.projMatrix.mat4[2],
                this.projMatrix.mat4[3],
                this.projMatrix.mat4[4],
                this.projMatrix.mat4[5],
                this.projMatrix.mat4[6],
                this.projMatrix.mat4[7],
                this.projMatrix.mat4[8],
                this.projMatrix.mat4[9],
                this.projMatrix.mat4[10],
                this.projMatrix.mat4[11],
                this.projMatrix.mat4[12],
                this.projMatrix.mat4[13],
                this.projMatrix.mat4[14],
                this.projMatrix.mat4[15]
              );
            } else {
              cov_1uq18gp6pk.b[21][1]++;
            }
            cov_1uq18gp6pk.s[111]++;

            this.cameraType = 'custom';
          };

          ////////////////////////////////////////////////////////////////////////////////
          // Camera Orientation Methods
          ////////////////////////////////////////////////////////////////////////////////

          /**
           * Rotate camera view about arbitrary axis defined by x,y,z
           * based on http://learnwebgl.brown37.net/07_cameras/camera_rotating_motion.html
           * @method _rotateView
           * @private
           */ cov_1uq18gp6pk.s[112]++;
          _main.default.Camera.prototype._rotateView = function(a, x, y, z) {
            cov_1uq18gp6pk.f[9]++;
            var centerX = (cov_1uq18gp6pk.s[113]++, this.centerX);
            var centerY = (cov_1uq18gp6pk.s[114]++, this.centerY);
            var centerZ = (cov_1uq18gp6pk.s[115]++, this.centerZ);

            // move center by eye position such that rotation happens around eye position
            cov_1uq18gp6pk.s[116]++;
            centerX -= this.eyeX;
            cov_1uq18gp6pk.s[117]++;
            centerY -= this.eyeY;
            cov_1uq18gp6pk.s[118]++;
            centerZ -= this.eyeZ;

            var rotation = (cov_1uq18gp6pk.s[119]++,
            _main.default.Matrix.identity(this._renderer._pInst));
            cov_1uq18gp6pk.s[120]++;
            rotation.rotate(this._renderer._pInst._toRadians(a), x, y, z);

            // prettier-ignore
            var rotatedCenter = (cov_1uq18gp6pk.s[121]++, [
  centerX * rotation.mat4[0] + centerY * rotation.mat4[4] + centerZ * rotation.mat4[8],
  centerX * rotation.mat4[1] + centerY * rotation.mat4[5] + centerZ * rotation.mat4[9],
  centerX * rotation.mat4[2] + centerY * rotation.mat4[6] + centerZ * rotation.mat4[10]]);

            // add eye position back into center
            cov_1uq18gp6pk.s[122]++;
            rotatedCenter[0] += this.eyeX;
            cov_1uq18gp6pk.s[123]++;
            rotatedCenter[1] += this.eyeY;
            cov_1uq18gp6pk.s[124]++;
            rotatedCenter[2] += this.eyeZ;
            cov_1uq18gp6pk.s[125]++;

            this.camera(
              this.eyeX,
              this.eyeY,
              this.eyeZ,
              rotatedCenter[0],
              rotatedCenter[1],
              rotatedCenter[2],
              this.upX,
              this.upY,
              this.upZ
            );
          };

          /**
           * Panning rotates the camera view to the left and right.
           * @method pan
           * @param {Number} angle amount to rotate camera in current
           * <a href="#/p5/angleMode">angleMode</a> units.
           * Greater than 0 values rotate counterclockwise (to the left).
           * @example
           * <div>
           * <code>
           * let cam;
           * let delta = 0.01;
           *
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   normalMaterial();
           *   cam = createCamera();
           *   // set initial pan angle
           *   cam.pan(-0.8);
           * }
           *
           * function draw() {
           *   background(200);
           *
           *   // pan camera according to angle 'delta'
           *   cam.pan(delta);
           *
           *   // every 160 frames, switch direction
           *   if (frameCount % 160 === 0) {
           *     delta *= -1;
           *   }
           *
           *   rotateX(frameCount * 0.01);
           *   translate(-100, 0, 0);
           *   box(20);
           *   translate(35, 0, 0);
           *   box(20);
           *   translate(35, 0, 0);
           *   box(20);
           *   translate(35, 0, 0);
           *   box(20);
           *   translate(35, 0, 0);
           *   box(20);
           *   translate(35, 0, 0);
           *   box(20);
           *   translate(35, 0, 0);
           *   box(20);
           * }
           * </code>
           * </div>
           *
           * @alt
           * camera view pans left and right across a series of rotating 3D boxes.
           */ cov_1uq18gp6pk.s[126]++;
          _main.default.Camera.prototype.pan = function(amount) {
            cov_1uq18gp6pk.f[10]++;
            var local = (cov_1uq18gp6pk.s[127]++, this._getLocalAxes());
            cov_1uq18gp6pk.s[128]++;
            this._rotateView(amount, local.y[0], local.y[1], local.y[2]);
          };

          /**
           * Tilting rotates the camera view up and down.
           * @method tilt
           * @param {Number} angle amount to rotate camera in current
           * <a href="#/p5/angleMode">angleMode</a> units.
           * Greater than 0 values rotate counterclockwise (to the left).
           * @example
           * <div>
           * <code>
           * let cam;
           * let delta = 0.01;
           *
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   normalMaterial();
           *   cam = createCamera();
           *   // set initial tilt
           *   cam.tilt(-0.8);
           * }
           *
           * function draw() {
           *   background(200);
           *
           *   // pan camera according to angle 'delta'
           *   cam.tilt(delta);
           *
           *   // every 160 frames, switch direction
           *   if (frameCount % 160 === 0) {
           *     delta *= -1;
           *   }
           *
           *   rotateY(frameCount * 0.01);
           *   translate(0, -100, 0);
           *   box(20);
           *   translate(0, 35, 0);
           *   box(20);
           *   translate(0, 35, 0);
           *   box(20);
           *   translate(0, 35, 0);
           *   box(20);
           *   translate(0, 35, 0);
           *   box(20);
           *   translate(0, 35, 0);
           *   box(20);
           *   translate(0, 35, 0);
           *   box(20);
           * }
           * </code>
           * </div>
           *
           * @alt
           * camera view tilts up and down across a series of rotating 3D boxes.
           */ cov_1uq18gp6pk.s[129]++;
          _main.default.Camera.prototype.tilt = function(amount) {
            cov_1uq18gp6pk.f[11]++;
            var local = (cov_1uq18gp6pk.s[130]++, this._getLocalAxes());
            cov_1uq18gp6pk.s[131]++;
            this._rotateView(amount, local.x[0], local.x[1], local.x[2]);
          };

          /**
           * Reorients the camera to look at a position in world space.
           * @method lookAt
           * @for p5.Camera
           * @param {Number} x x position of a point in world space
           * @param {Number} y y position of a point in world space
           * @param {Number} z z position of a point in world space
           * @example
           * <div>
           * <code>
           * let cam;
           *
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   normalMaterial();
           *   cam = createCamera();
           * }
           *
           * function draw() {
           *   background(200);
           *
           *   // look at a new random point every 60 frames
           *   if (frameCount % 60 === 0) {
           *     cam.lookAt(random(-100, 100), random(-50, 50), 0);
           *   }
           *
           *   rotateX(frameCount * 0.01);
           *   translate(-100, 0, 0);
           *   box(20);
           *   translate(35, 0, 0);
           *   box(20);
           *   translate(35, 0, 0);
           *   box(20);
           *   translate(35, 0, 0);
           *   box(20);
           *   translate(35, 0, 0);
           *   box(20);
           *   translate(35, 0, 0);
           *   box(20);
           *   translate(35, 0, 0);
           *   box(20);
           * }
           * </code>
           * </div>
           *
           * @alt
           * camera view of rotating 3D cubes changes to look at a new random
           * point every second .
           */ cov_1uq18gp6pk.s[132]++;
          _main.default.Camera.prototype.lookAt = function(x, y, z) {
            cov_1uq18gp6pk.f[12]++;
            cov_1uq18gp6pk.s[133]++;
            this.camera(
              this.eyeX,
              this.eyeY,
              this.eyeZ,
              x,
              y,
              z,
              this.upX,
              this.upY,
              this.upZ
            );
          };

          ////////////////////////////////////////////////////////////////////////////////
          // Camera Position Methods
          ////////////////////////////////////////////////////////////////////////////////

          /**
           * Sets the camera's position and orientation.
           * Accepts the same parameters as the global
           * <a href="#/p5/camera">camera()</a>.
           * More information on this function can be found there.
           * @method camera
           * @for p5.Camera
           * @example
           * <div>
           * <code>
           * let cam;
           *
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   // Create a camera.
           *   // createCamera() sets the newly created camera as
           *   // the current (active) camera.
           *   cam = createCamera();
           * }
           *
           * function draw() {
           *   background(204);
           *   // Move the camera away from the plane by a sin wave
           *   cam.camera(0, 0, 20 + sin(frameCount * 0.01) * 10, 0, 0, 0, 0, 1, 0);
           *   plane(10, 10);
           * }
           * </code>
           * </div>
           * @alt
           * White square repeatedly grows to fill canvas and then shrinks.
           *
           * @example
           * <div>
           * <code>
           * // move slider to see changes!
           * // sliders control the first 6 parameters of camera()
           *
           * let sliderGroup = [];
           * let X;
           * let Y;
           * let Z;
           * let centerX;
           * let centerY;
           * let centerZ;
           * let h = 20;
           * let cam;
           *
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   // create a camera
           *   cam = createCamera();
           *   // create sliders
           *   for (var i = 0; i < 6; i++) {
           *     if (i === 2) {
           *       sliderGroup[i] = createSlider(10, 400, 200);
           *     } else {
           *       sliderGroup[i] = createSlider(-400, 400, 0);
           *     }
           *     h = map(i, 0, 6, 5, 85);
           *     sliderGroup[i].position(10, height + h);
           *     sliderGroup[i].style('width', '80px');
           *   }
           * }
           *
           * function draw() {
           *   background(60);
           *   // assigning sliders' value to each parameters
           *   X = sliderGroup[0].value();
           *   Y = sliderGroup[1].value();
           *   Z = sliderGroup[2].value();
           *   centerX = sliderGroup[3].value();
           *   centerY = sliderGroup[4].value();
           *   centerZ = sliderGroup[5].value();
           *   cam.camera(X, Y, Z, centerX, centerY, centerZ, 0, 1, 0);
           *   stroke(255);
           *   fill(255, 102, 94);
           *   box(85);
           * }
           * </code>
           * </div>
           * @alt
           * An interactive example of a red cube with 3 sliders for moving it across x, y,
           * z axis and 3 sliders for shifting it's center.
           */ cov_1uq18gp6pk.s[134]++;
          _main.default.Camera.prototype.camera = function(
            eyeX,
            eyeY,
            eyeZ,
            centerX,
            centerY,
            centerZ,
            upX,
            upY,
            upZ
          ) {
            cov_1uq18gp6pk.f[13]++;
            cov_1uq18gp6pk.s[135]++;
            if (typeof eyeX === 'undefined') {
              cov_1uq18gp6pk.b[22][0]++;
              cov_1uq18gp6pk.s[136]++;
              eyeX = this.defaultEyeX;
              cov_1uq18gp6pk.s[137]++;
              eyeY = this.defaultEyeY;
              cov_1uq18gp6pk.s[138]++;
              eyeZ = this.defaultEyeZ;
              cov_1uq18gp6pk.s[139]++;
              centerX = eyeX;
              cov_1uq18gp6pk.s[140]++;
              centerY = eyeY;
              cov_1uq18gp6pk.s[141]++;
              centerZ = 0;
              cov_1uq18gp6pk.s[142]++;
              upX = 0;
              cov_1uq18gp6pk.s[143]++;
              upY = 1;
              cov_1uq18gp6pk.s[144]++;
              upZ = 0;
            } else {
              cov_1uq18gp6pk.b[22][1]++;
            }
            cov_1uq18gp6pk.s[145]++;

            this.eyeX = eyeX;
            cov_1uq18gp6pk.s[146]++;
            this.eyeY = eyeY;
            cov_1uq18gp6pk.s[147]++;
            this.eyeZ = eyeZ;
            cov_1uq18gp6pk.s[148]++;

            if (typeof centerX !== 'undefined') {
              cov_1uq18gp6pk.b[23][0]++;
              cov_1uq18gp6pk.s[149]++;
              this.centerX = centerX;
              cov_1uq18gp6pk.s[150]++;
              this.centerY = centerY;
              cov_1uq18gp6pk.s[151]++;
              this.centerZ = centerZ;
            } else {
              cov_1uq18gp6pk.b[23][1]++;
            }
            cov_1uq18gp6pk.s[152]++;

            if (typeof upX !== 'undefined') {
              cov_1uq18gp6pk.b[24][0]++;
              cov_1uq18gp6pk.s[153]++;
              this.upX = upX;
              cov_1uq18gp6pk.s[154]++;
              this.upY = upY;
              cov_1uq18gp6pk.s[155]++;
              this.upZ = upZ;
            } else {
              cov_1uq18gp6pk.b[24][1]++;
            }

            var local = (cov_1uq18gp6pk.s[156]++, this._getLocalAxes());

            // the camera affects the model view matrix, insofar as it
            // inverse translates the world to the eye position of the camera
            // and rotates it.
            // prettier-ignore
            cov_1uq18gp6pk.s[157]++;
            this.cameraMatrix.set(
              local.x[0],
              local.y[0],
              local.z[0],
              0,
              local.x[1],
              local.y[1],
              local.z[1],
              0,
              local.x[2],
              local.y[2],
              local.z[2],
              0,
              0,
              0,
              0,
              1
            );

            var tx = (cov_1uq18gp6pk.s[158]++, -eyeX);
            var ty = (cov_1uq18gp6pk.s[159]++, -eyeY);
            var tz = (cov_1uq18gp6pk.s[160]++, -eyeZ);
            cov_1uq18gp6pk.s[161]++;

            this.cameraMatrix.translate([tx, ty, tz]);
            cov_1uq18gp6pk.s[162]++;

            if (this._isActive()) {
              cov_1uq18gp6pk.b[25][0]++;
              cov_1uq18gp6pk.s[163]++;
              this._renderer.uMVMatrix.set(
                this.cameraMatrix.mat4[0],
                this.cameraMatrix.mat4[1],
                this.cameraMatrix.mat4[2],
                this.cameraMatrix.mat4[3],
                this.cameraMatrix.mat4[4],
                this.cameraMatrix.mat4[5],
                this.cameraMatrix.mat4[6],
                this.cameraMatrix.mat4[7],
                this.cameraMatrix.mat4[8],
                this.cameraMatrix.mat4[9],
                this.cameraMatrix.mat4[10],
                this.cameraMatrix.mat4[11],
                this.cameraMatrix.mat4[12],
                this.cameraMatrix.mat4[13],
                this.cameraMatrix.mat4[14],
                this.cameraMatrix.mat4[15]
              );
            } else {
              cov_1uq18gp6pk.b[25][1]++;
            }
            cov_1uq18gp6pk.s[164]++;
            return this;
          };

          /**
           * Move camera along its local axes while maintaining current camera orientation.
           * @method move
           * @param {Number} x amount to move along camera's left-right axis
           * @param {Number} y amount to move along camera's up-down axis
           * @param {Number} z amount to move along camera's forward-backward axis
           * @example
           * <div>
           * <code>
           * // see the camera move along its own axes while maintaining its orientation
           * let cam;
           * let delta = 0.5;
           *
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   normalMaterial();
           *   cam = createCamera();
           * }
           *
           * function draw() {
           *   background(200);
           *
           *   // move the camera along its local axes
           *   cam.move(delta, delta, 0);
           *
           *   // every 100 frames, switch direction
           *   if (frameCount % 150 === 0) {
           *     delta *= -1;
           *   }
           *
           *   translate(-10, -10, 0);
           *   box(50, 8, 50);
           *   translate(15, 15, 0);
           *   box(50, 8, 50);
           *   translate(15, 15, 0);
           *   box(50, 8, 50);
           *   translate(15, 15, 0);
           *   box(50, 8, 50);
           *   translate(15, 15, 0);
           *   box(50, 8, 50);
           *   translate(15, 15, 0);
           *   box(50, 8, 50);
           * }
           * </code>
           * </div>
           *
           * @alt
           * camera view moves along a series of 3D boxes, maintaining the same
           * orientation throughout the move
           */ cov_1uq18gp6pk.s[165]++;
          _main.default.Camera.prototype.move = function(x, y, z) {
            cov_1uq18gp6pk.f[14]++;
            var local = (cov_1uq18gp6pk.s[166]++, this._getLocalAxes());

            // scale local axes by movement amounts
            // based on http://learnwebgl.brown37.net/07_cameras/camera_linear_motion.html
            var dx = (cov_1uq18gp6pk.s[167]++,
            [local.x[0] * x, local.x[1] * x, local.x[2] * x]);
            var dy = (cov_1uq18gp6pk.s[168]++,
            [local.y[0] * y, local.y[1] * y, local.y[2] * y]);
            var dz = (cov_1uq18gp6pk.s[169]++,
            [local.z[0] * z, local.z[1] * z, local.z[2] * z]);
            cov_1uq18gp6pk.s[170]++;

            this.camera(
              this.eyeX + dx[0] + dy[0] + dz[0],
              this.eyeY + dx[1] + dy[1] + dz[1],
              this.eyeZ + dx[2] + dy[2] + dz[2],
              this.centerX + dx[0] + dy[0] + dz[0],
              this.centerY + dx[1] + dy[1] + dz[1],
              this.centerZ + dx[2] + dy[2] + dz[2],
              0,
              1,
              0
            );
          };

          /**
           * Set camera position in world-space while maintaining current camera
           * orientation.
           * @method setPosition
           * @param {Number} x x position of a point in world space
           * @param {Number} y y position of a point in world space
           * @param {Number} z z position of a point in world space
           * @example
           * <div>
           * <code>
           * // press '1' '2' or '3' keys to set camera position
           *
           * let cam;
           *
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   normalMaterial();
           *   cam = createCamera();
           * }
           *
           * function draw() {
           *   background(200);
           *
           *   // '1' key
           *   if (keyIsDown(49)) {
           *     cam.setPosition(30, 0, 80);
           *   }
           *   // '2' key
           *   if (keyIsDown(50)) {
           *     cam.setPosition(0, 0, 80);
           *   }
           *   // '3' key
           *   if (keyIsDown(51)) {
           *     cam.setPosition(-30, 0, 80);
           *   }
           *
           *   box(20);
           * }
           * </code>
           * </div>
           *
           * @alt
           * camera position changes as the user presses keys, altering view of a 3D box
           */ cov_1uq18gp6pk.s[171]++;
          _main.default.Camera.prototype.setPosition = function(x, y, z) {
            cov_1uq18gp6pk.f[15]++;
            var diffX = (cov_1uq18gp6pk.s[172]++, x - this.eyeX);
            var diffY = (cov_1uq18gp6pk.s[173]++, y - this.eyeY);
            var diffZ = (cov_1uq18gp6pk.s[174]++, z - this.eyeZ);
            cov_1uq18gp6pk.s[175]++;

            this.camera(
              x,
              y,
              z,
              this.centerX + diffX,
              this.centerY + diffY,
              this.centerZ + diffZ,
              0,
              1,
              0
            );
          };

          ////////////////////////////////////////////////////////////////////////////////
          // Camera Helper Methods
          ////////////////////////////////////////////////////////////////////////////////

          // @TODO: combine this function with _setDefaultCamera to compute these values
          // as-needed
          cov_1uq18gp6pk.s[176]++;
          _main.default.Camera.prototype._computeCameraDefaultSettings = function() {
            cov_1uq18gp6pk.f[16]++;
            cov_1uq18gp6pk.s[177]++;
            this.defaultCameraFOV = 60 / 180 * Math.PI;
            cov_1uq18gp6pk.s[178]++;
            this.defaultAspectRatio = this._renderer.width / this._renderer.height;
            cov_1uq18gp6pk.s[179]++;
            this.defaultEyeX = 0;
            cov_1uq18gp6pk.s[180]++;
            this.defaultEyeY = 0;
            cov_1uq18gp6pk.s[181]++;
            this.defaultEyeZ =
              this._renderer.height / 2.0 / Math.tan(this.defaultCameraFOV / 2.0);
            cov_1uq18gp6pk.s[182]++;
            this.defaultCenterX = 0;
            cov_1uq18gp6pk.s[183]++;
            this.defaultCenterY = 0;
            cov_1uq18gp6pk.s[184]++;
            this.defaultCenterZ = 0;
            cov_1uq18gp6pk.s[185]++;
            this.defaultCameraNear = this.defaultEyeZ * 0.1;
            cov_1uq18gp6pk.s[186]++;
            this.defaultCameraFar = this.defaultEyeZ * 10;
          };

          //detect if user didn't set the camera
          //then call this function below
          cov_1uq18gp6pk.s[187]++;
          _main.default.Camera.prototype._setDefaultCamera = function() {
            cov_1uq18gp6pk.f[17]++;
            cov_1uq18gp6pk.s[188]++;
            this.cameraFOV = this.defaultCameraFOV;
            cov_1uq18gp6pk.s[189]++;
            this.aspectRatio = this.defaultAspectRatio;
            cov_1uq18gp6pk.s[190]++;
            this.eyeX = this.defaultEyeX;
            cov_1uq18gp6pk.s[191]++;
            this.eyeY = this.defaultEyeY;
            cov_1uq18gp6pk.s[192]++;
            this.eyeZ = this.defaultEyeZ;
            cov_1uq18gp6pk.s[193]++;
            this.centerX = this.defaultCenterX;
            cov_1uq18gp6pk.s[194]++;
            this.centerY = this.defaultCenterY;
            cov_1uq18gp6pk.s[195]++;
            this.centerZ = this.defaultCenterZ;
            cov_1uq18gp6pk.s[196]++;
            this.upX = 0;
            cov_1uq18gp6pk.s[197]++;
            this.upY = 1;
            cov_1uq18gp6pk.s[198]++;
            this.upZ = 0;
            cov_1uq18gp6pk.s[199]++;
            this.cameraNear = this.defaultCameraNear;
            cov_1uq18gp6pk.s[200]++;
            this.cameraFar = this.defaultCameraFar;
            cov_1uq18gp6pk.s[201]++;

            this.perspective();
            cov_1uq18gp6pk.s[202]++;
            this.camera();
            cov_1uq18gp6pk.s[203]++;

            this.cameraType = 'default';
          };
          cov_1uq18gp6pk.s[204]++;

          _main.default.Camera.prototype._resize = function() {
            cov_1uq18gp6pk.f[18]++;
            cov_1uq18gp6pk.s[205]++;
            // If we're using the default camera, update the aspect ratio
            if (this.cameraType === 'default') {
              cov_1uq18gp6pk.b[26][0]++;
              cov_1uq18gp6pk.s[206]++;
              this._computeCameraDefaultSettings();
              cov_1uq18gp6pk.s[207]++;
              this._setDefaultCamera();
            } else {
              cov_1uq18gp6pk.b[26][1]++;
              cov_1uq18gp6pk.s[208]++;
              this.perspective(
                this.cameraFOV,
                this._renderer.width / this._renderer.height
              );
            }
          };

          /**
           * Returns a copy of a camera.
           * @method copy
           * @private
           */ cov_1uq18gp6pk.s[209]++;
          _main.default.Camera.prototype.copy = function() {
            cov_1uq18gp6pk.f[19]++;
            var _cam = (cov_1uq18gp6pk.s[210]++, new _main.default.Camera(this._renderer));
            cov_1uq18gp6pk.s[211]++;
            _cam.cameraFOV = this.cameraFOV;
            cov_1uq18gp6pk.s[212]++;
            _cam.aspectRatio = this.aspectRatio;
            cov_1uq18gp6pk.s[213]++;
            _cam.eyeX = this.eyeX;
            cov_1uq18gp6pk.s[214]++;
            _cam.eyeY = this.eyeY;
            cov_1uq18gp6pk.s[215]++;
            _cam.eyeZ = this.eyeZ;
            cov_1uq18gp6pk.s[216]++;
            _cam.centerX = this.centerX;
            cov_1uq18gp6pk.s[217]++;
            _cam.centerY = this.centerY;
            cov_1uq18gp6pk.s[218]++;
            _cam.centerZ = this.centerZ;
            cov_1uq18gp6pk.s[219]++;
            _cam.cameraNear = this.cameraNear;
            cov_1uq18gp6pk.s[220]++;
            _cam.cameraFar = this.cameraFar;
            cov_1uq18gp6pk.s[221]++;

            _cam.cameraType = this.cameraType;
            cov_1uq18gp6pk.s[222]++;

            _cam.cameraMatrix = this.cameraMatrix.copy();
            cov_1uq18gp6pk.s[223]++;
            _cam.projMatrix = this.projMatrix.copy();
            cov_1uq18gp6pk.s[224]++;

            return _cam;
          };

          /**
           * Returns a camera's local axes: left-right, up-down, and forward-backward,
           * as defined by vectors in world-space.
           * @method _getLocalAxes
           * @private
           */ cov_1uq18gp6pk.s[225]++;
          _main.default.Camera.prototype._getLocalAxes = function() {
            cov_1uq18gp6pk.f[20]++;
            // calculate camera local Z vector
            var z0 = (cov_1uq18gp6pk.s[226]++, this.eyeX - this.centerX);
            var z1 = (cov_1uq18gp6pk.s[227]++, this.eyeY - this.centerY);
            var z2 = (cov_1uq18gp6pk.s[228]++, this.eyeZ - this.centerZ);

            // normalize camera local Z vector
            var eyeDist = (cov_1uq18gp6pk.s[229]++, Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2));
            cov_1uq18gp6pk.s[230]++;
            if (eyeDist !== 0) {
              cov_1uq18gp6pk.b[27][0]++;
              cov_1uq18gp6pk.s[231]++;
              z0 /= eyeDist;
              cov_1uq18gp6pk.s[232]++;
              z1 /= eyeDist;
              cov_1uq18gp6pk.s[233]++;
              z2 /= eyeDist;
            } else {
              cov_1uq18gp6pk.b[27][1]++;
            }

            // calculate camera Y vector
            var y0 = (cov_1uq18gp6pk.s[234]++, this.upX);
            var y1 = (cov_1uq18gp6pk.s[235]++, this.upY);
            var y2 = (cov_1uq18gp6pk.s[236]++, this.upZ);

            // compute camera local X vector as up vector (local Y) cross local Z
            var x0 = (cov_1uq18gp6pk.s[237]++, y1 * z2 - y2 * z1);
            var x1 = (cov_1uq18gp6pk.s[238]++, -y0 * z2 + y2 * z0);
            var x2 = (cov_1uq18gp6pk.s[239]++, y0 * z1 - y1 * z0);

            // recompute y = z cross x
            cov_1uq18gp6pk.s[240]++;
            y0 = z1 * x2 - z2 * x1;
            cov_1uq18gp6pk.s[241]++;
            y1 = -z0 * x2 + z2 * x0;
            cov_1uq18gp6pk.s[242]++;
            y2 = z0 * x1 - z1 * x0;

            // cross product gives area of parallelogram, which is < 1.0 for
            // non-perpendicular unit-length vectors; so normalize x, y here:
            var xmag = (cov_1uq18gp6pk.s[243]++, Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2));
            cov_1uq18gp6pk.s[244]++;
            if (xmag !== 0) {
              cov_1uq18gp6pk.b[28][0]++;
              cov_1uq18gp6pk.s[245]++;
              x0 /= xmag;
              cov_1uq18gp6pk.s[246]++;
              x1 /= xmag;
              cov_1uq18gp6pk.s[247]++;
              x2 /= xmag;
            } else {
              cov_1uq18gp6pk.b[28][1]++;
            }

            var ymag = (cov_1uq18gp6pk.s[248]++, Math.sqrt(y0 * y0 + y1 * y1 + y2 * y2));
            cov_1uq18gp6pk.s[249]++;
            if (ymag !== 0) {
              cov_1uq18gp6pk.b[29][0]++;
              cov_1uq18gp6pk.s[250]++;
              y0 /= ymag;
              cov_1uq18gp6pk.s[251]++;
              y1 /= ymag;
              cov_1uq18gp6pk.s[252]++;
              y2 /= ymag;
            } else {
              cov_1uq18gp6pk.b[29][1]++;
            }
            cov_1uq18gp6pk.s[253]++;

            return {
              x: [x0, x1, x2],
              y: [y0, y1, y2],
              z: [z0, z1, z2]
            };
          };

          /**
           * Orbits the camera about center point. For use with orbitControl().
           * @method _orbit
           * @private
           * @param {Number} dTheta change in spherical coordinate theta
           * @param {Number} dPhi change in spherical coordinate phi
           * @param {Number} dRadius change in radius
           */ cov_1uq18gp6pk.s[254]++;
          _main.default.Camera.prototype._orbit = function(dTheta, dPhi, dRadius) {
            cov_1uq18gp6pk.f[21]++;
            var diffX = (cov_1uq18gp6pk.s[255]++, this.eyeX - this.centerX);
            var diffY = (cov_1uq18gp6pk.s[256]++, this.eyeY - this.centerY);
            var diffZ = (cov_1uq18gp6pk.s[257]++, this.eyeZ - this.centerZ);

            // get spherical coorinates for current camera position about origin
            var camRadius = (cov_1uq18gp6pk.s[258]++,
            Math.sqrt(diffX * diffX + diffY * diffY + diffZ * diffZ));
            // from https://github.com/mrdoob/three.js/blob/dev/src/math/Spherical.js#L72-L73
            var camTheta = (cov_1uq18gp6pk.s[259]++, Math.atan2(diffX, diffZ)); // equatorial angle
            var camPhi = (cov_1uq18gp6pk.s[260]++,
            Math.acos(Math.max(-1, Math.min(1, diffY / camRadius)))); // polar angle

            // add change
            cov_1uq18gp6pk.s[261]++;
            camTheta += dTheta;
            cov_1uq18gp6pk.s[262]++;
            camPhi += dPhi;
            cov_1uq18gp6pk.s[263]++;
            camRadius += dRadius;

            // prevent zooming through the center:
            cov_1uq18gp6pk.s[264]++;
            if (camRadius < 0) {
              cov_1uq18gp6pk.b[30][0]++;
              cov_1uq18gp6pk.s[265]++;
              camRadius = 0.1;
            } else {
              cov_1uq18gp6pk.b[30][1]++;
            }

            // prevent rotation over the zenith / under bottom
            cov_1uq18gp6pk.s[266]++;
            if (camPhi > Math.PI) {
              cov_1uq18gp6pk.b[31][0]++;
              cov_1uq18gp6pk.s[267]++;
              camPhi = Math.PI;
            } else {
              cov_1uq18gp6pk.b[31][1]++;
              cov_1uq18gp6pk.s[268]++;
              if (camPhi <= 0) {
                cov_1uq18gp6pk.b[32][0]++;
                cov_1uq18gp6pk.s[269]++;
                camPhi = 0.001;
              } else {
                cov_1uq18gp6pk.b[32][1]++;
              }
            }

            // from https://github.com/mrdoob/three.js/blob/dev/src/math/Vector3.js#L628-L632
            var _x = (cov_1uq18gp6pk.s[270]++,
            Math.sin(camPhi) * camRadius * Math.sin(camTheta));
            var _y = (cov_1uq18gp6pk.s[271]++, Math.cos(camPhi) * camRadius);
            var _z = (cov_1uq18gp6pk.s[272]++,
            Math.sin(camPhi) * camRadius * Math.cos(camTheta));
            cov_1uq18gp6pk.s[273]++;

            this.camera(
              _x + this.centerX,
              _y + this.centerY,
              _z + this.centerZ,
              this.centerX,
              this.centerY,
              this.centerZ,
              0,
              1,
              0
            );
          };

          /**
           * Returns true if camera is currently attached to renderer.
           * @method _isActive
           * @private
           */ cov_1uq18gp6pk.s[274]++;
          _main.default.Camera.prototype._isActive = function() {
            cov_1uq18gp6pk.f[22]++;
            cov_1uq18gp6pk.s[275]++;
            return this === this._renderer._curCamera;
          };

          /**
           * Sets the current (active) camera of a 3D sketch.
           * Allows for switching between multiple cameras.
           * @method setCamera
           * @param  {p5.Camera} cam  p5.Camera object
           * @for p5
           * @example
           * <div>
           * <code>
           * let cam1, cam2;
           * let currentCamera;
           *
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   normalMaterial();
           *
           *   cam1 = createCamera();
           *   cam2 = createCamera();
           *   cam2.setPosition(30, 0, 50);
           *   cam2.lookAt(0, 0, 0);
           *   cam2.ortho();
           *
           *   // set variable for previously active camera:
           *   currentCamera = 1;
           * }
           *
           * function draw() {
           *   background(200);
           *
           *   // camera 1:
           *   cam1.lookAt(0, 0, 0);
           *   cam1.setPosition(sin(frameCount / 60) * 200, 0, 100);
           *
           *   // every 100 frames, switch between the two cameras
           *   if (frameCount % 100 === 0) {
           *     if (currentCamera === 1) {
           *       setCamera(cam1);
           *       currentCamera = 0;
           *     } else {
           *       setCamera(cam2);
           *       currentCamera = 1;
           *     }
           *   }
           *
           *   drawBoxes();
           * }
           *
           * function drawBoxes() {
           *   rotateX(frameCount * 0.01);
           *   translate(-100, 0, 0);
           *   box(20);
           *   translate(35, 0, 0);
           *   box(20);
           *   translate(35, 0, 0);
           *   box(20);
           *   translate(35, 0, 0);
           *   box(20);
           *   translate(35, 0, 0);
           *   box(20);
           *   translate(35, 0, 0);
           *   box(20);
           *   translate(35, 0, 0);
           *   box(20);
           * }
           * </code>
           * </div>
           *
           * @alt
           * Canvas switches between two camera views, each showing a series of spinning
           * 3D boxes.
           */ cov_1uq18gp6pk.s[276]++;
          _main.default.prototype.setCamera = function(cam) {
            cov_1uq18gp6pk.f[23]++;
            cov_1uq18gp6pk.s[277]++;
            this._renderer._curCamera = cam;

            // set the projection matrix (which is not normally updated each frame)
            cov_1uq18gp6pk.s[278]++;
            this._renderer.uPMatrix.set(
              cam.projMatrix.mat4[0],
              cam.projMatrix.mat4[1],
              cam.projMatrix.mat4[2],
              cam.projMatrix.mat4[3],
              cam.projMatrix.mat4[4],
              cam.projMatrix.mat4[5],
              cam.projMatrix.mat4[6],
              cam.projMatrix.mat4[7],
              cam.projMatrix.mat4[8],
              cam.projMatrix.mat4[9],
              cam.projMatrix.mat4[10],
              cam.projMatrix.mat4[11],
              cam.projMatrix.mat4[12],
              cam.projMatrix.mat4[13],
              cam.projMatrix.mat4[14],
              cam.projMatrix.mat4[15]
            );
          };
          var _default = _main.default.Camera;
          exports.default = _default;
        },
        { '../core/main': 283 }
      ],
      332: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_2cz6py1rks = (function() {
            var path = '/Users/outofambit/src/p5.js/src/webgl/p5.Geometry.js';
            var hash = '6bcdb5c17ff74d7346ab3cf0b0e076336cd1669e';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/webgl/p5.Geometry.js',
              statementMap: {
                '0': { start: { line: 20, column: 0 }, end: { line: 56, column: 2 } },
                '1': { start: { line: 23, column: 2 }, end: { line: 23, column: 21 } },
                '2': { start: { line: 26, column: 2 }, end: { line: 26, column: 25 } },
                '3': { start: { line: 32, column: 2 }, end: { line: 32, column: 24 } },
                '4': { start: { line: 37, column: 2 }, end: { line: 37, column: 26 } },
                '5': { start: { line: 40, column: 2 }, end: { line: 40, column: 18 } },
                '6': { start: { line: 43, column: 2 }, end: { line: 43, column: 16 } },
                '7': { start: { line: 46, column: 2 }, end: { line: 46, column: 18 } },
                '8': { start: { line: 47, column: 2 }, end: { line: 47, column: 25 } },
                '9': { start: { line: 48, column: 2 }, end: { line: 48, column: 53 } },
                '10': { start: { line: 49, column: 2 }, end: { line: 49, column: 53 } },
                '11': { start: { line: 50, column: 2 }, end: { line: 50, column: 23 } },
                '12': { start: { line: 52, column: 2 }, end: { line: 54, column: 3 } },
                '13': { start: { line: 53, column: 4 }, end: { line: 53, column: 24 } },
                '14': { start: { line: 55, column: 2 }, end: { line: 55, column: 14 } },
                '15': { start: { line: 58, column: 0 }, end: { line: 69, column: 2 } },
                '16': { start: { line: 59, column: 2 }, end: { line: 59, column: 31 } },
                '17': { start: { line: 60, column: 2 }, end: { line: 60, column: 30 } },
                '18': { start: { line: 62, column: 2 }, end: { line: 62, column: 27 } },
                '19': { start: { line: 63, column: 2 }, end: { line: 63, column: 24 } },
                '20': { start: { line: 64, column: 2 }, end: { line: 64, column: 31 } },
                '21': { start: { line: 65, column: 2 }, end: { line: 65, column: 32 } },
                '22': { start: { line: 66, column: 2 }, end: { line: 66, column: 22 } },
                '23': { start: { line: 68, column: 2 }, end: { line: 68, column: 23 } },
                '24': { start: { line: 76, column: 0 }, end: { line: 91, column: 2 } },
                '25': { start: { line: 77, column: 2 }, end: { line: 77, column: 24 } },
                '26': { start: { line: 78, column: 21 }, end: { line: 78, column: 37 } },
                '27': { start: { line: 80, column: 2 }, end: { line: 89, column: 3 } },
                '28': { start: { line: 80, column: 15 }, end: { line: 80, column: 16 } },
                '29': { start: { line: 81, column: 4 }, end: { line: 88, column: 5 } },
                '30': { start: { line: 81, column: 17 }, end: { line: 81, column: 18 } },
                '31': { start: { line: 82, column: 6 }, end: { line: 82, column: 29 } },
                '32': { start: { line: 83, column: 6 }, end: { line: 83, column: 33 } },
                '33': { start: { line: 84, column: 6 }, end: { line: 84, column: 39 } },
                '34': { start: { line: 85, column: 6 }, end: { line: 85, column: 35 } },
                '35': { start: { line: 86, column: 6 }, end: { line: 86, column: 33 } },
                '36': { start: { line: 87, column: 6 }, end: { line: 87, column: 33 } },
                '37': { start: { line: 90, column: 2 }, end: { line: 90, column: 14 } },
                '38': { start: { line: 93, column: 0 }, end: { line: 113, column: 2 } },
                '39': { start: { line: 95, column: 15 }, end: { line: 95, column: 33 } },
                '40': { start: { line: 96, column: 13 }, end: { line: 96, column: 35 } },
                '41': { start: { line: 97, column: 13 }, end: { line: 97, column: 35 } },
                '42': { start: { line: 98, column: 13 }, end: { line: 98, column: 35 } },
                '43': { start: { line: 99, column: 13 }, end: { line: 99, column: 34 } },
                '44': { start: { line: 100, column: 13 }, end: { line: 100, column: 34 } },
                '45': { start: { line: 101, column: 12 }, end: { line: 101, column: 35 } },
                '46': { start: { line: 102, column: 13 }, end: { line: 102, column: 29 } },
                '47': { start: { line: 103, column: 17 }, end: { line: 103, column: 61 } },
                '48': { start: { line: 104, column: 2 }, end: { line: 110, column: 3 } },
                '49': { start: { line: 105, column: 4 }, end: { line: 108, column: 6 } },
                '50': { start: { line: 109, column: 4 }, end: { line: 109, column: 13 } },
                '51': { start: { line: 111, column: 2 }, end: { line: 111, column: 33 } },
                '52': { start: { line: 111, column: 20 }, end: { line: 111, column: 33 } },
                '53': { start: { line: 112, column: 2 }, end: { line: 112, column: 42 } },
                '54': { start: { line: 120, column: 0 }, end: { line: 151, column: 2 } },
                '55': { start: { line: 121, column: 24 }, end: { line: 121, column: 42 } },
                '56': { start: { line: 122, column: 19 }, end: { line: 122, column: 32 } },
                '57': { start: { line: 123, column: 16 }, end: { line: 123, column: 26 } },
                '58': { start: { line: 127, column: 2 }, end: { line: 127, column: 27 } },
                '59': { start: { line: 128, column: 2 }, end: { line: 130, column: 3 } },
                '60': { start: { line: 129, column: 4 }, end: { line: 129, column: 40 } },
                '61': { start: { line: 134, column: 2 }, end: { line: 143, column: 3 } },
                '62': { start: { line: 134, column: 15 }, end: { line: 134, column: 16 } },
                '63': { start: { line: 135, column: 17 }, end: { line: 135, column: 25 } },
                '64': { start: { line: 136, column: 23 }, end: { line: 136, column: 45 } },
                '65': { start: { line: 139, column: 4 }, end: { line: 142, column: 5 } },
                '66': { start: { line: 139, column: 18 }, end: { line: 139, column: 19 } },
                '67': { start: { line: 140, column: 26 }, end: { line: 140, column: 34 } },
                '68': { start: { line: 141, column: 6 }, end: { line: 141, column: 49 } },
                '69': { start: { line: 146, column: 2 }, end: { line: 148, column: 3 } },
                '70': { start: { line: 147, column: 4 }, end: { line: 147, column: 34 } },
                '71': { start: { line: 150, column: 2 }, end: { line: 150, column: 14 } },
                '72': { start: { line: 159, column: 0 }, end: { line: 172, column: 2 } },
                '73': { start: { line: 160, column: 2 }, end: { line: 170, column: 3 } },
                '74': { start: { line: 160, column: 15 }, end: { line: 160, column: 16 } },
                '75': { start: { line: 161, column: 19 }, end: { line: 161, column: 35 } },
                '76': { start: { line: 162, column: 15 }, end: { line: 165, column: 5 } },
                '77': { start: { line: 167, column: 4 }, end: { line: 167, column: 34 } },
                '78': { start: { line: 168, column: 4 }, end: { line: 168, column: 42 } },
                '79': { start: { line: 169, column: 4 }, end: { line: 169, column: 57 } },
                '80': { start: { line: 171, column: 2 }, end: { line: 171, column: 14 } },
                '81': { start: { line: 179, column: 0 }, end: { line: 210, column: 2 } },
                '82': { start: { line: 181, column: 12 }, end: { line: 181, column: 34 } },
                '83': { start: { line: 182, column: 2 }, end: { line: 184, column: 3 } },
                '84': { start: { line: 182, column: 15 }, end: { line: 182, column: 16 } },
                '85': { start: { line: 183, column: 4 }, end: { line: 183, column: 35 } },
                '86': { start: { line: 185, column: 2 }, end: { line: 185, column: 41 } },
                '87': { start: { line: 187, column: 2 }, end: { line: 189, column: 3 } },
                '88': { start: { line: 187, column: 15 }, end: { line: 187, column: 16 } },
                '89': { start: { line: 188, column: 4 }, end: { line: 188, column: 32 } },
                '90': { start: { line: 192, column: 2 }, end: { line: 192, column: 31 } },
                '91': { start: { line: 193, column: 2 }, end: { line: 199, column: 3 } },
                '92': { start: { line: 194, column: 12 }, end: { line: 194, column: 36 } },
                '93': { start: { line: 198, column: 4 }, end: { line: 198, column: 35 } },
                '94': { start: { line: 200, column: 2 }, end: { line: 200, column: 41 } },
                '95': { start: { line: 202, column: 2 }, end: { line: 208, column: 3 } },
                '96': { start: { line: 203, column: 12 }, end: { line: 203, column: 36 } },
                '97': { start: { line: 207, column: 4 }, end: { line: 207, column: 32 } },
                '98': { start: { line: 209, column: 2 }, end: { line: 209, column: 14 } },
                '99': { start: { line: 217, column: 0 }, end: { line: 231, column: 2 } },
                '100': { start: { line: 218, column: 2 }, end: { line: 218, column: 24 } },
                '101': { start: { line: 219, column: 2 }, end: { line: 229, column: 3 } },
                '102': { start: { line: 220, column: 4 }, end: { line: 222, column: 5 } },
                '103': { start: { line: 220, column: 17 }, end: { line: 220, column: 18 } },
                '104': { start: { line: 220, column: 26 }, end: { line: 220, column: 51 } },
                '105': { start: { line: 221, column: 6 }, end: { line: 221, column: 45 } },
                '106': { start: { line: 224, column: 4 }, end: { line: 228, column: 5 } },
                '107': { start: { line: 224, column: 17 }, end: { line: 224, column: 18 } },
                '108': { start: { line: 225, column: 6 }, end: { line: 225, column: 60 } },
                '109': { start: { line: 226, column: 6 }, end: { line: 226, column: 60 } },
                '110': { start: { line: 227, column: 6 }, end: { line: 227, column: 60 } },
                '111': { start: { line: 230, column: 2 }, end: { line: 230, column: 14 } },
                '112': { start: { line: 240, column: 0 }, end: { line: 265, column: 2 } },
                '113': { start: { line: 241, column: 2 }, end: { line: 241, column: 31 } },
                '114': { start: { line: 242, column: 2 }, end: { line: 242, column: 30 } },
                '115': { start: { line: 244, column: 2 }, end: { line: 263, column: 3 } },
                '116': { start: { line: 244, column: 15 }, end: { line: 244, column: 16 } },
                '117': { start: { line: 245, column: 18 }, end: { line: 245, column: 49 } },
                '118': { start: { line: 246, column: 16 }, end: { line: 246, column: 47 } },
                '119': { start: { line: 247, column: 16 }, end: { line: 250, column: 18 } },
                '120': { start: { line: 251, column: 14 }, end: { line: 251, column: 27 } },
                '121': { start: { line: 252, column: 14 }, end: { line: 252, column: 27 } },
                '122': { start: { line: 253, column: 14 }, end: { line: 253, column: 25 } },
                '123': { start: { line: 254, column: 14 }, end: { line: 254, column: 25 } },
                '124': { start: { line: 255, column: 19 }, end: { line: 255, column: 30 } },
                '125': { start: { line: 256, column: 19 }, end: { line: 256, column: 30 } },
                '126': { start: { line: 259, column: 4 }, end: { line: 259, column: 19 } },
                '127': { start: { line: 260, column: 4 }, end: { line: 260, column: 20 } },
                '128': { start: { line: 261, column: 4 }, end: { line: 261, column: 74 } },
                '129': { start: { line: 262, column: 4 }, end: { line: 262, column: 45 } },
                '130': { start: { line: 264, column: 2 }, end: { line: 264, column: 14 } },
                '131': { start: { line: 272, column: 0 }, end: { line: 298, column: 2 } },
                '132': { start: { line: 273, column: 2 }, end: { line: 296, column: 3 } },
                '133': { start: { line: 275, column: 24 }, end: { line: 275, column: 47 } },
                '134': { start: { line: 276, column: 24 }, end: { line: 276, column: 47 } },
                '135': { start: { line: 278, column: 4 }, end: { line: 285, column: 5 } },
                '136': { start: { line: 278, column: 17 }, end: { line: 278, column: 18 } },
                '137': { start: { line: 279, column: 6 }, end: { line: 279, column: 66 } },
                '138': { start: { line: 280, column: 6 }, end: { line: 280, column: 66 } },
                '139': { start: { line: 281, column: 6 }, end: { line: 281, column: 66 } },
                '140': { start: { line: 282, column: 6 }, end: { line: 282, column: 66 } },
                '141': { start: { line: 283, column: 6 }, end: { line: 283, column: 66 } },
                '142': { start: { line: 284, column: 6 }, end: { line: 284, column: 66 } },
                '143': { start: { line: 287, column: 19 }, end: { line: 287, column: 64 } },
                '144': { start: { line: 288, column: 17 }, end: { line: 288, column: 56 } },
                '145': { start: { line: 289, column: 24 }, end: { line: 289, column: 66 } },
                '146': { start: { line: 290, column: 18 }, end: { line: 290, column: 35 } },
                '147': { start: { line: 292, column: 4 }, end: { line: 295, column: 5 } },
                '148': { start: { line: 292, column: 17 }, end: { line: 292, column: 18 } },
                '149': { start: { line: 293, column: 6 }, end: { line: 293, column: 35 } },
                '150': { start: { line: 294, column: 6 }, end: { line: 294, column: 35 } },
                '151': { start: { line: 297, column: 2 }, end: { line: 297, column: 14 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 20, column: 14 }, end: { line: 20, column: 15 } },
                  loc: { start: { line: 20, column: 51 }, end: { line: 56, column: 1 } },
                  line: 20
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 58, column: 30 }, end: { line: 58, column: 31 } },
                  loc: { start: { line: 58, column: 41 }, end: { line: 69, column: 1 } },
                  line: 58
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: { start: { line: 76, column: 37 }, end: { line: 76, column: 38 } },
                  loc: { start: { line: 76, column: 48 }, end: { line: 91, column: 1 } },
                  line: 76
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: { start: { line: 93, column: 39 }, end: { line: 93, column: 40 } },
                  loc: { start: { line: 93, column: 56 }, end: { line: 113, column: 1 } },
                  line: 93
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 120, column: 39 },
                    end: { line: 120, column: 40 }
                  },
                  loc: { start: { line: 120, column: 50 }, end: { line: 151, column: 1 } },
                  line: 120
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 159, column: 39 },
                    end: { line: 159, column: 40 }
                  },
                  loc: { start: { line: 159, column: 50 }, end: { line: 172, column: 1 } },
                  line: 159
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 179, column: 43 },
                    end: { line: 179, column: 44 }
                  },
                  loc: { start: { line: 179, column: 54 }, end: { line: 210, column: 1 } },
                  line: 179
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 217, column: 43 },
                    end: { line: 217, column: 44 }
                  },
                  loc: { start: { line: 217, column: 54 }, end: { line: 231, column: 1 } },
                  line: 217
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 240, column: 41 },
                    end: { line: 240, column: 42 }
                  },
                  loc: { start: { line: 240, column: 52 }, end: { line: 265, column: 1 } },
                  line: 240
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 272, column: 34 },
                    end: { line: 272, column: 35 }
                  },
                  loc: { start: { line: 272, column: 45 }, end: { line: 298, column: 1 } },
                  line: 272
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 48, column: 17 }, end: { line: 48, column: 52 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 48, column: 41 }, end: { line: 48, column: 48 } },
                    { start: { line: 48, column: 51 }, end: { line: 48, column: 52 } }
                  ],
                  line: 48
                },
                '1': {
                  loc: { start: { line: 49, column: 17 }, end: { line: 49, column: 52 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 49, column: 41 }, end: { line: 49, column: 48 } },
                    { start: { line: 49, column: 51 }, end: { line: 49, column: 52 } }
                  ],
                  line: 49
                },
                '2': {
                  loc: { start: { line: 52, column: 2 }, end: { line: 54, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 52, column: 2 }, end: { line: 54, column: 3 } },
                    { start: { line: 52, column: 2 }, end: { line: 54, column: 3 } }
                  ],
                  line: 52
                },
                '3': {
                  loc: { start: { line: 104, column: 2 }, end: { line: 110, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 104, column: 2 }, end: { line: 110, column: 3 } },
                    { start: { line: 104, column: 2 }, end: { line: 110, column: 3 } }
                  ],
                  line: 104
                },
                '4': {
                  loc: { start: { line: 104, column: 6 }, end: { line: 104, column: 39 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 104, column: 6 }, end: { line: 104, column: 20 } },
                    { start: { line: 104, column: 24 }, end: { line: 104, column: 39 } }
                  ],
                  line: 104
                },
                '5': {
                  loc: { start: { line: 111, column: 2 }, end: { line: 111, column: 33 } },
                  type: 'if',
                  locations: [
                    { start: { line: 111, column: 2 }, end: { line: 111, column: 33 } },
                    { start: { line: 111, column: 2 }, end: { line: 111, column: 33 } }
                  ],
                  line: 111
                },
                '6': {
                  loc: { start: { line: 219, column: 2 }, end: { line: 229, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 219, column: 2 }, end: { line: 229, column: 3 } },
                    { start: { line: 219, column: 2 }, end: { line: 229, column: 3 } }
                  ],
                  line: 219
                },
                '7': {
                  loc: { start: { line: 273, column: 2 }, end: { line: 296, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 273, column: 2 }, end: { line: 296, column: 3 } },
                    { start: { line: 273, column: 2 }, end: { line: 296, column: 3 } }
                  ],
                  line: 273
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0,
                '118': 0,
                '119': 0,
                '120': 0,
                '121': 0,
                '122': 0,
                '123': 0,
                '124': 0,
                '125': 0,
                '126': 0,
                '127': 0,
                '128': 0,
                '129': 0,
                '130': 0,
                '131': 0,
                '132': 0,
                '133': 0,
                '134': 0,
                '135': 0,
                '136': 0,
                '137': 0,
                '138': 0,
                '139': 0,
                '140': 0,
                '141': 0,
                '142': 0,
                '143': 0,
                '144': 0,
                '145': 0,
                '146': 0,
                '147': 0,
                '148': 0,
                '149': 0,
                '150': 0,
                '151': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '6bcdb5c17ff74d7346ab3cf0b0e076336cd1669e'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.string.sub');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_2cz6py1rks.s[0]++;
          /**
           * p5 Geometry class
           * @class p5.Geometry
           * @constructor
           * @param  {Integer} [detailX] number of vertices on horizontal surface
           * @param  {Integer} [detailY] number of vertices on horizontal surface
           * @param {function} [callback] function to call upon object instantiation.
           */
          _main.default.Geometry = function(detailX, detailY, callback) {
            cov_2cz6py1rks.f[0]++;
            cov_2cz6py1rks.s[1]++;
            //an array containing every vertex
            //@type [p5.Vector]
            this.vertices = [];

            //an array containing every vertex for stroke drawing
            cov_2cz6py1rks.s[2]++;
            this.lineVertices = [];

            //an array 1 normal per lineVertex with
            //final position representing which direction to
            //displace for strokeWeight
            //[[0,0,-1,1], [0,1,0,-1] ...];
            cov_2cz6py1rks.s[3]++;
            this.lineNormals = [];

            //an array containing 1 normal per vertex
            //@type [p5.Vector]
            //[p5.Vector, p5.Vector, p5.Vector,p5.Vector, p5.Vector, p5.Vector,...]
            cov_2cz6py1rks.s[4]++;
            this.vertexNormals = [];
            //an array containing each three vertex indices that form a face
            //[[0, 1, 2], [2, 1, 3], ...]
            cov_2cz6py1rks.s[5]++;
            this.faces = [];
            //a 2D array containing uvs for every vertex
            //[[0.0,0.0],[1.0,0.0], ...]
            cov_2cz6py1rks.s[6]++;
            this.uvs = [];
            // a 2D array containing edge connectivity pattern for create line vertices
            //based on faces for most objects;
            cov_2cz6py1rks.s[7]++;
            this.edges = [];
            cov_2cz6py1rks.s[8]++;
            this.vertexColors = [];
            cov_2cz6py1rks.s[9]++;
            this.detailX =
              detailX !== undefined
                ? (cov_2cz6py1rks.b[0][0]++, detailX)
                : (cov_2cz6py1rks.b[0][1]++, 1);
            cov_2cz6py1rks.s[10]++;
            this.detailY =
              detailY !== undefined
                ? (cov_2cz6py1rks.b[1][0]++, detailY)
                : (cov_2cz6py1rks.b[1][1]++, 1);
            cov_2cz6py1rks.s[11]++;
            this.dirtyFlags = {};
            cov_2cz6py1rks.s[12]++;

            if (callback instanceof Function) {
              cov_2cz6py1rks.b[2][0]++;
              cov_2cz6py1rks.s[13]++;
              callback.call(this);
            } else {
              cov_2cz6py1rks.b[2][1]++;
            }
            cov_2cz6py1rks.s[14]++;
            return this; // TODO: is this a constructor?
          };
          cov_2cz6py1rks.s[15]++;

          _main.default.Geometry.prototype.reset = function() {
            cov_2cz6py1rks.f[1]++;
            cov_2cz6py1rks.s[16]++;
            this.lineVertices.length = 0;
            cov_2cz6py1rks.s[17]++;
            this.lineNormals.length = 0;
            cov_2cz6py1rks.s[18]++;

            this.vertices.length = 0;
            cov_2cz6py1rks.s[19]++;
            this.edges.length = 0;
            cov_2cz6py1rks.s[20]++;
            this.vertexColors.length = 0;
            cov_2cz6py1rks.s[21]++;
            this.vertexNormals.length = 0;
            cov_2cz6py1rks.s[22]++;
            this.uvs.length = 0;
            cov_2cz6py1rks.s[23]++;

            this.dirtyFlags = {};
          };

          /**
           * computes faces for geometry objects based on the vertices.
           * @method computeFaces
           * @chainable
           */ cov_2cz6py1rks.s[24]++;
          _main.default.Geometry.prototype.computeFaces = function() {
            cov_2cz6py1rks.f[2]++;
            cov_2cz6py1rks.s[25]++;
            this.faces.length = 0;
            var sliceCount = (cov_2cz6py1rks.s[26]++, this.detailX + 1);
            var a, b, c, d;
            cov_2cz6py1rks.s[27]++;
            for (var i = (cov_2cz6py1rks.s[28]++, 0); i < this.detailY; i++) {
              cov_2cz6py1rks.s[29]++;
              for (var j = (cov_2cz6py1rks.s[30]++, 0); j < this.detailX; j++) {
                cov_2cz6py1rks.s[31]++;
                a = i * sliceCount + j; // + offset;
                cov_2cz6py1rks.s[32]++;
                b = i * sliceCount + j + 1; // + offset;
                cov_2cz6py1rks.s[33]++;
                c = (i + 1) * sliceCount + j + 1; // + offset;
                cov_2cz6py1rks.s[34]++;
                d = (i + 1) * sliceCount + j; // + offset;
                cov_2cz6py1rks.s[35]++;
                this.faces.push([a, b, d]);
                cov_2cz6py1rks.s[36]++;
                this.faces.push([d, b, c]);
              }
            }
            cov_2cz6py1rks.s[37]++;
            return this;
          };
          cov_2cz6py1rks.s[38]++;

          _main.default.Geometry.prototype._getFaceNormal = function(faceId) {
            cov_2cz6py1rks.f[3]++;
            //This assumes that vA->vB->vC is a counter-clockwise ordering
            var face = (cov_2cz6py1rks.s[39]++, this.faces[faceId]);
            var vA = (cov_2cz6py1rks.s[40]++, this.vertices[face[0]]);
            var vB = (cov_2cz6py1rks.s[41]++, this.vertices[face[1]]);
            var vC = (cov_2cz6py1rks.s[42]++, this.vertices[face[2]]);
            var ab = (cov_2cz6py1rks.s[43]++, _main.default.Vector.sub(vB, vA));
            var ac = (cov_2cz6py1rks.s[44]++, _main.default.Vector.sub(vC, vA));
            var n = (cov_2cz6py1rks.s[45]++, _main.default.Vector.cross(ab, ac));
            var ln = (cov_2cz6py1rks.s[46]++, _main.default.Vector.mag(n));
            var sinAlpha = (cov_2cz6py1rks.s[47]++,
            ln / (_main.default.Vector.mag(ab) * _main.default.Vector.mag(ac)));
            cov_2cz6py1rks.s[48]++;
            if (
              (cov_2cz6py1rks.b[4][0]++, sinAlpha === 0) ||
              (cov_2cz6py1rks.b[4][1]++, isNaN(sinAlpha))
            ) {
              cov_2cz6py1rks.b[3][0]++;
              cov_2cz6py1rks.s[49]++;
              console.warn(
                'p5.Geometry.prototype._getFaceNormal:',
                'face has colinear sides or a repeated vertex'
              );
              cov_2cz6py1rks.s[50]++;

              return n;
            } else {
              cov_2cz6py1rks.b[3][1]++;
            }
            cov_2cz6py1rks.s[51]++;
            if (sinAlpha > 1) {
              cov_2cz6py1rks.b[5][0]++;
              cov_2cz6py1rks.s[52]++;
              sinAlpha = 1;
            } else {
              cov_2cz6py1rks.b[5][1]++;
            } // handle float rounding error
            cov_2cz6py1rks.s[53]++;
            return n.mult(Math.asin(sinAlpha) / ln);
          };
          /**
           * computes smooth normals per vertex as an average of each
           * face.
           * @method computeNormals
           * @chainable
           */ cov_2cz6py1rks.s[54]++;
          _main.default.Geometry.prototype.computeNormals = function() {
            cov_2cz6py1rks.f[4]++;
            var vertexNormals = (cov_2cz6py1rks.s[55]++, this.vertexNormals);
            var vertices = (cov_2cz6py1rks.s[56]++, this.vertices);
            var faces = (cov_2cz6py1rks.s[57]++, this.faces);
            var iv;

            // initialize the vertexNormals array with empty vectors
            cov_2cz6py1rks.s[58]++;
            vertexNormals.length = 0;
            cov_2cz6py1rks.s[59]++;
            for (iv = 0; iv < vertices.length; ++iv) {
              cov_2cz6py1rks.s[60]++;
              vertexNormals.push(new _main.default.Vector());
            }

            // loop through all the faces adding its normal to the normal
            // of each of its vertices
            cov_2cz6py1rks.s[61]++;
            for (var f = (cov_2cz6py1rks.s[62]++, 0); f < faces.length; ++f) {
              var face = (cov_2cz6py1rks.s[63]++, faces[f]);
              var faceNormal = (cov_2cz6py1rks.s[64]++, this._getFaceNormal(f));

              // all three vertices get the normal added
              cov_2cz6py1rks.s[65]++;
              for (var fv = (cov_2cz6py1rks.s[66]++, 0); fv < 3; ++fv) {
                var vertexIndex = (cov_2cz6py1rks.s[67]++, face[fv]);
                cov_2cz6py1rks.s[68]++;
                vertexNormals[vertexIndex].add(faceNormal);
              }
            }

            // normalize the normals
            cov_2cz6py1rks.s[69]++;
            for (iv = 0; iv < vertices.length; ++iv) {
              cov_2cz6py1rks.s[70]++;
              vertexNormals[iv].normalize();
            }
            cov_2cz6py1rks.s[71]++;

            return this;
          };

          /**
           * Averages the vertex normals. Used in curved
           * surfaces
           * @method averageNormals
           * @chainable
           */ cov_2cz6py1rks.s[72]++;
          _main.default.Geometry.prototype.averageNormals = function() {
            cov_2cz6py1rks.f[5]++;
            cov_2cz6py1rks.s[73]++;
            for (var i = (cov_2cz6py1rks.s[74]++, 0); i <= this.detailY; i++) {
              var offset = (cov_2cz6py1rks.s[75]++, this.detailX + 1);
              var temp = (cov_2cz6py1rks.s[76]++,
              _main.default.Vector.add(
                this.vertexNormals[i * offset],
                this.vertexNormals[i * offset + this.detailX]
              ));
              cov_2cz6py1rks.s[77]++;

              temp = _main.default.Vector.div(temp, 2);
              cov_2cz6py1rks.s[78]++;
              this.vertexNormals[i * offset] = temp;
              cov_2cz6py1rks.s[79]++;
              this.vertexNormals[i * offset + this.detailX] = temp;
            }
            cov_2cz6py1rks.s[80]++;
            return this;
          };

          /**
           * Averages pole normals.  Used in spherical primitives
           * @method averagePoleNormals
           * @chainable
           */ cov_2cz6py1rks.s[81]++;
          _main.default.Geometry.prototype.averagePoleNormals = function() {
            cov_2cz6py1rks.f[6]++;
            //average the north pole
            var sum = (cov_2cz6py1rks.s[82]++, new _main.default.Vector(0, 0, 0));
            cov_2cz6py1rks.s[83]++;
            for (var i = (cov_2cz6py1rks.s[84]++, 0); i < this.detailX; i++) {
              cov_2cz6py1rks.s[85]++;
              sum.add(this.vertexNormals[i]);
            }
            cov_2cz6py1rks.s[86]++;
            sum = _main.default.Vector.div(sum, this.detailX);
            cov_2cz6py1rks.s[87]++;

            for (var _i = (cov_2cz6py1rks.s[88]++, 0); _i < this.detailX; _i++) {
              cov_2cz6py1rks.s[89]++;
              this.vertexNormals[_i] = sum;
            }

            //average the south pole
            cov_2cz6py1rks.s[90]++;
            sum = new _main.default.Vector(0, 0, 0);
            cov_2cz6py1rks.s[91]++;
            for (
              var _i2 = (cov_2cz6py1rks.s[92]++, this.vertices.length - 1);
              _i2 > this.vertices.length - 1 - this.detailX;
              _i2--
            ) {
              cov_2cz6py1rks.s[93]++;
              sum.add(this.vertexNormals[_i2]);
            }
            cov_2cz6py1rks.s[94]++;
            sum = _main.default.Vector.div(sum, this.detailX);
            cov_2cz6py1rks.s[95]++;

            for (
              var _i3 = (cov_2cz6py1rks.s[96]++, this.vertices.length - 1);
              _i3 > this.vertices.length - 1 - this.detailX;
              _i3--
            ) {
              cov_2cz6py1rks.s[97]++;
              this.vertexNormals[_i3] = sum;
            }
            cov_2cz6py1rks.s[98]++;
            return this;
          };

          /**
           * Create a 2D array for establishing stroke connections
           * @private
           * @chainable
           */ cov_2cz6py1rks.s[99]++;
          _main.default.Geometry.prototype._makeTriangleEdges = function() {
            cov_2cz6py1rks.f[7]++;
            cov_2cz6py1rks.s[100]++;
            this.edges.length = 0;
            cov_2cz6py1rks.s[101]++;
            if (Array.isArray(this.strokeIndices)) {
              cov_2cz6py1rks.b[6][0]++;
              cov_2cz6py1rks.s[102]++;
              for (
                var i = (cov_2cz6py1rks.s[103]++, 0),
                  max = (cov_2cz6py1rks.s[104]++, this.strokeIndices.length);
                i < max;
                i++
              ) {
                cov_2cz6py1rks.s[105]++;
                this.edges.push(this.strokeIndices[i]);
              }
            } else {
              cov_2cz6py1rks.b[6][1]++;
              cov_2cz6py1rks.s[106]++;
              for (var j = (cov_2cz6py1rks.s[107]++, 0); j < this.faces.length; j++) {
                cov_2cz6py1rks.s[108]++;
                this.edges.push([this.faces[j][0], this.faces[j][1]]);
                cov_2cz6py1rks.s[109]++;
                this.edges.push([this.faces[j][1], this.faces[j][2]]);
                cov_2cz6py1rks.s[110]++;
                this.edges.push([this.faces[j][2], this.faces[j][0]]);
              }
            }
            cov_2cz6py1rks.s[111]++;
            return this;
          };

          /**
           * Create 4 vertices for each stroke line, two at the beginning position
           * and two at the end position. These vertices are displaced relative to
           * that line's normal on the GPU
           * @private
           * @chainable
           */ cov_2cz6py1rks.s[112]++;
          _main.default.Geometry.prototype._edgesToVertices = function() {
            cov_2cz6py1rks.f[8]++;
            cov_2cz6py1rks.s[113]++;
            this.lineVertices.length = 0;
            cov_2cz6py1rks.s[114]++;
            this.lineNormals.length = 0;
            cov_2cz6py1rks.s[115]++;

            for (var i = (cov_2cz6py1rks.s[116]++, 0); i < this.edges.length; i++) {
              var begin = (cov_2cz6py1rks.s[117]++, this.vertices[this.edges[i][0]]);
              var end = (cov_2cz6py1rks.s[118]++, this.vertices[this.edges[i][1]]);
              var dir = (cov_2cz6py1rks.s[119]++,
              end
                .copy()
                .sub(begin)
                .normalize());
              var a = (cov_2cz6py1rks.s[120]++, begin.array());
              var b = (cov_2cz6py1rks.s[121]++, begin.array());
              var c = (cov_2cz6py1rks.s[122]++, end.array());
              var d = (cov_2cz6py1rks.s[123]++, end.array());
              var dirAdd = (cov_2cz6py1rks.s[124]++, dir.array());
              var dirSub = (cov_2cz6py1rks.s[125]++, dir.array());
              // below is used to displace the pair of vertices at beginning and end
              // in opposite directions
              cov_2cz6py1rks.s[126]++;
              dirAdd.push(1);
              cov_2cz6py1rks.s[127]++;
              dirSub.push(-1);
              cov_2cz6py1rks.s[128]++;
              this.lineNormals.push(dirAdd, dirSub, dirAdd, dirAdd, dirSub, dirSub);
              cov_2cz6py1rks.s[129]++;
              this.lineVertices.push(a, b, c, c, b, d);
            }
            cov_2cz6py1rks.s[130]++;
            return this;
          };

          /**
           * Modifies all vertices to be centered within the range -100 to 100.
           * @method normalize
           * @chainable
           */ cov_2cz6py1rks.s[131]++;
          _main.default.Geometry.prototype.normalize = function() {
            cov_2cz6py1rks.f[9]++;
            cov_2cz6py1rks.s[132]++;
            if (this.vertices.length > 0) {
              cov_2cz6py1rks.b[7][0]++;
              // Find the corners of our bounding box
              var maxPosition = (cov_2cz6py1rks.s[133]++, this.vertices[0].copy());
              var minPosition = (cov_2cz6py1rks.s[134]++, this.vertices[0].copy());
              cov_2cz6py1rks.s[135]++;

              for (var i = (cov_2cz6py1rks.s[136]++, 0); i < this.vertices.length; i++) {
                cov_2cz6py1rks.s[137]++;
                maxPosition.x = Math.max(maxPosition.x, this.vertices[i].x);
                cov_2cz6py1rks.s[138]++;
                minPosition.x = Math.min(minPosition.x, this.vertices[i].x);
                cov_2cz6py1rks.s[139]++;
                maxPosition.y = Math.max(maxPosition.y, this.vertices[i].y);
                cov_2cz6py1rks.s[140]++;
                minPosition.y = Math.min(minPosition.y, this.vertices[i].y);
                cov_2cz6py1rks.s[141]++;
                maxPosition.z = Math.max(maxPosition.z, this.vertices[i].z);
                cov_2cz6py1rks.s[142]++;
                minPosition.z = Math.min(minPosition.z, this.vertices[i].z);
              }

              var center = (cov_2cz6py1rks.s[143]++,
              _main.default.Vector.lerp(maxPosition, minPosition, 0.5));
              var dist = (cov_2cz6py1rks.s[144]++,
              _main.default.Vector.sub(maxPosition, minPosition));
              var longestDist = (cov_2cz6py1rks.s[145]++,
              Math.max(Math.max(dist.x, dist.y), dist.z));
              var scale = (cov_2cz6py1rks.s[146]++, 200 / longestDist);
              cov_2cz6py1rks.s[147]++;

              for (
                var _i4 = (cov_2cz6py1rks.s[148]++, 0);
                _i4 < this.vertices.length;
                _i4++
              ) {
                cov_2cz6py1rks.s[149]++;
                this.vertices[_i4].sub(center);
                cov_2cz6py1rks.s[150]++;
                this.vertices[_i4].mult(scale);
              }
            } else {
              cov_2cz6py1rks.b[7][1]++;
            }
            cov_2cz6py1rks.s[151]++;
            return this;
          };
          var _default = _main.default.Geometry;
          exports.default = _default;
        },
        { '../core/main': 283, 'core-js/modules/es.string.sub': 207 }
      ],
      333: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_2hr51v6ix7 = (function() {
            var path = '/Users/outofambit/src/p5.js/src/webgl/p5.Matrix.js';
            var hash = 'c97b82909bcb01c47f2f1817fef409a72e9eacab';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/webgl/p5.Matrix.js',
              statementMap: {
                '0': { start: { line: 12, column: 23 }, end: { line: 12, column: 28 } },
                '1': { start: { line: 13, column: 20 }, end: { line: 13, column: 43 } },
                '2': { start: { line: 13, column: 25 }, end: { line: 13, column: 43 } },
                '3': { start: { line: 14, column: 0 }, end: { line: 17, column: 1 } },
                '4': { start: { line: 15, column: 2 }, end: { line: 15, column: 34 } },
                '5': { start: { line: 16, column: 2 }, end: { line: 16, column: 71 } },
                '6': { start: { line: 16, column: 23 }, end: { line: 16, column: 70 } },
                '7': { start: { line: 27, column: 0 }, end: { line: 50, column: 2 } },
                '8': { start: { line: 28, column: 15 }, end: { line: 28, column: 42 } },
                '9': { start: { line: 29, column: 2 }, end: { line: 31, column: 3 } },
                '10': { start: { line: 29, column: 15 }, end: { line: 29, column: 16 } },
                '11': { start: { line: 30, column: 4 }, end: { line: 30, column: 27 } },
                '12': { start: { line: 36, column: 2 }, end: { line: 38, column: 3 } },
                '13': { start: { line: 37, column: 4 }, end: { line: 37, column: 36 } },
                '14': { start: { line: 40, column: 2 }, end: { line: 48, column: 3 } },
                '15': { start: { line: 41, column: 4 }, end: { line: 43, column: 58 } },
                '16': { start: { line: 45, column: 4 }, end: { line: 47, column: 79 } },
                '17': { start: { line: 49, column: 2 }, end: { line: 49, column: 14 } },
                '18': { start: { line: 67, column: 0 }, end: { line: 93, column: 2 } },
                '19': { start: { line: 68, column: 2 }, end: { line: 91, column: 3 } },
                '20': { start: { line: 69, column: 4 }, end: { line: 69, column: 30 } },
                '21': { start: { line: 70, column: 4 }, end: { line: 70, column: 16 } },
                '22': { start: { line: 71, column: 9 }, end: { line: 91, column: 3 } },
                '23': { start: { line: 72, column: 4 }, end: { line: 72, column: 25 } },
                '24': { start: { line: 73, column: 4 }, end: { line: 73, column: 16 } },
                '25': { start: { line: 74, column: 9 }, end: { line: 91, column: 3 } },
                '26': { start: { line: 75, column: 4 }, end: { line: 75, column: 32 } },
                '27': { start: { line: 76, column: 4 }, end: { line: 76, column: 32 } },
                '28': { start: { line: 77, column: 4 }, end: { line: 77, column: 32 } },
                '29': { start: { line: 78, column: 4 }, end: { line: 78, column: 32 } },
                '30': { start: { line: 79, column: 4 }, end: { line: 79, column: 32 } },
                '31': { start: { line: 80, column: 4 }, end: { line: 80, column: 32 } },
                '32': { start: { line: 81, column: 4 }, end: { line: 81, column: 32 } },
                '33': { start: { line: 82, column: 4 }, end: { line: 82, column: 32 } },
                '34': { start: { line: 83, column: 4 }, end: { line: 83, column: 32 } },
                '35': { start: { line: 84, column: 4 }, end: { line: 84, column: 32 } },
                '36': { start: { line: 85, column: 4 }, end: { line: 85, column: 34 } },
                '37': { start: { line: 86, column: 4 }, end: { line: 86, column: 34 } },
                '38': { start: { line: 87, column: 4 }, end: { line: 87, column: 34 } },
                '39': { start: { line: 88, column: 4 }, end: { line: 88, column: 34 } },
                '40': { start: { line: 89, column: 4 }, end: { line: 89, column: 34 } },
                '41': { start: { line: 90, column: 4 }, end: { line: 90, column: 34 } },
                '42': { start: { line: 92, column: 2 }, end: { line: 92, column: 14 } },
                '43': { start: { line: 101, column: 0 }, end: { line: 103, column: 2 } },
                '44': { start: { line: 102, column: 2 }, end: { line: 102, column: 43 } },
                '45': { start: { line: 110, column: 0 }, end: { line: 129, column: 2 } },
                '46': { start: { line: 111, column: 17 }, end: { line: 111, column: 39 } },
                '47': { start: { line: 112, column: 2 }, end: { line: 112, column: 32 } },
                '48': { start: { line: 113, column: 2 }, end: { line: 113, column: 32 } },
                '49': { start: { line: 114, column: 2 }, end: { line: 114, column: 32 } },
                '50': { start: { line: 115, column: 2 }, end: { line: 115, column: 32 } },
                '51': { start: { line: 116, column: 2 }, end: { line: 116, column: 32 } },
                '52': { start: { line: 117, column: 2 }, end: { line: 117, column: 32 } },
                '53': { start: { line: 118, column: 2 }, end: { line: 118, column: 32 } },
                '54': { start: { line: 119, column: 2 }, end: { line: 119, column: 32 } },
                '55': { start: { line: 120, column: 2 }, end: { line: 120, column: 32 } },
                '56': { start: { line: 121, column: 2 }, end: { line: 121, column: 32 } },
                '57': { start: { line: 122, column: 2 }, end: { line: 122, column: 34 } },
                '58': { start: { line: 123, column: 2 }, end: { line: 123, column: 34 } },
                '59': { start: { line: 124, column: 2 }, end: { line: 124, column: 34 } },
                '60': { start: { line: 125, column: 2 }, end: { line: 125, column: 34 } },
                '61': { start: { line: 126, column: 2 }, end: { line: 126, column: 34 } },
                '62': { start: { line: 127, column: 2 }, end: { line: 127, column: 34 } },
                '63': { start: { line: 128, column: 2 }, end: { line: 128, column: 16 } },
                '64': { start: { line: 136, column: 0 }, end: { line: 136, column: 51 } },
                '65': { start: { line: 136, column: 30 }, end: { line: 136, column: 50 } },
                '66': { start: { line: 145, column: 0 }, end: { line: 197, column: 2 } },
                '67': { start: { line: 147, column: 2 }, end: { line: 195, column: 3 } },
                '68': { start: { line: 148, column: 4 }, end: { line: 148, column: 20 } },
                '69': { start: { line: 149, column: 4 }, end: { line: 149, column: 20 } },
                '70': { start: { line: 150, column: 4 }, end: { line: 150, column: 20 } },
                '71': { start: { line: 151, column: 4 }, end: { line: 151, column: 20 } },
                '72': { start: { line: 152, column: 4 }, end: { line: 152, column: 20 } },
                '73': { start: { line: 153, column: 4 }, end: { line: 153, column: 21 } },
                '74': { start: { line: 155, column: 4 }, end: { line: 155, column: 29 } },
                '75': { start: { line: 156, column: 4 }, end: { line: 156, column: 29 } },
                '76': { start: { line: 157, column: 4 }, end: { line: 157, column: 29 } },
                '77': { start: { line: 158, column: 4 }, end: { line: 158, column: 30 } },
                '78': { start: { line: 159, column: 4 }, end: { line: 159, column: 23 } },
                '79': { start: { line: 160, column: 4 }, end: { line: 160, column: 29 } },
                '80': { start: { line: 161, column: 4 }, end: { line: 161, column: 29 } },
                '81': { start: { line: 162, column: 4 }, end: { line: 162, column: 30 } },
                '82': { start: { line: 163, column: 4 }, end: { line: 163, column: 23 } },
                '83': { start: { line: 164, column: 4 }, end: { line: 164, column: 23 } },
                '84': { start: { line: 165, column: 4 }, end: { line: 165, column: 31 } },
                '85': { start: { line: 166, column: 4 }, end: { line: 166, column: 31 } },
                '86': { start: { line: 167, column: 4 }, end: { line: 167, column: 24 } },
                '87': { start: { line: 168, column: 4 }, end: { line: 168, column: 24 } },
                '88': { start: { line: 169, column: 4 }, end: { line: 169, column: 24 } },
                '89': { start: { line: 170, column: 4 }, end: { line: 170, column: 31 } },
                '90': { start: { line: 171, column: 9 }, end: { line: 195, column: 3 } },
                '91': { start: { line: 172, column: 4 }, end: { line: 172, column: 15 } },
                '92': { start: { line: 173, column: 4 }, end: { line: 173, column: 15 } },
                '93': { start: { line: 174, column: 4 }, end: { line: 174, column: 15 } },
                '94': { start: { line: 175, column: 4 }, end: { line: 175, column: 15 } },
                '95': { start: { line: 176, column: 4 }, end: { line: 176, column: 15 } },
                '96': { start: { line: 177, column: 4 }, end: { line: 177, column: 16 } },
                '97': { start: { line: 179, column: 4 }, end: { line: 179, column: 24 } },
                '98': { start: { line: 180, column: 4 }, end: { line: 180, column: 24 } },
                '99': { start: { line: 181, column: 4 }, end: { line: 181, column: 24 } },
                '100': { start: { line: 182, column: 4 }, end: { line: 182, column: 25 } },
                '101': { start: { line: 183, column: 4 }, end: { line: 183, column: 23 } },
                '102': { start: { line: 184, column: 4 }, end: { line: 184, column: 24 } },
                '103': { start: { line: 185, column: 4 }, end: { line: 185, column: 24 } },
                '104': { start: { line: 186, column: 4 }, end: { line: 186, column: 25 } },
                '105': { start: { line: 187, column: 4 }, end: { line: 187, column: 23 } },
                '106': { start: { line: 188, column: 4 }, end: { line: 188, column: 23 } },
                '107': { start: { line: 189, column: 4 }, end: { line: 189, column: 26 } },
                '108': { start: { line: 190, column: 4 }, end: { line: 190, column: 26 } },
                '109': { start: { line: 191, column: 4 }, end: { line: 191, column: 24 } },
                '110': { start: { line: 192, column: 4 }, end: { line: 192, column: 24 } },
                '111': { start: { line: 193, column: 4 }, end: { line: 193, column: 24 } },
                '112': { start: { line: 194, column: 4 }, end: { line: 194, column: 26 } },
                '113': { start: { line: 196, column: 2 }, end: { line: 196, column: 14 } },
                '114': { start: { line: 206, column: 0 }, end: { line: 284, column: 2 } },
                '115': { start: { line: 209, column: 2 }, end: { line: 243, column: 3 } },
                '116': { start: { line: 210, column: 4 }, end: { line: 210, column: 20 } },
                '117': { start: { line: 211, column: 4 }, end: { line: 211, column: 20 } },
                '118': { start: { line: 212, column: 4 }, end: { line: 212, column: 20 } },
                '119': { start: { line: 213, column: 4 }, end: { line: 213, column: 20 } },
                '120': { start: { line: 214, column: 4 }, end: { line: 214, column: 20 } },
                '121': { start: { line: 215, column: 4 }, end: { line: 215, column: 20 } },
                '122': { start: { line: 216, column: 4 }, end: { line: 216, column: 20 } },
                '123': { start: { line: 217, column: 4 }, end: { line: 217, column: 20 } },
                '124': { start: { line: 218, column: 4 }, end: { line: 218, column: 20 } },
                '125': { start: { line: 219, column: 4 }, end: { line: 219, column: 20 } },
                '126': { start: { line: 220, column: 4 }, end: { line: 220, column: 21 } },
                '127': { start: { line: 221, column: 4 }, end: { line: 221, column: 21 } },
                '128': { start: { line: 222, column: 4 }, end: { line: 222, column: 21 } },
                '129': { start: { line: 223, column: 4 }, end: { line: 223, column: 21 } },
                '130': { start: { line: 224, column: 4 }, end: { line: 224, column: 21 } },
                '131': { start: { line: 225, column: 4 }, end: { line: 225, column: 21 } },
                '132': { start: { line: 226, column: 9 }, end: { line: 243, column: 3 } },
                '133': { start: { line: 227, column: 4 }, end: { line: 227, column: 15 } },
                '134': { start: { line: 228, column: 4 }, end: { line: 228, column: 15 } },
                '135': { start: { line: 229, column: 4 }, end: { line: 229, column: 15 } },
                '136': { start: { line: 230, column: 4 }, end: { line: 230, column: 15 } },
                '137': { start: { line: 231, column: 4 }, end: { line: 231, column: 15 } },
                '138': { start: { line: 232, column: 4 }, end: { line: 232, column: 15 } },
                '139': { start: { line: 233, column: 4 }, end: { line: 233, column: 15 } },
                '140': { start: { line: 234, column: 4 }, end: { line: 234, column: 15 } },
                '141': { start: { line: 235, column: 4 }, end: { line: 235, column: 15 } },
                '142': { start: { line: 236, column: 4 }, end: { line: 236, column: 15 } },
                '143': { start: { line: 237, column: 4 }, end: { line: 237, column: 16 } },
                '144': { start: { line: 238, column: 4 }, end: { line: 238, column: 16 } },
                '145': { start: { line: 239, column: 4 }, end: { line: 239, column: 16 } },
                '146': { start: { line: 240, column: 4 }, end: { line: 240, column: 16 } },
                '147': { start: { line: 241, column: 4 }, end: { line: 241, column: 16 } },
                '148': { start: { line: 242, column: 4 }, end: { line: 242, column: 16 } },
                '149': { start: { line: 244, column: 14 }, end: { line: 244, column: 35 } },
                '150': { start: { line: 245, column: 14 }, end: { line: 245, column: 35 } },
                '151': { start: { line: 246, column: 14 }, end: { line: 246, column: 35 } },
                '152': { start: { line: 247, column: 14 }, end: { line: 247, column: 35 } },
                '153': { start: { line: 248, column: 14 }, end: { line: 248, column: 35 } },
                '154': { start: { line: 249, column: 14 }, end: { line: 249, column: 35 } },
                '155': { start: { line: 250, column: 14 }, end: { line: 250, column: 35 } },
                '156': { start: { line: 251, column: 14 }, end: { line: 251, column: 35 } },
                '157': { start: { line: 252, column: 14 }, end: { line: 252, column: 35 } },
                '158': { start: { line: 253, column: 14 }, end: { line: 253, column: 35 } },
                '159': { start: { line: 254, column: 14 }, end: { line: 254, column: 35 } },
                '160': { start: { line: 255, column: 14 }, end: { line: 255, column: 35 } },
                '161': { start: { line: 259, column: 4 }, end: { line: 259, column: 73 } },
                '162': { start: { line: 261, column: 2 }, end: { line: 263, column: 3 } },
                '163': { start: { line: 262, column: 4 }, end: { line: 262, column: 16 } },
                '164': { start: { line: 264, column: 2 }, end: { line: 264, column: 18 } },
                '165': { start: { line: 266, column: 2 }, end: { line: 266, column: 59 } },
                '166': { start: { line: 267, column: 2 }, end: { line: 267, column: 59 } },
                '167': { start: { line: 268, column: 2 }, end: { line: 268, column: 59 } },
                '168': { start: { line: 269, column: 2 }, end: { line: 269, column: 59 } },
                '169': { start: { line: 270, column: 2 }, end: { line: 270, column: 59 } },
                '170': { start: { line: 271, column: 2 }, end: { line: 271, column: 59 } },
                '171': { start: { line: 272, column: 2 }, end: { line: 272, column: 59 } },
                '172': { start: { line: 273, column: 2 }, end: { line: 273, column: 59 } },
                '173': { start: { line: 274, column: 2 }, end: { line: 274, column: 59 } },
                '174': { start: { line: 275, column: 2 }, end: { line: 275, column: 59 } },
                '175': { start: { line: 276, column: 2 }, end: { line: 276, column: 60 } },
                '176': { start: { line: 277, column: 2 }, end: { line: 277, column: 60 } },
                '177': { start: { line: 278, column: 2 }, end: { line: 278, column: 60 } },
                '178': { start: { line: 279, column: 2 }, end: { line: 279, column: 60 } },
                '179': { start: { line: 280, column: 2 }, end: { line: 280, column: 60 } },
                '180': { start: { line: 281, column: 2 }, end: { line: 281, column: 60 } },
                '181': { start: { line: 283, column: 2 }, end: { line: 283, column: 14 } },
                '182': { start: { line: 291, column: 0 }, end: { line: 321, column: 2 } },
                '183': { start: { line: 292, column: 14 }, end: { line: 292, column: 26 } },
                '184': { start: { line: 293, column: 14 }, end: { line: 293, column: 26 } },
                '185': { start: { line: 294, column: 14 }, end: { line: 294, column: 26 } },
                '186': { start: { line: 295, column: 14 }, end: { line: 295, column: 26 } },
                '187': { start: { line: 296, column: 14 }, end: { line: 296, column: 26 } },
                '188': { start: { line: 297, column: 14 }, end: { line: 297, column: 26 } },
                '189': { start: { line: 298, column: 14 }, end: { line: 298, column: 26 } },
                '190': { start: { line: 299, column: 14 }, end: { line: 299, column: 26 } },
                '191': { start: { line: 300, column: 14 }, end: { line: 300, column: 26 } },
                '192': { start: { line: 301, column: 14 }, end: { line: 301, column: 35 } },
                '193': { start: { line: 302, column: 14 }, end: { line: 302, column: 36 } },
                '194': { start: { line: 303, column: 14 }, end: { line: 303, column: 35 } },
                '195': { start: { line: 306, column: 12 }, end: { line: 306, column: 45 } },
                '196': { start: { line: 307, column: 2 }, end: { line: 309, column: 3 } },
                '197': { start: { line: 308, column: 4 }, end: { line: 308, column: 16 } },
                '198': { start: { line: 310, column: 2 }, end: { line: 310, column: 18 } },
                '199': { start: { line: 311, column: 2 }, end: { line: 311, column: 27 } },
                '200': { start: { line: 312, column: 2 }, end: { line: 312, column: 48 } },
                '201': { start: { line: 313, column: 2 }, end: { line: 313, column: 47 } },
                '202': { start: { line: 314, column: 2 }, end: { line: 314, column: 27 } },
                '203': { start: { line: 315, column: 2 }, end: { line: 315, column: 47 } },
                '204': { start: { line: 316, column: 2 }, end: { line: 316, column: 48 } },
                '205': { start: { line: 317, column: 2 }, end: { line: 317, column: 27 } },
                '206': { start: { line: 318, column: 2 }, end: { line: 318, column: 48 } },
                '207': { start: { line: 319, column: 2 }, end: { line: 319, column: 47 } },
                '208': { start: { line: 320, column: 2 }, end: { line: 320, column: 14 } },
                '209': { start: { line: 329, column: 0 }, end: { line: 340, column: 2 } },
                '210': { start: { line: 330, column: 14 }, end: { line: 330, column: 21 } },
                '211': { start: { line: 331, column: 10 }, end: { line: 331, column: 17 } },
                '212': { start: { line: 332, column: 10 }, end: { line: 332, column: 17 } },
                '213': { start: { line: 333, column: 2 }, end: { line: 333, column: 25 } },
                '214': { start: { line: 334, column: 2 }, end: { line: 334, column: 25 } },
                '215': { start: { line: 335, column: 2 }, end: { line: 335, column: 21 } },
                '216': { start: { line: 336, column: 2 }, end: { line: 336, column: 25 } },
                '217': { start: { line: 337, column: 2 }, end: { line: 337, column: 21 } },
                '218': { start: { line: 338, column: 2 }, end: { line: 338, column: 21 } },
                '219': { start: { line: 339, column: 2 }, end: { line: 339, column: 14 } },
                '220': { start: { line: 350, column: 0 }, end: { line: 377, column: 2 } },
                '221': { start: { line: 351, column: 2 }, end: { line: 364, column: 3 } },
                '222': { start: { line: 352, column: 4 }, end: { line: 352, column: 63 } },
                '223': { start: { line: 355, column: 4 }, end: { line: 355, column: 34 } },
                '224': { start: { line: 356, column: 4 }, end: { line: 356, column: 34 } },
                '225': { start: { line: 357, column: 4 }, end: { line: 357, column: 34 } },
                '226': { start: { line: 358, column: 4 }, end: { line: 358, column: 34 } },
                '227': { start: { line: 359, column: 4 }, end: { line: 359, column: 34 } },
                '228': { start: { line: 360, column: 4 }, end: { line: 360, column: 34 } },
                '229': { start: { line: 361, column: 4 }, end: { line: 361, column: 34 } },
                '230': { start: { line: 362, column: 4 }, end: { line: 362, column: 34 } },
                '231': { start: { line: 363, column: 4 }, end: { line: 363, column: 35 } },
                '232': { start: { line: 366, column: 18 }, end: { line: 366, column: 34 } },
                '233': { start: { line: 368, column: 2 }, end: { line: 375, column: 3 } },
                '234': { start: { line: 369, column: 4 }, end: { line: 369, column: 36 } },
                '235': { start: { line: 372, column: 4 }, end: { line: 374, column: 5 } },
                '236': { start: { line: 372, column: 17 }, end: { line: 372, column: 18 } },
                '237': { start: { line: 373, column: 6 }, end: { line: 373, column: 23 } },
                '238': { start: { line: 376, column: 2 }, end: { line: 376, column: 14 } },
                '239': { start: { line: 384, column: 0 }, end: { line: 400, column: 2 } },
                '240': { start: { line: 385, column: 14 }, end: { line: 385, column: 71 } },
                '241': { start: { line: 386, column: 10 }, end: { line: 386, column: 67 } },
                '242': { start: { line: 387, column: 10 }, end: { line: 387, column: 67 } },
                '243': { start: { line: 388, column: 10 }, end: { line: 388, column: 67 } },
                '244': { start: { line: 389, column: 10 }, end: { line: 389, column: 67 } },
                '245': { start: { line: 390, column: 10 }, end: { line: 390, column: 67 } },
                '246': { start: { line: 391, column: 10 }, end: { line: 391, column: 69 } },
                '247': { start: { line: 392, column: 10 }, end: { line: 392, column: 70 } },
                '248': { start: { line: 393, column: 10 }, end: { line: 393, column: 70 } },
                '249': { start: { line: 394, column: 10 }, end: { line: 394, column: 70 } },
                '250': { start: { line: 395, column: 10 }, end: { line: 395, column: 70 } },
                '251': { start: { line: 396, column: 10 }, end: { line: 396, column: 71 } },
                '252': { start: { line: 399, column: 2 }, end: { line: 399, column: 79 } },
                '253': { start: { line: 409, column: 0 }, end: { line: 462, column: 2 } },
                '254': { start: { line: 412, column: 2 }, end: { line: 422, column: 3 } },
                '255': { start: { line: 413, column: 4 }, end: { line: 413, column: 28 } },
                '256': { start: { line: 414, column: 9 }, end: { line: 422, column: 3 } },
                '257': { start: { line: 415, column: 4 }, end: { line: 415, column: 27 } },
                '258': { start: { line: 416, column: 9 }, end: { line: 422, column: 3 } },
                '259': { start: { line: 417, column: 4 }, end: { line: 417, column: 22 } },
                '260': { start: { line: 418, column: 9 }, end: { line: 422, column: 3 } },
                '261': { start: { line: 419, column: 4 }, end: { line: 419, column: 21 } },
                '262': { start: { line: 421, column: 4 }, end: { line: 421, column: 11 } },
                '263': { start: { line: 425, column: 11 }, end: { line: 425, column: 23 } },
                '264': { start: { line: 426, column: 9 }, end: { line: 426, column: 21 } },
                '265': { start: { line: 427, column: 9 }, end: { line: 427, column: 21 } },
                '266': { start: { line: 428, column: 9 }, end: { line: 428, column: 21 } },
                '267': { start: { line: 429, column: 2 }, end: { line: 429, column: 76 } },
                '268': { start: { line: 430, column: 2 }, end: { line: 430, column: 76 } },
                '269': { start: { line: 431, column: 2 }, end: { line: 431, column: 77 } },
                '270': { start: { line: 432, column: 2 }, end: { line: 432, column: 77 } },
                '271': { start: { line: 434, column: 2 }, end: { line: 434, column: 20 } },
                '272': { start: { line: 435, column: 2 }, end: { line: 435, column: 20 } },
                '273': { start: { line: 436, column: 2 }, end: { line: 436, column: 20 } },
                '274': { start: { line: 437, column: 2 }, end: { line: 437, column: 20 } },
                '275': { start: { line: 438, column: 2 }, end: { line: 438, column: 76 } },
                '276': { start: { line: 439, column: 2 }, end: { line: 439, column: 76 } },
                '277': { start: { line: 440, column: 2 }, end: { line: 440, column: 77 } },
                '278': { start: { line: 441, column: 2 }, end: { line: 441, column: 77 } },
                '279': { start: { line: 443, column: 2 }, end: { line: 443, column: 20 } },
                '280': { start: { line: 444, column: 2 }, end: { line: 444, column: 20 } },
                '281': { start: { line: 445, column: 2 }, end: { line: 445, column: 21 } },
                '282': { start: { line: 446, column: 2 }, end: { line: 446, column: 21 } },
                '283': { start: { line: 447, column: 2 }, end: { line: 447, column: 76 } },
                '284': { start: { line: 448, column: 2 }, end: { line: 448, column: 76 } },
                '285': { start: { line: 449, column: 2 }, end: { line: 449, column: 78 } },
                '286': { start: { line: 450, column: 2 }, end: { line: 450, column: 78 } },
                '287': { start: { line: 452, column: 2 }, end: { line: 452, column: 21 } },
                '288': { start: { line: 453, column: 2 }, end: { line: 453, column: 21 } },
                '289': { start: { line: 454, column: 2 }, end: { line: 454, column: 21 } },
                '290': { start: { line: 455, column: 2 }, end: { line: 455, column: 21 } },
                '291': { start: { line: 456, column: 2 }, end: { line: 456, column: 77 } },
                '292': { start: { line: 457, column: 2 }, end: { line: 457, column: 77 } },
                '293': { start: { line: 458, column: 2 }, end: { line: 458, column: 78 } },
                '294': { start: { line: 459, column: 2 }, end: { line: 459, column: 78 } },
                '295': { start: { line: 461, column: 2 }, end: { line: 461, column: 14 } },
                '296': { start: { line: 464, column: 0 }, end: { line: 519, column: 2 } },
                '297': { start: { line: 467, column: 2 }, end: { line: 477, column: 3 } },
                '298': { start: { line: 468, column: 4 }, end: { line: 468, column: 28 } },
                '299': { start: { line: 469, column: 9 }, end: { line: 477, column: 3 } },
                '300': { start: { line: 470, column: 4 }, end: { line: 470, column: 27 } },
                '301': { start: { line: 471, column: 9 }, end: { line: 477, column: 3 } },
                '302': { start: { line: 472, column: 4 }, end: { line: 472, column: 22 } },
                '303': { start: { line: 473, column: 9 }, end: { line: 477, column: 3 } },
                '304': { start: { line: 474, column: 4 }, end: { line: 474, column: 21 } },
                '305': { start: { line: 476, column: 4 }, end: { line: 476, column: 11 } },
                '306': { start: { line: 479, column: 15 }, end: { line: 479, column: 24 } },
                '307': { start: { line: 482, column: 13 }, end: { line: 482, column: 20 } },
                '308': { start: { line: 483, column: 13 }, end: { line: 483, column: 20 } },
                '309': { start: { line: 484, column: 13 }, end: { line: 484, column: 20 } },
                '310': { start: { line: 485, column: 14 }, end: { line: 485, column: 22 } },
                '311': { start: { line: 486, column: 2 }, end: { line: 486, column: 71 } },
                '312': { start: { line: 487, column: 2 }, end: { line: 487, column: 71 } },
                '313': { start: { line: 488, column: 2 }, end: { line: 488, column: 73 } },
                '314': { start: { line: 489, column: 2 }, end: { line: 489, column: 76 } },
                '315': { start: { line: 491, column: 13 }, end: { line: 491, column: 20 } },
                '316': { start: { line: 492, column: 13 }, end: { line: 492, column: 20 } },
                '317': { start: { line: 493, column: 13 }, end: { line: 493, column: 20 } },
                '318': { start: { line: 494, column: 14 }, end: { line: 494, column: 22 } },
                '319': { start: { line: 495, column: 2 }, end: { line: 495, column: 71 } },
                '320': { start: { line: 496, column: 2 }, end: { line: 496, column: 71 } },
                '321': { start: { line: 497, column: 2 }, end: { line: 497, column: 73 } },
                '322': { start: { line: 498, column: 2 }, end: { line: 498, column: 76 } },
                '323': { start: { line: 500, column: 13 }, end: { line: 500, column: 20 } },
                '324': { start: { line: 501, column: 13 }, end: { line: 501, column: 20 } },
                '325': { start: { line: 502, column: 14 }, end: { line: 502, column: 22 } },
                '326': { start: { line: 503, column: 14 }, end: { line: 503, column: 22 } },
                '327': { start: { line: 504, column: 2 }, end: { line: 504, column: 72 } },
                '328': { start: { line: 505, column: 2 }, end: { line: 505, column: 72 } },
                '329': { start: { line: 506, column: 2 }, end: { line: 506, column: 75 } },
                '330': { start: { line: 507, column: 2 }, end: { line: 507, column: 77 } },
                '331': { start: { line: 509, column: 13 }, end: { line: 509, column: 20 } },
                '332': { start: { line: 510, column: 13 }, end: { line: 510, column: 20 } },
                '333': { start: { line: 511, column: 14 }, end: { line: 511, column: 22 } },
                '334': { start: { line: 512, column: 14 }, end: { line: 512, column: 22 } },
                '335': { start: { line: 513, column: 2 }, end: { line: 513, column: 72 } },
                '336': { start: { line: 514, column: 2 }, end: { line: 514, column: 72 } },
                '337': { start: { line: 515, column: 2 }, end: { line: 515, column: 75 } },
                '338': { start: { line: 516, column: 2 }, end: { line: 516, column: 77 } },
                '339': { start: { line: 518, column: 2 }, end: { line: 518, column: 14 } },
                '340': { start: { line: 527, column: 0 }, end: { line: 554, column: 2 } },
                '341': { start: { line: 528, column: 2 }, end: { line: 538, column: 3 } },
                '342': { start: { line: 530, column: 4 }, end: { line: 530, column: 12 } },
                '343': { start: { line: 531, column: 4 }, end: { line: 531, column: 12 } },
                '344': { start: { line: 532, column: 4 }, end: { line: 532, column: 12 } },
                '345': { start: { line: 533, column: 9 }, end: { line: 538, column: 3 } },
                '346': { start: { line: 535, column: 4 }, end: { line: 535, column: 13 } },
                '347': { start: { line: 536, column: 4 }, end: { line: 536, column: 13 } },
                '348': { start: { line: 537, column: 4 }, end: { line: 537, column: 13 } },
                '349': { start: { line: 540, column: 2 }, end: { line: 540, column: 20 } },
                '350': { start: { line: 541, column: 2 }, end: { line: 541, column: 20 } },
                '351': { start: { line: 542, column: 2 }, end: { line: 542, column: 20 } },
                '352': { start: { line: 543, column: 2 }, end: { line: 543, column: 20 } },
                '353': { start: { line: 544, column: 2 }, end: { line: 544, column: 20 } },
                '354': { start: { line: 545, column: 2 }, end: { line: 545, column: 20 } },
                '355': { start: { line: 546, column: 2 }, end: { line: 546, column: 20 } },
                '356': { start: { line: 547, column: 2 }, end: { line: 547, column: 20 } },
                '357': { start: { line: 548, column: 2 }, end: { line: 548, column: 20 } },
                '358': { start: { line: 549, column: 2 }, end: { line: 549, column: 20 } },
                '359': { start: { line: 550, column: 2 }, end: { line: 550, column: 21 } },
                '360': { start: { line: 551, column: 2 }, end: { line: 551, column: 21 } },
                '361': { start: { line: 553, column: 2 }, end: { line: 553, column: 14 } },
                '362': { start: { line: 564, column: 0 }, end: { line: 625, column: 2 } },
                '363': { start: { line: 565, column: 2 }, end: { line: 575, column: 3 } },
                '364': { start: { line: 567, column: 4 }, end: { line: 567, column: 12 } },
                '365': { start: { line: 568, column: 4 }, end: { line: 568, column: 12 } },
                '366': { start: { line: 569, column: 4 }, end: { line: 569, column: 12 } },
                '367': { start: { line: 570, column: 9 }, end: { line: 575, column: 3 } },
                '368': { start: { line: 572, column: 4 }, end: { line: 572, column: 13 } },
                '369': { start: { line: 573, column: 4 }, end: { line: 573, column: 13 } },
                '370': { start: { line: 574, column: 4 }, end: { line: 574, column: 13 } },
                '371': { start: { line: 577, column: 14 }, end: { line: 577, column: 46 } },
                '372': { start: { line: 578, column: 2 }, end: { line: 578, column: 15 } },
                '373': { start: { line: 579, column: 2 }, end: { line: 579, column: 15 } },
                '374': { start: { line: 580, column: 2 }, end: { line: 580, column: 15 } },
                '375': { start: { line: 582, column: 14 }, end: { line: 582, column: 26 } },
                '376': { start: { line: 583, column: 14 }, end: { line: 583, column: 26 } },
                '377': { start: { line: 584, column: 14 }, end: { line: 584, column: 26 } },
                '378': { start: { line: 585, column: 14 }, end: { line: 585, column: 26 } },
                '379': { start: { line: 586, column: 14 }, end: { line: 586, column: 26 } },
                '380': { start: { line: 587, column: 14 }, end: { line: 587, column: 26 } },
                '381': { start: { line: 588, column: 14 }, end: { line: 588, column: 26 } },
                '382': { start: { line: 589, column: 14 }, end: { line: 589, column: 26 } },
                '383': { start: { line: 590, column: 14 }, end: { line: 590, column: 26 } },
                '384': { start: { line: 591, column: 14 }, end: { line: 591, column: 26 } },
                '385': { start: { line: 592, column: 14 }, end: { line: 592, column: 27 } },
                '386': { start: { line: 593, column: 14 }, end: { line: 593, column: 27 } },
                '387': { start: { line: 596, column: 13 }, end: { line: 596, column: 24 } },
                '388': { start: { line: 597, column: 13 }, end: { line: 597, column: 24 } },
                '389': { start: { line: 598, column: 13 }, end: { line: 598, column: 19 } },
                '390': { start: { line: 600, column: 14 }, end: { line: 600, column: 29 } },
                '391': { start: { line: 601, column: 14 }, end: { line: 601, column: 33 } },
                '392': { start: { line: 602, column: 14 }, end: { line: 602, column: 33 } },
                '393': { start: { line: 603, column: 14 }, end: { line: 603, column: 33 } },
                '394': { start: { line: 604, column: 14 }, end: { line: 604, column: 29 } },
                '395': { start: { line: 605, column: 14 }, end: { line: 605, column: 33 } },
                '396': { start: { line: 606, column: 14 }, end: { line: 606, column: 33 } },
                '397': { start: { line: 607, column: 14 }, end: { line: 607, column: 33 } },
                '398': { start: { line: 608, column: 14 }, end: { line: 608, column: 29 } },
                '399': { start: { line: 611, column: 2 }, end: { line: 611, column: 51 } },
                '400': { start: { line: 612, column: 2 }, end: { line: 612, column: 51 } },
                '401': { start: { line: 613, column: 2 }, end: { line: 613, column: 51 } },
                '402': { start: { line: 614, column: 2 }, end: { line: 614, column: 51 } },
                '403': { start: { line: 615, column: 2 }, end: { line: 615, column: 51 } },
                '404': { start: { line: 616, column: 2 }, end: { line: 616, column: 51 } },
                '405': { start: { line: 617, column: 2 }, end: { line: 617, column: 51 } },
                '406': { start: { line: 618, column: 2 }, end: { line: 618, column: 51 } },
                '407': { start: { line: 619, column: 2 }, end: { line: 619, column: 51 } },
                '408': { start: { line: 620, column: 2 }, end: { line: 620, column: 51 } },
                '409': { start: { line: 621, column: 2 }, end: { line: 621, column: 52 } },
                '410': { start: { line: 622, column: 2 }, end: { line: 622, column: 52 } },
                '411': { start: { line: 624, column: 2 }, end: { line: 624, column: 14 } },
                '412': { start: { line: 634, column: 0 }, end: { line: 642, column: 2 } },
                '413': { start: { line: 635, column: 12 }, end: { line: 635, column: 16 } },
                '414': { start: { line: 636, column: 8 }, end: { line: 636, column: 12 } },
                '415': { start: { line: 637, column: 8 }, end: { line: 637, column: 17 } },
                '416': { start: { line: 638, column: 2 }, end: { line: 638, column: 74 } },
                '417': { start: { line: 639, column: 2 }, end: { line: 639, column: 74 } },
                '418': { start: { line: 640, column: 2 }, end: { line: 640, column: 75 } },
                '419': { start: { line: 641, column: 2 }, end: { line: 641, column: 75 } },
                '420': { start: { line: 644, column: 0 }, end: { line: 646, column: 2 } },
                '421': { start: { line: 645, column: 2 }, end: { line: 645, column: 26 } },
                '422': { start: { line: 647, column: 0 }, end: { line: 649, column: 2 } },
                '423': { start: { line: 648, column: 2 }, end: { line: 648, column: 26 } },
                '424': { start: { line: 650, column: 0 }, end: { line: 652, column: 2 } },
                '425': { start: { line: 651, column: 2 }, end: { line: 651, column: 26 } },
                '426': { start: { line: 663, column: 0 }, end: { line: 685, column: 2 } },
                '427': { start: { line: 664, column: 12 }, end: { line: 664, column: 36 } },
                '428': { start: { line: 665, column: 9 }, end: { line: 665, column: 25 } },
                '429': { start: { line: 667, column: 2 }, end: { line: 667, column: 28 } },
                '430': { start: { line: 668, column: 2 }, end: { line: 668, column: 19 } },
                '431': { start: { line: 669, column: 2 }, end: { line: 669, column: 19 } },
                '432': { start: { line: 670, column: 2 }, end: { line: 670, column: 19 } },
                '433': { start: { line: 671, column: 2 }, end: { line: 671, column: 19 } },
                '434': { start: { line: 672, column: 2 }, end: { line: 672, column: 19 } },
                '435': { start: { line: 673, column: 2 }, end: { line: 673, column: 19 } },
                '436': { start: { line: 674, column: 2 }, end: { line: 674, column: 19 } },
                '437': { start: { line: 675, column: 2 }, end: { line: 675, column: 19 } },
                '438': { start: { line: 676, column: 2 }, end: { line: 676, column: 19 } },
                '439': { start: { line: 677, column: 2 }, end: { line: 677, column: 36 } },
                '440': { start: { line: 678, column: 2 }, end: { line: 678, column: 21 } },
                '441': { start: { line: 679, column: 2 }, end: { line: 679, column: 20 } },
                '442': { start: { line: 680, column: 2 }, end: { line: 680, column: 20 } },
                '443': { start: { line: 681, column: 2 }, end: { line: 681, column: 38 } },
                '444': { start: { line: 682, column: 2 }, end: { line: 682, column: 20 } },
                '445': { start: { line: 684, column: 2 }, end: { line: 684, column: 14 } },
                '446': { start: { line: 698, column: 0 }, end: { line: 720, column: 2 } },
                '447': { start: { line: 699, column: 13 }, end: { line: 699, column: 31 } },
                '448': { start: { line: 700, column: 9 }, end: { line: 700, column: 27 } },
                '449': { start: { line: 701, column: 9 }, end: { line: 701, column: 25 } },
                '450': { start: { line: 702, column: 2 }, end: { line: 702, column: 25 } },
                '451': { start: { line: 703, column: 2 }, end: { line: 703, column: 19 } },
                '452': { start: { line: 704, column: 2 }, end: { line: 704, column: 19 } },
                '453': { start: { line: 705, column: 2 }, end: { line: 705, column: 19 } },
                '454': { start: { line: 706, column: 2 }, end: { line: 706, column: 19 } },
                '455': { start: { line: 707, column: 2 }, end: { line: 707, column: 25 } },
                '456': { start: { line: 708, column: 2 }, end: { line: 708, column: 19 } },
                '457': { start: { line: 709, column: 2 }, end: { line: 709, column: 19 } },
                '458': { start: { line: 710, column: 2 }, end: { line: 710, column: 19 } },
                '459': { start: { line: 711, column: 2 }, end: { line: 711, column: 19 } },
                '460': { start: { line: 712, column: 2 }, end: { line: 712, column: 25 } },
                '461': { start: { line: 713, column: 2 }, end: { line: 713, column: 20 } },
                '462': { start: { line: 714, column: 2 }, end: { line: 714, column: 38 } },
                '463': { start: { line: 715, column: 2 }, end: { line: 715, column: 38 } },
                '464': { start: { line: 716, column: 2 }, end: { line: 716, column: 36 } },
                '465': { start: { line: 717, column: 2 }, end: { line: 717, column: 20 } },
                '466': { start: { line: 719, column: 2 }, end: { line: 719, column: 14 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 13, column: 20 }, end: { line: 13, column: 21 } },
                  loc: { start: { line: 13, column: 25 }, end: { line: 13, column: 43 } },
                  line: 13
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 16, column: 18 }, end: { line: 16, column: 19 } },
                  loc: { start: { line: 16, column: 23 }, end: { line: 16, column: 70 } },
                  line: 16
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: { start: { line: 27, column: 12 }, end: { line: 27, column: 13 } },
                  loc: { start: { line: 27, column: 23 }, end: { line: 50, column: 1 } },
                  line: 27
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: { start: { line: 67, column: 26 }, end: { line: 67, column: 27 } },
                  loc: { start: { line: 67, column: 45 }, end: { line: 93, column: 1 } },
                  line: 67
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 101, column: 26 },
                    end: { line: 101, column: 27 }
                  },
                  loc: { start: { line: 101, column: 37 }, end: { line: 103, column: 1 } },
                  line: 101
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 110, column: 27 },
                    end: { line: 110, column: 28 }
                  },
                  loc: { start: { line: 110, column: 38 }, end: { line: 129, column: 1 } },
                  line: 110
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 136, column: 21 },
                    end: { line: 136, column: 22 }
                  },
                  loc: { start: { line: 136, column: 30 }, end: { line: 136, column: 50 } },
                  line: 136
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 145, column: 32 },
                    end: { line: 145, column: 33 }
                  },
                  loc: { start: { line: 145, column: 44 }, end: { line: 197, column: 1 } },
                  line: 145
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 206, column: 29 },
                    end: { line: 206, column: 30 }
                  },
                  loc: { start: { line: 206, column: 41 }, end: { line: 284, column: 1 } },
                  line: 206
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 291, column: 32 },
                    end: { line: 291, column: 33 }
                  },
                  loc: { start: { line: 291, column: 43 }, end: { line: 321, column: 1 } },
                  line: 291
                },
                '10': {
                  name: '(anonymous_10)',
                  decl: {
                    start: { line: 329, column: 35 },
                    end: { line: 329, column: 36 }
                  },
                  loc: { start: { line: 329, column: 50 }, end: { line: 340, column: 1 } },
                  line: 329
                },
                '11': {
                  name: '(anonymous_11)',
                  decl: {
                    start: { line: 350, column: 39 },
                    end: { line: 350, column: 40 }
                  },
                  loc: { start: { line: 350, column: 56 }, end: { line: 377, column: 1 } },
                  line: 350
                },
                '12': {
                  name: '(anonymous_12)',
                  decl: {
                    start: { line: 384, column: 34 },
                    end: { line: 384, column: 35 }
                  },
                  loc: { start: { line: 384, column: 45 }, end: { line: 400, column: 1 } },
                  line: 384
                },
                '13': {
                  name: '(anonymous_13)',
                  decl: {
                    start: { line: 409, column: 27 },
                    end: { line: 409, column: 28 }
                  },
                  loc: { start: { line: 409, column: 48 }, end: { line: 462, column: 1 } },
                  line: 409
                },
                '14': {
                  name: '(anonymous_14)',
                  decl: {
                    start: { line: 464, column: 28 },
                    end: { line: 464, column: 29 }
                  },
                  loc: { start: { line: 464, column: 49 }, end: { line: 519, column: 1 } },
                  line: 464
                },
                '15': {
                  name: '(anonymous_15)',
                  decl: {
                    start: { line: 527, column: 28 },
                    end: { line: 527, column: 29 }
                  },
                  loc: { start: { line: 527, column: 46 }, end: { line: 554, column: 1 } },
                  line: 527
                },
                '16': {
                  name: '(anonymous_16)',
                  decl: {
                    start: { line: 564, column: 29 },
                    end: { line: 564, column: 30 }
                  },
                  loc: { start: { line: 564, column: 50 }, end: { line: 625, column: 1 } },
                  line: 564
                },
                '17': {
                  name: '(anonymous_17)',
                  decl: {
                    start: { line: 634, column: 32 },
                    end: { line: 634, column: 33 }
                  },
                  loc: { start: { line: 634, column: 44 }, end: { line: 642, column: 1 } },
                  line: 634
                },
                '18': {
                  name: '(anonymous_18)',
                  decl: {
                    start: { line: 644, column: 30 },
                    end: { line: 644, column: 31 }
                  },
                  loc: { start: { line: 644, column: 42 }, end: { line: 646, column: 1 } },
                  line: 644
                },
                '19': {
                  name: '(anonymous_19)',
                  decl: {
                    start: { line: 647, column: 30 },
                    end: { line: 647, column: 31 }
                  },
                  loc: { start: { line: 647, column: 42 }, end: { line: 649, column: 1 } },
                  line: 647
                },
                '20': {
                  name: '(anonymous_20)',
                  decl: {
                    start: { line: 650, column: 30 },
                    end: { line: 650, column: 31 }
                  },
                  loc: { start: { line: 650, column: 42 }, end: { line: 652, column: 1 } },
                  line: 650
                },
                '21': {
                  name: '(anonymous_21)',
                  decl: {
                    start: { line: 663, column: 34 },
                    end: { line: 663, column: 35 }
                  },
                  loc: { start: { line: 663, column: 68 }, end: { line: 685, column: 1 } },
                  line: 663
                },
                '22': {
                  name: '(anonymous_22)',
                  decl: {
                    start: { line: 698, column: 28 },
                    end: { line: 698, column: 29 }
                  },
                  loc: { start: { line: 698, column: 74 }, end: { line: 720, column: 1 } },
                  line: 698
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 14, column: 0 }, end: { line: 17, column: 1 } },
                  type: 'if',
                  locations: [
                    { start: { line: 14, column: 0 }, end: { line: 17, column: 1 } },
                    { start: { line: 14, column: 0 }, end: { line: 17, column: 1 } }
                  ],
                  line: 14
                },
                '1': {
                  loc: { start: { line: 16, column: 23 }, end: { line: 16, column: 70 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 16, column: 23 }, end: { line: 16, column: 41 } },
                    { start: { line: 16, column: 45 }, end: { line: 16, column: 70 } }
                  ],
                  line: 16
                },
                '2': {
                  loc: { start: { line: 36, column: 2 }, end: { line: 38, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 36, column: 2 }, end: { line: 38, column: 3 } },
                    { start: { line: 36, column: 2 }, end: { line: 38, column: 3 } }
                  ],
                  line: 36
                },
                '3': {
                  loc: { start: { line: 36, column: 6 }, end: { line: 36, column: 56 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 36, column: 6 }, end: { line: 36, column: 17 } },
                    { start: { line: 36, column: 21 }, end: { line: 36, column: 56 } }
                  ],
                  line: 36
                },
                '4': {
                  loc: { start: { line: 40, column: 2 }, end: { line: 48, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 40, column: 2 }, end: { line: 48, column: 3 } },
                    { start: { line: 40, column: 2 }, end: { line: 48, column: 3 } }
                  ],
                  line: 40
                },
                '5': {
                  loc: { start: { line: 41, column: 16 }, end: { line: 43, column: 57 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 42, column: 8 }, end: { line: 42, column: 15 } },
                    { start: { line: 43, column: 8 }, end: { line: 43, column: 57 } }
                  ],
                  line: 41
                },
                '6': {
                  loc: { start: { line: 45, column: 16 }, end: { line: 47, column: 78 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 46, column: 8 }, end: { line: 46, column: 15 } },
                    { start: { line: 47, column: 8 }, end: { line: 47, column: 78 } }
                  ],
                  line: 45
                },
                '7': {
                  loc: { start: { line: 68, column: 2 }, end: { line: 91, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 68, column: 2 }, end: { line: 91, column: 3 } },
                    { start: { line: 68, column: 2 }, end: { line: 91, column: 3 } }
                  ],
                  line: 68
                },
                '8': {
                  loc: { start: { line: 71, column: 9 }, end: { line: 91, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 71, column: 9 }, end: { line: 91, column: 3 } },
                    { start: { line: 71, column: 9 }, end: { line: 91, column: 3 } }
                  ],
                  line: 71
                },
                '9': {
                  loc: { start: { line: 74, column: 9 }, end: { line: 91, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 74, column: 9 }, end: { line: 91, column: 3 } },
                    { start: { line: 74, column: 9 }, end: { line: 91, column: 3 } }
                  ],
                  line: 74
                },
                '10': {
                  loc: { start: { line: 147, column: 2 }, end: { line: 195, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 147, column: 2 }, end: { line: 195, column: 3 } },
                    { start: { line: 147, column: 2 }, end: { line: 195, column: 3 } }
                  ],
                  line: 147
                },
                '11': {
                  loc: { start: { line: 171, column: 9 }, end: { line: 195, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 171, column: 9 }, end: { line: 195, column: 3 } },
                    { start: { line: 171, column: 9 }, end: { line: 195, column: 3 } }
                  ],
                  line: 171
                },
                '12': {
                  loc: { start: { line: 209, column: 2 }, end: { line: 243, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 209, column: 2 }, end: { line: 243, column: 3 } },
                    { start: { line: 209, column: 2 }, end: { line: 243, column: 3 } }
                  ],
                  line: 209
                },
                '13': {
                  loc: { start: { line: 226, column: 9 }, end: { line: 243, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 226, column: 9 }, end: { line: 243, column: 3 } },
                    { start: { line: 226, column: 9 }, end: { line: 243, column: 3 } }
                  ],
                  line: 226
                },
                '14': {
                  loc: { start: { line: 261, column: 2 }, end: { line: 263, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 261, column: 2 }, end: { line: 263, column: 3 } },
                    { start: { line: 261, column: 2 }, end: { line: 263, column: 3 } }
                  ],
                  line: 261
                },
                '15': {
                  loc: { start: { line: 307, column: 2 }, end: { line: 309, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 307, column: 2 }, end: { line: 309, column: 3 } },
                    { start: { line: 307, column: 2 }, end: { line: 309, column: 3 } }
                  ],
                  line: 307
                },
                '16': {
                  loc: { start: { line: 351, column: 2 }, end: { line: 364, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 351, column: 2 }, end: { line: 364, column: 3 } },
                    { start: { line: 351, column: 2 }, end: { line: 364, column: 3 } }
                  ],
                  line: 351
                },
                '17': {
                  loc: { start: { line: 368, column: 2 }, end: { line: 375, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 368, column: 2 }, end: { line: 375, column: 3 } },
                    { start: { line: 368, column: 2 }, end: { line: 375, column: 3 } }
                  ],
                  line: 368
                },
                '18': {
                  loc: { start: { line: 412, column: 2 }, end: { line: 422, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 412, column: 2 }, end: { line: 422, column: 3 } },
                    { start: { line: 412, column: 2 }, end: { line: 422, column: 3 } }
                  ],
                  line: 412
                },
                '19': {
                  loc: { start: { line: 412, column: 6 }, end: { line: 412, column: 53 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 412, column: 6 }, end: { line: 412, column: 25 } },
                    { start: { line: 412, column: 29 }, end: { line: 412, column: 53 } }
                  ],
                  line: 412
                },
                '20': {
                  loc: { start: { line: 414, column: 9 }, end: { line: 422, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 414, column: 9 }, end: { line: 422, column: 3 } },
                    { start: { line: 414, column: 9 }, end: { line: 422, column: 3 } }
                  ],
                  line: 414
                },
                '21': {
                  loc: { start: { line: 416, column: 9 }, end: { line: 422, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 416, column: 9 }, end: { line: 422, column: 3 } },
                    { start: { line: 416, column: 9 }, end: { line: 422, column: 3 } }
                  ],
                  line: 416
                },
                '22': {
                  loc: { start: { line: 418, column: 9 }, end: { line: 422, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 418, column: 9 }, end: { line: 422, column: 3 } },
                    { start: { line: 418, column: 9 }, end: { line: 422, column: 3 } }
                  ],
                  line: 418
                },
                '23': {
                  loc: { start: { line: 467, column: 2 }, end: { line: 477, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 467, column: 2 }, end: { line: 477, column: 3 } },
                    { start: { line: 467, column: 2 }, end: { line: 477, column: 3 } }
                  ],
                  line: 467
                },
                '24': {
                  loc: { start: { line: 467, column: 6 }, end: { line: 467, column: 53 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 467, column: 6 }, end: { line: 467, column: 25 } },
                    { start: { line: 467, column: 29 }, end: { line: 467, column: 53 } }
                  ],
                  line: 467
                },
                '25': {
                  loc: { start: { line: 469, column: 9 }, end: { line: 477, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 469, column: 9 }, end: { line: 477, column: 3 } },
                    { start: { line: 469, column: 9 }, end: { line: 477, column: 3 } }
                  ],
                  line: 469
                },
                '26': {
                  loc: { start: { line: 471, column: 9 }, end: { line: 477, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 471, column: 9 }, end: { line: 477, column: 3 } },
                    { start: { line: 471, column: 9 }, end: { line: 477, column: 3 } }
                  ],
                  line: 471
                },
                '27': {
                  loc: { start: { line: 473, column: 9 }, end: { line: 477, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 473, column: 9 }, end: { line: 477, column: 3 } },
                    { start: { line: 473, column: 9 }, end: { line: 477, column: 3 } }
                  ],
                  line: 473
                },
                '28': {
                  loc: { start: { line: 528, column: 2 }, end: { line: 538, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 528, column: 2 }, end: { line: 538, column: 3 } },
                    { start: { line: 528, column: 2 }, end: { line: 538, column: 3 } }
                  ],
                  line: 528
                },
                '29': {
                  loc: { start: { line: 533, column: 9 }, end: { line: 538, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 533, column: 9 }, end: { line: 538, column: 3 } },
                    { start: { line: 533, column: 9 }, end: { line: 538, column: 3 } }
                  ],
                  line: 533
                },
                '30': {
                  loc: { start: { line: 565, column: 2 }, end: { line: 575, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 565, column: 2 }, end: { line: 575, column: 3 } },
                    { start: { line: 565, column: 2 }, end: { line: 575, column: 3 } }
                  ],
                  line: 565
                },
                '31': {
                  loc: { start: { line: 570, column: 9 }, end: { line: 575, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 570, column: 9 }, end: { line: 575, column: 3 } },
                    { start: { line: 570, column: 9 }, end: { line: 575, column: 3 } }
                  ],
                  line: 570
                },
                '32': {
                  loc: { start: { line: 637, column: 8 }, end: { line: 637, column: 17 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 637, column: 8 }, end: { line: 637, column: 12 } },
                    { start: { line: 637, column: 16 }, end: { line: 637, column: 17 } }
                  ],
                  line: 637
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0,
                '118': 0,
                '119': 0,
                '120': 0,
                '121': 0,
                '122': 0,
                '123': 0,
                '124': 0,
                '125': 0,
                '126': 0,
                '127': 0,
                '128': 0,
                '129': 0,
                '130': 0,
                '131': 0,
                '132': 0,
                '133': 0,
                '134': 0,
                '135': 0,
                '136': 0,
                '137': 0,
                '138': 0,
                '139': 0,
                '140': 0,
                '141': 0,
                '142': 0,
                '143': 0,
                '144': 0,
                '145': 0,
                '146': 0,
                '147': 0,
                '148': 0,
                '149': 0,
                '150': 0,
                '151': 0,
                '152': 0,
                '153': 0,
                '154': 0,
                '155': 0,
                '156': 0,
                '157': 0,
                '158': 0,
                '159': 0,
                '160': 0,
                '161': 0,
                '162': 0,
                '163': 0,
                '164': 0,
                '165': 0,
                '166': 0,
                '167': 0,
                '168': 0,
                '169': 0,
                '170': 0,
                '171': 0,
                '172': 0,
                '173': 0,
                '174': 0,
                '175': 0,
                '176': 0,
                '177': 0,
                '178': 0,
                '179': 0,
                '180': 0,
                '181': 0,
                '182': 0,
                '183': 0,
                '184': 0,
                '185': 0,
                '186': 0,
                '187': 0,
                '188': 0,
                '189': 0,
                '190': 0,
                '191': 0,
                '192': 0,
                '193': 0,
                '194': 0,
                '195': 0,
                '196': 0,
                '197': 0,
                '198': 0,
                '199': 0,
                '200': 0,
                '201': 0,
                '202': 0,
                '203': 0,
                '204': 0,
                '205': 0,
                '206': 0,
                '207': 0,
                '208': 0,
                '209': 0,
                '210': 0,
                '211': 0,
                '212': 0,
                '213': 0,
                '214': 0,
                '215': 0,
                '216': 0,
                '217': 0,
                '218': 0,
                '219': 0,
                '220': 0,
                '221': 0,
                '222': 0,
                '223': 0,
                '224': 0,
                '225': 0,
                '226': 0,
                '227': 0,
                '228': 0,
                '229': 0,
                '230': 0,
                '231': 0,
                '232': 0,
                '233': 0,
                '234': 0,
                '235': 0,
                '236': 0,
                '237': 0,
                '238': 0,
                '239': 0,
                '240': 0,
                '241': 0,
                '242': 0,
                '243': 0,
                '244': 0,
                '245': 0,
                '246': 0,
                '247': 0,
                '248': 0,
                '249': 0,
                '250': 0,
                '251': 0,
                '252': 0,
                '253': 0,
                '254': 0,
                '255': 0,
                '256': 0,
                '257': 0,
                '258': 0,
                '259': 0,
                '260': 0,
                '261': 0,
                '262': 0,
                '263': 0,
                '264': 0,
                '265': 0,
                '266': 0,
                '267': 0,
                '268': 0,
                '269': 0,
                '270': 0,
                '271': 0,
                '272': 0,
                '273': 0,
                '274': 0,
                '275': 0,
                '276': 0,
                '277': 0,
                '278': 0,
                '279': 0,
                '280': 0,
                '281': 0,
                '282': 0,
                '283': 0,
                '284': 0,
                '285': 0,
                '286': 0,
                '287': 0,
                '288': 0,
                '289': 0,
                '290': 0,
                '291': 0,
                '292': 0,
                '293': 0,
                '294': 0,
                '295': 0,
                '296': 0,
                '297': 0,
                '298': 0,
                '299': 0,
                '300': 0,
                '301': 0,
                '302': 0,
                '303': 0,
                '304': 0,
                '305': 0,
                '306': 0,
                '307': 0,
                '308': 0,
                '309': 0,
                '310': 0,
                '311': 0,
                '312': 0,
                '313': 0,
                '314': 0,
                '315': 0,
                '316': 0,
                '317': 0,
                '318': 0,
                '319': 0,
                '320': 0,
                '321': 0,
                '322': 0,
                '323': 0,
                '324': 0,
                '325': 0,
                '326': 0,
                '327': 0,
                '328': 0,
                '329': 0,
                '330': 0,
                '331': 0,
                '332': 0,
                '333': 0,
                '334': 0,
                '335': 0,
                '336': 0,
                '337': 0,
                '338': 0,
                '339': 0,
                '340': 0,
                '341': 0,
                '342': 0,
                '343': 0,
                '344': 0,
                '345': 0,
                '346': 0,
                '347': 0,
                '348': 0,
                '349': 0,
                '350': 0,
                '351': 0,
                '352': 0,
                '353': 0,
                '354': 0,
                '355': 0,
                '356': 0,
                '357': 0,
                '358': 0,
                '359': 0,
                '360': 0,
                '361': 0,
                '362': 0,
                '363': 0,
                '364': 0,
                '365': 0,
                '366': 0,
                '367': 0,
                '368': 0,
                '369': 0,
                '370': 0,
                '371': 0,
                '372': 0,
                '373': 0,
                '374': 0,
                '375': 0,
                '376': 0,
                '377': 0,
                '378': 0,
                '379': 0,
                '380': 0,
                '381': 0,
                '382': 0,
                '383': 0,
                '384': 0,
                '385': 0,
                '386': 0,
                '387': 0,
                '388': 0,
                '389': 0,
                '390': 0,
                '391': 0,
                '392': 0,
                '393': 0,
                '394': 0,
                '395': 0,
                '396': 0,
                '397': 0,
                '398': 0,
                '399': 0,
                '400': 0,
                '401': 0,
                '402': 0,
                '403': 0,
                '404': 0,
                '405': 0,
                '406': 0,
                '407': 0,
                '408': 0,
                '409': 0,
                '410': 0,
                '411': 0,
                '412': 0,
                '413': 0,
                '414': 0,
                '415': 0,
                '416': 0,
                '417': 0,
                '418': 0,
                '419': 0,
                '420': 0,
                '421': 0,
                '422': 0,
                '423': 0,
                '424': 0,
                '425': 0,
                '426': 0,
                '427': 0,
                '428': 0,
                '429': 0,
                '430': 0,
                '431': 0,
                '432': 0,
                '433': 0,
                '434': 0,
                '435': 0,
                '436': 0,
                '437': 0,
                '438': 0,
                '439': 0,
                '440': 0,
                '441': 0,
                '442': 0,
                '443': 0,
                '444': 0,
                '445': 0,
                '446': 0,
                '447': 0,
                '448': 0,
                '449': 0,
                '450': 0,
                '451': 0,
                '452': 0,
                '453': 0,
                '454': 0,
                '455': 0,
                '456': 0,
                '457': 0,
                '458': 0,
                '459': 0,
                '460': 0,
                '461': 0,
                '462': 0,
                '463': 0,
                '464': 0,
                '465': 0,
                '466': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0],
                '20': [0, 0],
                '21': [0, 0],
                '22': [0, 0],
                '23': [0, 0],
                '24': [0, 0],
                '25': [0, 0],
                '26': [0, 0],
                '27': [0, 0],
                '28': [0, 0],
                '29': [0, 0],
                '30': [0, 0],
                '31': [0, 0],
                '32': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: 'c97b82909bcb01c47f2f1817fef409a72e9eacab'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.iterator');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.typed-array.float32-array');
          _dereq_('core-js/modules/es.typed-array.copy-within');
          _dereq_('core-js/modules/es.typed-array.every');
          _dereq_('core-js/modules/es.typed-array.fill');
          _dereq_('core-js/modules/es.typed-array.filter');
          _dereq_('core-js/modules/es.typed-array.find');
          _dereq_('core-js/modules/es.typed-array.find-index');
          _dereq_('core-js/modules/es.typed-array.for-each');
          _dereq_('core-js/modules/es.typed-array.includes');
          _dereq_('core-js/modules/es.typed-array.index-of');
          _dereq_('core-js/modules/es.typed-array.iterator');
          _dereq_('core-js/modules/es.typed-array.join');
          _dereq_('core-js/modules/es.typed-array.last-index-of');
          _dereq_('core-js/modules/es.typed-array.map');
          _dereq_('core-js/modules/es.typed-array.reduce');
          _dereq_('core-js/modules/es.typed-array.reduce-right');
          _dereq_('core-js/modules/es.typed-array.reverse');
          _dereq_('core-js/modules/es.typed-array.set');
          _dereq_('core-js/modules/es.typed-array.slice');
          _dereq_('core-js/modules/es.typed-array.some');
          _dereq_('core-js/modules/es.typed-array.sort');
          _dereq_('core-js/modules/es.typed-array.subarray');
          _dereq_('core-js/modules/es.typed-array.to-locale-string');
          _dereq_('core-js/modules/es.typed-array.to-string');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }

          var GLMAT_ARRAY_TYPE = (cov_2hr51v6ix7.s[0]++, Array);
          cov_2hr51v6ix7.s[1]++;
          var isMatrixArray = function isMatrixArray(x) {
            cov_2hr51v6ix7.f[0]++;
            cov_2hr51v6ix7.s[2]++;
            return x instanceof Array;
          };
          cov_2hr51v6ix7.s[3]++;
          if (typeof Float32Array !== 'undefined') {
            cov_2hr51v6ix7.b[0][0]++;
            cov_2hr51v6ix7.s[4]++;
            GLMAT_ARRAY_TYPE = Float32Array;
            cov_2hr51v6ix7.s[5]++;
            isMatrixArray = function isMatrixArray(x) {
              cov_2hr51v6ix7.f[1]++;
              cov_2hr51v6ix7.s[6]++;
              return (
                (cov_2hr51v6ix7.b[1][0]++, x instanceof Array) ||
                (cov_2hr51v6ix7.b[1][1]++, x instanceof Float32Array)
              );
            };
          } else {
            cov_2hr51v6ix7.b[0][1]++;
          }

          /**
           * A class to describe a 4x4 matrix
           * for model and view matrix manipulation in the p5js webgl renderer.
           * @class p5.Matrix
           * @private
           * @constructor
           * @param {Array} [mat4] array literal of our 4x4 matrix
           */ cov_2hr51v6ix7.s[7]++;
          _main.default.Matrix = function() {
            cov_2hr51v6ix7.f[2]++;
            var args = (cov_2hr51v6ix7.s[8]++, new Array(arguments.length));
            cov_2hr51v6ix7.s[9]++;
            for (var i = (cov_2hr51v6ix7.s[10]++, 0); i < args.length; ++i) {
              cov_2hr51v6ix7.s[11]++;
              args[i] = arguments[i];
            }

            // This is default behavior when object
            // instantiated using createMatrix()
            // @todo implement createMatrix() in core/math.js
            cov_2hr51v6ix7.s[12]++;
            if (
              (cov_2hr51v6ix7.b[3][0]++, args.length) &&
              (cov_2hr51v6ix7.b[3][1]++, args[args.length - 1] instanceof _main.default)
            ) {
              cov_2hr51v6ix7.b[2][0]++;
              cov_2hr51v6ix7.s[13]++;
              this.p5 = args[args.length - 1];
            } else {
              cov_2hr51v6ix7.b[2][1]++;
            }
            cov_2hr51v6ix7.s[14]++;

            if (args[0] === 'mat3') {
              cov_2hr51v6ix7.b[4][0]++;
              cov_2hr51v6ix7.s[15]++;
              this.mat3 = Array.isArray(args[1])
                ? (cov_2hr51v6ix7.b[5][0]++, args[1])
                : (cov_2hr51v6ix7.b[5][1]++,
                  new GLMAT_ARRAY_TYPE([1, 0, 0, 0, 1, 0, 0, 0, 1]));
            } else {
              cov_2hr51v6ix7.b[4][1]++;
              cov_2hr51v6ix7.s[16]++;
              this.mat4 = Array.isArray(args[0])
                ? (cov_2hr51v6ix7.b[6][0]++, args[0])
                : (cov_2hr51v6ix7.b[6][1]++,
                  new GLMAT_ARRAY_TYPE([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]));
            }
            cov_2hr51v6ix7.s[17]++;
            return this;
          };

          /**
           * Sets the x, y, and z component of the vector using two or three separate
           * variables, the data from a p5.Matrix, or the values from a float array.
           *
           * @method set
           * @param {p5.Matrix|Float32Array|Number[]} [inMatrix] the input p5.Matrix or
           *                                     an Array of length 16
           * @chainable
           */
          /**
           * @method set
           * @param {Number[]} elements 16 numbers passed by value to avoid
           *                                     array copying.
           * @chainable
           */ cov_2hr51v6ix7.s[18]++;
          _main.default.Matrix.prototype.set = function(inMatrix) {
            cov_2hr51v6ix7.f[3]++;
            cov_2hr51v6ix7.s[19]++;
            if (inMatrix instanceof _main.default.Matrix) {
              cov_2hr51v6ix7.b[7][0]++;
              cov_2hr51v6ix7.s[20]++;
              this.mat4 = inMatrix.mat4;
              cov_2hr51v6ix7.s[21]++;
              return this;
            } else {
              cov_2hr51v6ix7.b[7][1]++;
              cov_2hr51v6ix7.s[22]++;
              if (isMatrixArray(inMatrix)) {
                cov_2hr51v6ix7.b[8][0]++;
                cov_2hr51v6ix7.s[23]++;
                this.mat4 = inMatrix;
                cov_2hr51v6ix7.s[24]++;
                return this;
              } else {
                cov_2hr51v6ix7.b[8][1]++;
                cov_2hr51v6ix7.s[25]++;
                if (arguments.length === 16) {
                  cov_2hr51v6ix7.b[9][0]++;
                  cov_2hr51v6ix7.s[26]++;
                  this.mat4[0] = arguments[0];
                  cov_2hr51v6ix7.s[27]++;
                  this.mat4[1] = arguments[1];
                  cov_2hr51v6ix7.s[28]++;
                  this.mat4[2] = arguments[2];
                  cov_2hr51v6ix7.s[29]++;
                  this.mat4[3] = arguments[3];
                  cov_2hr51v6ix7.s[30]++;
                  this.mat4[4] = arguments[4];
                  cov_2hr51v6ix7.s[31]++;
                  this.mat4[5] = arguments[5];
                  cov_2hr51v6ix7.s[32]++;
                  this.mat4[6] = arguments[6];
                  cov_2hr51v6ix7.s[33]++;
                  this.mat4[7] = arguments[7];
                  cov_2hr51v6ix7.s[34]++;
                  this.mat4[8] = arguments[8];
                  cov_2hr51v6ix7.s[35]++;
                  this.mat4[9] = arguments[9];
                  cov_2hr51v6ix7.s[36]++;
                  this.mat4[10] = arguments[10];
                  cov_2hr51v6ix7.s[37]++;
                  this.mat4[11] = arguments[11];
                  cov_2hr51v6ix7.s[38]++;
                  this.mat4[12] = arguments[12];
                  cov_2hr51v6ix7.s[39]++;
                  this.mat4[13] = arguments[13];
                  cov_2hr51v6ix7.s[40]++;
                  this.mat4[14] = arguments[14];
                  cov_2hr51v6ix7.s[41]++;
                  this.mat4[15] = arguments[15];
                } else {
                  cov_2hr51v6ix7.b[9][1]++;
                }
              }
            }
            cov_2hr51v6ix7.s[42]++;
            return this;
          };

          /**
           * Gets a copy of the vector, returns a p5.Matrix object.
           *
           * @method get
           * @return {p5.Matrix} the copy of the p5.Matrix object
           */ cov_2hr51v6ix7.s[43]++;
          _main.default.Matrix.prototype.get = function() {
            cov_2hr51v6ix7.f[4]++;
            cov_2hr51v6ix7.s[44]++;
            return new _main.default.Matrix(this.mat4, this.p5);
          };

          /**
           * return a copy of a matrix
           * @method copy
           * @return {p5.Matrix}   the result matrix
           */ cov_2hr51v6ix7.s[45]++;
          _main.default.Matrix.prototype.copy = function() {
            cov_2hr51v6ix7.f[5]++;
            var copied = (cov_2hr51v6ix7.s[46]++, new _main.default.Matrix(this.p5));
            cov_2hr51v6ix7.s[47]++;
            copied.mat4[0] = this.mat4[0];
            cov_2hr51v6ix7.s[48]++;
            copied.mat4[1] = this.mat4[1];
            cov_2hr51v6ix7.s[49]++;
            copied.mat4[2] = this.mat4[2];
            cov_2hr51v6ix7.s[50]++;
            copied.mat4[3] = this.mat4[3];
            cov_2hr51v6ix7.s[51]++;
            copied.mat4[4] = this.mat4[4];
            cov_2hr51v6ix7.s[52]++;
            copied.mat4[5] = this.mat4[5];
            cov_2hr51v6ix7.s[53]++;
            copied.mat4[6] = this.mat4[6];
            cov_2hr51v6ix7.s[54]++;
            copied.mat4[7] = this.mat4[7];
            cov_2hr51v6ix7.s[55]++;
            copied.mat4[8] = this.mat4[8];
            cov_2hr51v6ix7.s[56]++;
            copied.mat4[9] = this.mat4[9];
            cov_2hr51v6ix7.s[57]++;
            copied.mat4[10] = this.mat4[10];
            cov_2hr51v6ix7.s[58]++;
            copied.mat4[11] = this.mat4[11];
            cov_2hr51v6ix7.s[59]++;
            copied.mat4[12] = this.mat4[12];
            cov_2hr51v6ix7.s[60]++;
            copied.mat4[13] = this.mat4[13];
            cov_2hr51v6ix7.s[61]++;
            copied.mat4[14] = this.mat4[14];
            cov_2hr51v6ix7.s[62]++;
            copied.mat4[15] = this.mat4[15];
            cov_2hr51v6ix7.s[63]++;
            return copied;
          };

          /**
           * return an identity matrix
           * @method identity
           * @return {p5.Matrix}   the result matrix
           */ cov_2hr51v6ix7.s[64]++;
          _main.default.Matrix.identity = function(pInst) {
            cov_2hr51v6ix7.f[6]++;
            cov_2hr51v6ix7.s[65]++;
            return new _main.default.Matrix(pInst);
          };

          /**
           * transpose according to a given matrix
           * @method transpose
           * @param  {p5.Matrix|Float32Array|Number[]} a  the matrix to be
           *                                               based on to transpose
           * @chainable
           */ cov_2hr51v6ix7.s[66]++;
          _main.default.Matrix.prototype.transpose = function(a) {
            cov_2hr51v6ix7.f[7]++;
            var a01, a02, a03, a12, a13, a23;
            cov_2hr51v6ix7.s[67]++;
            if (a instanceof _main.default.Matrix) {
              cov_2hr51v6ix7.b[10][0]++;
              cov_2hr51v6ix7.s[68]++;
              a01 = a.mat4[1];
              cov_2hr51v6ix7.s[69]++;
              a02 = a.mat4[2];
              cov_2hr51v6ix7.s[70]++;
              a03 = a.mat4[3];
              cov_2hr51v6ix7.s[71]++;
              a12 = a.mat4[6];
              cov_2hr51v6ix7.s[72]++;
              a13 = a.mat4[7];
              cov_2hr51v6ix7.s[73]++;
              a23 = a.mat4[11];
              cov_2hr51v6ix7.s[74]++;

              this.mat4[0] = a.mat4[0];
              cov_2hr51v6ix7.s[75]++;
              this.mat4[1] = a.mat4[4];
              cov_2hr51v6ix7.s[76]++;
              this.mat4[2] = a.mat4[8];
              cov_2hr51v6ix7.s[77]++;
              this.mat4[3] = a.mat4[12];
              cov_2hr51v6ix7.s[78]++;
              this.mat4[4] = a01;
              cov_2hr51v6ix7.s[79]++;
              this.mat4[5] = a.mat4[5];
              cov_2hr51v6ix7.s[80]++;
              this.mat4[6] = a.mat4[9];
              cov_2hr51v6ix7.s[81]++;
              this.mat4[7] = a.mat4[13];
              cov_2hr51v6ix7.s[82]++;
              this.mat4[8] = a02;
              cov_2hr51v6ix7.s[83]++;
              this.mat4[9] = a12;
              cov_2hr51v6ix7.s[84]++;
              this.mat4[10] = a.mat4[10];
              cov_2hr51v6ix7.s[85]++;
              this.mat4[11] = a.mat4[14];
              cov_2hr51v6ix7.s[86]++;
              this.mat4[12] = a03;
              cov_2hr51v6ix7.s[87]++;
              this.mat4[13] = a13;
              cov_2hr51v6ix7.s[88]++;
              this.mat4[14] = a23;
              cov_2hr51v6ix7.s[89]++;
              this.mat4[15] = a.mat4[15];
            } else {
              cov_2hr51v6ix7.b[10][1]++;
              cov_2hr51v6ix7.s[90]++;
              if (isMatrixArray(a)) {
                cov_2hr51v6ix7.b[11][0]++;
                cov_2hr51v6ix7.s[91]++;
                a01 = a[1];
                cov_2hr51v6ix7.s[92]++;
                a02 = a[2];
                cov_2hr51v6ix7.s[93]++;
                a03 = a[3];
                cov_2hr51v6ix7.s[94]++;
                a12 = a[6];
                cov_2hr51v6ix7.s[95]++;
                a13 = a[7];
                cov_2hr51v6ix7.s[96]++;
                a23 = a[11];
                cov_2hr51v6ix7.s[97]++;

                this.mat4[0] = a[0];
                cov_2hr51v6ix7.s[98]++;
                this.mat4[1] = a[4];
                cov_2hr51v6ix7.s[99]++;
                this.mat4[2] = a[8];
                cov_2hr51v6ix7.s[100]++;
                this.mat4[3] = a[12];
                cov_2hr51v6ix7.s[101]++;
                this.mat4[4] = a01;
                cov_2hr51v6ix7.s[102]++;
                this.mat4[5] = a[5];
                cov_2hr51v6ix7.s[103]++;
                this.mat4[6] = a[9];
                cov_2hr51v6ix7.s[104]++;
                this.mat4[7] = a[13];
                cov_2hr51v6ix7.s[105]++;
                this.mat4[8] = a02;
                cov_2hr51v6ix7.s[106]++;
                this.mat4[9] = a12;
                cov_2hr51v6ix7.s[107]++;
                this.mat4[10] = a[10];
                cov_2hr51v6ix7.s[108]++;
                this.mat4[11] = a[14];
                cov_2hr51v6ix7.s[109]++;
                this.mat4[12] = a03;
                cov_2hr51v6ix7.s[110]++;
                this.mat4[13] = a13;
                cov_2hr51v6ix7.s[111]++;
                this.mat4[14] = a23;
                cov_2hr51v6ix7.s[112]++;
                this.mat4[15] = a[15];
              } else {
                cov_2hr51v6ix7.b[11][1]++;
              }
            }
            cov_2hr51v6ix7.s[113]++;
            return this;
          };

          /**
           * invert  matrix according to a give matrix
           * @method invert
           * @param  {p5.Matrix|Float32Array|Number[]} a   the matrix to be
           *                                                based on to invert
           * @chainable
           */ cov_2hr51v6ix7.s[114]++;
          _main.default.Matrix.prototype.invert = function(a) {
            cov_2hr51v6ix7.f[8]++;
            var a00, a01, a02, a03, a10, a11, a12, a13;
            var a20, a21, a22, a23, a30, a31, a32, a33;
            cov_2hr51v6ix7.s[115]++;
            if (a instanceof _main.default.Matrix) {
              cov_2hr51v6ix7.b[12][0]++;
              cov_2hr51v6ix7.s[116]++;
              a00 = a.mat4[0];
              cov_2hr51v6ix7.s[117]++;
              a01 = a.mat4[1];
              cov_2hr51v6ix7.s[118]++;
              a02 = a.mat4[2];
              cov_2hr51v6ix7.s[119]++;
              a03 = a.mat4[3];
              cov_2hr51v6ix7.s[120]++;
              a10 = a.mat4[4];
              cov_2hr51v6ix7.s[121]++;
              a11 = a.mat4[5];
              cov_2hr51v6ix7.s[122]++;
              a12 = a.mat4[6];
              cov_2hr51v6ix7.s[123]++;
              a13 = a.mat4[7];
              cov_2hr51v6ix7.s[124]++;
              a20 = a.mat4[8];
              cov_2hr51v6ix7.s[125]++;
              a21 = a.mat4[9];
              cov_2hr51v6ix7.s[126]++;
              a22 = a.mat4[10];
              cov_2hr51v6ix7.s[127]++;
              a23 = a.mat4[11];
              cov_2hr51v6ix7.s[128]++;
              a30 = a.mat4[12];
              cov_2hr51v6ix7.s[129]++;
              a31 = a.mat4[13];
              cov_2hr51v6ix7.s[130]++;
              a32 = a.mat4[14];
              cov_2hr51v6ix7.s[131]++;
              a33 = a.mat4[15];
            } else {
              cov_2hr51v6ix7.b[12][1]++;
              cov_2hr51v6ix7.s[132]++;
              if (isMatrixArray(a)) {
                cov_2hr51v6ix7.b[13][0]++;
                cov_2hr51v6ix7.s[133]++;
                a00 = a[0];
                cov_2hr51v6ix7.s[134]++;
                a01 = a[1];
                cov_2hr51v6ix7.s[135]++;
                a02 = a[2];
                cov_2hr51v6ix7.s[136]++;
                a03 = a[3];
                cov_2hr51v6ix7.s[137]++;
                a10 = a[4];
                cov_2hr51v6ix7.s[138]++;
                a11 = a[5];
                cov_2hr51v6ix7.s[139]++;
                a12 = a[6];
                cov_2hr51v6ix7.s[140]++;
                a13 = a[7];
                cov_2hr51v6ix7.s[141]++;
                a20 = a[8];
                cov_2hr51v6ix7.s[142]++;
                a21 = a[9];
                cov_2hr51v6ix7.s[143]++;
                a22 = a[10];
                cov_2hr51v6ix7.s[144]++;
                a23 = a[11];
                cov_2hr51v6ix7.s[145]++;
                a30 = a[12];
                cov_2hr51v6ix7.s[146]++;
                a31 = a[13];
                cov_2hr51v6ix7.s[147]++;
                a32 = a[14];
                cov_2hr51v6ix7.s[148]++;
                a33 = a[15];
              } else {
                cov_2hr51v6ix7.b[13][1]++;
              }
            }
            var b00 = (cov_2hr51v6ix7.s[149]++, a00 * a11 - a01 * a10);
            var b01 = (cov_2hr51v6ix7.s[150]++, a00 * a12 - a02 * a10);
            var b02 = (cov_2hr51v6ix7.s[151]++, a00 * a13 - a03 * a10);
            var b03 = (cov_2hr51v6ix7.s[152]++, a01 * a12 - a02 * a11);
            var b04 = (cov_2hr51v6ix7.s[153]++, a01 * a13 - a03 * a11);
            var b05 = (cov_2hr51v6ix7.s[154]++, a02 * a13 - a03 * a12);
            var b06 = (cov_2hr51v6ix7.s[155]++, a20 * a31 - a21 * a30);
            var b07 = (cov_2hr51v6ix7.s[156]++, a20 * a32 - a22 * a30);
            var b08 = (cov_2hr51v6ix7.s[157]++, a20 * a33 - a23 * a30);
            var b09 = (cov_2hr51v6ix7.s[158]++, a21 * a32 - a22 * a31);
            var b10 = (cov_2hr51v6ix7.s[159]++, a21 * a33 - a23 * a31);
            var b11 = (cov_2hr51v6ix7.s[160]++, a22 * a33 - a23 * a32);

            // Calculate the determinant
            var det = (cov_2hr51v6ix7.s[161]++,
            b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06);
            cov_2hr51v6ix7.s[162]++;

            if (!det) {
              cov_2hr51v6ix7.b[14][0]++;
              cov_2hr51v6ix7.s[163]++;
              return null;
            } else {
              cov_2hr51v6ix7.b[14][1]++;
            }
            cov_2hr51v6ix7.s[164]++;
            det = 1.0 / det;
            cov_2hr51v6ix7.s[165]++;

            this.mat4[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;
            cov_2hr51v6ix7.s[166]++;
            this.mat4[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;
            cov_2hr51v6ix7.s[167]++;
            this.mat4[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;
            cov_2hr51v6ix7.s[168]++;
            this.mat4[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;
            cov_2hr51v6ix7.s[169]++;
            this.mat4[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;
            cov_2hr51v6ix7.s[170]++;
            this.mat4[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;
            cov_2hr51v6ix7.s[171]++;
            this.mat4[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;
            cov_2hr51v6ix7.s[172]++;
            this.mat4[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;
            cov_2hr51v6ix7.s[173]++;
            this.mat4[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;
            cov_2hr51v6ix7.s[174]++;
            this.mat4[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;
            cov_2hr51v6ix7.s[175]++;
            this.mat4[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;
            cov_2hr51v6ix7.s[176]++;
            this.mat4[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;
            cov_2hr51v6ix7.s[177]++;
            this.mat4[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;
            cov_2hr51v6ix7.s[178]++;
            this.mat4[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;
            cov_2hr51v6ix7.s[179]++;
            this.mat4[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;
            cov_2hr51v6ix7.s[180]++;
            this.mat4[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;
            cov_2hr51v6ix7.s[181]++;

            return this;
          };

          /**
           * Inverts a 3x3 matrix
           * @method invert3x3
           * @chainable
           */ cov_2hr51v6ix7.s[182]++;
          _main.default.Matrix.prototype.invert3x3 = function() {
            cov_2hr51v6ix7.f[9]++;
            var a00 = (cov_2hr51v6ix7.s[183]++, this.mat3[0]);
            var a01 = (cov_2hr51v6ix7.s[184]++, this.mat3[1]);
            var a02 = (cov_2hr51v6ix7.s[185]++, this.mat3[2]);
            var a10 = (cov_2hr51v6ix7.s[186]++, this.mat3[3]);
            var a11 = (cov_2hr51v6ix7.s[187]++, this.mat3[4]);
            var a12 = (cov_2hr51v6ix7.s[188]++, this.mat3[5]);
            var a20 = (cov_2hr51v6ix7.s[189]++, this.mat3[6]);
            var a21 = (cov_2hr51v6ix7.s[190]++, this.mat3[7]);
            var a22 = (cov_2hr51v6ix7.s[191]++, this.mat3[8]);
            var b01 = (cov_2hr51v6ix7.s[192]++, a22 * a11 - a12 * a21);
            var b11 = (cov_2hr51v6ix7.s[193]++, -a22 * a10 + a12 * a20);
            var b21 = (cov_2hr51v6ix7.s[194]++, a21 * a10 - a11 * a20);

            // Calculate the determinant
            var det = (cov_2hr51v6ix7.s[195]++, a00 * b01 + a01 * b11 + a02 * b21);
            cov_2hr51v6ix7.s[196]++;
            if (!det) {
              cov_2hr51v6ix7.b[15][0]++;
              cov_2hr51v6ix7.s[197]++;
              return null;
            } else {
              cov_2hr51v6ix7.b[15][1]++;
            }
            cov_2hr51v6ix7.s[198]++;
            det = 1.0 / det;
            cov_2hr51v6ix7.s[199]++;
            this.mat3[0] = b01 * det;
            cov_2hr51v6ix7.s[200]++;
            this.mat3[1] = (-a22 * a01 + a02 * a21) * det;
            cov_2hr51v6ix7.s[201]++;
            this.mat3[2] = (a12 * a01 - a02 * a11) * det;
            cov_2hr51v6ix7.s[202]++;
            this.mat3[3] = b11 * det;
            cov_2hr51v6ix7.s[203]++;
            this.mat3[4] = (a22 * a00 - a02 * a20) * det;
            cov_2hr51v6ix7.s[204]++;
            this.mat3[5] = (-a12 * a00 + a02 * a10) * det;
            cov_2hr51v6ix7.s[205]++;
            this.mat3[6] = b21 * det;
            cov_2hr51v6ix7.s[206]++;
            this.mat3[7] = (-a21 * a00 + a01 * a20) * det;
            cov_2hr51v6ix7.s[207]++;
            this.mat3[8] = (a11 * a00 - a01 * a10) * det;
            cov_2hr51v6ix7.s[208]++;
            return this;
          };

          /**
           * transposes a 3x3 p5.Matrix by a mat3
           * @method transpose3x3
           * @param  {Number[]} mat3 1-dimensional array
           * @chainable
           */ cov_2hr51v6ix7.s[209]++;
          _main.default.Matrix.prototype.transpose3x3 = function(mat3) {
            cov_2hr51v6ix7.f[10]++;
            var a01 = (cov_2hr51v6ix7.s[210]++, mat3[1]),
              a02 = (cov_2hr51v6ix7.s[211]++, mat3[2]),
              a12 = (cov_2hr51v6ix7.s[212]++, mat3[5]);
            cov_2hr51v6ix7.s[213]++;
            this.mat3[1] = mat3[3];
            cov_2hr51v6ix7.s[214]++;
            this.mat3[2] = mat3[6];
            cov_2hr51v6ix7.s[215]++;
            this.mat3[3] = a01;
            cov_2hr51v6ix7.s[216]++;
            this.mat3[5] = mat3[7];
            cov_2hr51v6ix7.s[217]++;
            this.mat3[6] = a02;
            cov_2hr51v6ix7.s[218]++;
            this.mat3[7] = a12;
            cov_2hr51v6ix7.s[219]++;
            return this;
          };

          /**
           * converts a 4x4 matrix to its 3x3 inverse transform
           * commonly used in MVMatrix to NMatrix conversions.
           * @method invertTranspose
           * @param  {p5.Matrix} mat4 the matrix to be based on to invert
           * @chainable
           * @todo  finish implementation
           */ cov_2hr51v6ix7.s[220]++;
          _main.default.Matrix.prototype.inverseTranspose = function(matrix) {
            cov_2hr51v6ix7.f[11]++;
            cov_2hr51v6ix7.s[221]++;
            if (this.mat3 === undefined) {
              cov_2hr51v6ix7.b[16][0]++;
              cov_2hr51v6ix7.s[222]++;
              console.error('sorry, this function only works with mat3');
            } else {
              cov_2hr51v6ix7.b[16][1]++;
              cov_2hr51v6ix7.s[223]++;
              //convert mat4 -> mat3
              this.mat3[0] = matrix.mat4[0];
              cov_2hr51v6ix7.s[224]++;
              this.mat3[1] = matrix.mat4[1];
              cov_2hr51v6ix7.s[225]++;
              this.mat3[2] = matrix.mat4[2];
              cov_2hr51v6ix7.s[226]++;
              this.mat3[3] = matrix.mat4[4];
              cov_2hr51v6ix7.s[227]++;
              this.mat3[4] = matrix.mat4[5];
              cov_2hr51v6ix7.s[228]++;
              this.mat3[5] = matrix.mat4[6];
              cov_2hr51v6ix7.s[229]++;
              this.mat3[6] = matrix.mat4[8];
              cov_2hr51v6ix7.s[230]++;
              this.mat3[7] = matrix.mat4[9];
              cov_2hr51v6ix7.s[231]++;
              this.mat3[8] = matrix.mat4[10];
            }

            var inverse = (cov_2hr51v6ix7.s[232]++, this.invert3x3());
            // check inverse succeeded
            cov_2hr51v6ix7.s[233]++;
            if (inverse) {
              cov_2hr51v6ix7.b[17][0]++;
              cov_2hr51v6ix7.s[234]++;
              inverse.transpose3x3(this.mat3);
            } else {
              cov_2hr51v6ix7.b[17][1]++;
              cov_2hr51v6ix7.s[235]++;
              // in case of singularity, just zero the matrix
              for (var i = (cov_2hr51v6ix7.s[236]++, 0); i < 9; i++) {
                cov_2hr51v6ix7.s[237]++;
                this.mat3[i] = 0;
              }
            }
            cov_2hr51v6ix7.s[238]++;
            return this;
          };

          /**
           * inspired by Toji's mat4 determinant
           * @method determinant
           * @return {Number} Determinant of our 4x4 matrix
           */ cov_2hr51v6ix7.s[239]++;
          _main.default.Matrix.prototype.determinant = function() {
            cov_2hr51v6ix7.f[12]++;
            var d00 = (cov_2hr51v6ix7.s[240]++,
              this.mat4[0] * this.mat4[5] - this.mat4[1] * this.mat4[4]),
              d01 = (cov_2hr51v6ix7.s[241]++,
              this.mat4[0] * this.mat4[6] - this.mat4[2] * this.mat4[4]),
              d02 = (cov_2hr51v6ix7.s[242]++,
              this.mat4[0] * this.mat4[7] - this.mat4[3] * this.mat4[4]),
              d03 = (cov_2hr51v6ix7.s[243]++,
              this.mat4[1] * this.mat4[6] - this.mat4[2] * this.mat4[5]),
              d04 = (cov_2hr51v6ix7.s[244]++,
              this.mat4[1] * this.mat4[7] - this.mat4[3] * this.mat4[5]),
              d05 = (cov_2hr51v6ix7.s[245]++,
              this.mat4[2] * this.mat4[7] - this.mat4[3] * this.mat4[6]),
              d06 = (cov_2hr51v6ix7.s[246]++,
              this.mat4[8] * this.mat4[13] - this.mat4[9] * this.mat4[12]),
              d07 = (cov_2hr51v6ix7.s[247]++,
              this.mat4[8] * this.mat4[14] - this.mat4[10] * this.mat4[12]),
              d08 = (cov_2hr51v6ix7.s[248]++,
              this.mat4[8] * this.mat4[15] - this.mat4[11] * this.mat4[12]),
              d09 = (cov_2hr51v6ix7.s[249]++,
              this.mat4[9] * this.mat4[14] - this.mat4[10] * this.mat4[13]),
              d10 = (cov_2hr51v6ix7.s[250]++,
              this.mat4[9] * this.mat4[15] - this.mat4[11] * this.mat4[13]),
              d11 = (cov_2hr51v6ix7.s[251]++,
              this.mat4[10] * this.mat4[15] - this.mat4[11] * this.mat4[14]);

            // Calculate the determinant
            cov_2hr51v6ix7.s[252]++;
            return d00 * d11 - d01 * d10 + d02 * d09 + d03 * d08 - d04 * d07 + d05 * d06;
          };

          /**
           * multiply two mat4s
           * @method mult
           * @param {p5.Matrix|Float32Array|Number[]} multMatrix The matrix
           *                                                we want to multiply by
           * @chainable
           */ cov_2hr51v6ix7.s[253]++;
          _main.default.Matrix.prototype.mult = function(multMatrix) {
            cov_2hr51v6ix7.f[13]++;
            var _src;
            cov_2hr51v6ix7.s[254]++;

            if (
              (cov_2hr51v6ix7.b[19][0]++, multMatrix === this) ||
              (cov_2hr51v6ix7.b[19][1]++, multMatrix === this.mat4)
            ) {
              cov_2hr51v6ix7.b[18][0]++;
              cov_2hr51v6ix7.s[255]++;
              _src = this.copy().mat4; // only need to allocate in this rare case
            } else {
              cov_2hr51v6ix7.b[18][1]++;
              cov_2hr51v6ix7.s[256]++;
              if (multMatrix instanceof _main.default.Matrix) {
                cov_2hr51v6ix7.b[20][0]++;
                cov_2hr51v6ix7.s[257]++;
                _src = multMatrix.mat4;
              } else {
                cov_2hr51v6ix7.b[20][1]++;
                cov_2hr51v6ix7.s[258]++;
                if (isMatrixArray(multMatrix)) {
                  cov_2hr51v6ix7.b[21][0]++;
                  cov_2hr51v6ix7.s[259]++;
                  _src = multMatrix;
                } else {
                  cov_2hr51v6ix7.b[21][1]++;
                  cov_2hr51v6ix7.s[260]++;
                  if (arguments.length === 16) {
                    cov_2hr51v6ix7.b[22][0]++;
                    cov_2hr51v6ix7.s[261]++;
                    _src = arguments;
                  } else {
                    cov_2hr51v6ix7.b[22][1]++;
                    cov_2hr51v6ix7.s[262]++;
                    return; // nothing to do.
                  }
                }
              }
            }

            // each row is used for the multiplier
            var b0 = (cov_2hr51v6ix7.s[263]++, this.mat4[0]),
              b1 = (cov_2hr51v6ix7.s[264]++, this.mat4[1]),
              b2 = (cov_2hr51v6ix7.s[265]++, this.mat4[2]),
              b3 = (cov_2hr51v6ix7.s[266]++, this.mat4[3]);
            cov_2hr51v6ix7.s[267]++;
            this.mat4[0] = b0 * _src[0] + b1 * _src[4] + b2 * _src[8] + b3 * _src[12];
            cov_2hr51v6ix7.s[268]++;
            this.mat4[1] = b0 * _src[1] + b1 * _src[5] + b2 * _src[9] + b3 * _src[13];
            cov_2hr51v6ix7.s[269]++;
            this.mat4[2] = b0 * _src[2] + b1 * _src[6] + b2 * _src[10] + b3 * _src[14];
            cov_2hr51v6ix7.s[270]++;
            this.mat4[3] = b0 * _src[3] + b1 * _src[7] + b2 * _src[11] + b3 * _src[15];
            cov_2hr51v6ix7.s[271]++;

            b0 = this.mat4[4];
            cov_2hr51v6ix7.s[272]++;
            b1 = this.mat4[5];
            cov_2hr51v6ix7.s[273]++;
            b2 = this.mat4[6];
            cov_2hr51v6ix7.s[274]++;
            b3 = this.mat4[7];
            cov_2hr51v6ix7.s[275]++;
            this.mat4[4] = b0 * _src[0] + b1 * _src[4] + b2 * _src[8] + b3 * _src[12];
            cov_2hr51v6ix7.s[276]++;
            this.mat4[5] = b0 * _src[1] + b1 * _src[5] + b2 * _src[9] + b3 * _src[13];
            cov_2hr51v6ix7.s[277]++;
            this.mat4[6] = b0 * _src[2] + b1 * _src[6] + b2 * _src[10] + b3 * _src[14];
            cov_2hr51v6ix7.s[278]++;
            this.mat4[7] = b0 * _src[3] + b1 * _src[7] + b2 * _src[11] + b3 * _src[15];
            cov_2hr51v6ix7.s[279]++;

            b0 = this.mat4[8];
            cov_2hr51v6ix7.s[280]++;
            b1 = this.mat4[9];
            cov_2hr51v6ix7.s[281]++;
            b2 = this.mat4[10];
            cov_2hr51v6ix7.s[282]++;
            b3 = this.mat4[11];
            cov_2hr51v6ix7.s[283]++;
            this.mat4[8] = b0 * _src[0] + b1 * _src[4] + b2 * _src[8] + b3 * _src[12];
            cov_2hr51v6ix7.s[284]++;
            this.mat4[9] = b0 * _src[1] + b1 * _src[5] + b2 * _src[9] + b3 * _src[13];
            cov_2hr51v6ix7.s[285]++;
            this.mat4[10] = b0 * _src[2] + b1 * _src[6] + b2 * _src[10] + b3 * _src[14];
            cov_2hr51v6ix7.s[286]++;
            this.mat4[11] = b0 * _src[3] + b1 * _src[7] + b2 * _src[11] + b3 * _src[15];
            cov_2hr51v6ix7.s[287]++;

            b0 = this.mat4[12];
            cov_2hr51v6ix7.s[288]++;
            b1 = this.mat4[13];
            cov_2hr51v6ix7.s[289]++;
            b2 = this.mat4[14];
            cov_2hr51v6ix7.s[290]++;
            b3 = this.mat4[15];
            cov_2hr51v6ix7.s[291]++;
            this.mat4[12] = b0 * _src[0] + b1 * _src[4] + b2 * _src[8] + b3 * _src[12];
            cov_2hr51v6ix7.s[292]++;
            this.mat4[13] = b0 * _src[1] + b1 * _src[5] + b2 * _src[9] + b3 * _src[13];
            cov_2hr51v6ix7.s[293]++;
            this.mat4[14] = b0 * _src[2] + b1 * _src[6] + b2 * _src[10] + b3 * _src[14];
            cov_2hr51v6ix7.s[294]++;
            this.mat4[15] = b0 * _src[3] + b1 * _src[7] + b2 * _src[11] + b3 * _src[15];
            cov_2hr51v6ix7.s[295]++;

            return this;
          };
          cov_2hr51v6ix7.s[296]++;

          _main.default.Matrix.prototype.apply = function(multMatrix) {
            cov_2hr51v6ix7.f[14]++;
            var _src;
            cov_2hr51v6ix7.s[297]++;

            if (
              (cov_2hr51v6ix7.b[24][0]++, multMatrix === this) ||
              (cov_2hr51v6ix7.b[24][1]++, multMatrix === this.mat4)
            ) {
              cov_2hr51v6ix7.b[23][0]++;
              cov_2hr51v6ix7.s[298]++;
              _src = this.copy().mat4; // only need to allocate in this rare case
            } else {
              cov_2hr51v6ix7.b[23][1]++;
              cov_2hr51v6ix7.s[299]++;
              if (multMatrix instanceof _main.default.Matrix) {
                cov_2hr51v6ix7.b[25][0]++;
                cov_2hr51v6ix7.s[300]++;
                _src = multMatrix.mat4;
              } else {
                cov_2hr51v6ix7.b[25][1]++;
                cov_2hr51v6ix7.s[301]++;
                if (isMatrixArray(multMatrix)) {
                  cov_2hr51v6ix7.b[26][0]++;
                  cov_2hr51v6ix7.s[302]++;
                  _src = multMatrix;
                } else {
                  cov_2hr51v6ix7.b[26][1]++;
                  cov_2hr51v6ix7.s[303]++;
                  if (arguments.length === 16) {
                    cov_2hr51v6ix7.b[27][0]++;
                    cov_2hr51v6ix7.s[304]++;
                    _src = arguments;
                  } else {
                    cov_2hr51v6ix7.b[27][1]++;
                    cov_2hr51v6ix7.s[305]++;
                    return; // nothing to do.
                  }
                }
              }
            }

            var mat4 = (cov_2hr51v6ix7.s[306]++, this.mat4);

            // each row is used for the multiplier
            var m0 = (cov_2hr51v6ix7.s[307]++, mat4[0]);
            var m4 = (cov_2hr51v6ix7.s[308]++, mat4[4]);
            var m8 = (cov_2hr51v6ix7.s[309]++, mat4[8]);
            var m12 = (cov_2hr51v6ix7.s[310]++, mat4[12]);
            cov_2hr51v6ix7.s[311]++;
            mat4[0] = _src[0] * m0 + _src[1] * m4 + _src[2] * m8 + _src[3] * m12;
            cov_2hr51v6ix7.s[312]++;
            mat4[4] = _src[4] * m0 + _src[5] * m4 + _src[6] * m8 + _src[7] * m12;
            cov_2hr51v6ix7.s[313]++;
            mat4[8] = _src[8] * m0 + _src[9] * m4 + _src[10] * m8 + _src[11] * m12;
            cov_2hr51v6ix7.s[314]++;
            mat4[12] = _src[12] * m0 + _src[13] * m4 + _src[14] * m8 + _src[15] * m12;

            var m1 = (cov_2hr51v6ix7.s[315]++, mat4[1]);
            var m5 = (cov_2hr51v6ix7.s[316]++, mat4[5]);
            var m9 = (cov_2hr51v6ix7.s[317]++, mat4[9]);
            var m13 = (cov_2hr51v6ix7.s[318]++, mat4[13]);
            cov_2hr51v6ix7.s[319]++;
            mat4[1] = _src[0] * m1 + _src[1] * m5 + _src[2] * m9 + _src[3] * m13;
            cov_2hr51v6ix7.s[320]++;
            mat4[5] = _src[4] * m1 + _src[5] * m5 + _src[6] * m9 + _src[7] * m13;
            cov_2hr51v6ix7.s[321]++;
            mat4[9] = _src[8] * m1 + _src[9] * m5 + _src[10] * m9 + _src[11] * m13;
            cov_2hr51v6ix7.s[322]++;
            mat4[13] = _src[12] * m1 + _src[13] * m5 + _src[14] * m9 + _src[15] * m13;

            var m2 = (cov_2hr51v6ix7.s[323]++, mat4[2]);
            var m6 = (cov_2hr51v6ix7.s[324]++, mat4[6]);
            var m10 = (cov_2hr51v6ix7.s[325]++, mat4[10]);
            var m14 = (cov_2hr51v6ix7.s[326]++, mat4[14]);
            cov_2hr51v6ix7.s[327]++;
            mat4[2] = _src[0] * m2 + _src[1] * m6 + _src[2] * m10 + _src[3] * m14;
            cov_2hr51v6ix7.s[328]++;
            mat4[6] = _src[4] * m2 + _src[5] * m6 + _src[6] * m10 + _src[7] * m14;
            cov_2hr51v6ix7.s[329]++;
            mat4[10] = _src[8] * m2 + _src[9] * m6 + _src[10] * m10 + _src[11] * m14;
            cov_2hr51v6ix7.s[330]++;
            mat4[14] = _src[12] * m2 + _src[13] * m6 + _src[14] * m10 + _src[15] * m14;

            var m3 = (cov_2hr51v6ix7.s[331]++, mat4[3]);
            var m7 = (cov_2hr51v6ix7.s[332]++, mat4[7]);
            var m11 = (cov_2hr51v6ix7.s[333]++, mat4[11]);
            var m15 = (cov_2hr51v6ix7.s[334]++, mat4[15]);
            cov_2hr51v6ix7.s[335]++;
            mat4[3] = _src[0] * m3 + _src[1] * m7 + _src[2] * m11 + _src[3] * m15;
            cov_2hr51v6ix7.s[336]++;
            mat4[7] = _src[4] * m3 + _src[5] * m7 + _src[6] * m11 + _src[7] * m15;
            cov_2hr51v6ix7.s[337]++;
            mat4[11] = _src[8] * m3 + _src[9] * m7 + _src[10] * m11 + _src[11] * m15;
            cov_2hr51v6ix7.s[338]++;
            mat4[15] = _src[12] * m3 + _src[13] * m7 + _src[14] * m11 + _src[15] * m15;
            cov_2hr51v6ix7.s[339]++;

            return this;
          };

          /**
           * scales a p5.Matrix by scalars or a vector
           * @method scale
           * @param  {p5.Vector|Float32Array|Number[]} s vector to scale by
           * @chainable
           */ cov_2hr51v6ix7.s[340]++;
          _main.default.Matrix.prototype.scale = function(x, y, z) {
            cov_2hr51v6ix7.f[15]++;
            cov_2hr51v6ix7.s[341]++;
            if (x instanceof _main.default.Vector) {
              cov_2hr51v6ix7.b[28][0]++;
              cov_2hr51v6ix7.s[342]++;
              // x is a vector, extract the components from it.
              y = x.y;
              cov_2hr51v6ix7.s[343]++;
              z = x.z;
              cov_2hr51v6ix7.s[344]++;
              x = x.x; // must be last
            } else {
              cov_2hr51v6ix7.b[28][1]++;
              cov_2hr51v6ix7.s[345]++;
              if (x instanceof Array) {
                cov_2hr51v6ix7.b[29][0]++;
                cov_2hr51v6ix7.s[346]++;
                // x is an array, extract the components from it.
                y = x[1];
                cov_2hr51v6ix7.s[347]++;
                z = x[2];
                cov_2hr51v6ix7.s[348]++;
                x = x[0]; // must be last
              } else {
                cov_2hr51v6ix7.b[29][1]++;
              }
            }
            cov_2hr51v6ix7.s[349]++;

            this.mat4[0] *= x;
            cov_2hr51v6ix7.s[350]++;
            this.mat4[1] *= x;
            cov_2hr51v6ix7.s[351]++;
            this.mat4[2] *= x;
            cov_2hr51v6ix7.s[352]++;
            this.mat4[3] *= x;
            cov_2hr51v6ix7.s[353]++;
            this.mat4[4] *= y;
            cov_2hr51v6ix7.s[354]++;
            this.mat4[5] *= y;
            cov_2hr51v6ix7.s[355]++;
            this.mat4[6] *= y;
            cov_2hr51v6ix7.s[356]++;
            this.mat4[7] *= y;
            cov_2hr51v6ix7.s[357]++;
            this.mat4[8] *= z;
            cov_2hr51v6ix7.s[358]++;
            this.mat4[9] *= z;
            cov_2hr51v6ix7.s[359]++;
            this.mat4[10] *= z;
            cov_2hr51v6ix7.s[360]++;
            this.mat4[11] *= z;
            cov_2hr51v6ix7.s[361]++;

            return this;
          };

          /**
           * rotate our Matrix around an axis by the given angle.
           * @method rotate
           * @param  {Number} a The angle of rotation in radians
           * @param  {p5.Vector|Number[]} axis  the axis(es) to rotate around
           * @chainable
           * inspired by Toji's gl-matrix lib, mat4 rotation
           */ cov_2hr51v6ix7.s[362]++;
          _main.default.Matrix.prototype.rotate = function(a, x, y, z) {
            cov_2hr51v6ix7.f[16]++;
            cov_2hr51v6ix7.s[363]++;
            if (x instanceof _main.default.Vector) {
              cov_2hr51v6ix7.b[30][0]++;
              cov_2hr51v6ix7.s[364]++;
              // x is a vector, extract the components from it.
              y = x.y;
              cov_2hr51v6ix7.s[365]++;
              z = x.z;
              cov_2hr51v6ix7.s[366]++;
              x = x.x; //must be last
            } else {
              cov_2hr51v6ix7.b[30][1]++;
              cov_2hr51v6ix7.s[367]++;
              if (x instanceof Array) {
                cov_2hr51v6ix7.b[31][0]++;
                cov_2hr51v6ix7.s[368]++;
                // x is an array, extract the components from it.
                y = x[1];
                cov_2hr51v6ix7.s[369]++;
                z = x[2];
                cov_2hr51v6ix7.s[370]++;
                x = x[0]; //must be last
              } else {
                cov_2hr51v6ix7.b[31][1]++;
              }
            }

            var len = (cov_2hr51v6ix7.s[371]++, Math.sqrt(x * x + y * y + z * z));
            cov_2hr51v6ix7.s[372]++;
            x *= 1 / len;
            cov_2hr51v6ix7.s[373]++;
            y *= 1 / len;
            cov_2hr51v6ix7.s[374]++;
            z *= 1 / len;

            var a00 = (cov_2hr51v6ix7.s[375]++, this.mat4[0]);
            var a01 = (cov_2hr51v6ix7.s[376]++, this.mat4[1]);
            var a02 = (cov_2hr51v6ix7.s[377]++, this.mat4[2]);
            var a03 = (cov_2hr51v6ix7.s[378]++, this.mat4[3]);
            var a10 = (cov_2hr51v6ix7.s[379]++, this.mat4[4]);
            var a11 = (cov_2hr51v6ix7.s[380]++, this.mat4[5]);
            var a12 = (cov_2hr51v6ix7.s[381]++, this.mat4[6]);
            var a13 = (cov_2hr51v6ix7.s[382]++, this.mat4[7]);
            var a20 = (cov_2hr51v6ix7.s[383]++, this.mat4[8]);
            var a21 = (cov_2hr51v6ix7.s[384]++, this.mat4[9]);
            var a22 = (cov_2hr51v6ix7.s[385]++, this.mat4[10]);
            var a23 = (cov_2hr51v6ix7.s[386]++, this.mat4[11]);

            //sin,cos, and tan of respective angle
            var sA = (cov_2hr51v6ix7.s[387]++, Math.sin(a));
            var cA = (cov_2hr51v6ix7.s[388]++, Math.cos(a));
            var tA = (cov_2hr51v6ix7.s[389]++, 1 - cA);
            // Construct the elements of the rotation matrix
            var b00 = (cov_2hr51v6ix7.s[390]++, x * x * tA + cA);
            var b01 = (cov_2hr51v6ix7.s[391]++, y * x * tA + z * sA);
            var b02 = (cov_2hr51v6ix7.s[392]++, z * x * tA - y * sA);
            var b10 = (cov_2hr51v6ix7.s[393]++, x * y * tA - z * sA);
            var b11 = (cov_2hr51v6ix7.s[394]++, y * y * tA + cA);
            var b12 = (cov_2hr51v6ix7.s[395]++, z * y * tA + x * sA);
            var b20 = (cov_2hr51v6ix7.s[396]++, x * z * tA + y * sA);
            var b21 = (cov_2hr51v6ix7.s[397]++, y * z * tA - x * sA);
            var b22 = (cov_2hr51v6ix7.s[398]++, z * z * tA + cA);

            // rotation-specific matrix multiplication
            cov_2hr51v6ix7.s[399]++;
            this.mat4[0] = a00 * b00 + a10 * b01 + a20 * b02;
            cov_2hr51v6ix7.s[400]++;
            this.mat4[1] = a01 * b00 + a11 * b01 + a21 * b02;
            cov_2hr51v6ix7.s[401]++;
            this.mat4[2] = a02 * b00 + a12 * b01 + a22 * b02;
            cov_2hr51v6ix7.s[402]++;
            this.mat4[3] = a03 * b00 + a13 * b01 + a23 * b02;
            cov_2hr51v6ix7.s[403]++;
            this.mat4[4] = a00 * b10 + a10 * b11 + a20 * b12;
            cov_2hr51v6ix7.s[404]++;
            this.mat4[5] = a01 * b10 + a11 * b11 + a21 * b12;
            cov_2hr51v6ix7.s[405]++;
            this.mat4[6] = a02 * b10 + a12 * b11 + a22 * b12;
            cov_2hr51v6ix7.s[406]++;
            this.mat4[7] = a03 * b10 + a13 * b11 + a23 * b12;
            cov_2hr51v6ix7.s[407]++;
            this.mat4[8] = a00 * b20 + a10 * b21 + a20 * b22;
            cov_2hr51v6ix7.s[408]++;
            this.mat4[9] = a01 * b20 + a11 * b21 + a21 * b22;
            cov_2hr51v6ix7.s[409]++;
            this.mat4[10] = a02 * b20 + a12 * b21 + a22 * b22;
            cov_2hr51v6ix7.s[410]++;
            this.mat4[11] = a03 * b20 + a13 * b21 + a23 * b22;
            cov_2hr51v6ix7.s[411]++;

            return this;
          };

          /**
           * @todo  finish implementing this method!
           * translates
           * @method translate
           * @param  {Number[]} v vector to translate by
           * @chainable
           */ cov_2hr51v6ix7.s[412]++;
          _main.default.Matrix.prototype.translate = function(v) {
            cov_2hr51v6ix7.f[17]++;
            var x = (cov_2hr51v6ix7.s[413]++, v[0]),
              y = (cov_2hr51v6ix7.s[414]++, v[1]),
              z = (cov_2hr51v6ix7.s[415]++,
              (cov_2hr51v6ix7.b[32][0]++, v[2]) || (cov_2hr51v6ix7.b[32][1]++, 0));
            cov_2hr51v6ix7.s[416]++;
            this.mat4[12] += this.mat4[0] * x + this.mat4[4] * y + this.mat4[8] * z;
            cov_2hr51v6ix7.s[417]++;
            this.mat4[13] += this.mat4[1] * x + this.mat4[5] * y + this.mat4[9] * z;
            cov_2hr51v6ix7.s[418]++;
            this.mat4[14] += this.mat4[2] * x + this.mat4[6] * y + this.mat4[10] * z;
            cov_2hr51v6ix7.s[419]++;
            this.mat4[15] += this.mat4[3] * x + this.mat4[7] * y + this.mat4[11] * z;
          };
          cov_2hr51v6ix7.s[420]++;

          _main.default.Matrix.prototype.rotateX = function(a) {
            cov_2hr51v6ix7.f[18]++;
            cov_2hr51v6ix7.s[421]++;
            this.rotate(a, 1, 0, 0);
          };
          cov_2hr51v6ix7.s[422]++;
          _main.default.Matrix.prototype.rotateY = function(a) {
            cov_2hr51v6ix7.f[19]++;
            cov_2hr51v6ix7.s[423]++;
            this.rotate(a, 0, 1, 0);
          };
          cov_2hr51v6ix7.s[424]++;
          _main.default.Matrix.prototype.rotateZ = function(a) {
            cov_2hr51v6ix7.f[20]++;
            cov_2hr51v6ix7.s[425]++;
            this.rotate(a, 0, 0, 1);
          };

          /**
           * sets the perspective matrix
           * @method perspective
           * @param  {Number} fovy   [description]
           * @param  {Number} aspect [description]
           * @param  {Number} near   near clipping plane
           * @param  {Number} far    far clipping plane
           * @chainable
           */ cov_2hr51v6ix7.s[426]++;
          _main.default.Matrix.prototype.perspective = function(fovy, aspect, near, far) {
            cov_2hr51v6ix7.f[21]++;
            var f = (cov_2hr51v6ix7.s[427]++, 1.0 / Math.tan(fovy / 2)),
              nf = (cov_2hr51v6ix7.s[428]++, 1 / (near - far));
            cov_2hr51v6ix7.s[429]++;

            this.mat4[0] = f / aspect;
            cov_2hr51v6ix7.s[430]++;
            this.mat4[1] = 0;
            cov_2hr51v6ix7.s[431]++;
            this.mat4[2] = 0;
            cov_2hr51v6ix7.s[432]++;
            this.mat4[3] = 0;
            cov_2hr51v6ix7.s[433]++;
            this.mat4[4] = 0;
            cov_2hr51v6ix7.s[434]++;
            this.mat4[5] = f;
            cov_2hr51v6ix7.s[435]++;
            this.mat4[6] = 0;
            cov_2hr51v6ix7.s[436]++;
            this.mat4[7] = 0;
            cov_2hr51v6ix7.s[437]++;
            this.mat4[8] = 0;
            cov_2hr51v6ix7.s[438]++;
            this.mat4[9] = 0;
            cov_2hr51v6ix7.s[439]++;
            this.mat4[10] = (far + near) * nf;
            cov_2hr51v6ix7.s[440]++;
            this.mat4[11] = -1;
            cov_2hr51v6ix7.s[441]++;
            this.mat4[12] = 0;
            cov_2hr51v6ix7.s[442]++;
            this.mat4[13] = 0;
            cov_2hr51v6ix7.s[443]++;
            this.mat4[14] = 2 * far * near * nf;
            cov_2hr51v6ix7.s[444]++;
            this.mat4[15] = 0;
            cov_2hr51v6ix7.s[445]++;

            return this;
          };

          /**
           * sets the ortho matrix
           * @method ortho
           * @param  {Number} left   [description]
           * @param  {Number} right  [description]
           * @param  {Number} bottom [description]
           * @param  {Number} top    [description]
           * @param  {Number} near   near clipping plane
           * @param  {Number} far    far clipping plane
           * @chainable
           */ cov_2hr51v6ix7.s[446]++;
          _main.default.Matrix.prototype.ortho = function(
            left,
            right,
            bottom,
            top,
            near,
            far
          ) {
            cov_2hr51v6ix7.f[22]++;
            var lr = (cov_2hr51v6ix7.s[447]++, 1 / (left - right)),
              bt = (cov_2hr51v6ix7.s[448]++, 1 / (bottom - top)),
              nf = (cov_2hr51v6ix7.s[449]++, 1 / (near - far));
            cov_2hr51v6ix7.s[450]++;
            this.mat4[0] = -2 * lr;
            cov_2hr51v6ix7.s[451]++;
            this.mat4[1] = 0;
            cov_2hr51v6ix7.s[452]++;
            this.mat4[2] = 0;
            cov_2hr51v6ix7.s[453]++;
            this.mat4[3] = 0;
            cov_2hr51v6ix7.s[454]++;
            this.mat4[4] = 0;
            cov_2hr51v6ix7.s[455]++;
            this.mat4[5] = -2 * bt;
            cov_2hr51v6ix7.s[456]++;
            this.mat4[6] = 0;
            cov_2hr51v6ix7.s[457]++;
            this.mat4[7] = 0;
            cov_2hr51v6ix7.s[458]++;
            this.mat4[8] = 0;
            cov_2hr51v6ix7.s[459]++;
            this.mat4[9] = 0;
            cov_2hr51v6ix7.s[460]++;
            this.mat4[10] = 2 * nf;
            cov_2hr51v6ix7.s[461]++;
            this.mat4[11] = 0;
            cov_2hr51v6ix7.s[462]++;
            this.mat4[12] = (left + right) * lr;
            cov_2hr51v6ix7.s[463]++;
            this.mat4[13] = (top + bottom) * bt;
            cov_2hr51v6ix7.s[464]++;
            this.mat4[14] = (far + near) * nf;
            cov_2hr51v6ix7.s[465]++;
            this.mat4[15] = 1;
            cov_2hr51v6ix7.s[466]++;

            return this;
          };

          /**
           * PRIVATE
           */
          // matrix methods adapted from:
          // https://developer.mozilla.org/en-US/docs/Web/WebGL/
          // gluPerspective
          //
          // function _makePerspective(fovy, aspect, znear, zfar){
          //    const ymax = znear * Math.tan(fovy * Math.PI / 360.0);
          //    const ymin = -ymax;
          //    const xmin = ymin * aspect;
          //    const xmax = ymax * aspect;
          //    return _makeFrustum(xmin, xmax, ymin, ymax, znear, zfar);
          //  }

          ////
          //// glFrustum
          ////
          //function _makeFrustum(left, right, bottom, top, znear, zfar){
          //  const X = 2*znear/(right-left);
          //  const Y = 2*znear/(top-bottom);
          //  const A = (right+left)/(right-left);
          //  const B = (top+bottom)/(top-bottom);
          //  const C = -(zfar+znear)/(zfar-znear);
          //  const D = -2*zfar*znear/(zfar-znear);
          //  const frustrumMatrix =[
          //  X, 0, A, 0,
          //  0, Y, B, 0,
          //  0, 0, C, D,
          //  0, 0, -1, 0
          //];
          //return frustrumMatrix;
          // }

          // function _setMVPMatrices(){
          ////an identity matrix
          ////@TODO use the p5.Matrix class to abstract away our MV matrices and
          ///other math
          //const _mvMatrix =
          //[
          //  1.0,0.0,0.0,0.0,
          //  0.0,1.0,0.0,0.0,
          //  0.0,0.0,1.0,0.0,
          //  0.0,0.0,0.0,1.0
          //];
          var _default = _main.default.Matrix;
          exports.default = _default;
        },
        {
          '../core/main': 283,
          'core-js/modules/es.array.iterator': 174,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.typed-array.copy-within': 212,
          'core-js/modules/es.typed-array.every': 213,
          'core-js/modules/es.typed-array.fill': 214,
          'core-js/modules/es.typed-array.filter': 215,
          'core-js/modules/es.typed-array.find': 217,
          'core-js/modules/es.typed-array.find-index': 216,
          'core-js/modules/es.typed-array.float32-array': 218,
          'core-js/modules/es.typed-array.for-each': 220,
          'core-js/modules/es.typed-array.includes': 221,
          'core-js/modules/es.typed-array.index-of': 222,
          'core-js/modules/es.typed-array.iterator': 225,
          'core-js/modules/es.typed-array.join': 226,
          'core-js/modules/es.typed-array.last-index-of': 227,
          'core-js/modules/es.typed-array.map': 228,
          'core-js/modules/es.typed-array.reduce': 230,
          'core-js/modules/es.typed-array.reduce-right': 229,
          'core-js/modules/es.typed-array.reverse': 231,
          'core-js/modules/es.typed-array.set': 232,
          'core-js/modules/es.typed-array.slice': 233,
          'core-js/modules/es.typed-array.some': 234,
          'core-js/modules/es.typed-array.sort': 235,
          'core-js/modules/es.typed-array.subarray': 236,
          'core-js/modules/es.typed-array.to-locale-string': 237,
          'core-js/modules/es.typed-array.to-string': 238
        }
      ],
      334: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_vxns4fj2v = (function() {
            var path = '/Users/outofambit/src/p5.js/src/webgl/p5.RenderBuffer.js';
            var hash = '3069c0f2f3494e059be413a24fbf162f861a6739';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/webgl/p5.RenderBuffer.js',
              statementMap: {
                '0': { start: { line: 3, column: 0 }, end: { line: 10, column: 2 } },
                '1': { start: { line: 4, column: 2 }, end: { line: 4, column: 19 } },
                '2': { start: { line: 5, column: 2 }, end: { line: 5, column: 17 } },
                '3': { start: { line: 6, column: 2 }, end: { line: 6, column: 17 } },
                '4': { start: { line: 7, column: 2 }, end: { line: 7, column: 19 } },
                '5': { start: { line: 8, column: 2 }, end: { line: 8, column: 28 } },
                '6': { start: { line: 9, column: 2 }, end: { line: 9, column: 17 } },
                '7': { start: { line: 19, column: 0 }, end: { line: 62, column: 2 } },
                '8': { start: { line: 20, column: 21 }, end: { line: 20, column: 38 } },
                '9': { start: { line: 21, column: 13 }, end: { line: 21, column: 30 } },
                '10': { start: { line: 23, column: 2 }, end: { line: 27, column: 3 } },
                '11': { start: { line: 24, column: 4 }, end: { line: 24, column: 27 } },
                '12': { start: { line: 26, column: 4 }, end: { line: 26, column: 21 } },
                '13': { start: { line: 30, column: 15 }, end: { line: 30, column: 36 } },
                '14': { start: { line: 31, column: 2 }, end: { line: 33, column: 3 } },
                '15': { start: { line: 32, column: 4 }, end: { line: 32, column: 11 } },
                '16': { start: { line: 36, column: 15 }, end: { line: 36, column: 33 } },
                '17': { start: { line: 37, column: 14 }, end: { line: 37, column: 29 } },
                '18': { start: { line: 38, column: 2 }, end: { line: 61, column: 3 } },
                '19': { start: { line: 40, column: 25 }, end: { line: 40, column: 32 } },
                '20': { start: { line: 41, column: 4 }, end: { line: 44, column: 5 } },
                '21': { start: { line: 43, column: 6 }, end: { line: 43, column: 54 } },
                '22': { start: { line: 46, column: 4 }, end: { line: 46, column: 43 } },
                '23': { start: { line: 49, column: 4 }, end: { line: 58, column: 5 } },
                '24': { start: { line: 50, column: 18 }, end: { line: 50, column: 26 } },
                '25': { start: { line: 52, column: 21 }, end: { line: 52, column: 41 } },
                '26': { start: { line: 54, column: 6 }, end: { line: 54, column: 66 } },
                '27': { start: { line: 57, column: 6 }, end: { line: 57, column: 41 } },
                '28': { start: { line: 60, column: 4 }, end: { line: 60, column: 41 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 3, column: 18 }, end: { line: 3, column: 19 } },
                  loc: { start: { line: 3, column: 64 }, end: { line: 10, column: 1 } },
                  line: 3
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 19, column: 43 }, end: { line: 19, column: 44 } },
                  loc: { start: { line: 19, column: 70 }, end: { line: 62, column: 1 } },
                  line: 19
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 23, column: 2 }, end: { line: 27, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 23, column: 2 }, end: { line: 27, column: 3 } },
                    { start: { line: 23, column: 2 }, end: { line: 27, column: 3 } }
                  ],
                  line: 23
                },
                '1': {
                  loc: { start: { line: 31, column: 2 }, end: { line: 33, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 31, column: 2 }, end: { line: 33, column: 3 } },
                    { start: { line: 31, column: 2 }, end: { line: 33, column: 3 } }
                  ],
                  line: 31
                },
                '2': {
                  loc: { start: { line: 38, column: 2 }, end: { line: 61, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 38, column: 2 }, end: { line: 61, column: 3 } },
                    { start: { line: 38, column: 2 }, end: { line: 61, column: 3 } }
                  ],
                  line: 38
                },
                '3': {
                  loc: { start: { line: 41, column: 4 }, end: { line: 44, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 41, column: 4 }, end: { line: 44, column: 5 } },
                    { start: { line: 41, column: 4 }, end: { line: 44, column: 5 } }
                  ],
                  line: 41
                },
                '4': {
                  loc: { start: { line: 49, column: 4 }, end: { line: 58, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 49, column: 4 }, end: { line: 58, column: 5 } },
                    { start: { line: 49, column: 4 }, end: { line: 58, column: 5 } }
                  ],
                  line: 49
                },
                '5': {
                  loc: { start: { line: 49, column: 8 }, end: { line: 49, column: 60 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 49, column: 8 }, end: { line: 49, column: 20 } },
                    { start: { line: 49, column: 24 }, end: { line: 49, column: 60 } }
                  ],
                  line: 49
                },
                '6': {
                  loc: { start: { line: 52, column: 21 }, end: { line: 52, column: 41 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 52, column: 27 }, end: { line: 52, column: 35 } },
                    { start: { line: 52, column: 38 }, end: { line: 52, column: 41 } }
                  ],
                  line: 52
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0
              },
              f: { '0': 0, '1': 0 },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '3069c0f2f3494e059be413a24fbf162f861a6739'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.map');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;
          var _main = _interopRequireDefault(_dereq_('../core/main'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_vxns4fj2v.s[0]++;

          _main.default.RenderBuffer = function(size, src, dst, attr, renderer, map) {
            cov_vxns4fj2v.f[0]++;
            cov_vxns4fj2v.s[1]++;
            this.size = size; // the number of FLOATs in each vertex
            cov_vxns4fj2v.s[2]++;
            this.src = src; // the name of the model's source array
            cov_vxns4fj2v.s[3]++;
            this.dst = dst; // the name of the geometry's buffer
            cov_vxns4fj2v.s[4]++;
            this.attr = attr; // the name of the vertex attribute
            cov_vxns4fj2v.s[5]++;
            this._renderer = renderer;
            cov_vxns4fj2v.s[6]++;
            this.map = map; // optional, a transformation function to apply to src
          };

          /**
           * Enables and binds the buffers used by shader when the appropriate data exists in geometry.
           * Must always be done prior to drawing geometry in WebGL.
           * @param {p5.Geometry} geometry Geometry that is going to be drawn
           * @param {p5.Shader} shader Active shader
           * @private
           */ cov_vxns4fj2v.s[7]++;
          _main.default.RenderBuffer.prototype._prepareBuffer = function(geometry, shader) {
            cov_vxns4fj2v.f[1]++;
            var attributes = (cov_vxns4fj2v.s[8]++, shader.attributes);
            var gl = (cov_vxns4fj2v.s[9]++, this._renderer.GL);
            var model;
            cov_vxns4fj2v.s[10]++;
            if (geometry.model) {
              cov_vxns4fj2v.b[0][0]++;
              cov_vxns4fj2v.s[11]++;
              model = geometry.model;
            } else {
              cov_vxns4fj2v.b[0][1]++;
              cov_vxns4fj2v.s[12]++;
              model = geometry;
            }

            // loop through each of the buffer definitions
            var attr = (cov_vxns4fj2v.s[13]++, attributes[this.attr]);
            cov_vxns4fj2v.s[14]++;
            if (!attr) {
              cov_vxns4fj2v.b[1][0]++;
              cov_vxns4fj2v.s[15]++;
              return;
            } else {
              cov_vxns4fj2v.b[1][1]++;
            }

            // check if the model has the appropriate source array
            var buffer = (cov_vxns4fj2v.s[16]++, geometry[this.dst]);
            var src = (cov_vxns4fj2v.s[17]++, model[this.src]);
            cov_vxns4fj2v.s[18]++;
            if (src.length > 0) {
              cov_vxns4fj2v.b[2][0]++;
              // check if we need to create the GL buffer
              var createBuffer = (cov_vxns4fj2v.s[19]++, !buffer);
              cov_vxns4fj2v.s[20]++;
              if (createBuffer) {
                cov_vxns4fj2v.b[3][0]++;
                cov_vxns4fj2v.s[21]++;
                // create and remember the buffer
                geometry[this.dst] = buffer = gl.createBuffer();
              } else {
                cov_vxns4fj2v.b[3][1]++;
              }
              // bind the buffer
              cov_vxns4fj2v.s[22]++;
              gl.bindBuffer(gl.ARRAY_BUFFER, buffer);

              // check if we need to fill the buffer with data
              cov_vxns4fj2v.s[23]++;
              if (
                (cov_vxns4fj2v.b[5][0]++, createBuffer) ||
                (cov_vxns4fj2v.b[5][1]++, model.dirtyFlags[this.src] !== false)
              ) {
                cov_vxns4fj2v.b[4][0]++;
                var map = (cov_vxns4fj2v.s[24]++, this.map);
                // get the values from the model, possibly transformed
                var values = (cov_vxns4fj2v.s[25]++,
                map ? (cov_vxns4fj2v.b[6][0]++, map(src)) : (cov_vxns4fj2v.b[6][1]++, src));
                // fill the buffer with the values
                cov_vxns4fj2v.s[26]++;
                this._renderer._bindBuffer(buffer, gl.ARRAY_BUFFER, values);

                // mark the model's source array as clean
                cov_vxns4fj2v.s[27]++;
                model.dirtyFlags[this.src] = false;
              } else {
                cov_vxns4fj2v.b[4][1]++;
              }
              // enable the attribute
              cov_vxns4fj2v.s[28]++;
              shader.enableAttrib(attr, this.size);
            } else {
              cov_vxns4fj2v.b[2][1]++;
            }
          };
          var _default = _main.default.RenderBuffer;
          exports.default = _default;
        },
        { '../core/main': 283, 'core-js/modules/es.array.map': 177 }
      ],
      335: [
        function(_dereq_, module, exports) {
          'use strict';
          function _typeof(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof = function _typeof(obj) {
                return typeof obj;
              };
            } else {
              _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof(obj);
          }
          var cov_2gc45geaa = (function() {
            var path = '/Users/outofambit/src/p5.js/src/webgl/p5.RendererGL.Immediate.js';
            var hash = '0441a9f496e2b673a1490a69ebc7aa0abc61173c';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/webgl/p5.RendererGL.Immediate.js',
              statementMap: {
                '0': { start: { line: 32, column: 0 }, end: { line: 37, column: 2 } },
                '1': { start: { line: 33, column: 2 }, end: { line: 34, column: 55 } },
                '2': { start: { line: 35, column: 2 }, end: { line: 35, column: 38 } },
                '3': { start: { line: 36, column: 2 }, end: { line: 36, column: 14 } },
                '4': { start: { line: 49, column: 0 }, end: { line: 105, column: 2 } },
                '5': { start: { line: 53, column: 2 }, end: { line: 53, column: 16 } },
                '6': { start: { line: 55, column: 2 }, end: { line: 67, column: 3 } },
                '7': { start: { line: 57, column: 4 }, end: { line: 57, column: 21 } },
                '8': { start: { line: 58, column: 9 }, end: { line: 67, column: 3 } },
                '9': { start: { line: 60, column: 4 }, end: { line: 60, column: 21 } },
                '10': { start: { line: 61, column: 4 }, end: { line: 61, column: 21 } },
                '11': { start: { line: 62, column: 9 }, end: { line: 67, column: 3 } },
                '12': { start: { line: 64, column: 4 }, end: { line: 64, column: 21 } },
                '13': { start: { line: 65, column: 4 }, end: { line: 65, column: 21 } },
                '14': { start: { line: 66, column: 4 }, end: { line: 66, column: 21 } },
                '15': { start: { line: 68, column: 15 }, end: { line: 68, column: 37 } },
                '16': { start: { line: 69, column: 2 }, end: { line: 69, column: 50 } },
                '17': { start: { line: 70, column: 2 }, end: { line: 70, column: 70 } },
                '18': { start: { line: 71, column: 22 }, end: { line: 71, column: 63 } },
                '19': { start: { line: 72, column: 2 }, end: { line: 77, column: 4 } },
                '20': { start: { line: 79, column: 2 }, end: { line: 92, column: 3 } },
                '21': { start: { line: 80, column: 4 }, end: { line: 91, column: 5 } },
                '22': { start: { line: 81, column: 6 }, end: { line: 84, column: 7 } },
                '23': { start: { line: 82, column: 8 }, end: { line: 82, column: 29 } },
                '24': { start: { line: 83, column: 8 }, end: { line: 83, column: 30 } },
                '25': { start: { line: 85, column: 11 }, end: { line: 91, column: 5 } },
                '26': { start: { line: 87, column: 6 }, end: { line: 90, column: 8 } },
                '27': { start: { line: 94, column: 2 }, end: { line: 94, column: 45 } },
                '28': { start: { line: 96, column: 2 }, end: { line: 96, column: 42 } },
                '29': { start: { line: 97, column: 2 }, end: { line: 97, column: 42 } },
                '30': { start: { line: 98, column: 2 }, end: { line: 98, column: 42 } },
                '31': { start: { line: 100, column: 2 }, end: { line: 100, column: 45 } },
                '32': { start: { line: 101, column: 2 }, end: { line: 101, column: 45 } },
                '33': { start: { line: 102, column: 2 }, end: { line: 102, column: 45 } },
                '34': { start: { line: 104, column: 2 }, end: { line: 104, column: 14 } },
                '35': { start: { line: 119, column: 0 }, end: { line: 127, column: 2 } },
                '36': { start: { line: 120, column: 2 }, end: { line: 124, column: 3 } },
                '37': { start: { line: 121, column: 4 }, end: { line: 121, column: 31 } },
                '38': { start: { line: 123, column: 4 }, end: { line: 123, column: 52 } },
                '39': { start: { line: 126, column: 2 }, end: { line: 126, column: 14 } },
                '40': { start: { line: 133, column: 0 }, end: { line: 167, column: 2 } },
                '41': { start: { line: 141, column: 2 }, end: { line: 147, column: 3 } },
                '42': { start: { line: 142, column: 4 }, end: { line: 145, column: 6 } },
                '43': { start: { line: 146, column: 4 }, end: { line: 146, column: 16 } },
                '44': { start: { line: 148, column: 2 }, end: { line: 148, column: 38 } },
                '45': { start: { line: 149, column: 2 }, end: { line: 153, column: 3 } },
                '46': { start: { line: 150, column: 4 }, end: { line: 152, column: 5 } },
                '47': { start: { line: 151, column: 6 }, end: { line: 151, column: 32 } },
                '48': { start: { line: 154, column: 2 }, end: { line: 158, column: 3 } },
                '49': { start: { line: 155, column: 4 }, end: { line: 157, column: 5 } },
                '50': { start: { line: 156, column: 6 }, end: { line: 156, column: 34 } },
                '51': { start: { line: 160, column: 2 }, end: { line: 160, column: 24 } },
                '52': { start: { line: 161, column: 2 }, end: { line: 161, column: 27 } },
                '53': { start: { line: 162, column: 2 }, end: { line: 162, column: 23 } },
                '54': { start: { line: 163, column: 2 }, end: { line: 163, column: 46 } },
                '55': { start: { line: 164, column: 2 }, end: { line: 164, column: 49 } },
                '56': { start: { line: 165, column: 2 }, end: { line: 165, column: 45 } },
                '57': { start: { line: 166, column: 2 }, end: { line: 166, column: 14 } },
                '58': { start: { line: 178, column: 0 }, end: { line: 201, column: 2 } },
                '59': { start: { line: 179, column: 2 }, end: { line: 179, column: 64 } },
                '60': { start: { line: 179, column: 57 }, end: { line: 179, column: 64 } },
                '61': { start: { line: 181, column: 26 }, end: { line: 181, column: 79 } },
                '62': { start: { line: 182, column: 22 }, end: { line: 182, column: 46 } },
                '63': { start: { line: 183, column: 2 }, end: { line: 190, column: 3 } },
                '64': { start: { line: 184, column: 4 }, end: { line: 188, column: 6 } },
                '65': { start: { line: 189, column: 4 }, end: { line: 189, column: 51 } },
                '66': { start: { line: 192, column: 22 }, end: { line: 192, column: 69 } },
                '67': { start: { line: 195, column: 4 }, end: { line: 196, column: 52 } },
                '68': { start: { line: 198, column: 2 }, end: { line: 200, column: 3 } },
                '69': { start: { line: 199, column: 4 }, end: { line: 199, column: 27 } },
                '70': { start: { line: 209, column: 0 }, end: { line: 246, column: 2 } },
                '71': { start: { line: 214, column: 14 }, end: { line: 214, column: 16 } },
                '72': { start: { line: 215, column: 10 }, end: { line: 215, column: 11 } },
                '73': { start: { line: 216, column: 2 }, end: { line: 241, column: 3 } },
                '74': { start: { line: 218, column: 6 }, end: { line: 221, column: 7 } },
                '75': { start: { line: 219, column: 8 }, end: { line: 219, column: 29 } },
                '76': { start: { line: 220, column: 8 }, end: { line: 220, column: 29 } },
                '77': { start: { line: 222, column: 6 }, end: { line: 222, column: 27 } },
                '78': { start: { line: 223, column: 6 }, end: { line: 223, column: 12 } },
                '79': { start: { line: 225, column: 6 }, end: { line: 229, column: 7 } },
                '80': { start: { line: 226, column: 8 }, end: { line: 226, column: 29 } },
                '81': { start: { line: 227, column: 8 }, end: { line: 227, column: 33 } },
                '82': { start: { line: 228, column: 8 }, end: { line: 228, column: 29 } },
                '83': { start: { line: 230, column: 6 }, end: { line: 230, column: 12 } },
                '84': { start: { line: 232, column: 6 }, end: { line: 234, column: 7 } },
                '85': { start: { line: 233, column: 8 }, end: { line: 233, column: 29 } },
                '86': { start: { line: 235, column: 6 }, end: { line: 235, column: 12 } },
                '87': { start: { line: 237, column: 6 }, end: { line: 239, column: 7 } },
                '88': { start: { line: 238, column: 8 }, end: { line: 238, column: 29 } },
                '89': { start: { line: 240, column: 6 }, end: { line: 240, column: 12 } },
                '90': { start: { line: 242, column: 2 }, end: { line: 244, column: 3 } },
                '91': { start: { line: 243, column: 4 }, end: { line: 243, column: 36 } },
                '92': { start: { line: 245, column: 2 }, end: { line: 245, column: 13 } },
                '93': { start: { line: 252, column: 0 }, end: { line: 266, column: 2 } },
                '94': { start: { line: 253, column: 2 }, end: { line: 253, column: 53 } },
                '95': { start: { line: 254, column: 19 }, end: { line: 256, column: 3 } },
                '96': { start: { line: 257, column: 24 }, end: { line: 257, column: 51 } },
                '97': { start: { line: 258, column: 2 }, end: { line: 258, column: 44 } },
                '98': { start: { line: 259, column: 2 }, end: { line: 265, column: 3 } },
                '99': { start: { line: 260, column: 12 }, end: { line: 260, column: 13 } },
                '100': { start: { line: 260, column: 31 }, end: { line: 260, column: 51 } },
                '101': { start: { line: 264, column: 4 }, end: { line: 264, column: 78 } },
                '102': { start: { line: 273, column: 0 }, end: { line: 300, column: 2 } },
                '103': { start: { line: 274, column: 13 }, end: { line: 274, column: 20 } },
                '104': { start: { line: 275, column: 17 }, end: { line: 275, column: 47 } },
                '105': { start: { line: 277, column: 2 }, end: { line: 277, column: 32 } },
                '106': { start: { line: 279, column: 2 }, end: { line: 281, column: 3 } },
                '107': { start: { line: 280, column: 4 }, end: { line: 280, column: 61 } },
                '108': { start: { line: 285, column: 2 }, end: { line: 290, column: 3 } },
                '109': { start: { line: 289, column: 4 }, end: { line: 289, column: 58 } },
                '110': { start: { line: 292, column: 2 }, end: { line: 292, column: 43 } },
                '111': { start: { line: 293, column: 2 }, end: { line: 297, column: 4 } },
                '112': { start: { line: 299, column: 2 }, end: { line: 299, column: 24 } },
                '113': { start: { line: 307, column: 0 }, end: { line: 321, column: 2 } },
                '114': { start: { line: 308, column: 13 }, end: { line: 308, column: 20 } },
                '115': { start: { line: 309, column: 17 }, end: { line: 309, column: 49 } },
                '116': { start: { line: 310, column: 2 }, end: { line: 310, column: 34 } },
                '117': { start: { line: 311, column: 2 }, end: { line: 313, column: 3 } },
                '118': { start: { line: 312, column: 4 }, end: { line: 312, column: 61 } },
                '119': { start: { line: 314, column: 2 }, end: { line: 314, column: 45 } },
                '120': { start: { line: 315, column: 2 }, end: { line: 319, column: 4 } },
                '121': { start: { line: 320, column: 2 }, end: { line: 320, column: 24 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 32, column: 37 }, end: { line: 32, column: 38 } },
                  loc: { start: { line: 32, column: 52 }, end: { line: 37, column: 1 } },
                  line: 32
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 49, column: 33 }, end: { line: 49, column: 34 } },
                  loc: { start: { line: 49, column: 48 }, end: { line: 105, column: 1 } },
                  line: 49
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 119, column: 33 },
                    end: { line: 119, column: 34 }
                  },
                  loc: { start: { line: 119, column: 54 }, end: { line: 127, column: 1 } },
                  line: 119
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 133, column: 35 },
                    end: { line: 133, column: 36 }
                  },
                  loc: { start: { line: 140, column: 2 }, end: { line: 167, column: 1 } },
                  line: 140
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 178, column: 43 },
                    end: { line: 178, column: 44 }
                  },
                  loc: { start: { line: 178, column: 58 }, end: { line: 201, column: 1 } },
                  line: 178
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 209, column: 42 },
                    end: { line: 209, column: 43 }
                  },
                  loc: { start: { line: 213, column: 2 }, end: { line: 246, column: 1 } },
                  line: 213
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 252, column: 42 },
                    end: { line: 252, column: 43 }
                  },
                  loc: { start: { line: 252, column: 53 }, end: { line: 266, column: 1 } },
                  line: 252
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 273, column: 45 },
                    end: { line: 273, column: 46 }
                  },
                  loc: { start: { line: 273, column: 56 }, end: { line: 300, column: 1 } },
                  line: 273
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 307, column: 47 },
                    end: { line: 307, column: 48 }
                  },
                  loc: { start: { line: 307, column: 58 }, end: { line: 321, column: 1 } },
                  line: 307
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 34, column: 4 }, end: { line: 34, column: 54 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 34, column: 25 }, end: { line: 34, column: 29 } },
                    { start: { line: 34, column: 32 }, end: { line: 34, column: 54 } }
                  ],
                  line: 34
                },
                '1': {
                  loc: { start: { line: 55, column: 2 }, end: { line: 67, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 55, column: 2 }, end: { line: 67, column: 3 } },
                    { start: { line: 55, column: 2 }, end: { line: 67, column: 3 } }
                  ],
                  line: 55
                },
                '2': {
                  loc: { start: { line: 58, column: 9 }, end: { line: 67, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 58, column: 9 }, end: { line: 67, column: 3 } },
                    { start: { line: 58, column: 9 }, end: { line: 67, column: 3 } }
                  ],
                  line: 58
                },
                '3': {
                  loc: { start: { line: 62, column: 9 }, end: { line: 67, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 62, column: 9 }, end: { line: 67, column: 3 } },
                    { start: { line: 62, column: 9 }, end: { line: 67, column: 3 } }
                  ],
                  line: 62
                },
                '4': {
                  loc: { start: { line: 71, column: 22 }, end: { line: 71, column: 63 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 71, column: 22 }, end: { line: 71, column: 39 } },
                    { start: { line: 71, column: 43 }, end: { line: 71, column: 63 } }
                  ],
                  line: 71
                },
                '5': {
                  loc: { start: { line: 79, column: 2 }, end: { line: 92, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 79, column: 2 }, end: { line: 92, column: 3 } },
                    { start: { line: 79, column: 2 }, end: { line: 92, column: 3 } }
                  ],
                  line: 79
                },
                '6': {
                  loc: { start: { line: 80, column: 4 }, end: { line: 91, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 80, column: 4 }, end: { line: 91, column: 5 } },
                    { start: { line: 80, column: 4 }, end: { line: 91, column: 5 } }
                  ],
                  line: 80
                },
                '7': {
                  loc: { start: { line: 81, column: 6 }, end: { line: 84, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 81, column: 6 }, end: { line: 84, column: 7 } },
                    { start: { line: 81, column: 6 }, end: { line: 84, column: 7 } }
                  ],
                  line: 81
                },
                '8': {
                  loc: { start: { line: 81, column: 10 }, end: { line: 81, column: 53 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 81, column: 10 }, end: { line: 81, column: 29 } },
                    { start: { line: 81, column: 33 }, end: { line: 81, column: 53 } }
                  ],
                  line: 81
                },
                '9': {
                  loc: { start: { line: 85, column: 11 }, end: { line: 91, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 85, column: 11 }, end: { line: 91, column: 5 } },
                    { start: { line: 85, column: 11 }, end: { line: 91, column: 5 } }
                  ],
                  line: 85
                },
                '10': {
                  loc: { start: { line: 85, column: 15 }, end: { line: 85, column: 58 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 85, column: 15 }, end: { line: 85, column: 33 } },
                    { start: { line: 85, column: 37 }, end: { line: 85, column: 58 } }
                  ],
                  line: 85
                },
                '11': {
                  loc: { start: { line: 120, column: 2 }, end: { line: 124, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 120, column: 2 }, end: { line: 124, column: 3 } },
                    { start: { line: 120, column: 2 }, end: { line: 124, column: 3 } }
                  ],
                  line: 120
                },
                '12': {
                  loc: { start: { line: 141, column: 2 }, end: { line: 147, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 141, column: 2 }, end: { line: 147, column: 3 } },
                    { start: { line: 141, column: 2 }, end: { line: 147, column: 3 } }
                  ],
                  line: 141
                },
                '13': {
                  loc: { start: { line: 149, column: 2 }, end: { line: 153, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 149, column: 2 }, end: { line: 153, column: 3 } },
                    { start: { line: 149, column: 2 }, end: { line: 153, column: 3 } }
                  ],
                  line: 149
                },
                '14': {
                  loc: { start: { line: 150, column: 4 }, end: { line: 152, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 150, column: 4 }, end: { line: 152, column: 5 } },
                    { start: { line: 150, column: 4 }, end: { line: 152, column: 5 } }
                  ],
                  line: 150
                },
                '15': {
                  loc: { start: { line: 154, column: 2 }, end: { line: 158, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 154, column: 2 }, end: { line: 158, column: 3 } },
                    { start: { line: 154, column: 2 }, end: { line: 158, column: 3 } }
                  ],
                  line: 154
                },
                '16': {
                  loc: { start: { line: 155, column: 4 }, end: { line: 157, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 155, column: 4 }, end: { line: 157, column: 5 } },
                    { start: { line: 155, column: 4 }, end: { line: 157, column: 5 } }
                  ],
                  line: 155
                },
                '17': {
                  loc: { start: { line: 179, column: 2 }, end: { line: 179, column: 64 } },
                  type: 'if',
                  locations: [
                    { start: { line: 179, column: 2 }, end: { line: 179, column: 64 } },
                    { start: { line: 179, column: 2 }, end: { line: 179, column: 64 } }
                  ],
                  line: 179
                },
                '18': {
                  loc: { start: { line: 181, column: 26 }, end: { line: 181, column: 79 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 181, column: 26 }, end: { line: 181, column: 40 } },
                    { start: { line: 181, column: 44 }, end: { line: 181, column: 79 } }
                  ],
                  line: 181
                },
                '19': {
                  loc: { start: { line: 183, column: 2 }, end: { line: 190, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 183, column: 2 }, end: { line: 190, column: 3 } },
                    { start: { line: 183, column: 2 }, end: { line: 190, column: 3 } }
                  ],
                  line: 183
                },
                '20': {
                  loc: { start: { line: 195, column: 4 }, end: { line: 196, column: 52 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 195, column: 5 }, end: { line: 195, column: 18 } },
                    { start: { line: 195, column: 22 }, end: { line: 195, column: 38 } },
                    { start: { line: 195, column: 42 }, end: { line: 195, column: 54 } },
                    { start: { line: 195, column: 58 }, end: { line: 195, column: 69 } },
                    { start: { line: 196, column: 4 }, end: { line: 196, column: 52 } }
                  ],
                  line: 195
                },
                '21': {
                  loc: { start: { line: 198, column: 2 }, end: { line: 200, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 198, column: 2 }, end: { line: 200, column: 3 } },
                    { start: { line: 198, column: 2 }, end: { line: 200, column: 3 } }
                  ],
                  line: 198
                },
                '22': {
                  loc: { start: { line: 216, column: 2 }, end: { line: 241, column: 3 } },
                  type: 'switch',
                  locations: [
                    { start: { line: 217, column: 4 }, end: { line: 223, column: 12 } },
                    { start: { line: 224, column: 4 }, end: { line: 230, column: 12 } },
                    { start: { line: 231, column: 4 }, end: { line: 235, column: 12 } },
                    { start: { line: 236, column: 4 }, end: { line: 240, column: 12 } }
                  ],
                  line: 216
                },
                '23': {
                  loc: { start: { line: 242, column: 2 }, end: { line: 244, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 242, column: 2 }, end: { line: 244, column: 3 } },
                    { start: { line: 242, column: 2 }, end: { line: 244, column: 3 } }
                  ],
                  line: 242
                },
                '24': {
                  loc: { start: { line: 285, column: 2 }, end: { line: 290, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 285, column: 2 }, end: { line: 290, column: 3 } },
                    { start: { line: 285, column: 2 }, end: { line: 290, column: 3 } }
                  ],
                  line: 285
                },
                '25': {
                  loc: { start: { line: 286, column: 4 }, end: { line: 287, column: 52 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 286, column: 4 }, end: { line: 286, column: 57 } },
                    { start: { line: 287, column: 4 }, end: { line: 287, column: 52 } }
                  ],
                  line: 286
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0,
                '118': 0,
                '119': 0,
                '120': 0,
                '121': 0
              },
              f: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0, '8': 0 },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0],
                '20': [0, 0, 0, 0, 0],
                '21': [0, 0],
                '22': [0, 0, 0, 0],
                '23': [0, 0],
                '24': [0, 0],
                '25': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '0441a9f496e2b673a1490a69ebc7aa0abc61173c'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.symbol');
          _dereq_('core-js/modules/es.symbol.description');
          _dereq_('core-js/modules/es.symbol.iterator');
          _dereq_('core-js/modules/es.array.fill');
          _dereq_('core-js/modules/es.array.iterator');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.string.iterator');
          _dereq_('core-js/modules/es.typed-array.float32-array');
          _dereq_('core-js/modules/es.typed-array.copy-within');
          _dereq_('core-js/modules/es.typed-array.every');
          _dereq_('core-js/modules/es.typed-array.fill');
          _dereq_('core-js/modules/es.typed-array.filter');
          _dereq_('core-js/modules/es.typed-array.find');
          _dereq_('core-js/modules/es.typed-array.find-index');
          _dereq_('core-js/modules/es.typed-array.for-each');
          _dereq_('core-js/modules/es.typed-array.includes');
          _dereq_('core-js/modules/es.typed-array.index-of');
          _dereq_('core-js/modules/es.typed-array.iterator');
          _dereq_('core-js/modules/es.typed-array.join');
          _dereq_('core-js/modules/es.typed-array.last-index-of');
          _dereq_('core-js/modules/es.typed-array.map');
          _dereq_('core-js/modules/es.typed-array.reduce');
          _dereq_('core-js/modules/es.typed-array.reduce-right');
          _dereq_('core-js/modules/es.typed-array.reverse');
          _dereq_('core-js/modules/es.typed-array.set');
          _dereq_('core-js/modules/es.typed-array.slice');
          _dereq_('core-js/modules/es.typed-array.some');
          _dereq_('core-js/modules/es.typed-array.sort');
          _dereq_('core-js/modules/es.typed-array.subarray');
          _dereq_('core-js/modules/es.typed-array.to-locale-string');
          _dereq_('core-js/modules/es.typed-array.to-string');
          _dereq_('core-js/modules/web.dom-collections.iterator');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          var constants = _interopRequireWildcard(_dereq_('../core/constants'));
          _dereq_('./p5.RenderBuffer');
          function _getRequireWildcardCache() {
            if (typeof WeakMap !== 'function') return null;
            var cache = new WeakMap();
            _getRequireWildcardCache = function _getRequireWildcardCache() {
              return cache;
            };
            return cache;
          }
          function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
              return obj;
            }
            if (obj === null || (_typeof(obj) !== 'object' && typeof obj !== 'function')) {
              return { default: obj };
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
              return cache.get(obj);
            }
            var newObj = {};
            var hasPropertyDescriptor =
              Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
              if (Object.prototype.hasOwnProperty.call(obj, key)) {
                var desc = hasPropertyDescriptor
                  ? Object.getOwnPropertyDescriptor(obj, key)
                  : null;
                if (desc && (desc.get || desc.set)) {
                  Object.defineProperty(newObj, key, desc);
                } else {
                  newObj[key] = obj[key];
                }
              }
            }
            newObj.default = obj;
            if (cache) {
              cache.set(obj, newObj);
            }
            return newObj;
          }
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_2gc45geaa.s[0]++;

          /**
           * Begin shape drawing.  This is a helpful way of generating
           * custom shapes quickly.  However in WEBGL mode, application
           * performance will likely drop as a result of too many calls to
           * <a href="#/p5/beginShape">beginShape()</a> / <a href="#/p5/endShape">endShape()</a>.  As a high performance alternative,
           * please use p5.js geometry primitives.
           * @private
           * @method beginShape
           * @param  {Number} mode webgl primitives mode.  beginShape supports the
           *                       following modes:
           *                       POINTS,LINES,LINE_STRIP,LINE_LOOP,TRIANGLES,
           *                       TRIANGLE_STRIP, TRIANGLE_FAN and TESS(WEBGL only)
           * @chainable
           */
          _main.default.RendererGL.prototype.beginShape = function(mode) {
            cov_2gc45geaa.f[0]++;
            cov_2gc45geaa.s[1]++;
            this.immediateMode.shapeMode =
              mode !== undefined
                ? (cov_2gc45geaa.b[0][0]++, mode)
                : (cov_2gc45geaa.b[0][1]++, constants.TRIANGLE_FAN);
            cov_2gc45geaa.s[2]++;
            this.immediateMode.geometry.reset();
            cov_2gc45geaa.s[3]++;
            return this;
          };

          /**
           * adds a vertex to be drawn in a custom Shape.
           * @private
           * @method vertex
           * @param  {Number} x x-coordinate of vertex
           * @param  {Number} y y-coordinate of vertex
           * @param  {Number} z z-coordinate of vertex
           * @chainable
           * @TODO implement handling of <a href="#/p5.Vector">p5.Vector</a> args
           */ cov_2gc45geaa.s[4]++;
          _main.default.RendererGL.prototype.vertex = function(x, y) {
            cov_2gc45geaa.f[1]++;
            var z, u, v;

            // default to (x, y) mode: all other arugments assumed to be 0.
            cov_2gc45geaa.s[5]++;
            z = u = v = 0;
            cov_2gc45geaa.s[6]++;

            if (arguments.length === 3) {
              cov_2gc45geaa.b[1][0]++;
              cov_2gc45geaa.s[7]++;
              // (x, y, z) mode: (u, v) assumed to be 0.
              z = arguments[2];
            } else {
              cov_2gc45geaa.b[1][1]++;
              cov_2gc45geaa.s[8]++;
              if (arguments.length === 4) {
                cov_2gc45geaa.b[2][0]++;
                cov_2gc45geaa.s[9]++;
                // (x, y, u, v) mode: z assumed to be 0.
                u = arguments[2];
                cov_2gc45geaa.s[10]++;
                v = arguments[3];
              } else {
                cov_2gc45geaa.b[2][1]++;
                cov_2gc45geaa.s[11]++;
                if (arguments.length === 5) {
                  cov_2gc45geaa.b[3][0]++;
                  cov_2gc45geaa.s[12]++;
                  // (x, y, z, u, v) mode
                  z = arguments[2];
                  cov_2gc45geaa.s[13]++;
                  u = arguments[3];
                  cov_2gc45geaa.s[14]++;
                  v = arguments[4];
                } else {
                  cov_2gc45geaa.b[3][1]++;
                }
              }
            }
            var vert = (cov_2gc45geaa.s[15]++, new _main.default.Vector(x, y, z));
            cov_2gc45geaa.s[16]++;
            this.immediateMode.geometry.vertices.push(vert);
            cov_2gc45geaa.s[17]++;
            this.immediateMode.geometry.vertexNormals.push(this._currentNormal);
            var vertexColor = (cov_2gc45geaa.s[18]++,
            (cov_2gc45geaa.b[4][0]++, this.curFillColor) ||
              (cov_2gc45geaa.b[4][1]++, [0.5, 0.5, 0.5, 1.0]));
            cov_2gc45geaa.s[19]++;
            this.immediateMode.geometry.vertexColors.push(
              vertexColor[0],
              vertexColor[1],
              vertexColor[2],
              vertexColor[3]
            );
            cov_2gc45geaa.s[20]++;

            if (this.textureMode === constants.IMAGE) {
              cov_2gc45geaa.b[5][0]++;
              cov_2gc45geaa.s[21]++;
              if (this._tex !== null) {
                cov_2gc45geaa.b[6][0]++;
                cov_2gc45geaa.s[22]++;
                if (
                  (cov_2gc45geaa.b[8][0]++, this._tex.width > 0) &&
                  (cov_2gc45geaa.b[8][1]++, this._tex.height > 0)
                ) {
                  cov_2gc45geaa.b[7][0]++;
                  cov_2gc45geaa.s[23]++;
                  u /= this._tex.width;
                  cov_2gc45geaa.s[24]++;
                  v /= this._tex.height;
                } else {
                  cov_2gc45geaa.b[7][1]++;
                }
              } else {
                cov_2gc45geaa.b[6][1]++;
                cov_2gc45geaa.s[25]++;
                if (
                  (cov_2gc45geaa.b[10][0]++, this._tex === null) &&
                  (cov_2gc45geaa.b[10][1]++, arguments.length >= 4)
                ) {
                  cov_2gc45geaa.b[9][0]++;
                  cov_2gc45geaa.s[26]++;
                  // Only throw this warning if custom uv's have  been provided
                  console.warn(
                    'You must first call texture() before using' +
                      ' vertex() with image based u and v coordinates'
                  );
                } else {
                  cov_2gc45geaa.b[9][1]++;
                }
              }
            } else {
              cov_2gc45geaa.b[5][1]++;
            }
            cov_2gc45geaa.s[27]++;

            this.immediateMode.geometry.uvs.push(u, v);
            cov_2gc45geaa.s[28]++;

            this.immediateMode._bezierVertex[0] = x;
            cov_2gc45geaa.s[29]++;
            this.immediateMode._bezierVertex[1] = y;
            cov_2gc45geaa.s[30]++;
            this.immediateMode._bezierVertex[2] = z;
            cov_2gc45geaa.s[31]++;

            this.immediateMode._quadraticVertex[0] = x;
            cov_2gc45geaa.s[32]++;
            this.immediateMode._quadraticVertex[1] = y;
            cov_2gc45geaa.s[33]++;
            this.immediateMode._quadraticVertex[2] = z;
            cov_2gc45geaa.s[34]++;

            return this;
          };

          /**
           * Sets the normal to use for subsequent vertices.
           * @method vertexNormal
           * @param  {Number} x
           * @param  {Number} y
           * @param  {Number} z
           * @chainable
           *
           * @method vertexNormal
           * @param  {Vector} v
           * @chainable
           */ cov_2gc45geaa.s[35]++;
          _main.default.RendererGL.prototype.normal = function(xorv, y, z) {
            cov_2gc45geaa.f[2]++;
            cov_2gc45geaa.s[36]++;
            if (xorv instanceof _main.default.Vector) {
              cov_2gc45geaa.b[11][0]++;
              cov_2gc45geaa.s[37]++;
              this._currentNormal = xorv;
            } else {
              cov_2gc45geaa.b[11][1]++;
              cov_2gc45geaa.s[38]++;
              this._currentNormal = new _main.default.Vector(xorv, y, z);
            }
            cov_2gc45geaa.s[39]++;

            return this;
          };

          /**
           * End shape drawing and render vertices to screen.
           * @chainable
           */ cov_2gc45geaa.s[40]++;
          _main.default.RendererGL.prototype.endShape = function(
            mode,
            isCurve,
            isBezier,
            isQuadratic,
            isContour,
            shapeKind
          ) {
            cov_2gc45geaa.f[3]++;
            cov_2gc45geaa.s[41]++;
            if (this.immediateMode.shapeMode === constants.POINTS) {
              cov_2gc45geaa.b[12][0]++;
              cov_2gc45geaa.s[42]++;
              this._drawPoints(
                this.immediateMode.geometry.vertices,
                this.immediateMode.buffers.point
              );
              cov_2gc45geaa.s[43]++;

              return this;
            } else {
              cov_2gc45geaa.b[12][1]++;
            }
            cov_2gc45geaa.s[44]++;
            this._processVertices.apply(this, arguments);
            cov_2gc45geaa.s[45]++;
            if (this._doFill) {
              cov_2gc45geaa.b[13][0]++;
              cov_2gc45geaa.s[46]++;
              if (this.immediateMode.geometry.vertices.length > 1) {
                cov_2gc45geaa.b[14][0]++;
                cov_2gc45geaa.s[47]++;
                this._drawImmediateFill();
              } else {
                cov_2gc45geaa.b[14][1]++;
              }
            } else {
              cov_2gc45geaa.b[13][1]++;
            }
            cov_2gc45geaa.s[48]++;
            if (this._doStroke) {
              cov_2gc45geaa.b[15][0]++;
              cov_2gc45geaa.s[49]++;
              if (this.immediateMode.geometry.lineVertices.length > 1) {
                cov_2gc45geaa.b[16][0]++;
                cov_2gc45geaa.s[50]++;
                this._drawImmediateStroke();
              } else {
                cov_2gc45geaa.b[16][1]++;
              }
            } else {
              cov_2gc45geaa.b[15][1]++;
            }
            cov_2gc45geaa.s[51]++;

            this.isBezier = false;
            cov_2gc45geaa.s[52]++;
            this.isQuadratic = false;
            cov_2gc45geaa.s[53]++;
            this.isCurve = false;
            cov_2gc45geaa.s[54]++;
            this.immediateMode._bezierVertex.length = 0;
            cov_2gc45geaa.s[55]++;
            this.immediateMode._quadraticVertex.length = 0;
            cov_2gc45geaa.s[56]++;
            this.immediateMode._curveVertex.length = 0;
            cov_2gc45geaa.s[57]++;
            return this;
          };

          /**
           * Called from endShape(). This function calculates the stroke vertices for custom shapes and
           * tesselates shapes when applicable.
           * @private
           * @param  {Number} mode webgl primitives mode.  beginShape supports the
           *                       following modes:
           *                       POINTS,LINES,LINE_STRIP,LINE_LOOP,TRIANGLES,
           *                       TRIANGLE_STRIP, TRIANGLE_FAN and TESS(WEBGL only)
           */ cov_2gc45geaa.s[58]++;
          _main.default.RendererGL.prototype._processVertices = function(mode) {
            cov_2gc45geaa.f[4]++;
            cov_2gc45geaa.s[59]++;
            if (this.immediateMode.geometry.vertices.length === 0) {
              cov_2gc45geaa.b[17][0]++;
              cov_2gc45geaa.s[60]++;
              return;
            } else {
              cov_2gc45geaa.b[17][1]++;
            }

            var calculateStroke = (cov_2gc45geaa.s[61]++,
            (cov_2gc45geaa.b[18][0]++, this._doStroke) &&
              (cov_2gc45geaa.b[18][1]++, this.drawMode !== constants.TEXTURE));
            var shouldClose = (cov_2gc45geaa.s[62]++, mode === constants.CLOSE);
            cov_2gc45geaa.s[63]++;
            if (calculateStroke) {
              cov_2gc45geaa.b[19][0]++;
              cov_2gc45geaa.s[64]++;
              this.immediateMode.geometry.edges = this._calculateEdges(
                this.immediateMode.shapeMode,
                this.immediateMode.geometry.vertices,
                shouldClose
              );
              cov_2gc45geaa.s[65]++;

              this.immediateMode.geometry._edgesToVertices();
            } else {
              cov_2gc45geaa.b[19][1]++;
            }
            // For hollow shapes, user must set mode to TESS
            var convexShape = (cov_2gc45geaa.s[66]++,
            this.immediateMode.shapeMode === constants.TESS);
            // We tesselate when drawing curves or convex shapes
            var shouldTess = (cov_2gc45geaa.s[67]++,
            ((cov_2gc45geaa.b[20][0]++, this.isBezier) ||
              (cov_2gc45geaa.b[20][1]++, this.isQuadratic) ||
              (cov_2gc45geaa.b[20][2]++, this.isCurve) ||
              (cov_2gc45geaa.b[20][3]++, convexShape)) &&
              (cov_2gc45geaa.b[20][4]++, this.immediateMode.shapeMode !== constants.LINES));
            cov_2gc45geaa.s[68]++;

            if (shouldTess) {
              cov_2gc45geaa.b[21][0]++;
              cov_2gc45geaa.s[69]++;
              this._tesselateShape();
            } else {
              cov_2gc45geaa.b[21][1]++;
            }
          };

          /**
           * Called from _processVertices(). This function calculates the stroke vertices for custom shapes and
           * tesselates shapes when applicable.
           * @private
           * @returns  {Array[Number]} indices for custom shape vertices indicating edges.
           */ cov_2gc45geaa.s[70]++;
          _main.default.RendererGL.prototype._calculateEdges = function(
            shapeMode,
            verts,
            shouldClose
          ) {
            cov_2gc45geaa.f[5]++;
            var res = (cov_2gc45geaa.s[71]++, []);
            var i = (cov_2gc45geaa.s[72]++, 0);
            cov_2gc45geaa.s[73]++;
            switch (shapeMode) {
              case constants.TRIANGLE_STRIP:
                cov_2gc45geaa.b[22][0]++;
                cov_2gc45geaa.s[74]++;
                for (i = 0; i < verts.length - 2; i++) {
                  cov_2gc45geaa.s[75]++;
                  res.push([i, i + 1]);
                  cov_2gc45geaa.s[76]++;
                  res.push([i, i + 2]);
                }
                cov_2gc45geaa.s[77]++;
                res.push([i, i + 1]);
                cov_2gc45geaa.s[78]++;
                break;
              case constants.TRIANGLES:
                cov_2gc45geaa.b[22][1]++;
                cov_2gc45geaa.s[79]++;
                for (i = 0; i < verts.length - 2; i = i + 3) {
                  cov_2gc45geaa.s[80]++;
                  res.push([i, i + 1]);
                  cov_2gc45geaa.s[81]++;
                  res.push([i + 1, i + 2]);
                  cov_2gc45geaa.s[82]++;
                  res.push([i + 2, i]);
                }
                cov_2gc45geaa.s[83]++;
                break;
              case constants.LINES:
                cov_2gc45geaa.b[22][2]++;
                cov_2gc45geaa.s[84]++;
                for (i = 0; i < verts.length - 1; i = i + 2) {
                  cov_2gc45geaa.s[85]++;
                  res.push([i, i + 1]);
                }
                cov_2gc45geaa.s[86]++;
                break;
              default:
                cov_2gc45geaa.b[22][3]++;
                cov_2gc45geaa.s[87]++;
                for (i = 0; i < verts.length - 1; i++) {
                  cov_2gc45geaa.s[88]++;
                  res.push([i, i + 1]);
                }
                cov_2gc45geaa.s[89]++;
                break;
            }
            cov_2gc45geaa.s[90]++;

            if (shouldClose) {
              cov_2gc45geaa.b[23][0]++;
              cov_2gc45geaa.s[91]++;
              res.push([verts.length - 1, 0]);
            } else {
              cov_2gc45geaa.b[23][1]++;
            }
            cov_2gc45geaa.s[92]++;
            return res;
          };

          /**
           * Called from _processVertices() when applicable. This function tesselates immediateMode.geometry.
           * @private
           */ cov_2gc45geaa.s[93]++;
          _main.default.RendererGL.prototype._tesselateShape = function() {
            cov_2gc45geaa.f[6]++;
            cov_2gc45geaa.s[94]++;
            this.immediateMode.shapeMode = constants.TRIANGLES;
            var contours = (cov_2gc45geaa.s[95]++,
            [new Float32Array(this._vToNArray(this.immediateMode.geometry.vertices))]);

            var polyTriangles = (cov_2gc45geaa.s[96]++, this._triangulate(contours));
            cov_2gc45geaa.s[97]++;
            this.immediateMode.geometry.vertices = [];
            cov_2gc45geaa.s[98]++;
            for (
              var j = (cov_2gc45geaa.s[99]++, 0),
                polyTriLength = (cov_2gc45geaa.s[100]++, polyTriangles.length);
              j < polyTriLength;
              j = j + 3
            ) {
              cov_2gc45geaa.s[101]++;
              this.vertex(polyTriangles[j], polyTriangles[j + 1], polyTriangles[j + 2]);
            }
          };

          /**
           * Called from endShape(). Responsible for calculating normals, setting shader uniforms,
           * enabling all appropriate buffers, applying color blend, and drawing the fill geometry.
           * @private
           */ cov_2gc45geaa.s[102]++;
          _main.default.RendererGL.prototype._drawImmediateFill = function() {
            cov_2gc45geaa.f[7]++;
            var gl = (cov_2gc45geaa.s[103]++, this.GL);
            var shader = (cov_2gc45geaa.s[104]++, this._getImmediateFillShader());
            cov_2gc45geaa.s[105]++;

            this._setFillUniforms(shader);
            cov_2gc45geaa.s[106]++;
            var _iteratorNormalCompletion = true;
            var _didIteratorError = false;
            var _iteratorError = undefined;
            try {
              for (
                var _iterator = this.immediateMode.buffers.fill[Symbol.iterator](), _step;
                !(_iteratorNormalCompletion = (_step = _iterator.next()).done);
                _iteratorNormalCompletion = true
              ) {
                var buff = _step.value;
                cov_2gc45geaa.s[107]++;
                buff._prepareBuffer(this.immediateMode.geometry, shader);
              }

              // LINE_STRIP and LINES are not used for rendering, instead
              // they only indicate a way to modify vertices during the _processVertices() step
            } catch (err) {
              _didIteratorError = true;
              _iteratorError = err;
            } finally {
              try {
                if (!_iteratorNormalCompletion && _iterator.return != null) {
                  _iterator.return();
                }
              } finally {
                if (_didIteratorError) {
                  throw _iteratorError;
                }
              }
            }
            cov_2gc45geaa.s[108]++;
            if (
              (cov_2gc45geaa.b[25][0]++,
              this.immediateMode.shapeMode === constants.LINE_STRIP) ||
              (cov_2gc45geaa.b[25][1]++, this.immediateMode.shapeMode === constants.LINES)
            ) {
              cov_2gc45geaa.b[24][0]++;
              cov_2gc45geaa.s[109]++;
              this.immediateMode.shapeMode = constants.TRIANGLE_FAN;
            } else {
              cov_2gc45geaa.b[24][1]++;
            }
            cov_2gc45geaa.s[110]++;

            this._applyColorBlend(this.curFillColor);
            cov_2gc45geaa.s[111]++;
            gl.drawArrays(
              this.immediateMode.shapeMode,
              0,
              this.immediateMode.geometry.vertices.length
            );
            cov_2gc45geaa.s[112]++;

            shader.unbindShader();
          };

          /**
           * Called from endShape(). Responsible for calculating normals, setting shader uniforms,
           * enabling all appropriate buffers, applying color blend, and drawing the stroke geometry.
           * @private
           */ cov_2gc45geaa.s[113]++;
          _main.default.RendererGL.prototype._drawImmediateStroke = function() {
            cov_2gc45geaa.f[8]++;
            var gl = (cov_2gc45geaa.s[114]++, this.GL);
            var shader = (cov_2gc45geaa.s[115]++, this._getImmediateStrokeShader());
            cov_2gc45geaa.s[116]++;
            this._setStrokeUniforms(shader);
            cov_2gc45geaa.s[117]++;
            var _iteratorNormalCompletion2 = true;
            var _didIteratorError2 = false;
            var _iteratorError2 = undefined;
            try {
              for (
                var _iterator2 = this.immediateMode.buffers.stroke[Symbol.iterator](),
                  _step2;
                !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done);
                _iteratorNormalCompletion2 = true
              ) {
                var buff = _step2.value;
                cov_2gc45geaa.s[118]++;
                buff._prepareBuffer(this.immediateMode.geometry, shader);
              }
            } catch (err) {
              _didIteratorError2 = true;
              _iteratorError2 = err;
            } finally {
              try {
                if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
                  _iterator2.return();
                }
              } finally {
                if (_didIteratorError2) {
                  throw _iteratorError2;
                }
              }
            }
            cov_2gc45geaa.s[119]++;
            this._applyColorBlend(this.curStrokeColor);
            cov_2gc45geaa.s[120]++;
            gl.drawArrays(gl.TRIANGLES, 0, this.immediateMode.geometry.lineVertices.length);
            cov_2gc45geaa.s[121]++;

            shader.unbindShader();
          };
          var _default = _main.default.RendererGL;
          exports.default = _default;
        },
        {
          '../core/constants': 272,
          '../core/main': 283,
          './p5.RenderBuffer': 334,
          'core-js/modules/es.array.fill': 168,
          'core-js/modules/es.array.iterator': 174,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.string.iterator': 201,
          'core-js/modules/es.symbol': 211,
          'core-js/modules/es.symbol.description': 209,
          'core-js/modules/es.symbol.iterator': 210,
          'core-js/modules/es.typed-array.copy-within': 212,
          'core-js/modules/es.typed-array.every': 213,
          'core-js/modules/es.typed-array.fill': 214,
          'core-js/modules/es.typed-array.filter': 215,
          'core-js/modules/es.typed-array.find': 217,
          'core-js/modules/es.typed-array.find-index': 216,
          'core-js/modules/es.typed-array.float32-array': 218,
          'core-js/modules/es.typed-array.for-each': 220,
          'core-js/modules/es.typed-array.includes': 221,
          'core-js/modules/es.typed-array.index-of': 222,
          'core-js/modules/es.typed-array.iterator': 225,
          'core-js/modules/es.typed-array.join': 226,
          'core-js/modules/es.typed-array.last-index-of': 227,
          'core-js/modules/es.typed-array.map': 228,
          'core-js/modules/es.typed-array.reduce': 230,
          'core-js/modules/es.typed-array.reduce-right': 229,
          'core-js/modules/es.typed-array.reverse': 231,
          'core-js/modules/es.typed-array.set': 232,
          'core-js/modules/es.typed-array.slice': 233,
          'core-js/modules/es.typed-array.some': 234,
          'core-js/modules/es.typed-array.sort': 235,
          'core-js/modules/es.typed-array.subarray': 236,
          'core-js/modules/es.typed-array.to-locale-string': 237,
          'core-js/modules/es.typed-array.to-string': 238,
          'core-js/modules/web.dom-collections.iterator': 244
        }
      ],
      336: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_1k5j1g820c = (function() {
            var path = '/Users/outofambit/src/p5.js/src/webgl/p5.RendererGL.Retained.js';
            var hash = 'f2f1a2694435c1e778c60f00d19cf7e2dc8a6973';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/webgl/p5.RendererGL.Retained.js',
              statementMap: {
                '0': { start: { line: 7, column: 16 }, end: { line: 7, column: 17 } },
                '1': { start: { line: 16, column: 0 }, end: { line: 29, column: 2 } },
                '2': { start: { line: 17, column: 2 }, end: { line: 17, column: 25 } },
                '3': { start: { line: 20, column: 2 }, end: { line: 20, column: 14 } },
                '4': { start: { line: 21, column: 2 }, end: { line: 25, column: 3 } },
                '5': { start: { line: 22, column: 16 }, end: { line: 22, column: 58 } },
                '6': { start: { line: 23, column: 4 }, end: { line: 23, column: 43 } },
                '7': { start: { line: 24, column: 4 }, end: { line: 24, column: 16 } },
                '8': { start: { line: 28, column: 2 }, end: { line: 28, column: 48 } },
                '9': { start: { line: 31, column: 0 }, end: { line: 57, column: 2 } },
                '10': { start: { line: 32, column: 18 }, end: { line: 32, column: 49 } },
                '11': { start: { line: 33, column: 2 }, end: { line: 35, column: 3 } },
                '12': { start: { line: 34, column: 4 }, end: { line: 34, column: 11 } },
                '13': { start: { line: 37, column: 2 }, end: { line: 37, column: 41 } },
                '14': { start: { line: 38, column: 2 }, end: { line: 38, column: 14 } },
                '15': { start: { line: 40, column: 13 }, end: { line: 40, column: 20 } },
                '16': { start: { line: 41, column: 2 }, end: { line: 43, column: 3 } },
                '17': { start: { line: 42, column: 4 }, end: { line: 42, column: 41 } },
                '18': { start: { line: 46, column: 4 }, end: { line: 51, column: 5 } },
                '19': { start: { line: 47, column: 6 }, end: { line: 50, column: 7 } },
                '20': { start: { line: 48, column: 8 }, end: { line: 48, column: 42 } },
                '21': { start: { line: 49, column: 8 }, end: { line: 49, column: 32 } },
                '22': { start: { line: 55, column: 2 }, end: { line: 55, column: 48 } },
                '23': { start: { line: 56, column: 2 }, end: { line: 56, column: 46 } },
                '24': { start: { line: 66, column: 0 }, end: { line: 108, column: 2 } },
                '25': { start: { line: 67, column: 13 }, end: { line: 67, column: 20 } },
                '26': { start: { line: 69, column: 18 }, end: { line: 69, column: 47 } },
                '27': { start: { line: 70, column: 2 }, end: { line: 70, column: 24 } },
                '28': { start: { line: 72, column: 20 }, end: { line: 72, column: 39 } },
                '29': { start: { line: 74, column: 2 }, end: { line: 103, column: 3 } },
                '30': { start: { line: 76, column: 4 }, end: { line: 76, column: 76 } },
                '31': { start: { line: 76, column: 22 }, end: { line: 76, column: 76 } },
                '32': { start: { line: 77, column: 17 }, end: { line: 77, column: 62 } },
                '33': { start: { line: 82, column: 42 }, end: { line: 82, column: 67 } },
                '34': { start: { line: 82, column: 57 }, end: { line: 82, column: 66 } },
                '35': { start: { line: 83, column: 15 }, end: { line: 83, column: 72 } },
                '36': { start: { line: 84, column: 4 }, end: { line: 84, column: 71 } },
                '37': { start: { line: 89, column: 4 }, end: { line: 91, column: 26 } },
                '38': { start: { line: 94, column: 4 }, end: { line: 94, column: 49 } },
                '39': { start: { line: 97, column: 4 }, end: { line: 100, column: 5 } },
                '40': { start: { line: 98, column: 6 }, end: { line: 98, column: 35 } },
                '41': { start: { line: 99, column: 6 }, end: { line: 99, column: 33 } },
                '42': { start: { line: 102, column: 4 }, end: { line: 102, column: 69 } },
                '43': { start: { line: 105, column: 2 }, end: { line: 105, column: 79 } },
                '44': { start: { line: 107, column: 2 }, end: { line: 107, column: 17 } },
                '45': { start: { line: 116, column: 0 }, end: { line: 146, column: 2 } },
                '46': { start: { line: 117, column: 13 }, end: { line: 117, column: 20 } },
                '47': { start: { line: 118, column: 19 }, end: { line: 118, column: 50 } },
                '48': { start: { line: 120, column: 2 }, end: { line: 129, column: 3 } },
                '49': { start: { line: 121, column: 25 }, end: { line: 121, column: 56 } },
                '50': { start: { line: 122, column: 4 }, end: { line: 122, column: 42 } },
                '51': { start: { line: 123, column: 4 }, end: { line: 125, column: 5 } },
                '52': { start: { line: 124, column: 6 }, end: { line: 124, column: 50 } },
                '53': { start: { line: 126, column: 4 }, end: { line: 126, column: 47 } },
                '54': { start: { line: 127, column: 4 }, end: { line: 127, column: 40 } },
                '55': { start: { line: 128, column: 4 }, end: { line: 128, column: 32 } },
                '56': { start: { line: 131, column: 2 }, end: { line: 144, column: 3 } },
                '57': { start: { line: 132, column: 23 }, end: { line: 132, column: 52 } },
                '58': { start: { line: 133, column: 4 }, end: { line: 133, column: 38 } },
                '59': { start: { line: 134, column: 4 }, end: { line: 136, column: 5 } },
                '60': { start: { line: 135, column: 6 }, end: { line: 135, column: 48 } },
                '61': { start: { line: 137, column: 4 }, end: { line: 140, column: 5 } },
                '62': { start: { line: 139, column: 6 }, end: { line: 139, column: 70 } },
                '63': { start: { line: 141, column: 4 }, end: { line: 141, column: 45 } },
                '64': { start: { line: 142, column: 4 }, end: { line: 142, column: 42 } },
                '65': { start: { line: 143, column: 4 }, end: { line: 143, column: 30 } },
                '66': { start: { line: 145, column: 2 }, end: { line: 145, column: 14 } },
                '67': { start: { line: 163, column: 0 }, end: { line: 176, column: 2 } },
                '68': { start: { line: 169, column: 20 }, end: { line: 169, column: 41 } },
                '69': { start: { line: 170, column: 2 }, end: { line: 175, column: 3 } },
                '70': { start: { line: 171, column: 4 }, end: { line: 171, column: 49 } },
                '71': { start: { line: 172, column: 4 }, end: { line: 172, column: 26 } },
                '72': { start: { line: 174, column: 4 }, end: { line: 174, column: 31 } },
                '73': { start: { line: 178, column: 0 }, end: { line: 185, column: 2 } },
                '74': { start: { line: 179, column: 2 }, end: { line: 183, column: 4 } },
                '75': { start: { line: 184, column: 2 }, end: { line: 184, column: 14 } },
                '76': { start: { line: 187, column: 0 }, end: { line: 212, column: 2 } },
                '77': { start: { line: 188, column: 18 }, end: { line: 188, column: 49 } },
                '78': { start: { line: 189, column: 13 }, end: { line: 189, column: 20 } },
                '79': { start: { line: 191, column: 2 }, end: { line: 211, column: 3 } },
                '80': { start: { line: 194, column: 4 }, end: { line: 200, column: 5 } },
                '81': { start: { line: 195, column: 6 }, end: { line: 199, column: 7 } },
                '82': { start: { line: 196, column: 8 }, end: { line: 198, column: 10 } },
                '83': { start: { line: 202, column: 4 }, end: { line: 207, column: 6 } },
                '84': { start: { line: 210, column: 4 }, end: { line: 210, column: 68 } },
                '85': { start: { line: 214, column: 0 }, end: { line: 232, column: 2 } },
                '86': { start: { line: 215, column: 13 }, end: { line: 215, column: 20 } },
                '87': { start: { line: 216, column: 22 }, end: { line: 216, column: 53 } },
                '88': { start: { line: 217, column: 2 }, end: { line: 217, column: 38 } },
                '89': { start: { line: 219, column: 2 }, end: { line: 225, column: 4 } },
                '90': { start: { line: 227, column: 2 }, end: { line: 227, column: 64 } },
                '91': { start: { line: 229, column: 2 }, end: { line: 229, column: 47 } },
                '92': { start: { line: 231, column: 2 }, end: { line: 231, column: 29 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 16, column: 46 }, end: { line: 16, column: 47 } },
                  loc: { start: { line: 16, column: 60 }, end: { line: 29, column: 1 } },
                  line: 16
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 31, column: 39 }, end: { line: 31, column: 40 } },
                  loc: { start: { line: 31, column: 53 }, end: { line: 57, column: 1 } },
                  line: 31
                },
                '2': {
                  name: 'freeBuffers',
                  decl: { start: { line: 45, column: 11 }, end: { line: 45, column: 22 } },
                  loc: { start: { line: 45, column: 29 }, end: { line: 52, column: 3 } },
                  line: 45
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: { start: { line: 66, column: 40 }, end: { line: 66, column: 41 } },
                  loc: { start: { line: 66, column: 61 }, end: { line: 108, column: 1 } },
                  line: 66
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: { start: { line: 82, column: 52 }, end: { line: 82, column: 53 } },
                  loc: { start: { line: 82, column: 57 }, end: { line: 82, column: 66 } },
                  line: 82
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 116, column: 38 },
                    end: { line: 116, column: 39 }
                  },
                  loc: { start: { line: 116, column: 52 }, end: { line: 146, column: 1 } },
                  line: 116
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 163, column: 44 },
                    end: { line: 163, column: 45 }
                  },
                  loc: { start: { line: 168, column: 2 }, end: { line: 176, column: 1 } },
                  line: 168
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 178, column: 38 },
                    end: { line: 178, column: 39 }
                  },
                  loc: { start: { line: 178, column: 62 }, end: { line: 185, column: 1 } },
                  line: 178
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 187, column: 40 },
                    end: { line: 187, column: 41 }
                  },
                  loc: { start: { line: 187, column: 64 }, end: { line: 212, column: 1 } },
                  line: 187
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 214, column: 38 },
                    end: { line: 214, column: 39 }
                  },
                  loc: { start: { line: 214, column: 71 }, end: { line: 232, column: 1 } },
                  line: 214
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 21, column: 2 }, end: { line: 25, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 21, column: 2 }, end: { line: 25, column: 3 } },
                    { start: { line: 21, column: 2 }, end: { line: 25, column: 3 } }
                  ],
                  line: 21
                },
                '1': {
                  loc: { start: { line: 33, column: 2 }, end: { line: 35, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 33, column: 2 }, end: { line: 35, column: 3 } },
                    { start: { line: 33, column: 2 }, end: { line: 35, column: 3 } }
                  ],
                  line: 33
                },
                '2': {
                  loc: { start: { line: 41, column: 2 }, end: { line: 43, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 41, column: 2 }, end: { line: 43, column: 3 } },
                    { start: { line: 41, column: 2 }, end: { line: 43, column: 3 } }
                  ],
                  line: 41
                },
                '3': {
                  loc: { start: { line: 47, column: 6 }, end: { line: 50, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 47, column: 6 }, end: { line: 50, column: 7 } },
                    { start: { line: 47, column: 6 }, end: { line: 50, column: 7 } }
                  ],
                  line: 47
                },
                '4': {
                  loc: { start: { line: 74, column: 2 }, end: { line: 103, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 74, column: 2 }, end: { line: 103, column: 3 } },
                    { start: { line: 74, column: 2 }, end: { line: 103, column: 3 } }
                  ],
                  line: 74
                },
                '5': {
                  loc: { start: { line: 76, column: 4 }, end: { line: 76, column: 76 } },
                  type: 'if',
                  locations: [
                    { start: { line: 76, column: 4 }, end: { line: 76, column: 76 } },
                    { start: { line: 76, column: 4 }, end: { line: 76, column: 76 } }
                  ],
                  line: 76
                },
                '6': {
                  loc: { start: { line: 83, column: 15 }, end: { line: 83, column: 72 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 83, column: 47 }, end: { line: 83, column: 58 } },
                    { start: { line: 83, column: 61 }, end: { line: 83, column: 72 } }
                  ],
                  line: 83
                },
                '7': {
                  loc: { start: { line: 89, column: 30 }, end: { line: 91, column: 25 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 90, column: 8 }, end: { line: 90, column: 23 } },
                    { start: { line: 91, column: 8 }, end: { line: 91, column: 25 } }
                  ],
                  line: 89
                },
                '8': {
                  loc: { start: { line: 97, column: 4 }, end: { line: 100, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 97, column: 4 }, end: { line: 100, column: 5 } },
                    { start: { line: 97, column: 4 }, end: { line: 100, column: 5 } }
                  ],
                  line: 97
                },
                '9': {
                  loc: { start: { line: 102, column: 26 }, end: { line: 102, column: 68 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 102, column: 43 }, end: { line: 102, column: 64 } },
                    { start: { line: 102, column: 67 }, end: { line: 102, column: 68 } }
                  ],
                  line: 102
                },
                '10': {
                  loc: { start: { line: 105, column: 28 }, end: { line: 105, column: 78 } },
                  type: 'cond-expr',
                  locations: [
                    { start: { line: 105, column: 49 }, end: { line: 105, column: 74 } },
                    { start: { line: 105, column: 77 }, end: { line: 105, column: 78 } }
                  ],
                  line: 105
                },
                '11': {
                  loc: { start: { line: 120, column: 2 }, end: { line: 129, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 120, column: 2 }, end: { line: 129, column: 3 } },
                    { start: { line: 120, column: 2 }, end: { line: 129, column: 3 } }
                  ],
                  line: 120
                },
                '12': {
                  loc: { start: { line: 120, column: 6 }, end: { line: 120, column: 52 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 120, column: 6 }, end: { line: 120, column: 20 } },
                    { start: { line: 120, column: 24 }, end: { line: 120, column: 52 } }
                  ],
                  line: 120
                },
                '13': {
                  loc: { start: { line: 131, column: 2 }, end: { line: 144, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 131, column: 2 }, end: { line: 144, column: 3 } },
                    { start: { line: 131, column: 2 }, end: { line: 144, column: 3 } }
                  ],
                  line: 131
                },
                '14': {
                  loc: { start: { line: 137, column: 4 }, end: { line: 140, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 137, column: 4 }, end: { line: 140, column: 5 } },
                    { start: { line: 137, column: 4 }, end: { line: 140, column: 5 } }
                  ],
                  line: 137
                },
                '15': {
                  loc: { start: { line: 191, column: 2 }, end: { line: 211, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 191, column: 2 }, end: { line: 211, column: 3 } },
                    { start: { line: 191, column: 2 }, end: { line: 211, column: 3 } }
                  ],
                  line: 191
                },
                '16': {
                  loc: { start: { line: 194, column: 4 }, end: { line: 200, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 194, column: 4 }, end: { line: 200, column: 5 } },
                    { start: { line: 194, column: 4 }, end: { line: 200, column: 5 } }
                  ],
                  line: 194
                },
                '17': {
                  loc: { start: { line: 195, column: 6 }, end: { line: 199, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 195, column: 6 }, end: { line: 199, column: 7 } },
                    { start: { line: 195, column: 6 }, end: { line: 199, column: 7 } }
                  ],
                  line: 195
                },
                '18': {
                  loc: { start: { line: 210, column: 18 }, end: { line: 210, column: 42 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 210, column: 18 }, end: { line: 210, column: 26 } },
                    { start: { line: 210, column: 30 }, end: { line: 210, column: 42 } }
                  ],
                  line: 210
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: 'f2f1a2694435c1e778c60f00d19cf7e2dc8a6973'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.symbol');
          _dereq_('core-js/modules/es.symbol.description');
          _dereq_('core-js/modules/es.symbol.iterator');
          _dereq_('core-js/modules/es.array.fill');
          _dereq_('core-js/modules/es.array.iterator');
          _dereq_('core-js/modules/es.array.some');
          _dereq_('core-js/modules/es.object.keys');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.string.iterator');
          _dereq_('core-js/modules/es.typed-array.float32-array');
          _dereq_('core-js/modules/es.typed-array.uint16-array');
          _dereq_('core-js/modules/es.typed-array.uint32-array');
          _dereq_('core-js/modules/es.typed-array.copy-within');
          _dereq_('core-js/modules/es.typed-array.every');
          _dereq_('core-js/modules/es.typed-array.fill');
          _dereq_('core-js/modules/es.typed-array.filter');
          _dereq_('core-js/modules/es.typed-array.find');
          _dereq_('core-js/modules/es.typed-array.find-index');
          _dereq_('core-js/modules/es.typed-array.for-each');
          _dereq_('core-js/modules/es.typed-array.includes');
          _dereq_('core-js/modules/es.typed-array.index-of');
          _dereq_('core-js/modules/es.typed-array.iterator');
          _dereq_('core-js/modules/es.typed-array.join');
          _dereq_('core-js/modules/es.typed-array.last-index-of');
          _dereq_('core-js/modules/es.typed-array.map');
          _dereq_('core-js/modules/es.typed-array.reduce');
          _dereq_('core-js/modules/es.typed-array.reduce-right');
          _dereq_('core-js/modules/es.typed-array.reverse');
          _dereq_('core-js/modules/es.typed-array.set');
          _dereq_('core-js/modules/es.typed-array.slice');
          _dereq_('core-js/modules/es.typed-array.some');
          _dereq_('core-js/modules/es.typed-array.sort');
          _dereq_('core-js/modules/es.typed-array.subarray');
          _dereq_('core-js/modules/es.typed-array.to-locale-string');
          _dereq_('core-js/modules/es.typed-array.to-string');
          _dereq_('core-js/modules/web.dom-collections.iterator');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          _dereq_('./p5.RendererGL');
          _dereq_('./p5.RenderBuffer');
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }

          var hashCount = (cov_1k5j1g820c.s[0]++, 0);
          /**
           * _initBufferDefaults
           * @private
           * @description initializes buffer defaults. runs each time a new geometry is
           * registered
           * @param  {String} gId  key of the geometry object
           * @returns {Object} a new buffer object
           */ cov_1k5j1g820c.s[1]++;
          _main.default.RendererGL.prototype._initBufferDefaults = function(gId) {
            cov_1k5j1g820c.f[0]++;
            cov_1k5j1g820c.s[2]++;
            this._freeBuffers(gId);

            //@TODO remove this limit on hashes in retainedMode.geometry
            cov_1k5j1g820c.s[3]++;
            hashCount++;
            cov_1k5j1g820c.s[4]++;
            if (hashCount > 1000) {
              cov_1k5j1g820c.b[0][0]++;
              var key = (cov_1k5j1g820c.s[5]++, Object.keys(this.retainedMode.geometry)[0]);
              cov_1k5j1g820c.s[6]++;
              delete this.retainedMode.geometry[key];
              cov_1k5j1g820c.s[7]++;
              hashCount--;
            } else {
              cov_1k5j1g820c.b[0][1]++;
            }

            //create a new entry in our retainedMode.geometry
            cov_1k5j1g820c.s[8]++;
            return (this.retainedMode.geometry[gId] = {});
          };
          cov_1k5j1g820c.s[9]++;

          _main.default.RendererGL.prototype._freeBuffers = function(gId) {
            cov_1k5j1g820c.f[1]++;
            var buffers = (cov_1k5j1g820c.s[10]++, this.retainedMode.geometry[gId]);
            cov_1k5j1g820c.s[11]++;
            if (!buffers) {
              cov_1k5j1g820c.b[1][0]++;
              cov_1k5j1g820c.s[12]++;
              return;
            } else {
              cov_1k5j1g820c.b[1][1]++;
            }
            cov_1k5j1g820c.s[13]++;

            delete this.retainedMode.geometry[gId];
            cov_1k5j1g820c.s[14]++;
            hashCount--;

            var gl = (cov_1k5j1g820c.s[15]++, this.GL);
            cov_1k5j1g820c.s[16]++;
            if (buffers.indexBuffer) {
              cov_1k5j1g820c.b[2][0]++;
              cov_1k5j1g820c.s[17]++;
              gl.deleteBuffer(buffers.indexBuffer);
            } else {
              cov_1k5j1g820c.b[2][1]++;
            }

            function freeBuffers(defs) {
              cov_1k5j1g820c.f[2]++;
              cov_1k5j1g820c.s[18]++;
              var _iteratorNormalCompletion = true;
              var _didIteratorError = false;
              var _iteratorError = undefined;
              try {
                for (
                  var _iterator = defs[Symbol.iterator](), _step;
                  !(_iteratorNormalCompletion = (_step = _iterator.next()).done);
                  _iteratorNormalCompletion = true
                ) {
                  var def = _step.value;
                  cov_1k5j1g820c.s[19]++;
                  if (buffers[def.dst]) {
                    cov_1k5j1g820c.b[3][0]++;
                    cov_1k5j1g820c.s[20]++;
                    gl.deleteBuffer(buffers[def.dst]);
                    cov_1k5j1g820c.s[21]++;
                    buffers[def.dst] = null;
                  } else {
                    cov_1k5j1g820c.b[3][1]++;
                  }
                }
              } catch (err) {
                _didIteratorError = true;
                _iteratorError = err;
              } finally {
                try {
                  if (!_iteratorNormalCompletion && _iterator.return != null) {
                    _iterator.return();
                  }
                } finally {
                  if (_didIteratorError) {
                    throw _iteratorError;
                  }
                }
              }
            }

            // free all the buffers
            cov_1k5j1g820c.s[22]++;
            freeBuffers(this.retainedMode.buffers.stroke);
            cov_1k5j1g820c.s[23]++;
            freeBuffers(this.retainedMode.buffers.fill);
          };

          /**
           * creates a buffers object that holds the WebGL render buffers
           * for a geometry.
           * @private
           * @param  {String} gId    key of the geometry object
           * @param  {p5.Geometry}  model contains geometry data
           */ cov_1k5j1g820c.s[24]++;
          _main.default.RendererGL.prototype.createBuffers = function(gId, model) {
            cov_1k5j1g820c.f[3]++;
            var gl = (cov_1k5j1g820c.s[25]++, this.GL);
            //initialize the gl buffers for our geom groups
            var buffers = (cov_1k5j1g820c.s[26]++, this._initBufferDefaults(gId));
            cov_1k5j1g820c.s[27]++;
            buffers.model = model;

            var indexBuffer = (cov_1k5j1g820c.s[28]++, buffers.indexBuffer);
            cov_1k5j1g820c.s[29]++;

            if (model.faces.length) {
              cov_1k5j1g820c.b[4][0]++;
              cov_1k5j1g820c.s[30]++;
              // allocate space for faces
              if (!indexBuffer) {
                cov_1k5j1g820c.b[5][0]++;
                cov_1k5j1g820c.s[31]++;
                indexBuffer = buffers.indexBuffer = gl.createBuffer();
              } else {
                cov_1k5j1g820c.b[5][1]++;
              }
              var vals = (cov_1k5j1g820c.s[32]++,
              _main.default.RendererGL.prototype._flatten(model.faces));

              // If any face references a vertex with an index greater than the maximum
              // un-singed 16 bit integer, then we need to use a Uint32Array instead of a
              // Uint32Array
              var hasVertexIndicesOverMaxUInt16 = (cov_1k5j1g820c.s[33]++,
              vals.some(function(v) {
                cov_1k5j1g820c.f[4]++;
                cov_1k5j1g820c.s[34]++;
                return v > 65535;
              }));
              var type = (cov_1k5j1g820c.s[35]++,
              hasVertexIndicesOverMaxUInt16
                ? (cov_1k5j1g820c.b[6][0]++, Uint32Array)
                : (cov_1k5j1g820c.b[6][1]++, Uint16Array));
              cov_1k5j1g820c.s[36]++;
              this._bindBuffer(indexBuffer, gl.ELEMENT_ARRAY_BUFFER, vals, type);

              // If we're using a Uint32Array for our indexBuffer we will need to pass a
              // different enum value to WebGL draw triangles. This happens in
              // the _drawElements function.
              cov_1k5j1g820c.s[37]++;
              buffers.indexBufferType = hasVertexIndicesOverMaxUInt16
                ? (cov_1k5j1g820c.b[7][0]++, gl.UNSIGNED_INT)
                : (cov_1k5j1g820c.b[7][1]++, gl.UNSIGNED_SHORT);

              // the vertex count is based on the number of faces
              cov_1k5j1g820c.s[38]++;
              buffers.vertexCount = model.faces.length * 3;
            } else {
              cov_1k5j1g820c.b[4][1]++;
              cov_1k5j1g820c.s[39]++;
              // the index buffer is unused, remove it
              if (indexBuffer) {
                cov_1k5j1g820c.b[8][0]++;
                cov_1k5j1g820c.s[40]++;
                gl.deleteBuffer(indexBuffer);
                cov_1k5j1g820c.s[41]++;
                buffers.indexBuffer = null;
              } else {
                cov_1k5j1g820c.b[8][1]++;
              }
              // the vertex count comes directly from the model
              cov_1k5j1g820c.s[42]++;
              buffers.vertexCount = model.vertices
                ? (cov_1k5j1g820c.b[9][0]++, model.vertices.length)
                : (cov_1k5j1g820c.b[9][1]++, 0);
            }
            cov_1k5j1g820c.s[43]++;

            buffers.lineVertexCount = model.lineVertices
              ? (cov_1k5j1g820c.b[10][0]++, model.lineVertices.length)
              : (cov_1k5j1g820c.b[10][1]++, 0);
            cov_1k5j1g820c.s[44]++;

            return buffers;
          };

          /**
           * Draws buffers given a geometry key ID
           * @private
           * @param  {String} gId     ID in our geom hash
           * @chainable
           */ cov_1k5j1g820c.s[45]++;
          _main.default.RendererGL.prototype.drawBuffers = function(gId) {
            cov_1k5j1g820c.f[5]++;
            var gl = (cov_1k5j1g820c.s[46]++, this.GL);
            var geometry = (cov_1k5j1g820c.s[47]++, this.retainedMode.geometry[gId]);
            cov_1k5j1g820c.s[48]++;

            if (
              (cov_1k5j1g820c.b[12][0]++, this._doStroke) &&
              (cov_1k5j1g820c.b[12][1]++, geometry.lineVertexCount > 0)
            ) {
              cov_1k5j1g820c.b[11][0]++;
              var strokeShader = (cov_1k5j1g820c.s[49]++, this._getRetainedStrokeShader());
              cov_1k5j1g820c.s[50]++;
              this._setStrokeUniforms(strokeShader);
              cov_1k5j1g820c.s[51]++;
              var _iteratorNormalCompletion2 = true;
              var _didIteratorError2 = false;
              var _iteratorError2 = undefined;
              try {
                for (
                  var _iterator2 = this.retainedMode.buffers.stroke[Symbol.iterator](),
                    _step2;
                  !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done);
                  _iteratorNormalCompletion2 = true
                ) {
                  var buff = _step2.value;
                  cov_1k5j1g820c.s[52]++;
                  buff._prepareBuffer(geometry, strokeShader);
                }
              } catch (err) {
                _didIteratorError2 = true;
                _iteratorError2 = err;
              } finally {
                try {
                  if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
                    _iterator2.return();
                  }
                } finally {
                  if (_didIteratorError2) {
                    throw _iteratorError2;
                  }
                }
              }
              cov_1k5j1g820c.s[53]++;
              this._applyColorBlend(this.curStrokeColor);
              cov_1k5j1g820c.s[54]++;
              this._drawArrays(gl.TRIANGLES, gId);
              cov_1k5j1g820c.s[55]++;
              strokeShader.unbindShader();
            } else {
              cov_1k5j1g820c.b[11][1]++;
            }
            cov_1k5j1g820c.s[56]++;

            if (this._doFill) {
              cov_1k5j1g820c.b[13][0]++;
              var fillShader = (cov_1k5j1g820c.s[57]++, this._getRetainedFillShader());
              cov_1k5j1g820c.s[58]++;
              this._setFillUniforms(fillShader);
              cov_1k5j1g820c.s[59]++;
              var _iteratorNormalCompletion3 = true;
              var _didIteratorError3 = false;
              var _iteratorError3 = undefined;
              try {
                for (
                  var _iterator3 = this.retainedMode.buffers.fill[Symbol.iterator](),
                    _step3;
                  !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done);
                  _iteratorNormalCompletion3 = true
                ) {
                  var _buff = _step3.value;
                  cov_1k5j1g820c.s[60]++;
                  _buff._prepareBuffer(geometry, fillShader);
                }
              } catch (err) {
                _didIteratorError3 = true;
                _iteratorError3 = err;
              } finally {
                try {
                  if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
                    _iterator3.return();
                  }
                } finally {
                  if (_didIteratorError3) {
                    throw _iteratorError3;
                  }
                }
              }
              cov_1k5j1g820c.s[61]++;
              if (geometry.indexBuffer) {
                cov_1k5j1g820c.b[14][0]++;
                cov_1k5j1g820c.s[62]++;
                //vertex index buffer
                this._bindBuffer(geometry.indexBuffer, gl.ELEMENT_ARRAY_BUFFER);
              } else {
                cov_1k5j1g820c.b[14][1]++;
              }
              cov_1k5j1g820c.s[63]++;
              this._applyColorBlend(this.curFillColor);
              cov_1k5j1g820c.s[64]++;
              this._drawElements(gl.TRIANGLES, gId);
              cov_1k5j1g820c.s[65]++;
              fillShader.unbindShader();
            } else {
              cov_1k5j1g820c.b[13][1]++;
            }
            cov_1k5j1g820c.s[66]++;
            return this;
          };

          /**
           * Calls drawBuffers() with a scaled model/view matrix.
           *
           * This is used by various 3d primitive methods (in primitives.js, eg. plane,
           * box, torus, etc...) to allow caching of un-scaled geometries. Those
           * geometries are generally created with unit-length dimensions, cached as
           * such, and then scaled appropriately in this method prior to rendering.
           *
           * @private
           * @method drawBuffersScaled
           * @param {String} gId     ID in our geom hash
           * @param {Number} scaleX  the amount to scale in the X direction
           * @param {Number} scaleY  the amount to scale in the Y direction
           * @param {Number} scaleZ  the amount to scale in the Z direction
           */ cov_1k5j1g820c.s[67]++;
          _main.default.RendererGL.prototype.drawBuffersScaled = function(
            gId,
            scaleX,
            scaleY,
            scaleZ
          ) {
            cov_1k5j1g820c.f[6]++;
            var uMVMatrix = (cov_1k5j1g820c.s[68]++, this.uMVMatrix.copy());
            cov_1k5j1g820c.s[69]++;
            try {
              cov_1k5j1g820c.s[70]++;
              this.uMVMatrix.scale(scaleX, scaleY, scaleZ);
              cov_1k5j1g820c.s[71]++;
              this.drawBuffers(gId);
            } finally {
              cov_1k5j1g820c.s[72]++;
              this.uMVMatrix = uMVMatrix;
            }
          };
          cov_1k5j1g820c.s[73]++;

          _main.default.RendererGL.prototype._drawArrays = function(drawMode, gId) {
            cov_1k5j1g820c.f[7]++;
            cov_1k5j1g820c.s[74]++;
            this.GL.drawArrays(
              drawMode,
              0,
              this.retainedMode.geometry[gId].lineVertexCount
            );
            cov_1k5j1g820c.s[75]++;

            return this;
          };
          cov_1k5j1g820c.s[76]++;

          _main.default.RendererGL.prototype._drawElements = function(drawMode, gId) {
            cov_1k5j1g820c.f[8]++;
            var buffers = (cov_1k5j1g820c.s[77]++, this.retainedMode.geometry[gId]);
            var gl = (cov_1k5j1g820c.s[78]++, this.GL);
            // render the fill
            cov_1k5j1g820c.s[79]++;
            if (buffers.indexBuffer) {
              cov_1k5j1g820c.b[15][0]++;
              cov_1k5j1g820c.s[80]++;
              // If this model is using a Uint32Array we need to ensure the
              // OES_element_index_uint WebGL extension is enabled.
              if (buffers.indexBufferType === gl.UNSIGNED_INT) {
                cov_1k5j1g820c.b[16][0]++;
                cov_1k5j1g820c.s[81]++;
                if (!gl.getExtension('OES_element_index_uint')) {
                  cov_1k5j1g820c.b[17][0]++;
                  cov_1k5j1g820c.s[82]++;
                  throw new Error(
                    'Unable to render a 3d model with > 65535 triangles. Your web browser does not support the WebGL Extension OES_element_index_uint.'
                  );
                } else {
                  cov_1k5j1g820c.b[17][1]++;
                }
              } else {
                cov_1k5j1g820c.b[16][1]++;
              }
              // we're drawing faces
              cov_1k5j1g820c.s[83]++;
              gl.drawElements(
                gl.TRIANGLES,
                buffers.vertexCount,
                buffers.indexBufferType,
                0
              );
            } else {
              cov_1k5j1g820c.b[15][1]++;
              cov_1k5j1g820c.s[84]++;
              // drawing vertices
              gl.drawArrays(
                (cov_1k5j1g820c.b[18][0]++, drawMode) ||
                  (cov_1k5j1g820c.b[18][1]++, gl.TRIANGLES),
                0,
                buffers.vertexCount
              );
            }
          };
          cov_1k5j1g820c.s[85]++;

          _main.default.RendererGL.prototype._drawPoints = function(
            vertices,
            vertexBuffer
          ) {
            cov_1k5j1g820c.f[9]++;
            var gl = (cov_1k5j1g820c.s[86]++, this.GL);
            var pointShader = (cov_1k5j1g820c.s[87]++, this._getImmediatePointShader());
            cov_1k5j1g820c.s[88]++;
            this._setPointUniforms(pointShader);
            cov_1k5j1g820c.s[89]++;

            this._bindBuffer(
              vertexBuffer,
              gl.ARRAY_BUFFER,
              this._vToNArray(vertices),
              Float32Array,
              gl.STATIC_DRAW
            );
            cov_1k5j1g820c.s[90]++;

            pointShader.enableAttrib(pointShader.attributes.aPosition, 3);
            cov_1k5j1g820c.s[91]++;

            gl.drawArrays(gl.Points, 0, vertices.length);
            cov_1k5j1g820c.s[92]++;

            pointShader.unbindShader();
          };
          var _default = _main.default.RendererGL;
          exports.default = _default;
        },
        {
          '../core/main': 283,
          './p5.RenderBuffer': 334,
          './p5.RendererGL': 337,
          'core-js/modules/es.array.fill': 168,
          'core-js/modules/es.array.iterator': 174,
          'core-js/modules/es.array.some': 179,
          'core-js/modules/es.object.keys': 191,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.string.iterator': 201,
          'core-js/modules/es.symbol': 211,
          'core-js/modules/es.symbol.description': 209,
          'core-js/modules/es.symbol.iterator': 210,
          'core-js/modules/es.typed-array.copy-within': 212,
          'core-js/modules/es.typed-array.every': 213,
          'core-js/modules/es.typed-array.fill': 214,
          'core-js/modules/es.typed-array.filter': 215,
          'core-js/modules/es.typed-array.find': 217,
          'core-js/modules/es.typed-array.find-index': 216,
          'core-js/modules/es.typed-array.float32-array': 218,
          'core-js/modules/es.typed-array.for-each': 220,
          'core-js/modules/es.typed-array.includes': 221,
          'core-js/modules/es.typed-array.index-of': 222,
          'core-js/modules/es.typed-array.iterator': 225,
          'core-js/modules/es.typed-array.join': 226,
          'core-js/modules/es.typed-array.last-index-of': 227,
          'core-js/modules/es.typed-array.map': 228,
          'core-js/modules/es.typed-array.reduce': 230,
          'core-js/modules/es.typed-array.reduce-right': 229,
          'core-js/modules/es.typed-array.reverse': 231,
          'core-js/modules/es.typed-array.set': 232,
          'core-js/modules/es.typed-array.slice': 233,
          'core-js/modules/es.typed-array.some': 234,
          'core-js/modules/es.typed-array.sort': 235,
          'core-js/modules/es.typed-array.subarray': 236,
          'core-js/modules/es.typed-array.to-locale-string': 237,
          'core-js/modules/es.typed-array.to-string': 238,
          'core-js/modules/es.typed-array.uint16-array': 239,
          'core-js/modules/es.typed-array.uint32-array': 240,
          'core-js/modules/web.dom-collections.iterator': 244
        }
      ],
      337: [
        function(_dereq_, module, exports) {
          'use strict';
          function _typeof(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof = function _typeof(obj) {
                return typeof obj;
              };
            } else {
              _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof(obj);
          }
          var cov_1exsq9czgt = (function() {
            var path = '/Users/outofambit/src/p5.js/src/webgl/p5.RendererGL.js';
            var hash = 'bd2f690d67c2aa4734a515c7619d8816ef7b7e80';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/webgl/p5.RendererGL.js',
              statementMap: {
                '0': { start: { line: 11, column: 23 }, end: { line: 14, column: 1 } },
                '1': { start: { line: 16, column: 23 }, end: { line: 49, column: 1 } },
                '2': { start: { line: 60, column: 0 }, end: { line: 226, column: 2 } },
                '3': { start: { line: 61, column: 2 }, end: { line: 61, column: 51 } },
                '4': { start: { line: 62, column: 2 }, end: { line: 62, column: 36 } },
                '5': { start: { line: 63, column: 2 }, end: { line: 63, column: 22 } },
                '6': { start: { line: 64, column: 2 }, end: { line: 64, column: 20 } },
                '7': { start: { line: 68, column: 2 }, end: { line: 68, column: 32 } },
                '8': { start: { line: 69, column: 2 }, end: { line: 69, column: 66 } },
                '9': { start: { line: 72, column: 2 }, end: { line: 72, column: 26 } },
                '10': { start: { line: 75, column: 2 }, end: { line: 75, column: 31 } },
                '11': { start: { line: 77, column: 2 }, end: { line: 77, column: 31 } },
                '12': { start: { line: 78, column: 2 }, end: { line: 78, column: 34 } },
                '13': { start: { line: 80, column: 2 }, end: { line: 80, column: 39 } },
                '14': { start: { line: 81, column: 2 }, end: { line: 81, column: 42 } },
                '15': { start: { line: 82, column: 2 }, end: { line: 82, column: 43 } },
                '16': { start: { line: 84, column: 2 }, end: { line: 84, column: 32 } },
                '17': { start: { line: 85, column: 2 }, end: { line: 85, column: 36 } },
                '18': { start: { line: 86, column: 2 }, end: { line: 86, column: 37 } },
                '19': { start: { line: 88, column: 2 }, end: { line: 88, column: 31 } },
                '20': { start: { line: 89, column: 2 }, end: { line: 89, column: 32 } },
                '21': { start: { line: 90, column: 2 }, end: { line: 90, column: 35 } },
                '22': { start: { line: 91, column: 2 }, end: { line: 91, column: 36 } },
                '23': { start: { line: 92, column: 2 }, end: { line: 92, column: 27 } },
                '24': { start: { line: 93, column: 2 }, end: { line: 93, column: 26 } },
                '25': { start: { line: 95, column: 2 }, end: { line: 95, column: 33 } },
                '26': { start: { line: 97, column: 2 }, end: { line: 97, column: 59 } },
                '27': { start: { line: 98, column: 2 }, end: { line: 98, column: 63 } },
                '28': { start: { line: 100, column: 2 }, end: { line: 100, column: 38 } },
                '29': { start: { line: 101, column: 2 }, end: { line: 101, column: 36 } },
                '30': { start: { line: 102, column: 2 }, end: { line: 102, column: 59 } },
                '31': { start: { line: 103, column: 2 }, end: { line: 103, column: 27 } },
                '32': { start: { line: 105, column: 2 }, end: { line: 105, column: 36 } },
                '33': { start: { line: 106, column: 2 }, end: { line: 106, column: 36 } },
                '34': { start: { line: 107, column: 2 }, end: { line: 107, column: 34 } },
                '35': { start: { line: 108, column: 2 }, end: { line: 108, column: 25 } },
                '36': { start: { line: 110, column: 2 }, end: { line: 110, column: 36 } },
                '37': { start: { line: 113, column: 2 }, end: { line: 113, column: 31 } },
                '38': { start: { line: 114, column: 2 }, end: { line: 114, column: 29 } },
                '39': { start: { line: 115, column: 2 }, end: { line: 115, column: 32 } },
                '40': { start: { line: 121, column: 2 }, end: { line: 121, column: 35 } },
                '41': { start: { line: 122, column: 2 }, end: { line: 122, column: 34 } },
                '42': { start: { line: 123, column: 2 }, end: { line: 123, column: 40 } },
                '43': { start: { line: 126, column: 2 }, end: { line: 126, column: 47 } },
                '44': { start: { line: 129, column: 2 }, end: { line: 129, column: 40 } },
                '45': { start: { line: 130, column: 2 }, end: { line: 130, column: 50 } },
                '46': { start: { line: 131, column: 2 }, end: { line: 131, column: 38 } },
                '47': { start: { line: 133, column: 2 }, end: { line: 133, column: 39 } },
                '48': { start: { line: 134, column: 2 }, end: { line: 134, column: 47 } },
                '49': { start: { line: 135, column: 2 }, end: { line: 135, column: 40 } },
                '50': { start: { line: 136, column: 2 }, end: { line: 136, column: 39 } },
                '51': { start: { line: 137, column: 2 }, end: { line: 137, column: 39 } },
                '52': { start: { line: 139, column: 2 }, end: { line: 139, column: 34 } },
                '53': { start: { line: 140, column: 2 }, end: { line: 140, column: 36 } },
                '54': { start: { line: 141, column: 2 }, end: { line: 141, column: 35 } },
                '55': { start: { line: 145, column: 2 }, end: { line: 168, column: 4 } },
                '56': { start: { line: 172, column: 2 }, end: { line: 194, column: 4 } },
                '57': { start: { line: 196, column: 2 }, end: { line: 196, column: 23 } },
                '58': { start: { line: 197, column: 2 }, end: { line: 197, column: 27 } },
                '59': { start: { line: 200, column: 2 }, end: { line: 200, column: 21 } },
                '60': { start: { line: 202, column: 2 }, end: { line: 202, column: 37 } },
                '61': { start: { line: 204, column: 2 }, end: { line: 204, column: 38 } },
                '62': { start: { line: 205, column: 2 }, end: { line: 205, column: 38 } },
                '63': { start: { line: 206, column: 2 }, end: { line: 206, column: 19 } },
                '64': { start: { line: 207, column: 2 }, end: { line: 207, column: 27 } },
                '65': { start: { line: 210, column: 2 }, end: { line: 210, column: 31 } },
                '66': { start: { line: 212, column: 2 }, end: { line: 212, column: 34 } },
                '67': { start: { line: 215, column: 2 }, end: { line: 215, column: 28 } },
                '68': { start: { line: 217, column: 2 }, end: { line: 217, column: 31 } },
                '69': { start: { line: 219, column: 2 }, end: { line: 219, column: 34 } },
                '70': { start: { line: 221, column: 2 }, end: { line: 221, column: 22 } },
                '71': { start: { line: 223, column: 2 }, end: { line: 223, column: 30 } },
                '72': { start: { line: 225, column: 2 }, end: { line: 225, column: 14 } },
                '73': { start: { line: 228, column: 0 }, end: { line: 228, column: 63 } },
                '74': { start: { line: 234, column: 0 }, end: { line: 252, column: 2 } },
                '75': { start: { line: 236, column: 18 }, end: { line: 236, column: 70 } },
                '76': { start: { line: 237, column: 19 }, end: { line: 245, column: 3 } },
                '77': { start: { line: 246, column: 2 }, end: { line: 250, column: 3 } },
                '78': { start: { line: 247, column: 4 }, end: { line: 247, column: 35 } },
                '79': { start: { line: 249, column: 4 }, end: { line: 249, column: 71 } },
                '80': { start: { line: 251, column: 2 }, end: { line: 251, column: 9 } },
                '81': { start: { line: 254, column: 0 }, end: { line: 273, column: 2 } },
                '82': { start: { line: 255, column: 2 }, end: { line: 272, column: 3 } },
                '83': { start: { line: 256, column: 4 }, end: { line: 258, column: 78 } },
                '84': { start: { line: 259, column: 4 }, end: { line: 269, column: 5 } },
                '85': { start: { line: 260, column: 6 }, end: { line: 260, column: 54 } },
                '86': { start: { line: 262, column: 17 }, end: { line: 262, column: 36 } },
                '87': { start: { line: 263, column: 6 }, end: { line: 263, column: 31 } },
                '88': { start: { line: 264, column: 6 }, end: { line: 264, column: 30 } },
                '89': { start: { line: 265, column: 6 }, end: { line: 265, column: 71 } },
                '90': { start: { line: 266, column: 6 }, end: { line: 268, column: 8 } },
                '91': { start: { line: 271, column: 4 }, end: { line: 271, column: 13 } },
                '92': { start: { line: 278, column: 0 }, end: { line: 328, column: 2 } },
                '93': { start: { line: 279, column: 12 }, end: { line: 279, column: 22 } },
                '94': { start: { line: 280, column: 12 }, end: { line: 280, column: 23 } },
                '95': { start: { line: 281, column: 20 }, end: { line: 281, column: 34 } },
                '96': { start: { line: 282, column: 22 }, end: { line: 282, column: 56 } },
                '97': { start: { line: 284, column: 2 }, end: { line: 306, column: 3 } },
                '98': { start: { line: 285, column: 15 }, end: { line: 285, column: 26 } },
                '99': { start: { line: 286, column: 4 }, end: { line: 286, column: 48 } },
                '100': { start: { line: 287, column: 4 }, end: { line: 287, column: 49 } },
                '101': { start: { line: 288, column: 17 }, end: { line: 288, column: 53 } },
                '102': { start: { line: 289, column: 4 }, end: { line: 289, column: 32 } },
                '103': { start: { line: 290, column: 4 }, end: { line: 290, column: 46 } },
                '104': { start: { line: 291, column: 4 }, end: { line: 291, column: 17 } },
                '105': { start: { line: 292, column: 4 }, end: { line: 292, column: 18 } },
                '106': { start: { line: 294, column: 12 }, end: { line: 294, column: 23 } },
                '107': { start: { line: 295, column: 4 }, end: { line: 297, column: 5 } },
                '108': { start: { line: 296, column: 6 }, end: { line: 296, column: 34 } },
                '109': { start: { line: 298, column: 4 }, end: { line: 298, column: 41 } },
                '110': { start: { line: 299, column: 4 }, end: { line: 299, column: 21 } },
                '111': { start: { line: 300, column: 4 }, end: { line: 304, column: 5 } },
                '112': { start: { line: 301, column: 6 }, end: { line: 301, column: 43 } },
                '113': { start: { line: 303, column: 6 }, end: { line: 303, column: 35 } },
                '114': { start: { line: 305, column: 4 }, end: { line: 305, column: 27 } },
                '115': { start: { line: 308, column: 19 }, end: { line: 312, column: 3 } },
                '116': { start: { line: 313, column: 2 }, end: { line: 313, column: 50 } },
                '117': { start: { line: 314, column: 2 }, end: { line: 314, column: 24 } },
                '118': { start: { line: 315, column: 2 }, end: { line: 315, column: 28 } },
                '119': { start: { line: 317, column: 2 }, end: { line: 319, column: 3 } },
                '120': { start: { line: 318, column: 4 }, end: { line: 318, column: 41 } },
                '121': { start: { line: 321, column: 2 }, end: { line: 327, column: 3 } },
                '122': { start: { line: 324, column: 4 }, end: { line: 326, column: 10 } },
                '123': { start: { line: 325, column: 6 }, end: { line: 325, column: 48 } },
                '124': { start: { line: 479, column: 0 }, end: { line: 529, column: 2 } },
                '125': { start: { line: 480, column: 2 }, end: { line: 486, column: 3 } },
                '126': { start: { line: 481, column: 4 }, end: { line: 484, column: 6 } },
                '127': { start: { line: 485, column: 4 }, end: { line: 485, column: 11 } },
                '128': { start: { line: 487, column: 18 }, end: { line: 487, column: 22 } },
                '129': { start: { line: 488, column: 2 }, end: { line: 504, column: 3 } },
                '130': { start: { line: 490, column: 4 }, end: { line: 492, column: 5 } },
                '131': { start: { line: 491, column: 6 }, end: { line: 491, column: 30 } },
                '132': { start: { line: 493, column: 4 }, end: { line: 497, column: 5 } },
                '133': { start: { line: 495, column: 6 }, end: { line: 495, column: 38 } },
                '134': { start: { line: 496, column: 6 }, end: { line: 496, column: 24 } },
                '135': { start: { line: 499, column: 9 }, end: { line: 504, column: 3 } },
                '136': { start: { line: 500, column: 4 }, end: { line: 503, column: 5 } },
                '137': { start: { line: 501, column: 6 }, end: { line: 501, column: 31 } },
                '138': { start: { line: 502, column: 6 }, end: { line: 502, column: 24 } },
                '139': { start: { line: 506, column: 2 }, end: { line: 508, column: 3 } },
                '140': { start: { line: 507, column: 4 }, end: { line: 507, column: 11 } },
                '141': { start: { line: 510, column: 2 }, end: { line: 520, column: 3 } },
                '142': { start: { line: 511, column: 4 }, end: { line: 519, column: 5 } },
                '143': { start: { line: 512, column: 6 }, end: { line: 518, column: 7 } },
                '144': { start: { line: 513, column: 8 }, end: { line: 516, column: 10 } },
                '145': { start: { line: 517, column: 8 }, end: { line: 517, column: 15 } },
                '146': { start: { line: 522, column: 2 }, end: { line: 522, column: 14 } },
                '147': { start: { line: 523, column: 2 }, end: { line: 523, column: 33 } },
                '148': { start: { line: 524, column: 2 }, end: { line: 524, column: 13 } },
                '149': { start: { line: 526, column: 2 }, end: { line: 528, column: 3 } },
                '150': { start: { line: 527, column: 4 }, end: { line: 527, column: 57 } },
                '151': { start: { line: 535, column: 0 }, end: { line: 584, column: 2 } },
                '152': { start: { line: 538, column: 2 }, end: { line: 555, column: 4 } },
                '153': { start: { line: 559, column: 2 }, end: { line: 559, column: 37 } },
                '154': { start: { line: 560, column: 2 }, end: { line: 560, column: 34 } },
                '155': { start: { line: 562, column: 2 }, end: { line: 562, column: 45 } },
                '156': { start: { line: 563, column: 2 }, end: { line: 563, column: 48 } },
                '157': { start: { line: 564, column: 2 }, end: { line: 564, column: 49 } },
                '158': { start: { line: 566, column: 2 }, end: { line: 566, column: 38 } },
                '159': { start: { line: 567, column: 2 }, end: { line: 567, column: 42 } },
                '160': { start: { line: 568, column: 2 }, end: { line: 568, column: 43 } },
                '161': { start: { line: 570, column: 2 }, end: { line: 570, column: 37 } },
                '162': { start: { line: 571, column: 2 }, end: { line: 571, column: 38 } },
                '163': { start: { line: 572, column: 2 }, end: { line: 572, column: 41 } },
                '164': { start: { line: 573, column: 2 }, end: { line: 573, column: 42 } },
                '165': { start: { line: 574, column: 2 }, end: { line: 574, column: 33 } },
                '166': { start: { line: 575, column: 2 }, end: { line: 575, column: 32 } },
                '167': { start: { line: 577, column: 2 }, end: { line: 577, column: 31 } },
                '168': { start: { line: 580, column: 2 }, end: { line: 580, column: 36 } },
                '169': { start: { line: 583, column: 2 }, end: { line: 583, column: 42 } },
                '170': { start: { line: 589, column: 0 }, end: { line: 598, column: 2 } },
                '171': { start: { line: 590, column: 15 }, end: { line: 590, column: 41 } },
                '172': { start: { line: 591, column: 13 }, end: { line: 591, column: 33 } },
                '173': { start: { line: 592, column: 13 }, end: { line: 592, column: 33 } },
                '174': { start: { line: 593, column: 13 }, end: { line: 593, column: 33 } },
                '175': { start: { line: 594, column: 13 }, end: { line: 594, column: 33 } },
                '176': { start: { line: 595, column: 2 }, end: { line: 595, column: 37 } },
                '177': { start: { line: 597, column: 2 }, end: { line: 597, column: 42 } },
                '178': { start: { line: 635, column: 0 }, end: { line: 642, column: 2 } },
                '179': { start: { line: 637, column: 16 }, end: { line: 637, column: 64 } },
                '180': { start: { line: 638, column: 2 }, end: { line: 638, column: 35 } },
                '181': { start: { line: 639, column: 2 }, end: { line: 639, column: 33 } },
                '182': { start: { line: 640, column: 2 }, end: { line: 640, column: 34 } },
                '183': { start: { line: 641, column: 2 }, end: { line: 641, column: 19 } },
                '184': { start: { line: 674, column: 0 }, end: { line: 680, column: 2 } },
                '185': { start: { line: 677, column: 2 }, end: { line: 677, column: 21 } },
                '186': { start: { line: 678, column: 16 }, end: { line: 678, column: 64 } },
                '187': { start: { line: 679, column: 2 }, end: { line: 679, column: 37 } },
                '188': { start: { line: 682, column: 0 }, end: { line: 685, column: 2 } },
                '189': { start: { line: 684, column: 2 }, end: { line: 684, column: 75 } },
                '190': { start: { line: 687, column: 0 }, end: { line: 691, column: 2 } },
                '191': { start: { line: 690, column: 2 }, end: { line: 690, column: 76 } },
                '192': { start: { line: 693, column: 0 }, end: { line: 698, column: 2 } },
                '193': { start: { line: 697, column: 2 }, end: { line: 697, column: 56 } },
                '194': { start: { line: 700, column: 0 }, end: { line: 725, column: 2 } },
                '195': { start: { line: 701, column: 2 }, end: { line: 724, column: 3 } },
                '196': { start: { line: 713, column: 4 }, end: { line: 713, column: 29 } },
                '197': { start: { line: 714, column: 7 }, end: { line: 724, column: 3 } },
                '198': { start: { line: 721, column: 4 }, end: { line: 723, column: 6 } },
                '199': { start: { line: 727, column: 0 }, end: { line: 738, column: 2 } },
                '200': { start: { line: 728, column: 2 }, end: { line: 737, column: 3 } },
                '201': { start: { line: 729, column: 4 }, end: { line: 729, column: 43 } },
                '202': { start: { line: 730, column: 4 }, end: { line: 730, column: 27 } },
                '203': { start: { line: 732, column: 4 }, end: { line: 732, column: 54 } },
                '204': { start: { line: 733, column: 4 }, end: { line: 733, column: 53 } },
                '205': { start: { line: 735, column: 4 }, end: { line: 735, column: 58 } },
                '206': { start: { line: 736, column: 4 }, end: { line: 736, column: 57 } },
                '207': { start: { line: 740, column: 0 }, end: { line: 747, column: 2 } },
                '208': { start: { line: 741, column: 2 }, end: { line: 746, column: 3 } },
                '209': { start: { line: 742, column: 4 }, end: { line: 742, column: 28 } },
                '210': { start: { line: 743, column: 4 }, end: { line: 743, column: 54 } },
                '211': { start: { line: 744, column: 4 }, end: { line: 744, column: 58 } },
                '212': { start: { line: 745, column: 4 }, end: { line: 745, column: 42 } },
                '213': { start: { line: 788, column: 0 }, end: { line: 793, column: 2 } },
                '214': { start: { line: 789, column: 2 }, end: { line: 792, column: 3 } },
                '215': { start: { line: 790, column: 4 }, end: { line: 790, column: 23 } },
                '216': { start: { line: 791, column: 4 }, end: { line: 791, column: 29 } },
                '217': { start: { line: 796, column: 0 }, end: { line: 812, column: 2 } },
                '218': { start: { line: 798, column: 2 }, end: { line: 798, column: 32 } },
                '219': { start: { line: 800, column: 2 }, end: { line: 804, column: 6 } },
                '220': { start: { line: 805, column: 2 }, end: { line: 805, column: 12 } },
                '221': { start: { line: 806, column: 2 }, end: { line: 811, column: 4 } },
                '222': { start: { line: 823, column: 0 }, end: { line: 850, column: 2 } },
                '223': { start: { line: 824, column: 22 }, end: { line: 824, column: 39 } },
                '224': { start: { line: 827, column: 2 }, end: { line: 832, column: 3 } },
                '225': { start: { line: 828, column: 4 }, end: { line: 830, column: 6 } },
                '226': { start: { line: 831, column: 4 }, end: { line: 831, column: 11 } },
                '227': { start: { line: 836, column: 15 }, end: { line: 836, column: 33 } },
                '228': { start: { line: 837, column: 14 }, end: { line: 837, column: 74 } },
                '229': { start: { line: 838, column: 2 }, end: { line: 841, column: 3 } },
                '230': { start: { line: 839, column: 4 }, end: { line: 839, column: 33 } },
                '231': { start: { line: 840, column: 4 }, end: { line: 840, column: 53 } },
                '232': { start: { line: 843, column: 13 }, end: { line: 843, column: 38 } },
                '233': { start: { line: 845, column: 2 }, end: { line: 849, column: 4 } },
                '234': { start: { line: 856, column: 0 }, end: { line: 858, column: 2 } },
                '235': { start: { line: 857, column: 2 }, end: { line: 857, column: 55 } },
                '236': { start: { line: 866, column: 0 }, end: { line: 888, column: 2 } },
                '237': { start: { line: 867, column: 2 }, end: { line: 867, column: 48 } },
                '238': { start: { line: 868, column: 2 }, end: { line: 873, column: 4 } },
                '239': { start: { line: 874, column: 2 }, end: { line: 874, column: 58 } },
                '240': { start: { line: 876, column: 2 }, end: { line: 876, column: 28 } },
                '241': { start: { line: 879, column: 22 }, end: { line: 879, column: 39 } },
                '242': { start: { line: 880, column: 2 }, end: { line: 887, column: 3 } },
                '243': { start: { line: 881, column: 4 }, end: { line: 886, column: 6 } },
                '244': { start: { line: 899, column: 0 }, end: { line: 906, column: 2 } },
                '245': { start: { line: 900, column: 13 }, end: { line: 900, column: 25 } },
                '246': { start: { line: 901, column: 13 }, end: { line: 901, column: 25 } },
                '247': { start: { line: 902, column: 13 }, end: { line: 902, column: 25 } },
                '248': { start: { line: 903, column: 13 }, end: { line: 903, column: 25 } },
                '249': { start: { line: 904, column: 2 }, end: { line: 904, column: 37 } },
                '250': { start: { line: 905, column: 2 }, end: { line: 905, column: 69 } },
                '251': { start: { line: 908, column: 0 }, end: { line: 920, column: 2 } },
                '252': { start: { line: 909, column: 2 }, end: { line: 919, column: 3 } },
                '253': { start: { line: 910, column: 4 }, end: { line: 910, column: 63 } },
                '254': { start: { line: 913, column: 4 }, end: { line: 918, column: 7 } },
                '255': { start: { line: 931, column: 0 }, end: { line: 939, column: 2 } },
                '256': { start: { line: 932, column: 2 }, end: { line: 936, column: 3 } },
                '257': { start: { line: 933, column: 4 }, end: { line: 933, column: 12 } },
                '258': { start: { line: 934, column: 4 }, end: { line: 934, column: 12 } },
                '259': { start: { line: 935, column: 4 }, end: { line: 935, column: 12 } },
                '260': { start: { line: 937, column: 2 }, end: { line: 937, column: 38 } },
                '261': { start: { line: 938, column: 2 }, end: { line: 938, column: 14 } },
                '262': { start: { line: 949, column: 0 }, end: { line: 952, column: 2 } },
                '263': { start: { line: 950, column: 2 }, end: { line: 950, column: 32 } },
                '264': { start: { line: 951, column: 2 }, end: { line: 951, column: 14 } },
                '265': { start: { line: 954, column: 0 }, end: { line: 960, column: 2 } },
                '266': { start: { line: 955, column: 2 }, end: { line: 957, column: 3 } },
                '267': { start: { line: 956, column: 4 }, end: { line: 956, column: 29 } },
                '268': { start: { line: 958, column: 2 }, end: { line: 958, column: 62 } },
                '269': { start: { line: 959, column: 2 }, end: { line: 959, column: 14 } },
                '270': { start: { line: 962, column: 0 }, end: { line: 965, column: 2 } },
                '271': { start: { line: 963, column: 2 }, end: { line: 963, column: 28 } },
                '272': { start: { line: 964, column: 2 }, end: { line: 964, column: 14 } },
                '273': { start: { line: 967, column: 0 }, end: { line: 970, column: 2 } },
                '274': { start: { line: 968, column: 2 }, end: { line: 968, column: 28 } },
                '275': { start: { line: 969, column: 2 }, end: { line: 969, column: 14 } },
                '276': { start: { line: 972, column: 0 }, end: { line: 975, column: 2 } },
                '277': { start: { line: 973, column: 2 }, end: { line: 973, column: 28 } },
                '278': { start: { line: 974, column: 2 }, end: { line: 974, column: 14 } },
                '279': { start: { line: 977, column: 0 }, end: { line: 1035, column: 2 } },
                '280': { start: { line: 979, column: 16 }, end: { line: 979, column: 54 } },
                '281': { start: { line: 982, column: 21 }, end: { line: 982, column: 37 } },
                '282': { start: { line: 984, column: 2 }, end: { line: 984, column: 47 } },
                '283': { start: { line: 985, column: 2 }, end: { line: 985, column: 45 } },
                '284': { start: { line: 986, column: 2 }, end: { line: 986, column: 42 } },
                '285': { start: { line: 990, column: 2 }, end: { line: 990, column: 43 } },
                '286': { start: { line: 992, column: 2 }, end: { line: 992, column: 66 } },
                '287': { start: { line: 993, column: 2 }, end: { line: 993, column: 58 } },
                '288': { start: { line: 995, column: 2 }, end: { line: 995, column: 82 } },
                '289': { start: { line: 996, column: 2 }, end: { line: 996, column: 88 } },
                '290': { start: { line: 997, column: 2 }, end: { line: 997, column: 90 } },
                '291': { start: { line: 999, column: 2 }, end: { line: 999, column: 68 } },
                '292': {
                  start: { line: 1000, column: 2 },
                  end: { line: 1000, column: 76 }
                },
                '293': {
                  start: { line: 1001, column: 2 },
                  end: { line: 1001, column: 78 }
                },
                '294': {
                  start: { line: 1003, column: 2 },
                  end: { line: 1003, column: 66 }
                },
                '295': {
                  start: { line: 1004, column: 2 },
                  end: { line: 1004, column: 68 }
                },
                '296': {
                  start: { line: 1005, column: 2 },
                  end: { line: 1005, column: 74 }
                },
                '297': {
                  start: { line: 1006, column: 2 },
                  end: { line: 1006, column: 76 }
                },
                '298': {
                  start: { line: 1007, column: 2 },
                  end: { line: 1007, column: 58 }
                },
                '299': {
                  start: { line: 1008, column: 2 },
                  end: { line: 1008, column: 56 }
                },
                '300': {
                  start: { line: 1010, column: 2 },
                  end: { line: 1010, column: 50 }
                },
                '301': {
                  start: { line: 1011, column: 2 },
                  end: { line: 1011, column: 54 }
                },
                '302': {
                  start: { line: 1012, column: 2 },
                  end: { line: 1012, column: 52 }
                },
                '303': {
                  start: { line: 1014, column: 2 },
                  end: { line: 1014, column: 40 }
                },
                '304': {
                  start: { line: 1015, column: 2 },
                  end: { line: 1015, column: 52 }
                },
                '305': {
                  start: { line: 1016, column: 2 },
                  end: { line: 1016, column: 50 }
                },
                '306': {
                  start: { line: 1017, column: 2 },
                  end: { line: 1017, column: 46 }
                },
                '307': {
                  start: { line: 1019, column: 2 },
                  end: { line: 1019, column: 62 }
                },
                '308': {
                  start: { line: 1020, column: 2 },
                  end: { line: 1020, column: 62 }
                },
                '309': {
                  start: { line: 1021, column: 2 },
                  end: { line: 1021, column: 48 }
                },
                '310': {
                  start: { line: 1023, column: 2 },
                  end: { line: 1023, column: 60 }
                },
                '311': {
                  start: { line: 1024, column: 2 },
                  end: { line: 1024, column: 56 }
                },
                '312': {
                  start: { line: 1025, column: 2 },
                  end: { line: 1025, column: 62 }
                },
                '313': {
                  start: { line: 1027, column: 2 },
                  end: { line: 1027, column: 52 }
                },
                '314': {
                  start: { line: 1028, column: 2 },
                  end: { line: 1028, column: 58 }
                },
                '315': {
                  start: { line: 1029, column: 2 },
                  end: { line: 1029, column: 30 }
                },
                '316': {
                  start: { line: 1030, column: 2 },
                  end: { line: 1030, column: 38 }
                },
                '317': {
                  start: { line: 1032, column: 2 },
                  end: { line: 1032, column: 50 }
                },
                '318': {
                  start: { line: 1034, column: 2 },
                  end: { line: 1034, column: 15 }
                },
                '319': { start: { line: 1037, column: 0 }, end: { line: 1040, column: 2 } },
                '320': {
                  start: { line: 1038, column: 2 },
                  end: { line: 1038, column: 51 }
                },
                '321': {
                  start: { line: 1039, column: 2 },
                  end: { line: 1039, column: 14 }
                },
                '322': { start: { line: 1052, column: 0 }, end: { line: 1059, column: 2 } },
                '323': {
                  start: { line: 1054, column: 17 },
                  end: { line: 1054, column: 38 }
                },
                '324': { start: { line: 1055, column: 2 }, end: { line: 1057, column: 3 } },
                '325': {
                  start: { line: 1056, column: 4 },
                  end: { line: 1056, column: 33 }
                },
                '326': {
                  start: { line: 1058, column: 2 },
                  end: { line: 1058, column: 16 }
                },
                '327': {
                  start: { line: 1061, column: 0 },
                  end: { line: 1062, column: 52 }
                },
                '328': { start: { line: 1068, column: 0 }, end: { line: 1087, column: 2 } },
                '329': {
                  start: { line: 1069, column: 15 },
                  end: { line: 1069, column: 34 }
                },
                '330': { start: { line: 1070, column: 2 }, end: { line: 1074, column: 3 } },
                '331': { start: { line: 1071, column: 4 }, end: { line: 1073, column: 5 } },
                '332': {
                  start: { line: 1072, column: 6 },
                  end: { line: 1072, column: 37 }
                },
                '333': { start: { line: 1075, column: 2 }, end: { line: 1085, column: 3 } },
                '334': { start: { line: 1076, column: 4 }, end: { line: 1078, column: 5 } },
                '335': {
                  start: { line: 1077, column: 6 },
                  end: { line: 1077, column: 36 }
                },
                '336': { start: { line: 1079, column: 9 }, end: { line: 1085, column: 3 } },
                '337': { start: { line: 1080, column: 4 }, end: { line: 1082, column: 5 } },
                '338': {
                  start: { line: 1081, column: 6 },
                  end: { line: 1081, column: 36 }
                },
                '339': { start: { line: 1083, column: 9 }, end: { line: 1085, column: 3 } },
                '340': {
                  start: { line: 1084, column: 4 },
                  end: { line: 1084, column: 42 }
                },
                '341': {
                  start: { line: 1086, column: 2 },
                  end: { line: 1086, column: 14 }
                },
                '342': { start: { line: 1093, column: 0 }, end: { line: 1111, column: 2 } },
                '343': { start: { line: 1094, column: 2 }, end: { line: 1096, column: 3 } },
                '344': {
                  start: { line: 1095, column: 4 },
                  end: { line: 1095, column: 35 }
                },
                '345': {
                  start: { line: 1098, column: 15 },
                  end: { line: 1098, column: 34 }
                },
                '346': { start: { line: 1099, column: 2 }, end: { line: 1109, column: 3 } },
                '347': { start: { line: 1100, column: 4 }, end: { line: 1102, column: 5 } },
                '348': {
                  start: { line: 1101, column: 6 },
                  end: { line: 1101, column: 36 }
                },
                '349': { start: { line: 1103, column: 9 }, end: { line: 1109, column: 3 } },
                '350': { start: { line: 1104, column: 4 }, end: { line: 1106, column: 5 } },
                '351': {
                  start: { line: 1105, column: 6 },
                  end: { line: 1105, column: 36 }
                },
                '352': { start: { line: 1107, column: 9 }, end: { line: 1109, column: 3 } },
                '353': {
                  start: { line: 1108, column: 4 },
                  end: { line: 1108, column: 34 }
                },
                '354': {
                  start: { line: 1110, column: 2 },
                  end: { line: 1110, column: 14 }
                },
                '355': { start: { line: 1113, column: 0 }, end: { line: 1120, column: 2 } },
                '356': {
                  start: { line: 1115, column: 16 },
                  end: { line: 1115, column: 36 }
                },
                '357': { start: { line: 1116, column: 2 }, end: { line: 1118, column: 3 } },
                '358': {
                  start: { line: 1117, column: 4 },
                  end: { line: 1117, column: 34 }
                },
                '359': {
                  start: { line: 1119, column: 2 },
                  end: { line: 1119, column: 15 }
                },
                '360': {
                  start: { line: 1122, column: 0 },
                  end: { line: 1123, column: 50 }
                },
                '361': { start: { line: 1125, column: 0 }, end: { line: 1143, column: 2 } },
                '362': { start: { line: 1126, column: 2 }, end: { line: 1140, column: 3 } },
                '363': { start: { line: 1127, column: 4 }, end: { line: 1139, column: 5 } },
                '364': { start: { line: 1128, column: 6 }, end: { line: 1132, column: 8 } },
                '365': { start: { line: 1134, column: 6 }, end: { line: 1138, column: 8 } },
                '366': {
                  start: { line: 1142, column: 2 },
                  end: { line: 1142, column: 34 }
                },
                '367': { start: { line: 1145, column: 0 }, end: { line: 1155, column: 2 } },
                '368': { start: { line: 1146, column: 2 }, end: { line: 1152, column: 3 } },
                '369': { start: { line: 1147, column: 4 }, end: { line: 1151, column: 6 } },
                '370': {
                  start: { line: 1154, column: 2 },
                  end: { line: 1154, column: 42 }
                },
                '371': { start: { line: 1157, column: 0 }, end: { line: 1167, column: 2 } },
                '372': { start: { line: 1158, column: 2 }, end: { line: 1164, column: 3 } },
                '373': { start: { line: 1159, column: 4 }, end: { line: 1163, column: 6 } },
                '374': {
                  start: { line: 1166, column: 2 },
                  end: { line: 1166, column: 35 }
                },
                '375': { start: { line: 1169, column: 0 }, end: { line: 1179, column: 2 } },
                '376': { start: { line: 1170, column: 2 }, end: { line: 1176, column: 3 } },
                '377': { start: { line: 1171, column: 4 }, end: { line: 1175, column: 6 } },
                '378': {
                  start: { line: 1178, column: 2 },
                  end: { line: 1178, column: 34 }
                },
                '379': { start: { line: 1181, column: 0 }, end: { line: 1190, column: 2 } },
                '380': { start: { line: 1182, column: 2 }, end: { line: 1188, column: 3 } },
                '381': { start: { line: 1183, column: 4 }, end: { line: 1187, column: 6 } },
                '382': {
                  start: { line: 1189, column: 2 },
                  end: { line: 1189, column: 34 }
                },
                '383': { start: { line: 1192, column: 0 }, end: { line: 1202, column: 2 } },
                '384': { start: { line: 1193, column: 2 }, end: { line: 1199, column: 3 } },
                '385': { start: { line: 1194, column: 4 }, end: { line: 1198, column: 6 } },
                '386': {
                  start: { line: 1201, column: 2 },
                  end: { line: 1201, column: 33 }
                },
                '387': { start: { line: 1204, column: 0 }, end: { line: 1214, column: 2 } },
                '388': { start: { line: 1205, column: 2 }, end: { line: 1212, column: 3 } },
                '389': {
                  start: { line: 1206, column: 4 },
                  end: { line: 1206, column: 53 }
                },
                '390': { start: { line: 1207, column: 4 }, end: { line: 1211, column: 6 } },
                '391': {
                  start: { line: 1213, column: 2 },
                  end: { line: 1213, column: 33 }
                },
                '392': { start: { line: 1216, column: 0 }, end: { line: 1224, column: 2 } },
                '393': { start: { line: 1217, column: 2 }, end: { line: 1222, column: 3 } },
                '394': {
                  start: { line: 1219, column: 15 },
                  end: { line: 1219, column: 33 }
                },
                '395': {
                  start: { line: 1220, column: 4 },
                  end: { line: 1220, column: 22 }
                },
                '396': {
                  start: { line: 1221, column: 4 },
                  end: { line: 1221, column: 50 }
                },
                '397': {
                  start: { line: 1223, column: 2 },
                  end: { line: 1223, column: 28 }
                },
                '398': { start: { line: 1226, column: 0 }, end: { line: 1236, column: 2 } },
                '399': {
                  start: { line: 1227, column: 19 },
                  end: { line: 1227, column: 32 }
                },
                '400': { start: { line: 1229, column: 2 }, end: { line: 1231, column: 3 } },
                '401': {
                  start: { line: 1230, column: 4 },
                  end: { line: 1230, column: 44 }
                },
                '402': {
                  start: { line: 1230, column: 29 },
                  end: { line: 1230, column: 44 }
                },
                '403': {
                  start: { line: 1233, column: 14 },
                  end: { line: 1233, column: 39 }
                },
                '404': {
                  start: { line: 1234, column: 2 },
                  end: { line: 1234, column: 21 }
                },
                '405': {
                  start: { line: 1235, column: 2 },
                  end: { line: 1235, column: 13 }
                },
                '406': { start: { line: 1238, column: 0 }, end: { line: 1244, column: 2 } },
                '407': {
                  start: { line: 1239, column: 2 },
                  end: { line: 1239, column: 28 }
                },
                '408': {
                  start: { line: 1242, column: 2 },
                  end: { line: 1242, column: 65 }
                },
                '409': {
                  start: { line: 1243, column: 2 },
                  end: { line: 1243, column: 65 }
                },
                '410': { start: { line: 1246, column: 0 }, end: { line: 1309, column: 2 } },
                '411': {
                  start: { line: 1247, column: 2 },
                  end: { line: 1247, column: 26 }
                },
                '412': {
                  start: { line: 1250, column: 2 },
                  end: { line: 1250, column: 61 }
                },
                '413': {
                  start: { line: 1251, column: 2 },
                  end: { line: 1251, column: 50 }
                },
                '414': { start: { line: 1252, column: 2 }, end: { line: 1254, column: 3 } },
                '415': {
                  start: { line: 1253, column: 4 },
                  end: { line: 1253, column: 49 }
                },
                '416': {
                  start: { line: 1255, column: 2 },
                  end: { line: 1255, column: 45 }
                },
                '417': {
                  start: { line: 1257, column: 2 },
                  end: { line: 1257, column: 64 }
                },
                '418': {
                  start: { line: 1258, column: 2 },
                  end: { line: 1258, column: 64 }
                },
                '419': {
                  start: { line: 1259, column: 2 },
                  end: { line: 1259, column: 58 }
                },
                '420': {
                  start: { line: 1261, column: 2 },
                  end: { line: 1261, column: 62 }
                },
                '421': {
                  start: { line: 1263, column: 26 },
                  end: { line: 1263, column: 65 }
                },
                '422': {
                  start: { line: 1264, column: 2 },
                  end: { line: 1264, column: 61 }
                },
                '423': {
                  start: { line: 1265, column: 2 },
                  end: { line: 1265, column: 73 }
                },
                '424': { start: { line: 1266, column: 2 }, end: { line: 1269, column: 4 } },
                '425': { start: { line: 1270, column: 2 }, end: { line: 1273, column: 4 } },
                '426': {
                  start: { line: 1275, column: 32 },
                  end: { line: 1275, column: 77 }
                },
                '427': {
                  start: { line: 1276, column: 2 },
                  end: { line: 1276, column: 73 }
                },
                '428': {
                  start: { line: 1277, column: 2 },
                  end: { line: 1277, column: 79 }
                },
                '429': { start: { line: 1278, column: 2 }, end: { line: 1281, column: 4 } },
                '430': { start: { line: 1282, column: 2 }, end: { line: 1285, column: 4 } },
                '431': {
                  start: { line: 1288, column: 28 },
                  end: { line: 1288, column: 62 }
                },
                '432': {
                  start: { line: 1289, column: 2 },
                  end: { line: 1289, column: 65 }
                },
                '433': {
                  start: { line: 1290, column: 2 },
                  end: { line: 1290, column: 66 }
                },
                '434': {
                  start: { line: 1292, column: 25 },
                  end: { line: 1292, column: 63 }
                },
                '435': {
                  start: { line: 1293, column: 2 },
                  end: { line: 1293, column: 59 }
                },
                '436': {
                  start: { line: 1294, column: 2 },
                  end: { line: 1294, column: 64 }
                },
                '437': {
                  start: { line: 1295, column: 2 },
                  end: { line: 1295, column: 62 }
                },
                '438': {
                  start: { line: 1296, column: 2 },
                  end: { line: 1296, column: 80 }
                },
                '439': { start: { line: 1297, column: 2 }, end: { line: 1300, column: 4 } },
                '440': {
                  start: { line: 1301, column: 2 },
                  end: { line: 1301, column: 71 }
                },
                '441': {
                  start: { line: 1302, column: 2 },
                  end: { line: 1302, column: 73 }
                },
                '442': {
                  start: { line: 1304, column: 2 },
                  end: { line: 1304, column: 74 }
                },
                '443': {
                  start: { line: 1305, column: 2 },
                  end: { line: 1305, column: 70 }
                },
                '444': {
                  start: { line: 1306, column: 2 },
                  end: { line: 1306, column: 76 }
                },
                '445': {
                  start: { line: 1308, column: 2 },
                  end: { line: 1308, column: 28 }
                },
                '446': { start: { line: 1311, column: 0 }, end: { line: 1322, column: 2 } },
                '447': {
                  start: { line: 1312, column: 2 },
                  end: { line: 1312, column: 27 }
                },
                '448': {
                  start: { line: 1315, column: 2 },
                  end: { line: 1315, column: 64 }
                },
                '449': { start: { line: 1318, column: 2 }, end: { line: 1321, column: 4 } },
                '450': { start: { line: 1328, column: 0 }, end: { line: 1341, column: 2 } },
                '451': {
                  start: { line: 1335, column: 2 },
                  end: { line: 1335, column: 45 }
                },
                '452': {
                  start: { line: 1335, column: 15 },
                  end: { line: 1335, column: 45 }
                },
                '453': {
                  start: { line: 1336, column: 2 },
                  end: { line: 1336, column: 37 }
                },
                '454': { start: { line: 1337, column: 2 }, end: { line: 1340, column: 3 } },
                '455': {
                  start: { line: 1338, column: 17 },
                  end: { line: 1338, column: 51 }
                },
                '456': {
                  start: { line: 1339, column: 4 },
                  end: { line: 1339, column: 67 }
                },
                '457': { start: { line: 1346, column: 0 }, end: { line: 1353, column: 2 } },
                '458': {
                  start: { line: 1347, column: 18 },
                  end: { line: 1347, column: 26 }
                },
                '459': {
                  start: { line: 1348, column: 2 },
                  end: { line: 1348, column: 41 }
                },
                '460': {
                  start: { line: 1348, column: 28 },
                  end: { line: 1348, column: 41 }
                },
                '461': { start: { line: 1349, column: 2 }, end: { line: 1351, column: 3 } },
                '462': {
                  start: { line: 1349, column: 15 },
                  end: { line: 1349, column: 16 }
                },
                '463': {
                  start: { line: 1350, column: 4 },
                  end: { line: 1350, column: 36 }
                },
                '464': {
                  start: { line: 1350, column: 23 },
                  end: { line: 1350, column: 36 }
                },
                '465': {
                  start: { line: 1352, column: 2 },
                  end: { line: 1352, column: 14 }
                },
                '466': { start: { line: 1355, column: 0 }, end: { line: 1363, column: 2 } },
                '467': {
                  start: { line: 1356, column: 12 },
                  end: { line: 1356, column: 17 }
                },
                '468': {
                  start: { line: 1357, column: 2 },
                  end: { line: 1357, column: 36 }
                },
                '469': {
                  start: { line: 1358, column: 2 },
                  end: { line: 1358, column: 36 }
                },
                '470': {
                  start: { line: 1359, column: 2 },
                  end: { line: 1359, column: 34 }
                },
                '471': {
                  start: { line: 1360, column: 2 },
                  end: { line: 1360, column: 35 }
                },
                '472': {
                  start: { line: 1361, column: 2 },
                  end: { line: 1361, column: 35 }
                },
                '473': {
                  start: { line: 1362, column: 2 },
                  end: { line: 1362, column: 13 }
                },
                '474': { start: { line: 1371, column: 0 }, end: { line: 1399, column: 2 } },
                '475': { start: { line: 1373, column: 2 }, end: { line: 1398, column: 3 } },
                '476': {
                  start: { line: 1374, column: 4 },
                  end: { line: 1374, column: 14 }
                },
                '477': { start: { line: 1375, column: 9 }, end: { line: 1398, column: 3 } },
                '478': {
                  start: { line: 1379, column: 21 },
                  end: { line: 1379, column: 46 }
                },
                '479': {
                  start: { line: 1380, column: 25 },
                  end: { line: 1380, column: 41 }
                },
                '480': {
                  start: { line: 1381, column: 19 },
                  end: { line: 1381, column: 21 }
                },
                '481': {
                  start: { line: 1382, column: 18 },
                  end: { line: 1382, column: 29 }
                },
                '482': {
                  start: { line: 1384, column: 4 },
                  end: { line: 1384, column: 23 }
                },
                '483': {
                  start: { line: 1385, column: 4 },
                  end: { line: 1391, column: 65 }
                },
                '484': { start: { line: 1386, column: 6 }, end: { line: 1390, column: 7 } },
                '485': {
                  start: { line: 1387, column: 8 },
                  end: { line: 1387, column: 28 }
                },
                '486': {
                  start: { line: 1389, column: 8 },
                  end: { line: 1389, column: 26 }
                },
                '487': {
                  start: { line: 1392, column: 4 },
                  end: { line: 1392, column: 21 }
                },
                '488': {
                  start: { line: 1393, column: 4 },
                  end: { line: 1393, column: 18 }
                },
                '489': {
                  start: { line: 1397, column: 4 },
                  end: { line: 1397, column: 29 }
                },
                '490': { start: { line: 1409, column: 0 }, end: { line: 1417, column: 2 } },
                '491': {
                  start: { line: 1410, column: 14 },
                  end: { line: 1410, column: 16 }
                },
                '492': { start: { line: 1412, column: 2 }, end: { line: 1414, column: 3 } },
                '493': {
                  start: { line: 1413, column: 4 },
                  end: { line: 1413, column: 37 }
                },
                '494': {
                  start: { line: 1416, column: 2 },
                  end: { line: 1416, column: 13 }
                },
                '495': { start: { line: 1422, column: 0 }, end: { line: 1427, column: 2 } },
                '496': { start: { line: 1423, column: 2 }, end: { line: 1426, column: 6 } },
                '497': { start: { line: 1424, column: 4 }, end: { line: 1426, column: 6 } },
                '498': { start: { line: 1431, column: 0 }, end: { line: 1466, column: 2 } },
                '499': {
                  start: { line: 1434, column: 4 },
                  end: { line: 1434, column: 50 }
                },
                '500': {
                  start: { line: 1435, column: 4 },
                  end: { line: 1435, column: 50 }
                },
                '501': {
                  start: { line: 1436, column: 4 },
                  end: { line: 1436, column: 50 }
                },
                '502': { start: { line: 1440, column: 4 }, end: { line: 1442, column: 5 } },
                '503': {
                  start: { line: 1441, column: 6 },
                  end: { line: 1441, column: 62 }
                },
                '504': {
                  start: { line: 1446, column: 4 },
                  end: { line: 1446, column: 34 }
                },
                '505': {
                  start: { line: 1447, column: 4 },
                  end: { line: 1447, column: 42 }
                },
                '506': {
                  start: { line: 1451, column: 4 },
                  end: { line: 1451, column: 45 }
                },
                '507': {
                  start: { line: 1458, column: 16 },
                  end: { line: 1458, column: 43 }
                },
                '508': {
                  start: { line: 1459, column: 2 },
                  end: { line: 1459, column: 78 }
                },
                '509': {
                  start: { line: 1460, column: 2 },
                  end: { line: 1460, column: 71 }
                },
                '510': {
                  start: { line: 1461, column: 2 },
                  end: { line: 1461, column: 71 }
                },
                '511': {
                  start: { line: 1462, column: 2 },
                  end: { line: 1462, column: 75 }
                },
                '512': {
                  start: { line: 1463, column: 2 },
                  end: { line: 1463, column: 74 }
                },
                '513': {
                  start: { line: 1465, column: 2 },
                  end: { line: 1465, column: 15 }
                },
                '514': { start: { line: 1468, column: 0 }, end: { line: 1492, column: 2 } },
                '515': {
                  start: { line: 1473, column: 2 },
                  end: { line: 1473, column: 37 }
                },
                '516': {
                  start: { line: 1475, column: 24 },
                  end: { line: 1475, column: 26 }
                },
                '517': {
                  start: { line: 1476, column: 2 },
                  end: { line: 1476, column: 49 }
                },
                '518': { start: { line: 1478, column: 2 }, end: { line: 1486, column: 3 } },
                '519': {
                  start: { line: 1478, column: 15 },
                  end: { line: 1478, column: 16 }
                },
                '520': {
                  start: { line: 1479, column: 4 },
                  end: { line: 1479, column: 38 }
                },
                '521': {
                  start: { line: 1480, column: 20 },
                  end: { line: 1480, column: 31 }
                },
                '522': { start: { line: 1481, column: 4 }, end: { line: 1484, column: 5 } },
                '523': {
                  start: { line: 1481, column: 17 },
                  end: { line: 1481, column: 18 }
                },
                '524': {
                  start: { line: 1482, column: 21 },
                  end: { line: 1482, column: 65 }
                },
                '525': {
                  start: { line: 1483, column: 6 },
                  end: { line: 1483, column: 48 }
                },
                '526': {
                  start: { line: 1485, column: 4 },
                  end: { line: 1485, column: 36 }
                },
                '527': {
                  start: { line: 1489, column: 2 },
                  end: { line: 1489, column: 34 }
                },
                '528': {
                  start: { line: 1491, column: 2 },
                  end: { line: 1491, column: 23 }
                },
                '529': { start: { line: 1495, column: 0 }, end: { line: 1502, column: 2 } },
                '530': {
                  start: { line: 1496, column: 13 },
                  end: { line: 1496, column: 18 }
                },
                '531': {
                  start: { line: 1497, column: 13 },
                  end: { line: 1497, column: 19 }
                },
                '532': {
                  start: { line: 1498, column: 13 },
                  end: { line: 1498, column: 18 }
                },
                '533': {
                  start: { line: 1499, column: 14 },
                  end: { line: 1499, column: 21 }
                },
                '534': {
                  start: { line: 1500, column: 14 },
                  end: { line: 1500, column: 22 }
                },
                '535': {
                  start: { line: 1501, column: 2 },
                  end: { line: 1501, column: 45 }
                },
                '536': { start: { line: 1505, column: 0 }, end: { line: 1510, column: 2 } },
                '537': {
                  start: { line: 1506, column: 13 },
                  end: { line: 1506, column: 18 }
                },
                '538': {
                  start: { line: 1507, column: 13 },
                  end: { line: 1507, column: 18 }
                },
                '539': {
                  start: { line: 1508, column: 14 },
                  end: { line: 1508, column: 21 }
                },
                '540': {
                  start: { line: 1509, column: 2 },
                  end: { line: 1509, column: 31 }
                },
                '541': { start: { line: 1513, column: 0 }, end: { line: 1520, column: 2 } },
                '542': {
                  start: { line: 1514, column: 13 },
                  end: { line: 1514, column: 17 }
                },
                '543': {
                  start: { line: 1515, column: 13 },
                  end: { line: 1515, column: 56 }
                },
                '544': {
                  start: { line: 1516, column: 13 },
                  end: { line: 1516, column: 56 }
                },
                '545': {
                  start: { line: 1517, column: 13 },
                  end: { line: 1517, column: 17 }
                },
                '546': {
                  start: { line: 1518, column: 12 },
                  end: { line: 1518, column: 28 }
                },
                '547': { start: { line: 1519, column: 2 }, end: { line: 1519, column: 11 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 60, column: 16 }, end: { line: 60, column: 17 } },
                  loc: { start: { line: 60, column: 57 }, end: { line: 226, column: 1 } },
                  line: 60
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: {
                    start: { line: 234, column: 48 },
                    end: { line: 234, column: 49 }
                  },
                  loc: { start: { line: 234, column: 64 }, end: { line: 252, column: 1 } },
                  line: 234
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 254, column: 39 },
                    end: { line: 254, column: 40 }
                  },
                  loc: { start: { line: 254, column: 50 }, end: { line: 273, column: 1 } },
                  line: 254
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 278, column: 40 },
                    end: { line: 278, column: 41 }
                  },
                  loc: { start: { line: 278, column: 68 }, end: { line: 328, column: 1 } },
                  line: 278
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 324, column: 15 },
                    end: { line: 324, column: 16 }
                  },
                  loc: { start: { line: 324, column: 21 }, end: { line: 326, column: 5 } },
                  line: 324
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 479, column: 29 },
                    end: { line: 479, column: 30 }
                  },
                  loc: { start: { line: 479, column: 50 }, end: { line: 529, column: 1 } },
                  line: 479
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 535, column: 34 },
                    end: { line: 535, column: 35 }
                  },
                  loc: { start: { line: 535, column: 45 }, end: { line: 584, column: 1 } },
                  line: 535
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 589, column: 37 },
                    end: { line: 589, column: 38 }
                  },
                  loc: { start: { line: 589, column: 55 }, end: { line: 598, column: 1 } },
                  line: 589
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 635, column: 31 },
                    end: { line: 635, column: 32 }
                  },
                  loc: { start: { line: 635, column: 55 }, end: { line: 642, column: 1 } },
                  line: 635
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 674, column: 33 },
                    end: { line: 674, column: 34 }
                  },
                  loc: { start: { line: 674, column: 54 }, end: { line: 680, column: 1 } },
                  line: 674
                },
                '10': {
                  name: '(anonymous_10)',
                  decl: {
                    start: { line: 682, column: 36 },
                    end: { line: 682, column: 37 }
                  },
                  loc: { start: { line: 682, column: 50 }, end: { line: 685, column: 1 } },
                  line: 682
                },
                '11': {
                  name: '(anonymous_11)',
                  decl: {
                    start: { line: 687, column: 37 },
                    end: { line: 687, column: 38 }
                  },
                  loc: { start: { line: 687, column: 52 }, end: { line: 691, column: 1 } },
                  line: 687
                },
                '12': {
                  name: '(anonymous_12)',
                  decl: {
                    start: { line: 693, column: 33 },
                    end: { line: 693, column: 34 }
                  },
                  loc: { start: { line: 693, column: 54 }, end: { line: 698, column: 1 } },
                  line: 693
                },
                '13': {
                  name: '(anonymous_13)',
                  decl: {
                    start: { line: 700, column: 36 },
                    end: { line: 700, column: 37 }
                  },
                  loc: { start: { line: 700, column: 51 }, end: { line: 725, column: 1 } },
                  line: 700
                },
                '14': {
                  name: '(anonymous_14)',
                  decl: {
                    start: { line: 727, column: 32 },
                    end: { line: 727, column: 33 }
                  },
                  loc: { start: { line: 727, column: 69 }, end: { line: 738, column: 1 } },
                  line: 727
                },
                '15': {
                  name: '(anonymous_15)',
                  decl: {
                    start: { line: 740, column: 34 },
                    end: { line: 740, column: 35 }
                  },
                  loc: { start: { line: 740, column: 45 }, end: { line: 747, column: 1 } },
                  line: 740
                },
                '16': {
                  name: '(anonymous_16)',
                  decl: {
                    start: { line: 788, column: 39 },
                    end: { line: 788, column: 40 }
                  },
                  loc: { start: { line: 788, column: 51 }, end: { line: 793, column: 1 } },
                  line: 788
                },
                '17': {
                  name: '(anonymous_17)',
                  decl: {
                    start: { line: 796, column: 36 },
                    end: { line: 796, column: 37 }
                  },
                  loc: { start: { line: 796, column: 51 }, end: { line: 812, column: 1 } },
                  line: 796
                },
                '18': {
                  name: '(anonymous_18)',
                  decl: {
                    start: { line: 823, column: 37 },
                    end: { line: 823, column: 38 }
                  },
                  loc: { start: { line: 823, column: 48 }, end: { line: 850, column: 1 } },
                  line: 823
                },
                '19': {
                  name: '(anonymous_19)',
                  decl: {
                    start: { line: 856, column: 41 },
                    end: { line: 856, column: 42 }
                  },
                  loc: { start: { line: 856, column: 55 }, end: { line: 858, column: 1 } },
                  line: 856
                },
                '20': {
                  name: '(anonymous_20)',
                  decl: {
                    start: { line: 866, column: 33 },
                    end: { line: 866, column: 34 }
                  },
                  loc: { start: { line: 866, column: 48 }, end: { line: 888, column: 1 } },
                  line: 866
                },
                '21': {
                  name: '(anonymous_21)',
                  decl: {
                    start: { line: 899, column: 32 },
                    end: { line: 899, column: 33 }
                  },
                  loc: { start: { line: 899, column: 50 }, end: { line: 906, column: 1 } },
                  line: 899
                },
                '22': {
                  name: '(anonymous_22)',
                  decl: {
                    start: { line: 908, column: 38 },
                    end: { line: 908, column: 39 }
                  },
                  loc: { start: { line: 908, column: 65 }, end: { line: 920, column: 1 } },
                  line: 908
                },
                '23': {
                  name: '(anonymous_23)',
                  decl: {
                    start: { line: 931, column: 36 },
                    end: { line: 931, column: 37 }
                  },
                  loc: { start: { line: 931, column: 54 }, end: { line: 939, column: 1 } },
                  line: 931
                },
                '24': {
                  name: '(anonymous_24)',
                  decl: {
                    start: { line: 949, column: 32 },
                    end: { line: 949, column: 33 }
                  },
                  loc: { start: { line: 949, column: 50 }, end: { line: 952, column: 1 } },
                  line: 949
                },
                '25': {
                  name: '(anonymous_25)',
                  decl: {
                    start: { line: 954, column: 33 },
                    end: { line: 954, column: 34 }
                  },
                  loc: { start: { line: 954, column: 53 }, end: { line: 960, column: 1 } },
                  line: 954
                },
                '26': {
                  name: '(anonymous_26)',
                  decl: {
                    start: { line: 962, column: 34 },
                    end: { line: 962, column: 35 }
                  },
                  loc: { start: { line: 962, column: 48 }, end: { line: 965, column: 1 } },
                  line: 962
                },
                '27': {
                  name: '(anonymous_27)',
                  decl: {
                    start: { line: 967, column: 34 },
                    end: { line: 967, column: 35 }
                  },
                  loc: { start: { line: 967, column: 48 }, end: { line: 970, column: 1 } },
                  line: 967
                },
                '28': {
                  name: '(anonymous_28)',
                  decl: {
                    start: { line: 972, column: 34 },
                    end: { line: 972, column: 35 }
                  },
                  loc: { start: { line: 972, column: 48 }, end: { line: 975, column: 1 } },
                  line: 972
                },
                '29': {
                  name: '(anonymous_29)',
                  decl: {
                    start: { line: 977, column: 31 },
                    end: { line: 977, column: 32 }
                  },
                  loc: { start: { line: 977, column: 42 }, end: { line: 1035, column: 1 } },
                  line: 977
                },
                '30': {
                  name: '(anonymous_30)',
                  decl: {
                    start: { line: 1037, column: 38 },
                    end: { line: 1037, column: 39 }
                  },
                  loc: {
                    start: { line: 1037, column: 49 },
                    end: { line: 1040, column: 1 }
                  },
                  line: 1037
                },
                '31': {
                  name: '(anonymous_31)',
                  decl: {
                    start: { line: 1052, column: 52 },
                    end: { line: 1052, column: 53 }
                  },
                  loc: {
                    start: { line: 1052, column: 63 },
                    end: { line: 1059, column: 1 }
                  },
                  line: 1052
                },
                '32': {
                  name: '(anonymous_32)',
                  decl: {
                    start: { line: 1068, column: 50 },
                    end: { line: 1068, column: 51 }
                  },
                  loc: {
                    start: { line: 1068, column: 61 },
                    end: { line: 1087, column: 1 }
                  },
                  line: 1068
                },
                '33': {
                  name: '(anonymous_33)',
                  decl: {
                    start: { line: 1093, column: 49 },
                    end: { line: 1093, column: 50 }
                  },
                  loc: {
                    start: { line: 1093, column: 60 },
                    end: { line: 1111, column: 1 }
                  },
                  line: 1093
                },
                '34': {
                  name: '(anonymous_34)',
                  decl: {
                    start: { line: 1113, column: 51 },
                    end: { line: 1113, column: 52 }
                  },
                  loc: {
                    start: { line: 1113, column: 62 },
                    end: { line: 1120, column: 1 }
                  },
                  line: 1113
                },
                '35': {
                  name: '(anonymous_35)',
                  decl: {
                    start: { line: 1125, column: 42 },
                    end: { line: 1125, column: 43 }
                  },
                  loc: {
                    start: { line: 1125, column: 53 },
                    end: { line: 1143, column: 1 }
                  },
                  line: 1125
                },
                '36': {
                  name: '(anonymous_36)',
                  decl: {
                    start: { line: 1145, column: 50 },
                    end: { line: 1145, column: 51 }
                  },
                  loc: {
                    start: { line: 1145, column: 61 },
                    end: { line: 1155, column: 1 }
                  },
                  line: 1145
                },
                '37': {
                  name: '(anonymous_37)',
                  decl: {
                    start: { line: 1157, column: 43 },
                    end: { line: 1157, column: 44 }
                  },
                  loc: {
                    start: { line: 1157, column: 54 },
                    end: { line: 1167, column: 1 }
                  },
                  line: 1157
                },
                '38': {
                  name: '(anonymous_38)',
                  decl: {
                    start: { line: 1169, column: 42 },
                    end: { line: 1169, column: 43 }
                  },
                  loc: {
                    start: { line: 1169, column: 53 },
                    end: { line: 1179, column: 1 }
                  },
                  line: 1169
                },
                '39': {
                  name: '(anonymous_39)',
                  decl: {
                    start: { line: 1181, column: 42 },
                    end: { line: 1181, column: 43 }
                  },
                  loc: {
                    start: { line: 1181, column: 53 },
                    end: { line: 1190, column: 1 }
                  },
                  line: 1181
                },
                '40': {
                  name: '(anonymous_40)',
                  decl: {
                    start: { line: 1192, column: 41 },
                    end: { line: 1192, column: 42 }
                  },
                  loc: {
                    start: { line: 1192, column: 52 },
                    end: { line: 1202, column: 1 }
                  },
                  line: 1192
                },
                '41': {
                  name: '(anonymous_41)',
                  decl: {
                    start: { line: 1204, column: 41 },
                    end: { line: 1204, column: 42 }
                  },
                  loc: {
                    start: { line: 1204, column: 52 },
                    end: { line: 1214, column: 1 }
                  },
                  line: 1204
                },
                '42': {
                  name: '(anonymous_42)',
                  decl: {
                    start: { line: 1216, column: 43 },
                    end: { line: 1216, column: 44 }
                  },
                  loc: {
                    start: { line: 1216, column: 54 },
                    end: { line: 1224, column: 1 }
                  },
                  line: 1216
                },
                '43': {
                  name: '(anonymous_43)',
                  decl: {
                    start: { line: 1226, column: 37 },
                    end: { line: 1226, column: 38 }
                  },
                  loc: {
                    start: { line: 1226, column: 51 },
                    end: { line: 1236, column: 1 }
                  },
                  line: 1226
                },
                '44': {
                  name: '(anonymous_44)',
                  decl: {
                    start: { line: 1238, column: 45 },
                    end: { line: 1238, column: 46 }
                  },
                  loc: {
                    start: { line: 1238, column: 68 },
                    end: { line: 1244, column: 1 }
                  },
                  line: 1238
                },
                '45': {
                  name: '(anonymous_45)',
                  decl: {
                    start: { line: 1246, column: 43 },
                    end: { line: 1246, column: 44 }
                  },
                  loc: {
                    start: { line: 1246, column: 64 },
                    end: { line: 1309, column: 1 }
                  },
                  line: 1246
                },
                '46': {
                  name: '(anonymous_46)',
                  decl: {
                    start: { line: 1311, column: 44 },
                    end: { line: 1311, column: 45 }
                  },
                  loc: {
                    start: { line: 1311, column: 66 },
                    end: { line: 1322, column: 1 }
                  },
                  line: 1311
                },
                '47': {
                  name: '(anonymous_47)',
                  decl: {
                    start: { line: 1328, column: 38 },
                    end: { line: 1328, column: 39 }
                  },
                  loc: { start: { line: 1334, column: 2 }, end: { line: 1341, column: 1 } },
                  line: 1334
                },
                '48': {
                  name: '(anonymous_48)',
                  decl: {
                    start: { line: 1346, column: 39 },
                    end: { line: 1346, column: 40 }
                  },
                  loc: {
                    start: { line: 1346, column: 54 },
                    end: { line: 1353, column: 1 }
                  },
                  line: 1346
                },
                '49': {
                  name: '(anonymous_49)',
                  decl: {
                    start: { line: 1355, column: 40 },
                    end: { line: 1355, column: 41 }
                  },
                  loc: {
                    start: { line: 1355, column: 54 },
                    end: { line: 1363, column: 1 }
                  },
                  line: 1355
                },
                '50': {
                  name: '(anonymous_50)',
                  decl: {
                    start: { line: 1371, column: 35 },
                    end: { line: 1371, column: 36 }
                  },
                  loc: {
                    start: { line: 1371, column: 49 },
                    end: { line: 1399, column: 1 }
                  },
                  line: 1371
                },
                '51': {
                  name: '(anonymous_51)',
                  decl: {
                    start: { line: 1409, column: 37 },
                    end: { line: 1409, column: 38 }
                  },
                  loc: {
                    start: { line: 1409, column: 51 },
                    end: { line: 1417, column: 1 }
                  },
                  line: 1409
                },
                '52': {
                  name: '(anonymous_52)',
                  decl: {
                    start: { line: 1422, column: 25 },
                    end: { line: 1422, column: 26 }
                  },
                  loc: {
                    start: { line: 1422, column: 40 },
                    end: { line: 1427, column: 1 }
                  },
                  line: 1422
                },
                '53': {
                  name: 'initTesselator',
                  decl: {
                    start: { line: 1431, column: 46 },
                    end: { line: 1431, column: 60 }
                  },
                  loc: {
                    start: { line: 1431, column: 63 },
                    end: { line: 1466, column: 1 }
                  },
                  line: 1431
                },
                '54': {
                  name: 'vertexCallback',
                  decl: {
                    start: { line: 1433, column: 11 },
                    end: { line: 1433, column: 25 }
                  },
                  loc: {
                    start: { line: 1433, column: 47 },
                    end: { line: 1437, column: 3 }
                  },
                  line: 1433
                },
                '55': {
                  name: 'begincallback',
                  decl: {
                    start: { line: 1439, column: 11 },
                    end: { line: 1439, column: 24 }
                  },
                  loc: {
                    start: { line: 1439, column: 31 },
                    end: { line: 1443, column: 3 }
                  },
                  line: 1439
                },
                '56': {
                  name: 'errorcallback',
                  decl: {
                    start: { line: 1445, column: 11 },
                    end: { line: 1445, column: 24 }
                  },
                  loc: {
                    start: { line: 1445, column: 32 },
                    end: { line: 1448, column: 3 }
                  },
                  line: 1445
                },
                '57': {
                  name: 'combinecallback',
                  decl: {
                    start: { line: 1450, column: 11 },
                    end: { line: 1450, column: 26 }
                  },
                  loc: {
                    start: { line: 1450, column: 49 },
                    end: { line: 1452, column: 3 }
                  },
                  line: 1450
                },
                '58': {
                  name: 'edgeCallback',
                  decl: {
                    start: { line: 1454, column: 11 },
                    end: { line: 1454, column: 23 }
                  },
                  loc: {
                    start: { line: 1454, column: 30 },
                    end: { line: 1456, column: 3 }
                  },
                  line: 1454
                },
                '59': {
                  name: '(anonymous_59)',
                  decl: {
                    start: { line: 1468, column: 39 },
                    end: { line: 1468, column: 40 }
                  },
                  loc: {
                    start: { line: 1468, column: 58 },
                    end: { line: 1492, column: 1 }
                  },
                  line: 1468
                },
                '60': {
                  name: '(anonymous_60)',
                  decl: {
                    start: { line: 1495, column: 46 },
                    end: { line: 1495, column: 47 }
                  },
                  loc: {
                    start: { line: 1495, column: 58 },
                    end: { line: 1502, column: 1 }
                  },
                  line: 1495
                },
                '61': {
                  name: '(anonymous_61)',
                  decl: {
                    start: { line: 1505, column: 49 },
                    end: { line: 1505, column: 50 }
                  },
                  loc: {
                    start: { line: 1505, column: 61 },
                    end: { line: 1510, column: 1 }
                  },
                  line: 1505
                },
                '62': {
                  name: '(anonymous_62)',
                  decl: {
                    start: { line: 1513, column: 43 },
                    end: { line: 1513, column: 44 }
                  },
                  loc: {
                    start: { line: 1513, column: 55 },
                    end: { line: 1520, column: 1 }
                  },
                  line: 1513
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 246, column: 2 }, end: { line: 250, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 246, column: 2 }, end: { line: 250, column: 3 } },
                    { start: { line: 246, column: 2 }, end: { line: 250, column: 3 } }
                  ],
                  line: 246
                },
                '1': {
                  loc: { start: { line: 257, column: 6 }, end: { line: 258, column: 77 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 257, column: 6 }, end: { line: 257, column: 64 } },
                    { start: { line: 258, column: 6 }, end: { line: 258, column: 77 } }
                  ],
                  line: 257
                },
                '2': {
                  loc: { start: { line: 259, column: 4 }, end: { line: 269, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 259, column: 4 }, end: { line: 269, column: 5 } },
                    { start: { line: 259, column: 4 }, end: { line: 269, column: 5 } }
                  ],
                  line: 259
                },
                '3': {
                  loc: { start: { line: 284, column: 2 }, end: { line: 306, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 284, column: 2 }, end: { line: 306, column: 3 } },
                    { start: { line: 284, column: 2 }, end: { line: 306, column: 3 } }
                  ],
                  line: 284
                },
                '4': {
                  loc: { start: { line: 288, column: 17 }, end: { line: 288, column: 53 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 288, column: 17 }, end: { line: 288, column: 36 } },
                    { start: { line: 288, column: 40 }, end: { line: 288, column: 53 } }
                  ],
                  line: 288
                },
                '5': {
                  loc: { start: { line: 295, column: 4 }, end: { line: 297, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 295, column: 4 }, end: { line: 297, column: 5 } },
                    { start: { line: 295, column: 4 }, end: { line: 297, column: 5 } }
                  ],
                  line: 295
                },
                '6': {
                  loc: { start: { line: 300, column: 4 }, end: { line: 304, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 300, column: 4 }, end: { line: 304, column: 5 } },
                    { start: { line: 300, column: 4 }, end: { line: 304, column: 5 } }
                  ],
                  line: 300
                },
                '7': {
                  loc: { start: { line: 317, column: 2 }, end: { line: 319, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 317, column: 2 }, end: { line: 319, column: 3 } },
                    { start: { line: 317, column: 2 }, end: { line: 319, column: 3 } }
                  ],
                  line: 317
                },
                '8': {
                  loc: { start: { line: 321, column: 2 }, end: { line: 327, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 321, column: 2 }, end: { line: 327, column: 3 } },
                    { start: { line: 321, column: 2 }, end: { line: 327, column: 3 } }
                  ],
                  line: 321
                },
                '9': {
                  loc: { start: { line: 480, column: 2 }, end: { line: 486, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 480, column: 2 }, end: { line: 486, column: 3 } },
                    { start: { line: 480, column: 2 }, end: { line: 486, column: 3 } }
                  ],
                  line: 480
                },
                '10': {
                  loc: { start: { line: 488, column: 2 }, end: { line: 504, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 488, column: 2 }, end: { line: 504, column: 3 } },
                    { start: { line: 488, column: 2 }, end: { line: 504, column: 3 } }
                  ],
                  line: 488
                },
                '11': {
                  loc: { start: { line: 490, column: 4 }, end: { line: 492, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 490, column: 4 }, end: { line: 492, column: 5 } },
                    { start: { line: 490, column: 4 }, end: { line: 492, column: 5 } }
                  ],
                  line: 490
                },
                '12': {
                  loc: { start: { line: 493, column: 4 }, end: { line: 497, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 493, column: 4 }, end: { line: 497, column: 5 } },
                    { start: { line: 493, column: 4 }, end: { line: 497, column: 5 } }
                  ],
                  line: 493
                },
                '13': {
                  loc: { start: { line: 499, column: 9 }, end: { line: 504, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 499, column: 9 }, end: { line: 504, column: 3 } },
                    { start: { line: 499, column: 9 }, end: { line: 504, column: 3 } }
                  ],
                  line: 499
                },
                '14': {
                  loc: { start: { line: 500, column: 4 }, end: { line: 503, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 500, column: 4 }, end: { line: 503, column: 5 } },
                    { start: { line: 500, column: 4 }, end: { line: 503, column: 5 } }
                  ],
                  line: 500
                },
                '15': {
                  loc: { start: { line: 506, column: 2 }, end: { line: 508, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 506, column: 2 }, end: { line: 508, column: 3 } },
                    { start: { line: 506, column: 2 }, end: { line: 508, column: 3 } }
                  ],
                  line: 506
                },
                '16': {
                  loc: { start: { line: 506, column: 6 }, end: { line: 506, column: 40 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 506, column: 6 }, end: { line: 506, column: 27 } },
                    { start: { line: 506, column: 31 }, end: { line: 506, column: 40 } }
                  ],
                  line: 506
                },
                '17': {
                  loc: { start: { line: 510, column: 2 }, end: { line: 520, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 510, column: 2 }, end: { line: 520, column: 3 } },
                    { start: { line: 510, column: 2 }, end: { line: 520, column: 3 } }
                  ],
                  line: 510
                },
                '18': {
                  loc: { start: { line: 512, column: 6 }, end: { line: 518, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 512, column: 6 }, end: { line: 518, column: 7 } },
                    { start: { line: 512, column: 6 }, end: { line: 518, column: 7 } }
                  ],
                  line: 512
                },
                '19': {
                  loc: { start: { line: 526, column: 2 }, end: { line: 528, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 526, column: 2 }, end: { line: 528, column: 3 } },
                    { start: { line: 526, column: 2 }, end: { line: 528, column: 3 } }
                  ],
                  line: 526
                },
                '20': {
                  loc: { start: { line: 701, column: 2 }, end: { line: 724, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 701, column: 2 }, end: { line: 724, column: 3 } },
                    { start: { line: 701, column: 2 }, end: { line: 724, column: 3 } }
                  ],
                  line: 701
                },
                '21': {
                  loc: { start: { line: 702, column: 4 }, end: { line: 711, column: 29 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 702, column: 4 }, end: { line: 702, column: 30 } },
                    { start: { line: 703, column: 4 }, end: { line: 703, column: 31 } },
                    { start: { line: 704, column: 4 }, end: { line: 704, column: 26 } },
                    { start: { line: 705, column: 4 }, end: { line: 705, column: 28 } },
                    { start: { line: 706, column: 4 }, end: { line: 706, column: 31 } },
                    { start: { line: 707, column: 4 }, end: { line: 707, column: 29 } },
                    { start: { line: 708, column: 4 }, end: { line: 708, column: 32 } },
                    { start: { line: 709, column: 4 }, end: { line: 709, column: 30 } },
                    { start: { line: 710, column: 4 }, end: { line: 710, column: 31 } },
                    { start: { line: 711, column: 4 }, end: { line: 711, column: 29 } }
                  ],
                  line: 702
                },
                '22': {
                  loc: { start: { line: 714, column: 7 }, end: { line: 724, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 714, column: 7 }, end: { line: 724, column: 3 } },
                    { start: { line: 714, column: 7 }, end: { line: 724, column: 3 } }
                  ],
                  line: 714
                },
                '23': {
                  loc: { start: { line: 715, column: 4 }, end: { line: 719, column: 28 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 715, column: 4 }, end: { line: 715, column: 27 } },
                    { start: { line: 716, column: 4 }, end: { line: 716, column: 30 } },
                    { start: { line: 717, column: 4 }, end: { line: 717, column: 33 } },
                    { start: { line: 718, column: 4 }, end: { line: 718, column: 33 } },
                    { start: { line: 719, column: 4 }, end: { line: 719, column: 28 } }
                  ],
                  line: 715
                },
                '24': {
                  loc: { start: { line: 728, column: 2 }, end: { line: 737, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 728, column: 2 }, end: { line: 737, column: 3 } },
                    { start: { line: 728, column: 2 }, end: { line: 737, column: 3 } }
                  ],
                  line: 728
                },
                '25': {
                  loc: { start: { line: 741, column: 2 }, end: { line: 746, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 741, column: 2 }, end: { line: 746, column: 3 } },
                    { start: { line: 741, column: 2 }, end: { line: 746, column: 3 } }
                  ],
                  line: 741
                },
                '26': {
                  loc: { start: { line: 789, column: 2 }, end: { line: 792, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 789, column: 2 }, end: { line: 792, column: 3 } },
                    { start: { line: 789, column: 2 }, end: { line: 792, column: 3 } }
                  ],
                  line: 789
                },
                '27': {
                  loc: { start: { line: 827, column: 2 }, end: { line: 832, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 827, column: 2 }, end: { line: 832, column: 3 } },
                    { start: { line: 827, column: 2 }, end: { line: 832, column: 3 } }
                  ],
                  line: 827
                },
                '28': {
                  loc: { start: { line: 838, column: 2 }, end: { line: 841, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 838, column: 2 }, end: { line: 841, column: 3 } },
                    { start: { line: 838, column: 2 }, end: { line: 841, column: 3 } }
                  ],
                  line: 838
                },
                '29': {
                  loc: { start: { line: 838, column: 6 }, end: { line: 838, column: 62 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 838, column: 6 }, end: { line: 838, column: 37 } },
                    { start: { line: 838, column: 41 }, end: { line: 838, column: 62 } }
                  ],
                  line: 838
                },
                '30': {
                  loc: { start: { line: 880, column: 2 }, end: { line: 887, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 880, column: 2 }, end: { line: 887, column: 3 } },
                    { start: { line: 880, column: 2 }, end: { line: 887, column: 3 } }
                  ],
                  line: 880
                },
                '31': {
                  loc: { start: { line: 900, column: 13 }, end: { line: 900, column: 25 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 900, column: 13 }, end: { line: 900, column: 20 } },
                    { start: { line: 900, column: 24 }, end: { line: 900, column: 25 } }
                  ],
                  line: 900
                },
                '32': {
                  loc: { start: { line: 901, column: 13 }, end: { line: 901, column: 25 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 901, column: 13 }, end: { line: 901, column: 20 } },
                    { start: { line: 901, column: 24 }, end: { line: 901, column: 25 } }
                  ],
                  line: 901
                },
                '33': {
                  loc: { start: { line: 902, column: 13 }, end: { line: 902, column: 25 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 902, column: 13 }, end: { line: 902, column: 20 } },
                    { start: { line: 902, column: 24 }, end: { line: 902, column: 25 } }
                  ],
                  line: 902
                },
                '34': {
                  loc: { start: { line: 903, column: 13 }, end: { line: 903, column: 25 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 903, column: 13 }, end: { line: 903, column: 20 } },
                    { start: { line: 903, column: 24 }, end: { line: 903, column: 25 } }
                  ],
                  line: 903
                },
                '35': {
                  loc: { start: { line: 909, column: 2 }, end: { line: 919, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 909, column: 2 }, end: { line: 919, column: 3 } },
                    { start: { line: 909, column: 2 }, end: { line: 919, column: 3 } }
                  ],
                  line: 909
                },
                '36': {
                  loc: { start: { line: 932, column: 2 }, end: { line: 936, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 932, column: 2 }, end: { line: 936, column: 3 } },
                    { start: { line: 932, column: 2 }, end: { line: 936, column: 3 } }
                  ],
                  line: 932
                },
                '37': {
                  loc: { start: { line: 955, column: 2 }, end: { line: 957, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 955, column: 2 }, end: { line: 957, column: 3 } },
                    { start: { line: 955, column: 2 }, end: { line: 957, column: 3 } }
                  ],
                  line: 955
                },
                '38': {
                  loc: { start: { line: 1055, column: 2 }, end: { line: 1057, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1055, column: 2 }, end: { line: 1057, column: 3 } },
                    { start: { line: 1055, column: 2 }, end: { line: 1057, column: 3 } }
                  ],
                  line: 1055
                },
                '39': {
                  loc: {
                    start: { line: 1055, column: 6 },
                    end: { line: 1055, column: 41 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1055, column: 6 }, end: { line: 1055, column: 13 } },
                    { start: { line: 1055, column: 17 }, end: { line: 1055, column: 41 } }
                  ],
                  line: 1055
                },
                '40': {
                  loc: { start: { line: 1070, column: 2 }, end: { line: 1074, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1070, column: 2 }, end: { line: 1074, column: 3 } },
                    { start: { line: 1070, column: 2 }, end: { line: 1074, column: 3 } }
                  ],
                  line: 1070
                },
                '41': {
                  loc: { start: { line: 1071, column: 4 }, end: { line: 1073, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1071, column: 4 }, end: { line: 1073, column: 5 } },
                    { start: { line: 1071, column: 4 }, end: { line: 1073, column: 5 } }
                  ],
                  line: 1071
                },
                '42': {
                  loc: {
                    start: { line: 1071, column: 8 },
                    end: { line: 1071, column: 39 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1071, column: 8 }, end: { line: 1071, column: 13 } },
                    { start: { line: 1071, column: 17 }, end: { line: 1071, column: 39 } }
                  ],
                  line: 1071
                },
                '43': {
                  loc: { start: { line: 1075, column: 2 }, end: { line: 1085, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1075, column: 2 }, end: { line: 1085, column: 3 } },
                    { start: { line: 1075, column: 2 }, end: { line: 1085, column: 3 } }
                  ],
                  line: 1075
                },
                '44': {
                  loc: { start: { line: 1076, column: 4 }, end: { line: 1078, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1076, column: 4 }, end: { line: 1078, column: 5 } },
                    { start: { line: 1076, column: 4 }, end: { line: 1078, column: 5 } }
                  ],
                  line: 1076
                },
                '45': {
                  loc: {
                    start: { line: 1076, column: 8 },
                    end: { line: 1076, column: 38 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1076, column: 8 }, end: { line: 1076, column: 13 } },
                    { start: { line: 1076, column: 17 }, end: { line: 1076, column: 38 } }
                  ],
                  line: 1076
                },
                '46': {
                  loc: { start: { line: 1079, column: 9 }, end: { line: 1085, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1079, column: 9 }, end: { line: 1085, column: 3 } },
                    { start: { line: 1079, column: 9 }, end: { line: 1085, column: 3 } }
                  ],
                  line: 1079
                },
                '47': {
                  loc: { start: { line: 1080, column: 4 }, end: { line: 1082, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1080, column: 4 }, end: { line: 1082, column: 5 } },
                    { start: { line: 1080, column: 4 }, end: { line: 1082, column: 5 } }
                  ],
                  line: 1080
                },
                '48': {
                  loc: {
                    start: { line: 1080, column: 8 },
                    end: { line: 1080, column: 40 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1080, column: 8 }, end: { line: 1080, column: 13 } },
                    { start: { line: 1080, column: 17 }, end: { line: 1080, column: 40 } }
                  ],
                  line: 1080
                },
                '49': {
                  loc: { start: { line: 1083, column: 9 }, end: { line: 1085, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1083, column: 9 }, end: { line: 1085, column: 3 } },
                    { start: { line: 1083, column: 9 }, end: { line: 1085, column: 3 } }
                  ],
                  line: 1083
                },
                '50': {
                  loc: { start: { line: 1094, column: 2 }, end: { line: 1096, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1094, column: 2 }, end: { line: 1096, column: 3 } },
                    { start: { line: 1094, column: 2 }, end: { line: 1096, column: 3 } }
                  ],
                  line: 1094
                },
                '51': {
                  loc: { start: { line: 1099, column: 2 }, end: { line: 1109, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1099, column: 2 }, end: { line: 1109, column: 3 } },
                    { start: { line: 1099, column: 2 }, end: { line: 1109, column: 3 } }
                  ],
                  line: 1099
                },
                '52': {
                  loc: { start: { line: 1100, column: 4 }, end: { line: 1102, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1100, column: 4 }, end: { line: 1102, column: 5 } },
                    { start: { line: 1100, column: 4 }, end: { line: 1102, column: 5 } }
                  ],
                  line: 1100
                },
                '53': {
                  loc: {
                    start: { line: 1100, column: 8 },
                    end: { line: 1100, column: 38 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1100, column: 8 }, end: { line: 1100, column: 13 } },
                    { start: { line: 1100, column: 17 }, end: { line: 1100, column: 38 } }
                  ],
                  line: 1100
                },
                '54': {
                  loc: { start: { line: 1103, column: 9 }, end: { line: 1109, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1103, column: 9 }, end: { line: 1109, column: 3 } },
                    { start: { line: 1103, column: 9 }, end: { line: 1109, column: 3 } }
                  ],
                  line: 1103
                },
                '55': {
                  loc: { start: { line: 1104, column: 4 }, end: { line: 1106, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1104, column: 4 }, end: { line: 1106, column: 5 } },
                    { start: { line: 1104, column: 4 }, end: { line: 1106, column: 5 } }
                  ],
                  line: 1104
                },
                '56': {
                  loc: {
                    start: { line: 1104, column: 8 },
                    end: { line: 1104, column: 40 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1104, column: 8 }, end: { line: 1104, column: 13 } },
                    { start: { line: 1104, column: 17 }, end: { line: 1104, column: 40 } }
                  ],
                  line: 1104
                },
                '57': {
                  loc: { start: { line: 1107, column: 9 }, end: { line: 1109, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1107, column: 9 }, end: { line: 1109, column: 3 } },
                    { start: { line: 1107, column: 9 }, end: { line: 1109, column: 3 } }
                  ],
                  line: 1107
                },
                '58': {
                  loc: { start: { line: 1116, column: 2 }, end: { line: 1118, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1116, column: 2 }, end: { line: 1118, column: 3 } },
                    { start: { line: 1116, column: 2 }, end: { line: 1118, column: 3 } }
                  ],
                  line: 1116
                },
                '59': {
                  loc: {
                    start: { line: 1116, column: 6 },
                    end: { line: 1116, column: 38 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1116, column: 6 }, end: { line: 1116, column: 12 } },
                    { start: { line: 1116, column: 16 }, end: { line: 1116, column: 38 } }
                  ],
                  line: 1116
                },
                '60': {
                  loc: { start: { line: 1126, column: 2 }, end: { line: 1140, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1126, column: 2 }, end: { line: 1140, column: 3 } },
                    { start: { line: 1126, column: 2 }, end: { line: 1140, column: 3 } }
                  ],
                  line: 1126
                },
                '61': {
                  loc: { start: { line: 1127, column: 4 }, end: { line: 1139, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1127, column: 4 }, end: { line: 1139, column: 5 } },
                    { start: { line: 1127, column: 4 }, end: { line: 1139, column: 5 } }
                  ],
                  line: 1127
                },
                '62': {
                  loc: { start: { line: 1146, column: 2 }, end: { line: 1152, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1146, column: 2 }, end: { line: 1152, column: 3 } },
                    { start: { line: 1146, column: 2 }, end: { line: 1152, column: 3 } }
                  ],
                  line: 1146
                },
                '63': {
                  loc: { start: { line: 1158, column: 2 }, end: { line: 1164, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1158, column: 2 }, end: { line: 1164, column: 3 } },
                    { start: { line: 1158, column: 2 }, end: { line: 1164, column: 3 } }
                  ],
                  line: 1158
                },
                '64': {
                  loc: { start: { line: 1170, column: 2 }, end: { line: 1176, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1170, column: 2 }, end: { line: 1176, column: 3 } },
                    { start: { line: 1170, column: 2 }, end: { line: 1176, column: 3 } }
                  ],
                  line: 1170
                },
                '65': {
                  loc: { start: { line: 1182, column: 2 }, end: { line: 1188, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1182, column: 2 }, end: { line: 1188, column: 3 } },
                    { start: { line: 1182, column: 2 }, end: { line: 1188, column: 3 } }
                  ],
                  line: 1182
                },
                '66': {
                  loc: { start: { line: 1193, column: 2 }, end: { line: 1199, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1193, column: 2 }, end: { line: 1199, column: 3 } },
                    { start: { line: 1193, column: 2 }, end: { line: 1199, column: 3 } }
                  ],
                  line: 1193
                },
                '67': {
                  loc: { start: { line: 1205, column: 2 }, end: { line: 1212, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1205, column: 2 }, end: { line: 1212, column: 3 } },
                    { start: { line: 1205, column: 2 }, end: { line: 1212, column: 3 } }
                  ],
                  line: 1205
                },
                '68': {
                  loc: { start: { line: 1217, column: 2 }, end: { line: 1222, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1217, column: 2 }, end: { line: 1222, column: 3 } },
                    { start: { line: 1217, column: 2 }, end: { line: 1222, column: 3 } }
                  ],
                  line: 1217
                },
                '69': {
                  loc: {
                    start: { line: 1230, column: 4 },
                    end: { line: 1230, column: 44 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1230, column: 4 }, end: { line: 1230, column: 44 } },
                    { start: { line: 1230, column: 4 }, end: { line: 1230, column: 44 } }
                  ],
                  line: 1230
                },
                '70': {
                  loc: { start: { line: 1252, column: 2 }, end: { line: 1254, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1252, column: 2 }, end: { line: 1254, column: 3 } },
                    { start: { line: 1252, column: 2 }, end: { line: 1254, column: 3 } }
                  ],
                  line: 1252
                },
                '71': {
                  loc: {
                    start: { line: 1335, column: 2 },
                    end: { line: 1335, column: 45 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1335, column: 2 }, end: { line: 1335, column: 45 } },
                    { start: { line: 1335, column: 2 }, end: { line: 1335, column: 45 } }
                  ],
                  line: 1335
                },
                '72': {
                  loc: { start: { line: 1337, column: 2 }, end: { line: 1340, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1337, column: 2 }, end: { line: 1340, column: 3 } },
                    { start: { line: 1337, column: 2 }, end: { line: 1340, column: 3 } }
                  ],
                  line: 1337
                },
                '73': {
                  loc: {
                    start: { line: 1338, column: 22 },
                    end: { line: 1338, column: 42 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1338, column: 22 }, end: { line: 1338, column: 26 } },
                    { start: { line: 1338, column: 30 }, end: { line: 1338, column: 42 } }
                  ],
                  line: 1338
                },
                '74': {
                  loc: {
                    start: { line: 1339, column: 37 },
                    end: { line: 1339, column: 65 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1339, column: 37 }, end: { line: 1339, column: 42 } },
                    { start: { line: 1339, column: 46 }, end: { line: 1339, column: 65 } }
                  ],
                  line: 1339
                },
                '75': {
                  loc: {
                    start: { line: 1348, column: 2 },
                    end: { line: 1348, column: 41 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1348, column: 2 }, end: { line: 1348, column: 41 } },
                    { start: { line: 1348, column: 2 }, end: { line: 1348, column: 41 } }
                  ],
                  line: 1348
                },
                '76': {
                  loc: {
                    start: { line: 1350, column: 4 },
                    end: { line: 1350, column: 36 }
                  },
                  type: 'if',
                  locations: [
                    { start: { line: 1350, column: 4 }, end: { line: 1350, column: 36 } },
                    { start: { line: 1350, column: 4 }, end: { line: 1350, column: 36 } }
                  ],
                  line: 1350
                },
                '77': {
                  loc: { start: { line: 1373, column: 2 }, end: { line: 1398, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1373, column: 2 }, end: { line: 1398, column: 3 } },
                    { start: { line: 1373, column: 2 }, end: { line: 1398, column: 3 } }
                  ],
                  line: 1373
                },
                '78': {
                  loc: { start: { line: 1375, column: 9 }, end: { line: 1398, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1375, column: 9 }, end: { line: 1398, column: 3 } },
                    { start: { line: 1375, column: 9 }, end: { line: 1398, column: 3 } }
                  ],
                  line: 1375
                },
                '79': {
                  loc: {
                    start: { line: 1391, column: 13 },
                    end: { line: 1391, column: 63 }
                  },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 1391, column: 13 }, end: { line: 1391, column: 25 } },
                    { start: { line: 1391, column: 29 }, end: { line: 1391, column: 63 } }
                  ],
                  line: 1391
                },
                '80': {
                  loc: { start: { line: 1386, column: 6 }, end: { line: 1390, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1386, column: 6 }, end: { line: 1390, column: 7 } },
                    { start: { line: 1386, column: 6 }, end: { line: 1390, column: 7 } }
                  ],
                  line: 1386
                },
                '81': {
                  loc: { start: { line: 1423, column: 2 }, end: { line: 1426, column: 6 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1423, column: 2 }, end: { line: 1426, column: 6 } },
                    { start: { line: 1423, column: 2 }, end: { line: 1426, column: 6 } }
                  ],
                  line: 1423
                },
                '82': {
                  loc: { start: { line: 1440, column: 4 }, end: { line: 1442, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 1440, column: 4 }, end: { line: 1442, column: 5 } },
                    { start: { line: 1440, column: 4 }, end: { line: 1442, column: 5 } }
                  ],
                  line: 1440
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0,
                '118': 0,
                '119': 0,
                '120': 0,
                '121': 0,
                '122': 0,
                '123': 0,
                '124': 0,
                '125': 0,
                '126': 0,
                '127': 0,
                '128': 0,
                '129': 0,
                '130': 0,
                '131': 0,
                '132': 0,
                '133': 0,
                '134': 0,
                '135': 0,
                '136': 0,
                '137': 0,
                '138': 0,
                '139': 0,
                '140': 0,
                '141': 0,
                '142': 0,
                '143': 0,
                '144': 0,
                '145': 0,
                '146': 0,
                '147': 0,
                '148': 0,
                '149': 0,
                '150': 0,
                '151': 0,
                '152': 0,
                '153': 0,
                '154': 0,
                '155': 0,
                '156': 0,
                '157': 0,
                '158': 0,
                '159': 0,
                '160': 0,
                '161': 0,
                '162': 0,
                '163': 0,
                '164': 0,
                '165': 0,
                '166': 0,
                '167': 0,
                '168': 0,
                '169': 0,
                '170': 0,
                '171': 0,
                '172': 0,
                '173': 0,
                '174': 0,
                '175': 0,
                '176': 0,
                '177': 0,
                '178': 0,
                '179': 0,
                '180': 0,
                '181': 0,
                '182': 0,
                '183': 0,
                '184': 0,
                '185': 0,
                '186': 0,
                '187': 0,
                '188': 0,
                '189': 0,
                '190': 0,
                '191': 0,
                '192': 0,
                '193': 0,
                '194': 0,
                '195': 0,
                '196': 0,
                '197': 0,
                '198': 0,
                '199': 0,
                '200': 0,
                '201': 0,
                '202': 0,
                '203': 0,
                '204': 0,
                '205': 0,
                '206': 0,
                '207': 0,
                '208': 0,
                '209': 0,
                '210': 0,
                '211': 0,
                '212': 0,
                '213': 0,
                '214': 0,
                '215': 0,
                '216': 0,
                '217': 0,
                '218': 0,
                '219': 0,
                '220': 0,
                '221': 0,
                '222': 0,
                '223': 0,
                '224': 0,
                '225': 0,
                '226': 0,
                '227': 0,
                '228': 0,
                '229': 0,
                '230': 0,
                '231': 0,
                '232': 0,
                '233': 0,
                '234': 0,
                '235': 0,
                '236': 0,
                '237': 0,
                '238': 0,
                '239': 0,
                '240': 0,
                '241': 0,
                '242': 0,
                '243': 0,
                '244': 0,
                '245': 0,
                '246': 0,
                '247': 0,
                '248': 0,
                '249': 0,
                '250': 0,
                '251': 0,
                '252': 0,
                '253': 0,
                '254': 0,
                '255': 0,
                '256': 0,
                '257': 0,
                '258': 0,
                '259': 0,
                '260': 0,
                '261': 0,
                '262': 0,
                '263': 0,
                '264': 0,
                '265': 0,
                '266': 0,
                '267': 0,
                '268': 0,
                '269': 0,
                '270': 0,
                '271': 0,
                '272': 0,
                '273': 0,
                '274': 0,
                '275': 0,
                '276': 0,
                '277': 0,
                '278': 0,
                '279': 0,
                '280': 0,
                '281': 0,
                '282': 0,
                '283': 0,
                '284': 0,
                '285': 0,
                '286': 0,
                '287': 0,
                '288': 0,
                '289': 0,
                '290': 0,
                '291': 0,
                '292': 0,
                '293': 0,
                '294': 0,
                '295': 0,
                '296': 0,
                '297': 0,
                '298': 0,
                '299': 0,
                '300': 0,
                '301': 0,
                '302': 0,
                '303': 0,
                '304': 0,
                '305': 0,
                '306': 0,
                '307': 0,
                '308': 0,
                '309': 0,
                '310': 0,
                '311': 0,
                '312': 0,
                '313': 0,
                '314': 0,
                '315': 0,
                '316': 0,
                '317': 0,
                '318': 0,
                '319': 0,
                '320': 0,
                '321': 0,
                '322': 0,
                '323': 0,
                '324': 0,
                '325': 0,
                '326': 0,
                '327': 0,
                '328': 0,
                '329': 0,
                '330': 0,
                '331': 0,
                '332': 0,
                '333': 0,
                '334': 0,
                '335': 0,
                '336': 0,
                '337': 0,
                '338': 0,
                '339': 0,
                '340': 0,
                '341': 0,
                '342': 0,
                '343': 0,
                '344': 0,
                '345': 0,
                '346': 0,
                '347': 0,
                '348': 0,
                '349': 0,
                '350': 0,
                '351': 0,
                '352': 0,
                '353': 0,
                '354': 0,
                '355': 0,
                '356': 0,
                '357': 0,
                '358': 0,
                '359': 0,
                '360': 0,
                '361': 0,
                '362': 0,
                '363': 0,
                '364': 0,
                '365': 0,
                '366': 0,
                '367': 0,
                '368': 0,
                '369': 0,
                '370': 0,
                '371': 0,
                '372': 0,
                '373': 0,
                '374': 0,
                '375': 0,
                '376': 0,
                '377': 0,
                '378': 0,
                '379': 0,
                '380': 0,
                '381': 0,
                '382': 0,
                '383': 0,
                '384': 0,
                '385': 0,
                '386': 0,
                '387': 0,
                '388': 0,
                '389': 0,
                '390': 0,
                '391': 0,
                '392': 0,
                '393': 0,
                '394': 0,
                '395': 0,
                '396': 0,
                '397': 0,
                '398': 0,
                '399': 0,
                '400': 0,
                '401': 0,
                '402': 0,
                '403': 0,
                '404': 0,
                '405': 0,
                '406': 0,
                '407': 0,
                '408': 0,
                '409': 0,
                '410': 0,
                '411': 0,
                '412': 0,
                '413': 0,
                '414': 0,
                '415': 0,
                '416': 0,
                '417': 0,
                '418': 0,
                '419': 0,
                '420': 0,
                '421': 0,
                '422': 0,
                '423': 0,
                '424': 0,
                '425': 0,
                '426': 0,
                '427': 0,
                '428': 0,
                '429': 0,
                '430': 0,
                '431': 0,
                '432': 0,
                '433': 0,
                '434': 0,
                '435': 0,
                '436': 0,
                '437': 0,
                '438': 0,
                '439': 0,
                '440': 0,
                '441': 0,
                '442': 0,
                '443': 0,
                '444': 0,
                '445': 0,
                '446': 0,
                '447': 0,
                '448': 0,
                '449': 0,
                '450': 0,
                '451': 0,
                '452': 0,
                '453': 0,
                '454': 0,
                '455': 0,
                '456': 0,
                '457': 0,
                '458': 0,
                '459': 0,
                '460': 0,
                '461': 0,
                '462': 0,
                '463': 0,
                '464': 0,
                '465': 0,
                '466': 0,
                '467': 0,
                '468': 0,
                '469': 0,
                '470': 0,
                '471': 0,
                '472': 0,
                '473': 0,
                '474': 0,
                '475': 0,
                '476': 0,
                '477': 0,
                '478': 0,
                '479': 0,
                '480': 0,
                '481': 0,
                '482': 0,
                '483': 0,
                '484': 0,
                '485': 0,
                '486': 0,
                '487': 0,
                '488': 0,
                '489': 0,
                '490': 0,
                '491': 0,
                '492': 0,
                '493': 0,
                '494': 0,
                '495': 0,
                '496': 0,
                '497': 0,
                '498': 0,
                '499': 0,
                '500': 0,
                '501': 0,
                '502': 0,
                '503': 0,
                '504': 0,
                '505': 0,
                '506': 0,
                '507': 0,
                '508': 0,
                '509': 0,
                '510': 0,
                '511': 0,
                '512': 0,
                '513': 0,
                '514': 0,
                '515': 0,
                '516': 0,
                '517': 0,
                '518': 0,
                '519': 0,
                '520': 0,
                '521': 0,
                '522': 0,
                '523': 0,
                '524': 0,
                '525': 0,
                '526': 0,
                '527': 0,
                '528': 0,
                '529': 0,
                '530': 0,
                '531': 0,
                '532': 0,
                '533': 0,
                '534': 0,
                '535': 0,
                '536': 0,
                '537': 0,
                '538': 0,
                '539': 0,
                '540': 0,
                '541': 0,
                '542': 0,
                '543': 0,
                '544': 0,
                '545': 0,
                '546': 0,
                '547': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0],
                '20': [0, 0],
                '21': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                '22': [0, 0],
                '23': [0, 0, 0, 0, 0],
                '24': [0, 0],
                '25': [0, 0],
                '26': [0, 0],
                '27': [0, 0],
                '28': [0, 0],
                '29': [0, 0],
                '30': [0, 0],
                '31': [0, 0],
                '32': [0, 0],
                '33': [0, 0],
                '34': [0, 0],
                '35': [0, 0],
                '36': [0, 0],
                '37': [0, 0],
                '38': [0, 0],
                '39': [0, 0],
                '40': [0, 0],
                '41': [0, 0],
                '42': [0, 0],
                '43': [0, 0],
                '44': [0, 0],
                '45': [0, 0],
                '46': [0, 0],
                '47': [0, 0],
                '48': [0, 0],
                '49': [0, 0],
                '50': [0, 0],
                '51': [0, 0],
                '52': [0, 0],
                '53': [0, 0],
                '54': [0, 0],
                '55': [0, 0],
                '56': [0, 0],
                '57': [0, 0],
                '58': [0, 0],
                '59': [0, 0],
                '60': [0, 0],
                '61': [0, 0],
                '62': [0, 0],
                '63': [0, 0],
                '64': [0, 0],
                '65': [0, 0],
                '66': [0, 0],
                '67': [0, 0],
                '68': [0, 0],
                '69': [0, 0],
                '70': [0, 0],
                '71': [0, 0],
                '72': [0, 0],
                '73': [0, 0],
                '74': [0, 0],
                '75': [0, 0],
                '76': [0, 0],
                '77': [0, 0],
                '78': [0, 0],
                '79': [0, 0],
                '80': [0, 0],
                '81': [0, 0],
                '82': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: 'bd2f690d67c2aa4734a515c7619d8816ef7b7e80'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.symbol');
          _dereq_('core-js/modules/es.symbol.description');
          _dereq_('core-js/modules/es.symbol.iterator');
          _dereq_('core-js/modules/es.array.concat');
          _dereq_('core-js/modules/es.array.fill');
          _dereq_('core-js/modules/es.array.filter');
          _dereq_('core-js/modules/es.array.from');
          _dereq_('core-js/modules/es.array.includes');
          _dereq_('core-js/modules/es.array.iterator');
          _dereq_('core-js/modules/es.array.slice');
          _dereq_('core-js/modules/es.object.assign');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.regexp.to-string');
          _dereq_('core-js/modules/es.string.includes');
          _dereq_('core-js/modules/es.string.iterator');
          _dereq_('core-js/modules/es.typed-array.float32-array');
          _dereq_('core-js/modules/es.typed-array.float64-array');
          _dereq_('core-js/modules/es.typed-array.int16-array');
          _dereq_('core-js/modules/es.typed-array.uint8-array');
          _dereq_('core-js/modules/es.typed-array.uint16-array');
          _dereq_('core-js/modules/es.typed-array.uint32-array');
          _dereq_('core-js/modules/es.typed-array.copy-within');
          _dereq_('core-js/modules/es.typed-array.every');
          _dereq_('core-js/modules/es.typed-array.fill');
          _dereq_('core-js/modules/es.typed-array.filter');
          _dereq_('core-js/modules/es.typed-array.find');
          _dereq_('core-js/modules/es.typed-array.find-index');
          _dereq_('core-js/modules/es.typed-array.for-each');
          _dereq_('core-js/modules/es.typed-array.includes');
          _dereq_('core-js/modules/es.typed-array.index-of');
          _dereq_('core-js/modules/es.typed-array.iterator');
          _dereq_('core-js/modules/es.typed-array.join');
          _dereq_('core-js/modules/es.typed-array.last-index-of');
          _dereq_('core-js/modules/es.typed-array.map');
          _dereq_('core-js/modules/es.typed-array.reduce');
          _dereq_('core-js/modules/es.typed-array.reduce-right');
          _dereq_('core-js/modules/es.typed-array.reverse');
          _dereq_('core-js/modules/es.typed-array.set');
          _dereq_('core-js/modules/es.typed-array.slice');
          _dereq_('core-js/modules/es.typed-array.some');
          _dereq_('core-js/modules/es.typed-array.sort');
          _dereq_('core-js/modules/es.typed-array.subarray');
          _dereq_('core-js/modules/es.typed-array.to-locale-string');
          _dereq_('core-js/modules/es.typed-array.to-string');
          _dereq_('core-js/modules/web.dom-collections.iterator');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;
          var _main = _interopRequireDefault(_dereq_('../core/main'));
          var constants = _interopRequireWildcard(_dereq_('../core/constants'));
          var _libtess = _interopRequireDefault(_dereq_('libtess'));
          _dereq_('./p5.Shader');
          _dereq_('./p5.Camera');
          _dereq_('../core/p5.Renderer');
          _dereq_('./p5.Matrix');

          var _path = _dereq_('path');
          function _getRequireWildcardCache() {
            if (typeof WeakMap !== 'function') return null;
            var cache = new WeakMap();
            _getRequireWildcardCache = function _getRequireWildcardCache() {
              return cache;
            };
            return cache;
          }
          function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
              return obj;
            }
            if (obj === null || (_typeof(obj) !== 'object' && typeof obj !== 'function')) {
              return { default: obj };
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
              return cache.get(obj);
            }
            var newObj = {};
            var hasPropertyDescriptor =
              Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
              if (Object.prototype.hasOwnProperty.call(obj, key)) {
                var desc = hasPropertyDescriptor
                  ? Object.getOwnPropertyDescriptor(obj, key)
                  : null;
                if (desc && (desc.get || desc.set)) {
                  Object.defineProperty(newObj, key, desc);
                } else {
                  newObj[key] = obj[key];
                }
              }
            }
            newObj.default = obj;
            if (cache) {
              cache.set(obj, newObj);
            }
            return newObj;
          }
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          function _toConsumableArray(arr) {
            return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();
          }
          function _nonIterableSpread() {
            throw new TypeError('Invalid attempt to spread non-iterable instance');
          }
          function _iterableToArray(iter) {
            if (
              Symbol.iterator in Object(iter) ||
              Object.prototype.toString.call(iter) === '[object Arguments]'
            )
              return Array.from(iter);
          }
          function _arrayWithoutHoles(arr) {
            if (Array.isArray(arr)) {
              for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {
                arr2[i] = arr[i];
              }
              return arr2;
            }
          }

          var lightingShader = (cov_1exsq9czgt.s[0]++,
          'precision highp float;\nprecision highp int;\n\nuniform mat4 uViewMatrix;\n\nuniform bool uUseLighting;\n\nuniform int uAmbientLightCount;\nuniform vec3 uAmbientColor[5];\n\nuniform int uDirectionalLightCount;\nuniform vec3 uLightingDirection[5];\nuniform vec3 uDirectionalDiffuseColors[5];\nuniform vec3 uDirectionalSpecularColors[5];\n\nuniform int uPointLightCount;\nuniform vec3 uPointLightLocation[5];\nuniform vec3 uPointLightDiffuseColors[5];\t\nuniform vec3 uPointLightSpecularColors[5];\n\nuniform int uSpotLightCount;\nuniform float uSpotLightAngle[5];\nuniform float uSpotLightConc[5];\nuniform vec3 uSpotLightDiffuseColors[5];\nuniform vec3 uSpotLightSpecularColors[5];\nuniform vec3 uSpotLightLocation[5];\nuniform vec3 uSpotLightDirection[5];\n\nuniform bool uSpecular;\nuniform float uShininess;\n\nuniform float uConstantAttenuation;\nuniform float uLinearAttenuation;\nuniform float uQuadraticAttenuation;\n\nconst float specularFactor = 2.0;\nconst float diffuseFactor = 0.73;\n\nstruct LightResult {\n  float specular;\n  float diffuse;\n};\n\nfloat _phongSpecular(\n  vec3 lightDirection,\n  vec3 viewDirection,\n  vec3 surfaceNormal,\n  float shininess) {\n\n  vec3 R = reflect(lightDirection, surfaceNormal);\n  return pow(max(0.0, dot(R, viewDirection)), shininess);\n}\n\nfloat _lambertDiffuse(vec3 lightDirection, vec3 surfaceNormal) {\n  return max(0.0, dot(-lightDirection, surfaceNormal));\n}\n\nLightResult _light(vec3 viewDirection, vec3 normal, vec3 lightVector) {\n\n  vec3 lightDir = normalize(lightVector);\n\n  //compute our diffuse & specular terms\n  LightResult lr;\n  if (uSpecular)\n    lr.specular = _phongSpecular(lightDir, viewDirection, normal, uShininess);\n  lr.diffuse = _lambertDiffuse(lightDir, normal);\n  return lr;\n}\n\nvoid totalLight(\n  vec3 modelPosition,\n  vec3 normal,\n  out vec3 totalDiffuse,\n  out vec3 totalSpecular\n) {\n\n  totalSpecular = vec3(0.0);\n\n  if (!uUseLighting) {\n    totalDiffuse = vec3(1.0);\n    return;\n  }\n\n  totalDiffuse = vec3(0.0);\n\n  vec3 viewDirection = normalize(-modelPosition);\n\n  for (int j = 0; j < 5; j++) {\n    if (j < uDirectionalLightCount) {\n      vec3 lightVector = (uViewMatrix * vec4(uLightingDirection[j], 0.0)).xyz;\n      vec3 lightColor = uDirectionalDiffuseColors[j];\n      vec3 specularColor = uDirectionalSpecularColors[j];\n      LightResult result = _light(viewDirection, normal, lightVector);\n      totalDiffuse += result.diffuse * lightColor;\n      totalSpecular += result.specular * lightColor * specularColor;\n    }\n\n    if (j < uPointLightCount) {\n      vec3 lightPosition = (uViewMatrix * vec4(uPointLightLocation[j], 1.0)).xyz;\n      vec3 lightVector = modelPosition - lightPosition;\n    \n      //calculate attenuation\n      float lightDistance = length(lightVector);\n      float lightFalloff = 1.0 / (uConstantAttenuation + lightDistance * uLinearAttenuation + (lightDistance * lightDistance) * uQuadraticAttenuation);\n      vec3 lightColor = lightFalloff * uPointLightDiffuseColors[j];\n      vec3 specularColor = lightFalloff * uPointLightSpecularColors[j];\n\n      LightResult result = _light(viewDirection, normal, lightVector);\n      totalDiffuse += result.diffuse * lightColor;\n      totalSpecular += result.specular * lightColor * specularColor;\n    }\n\n    if(j < uSpotLightCount) {\n      vec3 lightPosition = (uViewMatrix * vec4(uSpotLightLocation[j], 1.0)).xyz;\n      vec3 lightVector = modelPosition - lightPosition;\n    \n      float lightDistance = length(lightVector);\n      float lightFalloff = 1.0 / (uConstantAttenuation + lightDistance * uLinearAttenuation + (lightDistance * lightDistance) * uQuadraticAttenuation);\n\n      vec3 lightDirection = (uViewMatrix * vec4(uSpotLightDirection[j], 0.0)).xyz;\n      float spotDot = dot(normalize(lightVector), normalize(lightDirection));\n      float spotFalloff;\n      if(spotDot < uSpotLightAngle[j]) {\n        spotFalloff = 0.0;\n      }\n      else {\n        spotFalloff = pow(spotDot, uSpotLightConc[j]);\n      }\n      lightFalloff *= spotFalloff;\n\n      vec3 lightColor = uSpotLightDiffuseColors[j];\n      vec3 specularColor = uSpotLightSpecularColors[j];\n     \n      LightResult result = _light(viewDirection, normal, lightVector);\n      \n      totalDiffuse += result.diffuse * lightColor * lightFalloff;\n      totalSpecular += result.specular * lightColor * specularColor * lightFalloff;\n    }\n  }\n\n  totalDiffuse *= diffuseFactor;\n  totalSpecular *= specularFactor;\n}\n');

          var defaultShaders = (cov_1exsq9czgt.s[1]++,
          {
            immediateVert:
              'attribute vec3 aPosition;\nattribute vec4 aVertexColor;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform float uResolution;\nuniform float uPointSize;\n\nvarying vec4 vColor;\nvoid main(void) {\n  vec4 positionVec4 = vec4(aPosition, 1.0);\n  gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n  vColor = aVertexColor;\n  gl_PointSize = uPointSize;\n}\n',

            vertexColorVert:
              'attribute vec3 aPosition;\nattribute vec4 aVertexColor;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\n\nvarying vec4 vColor;\n\nvoid main(void) {\n  vec4 positionVec4 = vec4(aPosition, 1.0);\n  gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n  vColor = aVertexColor;\n}\n',

            vertexColorFrag:
              'precision mediump float;\nvarying vec4 vColor;\nvoid main(void) {\n  gl_FragColor = vColor;\n}',

            normalVert:
              'attribute vec3 aPosition;\nattribute vec3 aNormal;\nattribute vec2 aTexCoord;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform mat3 uNormalMatrix;\n\nvarying vec3 vVertexNormal;\nvarying highp vec2 vVertTexCoord;\n\nvoid main(void) {\n  vec4 positionVec4 = vec4(aPosition, 1.0);\n  gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n  vVertexNormal = normalize(vec3( uNormalMatrix * aNormal ));\n  vVertTexCoord = aTexCoord;\n}\n',
            normalFrag:
              'precision mediump float;\nvarying vec3 vVertexNormal;\nvoid main(void) {\n  gl_FragColor = vec4(vVertexNormal, 1.0);\n}',
            basicFrag:
              'precision mediump float;\nuniform vec4 uMaterialColor;\nvoid main(void) {\n  gl_FragColor = uMaterialColor;\n}',
            lightVert:
              lightingShader +
              '// include lighting.glgl\n\nattribute vec3 aPosition;\nattribute vec3 aNormal;\nattribute vec2 aTexCoord;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform mat3 uNormalMatrix;\n\nvarying highp vec2 vVertTexCoord;\nvarying vec3 vDiffuseColor;\nvarying vec3 vSpecularColor;\n\nvoid main(void) {\n\n  vec4 viewModelPosition = uModelViewMatrix * vec4(aPosition, 1.0);\n  gl_Position = uProjectionMatrix * viewModelPosition;\n\n  vec3 vertexNormal = normalize(uNormalMatrix * aNormal);\n  vVertTexCoord = aTexCoord;\n\n  totalLight(viewModelPosition.xyz, vertexNormal, vDiffuseColor, vSpecularColor);\n\n  for (int i = 0; i < 8; i++) {\n    if (i < uAmbientLightCount) {\n      vDiffuseColor += uAmbientColor[i];\n    }\n  }\n}\n',

            lightTextureFrag:
              'precision highp float;\n\nuniform vec4 uMaterialColor;\nuniform vec4 uTint;\nuniform sampler2D uSampler;\nuniform bool isTexture;\nuniform bool uEmissive;\n\nvarying highp vec2 vVertTexCoord;\nvarying vec3 vDiffuseColor;\nvarying vec3 vSpecularColor;\n\nvoid main(void) {\n  if(uEmissive && !isTexture) {\n    gl_FragColor = uMaterialColor;\n  }\n  else {\n    gl_FragColor = isTexture ? texture2D(uSampler, vVertTexCoord) * (uTint / vec4(255, 255, 255, 255)) : uMaterialColor;\n    gl_FragColor.rgb = gl_FragColor.rgb * vDiffuseColor + vSpecularColor;\n  }\n}',

            phongVert:
              'precision highp float;\nprecision highp int;\n\nattribute vec3 aPosition;\nattribute vec3 aNormal;\nattribute vec2 aTexCoord;\n\nuniform vec3 uAmbientColor[5];\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform mat3 uNormalMatrix;\nuniform int uAmbientLightCount;\n\nvarying vec3 vNormal;\nvarying vec2 vTexCoord;\nvarying vec3 vViewPosition;\nvarying vec3 vAmbientColor;\n\nvoid main(void) {\n\n  vec4 viewModelPosition = uModelViewMatrix * vec4(aPosition, 1.0);\n\n  // Pass varyings to fragment shader\n  vViewPosition = viewModelPosition.xyz;\n  gl_Position = uProjectionMatrix * viewModelPosition;  \n\n  vNormal = uNormalMatrix * aNormal;\n  vTexCoord = aTexCoord;\n\n  // TODO: this should be a uniform\n  vAmbientColor = vec3(0.0);\n  for (int i = 0; i < 5; i++) {\n    if (i < uAmbientLightCount) {\n      vAmbientColor += uAmbientColor[i];\n    }\n  }\n}\n',
            phongFrag:
              lightingShader +
              '// include lighting.glsl\nprecision highp float;\nprecision highp int;\n\nuniform vec4 uMaterialColor;\nuniform vec4 uTint;\nuniform sampler2D uSampler;\nuniform bool isTexture;\nuniform bool uEmissive;\n\nvarying vec3 vNormal;\nvarying vec2 vTexCoord;\nvarying vec3 vViewPosition;\nvarying vec3 vAmbientColor;\n\nvoid main(void) {\n\n  vec3 diffuse;\n  vec3 specular;\n  totalLight(vViewPosition, normalize(vNormal), diffuse, specular);\n\n  if(uEmissive && !isTexture) {\n    gl_FragColor = uMaterialColor;\n  }\n  else {\n    gl_FragColor = isTexture ? texture2D(uSampler, vTexCoord) * (uTint / vec4(255, 255, 255, 255)) : uMaterialColor;\n    gl_FragColor.rgb = gl_FragColor.rgb * (diffuse + vAmbientColor) + specular;\n  }\n}',

            fontVert:
              "precision mediump float;\n\nattribute vec3 aPosition;\nattribute vec2 aTexCoord;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\n\nuniform vec4 uGlyphRect;\nuniform float uGlyphOffset;\n\nvarying vec2 vTexCoord;\nvarying float w;\n\nvoid main() {\n  vec4 positionVec4 = vec4(aPosition, 1.0);\n\n  // scale by the size of the glyph's rectangle\n  positionVec4.xy *= uGlyphRect.zw - uGlyphRect.xy;\n\n  // move to the corner of the glyph\n  positionVec4.xy += uGlyphRect.xy;\n\n  // move to the letter's line offset\n  positionVec4.x += uGlyphOffset;\n  \n  gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n  vTexCoord = aTexCoord;\n  w = gl_Position.w;\n}\n",
            fontFrag:
              "#extension GL_OES_standard_derivatives : enable\nprecision mediump float;\n\n#if 0\n  // simulate integer math using floats\n\t#define int float\n\t#define ivec2 vec2\n\t#define INT(x) float(x)\n\n\tint ifloor(float v) { return floor(v); }\n\tivec2 ifloor(vec2 v) { return floor(v); }\n\n#else\n  // use native integer math\n\tprecision highp int;\n\t#define INT(x) x\n\n\tint ifloor(float v) { return int(v); }\n\tint ifloor(int v) { return v; }\n\tivec2 ifloor(vec2 v) { return ivec2(v); }\n\n#endif\n\nuniform sampler2D uSamplerStrokes;\nuniform sampler2D uSamplerRowStrokes;\nuniform sampler2D uSamplerRows;\nuniform sampler2D uSamplerColStrokes;\nuniform sampler2D uSamplerCols;\n\nuniform ivec2 uStrokeImageSize;\nuniform ivec2 uCellsImageSize;\nuniform ivec2 uGridImageSize;\n\nuniform ivec2 uGridOffset;\nuniform ivec2 uGridSize;\nuniform vec4 uMaterialColor;\n\nvarying vec2 vTexCoord;\n\n// some helper functions\nint round(float v) { return ifloor(v + 0.5); }\nivec2 round(vec2 v) { return ifloor(v + 0.5); }\nfloat saturate(float v) { return clamp(v, 0.0, 1.0); }\nvec2 saturate(vec2 v) { return clamp(v, 0.0, 1.0); }\n\nint mul(float v1, int v2) {\n  return ifloor(v1 * float(v2));\n}\n\nivec2 mul(vec2 v1, ivec2 v2) {\n  return ifloor(v1 * vec2(v2) + 0.5);\n}\n\n// unpack a 16-bit integer from a float vec2\nint getInt16(vec2 v) {\n  ivec2 iv = round(v * 255.0);\n  return iv.x * INT(128) + iv.y;\n}\n\nvec2 pixelScale;\nvec2 coverage = vec2(0.0);\nvec2 weight = vec2(0.5);\nconst float minDistance = 1.0/8192.0;\nconst float hardness = 1.05; // amount of antialias\n\n// the maximum number of curves in a glyph\nconst int N = INT(250);\n\n// retrieves an indexed pixel from a sampler\nvec4 getTexel(sampler2D sampler, int pos, ivec2 size) {\n  int width = size.x;\n  int y = ifloor(pos / width);\n  int x = pos - y * width;  // pos % width\n\n  return texture2D(sampler, (vec2(x, y) + 0.5) / vec2(size));\n}\n\nvoid calulateCrossings(vec2 p0, vec2 p1, vec2 p2, out vec2 C1, out vec2 C2) {\n\n  // get the coefficients of the quadratic in t\n  vec2 a = p0 - p1 * 2.0 + p2;\n  vec2 b = p0 - p1;\n  vec2 c = p0 - vTexCoord;\n\n  // found out which values of 't' it crosses the axes\n  vec2 surd = sqrt(max(vec2(0.0), b * b - a * c));\n  vec2 t1 = ((b - surd) / a).yx;\n  vec2 t2 = ((b + surd) / a).yx;\n\n  // approximate straight lines to avoid rounding errors\n  if (abs(a.y) < 0.001)\n    t1.x = t2.x = c.y / (2.0 * b.y);\n\n  if (abs(a.x) < 0.001)\n    t1.y = t2.y = c.x / (2.0 * b.x);\n\n  // plug into quadratic formula to find the corrdinates of the crossings\n  C1 = ((a * t1 - b * 2.0) * t1 + c) * pixelScale;\n  C2 = ((a * t2 - b * 2.0) * t2 + c) * pixelScale;\n}\n\nvoid coverageX(vec2 p0, vec2 p1, vec2 p2) {\n\n  vec2 C1, C2;\n  calulateCrossings(p0, p1, p2, C1, C2);\n\n  // determine on which side of the x-axis the points lie\n  bool y0 = p0.y > vTexCoord.y;\n  bool y1 = p1.y > vTexCoord.y;\n  bool y2 = p2.y > vTexCoord.y;\n\n  // could web be under the curve (after t1)?\n  if (y1 ? !y2 : y0) {\n    // add the coverage for t1\n    coverage.x += saturate(C1.x + 0.5);\n    // calculate the anti-aliasing for t1\n    weight.x = min(weight.x, abs(C1.x));\n  }\n\n  // are we outside the curve (after t2)?\n  if (y1 ? !y0 : y2) {\n    // subtract the coverage for t2\n    coverage.x -= saturate(C2.x + 0.5);\n    // calculate the anti-aliasing for t2\n    weight.x = min(weight.x, abs(C2.x));\n  }\n}\n\n// this is essentially the same as coverageX, but with the axes swapped\nvoid coverageY(vec2 p0, vec2 p1, vec2 p2) {\n\n  vec2 C1, C2;\n  calulateCrossings(p0, p1, p2, C1, C2);\n\n  bool x0 = p0.x > vTexCoord.x;\n  bool x1 = p1.x > vTexCoord.x;\n  bool x2 = p2.x > vTexCoord.x;\n\n  if (x1 ? !x2 : x0) {\n    coverage.y -= saturate(C1.y + 0.5);\n    weight.y = min(weight.y, abs(C1.y));\n  }\n\n  if (x1 ? !x0 : x2) {\n    coverage.y += saturate(C2.y + 0.5);\n    weight.y = min(weight.y, abs(C2.y));\n  }\n}\n\nvoid main() {\n\n  // calculate the pixel scale based on screen-coordinates\n  pixelScale = hardness / fwidth(vTexCoord);\n\n  // which grid cell is this pixel in?\n  ivec2 gridCoord = ifloor(vTexCoord * vec2(uGridSize));\n\n  // intersect curves in this row\n  {\n    // the index into the row info bitmap\n    int rowIndex = gridCoord.y + uGridOffset.y;\n    // fetch the info texel\n    vec4 rowInfo = getTexel(uSamplerRows, rowIndex, uGridImageSize);\n    // unpack the rowInfo\n    int rowStrokeIndex = getInt16(rowInfo.xy);\n    int rowStrokeCount = getInt16(rowInfo.zw);\n\n    for (int iRowStroke = INT(0); iRowStroke < N; iRowStroke++) {\n      if (iRowStroke >= rowStrokeCount)\n        break;\n\n      // each stroke is made up of 3 points: the start and control point\n      // and the start of the next curve.\n      // fetch the indices of this pair of strokes:\n      vec4 strokeIndices = getTexel(uSamplerRowStrokes, rowStrokeIndex++, uCellsImageSize);\n\n      // unpack the stroke index\n      int strokePos = getInt16(strokeIndices.xy);\n\n      // fetch the two strokes\n      vec4 stroke0 = getTexel(uSamplerStrokes, strokePos + INT(0), uStrokeImageSize);\n      vec4 stroke1 = getTexel(uSamplerStrokes, strokePos + INT(1), uStrokeImageSize);\n\n      // calculate the coverage\n      coverageX(stroke0.xy, stroke0.zw, stroke1.xy);\n    }\n  }\n\n  // intersect curves in this column\n  {\n    int colIndex = gridCoord.x + uGridOffset.x;\n    vec4 colInfo = getTexel(uSamplerCols, colIndex, uGridImageSize);\n    int colStrokeIndex = getInt16(colInfo.xy);\n    int colStrokeCount = getInt16(colInfo.zw);\n    \n    for (int iColStroke = INT(0); iColStroke < N; iColStroke++) {\n      if (iColStroke >= colStrokeCount)\n        break;\n\n      vec4 strokeIndices = getTexel(uSamplerColStrokes, colStrokeIndex++, uCellsImageSize);\n\n      int strokePos = getInt16(strokeIndices.xy);\n      vec4 stroke0 = getTexel(uSamplerStrokes, strokePos + INT(0), uStrokeImageSize);\n      vec4 stroke1 = getTexel(uSamplerStrokes, strokePos + INT(1), uStrokeImageSize);\n      coverageY(stroke0.xy, stroke0.zw, stroke1.xy);\n    }\n  }\n\n  weight = saturate(1.0 - weight * 2.0);\n  float distance = max(weight.x + weight.y, minDistance); // manhattan approx.\n  float antialias = abs(dot(coverage, weight) / distance);\n  float cover = min(abs(coverage.x), abs(coverage.y));\n  gl_FragColor = uMaterialColor;\n  gl_FragColor.a *= saturate(max(antialias, cover));\n}",
            lineVert:
              "/*\n  Part of the Processing project - http://processing.org\n  Copyright (c) 2012-15 The Processing Foundation\n  Copyright (c) 2004-12 Ben Fry and Casey Reas\n  Copyright (c) 2001-04 Massachusetts Institute of Technology\n  This library is free software; you can redistribute it and/or\n  modify it under the terms of the GNU Lesser General Public\n  License as published by the Free Software Foundation, version 2.1.\n  This library is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n  Lesser General Public License for more details.\n  You should have received a copy of the GNU Lesser General\n  Public License along with this library; if not, write to the\n  Free Software Foundation, Inc., 59 Temple Place, Suite 330,\n  Boston, MA  02111-1307  USA\n*/\n\n#define PROCESSING_LINE_SHADER\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform float uStrokeWeight;\n\nuniform vec4 uViewport;\nuniform int uPerspective;\n\nattribute vec4 aPosition;\nattribute vec4 aDirection;\n  \nvoid main() {\n  // using a scale <1 moves the lines towards the camera\n  // in order to prevent popping effects due to half of\n  // the line disappearing behind the geometry faces.\n  vec3 scale = vec3(0.9995);\n\n  vec4 posp = uModelViewMatrix * aPosition;\n  vec4 posq = uModelViewMatrix * (aPosition + vec4(aDirection.xyz, 0));\n\n  // Moving vertices slightly toward the camera\n  // to avoid depth-fighting with the fill triangles.\n  // Discussed here:\n  // http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=252848  \n  posp.xyz = posp.xyz * scale;\n  posq.xyz = posq.xyz * scale;\n\n  vec4 p = uProjectionMatrix * posp;\n  vec4 q = uProjectionMatrix * posq;\n\n  // formula to convert from clip space (range -1..1) to screen space (range 0..[width or height])\n  // screen_p = (p.xy/p.w + <1,1>) * 0.5 * uViewport.zw\n\n  // prevent division by W by transforming the tangent formula (div by 0 causes\n  // the line to disappear, see https://github.com/processing/processing/issues/5183)\n  // t = screen_q - screen_p\n  //\n  // tangent is normalized and we don't care which aDirection it points to (+-)\n  // t = +- normalize( screen_q - screen_p )\n  // t = +- normalize( (q.xy/q.w+<1,1>)*0.5*uViewport.zw - (p.xy/p.w+<1,1>)*0.5*uViewport.zw )\n  //\n  // extract common factor, <1,1> - <1,1> cancels out\n  // t = +- normalize( (q.xy/q.w - p.xy/p.w) * 0.5 * uViewport.zw )\n  //\n  // convert to common divisor\n  // t = +- normalize( ((q.xy*p.w - p.xy*q.w) / (p.w*q.w)) * 0.5 * uViewport.zw )\n  //\n  // remove the common scalar divisor/factor, not needed due to normalize and +-\n  // (keep uViewport - can't remove because it has different components for x and y\n  //  and corrects for aspect ratio, see https://github.com/processing/processing/issues/5181)\n  // t = +- normalize( (q.xy*p.w - p.xy*q.w) * uViewport.zw )\n\n  vec2 tangent = normalize((q.xy*p.w - p.xy*q.w) * uViewport.zw);\n\n  // flip tangent to normal (it's already normalized)\n  vec2 normal = vec2(-tangent.y, tangent.x);\n\n  float thickness = aDirection.w * uStrokeWeight;\n  vec2 offset = normal * thickness / 2.0;\n\n  vec2 curPerspScale;\n\n  if(uPerspective == 1) {\n    // Perspective ---\n    // convert from world to clip by multiplying with projection scaling factor\n    // to get the right thickness (see https://github.com/processing/processing/issues/5182)\n    // invert Y, projections in Processing invert Y\n    curPerspScale = (uProjectionMatrix * vec4(1, -1, 0, 0)).xy;\n  } else {\n    // No Perspective ---\n    // multiply by W (to cancel out division by W later in the pipeline) and\n    // convert from screen to clip (derived from clip to screen above)\n    curPerspScale = p.w / (0.5 * uViewport.zw);\n  }\n\n  gl_Position.xy = p.xy + offset.xy * curPerspScale;\n  gl_Position.zw = p.zw;\n}\n",
            lineFrag:
              'precision mediump float;\nprecision mediump int;\n\nuniform vec4 uMaterialColor;\n\nvoid main() {\n  gl_FragColor = uMaterialColor;\n}',
            pointVert:
              'attribute vec3 aPosition;\nuniform float uPointSize;\nvarying float vStrokeWeight;\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nvoid main() {\n\tvec4 positionVec4 =  vec4(aPosition, 1.0);\n\tgl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;\n\tgl_PointSize = uPointSize;\n\tvStrokeWeight = uPointSize;\n}',
            pointFrag:
              'precision mediump float;\nprecision mediump int;\nuniform vec4 uMaterialColor;\nvarying float vStrokeWeight;\n\nvoid main(){\n\tfloat mask = 0.0;\n\n\t// make a circular mask using the gl_PointCoord (goes from 0 - 1 on a point)\n    // might be able to get a nicer edge on big strokeweights with smoothstep but slightly less performant\n\n\tmask = step(0.98, length(gl_PointCoord * 2.0 - 1.0));\n\n\t// if strokeWeight is 1 or less lets just draw a square\n\t// this prevents weird artifacting from carving circles when our points are really small\n\t// if strokeWeight is larger than 1, we just use it as is\n\n\tmask = mix(0.0, mask, clamp(floor(vStrokeWeight - 0.5),0.0,1.0));\n\n\t// throw away the borders of the mask\n    // otherwise we get weird alpha blending issues\n\n\tif(mask > 0.98){\n      discard;\n  \t}\n\n  \tgl_FragColor = vec4(uMaterialColor.rgb * (1.0 - mask), uMaterialColor.a) ;\n}'
          });

          /**
           * 3D graphics class
           * @private
           * @class p5.RendererGL
           * @constructor
           * @extends p5.Renderer
           * @todo extend class to include public method for offscreen
           * rendering (FBO).
           */ cov_1exsq9czgt.s[2]++;
          _main.default.RendererGL = function(elt, pInst, isMainCanvas, attr) {
            cov_1exsq9czgt.f[0]++;
            cov_1exsq9czgt.s[3]++;
            _main.default.Renderer.call(this, elt, pInst, isMainCanvas);
            cov_1exsq9czgt.s[4]++;
            this._setAttributeDefaults(pInst);
            cov_1exsq9czgt.s[5]++;
            this._initContext();
            cov_1exsq9czgt.s[6]++;
            this.isP3D = true; //lets us know we're in 3d mode

            // This redundant property is useful in reminding you that you are
            // interacting with WebGLRenderingContext, still worth considering future removal
            cov_1exsq9czgt.s[7]++;
            this.GL = this.drawingContext;
            cov_1exsq9czgt.s[8]++;
            this._pInst._setProperty('drawingContext', this.drawingContext);

            // erasing
            cov_1exsq9czgt.s[9]++;
            this._isErasing = false;

            // lights
            cov_1exsq9czgt.s[10]++;
            this._enableLighting = false;
            cov_1exsq9czgt.s[11]++;

            this.ambientLightColors = [];
            cov_1exsq9czgt.s[12]++;
            this.specularColors = [1, 1, 1];
            cov_1exsq9czgt.s[13]++;

            this.directionalLightDirections = [];
            cov_1exsq9czgt.s[14]++;
            this.directionalLightDiffuseColors = [];
            cov_1exsq9czgt.s[15]++;
            this.directionalLightSpecularColors = [];
            cov_1exsq9czgt.s[16]++;

            this.pointLightPositions = [];
            cov_1exsq9czgt.s[17]++;
            this.pointLightDiffuseColors = [];
            cov_1exsq9czgt.s[18]++;
            this.pointLightSpecularColors = [];
            cov_1exsq9czgt.s[19]++;

            this.spotLightPositions = [];
            cov_1exsq9czgt.s[20]++;
            this.spotLightDirections = [];
            cov_1exsq9czgt.s[21]++;
            this.spotLightDiffuseColors = [];
            cov_1exsq9czgt.s[22]++;
            this.spotLightSpecularColors = [];
            cov_1exsq9czgt.s[23]++;
            this.spotLightAngle = [];
            cov_1exsq9czgt.s[24]++;
            this.spotLightConc = [];
            cov_1exsq9czgt.s[25]++;

            this.drawMode = constants.FILL;
            cov_1exsq9czgt.s[26]++;

            this.curFillColor = this._cachedFillStyle = [1, 1, 1, 1];
            cov_1exsq9czgt.s[27]++;
            this.curStrokeColor = this._cachedStrokeStyle = [0, 0, 0, 1];
            cov_1exsq9czgt.s[28]++;

            this.curBlendMode = constants.BLEND;
            cov_1exsq9czgt.s[29]++;
            this._cachedBlendMode = undefined;
            cov_1exsq9czgt.s[30]++;
            this.blendExt = this.GL.getExtension('EXT_blend_minmax');
            cov_1exsq9czgt.s[31]++;
            this._isBlending = false;
            cov_1exsq9czgt.s[32]++;

            this._useSpecularMaterial = false;
            cov_1exsq9czgt.s[33]++;
            this._useEmissiveMaterial = false;
            cov_1exsq9czgt.s[34]++;
            this._useNormalMaterial = false;
            cov_1exsq9czgt.s[35]++;
            this._useShininess = 1;
            cov_1exsq9czgt.s[36]++;

            this._tint = [255, 255, 255, 255];

            // lightFalloff variables
            cov_1exsq9czgt.s[37]++;
            this.constantAttenuation = 1;
            cov_1exsq9czgt.s[38]++;
            this.linearAttenuation = 0;
            cov_1exsq9czgt.s[39]++;
            this.quadraticAttenuation = 0;

            /**
             * model view, projection, & normal
             * matrices
             */ cov_1exsq9czgt.s[40]++;
            this.uMVMatrix = new _main.default.Matrix();
            cov_1exsq9czgt.s[41]++;
            this.uPMatrix = new _main.default.Matrix();
            cov_1exsq9czgt.s[42]++;
            this.uNMatrix = new _main.default.Matrix('mat3');

            // Current vertex normal
            cov_1exsq9czgt.s[43]++;
            this._currentNormal = new _main.default.Vector(0, 0, 1);

            // Camera
            cov_1exsq9czgt.s[44]++;
            this._curCamera = new _main.default.Camera(this);
            cov_1exsq9czgt.s[45]++;
            this._curCamera._computeCameraDefaultSettings();
            cov_1exsq9czgt.s[46]++;
            this._curCamera._setDefaultCamera();
            cov_1exsq9czgt.s[47]++;

            this._defaultLightShader = undefined;
            cov_1exsq9czgt.s[48]++;
            this._defaultImmediateModeShader = undefined;
            cov_1exsq9czgt.s[49]++;
            this._defaultNormalShader = undefined;
            cov_1exsq9czgt.s[50]++;
            this._defaultColorShader = undefined;
            cov_1exsq9czgt.s[51]++;
            this._defaultPointShader = undefined;
            cov_1exsq9czgt.s[52]++;

            this.userFillShader = undefined;
            cov_1exsq9czgt.s[53]++;
            this.userStrokeShader = undefined;
            cov_1exsq9czgt.s[54]++;
            this.userPointShader = undefined;

            // Default drawing is done in Retained Mode
            // Geometry and Material hashes stored here
            cov_1exsq9czgt.s[55]++;
            this.retainedMode = {
              geometry: {},
              buffers: {
                // prettier-ignore
                stroke: [
      new _main.default.RenderBuffer(3, 'lineVertices', 'lineVertexBuffer', 'aPosition', this, this._flatten),
      new _main.default.RenderBuffer(4, 'lineNormals', 'lineNormalBuffer', 'aDirection', this, this._flatten)],

                // prettier-ignore
                fill: [
      new _main.default.RenderBuffer(3, 'vertices', 'vertexBuffer', 'aPosition', this, this._vToNArray),
      new _main.default.RenderBuffer(3, 'vertexNormals', 'normalBuffer', 'aNormal', this, this._vToNArray),
      new _main.default.RenderBuffer(4, 'vertexColors', 'colorBuffer', 'aMaterialColor', this),
      new _main.default.RenderBuffer(3, 'vertexAmbients', 'ambientBuffer', 'aAmbientColor', this),
      //new BufferDef(3, 'vertexSpeculars', 'specularBuffer', 'aSpecularColor'),
      new _main.default.RenderBuffer(2, 'uvs', 'uvBuffer', 'aTexCoord', this, this._flatten)],

                // prettier-ignore
                text: [
      new _main.default.RenderBuffer(3, 'vertices', 'vertexBuffer', 'aPosition', this, this._vToNArray),
      new _main.default.RenderBuffer(2, 'uvs', 'uvBuffer', 'aTexCoord', this, this._flatten)]
              }
            };

            // Immediate Mode
            // Geometry and Material hashes stored here
            cov_1exsq9czgt.s[56]++;
            this.immediateMode = {
              geometry: new _main.default.Geometry(),
              shapeMode: constants.TRIANGLE_FAN,
              _bezierVertex: [],
              _quadraticVertex: [],
              _curveVertex: [],
              buffers: {
                // prettier-ignore
                fill: [
      new _main.default.RenderBuffer(3, 'vertices', 'vertexBuffer', 'aPosition', this, this._vToNArray),
      new _main.default.RenderBuffer(3, 'vertexNormals', 'normalBuffer', 'aNormal', this, this._vToNArray),
      new _main.default.RenderBuffer(4, 'vertexColors', 'colorBuffer', 'aVertexColor', this),
      new _main.default.RenderBuffer(3, 'vertexAmbients', 'ambientBuffer', 'aAmbientColor', this),
      new _main.default.RenderBuffer(2, 'uvs', 'uvBuffer', 'aTexCoord', this, this._flatten)],

                // prettier-ignore
                stroke: [
      new _main.default.RenderBuffer(3, 'lineVertices', 'lineVertexBuffer', 'aPosition', this, this._flatten),
      new _main.default.RenderBuffer(4, 'lineNormals', 'lineNormalBuffer', 'aDirection', this, this._flatten)],

                point: this.GL.createBuffer()
              }
            };
            cov_1exsq9czgt.s[57]++;

            this.pointSize = 5.0; //default point size
            cov_1exsq9czgt.s[58]++;
            this.curStrokeWeight = 1;

            // array of textures created in this gl context via this.getTexture(src)
            cov_1exsq9czgt.s[59]++;
            this.textures = [];
            cov_1exsq9czgt.s[60]++;

            this.textureMode = constants.IMAGE;
            // default wrap settings
            cov_1exsq9czgt.s[61]++;
            this.textureWrapX = constants.CLAMP;
            cov_1exsq9czgt.s[62]++;
            this.textureWrapY = constants.CLAMP;
            cov_1exsq9czgt.s[63]++;
            this._tex = null;
            cov_1exsq9czgt.s[64]++;
            this._curveTightness = 6;

            // lookUpTable for coefficients needed to be calculated for bezierVertex, same are used for curveVertex
            cov_1exsq9czgt.s[65]++;
            this._lookUpTableBezier = [];
            // lookUpTable for coefficients needed to be calculated for quadraticVertex
            cov_1exsq9czgt.s[66]++;
            this._lookUpTableQuadratic = [];

            // current curveDetail in the Bezier lookUpTable
            cov_1exsq9czgt.s[67]++;
            this._lutBezierDetail = 0;
            // current curveDetail in the Quadratic lookUpTable
            cov_1exsq9czgt.s[68]++;
            this._lutQuadraticDetail = 0;
            cov_1exsq9czgt.s[69]++;

            this._tessy = this._initTessy();
            cov_1exsq9czgt.s[70]++;

            this.fontInfos = {};
            cov_1exsq9czgt.s[71]++;

            this._curShader = undefined;
            cov_1exsq9czgt.s[72]++;

            return this;
          };
          cov_1exsq9czgt.s[73]++;

          _main.default.RendererGL.prototype = Object.create(
            _main.default.Renderer.prototype
          );

          //////////////////////////////////////////////
          // Setting
          //////////////////////////////////////////////
          cov_1exsq9czgt.s[74]++;
          _main.default.RendererGL.prototype._setAttributeDefaults = function(pInst) {
            cov_1exsq9czgt.f[1]++;
            // See issue #3850, safer to enable AA in Safari
            var applyAA = (cov_1exsq9czgt.s[75]++,
            navigator.userAgent.toLowerCase().includes('safari'));
            var defaults = (cov_1exsq9czgt.s[76]++,
            {
              alpha: true,
              depth: true,
              stencil: true,
              antialias: applyAA,
              premultipliedAlpha: false,
              preserveDrawingBuffer: true,
              perPixelLighting: true
            });
            cov_1exsq9czgt.s[77]++;

            if (pInst._glAttributes === null) {
              cov_1exsq9czgt.b[0][0]++;
              cov_1exsq9czgt.s[78]++;
              pInst._glAttributes = defaults;
            } else {
              cov_1exsq9czgt.b[0][1]++;
              cov_1exsq9czgt.s[79]++;
              pInst._glAttributes = Object.assign(defaults, pInst._glAttributes);
            }
            cov_1exsq9czgt.s[80]++;
            return;
          };
          cov_1exsq9czgt.s[81]++;

          _main.default.RendererGL.prototype._initContext = function() {
            cov_1exsq9czgt.f[2]++;
            cov_1exsq9czgt.s[82]++;
            try {
              cov_1exsq9czgt.s[83]++;
              this.drawingContext =
                (cov_1exsq9czgt.b[1][0]++,
                this.canvas.getContext('webgl', this._pInst._glAttributes)) ||
                (cov_1exsq9czgt.b[1][1]++,
                this.canvas.getContext('experimental-webgl', this._pInst._glAttributes));
              cov_1exsq9czgt.s[84]++;
              if (this.drawingContext === null) {
                cov_1exsq9czgt.b[2][0]++;
                cov_1exsq9czgt.s[85]++;
                throw new Error('Error creating webgl context');
              } else {
                cov_1exsq9czgt.b[2][1]++;
                var gl = (cov_1exsq9czgt.s[86]++, this.drawingContext);
                cov_1exsq9czgt.s[87]++;
                gl.enable(gl.DEPTH_TEST);
                cov_1exsq9czgt.s[88]++;
                gl.depthFunc(gl.LEQUAL);
                cov_1exsq9czgt.s[89]++;
                gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);
                cov_1exsq9czgt.s[90]++;
                this._viewport = this.drawingContext.getParameter(
                  this.drawingContext.VIEWPORT
                );
              }
            } catch (er) {
              cov_1exsq9czgt.s[91]++;
              throw er;
            }
          };

          //This is helper function to reset the context anytime the attributes
          //are changed with setAttributes()
          cov_1exsq9czgt.s[92]++;
          _main.default.RendererGL.prototype._resetContext = function(options, callback) {
            cov_1exsq9czgt.f[3]++;
            var w = (cov_1exsq9czgt.s[93]++, this.width);
            var h = (cov_1exsq9czgt.s[94]++, this.height);
            var defaultId = (cov_1exsq9czgt.s[95]++, this.canvas.id);
            var isPGraphics = (cov_1exsq9czgt.s[96]++,
            this._pInst instanceof _main.default.Graphics);
            cov_1exsq9czgt.s[97]++;

            if (isPGraphics) {
              cov_1exsq9czgt.b[3][0]++;
              var pg = (cov_1exsq9czgt.s[98]++, this._pInst);
              cov_1exsq9czgt.s[99]++;
              pg.canvas.parentNode.removeChild(pg.canvas);
              cov_1exsq9czgt.s[100]++;
              pg.canvas = document.createElement('canvas');
              var node = (cov_1exsq9czgt.s[101]++,
              (cov_1exsq9czgt.b[4][0]++, pg._pInst._userNode) ||
                (cov_1exsq9czgt.b[4][1]++, document.body));
              cov_1exsq9czgt.s[102]++;
              node.appendChild(pg.canvas);
              cov_1exsq9czgt.s[103]++;
              _main.default.Element.call(pg, pg.canvas, pg._pInst);
              cov_1exsq9czgt.s[104]++;
              pg.width = w;
              cov_1exsq9czgt.s[105]++;
              pg.height = h;
            } else {
              cov_1exsq9czgt.b[3][1]++;
              var c = (cov_1exsq9czgt.s[106]++, this.canvas);
              cov_1exsq9czgt.s[107]++;
              if (c) {
                cov_1exsq9czgt.b[5][0]++;
                cov_1exsq9czgt.s[108]++;
                c.parentNode.removeChild(c);
              } else {
                cov_1exsq9czgt.b[5][1]++;
              }
              cov_1exsq9czgt.s[109]++;
              c = document.createElement('canvas');
              cov_1exsq9czgt.s[110]++;
              c.id = defaultId;
              cov_1exsq9czgt.s[111]++;
              if (this._pInst._userNode) {
                cov_1exsq9czgt.b[6][0]++;
                cov_1exsq9czgt.s[112]++;
                this._pInst._userNode.appendChild(c);
              } else {
                cov_1exsq9czgt.b[6][1]++;
                cov_1exsq9czgt.s[113]++;
                document.body.appendChild(c);
              }
              cov_1exsq9czgt.s[114]++;
              this._pInst.canvas = c;
            }

            var renderer = (cov_1exsq9czgt.s[115]++,
            new _main.default.RendererGL(this._pInst.canvas, this._pInst, !isPGraphics));
            cov_1exsq9czgt.s[116]++;

            this._pInst._setProperty('_renderer', renderer);
            cov_1exsq9czgt.s[117]++;
            renderer.resize(w, h);
            cov_1exsq9czgt.s[118]++;
            renderer._applyDefaults();
            cov_1exsq9czgt.s[119]++;

            if (!isPGraphics) {
              cov_1exsq9czgt.b[7][0]++;
              cov_1exsq9czgt.s[120]++;
              this._pInst._elements.push(renderer);
            } else {
              cov_1exsq9czgt.b[7][1]++;
            }
            cov_1exsq9czgt.s[121]++;

            if (typeof callback === 'function') {
              cov_1exsq9czgt.b[8][0]++;
              cov_1exsq9czgt.s[122]++;
              //setTimeout with 0 forces the task to the back of the queue, this ensures that
              //we finish switching out the renderer
              setTimeout(function() {
                cov_1exsq9czgt.f[4]++;
                cov_1exsq9czgt.s[123]++;
                callback.apply(window._renderer, options);
              }, 0);
            } else {
              cov_1exsq9czgt.b[8][1]++;
            }
          };
          /**
           * @module Rendering
           * @submodule Rendering
           * @for p5
           */
          /**
           * Set attributes for the WebGL Drawing context.
           * This is a way of adjusting how the WebGL
           * renderer works to fine-tune the display and performance.
           *
           * Note that this will reinitialize the drawing context
           * if called after the WebGL canvas is made.
           *
           * If an object is passed as the parameter, all attributes
           * not declared in the object will be set to defaults.
           *
           * The available attributes are:
           * <br>
           * alpha - indicates if the canvas contains an alpha buffer
           * default is true
           *
           * depth - indicates whether the drawing buffer has a depth buffer
           * of at least 16 bits - default is true
           *
           * stencil - indicates whether the drawing buffer has a stencil buffer
           * of at least 8 bits
           *
           * antialias - indicates whether or not to perform anti-aliasing
           * default is false (true in Safari)
           *
           * premultipliedAlpha - indicates that the page compositor will assume
           * the drawing buffer contains colors with pre-multiplied alpha
           * default is false
           *
           * preserveDrawingBuffer - if true the buffers will not be cleared and
           * and will preserve their values until cleared or overwritten by author
           * (note that p5 clears automatically on draw loop)
           * default is true
           *
           * perPixelLighting - if true, per-pixel lighting will be used in the
           * lighting shader otherwise per-vertex lighting is used.
           * default is true.
           *
           * @method setAttributes
           * @for p5
           * @param  {String}  key Name of attribute
           * @param  {Boolean}        value New value of named attribute
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           * }
           *
           * function draw() {
           *   background(255);
           *   push();
           *   rotateZ(frameCount * 0.02);
           *   rotateX(frameCount * 0.02);
           *   rotateY(frameCount * 0.02);
           *   fill(0, 0, 0);
           *   box(50);
           *   pop();
           * }
           * </code>
           * </div>
           * <br>
           * Now with the antialias attribute set to true.
           * <br>
           * <div>
           * <code>
           * function setup() {
           *   setAttributes('antialias', true);
           *   createCanvas(100, 100, WEBGL);
           * }
           *
           * function draw() {
           *   background(255);
           *   push();
           *   rotateZ(frameCount * 0.02);
           *   rotateX(frameCount * 0.02);
           *   rotateY(frameCount * 0.02);
           *   fill(0, 0, 0);
           *   box(50);
           *   pop();
           * }
           * </code>
           * </div>
           *
           * <div>
           * <code>
           * // press the mouse button to disable perPixelLighting
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   noStroke();
           *   fill(255);
           * }
           *
           * let lights = [
           *   { c: '#f00', t: 1.12, p: 1.91, r: 0.2 },
           *   { c: '#0f0', t: 1.21, p: 1.31, r: 0.2 },
           *   { c: '#00f', t: 1.37, p: 1.57, r: 0.2 },
           *   { c: '#ff0', t: 1.12, p: 1.91, r: 0.7 },
           *   { c: '#0ff', t: 1.21, p: 1.31, r: 0.7 },
           *   { c: '#f0f', t: 1.37, p: 1.57, r: 0.7 }
           * ];
           *
           * function draw() {
           *   let t = millis() / 1000 + 1000;
           *   background(0);
           *   directionalLight(color('#222'), 1, 1, 1);
           *
           *   for (let i = 0; i < lights.length; i++) {
           *     let light = lights[i];
           *     pointLight(
           *       color(light.c),
           *       p5.Vector.fromAngles(t * light.t, t * light.p, width * light.r)
           *     );
           *   }
           *
           *   specularMaterial(255);
           *   sphere(width * 0.1);
           *
           *   rotateX(t * 0.77);
           *   rotateY(t * 0.83);
           *   rotateZ(t * 0.91);
           *   torus(width * 0.3, width * 0.07, 24, 10);
           * }
           *
           * function mousePressed() {
           *   setAttributes('perPixelLighting', false);
           *   noStroke();
           *   fill(255);
           * }
           * function mouseReleased() {
           *   setAttributes('perPixelLighting', true);
           *   noStroke();
           *   fill(255);
           * }
           * </code>
           * </div>
           *
           * @alt a rotating cube with smoother edges
           */
          /**
           * @method setAttributes
           * @for p5
           * @param  {Object}  obj object with key-value pairs
           */ cov_1exsq9czgt.s[124]++;

          _main.default.prototype.setAttributes = function(key, value) {
            cov_1exsq9czgt.f[5]++;
            cov_1exsq9czgt.s[125]++;
            if (typeof this._glAttributes === 'undefined') {
              cov_1exsq9czgt.b[9][0]++;
              cov_1exsq9czgt.s[126]++;
              console.log(
                'You are trying to use setAttributes on a p5.Graphics object ' +
                  'that does not use a WEBGL renderer.'
              );
              cov_1exsq9czgt.s[127]++;

              return;
            } else {
              cov_1exsq9czgt.b[9][1]++;
            }
            var unchanged = (cov_1exsq9czgt.s[128]++, true);
            cov_1exsq9czgt.s[129]++;
            if (typeof value !== 'undefined') {
              cov_1exsq9czgt.b[10][0]++;
              cov_1exsq9czgt.s[130]++;
              //first time modifying the attributes
              if (this._glAttributes === null) {
                cov_1exsq9czgt.b[11][0]++;
                cov_1exsq9czgt.s[131]++;
                this._glAttributes = {};
              } else {
                cov_1exsq9czgt.b[11][1]++;
              }
              cov_1exsq9czgt.s[132]++;
              if (this._glAttributes[key] !== value) {
                cov_1exsq9czgt.b[12][0]++;
                cov_1exsq9czgt.s[133]++;
                //changing value of previously altered attribute
                this._glAttributes[key] = value;
                cov_1exsq9czgt.s[134]++;
                unchanged = false;
              } else {
                cov_1exsq9czgt.b[12][1]++;
              }
              //setting all attributes with some change
            } else {
              cov_1exsq9czgt.b[10][1]++;
              cov_1exsq9czgt.s[135]++;
              if (key instanceof Object) {
                cov_1exsq9czgt.b[13][0]++;
                cov_1exsq9czgt.s[136]++;
                if (this._glAttributes !== key) {
                  cov_1exsq9czgt.b[14][0]++;
                  cov_1exsq9czgt.s[137]++;
                  this._glAttributes = key;
                  cov_1exsq9czgt.s[138]++;
                  unchanged = false;
                } else {
                  cov_1exsq9czgt.b[14][1]++;
                }
              } else {
                cov_1exsq9czgt.b[13][1]++;
              }
            }
            //@todo_FES
            cov_1exsq9czgt.s[139]++;
            if (
              (cov_1exsq9czgt.b[16][0]++, !this._renderer.isP3D) ||
              (cov_1exsq9czgt.b[16][1]++, unchanged)
            ) {
              cov_1exsq9czgt.b[15][0]++;
              cov_1exsq9czgt.s[140]++;
              return;
            } else {
              cov_1exsq9czgt.b[15][1]++;
            }
            cov_1exsq9czgt.s[141]++;

            if (!this._setupDone) {
              cov_1exsq9czgt.b[17][0]++;
              cov_1exsq9czgt.s[142]++;
              for (var x in this._renderer.retainedMode.geometry) {
                cov_1exsq9czgt.s[143]++;
                if (this._renderer.retainedMode.geometry.hasOwnProperty(x)) {
                  cov_1exsq9czgt.b[18][0]++;
                  cov_1exsq9czgt.s[144]++;
                  console.error(
                    'Sorry, Could not set the attributes, you need to call setAttributes() ' +
                      'before calling the other drawing methods in setup()'
                  );
                  cov_1exsq9czgt.s[145]++;

                  return;
                } else {
                  cov_1exsq9czgt.b[18][1]++;
                }
              }
            } else {
              cov_1exsq9czgt.b[17][1]++;
            }
            cov_1exsq9czgt.s[146]++;

            this.push();
            cov_1exsq9czgt.s[147]++;
            this._renderer._resetContext();
            cov_1exsq9czgt.s[148]++;
            this.pop();
            cov_1exsq9czgt.s[149]++;

            if (this._renderer._curCamera) {
              cov_1exsq9czgt.b[19][0]++;
              cov_1exsq9czgt.s[150]++;
              this._renderer._curCamera._renderer = this._renderer;
            } else {
              cov_1exsq9czgt.b[19][1]++;
            }
          };

          /**
           * @class p5.RendererGL
           */ cov_1exsq9czgt.s[151]++;

          _main.default.RendererGL.prototype._update = function() {
            cov_1exsq9czgt.f[6]++;
            cov_1exsq9czgt.s[152]++;
            // reset model view and apply initial camera transform
            // (containing only look at info; no projection).
            this.uMVMatrix.set(
              this._curCamera.cameraMatrix.mat4[0],
              this._curCamera.cameraMatrix.mat4[1],
              this._curCamera.cameraMatrix.mat4[2],
              this._curCamera.cameraMatrix.mat4[3],
              this._curCamera.cameraMatrix.mat4[4],
              this._curCamera.cameraMatrix.mat4[5],
              this._curCamera.cameraMatrix.mat4[6],
              this._curCamera.cameraMatrix.mat4[7],
              this._curCamera.cameraMatrix.mat4[8],
              this._curCamera.cameraMatrix.mat4[9],
              this._curCamera.cameraMatrix.mat4[10],
              this._curCamera.cameraMatrix.mat4[11],
              this._curCamera.cameraMatrix.mat4[12],
              this._curCamera.cameraMatrix.mat4[13],
              this._curCamera.cameraMatrix.mat4[14],
              this._curCamera.cameraMatrix.mat4[15]
            );

            // reset light data for new frame.
            cov_1exsq9czgt.s[153]++;
            this.ambientLightColors.length = 0;
            cov_1exsq9czgt.s[154]++;
            this.specularColors = [1, 1, 1];
            cov_1exsq9czgt.s[155]++;

            this.directionalLightDirections.length = 0;
            cov_1exsq9czgt.s[156]++;
            this.directionalLightDiffuseColors.length = 0;
            cov_1exsq9czgt.s[157]++;
            this.directionalLightSpecularColors.length = 0;
            cov_1exsq9czgt.s[158]++;

            this.pointLightPositions.length = 0;
            cov_1exsq9czgt.s[159]++;
            this.pointLightDiffuseColors.length = 0;
            cov_1exsq9czgt.s[160]++;
            this.pointLightSpecularColors.length = 0;
            cov_1exsq9czgt.s[161]++;

            this.spotLightPositions.length = 0;
            cov_1exsq9czgt.s[162]++;
            this.spotLightDirections.length = 0;
            cov_1exsq9czgt.s[163]++;
            this.spotLightDiffuseColors.length = 0;
            cov_1exsq9czgt.s[164]++;
            this.spotLightSpecularColors.length = 0;
            cov_1exsq9czgt.s[165]++;
            this.spotLightAngle.length = 0;
            cov_1exsq9czgt.s[166]++;
            this.spotLightConc.length = 0;
            cov_1exsq9czgt.s[167]++;

            this._enableLighting = false;

            //reset tint value for new frame
            cov_1exsq9czgt.s[168]++;
            this._tint = [255, 255, 255, 255];

            //Clear depth every frame
            cov_1exsq9czgt.s[169]++;
            this.GL.clear(this.GL.DEPTH_BUFFER_BIT);
          };

          /**
           * [background description]
           */ cov_1exsq9czgt.s[170]++;
          _main.default.RendererGL.prototype.background = function() {
            var _this$_pInst;
            cov_1exsq9czgt.f[7]++;
            var _col = (cov_1exsq9czgt.s[171]++,
            (_this$_pInst = this._pInst).color.apply(_this$_pInst, arguments));
            var _r = (cov_1exsq9czgt.s[172]++, _col.levels[0] / 255);
            var _g = (cov_1exsq9czgt.s[173]++, _col.levels[1] / 255);
            var _b = (cov_1exsq9czgt.s[174]++, _col.levels[2] / 255);
            var _a = (cov_1exsq9czgt.s[175]++, _col.levels[3] / 255);
            cov_1exsq9czgt.s[176]++;
            this.GL.clearColor(_r, _g, _b, _a);
            cov_1exsq9czgt.s[177]++;

            this.GL.clear(this.GL.COLOR_BUFFER_BIT);
          };

          //////////////////////////////////////////////
          // COLOR
          //////////////////////////////////////////////
          /**
           * Basic fill material for geometry with a given color
           * @method  fill
           * @class p5.RendererGL
           * @param  {Number|Number[]|String|p5.Color} v1  gray value,
           * red or hue value (depending on the current color mode),
           * or color Array, or CSS color string
           * @param  {Number}            [v2] green or saturation value
           * @param  {Number}            [v3] blue or brightness value
           * @param  {Number}            [a]  opacity
           * @chainable
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(200, 200, WEBGL);
           * }
           *
           * function draw() {
           *   background(0);
           *   noStroke();
           *   fill(100, 100, 240);
           *   rotateX(frameCount * 0.01);
           *   rotateY(frameCount * 0.01);
           *   box(75, 75, 75);
           * }
           * </code>
           * </div>
           *
           * @alt
           * black canvas with purple cube spinning
           */ cov_1exsq9czgt.s[178]++;
          _main.default.RendererGL.prototype.fill = function(v1, v2, v3, a) {
            cov_1exsq9czgt.f[8]++;
            //see material.js for more info on color blending in webgl
            var color = (cov_1exsq9czgt.s[179]++,
            _main.default.prototype.color.apply(this._pInst, arguments));
            cov_1exsq9czgt.s[180]++;
            this.curFillColor = color._array;
            cov_1exsq9czgt.s[181]++;
            this.drawMode = constants.FILL;
            cov_1exsq9czgt.s[182]++;
            this._useNormalMaterial = false;
            cov_1exsq9czgt.s[183]++;
            this._tex = null;
          };

          /**
           * Basic stroke material for geometry with a given color
           * @method  stroke
           * @param  {Number|Number[]|String|p5.Color} v1  gray value,
           * red or hue value (depending on the current color mode),
           * or color Array, or CSS color string
           * @param  {Number}            [v2] green or saturation value
           * @param  {Number}            [v3] blue or brightness value
           * @param  {Number}            [a]  opacity
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(200, 200, WEBGL);
           * }
           *
           * function draw() {
           *   background(0);
           *   stroke(240, 150, 150);
           *   fill(100, 100, 240);
           *   rotateX(frameCount * 0.01);
           *   rotateY(frameCount * 0.01);
           *   box(75, 75, 75);
           * }
           * </code>
           * </div>
           *
           * @alt
           * black canvas with purple cube with pink outline spinning
           */ cov_1exsq9czgt.s[184]++;
          _main.default.RendererGL.prototype.stroke = function(r, g, b, a) {
            cov_1exsq9czgt.f[9]++;
            cov_1exsq9czgt.s[185]++;
            //@todo allow transparency in stroking currently doesn't have
            //any impact and causes problems with specularMaterial
            arguments[3] = 255;
            var color = (cov_1exsq9czgt.s[186]++,
            _main.default.prototype.color.apply(this._pInst, arguments));
            cov_1exsq9czgt.s[187]++;
            this.curStrokeColor = color._array;
          };
          cov_1exsq9czgt.s[188]++;

          _main.default.RendererGL.prototype.strokeCap = function(cap) {
            cov_1exsq9czgt.f[10]++;
            cov_1exsq9czgt.s[189]++;
            // @TODO : to be implemented
            console.error('Sorry, strokeCap() is not yet implemented in WEBGL mode');
          };
          cov_1exsq9czgt.s[190]++;

          _main.default.RendererGL.prototype.strokeJoin = function(join) {
            cov_1exsq9czgt.f[11]++;
            cov_1exsq9czgt.s[191]++;
            // @TODO : to be implemented
            // https://processing.org/reference/strokeJoin_.html
            console.error('Sorry, strokeJoin() is not yet implemented in WEBGL mode');
          };
          cov_1exsq9czgt.s[192]++;

          _main.default.RendererGL.prototype.filter = function(filterType) {
            cov_1exsq9czgt.f[12]++;
            cov_1exsq9czgt.s[193]++;
            // filter can be achieved using custom shaders.
            // https://github.com/aferriss/p5jsShaderExamples
            // https://itp-xstory.github.io/p5js-shaders/#/
            console.error('filter() does not work in WEBGL mode');
          };
          cov_1exsq9czgt.s[194]++;

          _main.default.RendererGL.prototype.blendMode = function(mode) {
            cov_1exsq9czgt.f[13]++;
            cov_1exsq9czgt.s[195]++;
            if (
              (cov_1exsq9czgt.b[21][0]++, mode === constants.DARKEST) ||
              (cov_1exsq9czgt.b[21][1]++, mode === constants.LIGHTEST) ||
              (cov_1exsq9czgt.b[21][2]++, mode === constants.ADD) ||
              (cov_1exsq9czgt.b[21][3]++, mode === constants.BLEND) ||
              (cov_1exsq9czgt.b[21][4]++, mode === constants.SUBTRACT) ||
              (cov_1exsq9czgt.b[21][5]++, mode === constants.SCREEN) ||
              (cov_1exsq9czgt.b[21][6]++, mode === constants.EXCLUSION) ||
              (cov_1exsq9czgt.b[21][7]++, mode === constants.REPLACE) ||
              (cov_1exsq9czgt.b[21][8]++, mode === constants.MULTIPLY) ||
              (cov_1exsq9czgt.b[21][9]++, mode === constants.REMOVE)
            ) {
              cov_1exsq9czgt.b[20][0]++;
              cov_1exsq9czgt.s[196]++;
              this.curBlendMode = mode;
            } else {
              cov_1exsq9czgt.b[20][1]++;
              cov_1exsq9czgt.s[197]++;
              if (
                (cov_1exsq9czgt.b[23][0]++, mode === constants.BURN) ||
                (cov_1exsq9czgt.b[23][1]++, mode === constants.OVERLAY) ||
                (cov_1exsq9czgt.b[23][2]++, mode === constants.HARD_LIGHT) ||
                (cov_1exsq9czgt.b[23][3]++, mode === constants.SOFT_LIGHT) ||
                (cov_1exsq9czgt.b[23][4]++, mode === constants.DODGE)
              ) {
                cov_1exsq9czgt.b[22][0]++;
                cov_1exsq9czgt.s[198]++;
                console.warn(
                  'BURN, OVERLAY, HARD_LIGHT, SOFT_LIGHT, and DODGE only work for blendMode in 2D mode.'
                );
              } else {
                cov_1exsq9czgt.b[22][1]++;
              }
            }
          };
          cov_1exsq9czgt.s[199]++;

          _main.default.RendererGL.prototype.erase = function(opacityFill, opacityStroke) {
            cov_1exsq9czgt.f[14]++;
            cov_1exsq9czgt.s[200]++;
            if (!this._isErasing) {
              cov_1exsq9czgt.b[24][0]++;
              cov_1exsq9czgt.s[201]++;
              this._applyBlendMode(constants.REMOVE);
              cov_1exsq9czgt.s[202]++;
              this._isErasing = true;
              cov_1exsq9czgt.s[203]++;

              this._cachedFillStyle = this.curFillColor.slice();
              cov_1exsq9czgt.s[204]++;
              this.curFillColor = [1, 1, 1, opacityFill / 255];
              cov_1exsq9czgt.s[205]++;

              this._cachedStrokeStyle = this.curStrokeColor.slice();
              cov_1exsq9czgt.s[206]++;
              this.curStrokeColor = [1, 1, 1, opacityStroke / 255];
            } else {
              cov_1exsq9czgt.b[24][1]++;
            }
          };
          cov_1exsq9czgt.s[207]++;

          _main.default.RendererGL.prototype.noErase = function() {
            cov_1exsq9czgt.f[15]++;
            cov_1exsq9czgt.s[208]++;
            if (this._isErasing) {
              cov_1exsq9czgt.b[25][0]++;
              cov_1exsq9czgt.s[209]++;
              this._isErasing = false;
              cov_1exsq9czgt.s[210]++;
              this.curFillColor = this._cachedFillStyle.slice();
              cov_1exsq9czgt.s[211]++;
              this.curStrokeColor = this._cachedStrokeStyle.slice();
              cov_1exsq9czgt.s[212]++;
              this.blendMode(this._cachedBlendMode);
            } else {
              cov_1exsq9czgt.b[25][1]++;
            }
          };

          /**
           * Change weight of stroke
           * @method  strokeWeight
           * @param  {Number} stroke weight to be used for drawing
           * @example
           * <div>
           * <code>
           * function setup() {
           *   createCanvas(200, 400, WEBGL);
           *   setAttributes('antialias', true);
           * }
           *
           * function draw() {
           *   background(0);
           *   noStroke();
           *   translate(0, -100, 0);
           *   stroke(240, 150, 150);
           *   fill(100, 100, 240);
           *   push();
           *   strokeWeight(8);
           *   rotateX(frameCount * 0.01);
           *   rotateY(frameCount * 0.01);
           *   sphere(75);
           *   pop();
           *   push();
           *   translate(0, 200, 0);
           *   strokeWeight(1);
           *   rotateX(frameCount * 0.01);
           *   rotateY(frameCount * 0.01);
           *   sphere(75);
           *   pop();
           * }
           * </code>
           * </div>
           *
           * @alt
           * black canvas with two purple rotating spheres with pink
           * outlines the sphere on top has much heavier outlines,
           */ cov_1exsq9czgt.s[213]++;
          _main.default.RendererGL.prototype.strokeWeight = function(w) {
            cov_1exsq9czgt.f[16]++;
            cov_1exsq9czgt.s[214]++;
            if (this.curStrokeWeight !== w) {
              cov_1exsq9czgt.b[26][0]++;
              cov_1exsq9czgt.s[215]++;
              this.pointSize = w;
              cov_1exsq9czgt.s[216]++;
              this.curStrokeWeight = w;
            } else {
              cov_1exsq9czgt.b[26][1]++;
            }
          };

          // x,y are canvas-relative (pre-scaled by _pixelDensity)
          cov_1exsq9czgt.s[217]++;
          _main.default.RendererGL.prototype._getPixel = function(x, y) {
            cov_1exsq9czgt.f[17]++;
            var imageData, index;
            cov_1exsq9czgt.s[218]++;
            imageData = new Uint8Array(4);
            // prettier-ignore
            cov_1exsq9czgt.s[219]++;
            this.drawingContext.readPixels(
              x,
              y,
              1,
              1,
              this.drawingContext.RGBA,
              this.drawingContext.UNSIGNED_BYTE,
              imageData
            );
            cov_1exsq9czgt.s[220]++;

            index = 0;
            cov_1exsq9czgt.s[221]++;
            return [
              imageData[index + 0],
              imageData[index + 1],
              imageData[index + 2],
              imageData[index + 3]
            ];
          };

          /**
           * Loads the pixels data for this canvas into the pixels[] attribute.
           * Note that updatePixels() and set() do not work.
           * Any pixel manipulation must be done directly to the pixels[] array.
           *
           * @private
           * @method loadPixels
           */ cov_1exsq9czgt.s[222]++;

          _main.default.RendererGL.prototype.loadPixels = function() {
            cov_1exsq9czgt.f[18]++;
            var pixelsState = (cov_1exsq9czgt.s[223]++, this._pixelsState);

            //@todo_FES
            cov_1exsq9czgt.s[224]++;
            if (this._pInst._glAttributes.preserveDrawingBuffer !== true) {
              cov_1exsq9czgt.b[27][0]++;
              cov_1exsq9czgt.s[225]++;
              console.log(
                'loadPixels only works in WebGL when preserveDrawingBuffer ' + 'is true.'
              );
              cov_1exsq9czgt.s[226]++;

              return;
            } else {
              cov_1exsq9czgt.b[27][1]++;
            }

            //if there isn't a renderer-level temporary pixels buffer
            //make a new one
            var pixels = (cov_1exsq9czgt.s[227]++, pixelsState.pixels);
            var len = (cov_1exsq9czgt.s[228]++,
            this.GL.drawingBufferWidth * this.GL.drawingBufferHeight * 4);
            cov_1exsq9czgt.s[229]++;
            if (
              (cov_1exsq9czgt.b[29][0]++, !(pixels instanceof Uint8Array)) ||
              (cov_1exsq9czgt.b[29][1]++, pixels.length !== len)
            ) {
              cov_1exsq9czgt.b[28][0]++;
              cov_1exsq9czgt.s[230]++;
              pixels = new Uint8Array(len);
              cov_1exsq9czgt.s[231]++;
              this._pixelsState._setProperty('pixels', pixels);
            } else {
              cov_1exsq9czgt.b[28][1]++;
            }

            var pd = (cov_1exsq9czgt.s[232]++, this._pInst._pixelDensity);
            // prettier-ignore
            cov_1exsq9czgt.s[233]++;
            this.GL.readPixels(
              0,
              0,
              this.width * pd,
              this.height * pd,
              this.GL.RGBA,
              this.GL.UNSIGNED_BYTE,
              pixels
            );
          };

          //////////////////////////////////////////////
          // HASH | for geometry
          //////////////////////////////////////////////
          cov_1exsq9czgt.s[234]++;
          _main.default.RendererGL.prototype.geometryInHash = function(gId) {
            cov_1exsq9czgt.f[19]++;
            cov_1exsq9czgt.s[235]++;
            return this.retainedMode.geometry[gId] !== undefined;
          };

          /**
           * [resize description]
           * @private
           * @param  {Number} w [description]
           * @param  {Number} h [description]
           */ cov_1exsq9czgt.s[236]++;
          _main.default.RendererGL.prototype.resize = function(w, h) {
            cov_1exsq9czgt.f[20]++;
            cov_1exsq9czgt.s[237]++;
            _main.default.Renderer.prototype.resize.call(this, w, h);
            cov_1exsq9czgt.s[238]++;
            this.GL.viewport(0, 0, this.GL.drawingBufferWidth, this.GL.drawingBufferHeight);
            cov_1exsq9czgt.s[239]++;

            this._viewport = this.GL.getParameter(this.GL.VIEWPORT);
            cov_1exsq9czgt.s[240]++;

            this._curCamera._resize();

            //resize pixels buffer
            var pixelsState = (cov_1exsq9czgt.s[241]++, this._pixelsState);
            cov_1exsq9czgt.s[242]++;
            if (typeof pixelsState.pixels !== 'undefined') {
              cov_1exsq9czgt.b[30][0]++;
              cov_1exsq9czgt.s[243]++;
              pixelsState._setProperty(
                'pixels',
                new Uint8Array(this.GL.drawingBufferWidth * this.GL.drawingBufferHeight * 4)
              );
            } else {
              cov_1exsq9czgt.b[30][1]++;
            }
          };

          /**
           * clears color and depth buffers
           * with r,g,b,a
           * @private
           * @param {Number} r normalized red val.
           * @param {Number} g normalized green val.
           * @param {Number} b normalized blue val.
           * @param {Number} a normalized alpha val.
           */ cov_1exsq9czgt.s[244]++;
          _main.default.RendererGL.prototype.clear = function() {
            cov_1exsq9czgt.f[21]++;
            var _r = (cov_1exsq9czgt.s[245]++,
            (cov_1exsq9czgt.b[31][0]++, arguments.length <= 0 ? undefined : arguments[0]) ||
              (cov_1exsq9czgt.b[31][1]++, 0));
            var _g = (cov_1exsq9czgt.s[246]++,
            (cov_1exsq9czgt.b[32][0]++, arguments.length <= 1 ? undefined : arguments[1]) ||
              (cov_1exsq9czgt.b[32][1]++, 0));
            var _b = (cov_1exsq9czgt.s[247]++,
            (cov_1exsq9czgt.b[33][0]++, arguments.length <= 2 ? undefined : arguments[2]) ||
              (cov_1exsq9czgt.b[33][1]++, 0));
            var _a = (cov_1exsq9czgt.s[248]++,
            (cov_1exsq9czgt.b[34][0]++, arguments.length <= 3 ? undefined : arguments[3]) ||
              (cov_1exsq9czgt.b[34][1]++, 0));
            cov_1exsq9czgt.s[249]++;
            this.GL.clearColor(_r, _g, _b, _a);
            cov_1exsq9czgt.s[250]++;
            this.GL.clear(this.GL.COLOR_BUFFER_BIT | this.GL.DEPTH_BUFFER_BIT);
          };
          cov_1exsq9czgt.s[251]++;

          _main.default.RendererGL.prototype.applyMatrix = function(a, b, c, d, e, f) {
            cov_1exsq9czgt.f[22]++;
            cov_1exsq9czgt.s[252]++;
            if (arguments.length === 16) {
              cov_1exsq9czgt.b[35][0]++;
              cov_1exsq9czgt.s[253]++;
              _main.default.Matrix.prototype.apply.apply(this.uMVMatrix, arguments);
            } else {
              cov_1exsq9czgt.b[35][1]++;
              cov_1exsq9czgt.s[254]++;
              // prettier-ignore
              this.uMVMatrix.apply([
    a, b, 0, 0,
    c, d, 0, 0,
    0, 0, 1, 0,
    e, f, 0, 1]);
            }
          };

          /**
           * [translate description]
           * @private
           * @param  {Number} x [description]
           * @param  {Number} y [description]
           * @param  {Number} z [description]
           * @chainable
           * @todo implement handle for components or vector as args
           */ cov_1exsq9czgt.s[255]++;
          _main.default.RendererGL.prototype.translate = function(x, y, z) {
            cov_1exsq9czgt.f[23]++;
            cov_1exsq9czgt.s[256]++;
            if (x instanceof _main.default.Vector) {
              cov_1exsq9czgt.b[36][0]++;
              cov_1exsq9czgt.s[257]++;
              z = x.z;
              cov_1exsq9czgt.s[258]++;
              y = x.y;
              cov_1exsq9czgt.s[259]++;
              x = x.x;
            } else {
              cov_1exsq9czgt.b[36][1]++;
            }
            cov_1exsq9czgt.s[260]++;
            this.uMVMatrix.translate([x, y, z]);
            cov_1exsq9czgt.s[261]++;
            return this;
          };

          /**
           * Scales the Model View Matrix by a vector
           * @private
           * @param  {Number | p5.Vector | Array} x [description]
           * @param  {Number} [y] y-axis scalar
           * @param  {Number} [z] z-axis scalar
           * @chainable
           */ cov_1exsq9czgt.s[262]++;
          _main.default.RendererGL.prototype.scale = function(x, y, z) {
            cov_1exsq9czgt.f[24]++;
            cov_1exsq9czgt.s[263]++;
            this.uMVMatrix.scale(x, y, z);
            cov_1exsq9czgt.s[264]++;
            return this;
          };
          cov_1exsq9czgt.s[265]++;

          _main.default.RendererGL.prototype.rotate = function(rad, axis) {
            cov_1exsq9czgt.f[25]++;
            cov_1exsq9czgt.s[266]++;
            if (typeof axis === 'undefined') {
              cov_1exsq9czgt.b[37][0]++;
              cov_1exsq9czgt.s[267]++;
              return this.rotateZ(rad);
            } else {
              cov_1exsq9czgt.b[37][1]++;
            }
            cov_1exsq9czgt.s[268]++;
            _main.default.Matrix.prototype.rotate.apply(this.uMVMatrix, arguments);
            cov_1exsq9czgt.s[269]++;
            return this;
          };
          cov_1exsq9czgt.s[270]++;

          _main.default.RendererGL.prototype.rotateX = function(rad) {
            cov_1exsq9czgt.f[26]++;
            cov_1exsq9czgt.s[271]++;
            this.rotate(rad, 1, 0, 0);
            cov_1exsq9czgt.s[272]++;
            return this;
          };
          cov_1exsq9czgt.s[273]++;

          _main.default.RendererGL.prototype.rotateY = function(rad) {
            cov_1exsq9czgt.f[27]++;
            cov_1exsq9czgt.s[274]++;
            this.rotate(rad, 0, 1, 0);
            cov_1exsq9czgt.s[275]++;
            return this;
          };
          cov_1exsq9czgt.s[276]++;

          _main.default.RendererGL.prototype.rotateZ = function(rad) {
            cov_1exsq9czgt.f[28]++;
            cov_1exsq9czgt.s[277]++;
            this.rotate(rad, 0, 0, 1);
            cov_1exsq9czgt.s[278]++;
            return this;
          };
          cov_1exsq9czgt.s[279]++;

          _main.default.RendererGL.prototype.push = function() {
            cov_1exsq9czgt.f[29]++;
            // get the base renderer style
            var style = (cov_1exsq9czgt.s[280]++,
            _main.default.Renderer.prototype.push.apply(this));

            // add webgl-specific style properties
            var properties = (cov_1exsq9czgt.s[281]++, style.properties);
            cov_1exsq9czgt.s[282]++;

            properties.uMVMatrix = this.uMVMatrix.copy();
            cov_1exsq9czgt.s[283]++;
            properties.uPMatrix = this.uPMatrix.copy();
            cov_1exsq9czgt.s[284]++;
            properties._curCamera = this._curCamera;

            // make a copy of the current camera for the push state
            // this preserves any references stored using 'createCamera'
            cov_1exsq9czgt.s[285]++;
            this._curCamera = this._curCamera.copy();
            cov_1exsq9czgt.s[286]++;

            properties.ambientLightColors = this.ambientLightColors.slice();
            cov_1exsq9czgt.s[287]++;
            properties.specularColors = this.specularColors.slice();
            cov_1exsq9czgt.s[288]++;

            properties.directionalLightDirections = this.directionalLightDirections.slice();
            cov_1exsq9czgt.s[289]++;
            properties.directionalLightDiffuseColors = this.directionalLightDiffuseColors.slice();
            cov_1exsq9czgt.s[290]++;
            properties.directionalLightSpecularColors = this.directionalLightSpecularColors.slice();
            cov_1exsq9czgt.s[291]++;

            properties.pointLightPositions = this.pointLightPositions.slice();
            cov_1exsq9czgt.s[292]++;
            properties.pointLightDiffuseColors = this.pointLightDiffuseColors.slice();
            cov_1exsq9czgt.s[293]++;
            properties.pointLightSpecularColors = this.pointLightSpecularColors.slice();
            cov_1exsq9czgt.s[294]++;

            properties.spotLightPositions = this.spotLightPositions.slice();
            cov_1exsq9czgt.s[295]++;
            properties.spotLightDirections = this.spotLightDirections.slice();
            cov_1exsq9czgt.s[296]++;
            properties.spotLightDiffuseColors = this.spotLightDiffuseColors.slice();
            cov_1exsq9czgt.s[297]++;
            properties.spotLightSpecularColors = this.spotLightSpecularColors.slice();
            cov_1exsq9czgt.s[298]++;
            properties.spotLightAngle = this.spotLightAngle.slice();
            cov_1exsq9czgt.s[299]++;
            properties.spotLightConc = this.spotLightConc.slice();
            cov_1exsq9czgt.s[300]++;

            properties.userFillShader = this.userFillShader;
            cov_1exsq9czgt.s[301]++;
            properties.userStrokeShader = this.userStrokeShader;
            cov_1exsq9czgt.s[302]++;
            properties.userPointShader = this.userPointShader;
            cov_1exsq9czgt.s[303]++;

            properties.pointSize = this.pointSize;
            cov_1exsq9czgt.s[304]++;
            properties.curStrokeWeight = this.curStrokeWeight;
            cov_1exsq9czgt.s[305]++;
            properties.curStrokeColor = this.curStrokeColor;
            cov_1exsq9czgt.s[306]++;
            properties.curFillColor = this.curFillColor;
            cov_1exsq9czgt.s[307]++;

            properties._useSpecularMaterial = this._useSpecularMaterial;
            cov_1exsq9czgt.s[308]++;
            properties._useEmissiveMaterial = this._useEmissiveMaterial;
            cov_1exsq9czgt.s[309]++;
            properties._useShininess = this._useShininess;
            cov_1exsq9czgt.s[310]++;

            properties.constantAttenuation = this.constantAttenuation;
            cov_1exsq9czgt.s[311]++;
            properties.linearAttenuation = this.linearAttenuation;
            cov_1exsq9czgt.s[312]++;
            properties.quadraticAttenuation = this.quadraticAttenuation;
            cov_1exsq9czgt.s[313]++;

            properties._enableLighting = this._enableLighting;
            cov_1exsq9czgt.s[314]++;
            properties._useNormalMaterial = this._useNormalMaterial;
            cov_1exsq9czgt.s[315]++;
            properties._tex = this._tex;
            cov_1exsq9czgt.s[316]++;
            properties.drawMode = this.drawMode;
            cov_1exsq9czgt.s[317]++;

            properties._currentNormal = this._currentNormal;
            cov_1exsq9czgt.s[318]++;

            return style;
          };
          cov_1exsq9czgt.s[319]++;

          _main.default.RendererGL.prototype.resetMatrix = function() {
            cov_1exsq9czgt.f[30]++;
            cov_1exsq9czgt.s[320]++;
            this.uMVMatrix = _main.default.Matrix.identity(this._pInst);
            cov_1exsq9czgt.s[321]++;
            return this;
          };

          //////////////////////////////////////////////
          // SHADER
          //////////////////////////////////////////////

          /*
 * shaders are created and cached on a per-renderer basis,
 * on the grounds that each renderer will have its own gl context
 * and the shader must be valid in that context.
 */ cov_1exsq9czgt
            .s[322]++;

          _main.default.RendererGL.prototype._getImmediateStrokeShader = function() {
            cov_1exsq9czgt.f[31]++;
            // select the stroke shader to use
            var stroke = (cov_1exsq9czgt.s[323]++, this.userStrokeShader);
            cov_1exsq9czgt.s[324]++;
            if (
              (cov_1exsq9czgt.b[39][0]++, !stroke) ||
              (cov_1exsq9czgt.b[39][1]++, !stroke.isStrokeShader())
            ) {
              cov_1exsq9czgt.b[38][0]++;
              cov_1exsq9czgt.s[325]++;
              return this._getLineShader();
            } else {
              cov_1exsq9czgt.b[38][1]++;
            }
            cov_1exsq9czgt.s[326]++;
            return stroke;
          };
          cov_1exsq9czgt.s[327]++;

          _main.default.RendererGL.prototype._getRetainedStrokeShader =
            _main.default.RendererGL.prototype._getImmediateStrokeShader;

          /*
                                                               * selects which fill shader should be used based on renderer state,
                                                               * for use with begin/endShape and immediate vertex mode.
                                                               */ cov_1exsq9czgt
            .s[328]++;
          _main.default.RendererGL.prototype._getImmediateFillShader = function() {
            cov_1exsq9czgt.f[32]++;
            var fill = (cov_1exsq9czgt.s[329]++, this.userFillShader);
            cov_1exsq9czgt.s[330]++;
            if (this._useNormalMaterial) {
              cov_1exsq9czgt.b[40][0]++;
              cov_1exsq9czgt.s[331]++;
              if (
                (cov_1exsq9czgt.b[42][0]++, !fill) ||
                (cov_1exsq9czgt.b[42][1]++, !fill.isNormalShader())
              ) {
                cov_1exsq9czgt.b[41][0]++;
                cov_1exsq9czgt.s[332]++;
                return this._getNormalShader();
              } else {
                cov_1exsq9czgt.b[41][1]++;
              }
            } else {
              cov_1exsq9czgt.b[40][1]++;
            }
            cov_1exsq9czgt.s[333]++;
            if (this._enableLighting) {
              cov_1exsq9czgt.b[43][0]++;
              cov_1exsq9czgt.s[334]++;
              if (
                (cov_1exsq9czgt.b[45][0]++, !fill) ||
                (cov_1exsq9czgt.b[45][1]++, !fill.isLightShader())
              ) {
                cov_1exsq9czgt.b[44][0]++;
                cov_1exsq9czgt.s[335]++;
                return this._getLightShader();
              } else {
                cov_1exsq9czgt.b[44][1]++;
              }
            } else {
              cov_1exsq9czgt.b[43][1]++;
              cov_1exsq9czgt.s[336]++;
              if (this._tex) {
                cov_1exsq9czgt.b[46][0]++;
                cov_1exsq9czgt.s[337]++;
                if (
                  (cov_1exsq9czgt.b[48][0]++, !fill) ||
                  (cov_1exsq9czgt.b[48][1]++, !fill.isTextureShader())
                ) {
                  cov_1exsq9czgt.b[47][0]++;
                  cov_1exsq9czgt.s[338]++;
                  return this._getLightShader();
                } else {
                  cov_1exsq9czgt.b[47][1]++;
                }
              } else {
                cov_1exsq9czgt.b[46][1]++;
                cov_1exsq9czgt.s[339]++;
                if (!fill /*|| !fill.isColorShader()*/) {
                  cov_1exsq9czgt.b[49][0]++;
                  cov_1exsq9czgt.s[340]++;
                  return this._getImmediateModeShader();
                } else {
                  cov_1exsq9czgt.b[49][1]++;
                }
              }
            }
            cov_1exsq9czgt.s[341]++;
            return fill;
          };

          /*
    * selects which fill shader should be used based on renderer state
    * for retained mode.
    */ cov_1exsq9czgt
            .s[342]++;
          _main.default.RendererGL.prototype._getRetainedFillShader = function() {
            cov_1exsq9czgt.f[33]++;
            cov_1exsq9czgt.s[343]++;
            if (this._useNormalMaterial) {
              cov_1exsq9czgt.b[50][0]++;
              cov_1exsq9czgt.s[344]++;
              return this._getNormalShader();
            } else {
              cov_1exsq9czgt.b[50][1]++;
            }

            var fill = (cov_1exsq9czgt.s[345]++, this.userFillShader);
            cov_1exsq9czgt.s[346]++;
            if (this._enableLighting) {
              cov_1exsq9czgt.b[51][0]++;
              cov_1exsq9czgt.s[347]++;
              if (
                (cov_1exsq9czgt.b[53][0]++, !fill) ||
                (cov_1exsq9czgt.b[53][1]++, !fill.isLightShader())
              ) {
                cov_1exsq9czgt.b[52][0]++;
                cov_1exsq9czgt.s[348]++;
                return this._getLightShader();
              } else {
                cov_1exsq9czgt.b[52][1]++;
              }
            } else {
              cov_1exsq9czgt.b[51][1]++;
              cov_1exsq9czgt.s[349]++;
              if (this._tex) {
                cov_1exsq9czgt.b[54][0]++;
                cov_1exsq9czgt.s[350]++;
                if (
                  (cov_1exsq9czgt.b[56][0]++, !fill) ||
                  (cov_1exsq9czgt.b[56][1]++, !fill.isTextureShader())
                ) {
                  cov_1exsq9czgt.b[55][0]++;
                  cov_1exsq9czgt.s[351]++;
                  return this._getLightShader();
                } else {
                  cov_1exsq9czgt.b[55][1]++;
                }
              } else {
                cov_1exsq9czgt.b[54][1]++;
                cov_1exsq9czgt.s[352]++;
                if (!fill /* || !fill.isColorShader()*/) {
                  cov_1exsq9czgt.b[57][0]++;
                  cov_1exsq9czgt.s[353]++;
                  return this._getColorShader();
                } else {
                  cov_1exsq9czgt.b[57][1]++;
                }
              }
            }
            cov_1exsq9czgt.s[354]++;
            return fill;
          };
          cov_1exsq9czgt.s[355]++;

          _main.default.RendererGL.prototype._getImmediatePointShader = function() {
            cov_1exsq9czgt.f[34]++;
            // select the point shader to use
            var point = (cov_1exsq9czgt.s[356]++, this.userPointShader);
            cov_1exsq9czgt.s[357]++;
            if (
              (cov_1exsq9czgt.b[59][0]++, !point) ||
              (cov_1exsq9czgt.b[59][1]++, !point.isPointShader())
            ) {
              cov_1exsq9czgt.b[58][0]++;
              cov_1exsq9czgt.s[358]++;
              return this._getPointShader();
            } else {
              cov_1exsq9czgt.b[58][1]++;
            }
            cov_1exsq9czgt.s[359]++;
            return point;
          };
          cov_1exsq9czgt.s[360]++;

          _main.default.RendererGL.prototype._getRetainedLineShader =
            _main.default.RendererGL.prototype._getImmediateLineShader;
          cov_1exsq9czgt.s[361]++;

          _main.default.RendererGL.prototype._getLightShader = function() {
            cov_1exsq9czgt.f[35]++;
            cov_1exsq9czgt.s[362]++;
            if (!this._defaultLightShader) {
              cov_1exsq9czgt.b[60][0]++;
              cov_1exsq9czgt.s[363]++;
              if (this._pInst._glAttributes.perPixelLighting) {
                cov_1exsq9czgt.b[61][0]++;
                cov_1exsq9czgt.s[364]++;
                this._defaultLightShader = new _main.default.Shader(
                  this,
                  defaultShaders.phongVert,
                  defaultShaders.phongFrag
                );
              } else {
                cov_1exsq9czgt.b[61][1]++;
                cov_1exsq9czgt.s[365]++;
                this._defaultLightShader = new _main.default.Shader(
                  this,
                  defaultShaders.lightVert,
                  defaultShaders.lightTextureFrag
                );
              }
            } else {
              cov_1exsq9czgt.b[60][1]++;
            }
            cov_1exsq9czgt.s[366]++;

            return this._defaultLightShader;
          };
          cov_1exsq9czgt.s[367]++;

          _main.default.RendererGL.prototype._getImmediateModeShader = function() {
            cov_1exsq9czgt.f[36]++;
            cov_1exsq9czgt.s[368]++;
            if (!this._defaultImmediateModeShader) {
              cov_1exsq9czgt.b[62][0]++;
              cov_1exsq9czgt.s[369]++;
              this._defaultImmediateModeShader = new _main.default.Shader(
                this,
                defaultShaders.immediateVert,
                defaultShaders.vertexColorFrag
              );
            } else {
              cov_1exsq9czgt.b[62][1]++;
            }
            cov_1exsq9czgt.s[370]++;

            return this._defaultImmediateModeShader;
          };
          cov_1exsq9czgt.s[371]++;

          _main.default.RendererGL.prototype._getNormalShader = function() {
            cov_1exsq9czgt.f[37]++;
            cov_1exsq9czgt.s[372]++;
            if (!this._defaultNormalShader) {
              cov_1exsq9czgt.b[63][0]++;
              cov_1exsq9czgt.s[373]++;
              this._defaultNormalShader = new _main.default.Shader(
                this,
                defaultShaders.normalVert,
                defaultShaders.normalFrag
              );
            } else {
              cov_1exsq9czgt.b[63][1]++;
            }
            cov_1exsq9czgt.s[374]++;

            return this._defaultNormalShader;
          };
          cov_1exsq9czgt.s[375]++;

          _main.default.RendererGL.prototype._getColorShader = function() {
            cov_1exsq9czgt.f[38]++;
            cov_1exsq9czgt.s[376]++;
            if (!this._defaultColorShader) {
              cov_1exsq9czgt.b[64][0]++;
              cov_1exsq9czgt.s[377]++;
              this._defaultColorShader = new _main.default.Shader(
                this,
                defaultShaders.normalVert,
                defaultShaders.basicFrag
              );
            } else {
              cov_1exsq9czgt.b[64][1]++;
            }
            cov_1exsq9czgt.s[378]++;

            return this._defaultColorShader;
          };
          cov_1exsq9czgt.s[379]++;

          _main.default.RendererGL.prototype._getPointShader = function() {
            cov_1exsq9czgt.f[39]++;
            cov_1exsq9czgt.s[380]++;
            if (!this._defaultPointShader) {
              cov_1exsq9czgt.b[65][0]++;
              cov_1exsq9czgt.s[381]++;
              this._defaultPointShader = new _main.default.Shader(
                this,
                defaultShaders.pointVert,
                defaultShaders.pointFrag
              );
            } else {
              cov_1exsq9czgt.b[65][1]++;
            }
            cov_1exsq9czgt.s[382]++;
            return this._defaultPointShader;
          };
          cov_1exsq9czgt.s[383]++;

          _main.default.RendererGL.prototype._getLineShader = function() {
            cov_1exsq9czgt.f[40]++;
            cov_1exsq9czgt.s[384]++;
            if (!this._defaultLineShader) {
              cov_1exsq9czgt.b[66][0]++;
              cov_1exsq9czgt.s[385]++;
              this._defaultLineShader = new _main.default.Shader(
                this,
                defaultShaders.lineVert,
                defaultShaders.lineFrag
              );
            } else {
              cov_1exsq9czgt.b[66][1]++;
            }
            cov_1exsq9czgt.s[386]++;

            return this._defaultLineShader;
          };
          cov_1exsq9czgt.s[387]++;

          _main.default.RendererGL.prototype._getFontShader = function() {
            cov_1exsq9czgt.f[41]++;
            cov_1exsq9czgt.s[388]++;
            if (!this._defaultFontShader) {
              cov_1exsq9czgt.b[67][0]++;
              cov_1exsq9czgt.s[389]++;
              this.GL.getExtension('OES_standard_derivatives');
              cov_1exsq9czgt.s[390]++;
              this._defaultFontShader = new _main.default.Shader(
                this,
                defaultShaders.fontVert,
                defaultShaders.fontFrag
              );
            } else {
              cov_1exsq9czgt.b[67][1]++;
            }
            cov_1exsq9czgt.s[391]++;
            return this._defaultFontShader;
          };
          cov_1exsq9czgt.s[392]++;

          _main.default.RendererGL.prototype._getEmptyTexture = function() {
            cov_1exsq9czgt.f[42]++;
            cov_1exsq9czgt.s[393]++;
            if (!this._emptyTexture) {
              cov_1exsq9czgt.b[68][0]++;
              // a plain white texture RGBA, full alpha, single pixel.
              var im = (cov_1exsq9czgt.s[394]++, new _main.default.Image(1, 1));
              cov_1exsq9czgt.s[395]++;
              im.set(0, 0, 255);
              cov_1exsq9czgt.s[396]++;
              this._emptyTexture = new _main.default.Texture(this, im);
            } else {
              cov_1exsq9czgt.b[68][1]++;
            }
            cov_1exsq9czgt.s[397]++;
            return this._emptyTexture;
          };
          cov_1exsq9czgt.s[398]++;

          _main.default.RendererGL.prototype.getTexture = function(img) {
            cov_1exsq9czgt.f[43]++;
            var textures = (cov_1exsq9czgt.s[399]++, this.textures);
            cov_1exsq9czgt.s[400]++;
            var _iteratorNormalCompletion = true;
            var _didIteratorError = false;
            var _iteratorError = undefined;
            try {
              for (
                var _iterator = textures[Symbol.iterator](), _step;
                !(_iteratorNormalCompletion = (_step = _iterator.next()).done);
                _iteratorNormalCompletion = true
              ) {
                var texture = _step.value;
                cov_1exsq9czgt.s[401]++;
                if (texture.src === img) {
                  cov_1exsq9czgt.b[69][0]++;
                  cov_1exsq9czgt.s[402]++;
                  return texture;
                } else {
                  cov_1exsq9czgt.b[69][1]++;
                }
              }
            } catch (err) {
              _didIteratorError = true;
              _iteratorError = err;
            } finally {
              try {
                if (!_iteratorNormalCompletion && _iterator.return != null) {
                  _iterator.return();
                }
              } finally {
                if (_didIteratorError) {
                  throw _iteratorError;
                }
              }
            }

            var tex = (cov_1exsq9czgt.s[403]++, new _main.default.Texture(this, img));
            cov_1exsq9czgt.s[404]++;
            textures.push(tex);
            cov_1exsq9czgt.s[405]++;
            return tex;
          };
          cov_1exsq9czgt.s[406]++;

          _main.default.RendererGL.prototype._setStrokeUniforms = function(strokeShader) {
            cov_1exsq9czgt.f[44]++;
            cov_1exsq9czgt.s[407]++;
            strokeShader.bindShader();

            // set the uniform values
            cov_1exsq9czgt.s[408]++;
            strokeShader.setUniform('uMaterialColor', this.curStrokeColor);
            cov_1exsq9czgt.s[409]++;
            strokeShader.setUniform('uStrokeWeight', this.curStrokeWeight);
          };
          cov_1exsq9czgt.s[410]++;

          _main.default.RendererGL.prototype._setFillUniforms = function(fillShader) {
            cov_1exsq9czgt.f[45]++;
            cov_1exsq9czgt.s[411]++;
            fillShader.bindShader();

            // TODO: optimize
            cov_1exsq9czgt.s[412]++;
            fillShader.setUniform('uMaterialColor', this.curFillColor);
            cov_1exsq9czgt.s[413]++;
            fillShader.setUniform('isTexture', !!this._tex);
            cov_1exsq9czgt.s[414]++;
            if (this._tex) {
              cov_1exsq9czgt.b[70][0]++;
              cov_1exsq9czgt.s[415]++;
              fillShader.setUniform('uSampler', this._tex);
            } else {
              cov_1exsq9czgt.b[70][1]++;
            }
            cov_1exsq9czgt.s[416]++;
            fillShader.setUniform('uTint', this._tint);
            cov_1exsq9czgt.s[417]++;

            fillShader.setUniform('uSpecular', this._useSpecularMaterial);
            cov_1exsq9czgt.s[418]++;
            fillShader.setUniform('uEmissive', this._useEmissiveMaterial);
            cov_1exsq9czgt.s[419]++;
            fillShader.setUniform('uShininess', this._useShininess);
            cov_1exsq9czgt.s[420]++;

            fillShader.setUniform('uUseLighting', this._enableLighting);

            var pointLightCount = (cov_1exsq9czgt.s[421]++,
            this.pointLightDiffuseColors.length / 3);
            cov_1exsq9czgt.s[422]++;
            fillShader.setUniform('uPointLightCount', pointLightCount);
            cov_1exsq9czgt.s[423]++;
            fillShader.setUniform('uPointLightLocation', this.pointLightPositions);
            cov_1exsq9czgt.s[424]++;
            fillShader.setUniform('uPointLightDiffuseColors', this.pointLightDiffuseColors);
            cov_1exsq9czgt.s[425]++;

            fillShader.setUniform(
              'uPointLightSpecularColors',
              this.pointLightSpecularColors
            );

            var directionalLightCount = (cov_1exsq9czgt.s[426]++,
            this.directionalLightDiffuseColors.length / 3);
            cov_1exsq9czgt.s[427]++;
            fillShader.setUniform('uDirectionalLightCount', directionalLightCount);
            cov_1exsq9czgt.s[428]++;
            fillShader.setUniform('uLightingDirection', this.directionalLightDirections);
            cov_1exsq9czgt.s[429]++;
            fillShader.setUniform(
              'uDirectionalDiffuseColors',
              this.directionalLightDiffuseColors
            );
            cov_1exsq9czgt.s[430]++;

            fillShader.setUniform(
              'uDirectionalSpecularColors',
              this.directionalLightSpecularColors
            );

            // TODO: sum these here...
            var ambientLightCount = (cov_1exsq9czgt.s[431]++,
            this.ambientLightColors.length / 3);
            cov_1exsq9czgt.s[432]++;
            fillShader.setUniform('uAmbientLightCount', ambientLightCount);
            cov_1exsq9czgt.s[433]++;
            fillShader.setUniform('uAmbientColor', this.ambientLightColors);

            var spotLightCount = (cov_1exsq9czgt.s[434]++,
            this.spotLightDiffuseColors.length / 3);
            cov_1exsq9czgt.s[435]++;
            fillShader.setUniform('uSpotLightCount', spotLightCount);
            cov_1exsq9czgt.s[436]++;
            fillShader.setUniform('uSpotLightAngle', this.spotLightAngle);
            cov_1exsq9czgt.s[437]++;
            fillShader.setUniform('uSpotLightConc', this.spotLightConc);
            cov_1exsq9czgt.s[438]++;
            fillShader.setUniform('uSpotLightDiffuseColors', this.spotLightDiffuseColors);
            cov_1exsq9czgt.s[439]++;
            fillShader.setUniform('uSpotLightSpecularColors', this.spotLightSpecularColors);
            cov_1exsq9czgt.s[440]++;

            fillShader.setUniform('uSpotLightLocation', this.spotLightPositions);
            cov_1exsq9czgt.s[441]++;
            fillShader.setUniform('uSpotLightDirection', this.spotLightDirections);
            cov_1exsq9czgt.s[442]++;

            fillShader.setUniform('uConstantAttenuation', this.constantAttenuation);
            cov_1exsq9czgt.s[443]++;
            fillShader.setUniform('uLinearAttenuation', this.linearAttenuation);
            cov_1exsq9czgt.s[444]++;
            fillShader.setUniform('uQuadraticAttenuation', this.quadraticAttenuation);
            cov_1exsq9czgt.s[445]++;

            fillShader.bindTextures();
          };
          cov_1exsq9czgt.s[446]++;

          _main.default.RendererGL.prototype._setPointUniforms = function(pointShader) {
            cov_1exsq9czgt.f[46]++;
            cov_1exsq9czgt.s[447]++;
            pointShader.bindShader();

            // set the uniform values
            cov_1exsq9czgt.s[448]++;
            pointShader.setUniform('uMaterialColor', this.curStrokeColor);
            // @todo is there an instance where this isn't stroke weight?
            // should be they be same var?
            cov_1exsq9czgt.s[449]++;
            pointShader.setUniform(
              'uPointSize',
              this.pointSize * this._pInst._pixelDensity
            );
          };

          /* Binds a buffer to the drawing context
    * when passed more than two arguments it also updates or initializes
    * the data associated with the buffer
    */ cov_1exsq9czgt
            .s[450]++;
          _main.default.RendererGL.prototype._bindBuffer = function(
            buffer,
            target,
            values,
            type,
            usage
          ) {
            cov_1exsq9czgt.f[47]++;
            cov_1exsq9czgt.s[451]++;
            if (!target) {
              cov_1exsq9czgt.b[71][0]++;
              cov_1exsq9czgt.s[452]++;
              target = this.GL.ARRAY_BUFFER;
            } else {
              cov_1exsq9czgt.b[71][1]++;
            }
            cov_1exsq9czgt.s[453]++;
            this.GL.bindBuffer(target, buffer);
            cov_1exsq9czgt.s[454]++;
            if (values !== undefined) {
              cov_1exsq9czgt.b[72][0]++;
              var data = (cov_1exsq9czgt.s[455]++,
              new ((cov_1exsq9czgt.b[73][0]++, type) ||
                (cov_1exsq9czgt.b[73][1]++, Float32Array))(values));
              cov_1exsq9czgt.s[456]++;
              this.GL.bufferData(
                target,
                data,
                (cov_1exsq9czgt.b[74][0]++, usage) ||
                  (cov_1exsq9czgt.b[74][1]++, this.GL.STATIC_DRAW)
              );
            } else {
              cov_1exsq9czgt.b[72][1]++;
            }
          };

          ///////////////////////////////
          //// UTILITY FUNCTIONS
          //////////////////////////////
          cov_1exsq9czgt.s[457]++;
          _main.default.RendererGL.prototype._arraysEqual = function(a, b) {
            cov_1exsq9czgt.f[48]++;
            var aLength = (cov_1exsq9czgt.s[458]++, a.length);
            cov_1exsq9czgt.s[459]++;
            if (aLength !== b.length) {
              cov_1exsq9czgt.b[75][0]++;
              cov_1exsq9czgt.s[460]++;
              return false;
            } else {
              cov_1exsq9czgt.b[75][1]++;
            }
            cov_1exsq9czgt.s[461]++;
            for (var i = (cov_1exsq9czgt.s[462]++, 0); i < aLength; i++) {
              cov_1exsq9czgt.s[463]++;
              if (a[i] !== b[i]) {
                cov_1exsq9czgt.b[76][0]++;
                cov_1exsq9czgt.s[464]++;
                return false;
              } else {
                cov_1exsq9czgt.b[76][1]++;
              }
            }
            cov_1exsq9czgt.s[465]++;
            return true;
          };
          cov_1exsq9czgt.s[466]++;

          _main.default.RendererGL.prototype._isTypedArray = function(arr) {
            cov_1exsq9czgt.f[49]++;
            var res = (cov_1exsq9czgt.s[467]++, false);
            cov_1exsq9czgt.s[468]++;
            res = arr instanceof Float32Array;
            cov_1exsq9czgt.s[469]++;
            res = arr instanceof Float64Array;
            cov_1exsq9czgt.s[470]++;
            res = arr instanceof Int16Array;
            cov_1exsq9czgt.s[471]++;
            res = arr instanceof Uint16Array;
            cov_1exsq9czgt.s[472]++;
            res = arr instanceof Uint32Array;
            cov_1exsq9czgt.s[473]++;
            return res;
          };
          /**
           * turn a two dimensional array into one dimensional array
           * @private
           * @param  {Array} arr 2-dimensional array
           * @return {Array}     1-dimensional array
           * [[1, 2, 3],[4, 5, 6]] -> [1, 2, 3, 4, 5, 6]
           */ cov_1exsq9czgt.s[474]++;
          _main.default.RendererGL.prototype._flatten = function(arr) {
            cov_1exsq9czgt.f[50]++;
            cov_1exsq9czgt.s[475]++;
            //when empty, return empty
            if (arr.length === 0) {
              cov_1exsq9czgt.b[77][0]++;
              cov_1exsq9czgt.s[476]++;
              return [];
            } else {
              cov_1exsq9czgt.b[77][1]++;
              cov_1exsq9czgt.s[477]++;
              if (arr.length > 20000) {
                cov_1exsq9czgt.b[78][0]++;
                //big models , load slower to avoid stack overflow
                //faster non-recursive flatten via axelduch
                //stackoverflow.com/questions/27266550/how-to-flatten-nested-array-in-javascript
                var _toString = (cov_1exsq9czgt.s[478]++, Object.prototype.toString);
                var arrayTypeStr = (cov_1exsq9czgt.s[479]++, '[object Array]');
                var result = (cov_1exsq9czgt.s[480]++, []);
                var nodes = (cov_1exsq9czgt.s[481]++, arr.slice());
                var node;
                cov_1exsq9czgt.s[482]++;
                node = nodes.pop();
                cov_1exsq9czgt.s[483]++;
                do {
                  cov_1exsq9czgt.s[484]++;
                  if (_toString.call(node) === arrayTypeStr) {
                    cov_1exsq9czgt.b[80][0]++;
                    cov_1exsq9czgt.s[485]++;
                    nodes.push.apply(nodes, _toConsumableArray(node));
                  } else {
                    cov_1exsq9czgt.b[80][1]++;
                    cov_1exsq9czgt.s[486]++;
                    result.push(node);
                  }
                } while (
                  (cov_1exsq9czgt.b[79][0]++, nodes.length) &&
                  (cov_1exsq9czgt.b[79][1]++, (node = nodes.pop()) !== undefined)
                );
                cov_1exsq9czgt.s[487]++;
                result.reverse(); // we reverse result to restore the original order
                cov_1exsq9czgt.s[488]++;
                return result;
              } else {
                var _ref;
                cov_1exsq9czgt.b[78][1]++;
                cov_1exsq9czgt.s[489]++;
                //otherwise if model within limits for browser
                //use faster recursive loading
                return (_ref = []).concat.apply(_ref, _toConsumableArray(arr));
              }
            }
          };

          /**
           * turn a p5.Vector Array into a one dimensional number array
           * @private
           * @param  {p5.Vector[]} arr  an array of p5.Vector
           * @return {Number[]}     a one dimensional array of numbers
           * [p5.Vector(1, 2, 3), p5.Vector(4, 5, 6)] ->
           * [1, 2, 3, 4, 5, 6]
           */ cov_1exsq9czgt.s[490]++;
          _main.default.RendererGL.prototype._vToNArray = function(arr) {
            cov_1exsq9czgt.f[51]++;
            var ret = (cov_1exsq9czgt.s[491]++, []);
            cov_1exsq9czgt.s[492]++;
            var _iteratorNormalCompletion2 = true;
            var _didIteratorError2 = false;
            var _iteratorError2 = undefined;
            try {
              for (
                var _iterator2 = arr[Symbol.iterator](), _step2;
                !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done);
                _iteratorNormalCompletion2 = true
              ) {
                var item = _step2.value;
                cov_1exsq9czgt.s[493]++;
                ret.push(item.x, item.y, item.z);
              }
            } catch (err) {
              _didIteratorError2 = true;
              _iteratorError2 = err;
            } finally {
              try {
                if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
                  _iterator2.return();
                }
              } finally {
                if (_didIteratorError2) {
                  throw _iteratorError2;
                }
              }
            }
            cov_1exsq9czgt.s[494]++;

            return ret;
          };

          /**
           * ensures that p5 is using a 3d renderer. throws an error if not.
           */ cov_1exsq9czgt.s[495]++;
          _main.default.prototype._assert3d = function(name) {
            cov_1exsq9czgt.f[52]++;
            cov_1exsq9czgt.s[496]++;
            if (!this._renderer.isP3D) {
              cov_1exsq9czgt.b[81][0]++;
              cov_1exsq9czgt.s[497]++;
              throw new Error(
                ''.concat(
                  name,
                  "() is only supported in WEBGL mode. If you'd like to use 3D graphics and WebGL, see  https://p5js.org/examples/form-3d-primitives.html for more information."
                )
              );
            } else {
              cov_1exsq9czgt.b[81][1]++;
            }
          };

          // function to initialize GLU Tesselator
          cov_1exsq9czgt.s[498]++;
          _main.default.RendererGL.prototype._initTessy = function initTesselator() {
            cov_1exsq9czgt.f[53]++;
            // function called for each vertex of tesselator output
            function vertexCallback(data, polyVertArray) {
              cov_1exsq9czgt.f[54]++;
              cov_1exsq9czgt.s[499]++;
              polyVertArray[polyVertArray.length] = data[0];
              cov_1exsq9czgt.s[500]++;
              polyVertArray[polyVertArray.length] = data[1];
              cov_1exsq9czgt.s[501]++;
              polyVertArray[polyVertArray.length] = data[2];
            }

            function begincallback(type) {
              cov_1exsq9czgt.f[55]++;
              cov_1exsq9czgt.s[502]++;
              if (type !== _libtess.default.primitiveType.GL_TRIANGLES) {
                cov_1exsq9czgt.b[82][0]++;
                cov_1exsq9czgt.s[503]++;
                console.log('expected TRIANGLES but got type: '.concat(type));
              } else {
                cov_1exsq9czgt.b[82][1]++;
              }
            }

            function errorcallback(errno) {
              cov_1exsq9czgt.f[56]++;
              cov_1exsq9czgt.s[504]++;
              console.log('error callback');
              cov_1exsq9czgt.s[505]++;
              console.log('error number: '.concat(errno));
            }
            // callback for when segments intersect and must be split
            function combinecallback(coords, data, weight) {
              cov_1exsq9czgt.f[57]++;
              cov_1exsq9czgt.s[506]++;
              return [coords[0], coords[1], coords[2]];
            }

            function edgeCallback(flag) {
              // don't really care about the flag, but need no-strip/no-fan behavior
              cov_1exsq9czgt.f[58]++;
            }

            var tessy = (cov_1exsq9czgt.s[507]++, new _libtess.default.GluTesselator());
            cov_1exsq9czgt.s[508]++;
            tessy.gluTessCallback(
              _libtess.default.gluEnum.GLU_TESS_VERTEX_DATA,
              vertexCallback
            );
            cov_1exsq9czgt.s[509]++;
            tessy.gluTessCallback(_libtess.default.gluEnum.GLU_TESS_BEGIN, begincallback);
            cov_1exsq9czgt.s[510]++;
            tessy.gluTessCallback(_libtess.default.gluEnum.GLU_TESS_ERROR, errorcallback);
            cov_1exsq9czgt.s[511]++;
            tessy.gluTessCallback(
              _libtess.default.gluEnum.GLU_TESS_COMBINE,
              combinecallback
            );
            cov_1exsq9czgt.s[512]++;
            tessy.gluTessCallback(
              _libtess.default.gluEnum.GLU_TESS_EDGE_FLAG,
              edgeCallback
            );
            cov_1exsq9czgt.s[513]++;

            return tessy;
          };
          cov_1exsq9czgt.s[514]++;

          _main.default.RendererGL.prototype._triangulate = function(contours) {
            cov_1exsq9czgt.f[59]++;
            cov_1exsq9czgt.s[515]++;
            // libtess will take 3d verts and flatten to a plane for tesselation
            // since only doing 2d tesselation here, provide z=1 normal to skip
            // iterating over verts only to get the same answer.
            // comment out to test normal-generation code
            this._tessy.gluTessNormal(0, 0, 1);

            var triangleVerts = (cov_1exsq9czgt.s[516]++, []);
            cov_1exsq9czgt.s[517]++;
            this._tessy.gluTessBeginPolygon(triangleVerts);
            cov_1exsq9czgt.s[518]++;

            for (var i = (cov_1exsq9czgt.s[519]++, 0); i < contours.length; i++) {
              cov_1exsq9czgt.s[520]++;
              this._tessy.gluTessBeginContour();
              var contour = (cov_1exsq9czgt.s[521]++, contours[i]);
              cov_1exsq9czgt.s[522]++;
              for (var j = (cov_1exsq9czgt.s[523]++, 0); j < contour.length; j += 3) {
                var coords = (cov_1exsq9czgt.s[524]++,
                [contour[j], contour[j + 1], contour[j + 2]]);
                cov_1exsq9czgt.s[525]++;
                this._tessy.gluTessVertex(coords, coords);
              }
              cov_1exsq9czgt.s[526]++;
              this._tessy.gluTessEndContour();
            }

            // finish polygon
            cov_1exsq9czgt.s[527]++;
            this._tessy.gluTessEndPolygon();
            cov_1exsq9czgt.s[528]++;

            return triangleVerts;
          };

          // function to calculate BezierVertex Coefficients
          cov_1exsq9czgt.s[529]++;
          _main.default.RendererGL.prototype._bezierCoefficients = function(t) {
            cov_1exsq9czgt.f[60]++;
            var t2 = (cov_1exsq9czgt.s[530]++, t * t);
            var t3 = (cov_1exsq9czgt.s[531]++, t2 * t);
            var mt = (cov_1exsq9czgt.s[532]++, 1 - t);
            var mt2 = (cov_1exsq9czgt.s[533]++, mt * mt);
            var mt3 = (cov_1exsq9czgt.s[534]++, mt2 * mt);
            cov_1exsq9czgt.s[535]++;
            return [mt3, 3 * mt2 * t, 3 * mt * t2, t3];
          };

          // function to calculate QuadraticVertex Coefficients
          cov_1exsq9czgt.s[536]++;
          _main.default.RendererGL.prototype._quadraticCoefficients = function(t) {
            cov_1exsq9czgt.f[61]++;
            var t2 = (cov_1exsq9czgt.s[537]++, t * t);
            var mt = (cov_1exsq9czgt.s[538]++, 1 - t);
            var mt2 = (cov_1exsq9czgt.s[539]++, mt * mt);
            cov_1exsq9czgt.s[540]++;
            return [mt2, 2 * mt * t, t2];
          };

          // function to convert Bezier coordinates to Catmull Rom Splines
          cov_1exsq9czgt.s[541]++;
          _main.default.RendererGL.prototype._bezierToCatmull = function(w) {
            cov_1exsq9czgt.f[62]++;
            var p1 = (cov_1exsq9czgt.s[542]++, w[1]);
            var p2 = (cov_1exsq9czgt.s[543]++, w[1] + (w[2] - w[0]) / this._curveTightness);
            var p3 = (cov_1exsq9czgt.s[544]++, w[2] - (w[3] - w[1]) / this._curveTightness);
            var p4 = (cov_1exsq9czgt.s[545]++, w[2]);
            var p = (cov_1exsq9czgt.s[546]++, [p1, p2, p3, p4]);
            cov_1exsq9czgt.s[547]++;
            return p;
          };
          var _default = _main.default.RendererGL;
          exports.default = _default;
        },
        {
          '../core/constants': 272,
          '../core/main': 283,
          '../core/p5.Renderer': 286,
          './p5.Camera': 331,
          './p5.Matrix': 333,
          './p5.Shader': 338,
          'core-js/modules/es.array.concat': 166,
          'core-js/modules/es.array.fill': 168,
          'core-js/modules/es.array.filter': 169,
          'core-js/modules/es.array.from': 171,
          'core-js/modules/es.array.includes': 172,
          'core-js/modules/es.array.iterator': 174,
          'core-js/modules/es.array.slice': 178,
          'core-js/modules/es.object.assign': 188,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.regexp.to-string': 197,
          'core-js/modules/es.string.includes': 200,
          'core-js/modules/es.string.iterator': 201,
          'core-js/modules/es.symbol': 211,
          'core-js/modules/es.symbol.description': 209,
          'core-js/modules/es.symbol.iterator': 210,
          'core-js/modules/es.typed-array.copy-within': 212,
          'core-js/modules/es.typed-array.every': 213,
          'core-js/modules/es.typed-array.fill': 214,
          'core-js/modules/es.typed-array.filter': 215,
          'core-js/modules/es.typed-array.find': 217,
          'core-js/modules/es.typed-array.find-index': 216,
          'core-js/modules/es.typed-array.float32-array': 218,
          'core-js/modules/es.typed-array.float64-array': 219,
          'core-js/modules/es.typed-array.for-each': 220,
          'core-js/modules/es.typed-array.includes': 221,
          'core-js/modules/es.typed-array.index-of': 222,
          'core-js/modules/es.typed-array.int16-array': 223,
          'core-js/modules/es.typed-array.iterator': 225,
          'core-js/modules/es.typed-array.join': 226,
          'core-js/modules/es.typed-array.last-index-of': 227,
          'core-js/modules/es.typed-array.map': 228,
          'core-js/modules/es.typed-array.reduce': 230,
          'core-js/modules/es.typed-array.reduce-right': 229,
          'core-js/modules/es.typed-array.reverse': 231,
          'core-js/modules/es.typed-array.set': 232,
          'core-js/modules/es.typed-array.slice': 233,
          'core-js/modules/es.typed-array.some': 234,
          'core-js/modules/es.typed-array.sort': 235,
          'core-js/modules/es.typed-array.subarray': 236,
          'core-js/modules/es.typed-array.to-locale-string': 237,
          'core-js/modules/es.typed-array.to-string': 238,
          'core-js/modules/es.typed-array.uint16-array': 239,
          'core-js/modules/es.typed-array.uint32-array': 240,
          'core-js/modules/es.typed-array.uint8-array': 241,
          'core-js/modules/web.dom-collections.iterator': 244,
          libtess: 256,
          path: 259
        }
      ],
      338: [
        function(_dereq_, module, exports) {
          'use strict';
          var cov_19685e0snu = (function() {
            var path = '/Users/outofambit/src/p5.js/src/webgl/p5.Shader.js';
            var hash = 'e775d8c64e1ea43737732fa065cf6b7a38d4cfd0';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/webgl/p5.Shader.js',
              statementMap: {
                '0': { start: { line: 20, column: 0 }, end: { line: 36, column: 2 } },
                '1': { start: { line: 24, column: 2 }, end: { line: 24, column: 28 } },
                '2': { start: { line: 25, column: 2 }, end: { line: 25, column: 26 } },
                '3': { start: { line: 26, column: 2 }, end: { line: 26, column: 26 } },
                '4': { start: { line: 27, column: 2 }, end: { line: 27, column: 24 } },
                '5': { start: { line: 28, column: 2 }, end: { line: 28, column: 24 } },
                '6': { start: { line: 29, column: 2 }, end: { line: 29, column: 22 } },
                '7': { start: { line: 30, column: 2 }, end: { line: 30, column: 33 } },
                '8': { start: { line: 31, column: 2 }, end: { line: 31, column: 23 } },
                '9': { start: { line: 32, column: 2 }, end: { line: 32, column: 31 } },
                '10': { start: { line: 33, column: 2 }, end: { line: 33, column: 21 } },
                '11': { start: { line: 34, column: 2 }, end: { line: 34, column: 22 } },
                '12': { start: { line: 35, column: 2 }, end: { line: 35, column: 21 } },
                '13': { start: { line: 47, column: 0 }, end: { line: 103, column: 2 } },
                '14': { start: { line: 48, column: 2 }, end: { line: 101, column: 3 } },
                '15': { start: { line: 49, column: 15 }, end: { line: 49, column: 32 } },
                '16': { start: { line: 59, column: 4 }, end: { line: 59, column: 57 } },
                '17': { start: { line: 61, column: 4 }, end: { line: 61, column: 53 } },
                '18': { start: { line: 62, column: 4 }, end: { line: 62, column: 39 } },
                '19': { start: { line: 64, column: 4 }, end: { line: 71, column: 5 } },
                '20': { start: { line: 65, column: 6 }, end: { line: 69, column: 8 } },
                '21': { start: { line: 70, column: 6 }, end: { line: 70, column: 18 } },
                '22': { start: { line: 73, column: 4 }, end: { line: 73, column: 59 } },
                '23': { start: { line: 75, column: 4 }, end: { line: 75, column: 53 } },
                '24': { start: { line: 76, column: 4 }, end: { line: 76, column: 39 } },
                '25': { start: { line: 78, column: 4 }, end: { line: 85, column: 5 } },
                '26': { start: { line: 79, column: 6 }, end: { line: 83, column: 8 } },
                '27': { start: { line: 84, column: 6 }, end: { line: 84, column: 18 } },
                '28': { start: { line: 87, column: 4 }, end: { line: 87, column: 41 } },
                '29': { start: { line: 88, column: 4 }, end: { line: 88, column: 55 } },
                '30': { start: { line: 89, column: 4 }, end: { line: 89, column: 55 } },
                '31': { start: { line: 90, column: 4 }, end: { line: 90, column: 36 } },
                '32': { start: { line: 91, column: 4 }, end: { line: 97, column: 5 } },
                '33': { start: { line: 92, column: 6 }, end: { line: 96, column: 8 } },
                '34': { start: { line: 99, column: 4 }, end: { line: 99, column: 27 } },
                '35': { start: { line: 100, column: 4 }, end: { line: 100, column: 25 } },
                '36': { start: { line: 102, column: 2 }, end: { line: 102, column: 14 } },
                '37': { start: { line: 111, column: 0 }, end: { line: 138, column: 2 } },
                '38': { start: { line: 112, column: 2 }, end: { line: 114, column: 3 } },
                '39': { start: { line: 113, column: 4 }, end: { line: 113, column: 11 } },
                '40': { start: { line: 116, column: 2 }, end: { line: 116, column: 23 } },
                '41': { start: { line: 118, column: 13 }, end: { line: 118, column: 30 } },
                '42': { start: { line: 120, column: 24 }, end: { line: 123, column: 3 } },
                '43': { start: { line: 124, column: 2 }, end: { line: 135, column: 3 } },
                '44': { start: { line: 124, column: 15 }, end: { line: 124, column: 16 } },
                '45': { start: { line: 125, column: 26 }, end: { line: 125, column: 64 } },
                '46': { start: { line: 126, column: 17 }, end: { line: 126, column: 35 } },
                '47': { start: { line: 127, column: 21 }, end: { line: 127, column: 64 } },
                '48': { start: { line: 128, column: 22 }, end: { line: 128, column: 24 } },
                '49': { start: { line: 129, column: 4 }, end: { line: 129, column: 26 } },
                '50': { start: { line: 130, column: 4 }, end: { line: 130, column: 34 } },
                '51': { start: { line: 131, column: 4 }, end: { line: 131, column: 24 } },
                '52': { start: { line: 132, column: 4 }, end: { line: 132, column: 40 } },
                '53': { start: { line: 133, column: 4 }, end: { line: 133, column: 40 } },
                '54': { start: { line: 134, column: 4 }, end: { line: 134, column: 38 } },
                '55': { start: { line: 137, column: 2 }, end: { line: 137, column: 32 } },
                '56': { start: { line: 146, column: 0 }, end: { line: 194, column: 2 } },
                '57': { start: { line: 147, column: 2 }, end: { line: 149, column: 3 } },
                '58': { start: { line: 148, column: 4 }, end: { line: 148, column: 11 } },
                '59': { start: { line: 151, column: 13 }, end: { line: 151, column: 30 } },
                '60': { start: { line: 154, column: 22 }, end: { line: 157, column: 3 } },
                '61': { start: { line: 159, column: 21 }, end: { line: 159, column: 22 } },
                '62': { start: { line: 160, column: 2 }, end: { line: 192, column: 3 } },
                '63': { start: { line: 160, column: 15 }, end: { line: 160, column: 16 } },
                '64': { start: { line: 161, column: 24 }, end: { line: 161, column: 63 } },
                '65': { start: { line: 162, column: 20 }, end: { line: 162, column: 22 } },
                '66': { start: { line: 163, column: 4 }, end: { line: 163, column: 80 } },
                '67': { start: { line: 164, column: 4 }, end: { line: 164, column: 36 } },
                '68': { start: { line: 165, column: 22 }, end: { line: 165, column: 38 } },
                '69': { start: { line: 170, column: 4 }, end: { line: 172, column: 5 } },
                '70': { start: { line: 171, column: 6 }, end: { line: 171, column: 73 } },
                '71': { start: { line: 173, column: 4 }, end: { line: 173, column: 31 } },
                '72': { start: { line: 174, column: 4 }, end: { line: 174, column: 36 } },
                '73': { start: { line: 175, column: 4 }, end: { line: 175, column: 36 } },
                '74': { start: { line: 176, column: 4 }, end: { line: 180, column: 5 } },
                '75': { start: { line: 177, column: 6 }, end: { line: 177, column: 42 } },
                '76': { start: { line: 178, column: 6 }, end: { line: 178, column: 21 } },
                '77': { start: { line: 179, column: 6 }, end: { line: 179, column: 34 } },
                '78': { start: { line: 181, column: 4 }, end: { line: 189, column: 35 } },
                '79': { start: { line: 191, column: 4 }, end: { line: 191, column: 41 } },
                '80': { start: { line: 193, column: 2 }, end: { line: 193, column: 30 } },
                '81': { start: { line: 196, column: 0 }, end: { line: 198, column: 2 } },
                '82': { start: { line: 205, column: 0 }, end: { line: 215, column: 2 } },
                '83': { start: { line: 206, column: 2 }, end: { line: 206, column: 14 } },
                '84': { start: { line: 207, column: 2 }, end: { line: 214, column: 3 } },
                '85': { start: { line: 208, column: 4 }, end: { line: 208, column: 22 } },
                '86': { start: { line: 209, column: 4 }, end: { line: 209, column: 23 } },
                '87': { start: { line: 211, column: 4 }, end: { line: 211, column: 30 } },
                '88': { start: { line: 213, column: 4 }, end: { line: 213, column: 59 } },
                '89': { start: { line: 222, column: 0 }, end: { line: 229, column: 2 } },
                '90': { start: { line: 223, column: 2 }, end: { line: 227, column: 3 } },
                '91': { start: { line: 224, column: 4 }, end: { line: 224, column: 26 } },
                '92': { start: { line: 226, column: 4 }, end: { line: 226, column: 24 } },
                '93': { start: { line: 228, column: 2 }, end: { line: 228, column: 14 } },
                '94': { start: { line: 231, column: 0 }, end: { line: 247, column: 2 } },
                '95': { start: { line: 232, column: 13 }, end: { line: 232, column: 30 } },
                '96': { start: { line: 234, column: 2 }, end: { line: 246, column: 3 } },
                '97': { start: { line: 235, column: 14 }, end: { line: 235, column: 29 } },
                '98': { start: { line: 236, column: 4 }, end: { line: 241, column: 5 } },
                '99': { start: { line: 240, column: 6 }, end: { line: 240, column: 46 } },
                '100': { start: { line: 242, column: 4 }, end: { line: 242, column: 57 } },
                '101': { start: { line: 243, column: 4 }, end: { line: 243, column: 22 } },
                '102': { start: { line: 244, column: 4 }, end: { line: 244, column: 17 } },
                '103': { start: { line: 245, column: 4 }, end: { line: 245, column: 57 } },
                '104': { start: { line: 249, column: 0 }, end: { line: 256, column: 2 } },
                '105': { start: { line: 250, column: 2 }, end: { line: 255, column: 3 } },
                '106': { start: { line: 251, column: 16 }, end: { line: 251, column: 31 } },
                '107': { start: { line: 252, column: 4 }, end: { line: 254, column: 5 } },
                '108': { start: { line: 253, column: 6 }, end: { line: 253, column: 19 } },
                '109': { start: { line: 258, column: 0 }, end: { line: 261, column: 2 } },
                '110': { start: { line: 263, column: 0 }, end: { line: 280, column: 2 } },
                '111': { start: { line: 264, column: 2 }, end: { line: 264, column: 69 } },
                '112': { start: { line: 265, column: 2 }, end: { line: 273, column: 3 } },
                '113': { start: { line: 266, column: 4 }, end: { line: 272, column: 5 } },
                '114': { start: { line: 268, column: 6 }, end: { line: 268, column: 41 } },
                '115': { start: { line: 271, column: 6 }, end: { line: 271, column: 41 } },
                '116': { start: { line: 274, column: 2 }, end: { line: 274, column: 69 } },
                '117': { start: { line: 275, column: 2 }, end: { line: 275, column: 78 } },
                '118': { start: { line: 276, column: 2 }, end: { line: 279, column: 3 } },
                '119': { start: { line: 277, column: 4 }, end: { line: 277, column: 71 } },
                '120': { start: { line: 278, column: 4 }, end: { line: 278, column: 67 } },
                '121': { start: { line: 287, column: 0 }, end: { line: 294, column: 2 } },
                '122': { start: { line: 288, column: 13 }, end: { line: 288, column: 30 } },
                '123': { start: { line: 289, column: 2 }, end: { line: 292, column: 3 } },
                '124': { start: { line: 290, column: 4 }, end: { line: 290, column: 35 } },
                '125': { start: { line: 291, column: 4 }, end: { line: 291, column: 37 } },
                '126': { start: { line: 293, column: 2 }, end: { line: 293, column: 14 } },
                '127': { start: { line: 358, column: 0 }, end: { line: 462, column: 2 } },
                '128': { start: { line: 359, column: 18 }, end: { line: 359, column: 44 } },
                '129': { start: { line: 360, column: 2 }, end: { line: 362, column: 3 } },
                '130': { start: { line: 361, column: 4 }, end: { line: 361, column: 11 } },
                '131': { start: { line: 363, column: 13 }, end: { line: 363, column: 30 } },
                '132': { start: { line: 365, column: 2 }, end: { line: 378, column: 3 } },
                '133': { start: { line: 366, column: 4 }, end: { line: 373, column: 5 } },
                '134': { start: { line: 370, column: 6 }, end: { line: 370, column: 13 } },
                '135': { start: { line: 372, column: 6 }, end: { line: 372, column: 42 } },
                '136': { start: { line: 374, column: 9 }, end: { line: 378, column: 3 } },
                '137': { start: { line: 375, column: 4 }, end: { line: 375, column: 11 } },
                '138': { start: { line: 377, column: 4 }, end: { line: 377, column: 31 } },
                '139': { start: { line: 380, column: 19 }, end: { line: 380, column: 35 } },
                '140': { start: { line: 382, column: 2 }, end: { line: 382, column: 20 } },
                '141': { start: { line: 384, column: 2 }, end: { line: 460, column: 3 } },
                '142': { start: { line: 386, column: 6 }, end: { line: 390, column: 7 } },
                '143': { start: { line: 387, column: 8 }, end: { line: 387, column: 34 } },
                '144': { start: { line: 389, column: 8 }, end: { line: 389, column: 34 } },
                '145': { start: { line: 391, column: 6 }, end: { line: 391, column: 12 } },
                '146': { start: { line: 393, column: 6 }, end: { line: 397, column: 7 } },
                '147': { start: { line: 394, column: 8 }, end: { line: 394, column: 53 } },
                '148': { start: { line: 396, column: 8 }, end: { line: 396, column: 37 } },
                '149': { start: { line: 398, column: 6 }, end: { line: 398, column: 12 } },
                '150': { start: { line: 400, column: 6 }, end: { line: 404, column: 7 } },
                '151': { start: { line: 401, column: 8 }, end: { line: 401, column: 53 } },
                '152': { start: { line: 403, column: 8 }, end: { line: 403, column: 37 } },
                '153': { start: { line: 405, column: 6 }, end: { line: 405, column: 12 } },
                '154': { start: { line: 407, column: 6 }, end: { line: 407, column: 49 } },
                '155': { start: { line: 408, column: 6 }, end: { line: 408, column: 12 } },
                '156': { start: { line: 410, column: 6 }, end: { line: 410, column: 49 } },
                '157': { start: { line: 411, column: 6 }, end: { line: 411, column: 12 } },
                '158': { start: { line: 413, column: 6 }, end: { line: 417, column: 7 } },
                '159': { start: { line: 414, column: 8 }, end: { line: 414, column: 53 } },
                '160': { start: { line: 416, column: 8 }, end: { line: 416, column: 49 } },
                '161': { start: { line: 418, column: 6 }, end: { line: 418, column: 12 } },
                '162': { start: { line: 420, column: 6 }, end: { line: 424, column: 7 } },
                '163': { start: { line: 421, column: 8 }, end: { line: 421, column: 53 } },
                '164': { start: { line: 423, column: 8 }, end: { line: 423, column: 58 } },
                '165': { start: { line: 425, column: 6 }, end: { line: 425, column: 12 } },
                '166': { start: { line: 427, column: 6 }, end: { line: 431, column: 7 } },
                '167': { start: { line: 428, column: 8 }, end: { line: 428, column: 53 } },
                '168': { start: { line: 430, column: 8 }, end: { line: 430, column: 67 } },
                '169': { start: { line: 432, column: 6 }, end: { line: 432, column: 12 } },
                '170': { start: { line: 434, column: 6 }, end: { line: 438, column: 7 } },
                '171': { start: { line: 435, column: 8 }, end: { line: 435, column: 53 } },
                '172': { start: { line: 437, column: 8 }, end: { line: 437, column: 49 } },
                '173': { start: { line: 439, column: 6 }, end: { line: 439, column: 12 } },
                '174': { start: { line: 441, column: 6 }, end: { line: 445, column: 7 } },
                '175': { start: { line: 442, column: 8 }, end: { line: 442, column: 53 } },
                '176': { start: { line: 444, column: 8 }, end: { line: 444, column: 58 } },
                '177': { start: { line: 446, column: 6 }, end: { line: 446, column: 12 } },
                '178': { start: { line: 448, column: 6 }, end: { line: 452, column: 7 } },
                '179': { start: { line: 449, column: 8 }, end: { line: 449, column: 53 } },
                '180': { start: { line: 451, column: 8 }, end: { line: 451, column: 67 } },
                '181': { start: { line: 453, column: 6 }, end: { line: 453, column: 12 } },
                '182': { start: { line: 455, column: 6 }, end: { line: 455, column: 59 } },
                '183': { start: { line: 456, column: 6 }, end: { line: 456, column: 56 } },
                '184': { start: { line: 457, column: 6 }, end: { line: 457, column: 59 } },
                '185': { start: { line: 458, column: 6 }, end: { line: 458, column: 12 } },
                '186': { start: { line: 461, column: 2 }, end: { line: 461, column: 14 } },
                '187': { start: { line: 474, column: 0 }, end: { line: 490, column: 2 } },
                '188': { start: { line: 475, column: 2 }, end: { line: 489, column: 4 } },
                '189': { start: { line: 492, column: 0 }, end: { line: 494, column: 2 } },
                '190': { start: { line: 493, column: 2 }, end: { line: 493, column: 47 } },
                '191': { start: { line: 496, column: 0 }, end: { line: 498, column: 2 } },
                '192': { start: { line: 497, column: 2 }, end: { line: 497, column: 31 } },
                '193': { start: { line: 500, column: 0 }, end: { line: 505, column: 2 } },
                '194': { start: { line: 501, column: 2 }, end: { line: 504, column: 4 } },
                '195': { start: { line: 507, column: 0 }, end: { line: 509, column: 2 } },
                '196': { start: { line: 508, column: 2 }, end: { line: 508, column: 56 } },
                '197': { start: { line: 511, column: 0 }, end: { line: 513, column: 2 } },
                '198': { start: { line: 512, column: 2 }, end: { line: 512, column: 51 } },
                '199': { start: { line: 520, column: 0 }, end: { line: 557, column: 2 } },
                '200': { start: { line: 528, column: 2 }, end: { line: 555, column: 3 } },
                '201': { start: { line: 529, column: 4 }, end: { line: 538, column: 5 } },
                '202': { start: { line: 533, column: 6 }, end: { line: 537, column: 8 } },
                '203': { start: { line: 539, column: 16 }, end: { line: 539, column: 29 } },
                '204': { start: { line: 540, column: 4 }, end: { line: 554, column: 5 } },
                '205': { start: { line: 541, column: 17 }, end: { line: 541, column: 34 } },
                '206': { start: { line: 542, column: 6 }, end: { line: 545, column: 7 } },
                '207': { start: { line: 543, column: 8 }, end: { line: 543, column: 40 } },
                '208': { start: { line: 544, column: 8 }, end: { line: 544, column: 28 } },
                '209': { start: { line: 546, column: 6 }, end: { line: 553, column: 8 } },
                '210': { start: { line: 556, column: 2 }, end: { line: 556, column: 14 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 20, column: 12 }, end: { line: 20, column: 13 } },
                  loc: { start: { line: 20, column: 49 }, end: { line: 36, column: 1 } },
                  line: 20
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 47, column: 27 }, end: { line: 47, column: 28 } },
                  loc: { start: { line: 47, column: 38 }, end: { line: 103, column: 1 } },
                  line: 47
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: {
                    start: { line: 111, column: 38 },
                    end: { line: 111, column: 39 }
                  },
                  loc: { start: { line: 111, column: 49 }, end: { line: 138, column: 1 } },
                  line: 111
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 146, column: 36 },
                    end: { line: 146, column: 37 }
                  },
                  loc: { start: { line: 146, column: 47 }, end: { line: 194, column: 1 } },
                  line: 146
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 196, column: 30 },
                    end: { line: 196, column: 31 }
                  },
                  loc: { start: { line: 196, column: 41 }, end: { line: 198, column: 1 } },
                  line: 196
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 205, column: 33 },
                    end: { line: 205, column: 34 }
                  },
                  loc: { start: { line: 205, column: 44 }, end: { line: 215, column: 1 } },
                  line: 205
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 222, column: 35 },
                    end: { line: 222, column: 36 }
                  },
                  loc: { start: { line: 222, column: 46 }, end: { line: 229, column: 1 } },
                  line: 222
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 231, column: 35 },
                    end: { line: 231, column: 36 }
                  },
                  loc: { start: { line: 231, column: 46 }, end: { line: 247, column: 1 } },
                  line: 231
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 249, column: 37 },
                    end: { line: 249, column: 38 }
                  },
                  loc: { start: { line: 249, column: 48 }, end: { line: 256, column: 1 } },
                  line: 249
                },
                '9': {
                  name: '(anonymous_9)',
                  decl: {
                    start: { line: 258, column: 37 },
                    end: { line: 258, column: 38 }
                  },
                  loc: { start: { line: 258, column: 48 }, end: { line: 261, column: 1 } },
                  line: 258
                },
                '10': {
                  name: '(anonymous_10)',
                  decl: {
                    start: { line: 263, column: 41 },
                    end: { line: 263, column: 42 }
                  },
                  loc: { start: { line: 263, column: 52 }, end: { line: 280, column: 1 } },
                  line: 263
                },
                '11': {
                  name: '(anonymous_11)',
                  decl: {
                    start: { line: 287, column: 33 },
                    end: { line: 287, column: 34 }
                  },
                  loc: { start: { line: 287, column: 44 }, end: { line: 294, column: 1 } },
                  line: 287
                },
                '12': {
                  name: '(anonymous_12)',
                  decl: {
                    start: { line: 358, column: 33 },
                    end: { line: 358, column: 34 }
                  },
                  loc: { start: { line: 358, column: 61 }, end: { line: 462, column: 1 } },
                  line: 358
                },
                '13': {
                  name: '(anonymous_13)',
                  decl: {
                    start: { line: 474, column: 36 },
                    end: { line: 474, column: 37 }
                  },
                  loc: { start: { line: 474, column: 47 }, end: { line: 490, column: 1 } },
                  line: 474
                },
                '14': {
                  name: '(anonymous_14)',
                  decl: {
                    start: { line: 492, column: 37 },
                    end: { line: 492, column: 38 }
                  },
                  loc: { start: { line: 492, column: 48 }, end: { line: 494, column: 1 } },
                  line: 492
                },
                '15': {
                  name: '(anonymous_15)',
                  decl: {
                    start: { line: 496, column: 38 },
                    end: { line: 496, column: 39 }
                  },
                  loc: { start: { line: 496, column: 49 }, end: { line: 498, column: 1 } },
                  line: 496
                },
                '16': {
                  name: '(anonymous_16)',
                  decl: {
                    start: { line: 500, column: 36 },
                    end: { line: 500, column: 37 }
                  },
                  loc: { start: { line: 500, column: 47 }, end: { line: 505, column: 1 } },
                  line: 500
                },
                '17': {
                  name: '(anonymous_17)',
                  decl: {
                    start: { line: 507, column: 39 },
                    end: { line: 507, column: 40 }
                  },
                  loc: { start: { line: 507, column: 50 }, end: { line: 509, column: 1 } },
                  line: 507
                },
                '18': {
                  name: '(anonymous_18)',
                  decl: {
                    start: { line: 511, column: 37 },
                    end: { line: 511, column: 38 }
                  },
                  loc: { start: { line: 511, column: 48 }, end: { line: 513, column: 1 } },
                  line: 511
                },
                '19': {
                  name: '(anonymous_19)',
                  decl: {
                    start: { line: 520, column: 35 },
                    end: { line: 520, column: 36 }
                  },
                  loc: { start: { line: 527, column: 2 }, end: { line: 557, column: 1 } },
                  line: 527
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 48, column: 2 }, end: { line: 101, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 48, column: 2 }, end: { line: 101, column: 3 } },
                    { start: { line: 48, column: 2 }, end: { line: 101, column: 3 } }
                  ],
                  line: 48
                },
                '1': {
                  loc: { start: { line: 64, column: 4 }, end: { line: 71, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 64, column: 4 }, end: { line: 71, column: 5 } },
                    { start: { line: 64, column: 4 }, end: { line: 71, column: 5 } }
                  ],
                  line: 64
                },
                '2': {
                  loc: { start: { line: 78, column: 4 }, end: { line: 85, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 78, column: 4 }, end: { line: 85, column: 5 } },
                    { start: { line: 78, column: 4 }, end: { line: 85, column: 5 } }
                  ],
                  line: 78
                },
                '3': {
                  loc: { start: { line: 91, column: 4 }, end: { line: 97, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 91, column: 4 }, end: { line: 97, column: 5 } },
                    { start: { line: 91, column: 4 }, end: { line: 97, column: 5 } }
                  ],
                  line: 91
                },
                '4': {
                  loc: { start: { line: 112, column: 2 }, end: { line: 114, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 112, column: 2 }, end: { line: 114, column: 3 } },
                    { start: { line: 112, column: 2 }, end: { line: 114, column: 3 } }
                  ],
                  line: 112
                },
                '5': {
                  loc: { start: { line: 147, column: 2 }, end: { line: 149, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 147, column: 2 }, end: { line: 149, column: 3 } },
                    { start: { line: 147, column: 2 }, end: { line: 149, column: 3 } }
                  ],
                  line: 147
                },
                '6': {
                  loc: { start: { line: 170, column: 4 }, end: { line: 172, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 170, column: 4 }, end: { line: 172, column: 5 } },
                    { start: { line: 170, column: 4 }, end: { line: 172, column: 5 } }
                  ],
                  line: 170
                },
                '7': {
                  loc: { start: { line: 176, column: 4 }, end: { line: 180, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 176, column: 4 }, end: { line: 180, column: 5 } },
                    { start: { line: 176, column: 4 }, end: { line: 180, column: 5 } }
                  ],
                  line: 176
                },
                '8': {
                  loc: { start: { line: 182, column: 6 }, end: { line: 189, column: 34 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 182, column: 6 }, end: { line: 182, column: 36 } },
                    { start: { line: 183, column: 6 }, end: { line: 183, column: 36 } },
                    { start: { line: 184, column: 6 }, end: { line: 184, column: 36 } },
                    { start: { line: 185, column: 6 }, end: { line: 185, column: 36 } },
                    { start: { line: 186, column: 6 }, end: { line: 186, column: 36 } },
                    { start: { line: 187, column: 6 }, end: { line: 187, column: 34 } },
                    { start: { line: 188, column: 6 }, end: { line: 188, column: 34 } },
                    { start: { line: 189, column: 6 }, end: { line: 189, column: 34 } }
                  ],
                  line: 182
                },
                '9': {
                  loc: { start: { line: 207, column: 2 }, end: { line: 214, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 207, column: 2 }, end: { line: 214, column: 3 } },
                    { start: { line: 207, column: 2 }, end: { line: 214, column: 3 } }
                  ],
                  line: 207
                },
                '10': {
                  loc: { start: { line: 223, column: 2 }, end: { line: 227, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 223, column: 2 }, end: { line: 227, column: 3 } },
                    { start: { line: 223, column: 2 }, end: { line: 227, column: 3 } }
                  ],
                  line: 223
                },
                '11': {
                  loc: { start: { line: 236, column: 4 }, end: { line: 241, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 236, column: 4 }, end: { line: 241, column: 5 } },
                    { start: { line: 236, column: 4 }, end: { line: 241, column: 5 } }
                  ],
                  line: 236
                },
                '12': {
                  loc: { start: { line: 252, column: 4 }, end: { line: 254, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 252, column: 4 }, end: { line: 254, column: 5 } },
                    { start: { line: 252, column: 4 }, end: { line: 254, column: 5 } }
                  ],
                  line: 252
                },
                '13': {
                  loc: { start: { line: 265, column: 2 }, end: { line: 273, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 265, column: 2 }, end: { line: 273, column: 3 } },
                    { start: { line: 265, column: 2 }, end: { line: 273, column: 3 } }
                  ],
                  line: 265
                },
                '14': {
                  loc: { start: { line: 266, column: 4 }, end: { line: 272, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 266, column: 4 }, end: { line: 272, column: 5 } },
                    { start: { line: 266, column: 4 }, end: { line: 272, column: 5 } }
                  ],
                  line: 266
                },
                '15': {
                  loc: { start: { line: 276, column: 2 }, end: { line: 279, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 276, column: 2 }, end: { line: 279, column: 3 } },
                    { start: { line: 276, column: 2 }, end: { line: 279, column: 3 } }
                  ],
                  line: 276
                },
                '16': {
                  loc: { start: { line: 289, column: 2 }, end: { line: 292, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 289, column: 2 }, end: { line: 292, column: 3 } },
                    { start: { line: 289, column: 2 }, end: { line: 292, column: 3 } }
                  ],
                  line: 289
                },
                '17': {
                  loc: { start: { line: 360, column: 2 }, end: { line: 362, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 360, column: 2 }, end: { line: 362, column: 3 } },
                    { start: { line: 360, column: 2 }, end: { line: 362, column: 3 } }
                  ],
                  line: 360
                },
                '18': {
                  loc: { start: { line: 365, column: 2 }, end: { line: 378, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 365, column: 2 }, end: { line: 378, column: 3 } },
                    { start: { line: 365, column: 2 }, end: { line: 378, column: 3 } }
                  ],
                  line: 365
                },
                '19': {
                  loc: { start: { line: 366, column: 4 }, end: { line: 373, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 366, column: 4 }, end: { line: 373, column: 5 } },
                    { start: { line: 366, column: 4 }, end: { line: 373, column: 5 } }
                  ],
                  line: 366
                },
                '20': {
                  loc: { start: { line: 367, column: 6 }, end: { line: 368, column: 60 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 367, column: 6 }, end: { line: 367, column: 25 } },
                    { start: { line: 368, column: 6 }, end: { line: 368, column: 60 } }
                  ],
                  line: 367
                },
                '21': {
                  loc: { start: { line: 374, column: 9 }, end: { line: 378, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 374, column: 9 }, end: { line: 378, column: 3 } },
                    { start: { line: 374, column: 9 }, end: { line: 378, column: 3 } }
                  ],
                  line: 374
                },
                '22': {
                  loc: { start: { line: 374, column: 13 }, end: { line: 374, column: 64 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 374, column: 13 }, end: { line: 374, column: 32 } },
                    { start: { line: 374, column: 36 }, end: { line: 374, column: 64 } }
                  ],
                  line: 374
                },
                '23': {
                  loc: { start: { line: 384, column: 2 }, end: { line: 460, column: 3 } },
                  type: 'switch',
                  locations: [
                    { start: { line: 385, column: 4 }, end: { line: 391, column: 12 } },
                    { start: { line: 392, column: 4 }, end: { line: 398, column: 12 } },
                    { start: { line: 399, column: 4 }, end: { line: 405, column: 12 } },
                    { start: { line: 406, column: 4 }, end: { line: 408, column: 12 } },
                    { start: { line: 409, column: 4 }, end: { line: 411, column: 12 } },
                    { start: { line: 412, column: 4 }, end: { line: 418, column: 12 } },
                    { start: { line: 419, column: 4 }, end: { line: 425, column: 12 } },
                    { start: { line: 426, column: 4 }, end: { line: 432, column: 12 } },
                    { start: { line: 433, column: 4 }, end: { line: 439, column: 12 } },
                    { start: { line: 440, column: 4 }, end: { line: 446, column: 12 } },
                    { start: { line: 447, column: 4 }, end: { line: 453, column: 12 } },
                    { start: { line: 454, column: 4 }, end: { line: 458, column: 12 } }
                  ],
                  line: 384
                },
                '24': {
                  loc: { start: { line: 386, column: 6 }, end: { line: 390, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 386, column: 6 }, end: { line: 390, column: 7 } },
                    { start: { line: 386, column: 6 }, end: { line: 390, column: 7 } }
                  ],
                  line: 386
                },
                '25': {
                  loc: { start: { line: 393, column: 6 }, end: { line: 397, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 393, column: 6 }, end: { line: 397, column: 7 } },
                    { start: { line: 393, column: 6 }, end: { line: 397, column: 7 } }
                  ],
                  line: 393
                },
                '26': {
                  loc: { start: { line: 394, column: 8 }, end: { line: 394, column: 52 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 394, column: 8 }, end: { line: 394, column: 19 } },
                    { start: { line: 394, column: 23 }, end: { line: 394, column: 52 } }
                  ],
                  line: 394
                },
                '27': {
                  loc: { start: { line: 400, column: 6 }, end: { line: 404, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 400, column: 6 }, end: { line: 404, column: 7 } },
                    { start: { line: 400, column: 6 }, end: { line: 404, column: 7 } }
                  ],
                  line: 400
                },
                '28': {
                  loc: { start: { line: 401, column: 8 }, end: { line: 401, column: 52 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 401, column: 8 }, end: { line: 401, column: 19 } },
                    { start: { line: 401, column: 23 }, end: { line: 401, column: 52 } }
                  ],
                  line: 401
                },
                '29': {
                  loc: { start: { line: 413, column: 6 }, end: { line: 417, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 413, column: 6 }, end: { line: 417, column: 7 } },
                    { start: { line: 413, column: 6 }, end: { line: 417, column: 7 } }
                  ],
                  line: 413
                },
                '30': {
                  loc: { start: { line: 414, column: 8 }, end: { line: 414, column: 52 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 414, column: 8 }, end: { line: 414, column: 19 } },
                    { start: { line: 414, column: 23 }, end: { line: 414, column: 52 } }
                  ],
                  line: 414
                },
                '31': {
                  loc: { start: { line: 420, column: 6 }, end: { line: 424, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 420, column: 6 }, end: { line: 424, column: 7 } },
                    { start: { line: 420, column: 6 }, end: { line: 424, column: 7 } }
                  ],
                  line: 420
                },
                '32': {
                  loc: { start: { line: 421, column: 8 }, end: { line: 421, column: 52 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 421, column: 8 }, end: { line: 421, column: 19 } },
                    { start: { line: 421, column: 23 }, end: { line: 421, column: 52 } }
                  ],
                  line: 421
                },
                '33': {
                  loc: { start: { line: 427, column: 6 }, end: { line: 431, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 427, column: 6 }, end: { line: 431, column: 7 } },
                    { start: { line: 427, column: 6 }, end: { line: 431, column: 7 } }
                  ],
                  line: 427
                },
                '34': {
                  loc: { start: { line: 428, column: 8 }, end: { line: 428, column: 52 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 428, column: 8 }, end: { line: 428, column: 19 } },
                    { start: { line: 428, column: 23 }, end: { line: 428, column: 52 } }
                  ],
                  line: 428
                },
                '35': {
                  loc: { start: { line: 434, column: 6 }, end: { line: 438, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 434, column: 6 }, end: { line: 438, column: 7 } },
                    { start: { line: 434, column: 6 }, end: { line: 438, column: 7 } }
                  ],
                  line: 434
                },
                '36': {
                  loc: { start: { line: 435, column: 8 }, end: { line: 435, column: 52 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 435, column: 8 }, end: { line: 435, column: 19 } },
                    { start: { line: 435, column: 23 }, end: { line: 435, column: 52 } }
                  ],
                  line: 435
                },
                '37': {
                  loc: { start: { line: 441, column: 6 }, end: { line: 445, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 441, column: 6 }, end: { line: 445, column: 7 } },
                    { start: { line: 441, column: 6 }, end: { line: 445, column: 7 } }
                  ],
                  line: 441
                },
                '38': {
                  loc: { start: { line: 442, column: 8 }, end: { line: 442, column: 52 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 442, column: 8 }, end: { line: 442, column: 19 } },
                    { start: { line: 442, column: 23 }, end: { line: 442, column: 52 } }
                  ],
                  line: 442
                },
                '39': {
                  loc: { start: { line: 448, column: 6 }, end: { line: 452, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 448, column: 6 }, end: { line: 452, column: 7 } },
                    { start: { line: 448, column: 6 }, end: { line: 452, column: 7 } }
                  ],
                  line: 448
                },
                '40': {
                  loc: { start: { line: 449, column: 8 }, end: { line: 449, column: 52 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 449, column: 8 }, end: { line: 449, column: 19 } },
                    { start: { line: 449, column: 23 }, end: { line: 449, column: 52 } }
                  ],
                  line: 449
                },
                '41': {
                  loc: { start: { line: 476, column: 4 }, end: { line: 488, column: 41 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 476, column: 4 }, end: { line: 476, column: 41 } },
                    { start: { line: 477, column: 4 }, end: { line: 477, column: 44 } },
                    { start: { line: 478, column: 4 }, end: { line: 478, column: 50 } },
                    { start: { line: 479, column: 4 }, end: { line: 479, column: 54 } },
                    { start: { line: 480, column: 4 }, end: { line: 480, column: 48 } },
                    { start: { line: 481, column: 4 }, end: { line: 481, column: 45 } },
                    { start: { line: 482, column: 4 }, end: { line: 482, column: 57 } },
                    { start: { line: 483, column: 4 }, end: { line: 483, column: 58 } },
                    { start: { line: 484, column: 4 }, end: { line: 484, column: 51 } },
                    { start: { line: 485, column: 4 }, end: { line: 485, column: 56 } },
                    { start: { line: 486, column: 4 }, end: { line: 486, column: 57 } },
                    { start: { line: 487, column: 4 }, end: { line: 487, column: 50 } },
                    { start: { line: 488, column: 4 }, end: { line: 488, column: 41 } }
                  ],
                  line: 476
                },
                '42': {
                  loc: { start: { line: 502, column: 4 }, end: { line: 503, column: 46 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 502, column: 4 }, end: { line: 502, column: 46 } },
                    { start: { line: 503, column: 4 }, end: { line: 503, column: 46 } }
                  ],
                  line: 502
                },
                '43': {
                  loc: { start: { line: 508, column: 9 }, end: { line: 508, column: 55 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 508, column: 9 }, end: { line: 508, column: 29 } },
                    { start: { line: 508, column: 33 }, end: { line: 508, column: 55 } }
                  ],
                  line: 508
                },
                '44': {
                  loc: { start: { line: 528, column: 2 }, end: { line: 555, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 528, column: 2 }, end: { line: 555, column: 3 } },
                    { start: { line: 528, column: 2 }, end: { line: 555, column: 3 } }
                  ],
                  line: 528
                },
                '45': {
                  loc: { start: { line: 529, column: 4 }, end: { line: 538, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 529, column: 4 }, end: { line: 538, column: 5 } },
                    { start: { line: 529, column: 4 }, end: { line: 538, column: 5 } }
                  ],
                  line: 529
                },
                '46': {
                  loc: { start: { line: 530, column: 6 }, end: { line: 531, column: 41 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 530, column: 6 }, end: { line: 530, column: 40 } },
                    { start: { line: 531, column: 6 }, end: { line: 531, column: 41 } }
                  ],
                  line: 530
                },
                '47': {
                  loc: { start: { line: 540, column: 4 }, end: { line: 554, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 540, column: 4 }, end: { line: 554, column: 5 } },
                    { start: { line: 540, column: 4 }, end: { line: 554, column: 5 } }
                  ],
                  line: 540
                },
                '48': {
                  loc: { start: { line: 542, column: 6 }, end: { line: 545, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 542, column: 6 }, end: { line: 545, column: 7 } },
                    { start: { line: 542, column: 6 }, end: { line: 545, column: 7 } }
                  ],
                  line: 542
                },
                '49': {
                  loc: { start: { line: 549, column: 8 }, end: { line: 549, column: 24 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 549, column: 8 }, end: { line: 549, column: 12 } },
                    { start: { line: 549, column: 16 }, end: { line: 549, column: 24 } }
                  ],
                  line: 549
                },
                '50': {
                  loc: { start: { line: 550, column: 8 }, end: { line: 550, column: 27 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 550, column: 8 }, end: { line: 550, column: 18 } },
                    { start: { line: 550, column: 22 }, end: { line: 550, column: 27 } }
                  ],
                  line: 550
                },
                '51': {
                  loc: { start: { line: 551, column: 8 }, end: { line: 551, column: 19 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 551, column: 8 }, end: { line: 551, column: 14 } },
                    { start: { line: 551, column: 18 }, end: { line: 551, column: 19 } }
                  ],
                  line: 551
                },
                '52': {
                  loc: { start: { line: 552, column: 8 }, end: { line: 552, column: 19 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 552, column: 8 }, end: { line: 552, column: 14 } },
                    { start: { line: 552, column: 18 }, end: { line: 552, column: 19 } }
                  ],
                  line: 552
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0,
                '118': 0,
                '119': 0,
                '120': 0,
                '121': 0,
                '122': 0,
                '123': 0,
                '124': 0,
                '125': 0,
                '126': 0,
                '127': 0,
                '128': 0,
                '129': 0,
                '130': 0,
                '131': 0,
                '132': 0,
                '133': 0,
                '134': 0,
                '135': 0,
                '136': 0,
                '137': 0,
                '138': 0,
                '139': 0,
                '140': 0,
                '141': 0,
                '142': 0,
                '143': 0,
                '144': 0,
                '145': 0,
                '146': 0,
                '147': 0,
                '148': 0,
                '149': 0,
                '150': 0,
                '151': 0,
                '152': 0,
                '153': 0,
                '154': 0,
                '155': 0,
                '156': 0,
                '157': 0,
                '158': 0,
                '159': 0,
                '160': 0,
                '161': 0,
                '162': 0,
                '163': 0,
                '164': 0,
                '165': 0,
                '166': 0,
                '167': 0,
                '168': 0,
                '169': 0,
                '170': 0,
                '171': 0,
                '172': 0,
                '173': 0,
                '174': 0,
                '175': 0,
                '176': 0,
                '177': 0,
                '178': 0,
                '179': 0,
                '180': 0,
                '181': 0,
                '182': 0,
                '183': 0,
                '184': 0,
                '185': 0,
                '186': 0,
                '187': 0,
                '188': 0,
                '189': 0,
                '190': 0,
                '191': 0,
                '192': 0,
                '193': 0,
                '194': 0,
                '195': 0,
                '196': 0,
                '197': 0,
                '198': 0,
                '199': 0,
                '200': 0,
                '201': 0,
                '202': 0,
                '203': 0,
                '204': 0,
                '205': 0,
                '206': 0,
                '207': 0,
                '208': 0,
                '209': 0,
                '210': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0, 0, 0, 0, 0, 0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0],
                '20': [0, 0],
                '21': [0, 0],
                '22': [0, 0],
                '23': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                '24': [0, 0],
                '25': [0, 0],
                '26': [0, 0],
                '27': [0, 0],
                '28': [0, 0],
                '29': [0, 0],
                '30': [0, 0],
                '31': [0, 0],
                '32': [0, 0],
                '33': [0, 0],
                '34': [0, 0],
                '35': [0, 0],
                '36': [0, 0],
                '37': [0, 0],
                '38': [0, 0],
                '39': [0, 0],
                '40': [0, 0],
                '41': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                '42': [0, 0],
                '43': [0, 0],
                '44': [0, 0],
                '45': [0, 0],
                '46': [0, 0],
                '47': [0, 0],
                '48': [0, 0],
                '49': [0, 0],
                '50': [0, 0],
                '51': [0, 0],
                '52': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: 'e775d8c64e1ea43737732fa065cf6b7a38d4cfd0'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.symbol');
          _dereq_('core-js/modules/es.symbol.description');
          _dereq_('core-js/modules/es.symbol.iterator');
          _dereq_('core-js/modules/es.array.index-of');
          _dereq_('core-js/modules/es.array.iterator');
          _dereq_('core-js/modules/es.array.slice');
          _dereq_('core-js/modules/es.function.name');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.string.iterator');
          _dereq_('core-js/modules/web.dom-collections.iterator');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_19685e0snu.s[0]++;

          /**
           * Shader class for WEBGL Mode
           * @class p5.Shader
           * @constructor
           * @param {p5.RendererGL} renderer an instance of p5.RendererGL that
           * will provide the GL context for this new p5.Shader
           * @param {String} vertSrc source code for the vertex shader (as a string)
           * @param {String} fragSrc source code for the fragment shader (as a string)
           */
          _main.default.Shader = function(renderer, vertSrc, fragSrc) {
            cov_19685e0snu.f[0]++;
            cov_19685e0snu.s[1]++;
            // TODO: adapt this to not take ids, but rather,
            // to take the source for a vertex and fragment shader
            // to enable custom shaders at some later date
            this._renderer = renderer;
            cov_19685e0snu.s[2]++;
            this._vertSrc = vertSrc;
            cov_19685e0snu.s[3]++;
            this._fragSrc = fragSrc;
            cov_19685e0snu.s[4]++;
            this._vertShader = -1;
            cov_19685e0snu.s[5]++;
            this._fragShader = -1;
            cov_19685e0snu.s[6]++;
            this._glProgram = 0;
            cov_19685e0snu.s[7]++;
            this._loadedAttributes = false;
            cov_19685e0snu.s[8]++;
            this.attributes = {};
            cov_19685e0snu.s[9]++;
            this._loadedUniforms = false;
            cov_19685e0snu.s[10]++;
            this.uniforms = {};
            cov_19685e0snu.s[11]++;
            this._bound = false;
            cov_19685e0snu.s[12]++;
            this.samplers = [];
          };

          /**
           * Creates, compiles, and links the shader based on its
           * sources for the vertex and fragment shaders (provided
           * to the constructor). Populates known attributes and
           * uniforms from the shader.
           * @method init
           * @chainable
           * @private
           */ cov_19685e0snu.s[13]++;
          _main.default.Shader.prototype.init = function() {
            cov_19685e0snu.f[1]++;
            cov_19685e0snu.s[14]++;
            if (this._glProgram === 0 /* or context is stale? */) {
              cov_19685e0snu.b[0][0]++;
              var gl = (cov_19685e0snu.s[15]++, this._renderer.GL);

              // @todo: once custom shading is allowed,
              // friendly error messages should be used here to share
              // compiler and linker errors.

              //set up the shader by
              // 1. creating and getting a gl id for the shader program,
              // 2. compliling its vertex & fragment sources,
              // 3. linking the vertex and fragment shaders
              cov_19685e0snu.s[16]++;
              this._vertShader = gl.createShader(gl.VERTEX_SHADER);
              //load in our default vertex shader
              cov_19685e0snu.s[17]++;
              gl.shaderSource(this._vertShader, this._vertSrc);
              cov_19685e0snu.s[18]++;
              gl.compileShader(this._vertShader);
              // if our vertex shader failed compilation?
              cov_19685e0snu.s[19]++;
              if (!gl.getShaderParameter(this._vertShader, gl.COMPILE_STATUS)) {
                cov_19685e0snu.b[1][0]++;
                cov_19685e0snu.s[20]++;
                console.error(
                  'Yikes! An error occurred compiling the vertex shader:'.concat(
                    gl.getShaderInfoLog(this._vertShader)
                  )
                );
                cov_19685e0snu.s[21]++;

                return null;
              } else {
                cov_19685e0snu.b[1][1]++;
              }
              cov_19685e0snu.s[22]++;

              this._fragShader = gl.createShader(gl.FRAGMENT_SHADER);
              //load in our material frag shader
              cov_19685e0snu.s[23]++;
              gl.shaderSource(this._fragShader, this._fragSrc);
              cov_19685e0snu.s[24]++;
              gl.compileShader(this._fragShader);
              // if our frag shader failed compilation?
              cov_19685e0snu.s[25]++;
              if (!gl.getShaderParameter(this._fragShader, gl.COMPILE_STATUS)) {
                cov_19685e0snu.b[2][0]++;
                cov_19685e0snu.s[26]++;
                console.error(
                  'Darn! An error occurred compiling the fragment shader:'.concat(
                    gl.getShaderInfoLog(this._fragShader)
                  )
                );
                cov_19685e0snu.s[27]++;

                return null;
              } else {
                cov_19685e0snu.b[2][1]++;
              }
              cov_19685e0snu.s[28]++;

              this._glProgram = gl.createProgram();
              cov_19685e0snu.s[29]++;
              gl.attachShader(this._glProgram, this._vertShader);
              cov_19685e0snu.s[30]++;
              gl.attachShader(this._glProgram, this._fragShader);
              cov_19685e0snu.s[31]++;
              gl.linkProgram(this._glProgram);
              cov_19685e0snu.s[32]++;
              if (!gl.getProgramParameter(this._glProgram, gl.LINK_STATUS)) {
                cov_19685e0snu.b[3][0]++;
                cov_19685e0snu.s[33]++;
                console.error(
                  'Snap! Error linking shader program: '.concat(
                    gl.getProgramInfoLog(this._glProgram)
                  )
                );
              } else {
                cov_19685e0snu.b[3][1]++;
              }
              cov_19685e0snu.s[34]++;

              this._loadAttributes();
              cov_19685e0snu.s[35]++;
              this._loadUniforms();
            } else {
              cov_19685e0snu.b[0][1]++;
            }
            cov_19685e0snu.s[36]++;
            return this;
          };

          /**
           * Queries the active attributes for this shader and loads
           * their names and locations into the attributes array.
           * @method _loadAttributes
           * @private
           */ cov_19685e0snu.s[37]++;
          _main.default.Shader.prototype._loadAttributes = function() {
            cov_19685e0snu.f[2]++;
            cov_19685e0snu.s[38]++;
            if (this._loadedAttributes) {
              cov_19685e0snu.b[4][0]++;
              cov_19685e0snu.s[39]++;
              return;
            } else {
              cov_19685e0snu.b[4][1]++;
            }
            cov_19685e0snu.s[40]++;

            this.attributes = {};

            var gl = (cov_19685e0snu.s[41]++, this._renderer.GL);

            var numAttributes = (cov_19685e0snu.s[42]++,
            gl.getProgramParameter(this._glProgram, gl.ACTIVE_ATTRIBUTES));
            cov_19685e0snu.s[43]++;

            for (var i = (cov_19685e0snu.s[44]++, 0); i < numAttributes; ++i) {
              var attributeInfo = (cov_19685e0snu.s[45]++,
              gl.getActiveAttrib(this._glProgram, i));
              var name = (cov_19685e0snu.s[46]++, attributeInfo.name);
              var location = (cov_19685e0snu.s[47]++,
              gl.getAttribLocation(this._glProgram, name));
              var attribute = (cov_19685e0snu.s[48]++, {});
              cov_19685e0snu.s[49]++;
              attribute.name = name;
              cov_19685e0snu.s[50]++;
              attribute.location = location;
              cov_19685e0snu.s[51]++;
              attribute.index = i;
              cov_19685e0snu.s[52]++;
              attribute.type = attributeInfo.type;
              cov_19685e0snu.s[53]++;
              attribute.size = attributeInfo.size;
              cov_19685e0snu.s[54]++;
              this.attributes[name] = attribute;
            }
            cov_19685e0snu.s[55]++;

            this._loadedAttributes = true;
          };

          /**
           * Queries the active uniforms for this shader and loads
           * their names and locations into the uniforms array.
           * @method _loadUniforms
           * @private
           */ cov_19685e0snu.s[56]++;
          _main.default.Shader.prototype._loadUniforms = function() {
            cov_19685e0snu.f[3]++;
            cov_19685e0snu.s[57]++;
            if (this._loadedUniforms) {
              cov_19685e0snu.b[5][0]++;
              cov_19685e0snu.s[58]++;
              return;
            } else {
              cov_19685e0snu.b[5][1]++;
            }

            var gl = (cov_19685e0snu.s[59]++, this._renderer.GL);

            // Inspect shader and cache uniform info
            var numUniforms = (cov_19685e0snu.s[60]++,
            gl.getProgramParameter(this._glProgram, gl.ACTIVE_UNIFORMS));

            var samplerIndex = (cov_19685e0snu.s[61]++, 0);
            cov_19685e0snu.s[62]++;
            for (var i = (cov_19685e0snu.s[63]++, 0); i < numUniforms; ++i) {
              var uniformInfo = (cov_19685e0snu.s[64]++,
              gl.getActiveUniform(this._glProgram, i));
              var uniform = (cov_19685e0snu.s[65]++, {});
              cov_19685e0snu.s[66]++;
              uniform.location = gl.getUniformLocation(this._glProgram, uniformInfo.name);
              cov_19685e0snu.s[67]++;
              uniform.size = uniformInfo.size;
              var uniformName = (cov_19685e0snu.s[68]++, uniformInfo.name);
              //uniforms thats are arrays have their name returned as
              //someUniform[0] which is a bit silly so we trim it
              //off here. The size property tells us that its an array
              //so we dont lose any information by doing this
              cov_19685e0snu.s[69]++;
              if (uniformInfo.size > 1) {
                cov_19685e0snu.b[6][0]++;
                cov_19685e0snu.s[70]++;
                uniformName = uniformName.substring(0, uniformName.indexOf('[0]'));
              } else {
                cov_19685e0snu.b[6][1]++;
              }
              cov_19685e0snu.s[71]++;
              uniform.name = uniformName;
              cov_19685e0snu.s[72]++;
              uniform.type = uniformInfo.type;
              cov_19685e0snu.s[73]++;
              uniform._cachedData = undefined;
              cov_19685e0snu.s[74]++;
              if (uniform.type === gl.SAMPLER_2D) {
                cov_19685e0snu.b[7][0]++;
                cov_19685e0snu.s[75]++;
                uniform.samplerIndex = samplerIndex;
                cov_19685e0snu.s[76]++;
                samplerIndex++;
                cov_19685e0snu.s[77]++;
                this.samplers.push(uniform);
              } else {
                cov_19685e0snu.b[7][1]++;
              }
              cov_19685e0snu.s[78]++;
              uniform.isArray =
                (cov_19685e0snu.b[8][0]++, uniform.type === gl.FLOAT_MAT3) ||
                (cov_19685e0snu.b[8][1]++, uniform.type === gl.FLOAT_MAT4) ||
                (cov_19685e0snu.b[8][2]++, uniform.type === gl.FLOAT_VEC2) ||
                (cov_19685e0snu.b[8][3]++, uniform.type === gl.FLOAT_VEC3) ||
                (cov_19685e0snu.b[8][4]++, uniform.type === gl.FLOAT_VEC4) ||
                (cov_19685e0snu.b[8][5]++, uniform.type === gl.INT_VEC2) ||
                (cov_19685e0snu.b[8][6]++, uniform.type === gl.INT_VEC3) ||
                (cov_19685e0snu.b[8][7]++, uniform.type === gl.INT_VEC4);
              cov_19685e0snu.s[79]++;

              this.uniforms[uniformName] = uniform;
            }
            cov_19685e0snu.s[80]++;
            this._loadedUniforms = true;
          };
          cov_19685e0snu.s[81]++;

          _main.default.Shader.prototype.compile = function() {
            // TODO
            cov_19685e0snu.f[4]++;
          };

          /**
           * initializes (if needed) and binds the shader program.
           * @method bindShader
           * @private
           */ cov_19685e0snu.s[82]++;
          _main.default.Shader.prototype.bindShader = function() {
            cov_19685e0snu.f[5]++;
            cov_19685e0snu.s[83]++;
            this.init();
            cov_19685e0snu.s[84]++;
            if (!this._bound) {
              cov_19685e0snu.b[9][0]++;
              cov_19685e0snu.s[85]++;
              this.useProgram();
              cov_19685e0snu.s[86]++;
              this._bound = true;
              cov_19685e0snu.s[87]++;

              this._setMatrixUniforms();
              cov_19685e0snu.s[88]++;

              this.setUniform('uViewport', this._renderer._viewport);
            } else {
              cov_19685e0snu.b[9][1]++;
            }
          };

          /**
           * @method unbindShader
           * @chainable
           * @private
           */ cov_19685e0snu.s[89]++;
          _main.default.Shader.prototype.unbindShader = function() {
            cov_19685e0snu.f[6]++;
            cov_19685e0snu.s[90]++;
            if (this._bound) {
              cov_19685e0snu.b[10][0]++;
              cov_19685e0snu.s[91]++;
              this.unbindTextures();
              //this._renderer.GL.useProgram(0); ??
              cov_19685e0snu.s[92]++;
              this._bound = false;
            } else {
              cov_19685e0snu.b[10][1]++;
            }
            cov_19685e0snu.s[93]++;
            return this;
          };
          cov_19685e0snu.s[94]++;

          _main.default.Shader.prototype.bindTextures = function() {
            cov_19685e0snu.f[7]++;
            var gl = (cov_19685e0snu.s[95]++, this._renderer.GL);
            cov_19685e0snu.s[96]++;
            var _iteratorNormalCompletion = true;
            var _didIteratorError = false;
            var _iteratorError = undefined;
            try {
              for (
                var _iterator = this.samplers[Symbol.iterator](), _step;
                !(_iteratorNormalCompletion = (_step = _iterator.next()).done);
                _iteratorNormalCompletion = true
              ) {
                var uniform = _step.value;
                var tex = (cov_19685e0snu.s[97]++, uniform.texture);
                cov_19685e0snu.s[98]++;
                if (tex === undefined) {
                  cov_19685e0snu.b[11][0]++;
                  cov_19685e0snu.s[99]++;
                  // user hasn't yet supplied a texture for this slot.
                  // (or there may not be one--maybe just lighting),
                  // so we supply a default texture instead.
                  tex = this._renderer._getEmptyTexture();
                } else {
                  cov_19685e0snu.b[11][1]++;
                }
                cov_19685e0snu.s[100]++;
                gl.activeTexture(gl.TEXTURE0 + uniform.samplerIndex);
                cov_19685e0snu.s[101]++;
                tex.bindTexture();
                cov_19685e0snu.s[102]++;
                tex.update();
                cov_19685e0snu.s[103]++;
                gl.uniform1i(uniform.location, uniform.samplerIndex);
              }
            } catch (err) {
              _didIteratorError = true;
              _iteratorError = err;
            } finally {
              try {
                if (!_iteratorNormalCompletion && _iterator.return != null) {
                  _iterator.return();
                }
              } finally {
                if (_didIteratorError) {
                  throw _iteratorError;
                }
              }
            }
          };
          cov_19685e0snu.s[104]++;

          _main.default.Shader.prototype.updateTextures = function() {
            cov_19685e0snu.f[8]++;
            cov_19685e0snu.s[105]++;
            var _iteratorNormalCompletion2 = true;
            var _didIteratorError2 = false;
            var _iteratorError2 = undefined;
            try {
              for (
                var _iterator2 = this.samplers[Symbol.iterator](), _step2;
                !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done);
                _iteratorNormalCompletion2 = true
              ) {
                var uniform = _step2.value;
                var tex = (cov_19685e0snu.s[106]++, uniform.texture);
                cov_19685e0snu.s[107]++;
                if (tex) {
                  cov_19685e0snu.b[12][0]++;
                  cov_19685e0snu.s[108]++;
                  tex.update();
                } else {
                  cov_19685e0snu.b[12][1]++;
                }
              }
            } catch (err) {
              _didIteratorError2 = true;
              _iteratorError2 = err;
            } finally {
              try {
                if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
                  _iterator2.return();
                }
              } finally {
                if (_didIteratorError2) {
                  throw _iteratorError2;
                }
              }
            }
          };
          cov_19685e0snu.s[109]++;

          _main.default.Shader.prototype.unbindTextures = function() {
            // TODO: migrate stuff from material.js here
            // - OR - have material.js define this function
            cov_19685e0snu.f[9]++;
          };
          cov_19685e0snu.s[110]++;

          _main.default.Shader.prototype._setMatrixUniforms = function() {
            cov_19685e0snu.f[10]++;
            cov_19685e0snu.s[111]++;
            this.setUniform('uProjectionMatrix', this._renderer.uPMatrix.mat4);
            cov_19685e0snu.s[112]++;
            if (this.isStrokeShader()) {
              cov_19685e0snu.b[13][0]++;
              cov_19685e0snu.s[113]++;
              if (this._renderer._curCamera.cameraType === 'default') {
                cov_19685e0snu.b[14][0]++;
                cov_19685e0snu.s[114]++;
                // strokes scale up as they approach camera, default
                this.setUniform('uPerspective', 1);
              } else {
                cov_19685e0snu.b[14][1]++;
                cov_19685e0snu.s[115]++;
                // strokes have uniform scale regardless of distance from camera
                this.setUniform('uPerspective', 0);
              }
            } else {
              cov_19685e0snu.b[13][1]++;
            }
            cov_19685e0snu.s[116]++;
            this.setUniform('uModelViewMatrix', this._renderer.uMVMatrix.mat4);
            cov_19685e0snu.s[117]++;
            this.setUniform('uViewMatrix', this._renderer._curCamera.cameraMatrix.mat4);
            cov_19685e0snu.s[118]++;
            if (this.uniforms.uNormalMatrix) {
              cov_19685e0snu.b[15][0]++;
              cov_19685e0snu.s[119]++;
              this._renderer.uNMatrix.inverseTranspose(this._renderer.uMVMatrix);
              cov_19685e0snu.s[120]++;
              this.setUniform('uNormalMatrix', this._renderer.uNMatrix.mat3);
            } else {
              cov_19685e0snu.b[15][1]++;
            }
          };

          /**
           * @method useProgram
           * @chainable
           * @private
           */ cov_19685e0snu.s[121]++;
          _main.default.Shader.prototype.useProgram = function() {
            cov_19685e0snu.f[11]++;
            var gl = (cov_19685e0snu.s[122]++, this._renderer.GL);
            cov_19685e0snu.s[123]++;
            if (this._renderer._curShader !== this) {
              cov_19685e0snu.b[16][0]++;
              cov_19685e0snu.s[124]++;
              gl.useProgram(this._glProgram);
              cov_19685e0snu.s[125]++;
              this._renderer._curShader = this;
            } else {
              cov_19685e0snu.b[16][1]++;
            }
            cov_19685e0snu.s[126]++;
            return this;
          };

          /**
           * Wrapper around gl.uniform functions.
           * As we store uniform info in the shader we can use that
           * to do type checking on the supplied data and call
           * the appropriate function.
           * @method setUniform
           * @chainable
           * @param {String} uniformName the name of the uniform in the
           * shader program
           * @param {Object|Number|Boolean|Number[]} data the data to be associated
           * with that uniform; type varies (could be a single numerical value, array,
           * matrix, or texture / sampler reference)
           *
           * @example
           * <div modernizr='webgl'>
           * <code>
           * // Click within the image to toggle the value of uniforms
           * // Note: for an alternative approach to the same example,
           * // involving toggling between shaders please refer to:
           * // https://p5js.org/reference/#/p5/shader
           *
           * let grad;
           * let showRedGreen = false;
           *
           * function preload() {
           *   // note that we are using two instances
           *   // of the same vertex and fragment shaders
           *   grad = loadShader('assets/shader.vert', 'assets/shader-gradient.frag');
           * }
           *
           * function setup() {
           *   createCanvas(100, 100, WEBGL);
           *   shader(grad);
           *   noStroke();
           * }
           *
           * function draw() {
           *   // update the offset values for each scenario,
           *   // moving the "grad" shader in either vertical or
           *   // horizontal direction each with differing colors
           *
           *   if (showRedGreen === true) {
           *     grad.setUniform('colorCenter', [1, 0, 0]);
           *     grad.setUniform('colorBackground', [0, 1, 0]);
           *     grad.setUniform('offset', [sin(millis() / 2000), 1]);
           *   } else {
           *     grad.setUniform('colorCenter', [1, 0.5, 0]);
           *     grad.setUniform('colorBackground', [0.226, 0, 0.615]);
           *     grad.setUniform('offset', [0, sin(millis() / 2000) + 1]);
           *   }
           *   quad(-1, -1, 1, -1, 1, 1, -1, 1);
           * }
           *
           * function mouseClicked() {
           *   showRedGreen = !showRedGreen;
           * }
           * </code>
           * </div>
           *
           * @alt
           * canvas toggles between a circular gradient of orange and blue vertically. and a circular gradient of red and green moving horizontally when mouse is clicked/pressed.
           */ cov_19685e0snu.s[127]++;
          _main.default.Shader.prototype.setUniform = function(uniformName, data) {
            cov_19685e0snu.f[12]++;
            var uniform = (cov_19685e0snu.s[128]++, this.uniforms[uniformName]);
            cov_19685e0snu.s[129]++;
            if (!uniform) {
              cov_19685e0snu.b[17][0]++;
              cov_19685e0snu.s[130]++;
              return;
            } else {
              cov_19685e0snu.b[17][1]++;
            }
            var gl = (cov_19685e0snu.s[131]++, this._renderer.GL);
            cov_19685e0snu.s[132]++;

            if (uniform.isArray) {
              cov_19685e0snu.b[18][0]++;
              cov_19685e0snu.s[133]++;
              if (
                (cov_19685e0snu.b[20][0]++, uniform._cachedData) &&
                (cov_19685e0snu.b[20][1]++,
                this._renderer._arraysEqual(uniform._cachedData, data))
              ) {
                cov_19685e0snu.b[19][0]++;
                cov_19685e0snu.s[134]++;
                return;
              } else {
                cov_19685e0snu.b[19][1]++;
                cov_19685e0snu.s[135]++;
                uniform._cachedData = data.slice(0);
              }
            } else {
              cov_19685e0snu.b[18][1]++;
              cov_19685e0snu.s[136]++;
              if (
                (cov_19685e0snu.b[22][0]++, uniform._cachedData) &&
                (cov_19685e0snu.b[22][1]++, uniform._cachedData === data)
              ) {
                cov_19685e0snu.b[21][0]++;
                cov_19685e0snu.s[137]++;
                return;
              } else {
                cov_19685e0snu.b[21][1]++;
                cov_19685e0snu.s[138]++;
                uniform._cachedData = data;
              }
            }

            var location = (cov_19685e0snu.s[139]++, uniform.location);
            cov_19685e0snu.s[140]++;

            this.useProgram();
            cov_19685e0snu.s[141]++;

            switch (uniform.type) {
              case gl.BOOL:
                cov_19685e0snu.b[23][0]++;
                cov_19685e0snu.s[142]++;
                if (data === true) {
                  cov_19685e0snu.b[24][0]++;
                  cov_19685e0snu.s[143]++;
                  gl.uniform1i(location, 1);
                } else {
                  cov_19685e0snu.b[24][1]++;
                  cov_19685e0snu.s[144]++;
                  gl.uniform1i(location, 0);
                }
                cov_19685e0snu.s[145]++;
                break;
              case gl.INT:
                cov_19685e0snu.b[23][1]++;
                cov_19685e0snu.s[146]++;
                if (uniform.size > 1) {
                  cov_19685e0snu.b[25][0]++;
                  cov_19685e0snu.s[147]++;
                  (cov_19685e0snu.b[26][0]++, data.length) &&
                    (cov_19685e0snu.b[26][1]++, gl.uniform1iv(location, data));
                } else {
                  cov_19685e0snu.b[25][1]++;
                  cov_19685e0snu.s[148]++;
                  gl.uniform1i(location, data);
                }
                cov_19685e0snu.s[149]++;
                break;
              case gl.FLOAT:
                cov_19685e0snu.b[23][2]++;
                cov_19685e0snu.s[150]++;
                if (uniform.size > 1) {
                  cov_19685e0snu.b[27][0]++;
                  cov_19685e0snu.s[151]++;
                  (cov_19685e0snu.b[28][0]++, data.length) &&
                    (cov_19685e0snu.b[28][1]++, gl.uniform1fv(location, data));
                } else {
                  cov_19685e0snu.b[27][1]++;
                  cov_19685e0snu.s[152]++;
                  gl.uniform1f(location, data);
                }
                cov_19685e0snu.s[153]++;
                break;
              case gl.FLOAT_MAT3:
                cov_19685e0snu.b[23][3]++;
                cov_19685e0snu.s[154]++;
                gl.uniformMatrix3fv(location, false, data);
                cov_19685e0snu.s[155]++;
                break;
              case gl.FLOAT_MAT4:
                cov_19685e0snu.b[23][4]++;
                cov_19685e0snu.s[156]++;
                gl.uniformMatrix4fv(location, false, data);
                cov_19685e0snu.s[157]++;
                break;
              case gl.FLOAT_VEC2:
                cov_19685e0snu.b[23][5]++;
                cov_19685e0snu.s[158]++;
                if (uniform.size > 1) {
                  cov_19685e0snu.b[29][0]++;
                  cov_19685e0snu.s[159]++;
                  (cov_19685e0snu.b[30][0]++, data.length) &&
                    (cov_19685e0snu.b[30][1]++, gl.uniform2fv(location, data));
                } else {
                  cov_19685e0snu.b[29][1]++;
                  cov_19685e0snu.s[160]++;
                  gl.uniform2f(location, data[0], data[1]);
                }
                cov_19685e0snu.s[161]++;
                break;
              case gl.FLOAT_VEC3:
                cov_19685e0snu.b[23][6]++;
                cov_19685e0snu.s[162]++;
                if (uniform.size > 1) {
                  cov_19685e0snu.b[31][0]++;
                  cov_19685e0snu.s[163]++;
                  (cov_19685e0snu.b[32][0]++, data.length) &&
                    (cov_19685e0snu.b[32][1]++, gl.uniform3fv(location, data));
                } else {
                  cov_19685e0snu.b[31][1]++;
                  cov_19685e0snu.s[164]++;
                  gl.uniform3f(location, data[0], data[1], data[2]);
                }
                cov_19685e0snu.s[165]++;
                break;
              case gl.FLOAT_VEC4:
                cov_19685e0snu.b[23][7]++;
                cov_19685e0snu.s[166]++;
                if (uniform.size > 1) {
                  cov_19685e0snu.b[33][0]++;
                  cov_19685e0snu.s[167]++;
                  (cov_19685e0snu.b[34][0]++, data.length) &&
                    (cov_19685e0snu.b[34][1]++, gl.uniform4fv(location, data));
                } else {
                  cov_19685e0snu.b[33][1]++;
                  cov_19685e0snu.s[168]++;
                  gl.uniform4f(location, data[0], data[1], data[2], data[3]);
                }
                cov_19685e0snu.s[169]++;
                break;
              case gl.INT_VEC2:
                cov_19685e0snu.b[23][8]++;
                cov_19685e0snu.s[170]++;
                if (uniform.size > 1) {
                  cov_19685e0snu.b[35][0]++;
                  cov_19685e0snu.s[171]++;
                  (cov_19685e0snu.b[36][0]++, data.length) &&
                    (cov_19685e0snu.b[36][1]++, gl.uniform2iv(location, data));
                } else {
                  cov_19685e0snu.b[35][1]++;
                  cov_19685e0snu.s[172]++;
                  gl.uniform2i(location, data[0], data[1]);
                }
                cov_19685e0snu.s[173]++;
                break;
              case gl.INT_VEC3:
                cov_19685e0snu.b[23][9]++;
                cov_19685e0snu.s[174]++;
                if (uniform.size > 1) {
                  cov_19685e0snu.b[37][0]++;
                  cov_19685e0snu.s[175]++;
                  (cov_19685e0snu.b[38][0]++, data.length) &&
                    (cov_19685e0snu.b[38][1]++, gl.uniform3iv(location, data));
                } else {
                  cov_19685e0snu.b[37][1]++;
                  cov_19685e0snu.s[176]++;
                  gl.uniform3i(location, data[0], data[1], data[2]);
                }
                cov_19685e0snu.s[177]++;
                break;
              case gl.INT_VEC4:
                cov_19685e0snu.b[23][10]++;
                cov_19685e0snu.s[178]++;
                if (uniform.size > 1) {
                  cov_19685e0snu.b[39][0]++;
                  cov_19685e0snu.s[179]++;
                  (cov_19685e0snu.b[40][0]++, data.length) &&
                    (cov_19685e0snu.b[40][1]++, gl.uniform4iv(location, data));
                } else {
                  cov_19685e0snu.b[39][1]++;
                  cov_19685e0snu.s[180]++;
                  gl.uniform4i(location, data[0], data[1], data[2], data[3]);
                }
                cov_19685e0snu.s[181]++;
                break;
              case gl.SAMPLER_2D:
                cov_19685e0snu.b[23][11]++;
                cov_19685e0snu.s[182]++;
                gl.activeTexture(gl.TEXTURE0 + uniform.samplerIndex);
                cov_19685e0snu.s[183]++;
                uniform.texture = this._renderer.getTexture(data);
                cov_19685e0snu.s[184]++;
                gl.uniform1i(uniform.location, uniform.samplerIndex);
                cov_19685e0snu.s[185]++;
                break;
              //@todo complete all types
            }
            cov_19685e0snu.s[186]++;
            return this;
          };

          /* NONE OF THIS IS FAST OR EFFICIENT BUT BEAR WITH ME
    *
    * these shader "type" query methods are used by various
    * facilities of the renderer to determine if changing
    * the shader type for the required action (for example,
    * do we need to load the default lighting shader if the
    * current shader cannot handle lighting?)
    *
    **/ cov_19685e0snu
            .s[187]++;

          _main.default.Shader.prototype.isLightShader = function() {
            cov_19685e0snu.f[13]++;
            cov_19685e0snu.s[188]++;
            return (
              (cov_19685e0snu.b[41][0]++, this.attributes.aNormal !== undefined) ||
              (cov_19685e0snu.b[41][1]++, this.uniforms.uUseLighting !== undefined) ||
              (cov_19685e0snu.b[41][2]++, this.uniforms.uAmbientLightCount !== undefined) ||
              (cov_19685e0snu.b[41][3]++,
              this.uniforms.uDirectionalLightCount !== undefined) ||
              (cov_19685e0snu.b[41][4]++, this.uniforms.uPointLightCount !== undefined) ||
              (cov_19685e0snu.b[41][5]++, this.uniforms.uAmbientColor !== undefined) ||
              (cov_19685e0snu.b[41][6]++,
              this.uniforms.uDirectionalDiffuseColors !== undefined) ||
              (cov_19685e0snu.b[41][7]++,
              this.uniforms.uDirectionalSpecularColors !== undefined) ||
              (cov_19685e0snu.b[41][8]++,
              this.uniforms.uPointLightLocation !== undefined) ||
              (cov_19685e0snu.b[41][9]++,
              this.uniforms.uPointLightDiffuseColors !== undefined) ||
              (cov_19685e0snu.b[41][10]++,
              this.uniforms.uPointLightSpecularColors !== undefined) ||
              (cov_19685e0snu.b[41][11]++,
              this.uniforms.uLightingDirection !== undefined) ||
              (cov_19685e0snu.b[41][12]++, this.uniforms.uSpecular !== undefined)
            );
          };
          cov_19685e0snu.s[189]++;

          _main.default.Shader.prototype.isNormalShader = function() {
            cov_19685e0snu.f[14]++;
            cov_19685e0snu.s[190]++;
            return this.attributes.aNormal !== undefined;
          };
          cov_19685e0snu.s[191]++;

          _main.default.Shader.prototype.isTextureShader = function() {
            cov_19685e0snu.f[15]++;
            cov_19685e0snu.s[192]++;
            return this.samplerIndex > 0;
          };
          cov_19685e0snu.s[193]++;

          _main.default.Shader.prototype.isColorShader = function() {
            cov_19685e0snu.f[16]++;
            cov_19685e0snu.s[194]++;
            return (
              (cov_19685e0snu.b[42][0]++, this.attributes.aVertexColor !== undefined) ||
              (cov_19685e0snu.b[42][1]++, this.uniforms.uMaterialColor !== undefined)
            );
          };
          cov_19685e0snu.s[195]++;

          _main.default.Shader.prototype.isTexLightShader = function() {
            cov_19685e0snu.f[17]++;
            cov_19685e0snu.s[196]++;
            return (
              (cov_19685e0snu.b[43][0]++, this.isLightShader()) &&
              (cov_19685e0snu.b[43][1]++, this.isTextureShader())
            );
          };
          cov_19685e0snu.s[197]++;

          _main.default.Shader.prototype.isStrokeShader = function() {
            cov_19685e0snu.f[18]++;
            cov_19685e0snu.s[198]++;
            return this.uniforms.uStrokeWeight !== undefined;
          };

          /**
           * @method enableAttrib
           * @chainable
           * @private
           */ cov_19685e0snu.s[199]++;
          _main.default.Shader.prototype.enableAttrib = function(
            attr,
            size,
            type,
            normalized,
            stride,
            offset
          ) {
            cov_19685e0snu.f[19]++;
            cov_19685e0snu.s[200]++;
            if (attr) {
              cov_19685e0snu.b[44][0]++;
              cov_19685e0snu.s[201]++;
              if (
                (cov_19685e0snu.b[46][0]++, typeof IS_MINIFIED === 'undefined') &&
                (cov_19685e0snu.b[46][1]++, this.attributes[attr.name] !== attr)
              ) {
                cov_19685e0snu.b[45][0]++;
                cov_19685e0snu.s[202]++;
                console.warn(
                  'The attribute "'.concat(
                    attr.name,
                    '"passed to enableAttrib does not belong to this shader.'
                  )
                );
              } else {
                cov_19685e0snu.b[45][1]++;
              }
              var loc = (cov_19685e0snu.s[203]++, attr.location);
              cov_19685e0snu.s[204]++;
              if (loc !== -1) {
                cov_19685e0snu.b[47][0]++;
                var gl = (cov_19685e0snu.s[205]++, this._renderer.GL);
                cov_19685e0snu.s[206]++;
                if (!attr.enabled) {
                  cov_19685e0snu.b[48][0]++;
                  cov_19685e0snu.s[207]++;
                  gl.enableVertexAttribArray(loc);
                  cov_19685e0snu.s[208]++;
                  attr.enabled = true;
                } else {
                  cov_19685e0snu.b[48][1]++;
                }
                cov_19685e0snu.s[209]++;
                this._renderer.GL.vertexAttribPointer(
                  loc,
                  size,
                  (cov_19685e0snu.b[49][0]++, type) ||
                    (cov_19685e0snu.b[49][1]++, gl.FLOAT),
                  (cov_19685e0snu.b[50][0]++, normalized) ||
                    (cov_19685e0snu.b[50][1]++, false),
                  (cov_19685e0snu.b[51][0]++, stride) || (cov_19685e0snu.b[51][1]++, 0),
                  (cov_19685e0snu.b[52][0]++, offset) || (cov_19685e0snu.b[52][1]++, 0)
                );
              } else {
                cov_19685e0snu.b[47][1]++;
              }
            } else {
              cov_19685e0snu.b[44][1]++;
            }
            cov_19685e0snu.s[210]++;
            return this;
          };
          var _default = _main.default.Shader;
          exports.default = _default;
        },
        {
          '../core/main': 283,
          'core-js/modules/es.array.index-of': 173,
          'core-js/modules/es.array.iterator': 174,
          'core-js/modules/es.array.slice': 178,
          'core-js/modules/es.function.name': 181,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.string.iterator': 201,
          'core-js/modules/es.symbol': 211,
          'core-js/modules/es.symbol.description': 209,
          'core-js/modules/es.symbol.iterator': 210,
          'core-js/modules/web.dom-collections.iterator': 244
        }
      ],
      339: [
        function(_dereq_, module, exports) {
          'use strict';
          function _typeof(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof = function _typeof(obj) {
                return typeof obj;
              };
            } else {
              _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof(obj);
          }
          var cov_1m083o6kxr = (function() {
            var path = '/Users/outofambit/src/p5.js/src/webgl/p5.Texture.js';
            var hash = '0e3bbd6bc57b405440343a0f8dc83c78749825a6';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/webgl/p5.Texture.js',
              statementMap: {
                '0': { start: { line: 21, column: 0 }, end: { line: 56, column: 2 } },
                '1': { start: { line: 22, column: 2 }, end: { line: 22, column: 28 } },
                '2': { start: { line: 24, column: 13 }, end: { line: 24, column: 30 } },
                '3': { start: { line: 26, column: 2 }, end: { line: 26, column: 17 } },
                '4': { start: { line: 27, column: 2 }, end: { line: 27, column: 25 } },
                '5': { start: { line: 28, column: 2 }, end: { line: 28, column: 32 } },
                '6': { start: { line: 29, column: 2 }, end: { line: 29, column: 26 } },
                '7': { start: { line: 30, column: 2 }, end: { line: 30, column: 23 } },
                '8': { start: { line: 31, column: 2 }, end: { line: 31, column: 31 } },
                '9': { start: { line: 32, column: 2 }, end: { line: 32, column: 31 } },
                '10': { start: { line: 33, column: 2 }, end: { line: 33, column: 34 } },
                '11': { start: { line: 34, column: 2 }, end: { line: 34, column: 34 } },
                '12': { start: { line: 38, column: 2 }, end: { line: 39, column: 77 } },
                '13': { start: { line: 40, column: 2 }, end: { line: 40, column: 32 } },
                '14': { start: { line: 41, column: 2 }, end: { line: 44, column: 34 } },
                '15': { start: { line: 45, column: 2 }, end: { line: 45, column: 46 } },
                '16': { start: { line: 46, column: 2 }, end: { line: 46, column: 52 } },
                '17': { start: { line: 47, column: 2 }, end: { line: 48, column: 65 } },
                '18': { start: { line: 50, column: 22 }, end: { line: 50, column: 54 } },
                '19': { start: { line: 51, column: 2 }, end: { line: 51, column: 33 } },
                '20': { start: { line: 52, column: 2 }, end: { line: 52, column: 35 } },
                '21': { start: { line: 54, column: 2 }, end: { line: 54, column: 25 } },
                '22': { start: { line: 55, column: 2 }, end: { line: 55, column: 14 } },
                '23': { start: { line: 58, column: 0 }, end: { line: 74, column: 2 } },
                '24': { start: { line: 60, column: 2 }, end: { line: 72, column: 3 } },
                '25': { start: { line: 62, column: 4 }, end: { line: 62, column: 34 } },
                '26': { start: { line: 63, column: 9 }, end: { line: 72, column: 3 } },
                '27': { start: { line: 69, column: 4 }, end: { line: 69, column: 31 } },
                '28': { start: { line: 70, column: 9 }, end: { line: 72, column: 3 } },
                '29': { start: { line: 71, column: 4 }, end: { line: 71, column: 27 } },
                '30': { start: { line: 73, column: 2 }, end: { line: 73, column: 21 } },
                '31': { start: { line: 83, column: 0 }, end: { line: 127, column: 2 } },
                '32': { start: { line: 84, column: 13 }, end: { line: 84, column: 30 } },
                '33': { start: { line: 85, column: 2 }, end: { line: 85, column: 34 } },
                '34': { start: { line: 87, column: 2 }, end: { line: 87, column: 45 } },
                '35': { start: { line: 88, column: 2 }, end: { line: 88, column: 45 } },
                '36': { start: { line: 90, column: 2 }, end: { line: 90, column: 47 } },
                '37': { start: { line: 91, column: 2 }, end: { line: 91, column: 21 } },
                '38': { start: { line: 94, column: 2 }, end: { line: 94, column: 75 } },
                '39': { start: { line: 95, column: 2 }, end: { line: 95, column: 75 } },
                '40': { start: { line: 97, column: 2 }, end: { line: 126, column: 3 } },
                '41': { start: { line: 104, column: 20 }, end: { line: 104, column: 48 } },
                '42': { start: { line: 105, column: 4 }, end: { line: 115, column: 6 } },
                '43': { start: { line: 118, column: 4 }, end: { line: 125, column: 6 } },
                '44': { start: { line: 136, column: 0 }, end: { line: 220, column: 2 } },
                '45': { start: { line: 137, column: 15 }, end: { line: 137, column: 23 } },
                '46': { start: { line: 138, column: 2 }, end: { line: 140, column: 3 } },
                '47': { start: { line: 139, column: 4 }, end: { line: 139, column: 17 } },
                '48': { start: { line: 142, column: 22 }, end: { line: 142, column: 54 } },
                '49': { start: { line: 143, column: 16 }, end: { line: 143, column: 21 } },
                '50': { start: { line: 145, column: 13 }, end: { line: 145, column: 30 } },
                '51': { start: { line: 147, column: 2 }, end: { line: 205, column: 3 } },
                '52': { start: { line: 148, column: 4 }, end: { line: 148, column: 19 } },
                '53': { start: { line: 152, column: 4 }, end: { line: 152, column: 35 } },
                '54': { start: { line: 153, column: 4 }, end: { line: 153, column: 37 } },
                '55': { start: { line: 155, column: 4 }, end: { line: 164, column: 5 } },
                '56': { start: { line: 156, column: 6 }, end: { line: 156, column: 30 } },
                '57': { start: { line: 157, column: 11 }, end: { line: 164, column: 5 } },
                '58': { start: { line: 163, column: 6 }, end: { line: 163, column: 29 } },
                '59': { start: { line: 165, column: 9 }, end: { line: 205, column: 3 } },
                '60': { start: { line: 168, column: 4 }, end: { line: 171, column: 5 } },
                '61': { start: { line: 169, column: 6 }, end: { line: 169, column: 21 } },
                '62': { start: { line: 170, column: 6 }, end: { line: 170, column: 30 } },
                '63': { start: { line: 172, column: 9 }, end: { line: 205, column: 3 } },
                '64': { start: { line: 177, column: 4 }, end: { line: 194, column: 5 } },
                '65': { start: { line: 181, column: 6 }, end: { line: 181, column: 21 } },
                '66': { start: { line: 182, column: 6 }, end: { line: 182, column: 30 } },
                '67': { start: { line: 183, column: 11 }, end: { line: 194, column: 5 } },
                '68': { start: { line: 186, column: 6 }, end: { line: 193, column: 7 } },
                '69': { start: { line: 191, column: 8 }, end: { line: 191, column: 48 } },
                '70': { start: { line: 192, column: 8 }, end: { line: 192, column: 23 } },
                '71': { start: { line: 195, column: 9 }, end: { line: 205, column: 3 } },
                '72': { start: { line: 196, column: 4 }, end: { line: 199, column: 5 } },
                '73': { start: { line: 197, column: 6 }, end: { line: 197, column: 26 } },
                '74': { start: { line: 198, column: 6 }, end: { line: 198, column: 21 } },
                '75': { start: { line: 204, column: 4 }, end: { line: 204, column: 19 } },
                '76': { start: { line: 207, column: 2 }, end: { line: 217, column: 3 } },
                '77': { start: { line: 208, column: 4 }, end: { line: 208, column: 23 } },
                '78': { start: { line: 209, column: 4 }, end: { line: 216, column: 6 } },
                '79': { start: { line: 219, column: 2 }, end: { line: 219, column: 17 } },
                '80': { start: { line: 226, column: 0 }, end: { line: 233, column: 2 } },
                '81': { start: { line: 229, column: 13 }, end: { line: 229, column: 30 } },
                '82': { start: { line: 230, column: 2 }, end: { line: 230, column: 44 } },
                '83': { start: { line: 232, column: 2 }, end: { line: 232, column: 14 } },
                '84': { start: { line: 239, column: 0 }, end: { line: 243, column: 2 } },
                '85': { start: { line: 241, column: 13 }, end: { line: 241, column: 30 } },
                '86': { start: { line: 242, column: 2 }, end: { line: 242, column: 38 } },
                '87': { start: { line: 256, column: 0 }, end: { line: 275, column: 2 } },
                '88': { start: { line: 257, column: 13 }, end: { line: 257, column: 30 } },
                '89': { start: { line: 259, column: 2 }, end: { line: 263, column: 3 } },
                '90': { start: { line: 260, column: 4 }, end: { line: 260, column: 34 } },
                '91': { start: { line: 262, column: 4 }, end: { line: 262, column: 33 } },
                '92': { start: { line: 265, column: 2 }, end: { line: 269, column: 3 } },
                '93': { start: { line: 266, column: 4 }, end: { line: 266, column: 34 } },
                '94': { start: { line: 268, column: 4 }, end: { line: 268, column: 33 } },
                '95': { start: { line: 271, column: 2 }, end: { line: 271, column: 21 } },
                '96': { start: { line: 272, column: 2 }, end: { line: 272, column: 75 } },
                '97': { start: { line: 273, column: 2 }, end: { line: 273, column: 75 } },
                '98': { start: { line: 274, column: 2 }, end: { line: 274, column: 23 } },
                '99': { start: { line: 286, column: 0 }, end: { line: 347, column: 2 } },
                '100': { start: { line: 287, column: 13 }, end: { line: 287, column: 30 } },
                '101': { start: { line: 292, column: 23 }, end: { line: 292, column: 47 } },
                '102': { start: { line: 292, column: 28 }, end: { line: 292, column: 47 } },
                '103': { start: { line: 294, column: 26 }, end: { line: 294, column: 50 } },
                '104': { start: { line: 295, column: 27 }, end: { line: 295, column: 52 } },
                '105': { start: { line: 297, column: 2 }, end: { line: 318, column: 3 } },
                '106': { start: { line: 298, column: 4 }, end: { line: 305, column: 5 } },
                '107': { start: { line: 299, column: 6 }, end: { line: 299, column: 31 } },
                '108': { start: { line: 301, column: 6 }, end: { line: 303, column: 8 } },
                '109': { start: { line: 304, column: 6 }, end: { line: 304, column: 38 } },
                '110': { start: { line: 306, column: 9 }, end: { line: 318, column: 3 } },
                '111': { start: { line: 307, column: 4 }, end: { line: 314, column: 5 } },
                '112': { start: { line: 308, column: 6 }, end: { line: 308, column: 40 } },
                '113': { start: { line: 310, column: 6 }, end: { line: 312, column: 8 } },
                '114': { start: { line: 313, column: 6 }, end: { line: 313, column: 38 } },
                '115': { start: { line: 317, column: 4 }, end: { line: 317, column: 36 } },
                '116': { start: { line: 320, column: 2 }, end: { line: 341, column: 3 } },
                '117': { start: { line: 321, column: 4 }, end: { line: 328, column: 5 } },
                '118': { start: { line: 322, column: 6 }, end: { line: 322, column: 31 } },
                '119': { start: { line: 324, column: 6 }, end: { line: 326, column: 8 } },
                '120': { start: { line: 327, column: 6 }, end: { line: 327, column: 38 } },
                '121': { start: { line: 329, column: 9 }, end: { line: 341, column: 3 } },
                '122': { start: { line: 330, column: 4 }, end: { line: 337, column: 5 } },
                '123': { start: { line: 331, column: 6 }, end: { line: 331, column: 40 } },
                '124': { start: { line: 333, column: 6 }, end: { line: 335, column: 8 } },
                '125': { start: { line: 336, column: 6 }, end: { line: 336, column: 38 } },
                '126': { start: { line: 340, column: 4 }, end: { line: 340, column: 36 } },
                '127': { start: { line: 343, column: 2 }, end: { line: 343, column: 21 } },
                '128': { start: { line: 344, column: 2 }, end: { line: 344, column: 67 } },
                '129': { start: { line: 345, column: 2 }, end: { line: 345, column: 67 } },
                '130': { start: { line: 346, column: 2 }, end: { line: 346, column: 23 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 21, column: 13 }, end: { line: 21, column: 14 } },
                  loc: { start: { line: 21, column: 37 }, end: { line: 56, column: 1 } },
                  line: 21
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 58, column: 49 }, end: { line: 58, column: 50 } },
                  loc: { start: { line: 58, column: 60 }, end: { line: 74, column: 1 } },
                  line: 58
                },
                '2': {
                  name: '(anonymous_2)',
                  decl: { start: { line: 83, column: 28 }, end: { line: 83, column: 29 } },
                  loc: { start: { line: 83, column: 43 }, end: { line: 127, column: 1 } },
                  line: 83
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: {
                    start: { line: 136, column: 30 },
                    end: { line: 136, column: 31 }
                  },
                  loc: { start: { line: 136, column: 41 }, end: { line: 220, column: 1 } },
                  line: 136
                },
                '4': {
                  name: '(anonymous_4)',
                  decl: {
                    start: { line: 226, column: 35 },
                    end: { line: 226, column: 36 }
                  },
                  loc: { start: { line: 226, column: 46 }, end: { line: 233, column: 1 } },
                  line: 226
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 239, column: 37 },
                    end: { line: 239, column: 38 }
                  },
                  loc: { start: { line: 239, column: 48 }, end: { line: 243, column: 1 } },
                  line: 239
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 256, column: 40 },
                    end: { line: 256, column: 41 }
                  },
                  loc: { start: { line: 256, column: 69 }, end: { line: 275, column: 1 } },
                  line: 256
                },
                '7': {
                  name: '(anonymous_7)',
                  decl: {
                    start: { line: 286, column: 35 },
                    end: { line: 286, column: 36 }
                  },
                  loc: { start: { line: 286, column: 58 }, end: { line: 347, column: 1 } },
                  line: 286
                },
                '8': {
                  name: '(anonymous_8)',
                  decl: {
                    start: { line: 292, column: 23 },
                    end: { line: 292, column: 24 }
                  },
                  loc: { start: { line: 292, column: 28 }, end: { line: 292, column: 47 } },
                  line: 292
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 39, column: 4 }, end: { line: 39, column: 76 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 39, column: 4 }, end: { line: 39, column: 42 } },
                    { start: { line: 39, column: 46 }, end: { line: 39, column: 76 } }
                  ],
                  line: 39
                },
                '1': {
                  loc: { start: { line: 42, column: 4 }, end: { line: 44, column: 33 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 42, column: 4 }, end: { line: 42, column: 37 } },
                    { start: { line: 43, column: 4 }, end: { line: 43, column: 29 } },
                    { start: { line: 44, column: 4 }, end: { line: 44, column: 33 } }
                  ],
                  line: 42
                },
                '2': {
                  loc: { start: { line: 48, column: 4 }, end: { line: 48, column: 64 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 48, column: 4 }, end: { line: 48, column: 36 } },
                    { start: { line: 48, column: 40 }, end: { line: 48, column: 64 } }
                  ],
                  line: 48
                },
                '3': {
                  loc: { start: { line: 60, column: 2 }, end: { line: 72, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 60, column: 2 }, end: { line: 72, column: 3 } },
                    { start: { line: 60, column: 2 }, end: { line: 72, column: 3 } }
                  ],
                  line: 60
                },
                '4': {
                  loc: { start: { line: 63, column: 9 }, end: { line: 72, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 63, column: 9 }, end: { line: 72, column: 3 } },
                    { start: { line: 63, column: 9 }, end: { line: 72, column: 3 } }
                  ],
                  line: 63
                },
                '5': {
                  loc: { start: { line: 64, column: 4 }, end: { line: 66, column: 25 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 64, column: 4 }, end: { line: 64, column: 26 } },
                    { start: { line: 65, column: 4 }, end: { line: 65, column: 24 } },
                    { start: { line: 66, column: 4 }, end: { line: 66, column: 25 } }
                  ],
                  line: 64
                },
                '6': {
                  loc: { start: { line: 70, column: 9 }, end: { line: 72, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 70, column: 9 }, end: { line: 72, column: 3 } },
                    { start: { line: 70, column: 9 }, end: { line: 72, column: 3 } }
                  ],
                  line: 70
                },
                '7': {
                  loc: { start: { line: 97, column: 2 }, end: { line: 126, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 97, column: 2 }, end: { line: 126, column: 3 } },
                    { start: { line: 97, column: 2 }, end: { line: 126, column: 3 } }
                  ],
                  line: 97
                },
                '8': {
                  loc: { start: { line: 98, column: 4 }, end: { line: 100, column: 56 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 98, column: 4 }, end: { line: 98, column: 20 } },
                    { start: { line: 99, column: 4 }, end: { line: 99, column: 21 } },
                    { start: { line: 100, column: 5 }, end: { line: 100, column: 27 } },
                    { start: { line: 100, column: 31 }, end: { line: 100, column: 55 } }
                  ],
                  line: 98
                },
                '9': {
                  loc: { start: { line: 138, column: 2 }, end: { line: 140, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 138, column: 2 }, end: { line: 140, column: 3 } },
                    { start: { line: 138, column: 2 }, end: { line: 140, column: 3 } }
                  ],
                  line: 138
                },
                '10': {
                  loc: { start: { line: 138, column: 6 }, end: { line: 138, column: 43 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 138, column: 6 }, end: { line: 138, column: 22 } },
                    { start: { line: 138, column: 26 }, end: { line: 138, column: 43 } }
                  ],
                  line: 138
                },
                '11': {
                  loc: { start: { line: 147, column: 2 }, end: { line: 205, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 147, column: 2 }, end: { line: 205, column: 3 } },
                    { start: { line: 147, column: 2 }, end: { line: 205, column: 3 } }
                  ],
                  line: 147
                },
                '12': {
                  loc: { start: { line: 147, column: 6 }, end: { line: 147, column: 76 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 147, column: 6 }, end: { line: 147, column: 38 } },
                    { start: { line: 147, column: 42 }, end: { line: 147, column: 76 } }
                  ],
                  line: 147
                },
                '13': {
                  loc: { start: { line: 155, column: 4 }, end: { line: 164, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 155, column: 4 }, end: { line: 164, column: 5 } },
                    { start: { line: 155, column: 4 }, end: { line: 164, column: 5 } }
                  ],
                  line: 155
                },
                '14': {
                  loc: { start: { line: 157, column: 11 }, end: { line: 164, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 157, column: 11 }, end: { line: 164, column: 5 } },
                    { start: { line: 157, column: 11 }, end: { line: 164, column: 5 } }
                  ],
                  line: 157
                },
                '15': {
                  loc: { start: { line: 157, column: 15 }, end: { line: 157, column: 62 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 157, column: 15 }, end: { line: 157, column: 37 } },
                    { start: { line: 157, column: 41 }, end: { line: 157, column: 62 } }
                  ],
                  line: 157
                },
                '16': {
                  loc: { start: { line: 165, column: 9 }, end: { line: 205, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 165, column: 9 }, end: { line: 205, column: 3 } },
                    { start: { line: 165, column: 9 }, end: { line: 205, column: 3 } }
                  ],
                  line: 165
                },
                '17': {
                  loc: { start: { line: 168, column: 4 }, end: { line: 171, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 168, column: 4 }, end: { line: 171, column: 5 } },
                    { start: { line: 168, column: 4 }, end: { line: 171, column: 5 } }
                  ],
                  line: 168
                },
                '18': {
                  loc: { start: { line: 172, column: 9 }, end: { line: 205, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 172, column: 9 }, end: { line: 205, column: 3 } },
                    { start: { line: 172, column: 9 }, end: { line: 205, column: 3 } }
                  ],
                  line: 172
                },
                '19': {
                  loc: { start: { line: 177, column: 4 }, end: { line: 194, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 177, column: 4 }, end: { line: 194, column: 5 } },
                    { start: { line: 177, column: 4 }, end: { line: 194, column: 5 } }
                  ],
                  line: 177
                },
                '20': {
                  loc: { start: { line: 183, column: 11 }, end: { line: 194, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 183, column: 11 }, end: { line: 194, column: 5 } },
                    { start: { line: 183, column: 11 }, end: { line: 194, column: 5 } }
                  ],
                  line: 183
                },
                '21': {
                  loc: { start: { line: 186, column: 6 }, end: { line: 193, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 186, column: 6 }, end: { line: 193, column: 7 } },
                    { start: { line: 186, column: 6 }, end: { line: 193, column: 7 } }
                  ],
                  line: 186
                },
                '22': {
                  loc: { start: { line: 195, column: 9 }, end: { line: 205, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 195, column: 9 }, end: { line: 205, column: 3 } },
                    { start: { line: 195, column: 9 }, end: { line: 205, column: 3 } }
                  ],
                  line: 195
                },
                '23': {
                  loc: { start: { line: 196, column: 4 }, end: { line: 199, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 196, column: 4 }, end: { line: 199, column: 5 } },
                    { start: { line: 196, column: 4 }, end: { line: 199, column: 5 } }
                  ],
                  line: 196
                },
                '24': {
                  loc: { start: { line: 207, column: 2 }, end: { line: 217, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 207, column: 2 }, end: { line: 217, column: 3 } },
                    { start: { line: 207, column: 2 }, end: { line: 217, column: 3 } }
                  ],
                  line: 207
                },
                '25': {
                  loc: { start: { line: 259, column: 2 }, end: { line: 263, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 259, column: 2 }, end: { line: 263, column: 3 } },
                    { start: { line: 259, column: 2 }, end: { line: 263, column: 3 } }
                  ],
                  line: 259
                },
                '26': {
                  loc: { start: { line: 265, column: 2 }, end: { line: 269, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 265, column: 2 }, end: { line: 269, column: 3 } },
                    { start: { line: 265, column: 2 }, end: { line: 269, column: 3 } }
                  ],
                  line: 265
                },
                '27': {
                  loc: { start: { line: 297, column: 2 }, end: { line: 318, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 297, column: 2 }, end: { line: 318, column: 3 } },
                    { start: { line: 297, column: 2 }, end: { line: 318, column: 3 } }
                  ],
                  line: 297
                },
                '28': {
                  loc: { start: { line: 298, column: 4 }, end: { line: 305, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 298, column: 4 }, end: { line: 305, column: 5 } },
                    { start: { line: 298, column: 4 }, end: { line: 305, column: 5 } }
                  ],
                  line: 298
                },
                '29': {
                  loc: { start: { line: 298, column: 8 }, end: { line: 298, column: 43 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 298, column: 8 }, end: { line: 298, column: 23 } },
                    { start: { line: 298, column: 27 }, end: { line: 298, column: 43 } }
                  ],
                  line: 298
                },
                '30': {
                  loc: { start: { line: 306, column: 9 }, end: { line: 318, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 306, column: 9 }, end: { line: 318, column: 3 } },
                    { start: { line: 306, column: 9 }, end: { line: 318, column: 3 } }
                  ],
                  line: 306
                },
                '31': {
                  loc: { start: { line: 307, column: 4 }, end: { line: 314, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 307, column: 4 }, end: { line: 314, column: 5 } },
                    { start: { line: 307, column: 4 }, end: { line: 314, column: 5 } }
                  ],
                  line: 307
                },
                '32': {
                  loc: { start: { line: 307, column: 8 }, end: { line: 307, column: 43 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 307, column: 8 }, end: { line: 307, column: 23 } },
                    { start: { line: 307, column: 27 }, end: { line: 307, column: 43 } }
                  ],
                  line: 307
                },
                '33': {
                  loc: { start: { line: 320, column: 2 }, end: { line: 341, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 320, column: 2 }, end: { line: 341, column: 3 } },
                    { start: { line: 320, column: 2 }, end: { line: 341, column: 3 } }
                  ],
                  line: 320
                },
                '34': {
                  loc: { start: { line: 321, column: 4 }, end: { line: 328, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 321, column: 4 }, end: { line: 328, column: 5 } },
                    { start: { line: 321, column: 4 }, end: { line: 328, column: 5 } }
                  ],
                  line: 321
                },
                '35': {
                  loc: { start: { line: 321, column: 8 }, end: { line: 321, column: 43 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 321, column: 8 }, end: { line: 321, column: 23 } },
                    { start: { line: 321, column: 27 }, end: { line: 321, column: 43 } }
                  ],
                  line: 321
                },
                '36': {
                  loc: { start: { line: 329, column: 9 }, end: { line: 341, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 329, column: 9 }, end: { line: 341, column: 3 } },
                    { start: { line: 329, column: 9 }, end: { line: 341, column: 3 } }
                  ],
                  line: 329
                },
                '37': {
                  loc: { start: { line: 330, column: 4 }, end: { line: 337, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 330, column: 4 }, end: { line: 337, column: 5 } },
                    { start: { line: 330, column: 4 }, end: { line: 337, column: 5 } }
                  ],
                  line: 330
                },
                '38': {
                  loc: { start: { line: 330, column: 8 }, end: { line: 330, column: 43 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 330, column: 8 }, end: { line: 330, column: 23 } },
                    { start: { line: 330, column: 27 }, end: { line: 330, column: 43 } }
                  ],
                  line: 330
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0,
                '118': 0,
                '119': 0,
                '120': 0,
                '121': 0,
                '122': 0,
                '123': 0,
                '124': 0,
                '125': 0,
                '126': 0,
                '127': 0,
                '128': 0,
                '129': 0,
                '130': 0
              },
              f: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0, '8': 0 },
              b: {
                '0': [0, 0],
                '1': [0, 0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0, 0, 0],
                '9': [0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0],
                '20': [0, 0],
                '21': [0, 0],
                '22': [0, 0],
                '23': [0, 0],
                '24': [0, 0],
                '25': [0, 0],
                '26': [0, 0],
                '27': [0, 0],
                '28': [0, 0],
                '29': [0, 0],
                '30': [0, 0],
                '31': [0, 0],
                '32': [0, 0],
                '33': [0, 0],
                '34': [0, 0],
                '35': [0, 0],
                '36': [0, 0],
                '37': [0, 0],
                '38': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '0e3bbd6bc57b405440343a0f8dc83c78749825a6'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.array.iterator');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.typed-array.uint8-array');
          _dereq_('core-js/modules/es.typed-array.copy-within');
          _dereq_('core-js/modules/es.typed-array.every');
          _dereq_('core-js/modules/es.typed-array.fill');
          _dereq_('core-js/modules/es.typed-array.filter');
          _dereq_('core-js/modules/es.typed-array.find');
          _dereq_('core-js/modules/es.typed-array.find-index');
          _dereq_('core-js/modules/es.typed-array.for-each');
          _dereq_('core-js/modules/es.typed-array.includes');
          _dereq_('core-js/modules/es.typed-array.index-of');
          _dereq_('core-js/modules/es.typed-array.iterator');
          _dereq_('core-js/modules/es.typed-array.join');
          _dereq_('core-js/modules/es.typed-array.last-index-of');
          _dereq_('core-js/modules/es.typed-array.map');
          _dereq_('core-js/modules/es.typed-array.reduce');
          _dereq_('core-js/modules/es.typed-array.reduce-right');
          _dereq_('core-js/modules/es.typed-array.reverse');
          _dereq_('core-js/modules/es.typed-array.set');
          _dereq_('core-js/modules/es.typed-array.slice');
          _dereq_('core-js/modules/es.typed-array.some');
          _dereq_('core-js/modules/es.typed-array.sort');
          _dereq_('core-js/modules/es.typed-array.subarray');
          _dereq_('core-js/modules/es.typed-array.to-locale-string');
          _dereq_('core-js/modules/es.typed-array.to-string');
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.default = void 0;

          var _main = _interopRequireDefault(_dereq_('../core/main'));
          var constants = _interopRequireWildcard(_dereq_('../core/constants'));
          function _getRequireWildcardCache() {
            if (typeof WeakMap !== 'function') return null;
            var cache = new WeakMap();
            _getRequireWildcardCache = function _getRequireWildcardCache() {
              return cache;
            };
            return cache;
          }
          function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
              return obj;
            }
            if (obj === null || (_typeof(obj) !== 'object' && typeof obj !== 'function')) {
              return { default: obj };
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
              return cache.get(obj);
            }
            var newObj = {};
            var hasPropertyDescriptor =
              Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
              if (Object.prototype.hasOwnProperty.call(obj, key)) {
                var desc = hasPropertyDescriptor
                  ? Object.getOwnPropertyDescriptor(obj, key)
                  : null;
                if (desc && (desc.get || desc.set)) {
                  Object.defineProperty(newObj, key, desc);
                } else {
                  newObj[key] = obj[key];
                }
              }
            }
            newObj.default = obj;
            if (cache) {
              cache.set(obj, newObj);
            }
            return newObj;
          }
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_1m083o6kxr.s[0]++;

          /**
           * Texture class for WEBGL Mode
           * @private
           * @class p5.Texture
           * @param {p5.RendererGL} renderer an instance of p5.RendererGL that
           * will provide the GL context for this new p5.Texture
           * @param {p5.Image|p5.Graphics|p5.Element|p5.MediaElement|ImageData} [obj] the
           * object containing the image data to store in the texture.
           */
          _main.default.Texture = function(renderer, obj) {
            cov_1m083o6kxr.f[0]++;
            cov_1m083o6kxr.s[1]++;
            this._renderer = renderer;

            var gl = (cov_1m083o6kxr.s[2]++, this._renderer.GL);
            cov_1m083o6kxr.s[3]++;

            this.src = obj;
            cov_1m083o6kxr.s[4]++;
            this.glTex = undefined;
            cov_1m083o6kxr.s[5]++;
            this.glTarget = gl.TEXTURE_2D;
            cov_1m083o6kxr.s[6]++;
            this.glFormat = gl.RGBA;
            cov_1m083o6kxr.s[7]++;
            this.mipmaps = false;
            cov_1m083o6kxr.s[8]++;
            this.glMinFilter = gl.LINEAR;
            cov_1m083o6kxr.s[9]++;
            this.glMagFilter = gl.LINEAR;
            cov_1m083o6kxr.s[10]++;
            this.glWrapS = gl.CLAMP_TO_EDGE;
            cov_1m083o6kxr.s[11]++;
            this.glWrapT = gl.CLAMP_TO_EDGE;

            // used to determine if this texture might need constant updating
            // because it is a video or gif.
            cov_1m083o6kxr.s[12]++;
            this.isSrcMediaElement =
              (cov_1m083o6kxr.b[0][0]++,
              typeof _main.default.MediaElement !== 'undefined') &&
              (cov_1m083o6kxr.b[0][1]++, obj instanceof _main.default.MediaElement);
            cov_1m083o6kxr.s[13]++;
            this._videoPrevUpdateTime = 0;
            cov_1m083o6kxr.s[14]++;
            this.isSrcHTMLElement =
              (cov_1m083o6kxr.b[1][0]++, typeof _main.default.Element !== 'undefined') &&
              (cov_1m083o6kxr.b[1][1]++, obj instanceof _main.default.Element) &&
              (cov_1m083o6kxr.b[1][2]++, !(obj instanceof _main.default.Graphics));
            cov_1m083o6kxr.s[15]++;
            this.isSrcP5Image = obj instanceof _main.default.Image;
            cov_1m083o6kxr.s[16]++;
            this.isSrcP5Graphics = obj instanceof _main.default.Graphics;
            cov_1m083o6kxr.s[17]++;
            this.isImageData =
              (cov_1m083o6kxr.b[2][0]++, typeof ImageData !== 'undefined') &&
              (cov_1m083o6kxr.b[2][1]++, obj instanceof ImageData);

            var textureData = (cov_1m083o6kxr.s[18]++, this._getTextureDataFromSource());
            cov_1m083o6kxr.s[19]++;
            this.width = textureData.width;
            cov_1m083o6kxr.s[20]++;
            this.height = textureData.height;
            cov_1m083o6kxr.s[21]++;

            this.init(textureData);
            cov_1m083o6kxr.s[22]++;
            return this;
          };
          cov_1m083o6kxr.s[23]++;

          _main.default.Texture.prototype._getTextureDataFromSource = function() {
            cov_1m083o6kxr.f[1]++;
            var textureData;
            cov_1m083o6kxr.s[24]++;
            if (this.isSrcP5Image) {
              cov_1m083o6kxr.b[3][0]++;
              cov_1m083o6kxr.s[25]++;
              // param is a p5.Image
              textureData = this.src.canvas;
            } else {
              cov_1m083o6kxr.b[3][1]++;
              cov_1m083o6kxr.s[26]++;
              if (
                (cov_1m083o6kxr.b[5][0]++, this.isSrcMediaElement) ||
                (cov_1m083o6kxr.b[5][1]++, this.isSrcP5Graphics) ||
                (cov_1m083o6kxr.b[5][2]++, this.isSrcHTMLElement)
              ) {
                cov_1m083o6kxr.b[4][0]++;
                cov_1m083o6kxr.s[27]++;
                // if param is a video HTML element
                textureData = this.src.elt;
              } else {
                cov_1m083o6kxr.b[4][1]++;
                cov_1m083o6kxr.s[28]++;
                if (this.isImageData) {
                  cov_1m083o6kxr.b[6][0]++;
                  cov_1m083o6kxr.s[29]++;
                  textureData = this.src;
                } else {
                  cov_1m083o6kxr.b[6][1]++;
                }
              }
            }
            cov_1m083o6kxr.s[30]++;
            return textureData;
          };

          /**
           * Initializes common texture parameters, creates a gl texture,
           * tries to upload the texture for the first time if data is
           * already available.
           * @private
           * @method init
           */ cov_1m083o6kxr.s[31]++;
          _main.default.Texture.prototype.init = function(data) {
            cov_1m083o6kxr.f[2]++;
            var gl = (cov_1m083o6kxr.s[32]++, this._renderer.GL);
            cov_1m083o6kxr.s[33]++;
            this.glTex = gl.createTexture();
            cov_1m083o6kxr.s[34]++;

            this.glWrapS = this._renderer.textureWrapX;
            cov_1m083o6kxr.s[35]++;
            this.glWrapT = this._renderer.textureWrapY;
            cov_1m083o6kxr.s[36]++;

            this.setWrapMode(this.glWrapS, this.glWrapT);
            cov_1m083o6kxr.s[37]++;
            this.bindTexture();

            //gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
            cov_1m083o6kxr.s[38]++;
            gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, this.glMagFilter);
            cov_1m083o6kxr.s[39]++;
            gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, this.glMinFilter);
            cov_1m083o6kxr.s[40]++;

            if (
              (cov_1m083o6kxr.b[8][0]++, this.width === 0) ||
              (cov_1m083o6kxr.b[8][1]++, this.height === 0) ||
              ((cov_1m083o6kxr.b[8][2]++, this.isSrcMediaElement) &&
                (cov_1m083o6kxr.b[8][3]++, !this.src.loadedmetadata))
            ) {
              cov_1m083o6kxr.b[7][0]++;
              // assign a 1x1 empty texture initially, because data is not yet ready,
              // so that no errors occur in gl console!
              var tmpdata = (cov_1m083o6kxr.s[41]++, new Uint8Array([1, 1, 1, 1]));
              cov_1m083o6kxr.s[42]++;
              gl.texImage2D(
                this.glTarget,
                0,
                gl.RGBA,
                1,
                1,
                0,
                this.glFormat,
                gl.UNSIGNED_BYTE,
                tmpdata
              );
            } else {
              cov_1m083o6kxr.b[7][1]++;
              cov_1m083o6kxr.s[43]++;
              // data is ready: just push the texture!
              gl.texImage2D(
                this.glTarget,
                0,
                this.glFormat,
                this.glFormat,
                gl.UNSIGNED_BYTE,
                data
              );
            }
          };

          /**
           * Checks if the source data for this texture has changed (if it's
           * easy to do so) and reuploads the texture if necessary. If it's not
           * possible or to expensive to do a calculation to determine wheter or
           * not the data has occurred, this method simply re-uploads the texture.
           * @method update
           */ cov_1m083o6kxr.s[44]++;
          _main.default.Texture.prototype.update = function() {
            cov_1m083o6kxr.f[3]++;
            var data = (cov_1m083o6kxr.s[45]++, this.src);
            cov_1m083o6kxr.s[46]++;
            if (
              (cov_1m083o6kxr.b[10][0]++, data.width === 0) ||
              (cov_1m083o6kxr.b[10][1]++, data.height === 0)
            ) {
              cov_1m083o6kxr.b[9][0]++;
              cov_1m083o6kxr.s[47]++;
              return false; // nothing to do!
            } else {
              cov_1m083o6kxr.b[9][1]++;
            }

            var textureData = (cov_1m083o6kxr.s[48]++, this._getTextureDataFromSource());
            var updated = (cov_1m083o6kxr.s[49]++, false);

            var gl = (cov_1m083o6kxr.s[50]++, this._renderer.GL);
            // pull texture from data, make sure width & height are appropriate
            cov_1m083o6kxr.s[51]++;
            if (
              (cov_1m083o6kxr.b[12][0]++, textureData.width !== this.width) ||
              (cov_1m083o6kxr.b[12][1]++, textureData.height !== this.height)
            ) {
              cov_1m083o6kxr.b[11][0]++;
              cov_1m083o6kxr.s[52]++;
              updated = true;

              // make sure that if the width and height of this.src have changed
              // for some reason, we update our metadata and upload the texture again
              cov_1m083o6kxr.s[53]++;
              this.width = textureData.width;
              cov_1m083o6kxr.s[54]++;
              this.height = textureData.height;
              cov_1m083o6kxr.s[55]++;

              if (this.isSrcP5Image) {
                cov_1m083o6kxr.b[13][0]++;
                cov_1m083o6kxr.s[56]++;
                data.setModified(false);
              } else {
                cov_1m083o6kxr.b[13][1]++;
                cov_1m083o6kxr.s[57]++;
                if (
                  (cov_1m083o6kxr.b[15][0]++, this.isSrcMediaElement) ||
                  (cov_1m083o6kxr.b[15][1]++, this.isSrcHTMLElement)
                ) {
                  cov_1m083o6kxr.b[14][0]++;
                  cov_1m083o6kxr.s[58]++;
                  // on the first frame the metadata comes in, the size will be changed
                  // from 0 to actual size, but pixels may not be available.
                  // flag for update in a future frame.
                  // if we don't do this, a paused video, for example, may not
                  // send the first frame to texture memory.
                  data.setModified(true);
                } else {
                  cov_1m083o6kxr.b[14][1]++;
                }
              }
            } else {
              cov_1m083o6kxr.b[11][1]++;
              cov_1m083o6kxr.s[59]++;
              if (this.isSrcP5Image) {
                cov_1m083o6kxr.b[16][0]++;
                cov_1m083o6kxr.s[60]++;
                // for an image, we only update if the modified field has been set,
                // for example, by a call to p5.Image.set
                if (data.isModified()) {
                  cov_1m083o6kxr.b[17][0]++;
                  cov_1m083o6kxr.s[61]++;
                  updated = true;
                  cov_1m083o6kxr.s[62]++;
                  data.setModified(false);
                } else {
                  cov_1m083o6kxr.b[17][1]++;
                }
              } else {
                cov_1m083o6kxr.b[16][1]++;
                cov_1m083o6kxr.s[63]++;
                if (this.isSrcMediaElement) {
                  cov_1m083o6kxr.b[18][0]++;
                  cov_1m083o6kxr.s[64]++;
                  // for a media element (video), we'll check if the current time in
                  // the video frame matches the last time. if it doesn't match, the
                  // video has advanced or otherwise been taken to a new frame,
                  // and we need to upload it.
                  if (data.isModified()) {
                    cov_1m083o6kxr.b[19][0]++;
                    cov_1m083o6kxr.s[65]++;
                    // p5.MediaElement may have also had set/updatePixels, etc. called
                    // on it and should be updated, or may have been set for the first
                    // time!
                    updated = true;
                    cov_1m083o6kxr.s[66]++;
                    data.setModified(false);
                  } else {
                    cov_1m083o6kxr.b[19][1]++;
                    cov_1m083o6kxr.s[67]++;
                    if (data.loadedmetadata) {
                      cov_1m083o6kxr.b[20][0]++;
                      cov_1m083o6kxr.s[68]++;
                      // if the meta data has been loaded, we can ask the video
                      // what it's current position (in time) is.
                      if (this._videoPrevUpdateTime !== data.time()) {
                        cov_1m083o6kxr.b[21][0]++;
                        cov_1m083o6kxr.s[69]++;
                        // update the texture in gpu mem only if the current
                        // video timestamp does not match the timestamp of the last
                        // time we uploaded this texture (and update the time we
                        // last uploaded, too)
                        this._videoPrevUpdateTime = data.time();
                        cov_1m083o6kxr.s[70]++;
                        updated = true;
                      } else {
                        cov_1m083o6kxr.b[21][1]++;
                      }
                    } else {
                      cov_1m083o6kxr.b[20][1]++;
                    }
                  }
                } else {
                  cov_1m083o6kxr.b[18][1]++;
                  cov_1m083o6kxr.s[71]++;
                  if (this.isImageData) {
                    cov_1m083o6kxr.b[22][0]++;
                    cov_1m083o6kxr.s[72]++;
                    if (data._dirty) {
                      cov_1m083o6kxr.b[23][0]++;
                      cov_1m083o6kxr.s[73]++;
                      data._dirty = false;
                      cov_1m083o6kxr.s[74]++;
                      updated = true;
                    } else {
                      cov_1m083o6kxr.b[23][1]++;
                    }
                  } else {
                    cov_1m083o6kxr.b[22][1]++;
                    cov_1m083o6kxr.s[75]++;
                    /* data instanceof p5.Graphics, probably */
                    // there is not enough information to tell if the texture can be
                    // conditionally updated; so to be safe, we just go ahead and upload it.
                    updated = true;
                  }
                }
              }
            }
            cov_1m083o6kxr.s[76]++;

            if (updated) {
              cov_1m083o6kxr.b[24][0]++;
              cov_1m083o6kxr.s[77]++;
              this.bindTexture();
              cov_1m083o6kxr.s[78]++;
              gl.texImage2D(
                this.glTarget,
                0,
                this.glFormat,
                this.glFormat,
                gl.UNSIGNED_BYTE,
                textureData
              );
            } else {
              cov_1m083o6kxr.b[24][1]++;
            }
            cov_1m083o6kxr.s[79]++;

            return updated;
          };

          /**
           * Binds the texture to the appropriate GL target.
           * @method bindTexture
           */ cov_1m083o6kxr.s[80]++;
          _main.default.Texture.prototype.bindTexture = function() {
            cov_1m083o6kxr.f[4]++;
            // bind texture using gl context + glTarget and
            // generated gl texture object
            var gl = (cov_1m083o6kxr.s[81]++, this._renderer.GL);
            cov_1m083o6kxr.s[82]++;
            gl.bindTexture(this.glTarget, this.glTex);
            cov_1m083o6kxr.s[83]++;

            return this;
          };

          /**
           * Unbinds the texture from the appropriate GL target.
           * @method unbindTexture
           */ cov_1m083o6kxr.s[84]++;
          _main.default.Texture.prototype.unbindTexture = function() {
            cov_1m083o6kxr.f[5]++;
            // unbind per above, disable texturing on glTarget
            var gl = (cov_1m083o6kxr.s[85]++, this._renderer.GL);
            cov_1m083o6kxr.s[86]++;
            gl.bindTexture(this.glTarget, null);
          };

          /**
           * Sets how a texture is be interpolated when upscaled or downscaled.
           * Nearest filtering uses nearest neighbor scaling when interpolating
           * Linear filtering uses WebGL's linear scaling when interpolating
           * @method setInterpolation
           * @param {String} downScale Specifies the texture filtering when
           *                           textures are shrunk. Options are LINEAR or NEAREST
           * @param {String} upScale Specifies the texture filtering when
           *                         textures are magnified. Options are LINEAR or NEAREST
           * @todo implement mipmapping filters
           */ cov_1m083o6kxr.s[87]++;
          _main.default.Texture.prototype.setInterpolation = function(downScale, upScale) {
            cov_1m083o6kxr.f[6]++;
            var gl = (cov_1m083o6kxr.s[88]++, this._renderer.GL);
            cov_1m083o6kxr.s[89]++;

            if (downScale === constants.NEAREST) {
              cov_1m083o6kxr.b[25][0]++;
              cov_1m083o6kxr.s[90]++;
              this.glMinFilter = gl.NEAREST;
            } else {
              cov_1m083o6kxr.b[25][1]++;
              cov_1m083o6kxr.s[91]++;
              this.glMinFilter = gl.LINEAR;
            }
            cov_1m083o6kxr.s[92]++;

            if (upScale === constants.NEAREST) {
              cov_1m083o6kxr.b[26][0]++;
              cov_1m083o6kxr.s[93]++;
              this.glMagFilter = gl.NEAREST;
            } else {
              cov_1m083o6kxr.b[26][1]++;
              cov_1m083o6kxr.s[94]++;
              this.glMagFilter = gl.LINEAR;
            }
            cov_1m083o6kxr.s[95]++;

            this.bindTexture();
            cov_1m083o6kxr.s[96]++;
            gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, this.glMinFilter);
            cov_1m083o6kxr.s[97]++;
            gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, this.glMagFilter);
            cov_1m083o6kxr.s[98]++;
            this.unbindTexture();
          };

          /**
           * Sets the texture wrapping mode. This controls how textures behave
           * when their uv's go outside of the 0 - 1 range. There are three options:
           * CLAMP, REPEAT, and MIRROR. REPEAT & MIRROR are only available if the texture
           * is a power of two size (128, 256, 512, 1024, etc.).
           * @method setWrapMode
           * @param {String} wrapX Controls the horizontal texture wrapping behavior
           * @param {String} wrapY Controls the vertical texture wrapping behavior
           */ cov_1m083o6kxr.s[99]++;
          _main.default.Texture.prototype.setWrapMode = function(wrapX, wrapY) {
            cov_1m083o6kxr.f[7]++;
            var gl = (cov_1m083o6kxr.s[100]++, this._renderer.GL);

            // for webgl 1 we need to check if the texture is power of two
            // if it isn't we will set the wrap mode to CLAMP
            // webgl2 will support npot REPEAT and MIRROR but we don't check for it yet
            cov_1m083o6kxr.s[101]++;
            var isPowerOfTwo = function isPowerOfTwo(x) {
              cov_1m083o6kxr.f[8]++;
              cov_1m083o6kxr.s[102]++;
              return (x & (x - 1)) === 0;
            };

            var widthPowerOfTwo = (cov_1m083o6kxr.s[103]++, isPowerOfTwo(this.width));
            var heightPowerOfTwo = (cov_1m083o6kxr.s[104]++, isPowerOfTwo(this.height));
            cov_1m083o6kxr.s[105]++;

            if (wrapX === constants.REPEAT) {
              cov_1m083o6kxr.b[27][0]++;
              cov_1m083o6kxr.s[106]++;
              if (
                (cov_1m083o6kxr.b[29][0]++, widthPowerOfTwo) &&
                (cov_1m083o6kxr.b[29][1]++, heightPowerOfTwo)
              ) {
                cov_1m083o6kxr.b[28][0]++;
                cov_1m083o6kxr.s[107]++;
                this.glWrapS = gl.REPEAT;
              } else {
                cov_1m083o6kxr.b[28][1]++;
                cov_1m083o6kxr.s[108]++;
                console.warn(
                  'You tried to set the wrap mode to REPEAT but the texture size is not a power of two. Setting to CLAMP instead'
                );
                cov_1m083o6kxr.s[109]++;

                this.glWrapS = gl.CLAMP_TO_EDGE;
              }
            } else {
              cov_1m083o6kxr.b[27][1]++;
              cov_1m083o6kxr.s[110]++;
              if (wrapX === constants.MIRROR) {
                cov_1m083o6kxr.b[30][0]++;
                cov_1m083o6kxr.s[111]++;
                if (
                  (cov_1m083o6kxr.b[32][0]++, widthPowerOfTwo) &&
                  (cov_1m083o6kxr.b[32][1]++, heightPowerOfTwo)
                ) {
                  cov_1m083o6kxr.b[31][0]++;
                  cov_1m083o6kxr.s[112]++;
                  this.glWrapS = gl.MIRRORED_REPEAT;
                } else {
                  cov_1m083o6kxr.b[31][1]++;
                  cov_1m083o6kxr.s[113]++;
                  console.warn(
                    'You tried to set the wrap mode to MIRROR but the texture size is not a power of two. Setting to CLAMP instead'
                  );
                  cov_1m083o6kxr.s[114]++;

                  this.glWrapS = gl.CLAMP_TO_EDGE;
                }
              } else {
                cov_1m083o6kxr.b[30][1]++;
                cov_1m083o6kxr.s[115]++;
                // falling back to default if didn't get a proper mode
                this.glWrapS = gl.CLAMP_TO_EDGE;
              }
            }
            cov_1m083o6kxr.s[116]++;

            if (wrapY === constants.REPEAT) {
              cov_1m083o6kxr.b[33][0]++;
              cov_1m083o6kxr.s[117]++;
              if (
                (cov_1m083o6kxr.b[35][0]++, widthPowerOfTwo) &&
                (cov_1m083o6kxr.b[35][1]++, heightPowerOfTwo)
              ) {
                cov_1m083o6kxr.b[34][0]++;
                cov_1m083o6kxr.s[118]++;
                this.glWrapT = gl.REPEAT;
              } else {
                cov_1m083o6kxr.b[34][1]++;
                cov_1m083o6kxr.s[119]++;
                console.warn(
                  'You tried to set the wrap mode to REPEAT but the texture size is not a power of two. Setting to CLAMP instead'
                );
                cov_1m083o6kxr.s[120]++;

                this.glWrapT = gl.CLAMP_TO_EDGE;
              }
            } else {
              cov_1m083o6kxr.b[33][1]++;
              cov_1m083o6kxr.s[121]++;
              if (wrapY === constants.MIRROR) {
                cov_1m083o6kxr.b[36][0]++;
                cov_1m083o6kxr.s[122]++;
                if (
                  (cov_1m083o6kxr.b[38][0]++, widthPowerOfTwo) &&
                  (cov_1m083o6kxr.b[38][1]++, heightPowerOfTwo)
                ) {
                  cov_1m083o6kxr.b[37][0]++;
                  cov_1m083o6kxr.s[123]++;
                  this.glWrapT = gl.MIRRORED_REPEAT;
                } else {
                  cov_1m083o6kxr.b[37][1]++;
                  cov_1m083o6kxr.s[124]++;
                  console.warn(
                    'You tried to set the wrap mode to MIRROR but the texture size is not a power of two. Setting to CLAMP instead'
                  );
                  cov_1m083o6kxr.s[125]++;

                  this.glWrapT = gl.CLAMP_TO_EDGE;
                }
              } else {
                cov_1m083o6kxr.b[36][1]++;
                cov_1m083o6kxr.s[126]++;
                // falling back to default if didn't get a proper mode
                this.glWrapT = gl.CLAMP_TO_EDGE;
              }
            }
            cov_1m083o6kxr.s[127]++;

            this.bindTexture();
            cov_1m083o6kxr.s[128]++;
            gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, this.glWrapS);
            cov_1m083o6kxr.s[129]++;
            gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, this.glWrapT);
            cov_1m083o6kxr.s[130]++;
            this.unbindTexture();
          };
          var _default = _main.default.Texture;
          exports.default = _default;
        },
        {
          '../core/constants': 272,
          '../core/main': 283,
          'core-js/modules/es.array.iterator': 174,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.typed-array.copy-within': 212,
          'core-js/modules/es.typed-array.every': 213,
          'core-js/modules/es.typed-array.fill': 214,
          'core-js/modules/es.typed-array.filter': 215,
          'core-js/modules/es.typed-array.find': 217,
          'core-js/modules/es.typed-array.find-index': 216,
          'core-js/modules/es.typed-array.for-each': 220,
          'core-js/modules/es.typed-array.includes': 221,
          'core-js/modules/es.typed-array.index-of': 222,
          'core-js/modules/es.typed-array.iterator': 225,
          'core-js/modules/es.typed-array.join': 226,
          'core-js/modules/es.typed-array.last-index-of': 227,
          'core-js/modules/es.typed-array.map': 228,
          'core-js/modules/es.typed-array.reduce': 230,
          'core-js/modules/es.typed-array.reduce-right': 229,
          'core-js/modules/es.typed-array.reverse': 231,
          'core-js/modules/es.typed-array.set': 232,
          'core-js/modules/es.typed-array.slice': 233,
          'core-js/modules/es.typed-array.some': 234,
          'core-js/modules/es.typed-array.sort': 235,
          'core-js/modules/es.typed-array.subarray': 236,
          'core-js/modules/es.typed-array.to-locale-string': 237,
          'core-js/modules/es.typed-array.to-string': 238,
          'core-js/modules/es.typed-array.uint8-array': 241
        }
      ],
      340: [
        function(_dereq_, module, exports) {
          'use strict';
          function _typeof(obj) {
            if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {
              _typeof = function _typeof(obj) {
                return typeof obj;
              };
            } else {
              _typeof = function _typeof(obj) {
                return obj &&
                  typeof Symbol === 'function' &&
                  obj.constructor === Symbol &&
                  obj !== Symbol.prototype
                  ? 'symbol'
                  : typeof obj;
              };
            }
            return _typeof(obj);
          }
          var cov_ipne3zcz1 = (function() {
            var path = '/Users/outofambit/src/p5.js/src/webgl/text.js';
            var hash = '693d360cbaaae63d53ec353bfe6ad3482a9d379d';
            var global = new Function('return this')();
            var gcv = '__coverage__';
            var coverageData = {
              path: '/Users/outofambit/src/p5.js/src/webgl/text.js',
              statementMap: {
                '0': { start: { line: 8, column: 0 }, end: { line: 11, column: 2 } },
                '1': { start: { line: 13, column: 0 }, end: { line: 19, column: 2 } },
                '2': { start: { line: 14, column: 2 }, end: { line: 16, column: 3 } },
                '3': { start: { line: 15, column: 4 }, end: { line: 15, column: 56 } },
                '4': { start: { line: 18, column: 2 }, end: { line: 18, column: 11 } },
                '5': { start: { line: 24, column: 22 }, end: { line: 24, column: 23 } },
                '6': { start: { line: 25, column: 23 }, end: { line: 25, column: 36 } },
                '7': { start: { line: 28, column: 25 }, end: { line: 28, column: 27 } },
                '8': { start: { line: 29, column: 26 }, end: { line: 29, column: 28 } },
                '9': { start: { line: 32, column: 23 }, end: { line: 32, column: 25 } },
                '10': { start: { line: 33, column: 24 }, end: { line: 33, column: 26 } },
                '11': { start: { line: 36, column: 23 }, end: { line: 36, column: 25 } },
                '12': { start: { line: 37, column: 24 }, end: { line: 37, column: 26 } },
                '13': { start: { line: 48, column: 2 }, end: { line: 48, column: 21 } },
                '14': { start: { line: 49, column: 2 }, end: { line: 49, column: 23 } },
                '15': { start: { line: 50, column: 2 }, end: { line: 50, column: 18 } },
                '16': { start: { line: 61, column: 2 }, end: { line: 112, column: 4 } },
                '17': { start: { line: 62, column: 22 }, end: { line: 62, column: 46 } },
                '18': { start: { line: 63, column: 4 }, end: { line: 64, column: 61 } },
                '19': { start: { line: 64, column: 6 }, end: { line: 64, column: 61 } },
                '20': { start: { line: 69, column: 4 }, end: { line: 77, column: 5 } },
                '21': { start: { line: 69, column: 18 }, end: { line: 69, column: 39 } },
                '22': { start: { line: 70, column: 28 }, end: { line: 70, column: 42 } },
                '23': { start: { line: 71, column: 6 }, end: { line: 76, column: 7 } },
                '24': { start: { line: 73, column: 8 }, end: { line: 73, column: 34 } },
                '25': { start: { line: 74, column: 8 }, end: { line: 74, column: 44 } },
                '26': { start: { line: 75, column: 8 }, end: { line: 75, column: 14 } },
                '27': { start: { line: 79, column: 4 }, end: { line: 106, column: 5 } },
                '28': { start: { line: 80, column: 6 }, end: { line: 102, column: 7 } },
                '29': { start: { line: 82, column: 8 }, end: { line: 82, column: 59 } },
                '30': { start: { line: 86, column: 21 }, end: { line: 86, column: 63 } },
                '31': { start: { line: 87, column: 24 }, end: { line: 87, column: 31 } },
                '32': { start: { line: 88, column: 8 }, end: { line: 93, column: 9 } },
                '33': { start: { line: 90, column: 10 }, end: { line: 90, column: 52 } },
                '34': { start: { line: 91, column: 10 }, end: { line: 91, column: 40 } },
                '35': { start: { line: 92, column: 10 }, end: { line: 92, column: 44 } },
                '36': { start: { line: 94, column: 20 }, end: { line: 94, column: 43 } },
                '37': { start: { line: 95, column: 8 }, end: { line: 97, column: 9 } },
                '38': { start: { line: 96, column: 10 }, end: { line: 96, column: 67 } },
                '39': { start: { line: 98, column: 8 }, end: { line: 101, column: 9 } },
                '40': { start: { line: 100, column: 10 }, end: { line: 100, column: 44 } },
                '41': { start: { line: 104, column: 6 }, end: { line: 104, column: 42 } },
                '42': { start: { line: 105, column: 6 }, end: { line: 105, column: 33 } },
                '43': { start: { line: 108, column: 18 }, end: { line: 108, column: 33 } },
                '44': { start: { line: 109, column: 4 }, end: { line: 109, column: 29 } },
                '45': { start: { line: 110, column: 4 }, end: { line: 110, column: 28 } },
                '46': { start: { line: 111, column: 4 }, end: { line: 111, column: 32 } },
                '47': { start: { line: 126, column: 20 }, end: { line: 126, column: 39 } },
                '48': { start: { line: 127, column: 17 }, end: { line: 127, column: 31 } },
                '49': { start: { line: 128, column: 14 }, end: { line: 128, column: 35 } },
                '50': { start: { line: 129, column: 2 }, end: { line: 129, column: 22 } },
                '51': { start: { line: 130, column: 2 }, end: { line: 130, column: 22 } },
                '52': { start: { line: 131, column: 2 }, end: { line: 131, column: 22 } },
                '53': { start: { line: 132, column: 2 }, end: { line: 132, column: 22 } },
                '54': { start: { line: 135, column: 14 }, end: { line: 135, column: 26 } },
                '55': { start: { line: 144, column: 17 }, end: { line: 622, column: 1 } },
                '56': { start: { line: 145, column: 2 }, end: { line: 145, column: 19 } },
                '57': { start: { line: 147, column: 2 }, end: { line: 147, column: 78 } },
                '58': { start: { line: 149, column: 2 }, end: { line: 149, column: 74 } },
                '59': { start: { line: 150, column: 2 }, end: { line: 150, column: 74 } },
                '60': { start: { line: 152, column: 2 }, end: { line: 152, column: 75 } },
                '61': { start: { line: 153, column: 2 }, end: { line: 153, column: 75 } },
                '62': { start: { line: 156, column: 2 }, end: { line: 156, column: 23 } },
                '63': { start: { line: 167, column: 2 }, end: { line: 621, column: 4 } },
                '64': { start: { line: 169, column: 13 }, end: { line: 169, column: 41 } },
                '65': { start: { line: 170, column: 4 }, end: { line: 170, column: 22 } },
                '66': { start: { line: 170, column: 12 }, end: { line: 170, column: 22 } },
                '67': { start: { line: 173, column: 15 }, end: { line: 173, column: 37 } },
                '68': { start: { line: 174, column: 17 }, end: { line: 174, column: 22 } },
                '69': { start: { line: 175, column: 17 }, end: { line: 175, column: 22 } },
                '70': { start: { line: 176, column: 19 }, end: { line: 176, column: 31 } },
                '71': { start: { line: 177, column: 20 }, end: { line: 177, column: 32 } },
                '72': { start: { line: 178, column: 17 }, end: { line: 178, column: 36 } },
                '73': { start: { line: 180, column: 4 }, end: { line: 182, column: 5 } },
                '74': { start: { line: 181, column: 6 }, end: { line: 181, column: 49 } },
                '75': { start: { line: 185, column: 20 }, end: { line: 185, column: 22 } },
                '76': { start: { line: 186, column: 17 }, end: { line: 186, column: 19 } },
                '77': { start: { line: 187, column: 17 }, end: { line: 187, column: 19 } },
                '78': { start: { line: 188, column: 4 }, end: { line: 188, column: 59 } },
                '79': { start: { line: 188, column: 45 }, end: { line: 188, column: 59 } },
                '80': { start: { line: 189, column: 4 }, end: { line: 189, column: 60 } },
                '81': { start: { line: 189, column: 46 }, end: { line: 189, column: 60 } },
                '82': { start: { line: 200, column: 20 }, end: { line: 200, column: 34 } },
                '83': { start: { line: 201, column: 6 }, end: { line: 201, column: 22 } },
                '84': { start: { line: 212, column: 8 }, end: { line: 216, column: 9 } },
                '85': { start: { line: 212, column: 21 }, end: { line: 212, column: 30 } },
                '86': { start: { line: 213, column: 20 }, end: { line: 213, column: 25 } },
                '87': { start: { line: 214, column: 10 }, end: { line: 214, column: 31 } },
                '88': { start: { line: 214, column: 23 }, end: { line: 214, column: 31 } },
                '89': { start: { line: 215, column: 10 }, end: { line: 215, column: 31 } },
                '90': { start: { line: 215, column: 23 }, end: { line: 215, column: 31 } },
                '91': { start: { line: 217, column: 8 }, end: { line: 217, column: 28 } },
                '92': { start: { line: 222, column: 18 }, end: { line: 222, column: 34 } },
                '93': { start: { line: 223, column: 20 }, end: { line: 223, column: 68 } },
                '94': { start: { line: 224, column: 20 }, end: { line: 224, column: 79 } },
                '95': { start: { line: 225, column: 6 }, end: { line: 225, column: 74 } },
                '96': { start: { line: 225, column: 22 }, end: { line: 225, column: 27 } },
                '97': { start: { line: 225, column: 51 }, end: { line: 225, column: 74 } },
                '98': { start: { line: 227, column: 18 }, end: { line: 227, column: 34 } },
                '99': { start: { line: 228, column: 20 }, end: { line: 228, column: 69 } },
                '100': { start: { line: 229, column: 20 }, end: { line: 232, column: 7 } },
                '101': { start: { line: 233, column: 6 }, end: { line: 233, column: 74 } },
                '102': { start: { line: 233, column: 22 }, end: { line: 233, column: 27 } },
                '103': { start: { line: 233, column: 51 }, end: { line: 233, column: 74 } },
                '104': { start: { line: 245, column: 6 }, end: { line: 245, column: 30 } },
                '105': { start: { line: 245, column: 19 }, end: { line: 245, column: 30 } },
                '106': { start: { line: 246, column: 6 }, end: { line: 246, column: 30 } },
                '107': { start: { line: 246, column: 19 }, end: { line: 246, column: 30 } },
                '108': { start: { line: 247, column: 6 }, end: { line: 247, column: 15 } },
                '109': { start: { line: 257, column: 6 }, end: { line: 257, column: 36 } },
                '110': { start: { line: 271, column: 6 }, end: { line: 271, column: 19 } },
                '111': { start: { line: 272, column: 6 }, end: { line: 272, column: 19 } },
                '112': { start: { line: 273, column: 6 }, end: { line: 273, column: 19 } },
                '113': { start: { line: 274, column: 6 }, end: { line: 274, column: 19 } },
                '114': { start: { line: 283, column: 6 }, end: { line: 292, column: 8 } },
                '115': { start: { line: 284, column: 8 }, end: { line: 291, column: 10 } },
                '116': { start: { line: 301, column: 6 }, end: { line: 308, column: 8 } },
                '117': { start: { line: 302, column: 8 }, end: { line: 307, column: 10 } },
                '118': { start: { line: 319, column: 6 }, end: { line: 330, column: 8 } },
                '119': { start: { line: 320, column: 19 }, end: { line: 320, column: 54 } },
                '120': { start: { line: 321, column: 19 }, end: { line: 321, column: 54 } },
                '121': { start: { line: 322, column: 20 }, end: { line: 322, column: 45 } },
                '122': { start: { line: 324, column: 8 }, end: { line: 324, column: 54 } },
                '123': { start: { line: 325, column: 8 }, end: { line: 325, column: 49 } },
                '124': { start: { line: 326, column: 19 }, end: { line: 326, column: 50 } },
                '125': { start: { line: 327, column: 22 }, end: { line: 327, column: 53 } },
                '126': { start: { line: 328, column: 8 }, end: { line: 328, column: 21 } },
                '127': { start: { line: 329, column: 8 }, end: { line: 329, column: 21 } },
                '128': { start: { line: 340, column: 6 }, end: { line: 385, column: 8 } },
                '129': { start: { line: 341, column: 18 }, end: { line: 341, column: 49 } },
                '130': { start: { line: 342, column: 18 }, end: { line: 342, column: 67 } },
                '131': { start: { line: 343, column: 18 }, end: { line: 346, column: 9 } },
                '132': { start: { line: 348, column: 23 }, end: { line: 348, column: 25 } },
                '133': { start: { line: 351, column: 16 }, end: { line: 351, column: 37 } },
                '134': { start: { line: 352, column: 8 }, end: { line: 381, column: 9 } },
                '135': { start: { line: 353, column: 18 }, end: { line: 353, column: 39 } },
                '136': { start: { line: 354, column: 18 }, end: { line: 354, column: 39 } },
                '137': { start: { line: 355, column: 23 }, end: { line: 355, column: 40 } },
                '138': { start: { line: 356, column: 10 }, end: { line: 380, column: 11 } },
                '139': { start: { line: 357, column: 12 }, end: { line: 361, column: 13 } },
                '140': { start: { line: 358, column: 14 }, end: { line: 358, column: 21 } },
                '141': { start: { line: 359, column: 14 }, end: { line: 359, column: 21 } },
                '142': { start: { line: 360, column: 14 }, end: { line: 360, column: 21 } },
                '143': { start: { line: 363, column: 22 }, end: { line: 363, column: 37 } },
                '144': { start: { line: 364, column: 23 }, end: { line: 364, column: 41 } },
                '145': { start: { line: 365, column: 21 }, end: { line: 365, column: 39 } },
                '146': { start: { line: 368, column: 12 }, end: { line: 373, column: 13 } },
                '147': { start: { line: 370, column: 14 }, end: { line: 370, column: 42 } },
                '148': { start: { line: 372, column: 14 }, end: { line: 372, column: 43 } },
                '149': { start: { line: 376, column: 12 }, end: { line: 379, column: 13 } },
                '150': { start: { line: 378, column: 14 }, end: { line: 378, column: 42 } },
                '151': { start: { line: 383, column: 8 }, end: { line: 383, column: 26 } },
                '152': { start: { line: 384, column: 8 }, end: { line: 384, column: 22 } },
                '153': { start: { line: 405, column: 21 }, end: { line: 410, column: 26 } },
                '154': { start: { line: 412, column: 17 }, end: { line: 412, column: 19 } },
                '155': { start: { line: 413, column: 24 }, end: { line: 413, column: 34 } },
                '156': { start: { line: 416, column: 6 }, end: { line: 451, column: 7 } },
                '157': { start: { line: 421, column: 21 }, end: { line: 421, column: 23 } },
                '158': { start: { line: 424, column: 8 }, end: { line: 440, column: 9 } },
                '159': { start: { line: 426, column: 10 }, end: { line: 426, column: 45 } },
                '160': { start: { line: 427, column: 10 }, end: { line: 429, column: 11 } },
                '161': { start: { line: 428, column: 12 }, end: { line: 428, column: 18 } },
                '162': { start: { line: 432, column: 20 }, end: { line: 432, column: 43 } },
                '163': { start: { line: 434, column: 24 }, end: { line: 434, column: 38 } },
                '164': { start: { line: 435, column: 25 }, end: { line: 435, column: 53 } },
                '165': { start: { line: 437, column: 10 }, end: { line: 437, column: 25 } },
                '166': { start: { line: 438, column: 10 }, end: { line: 438, column: 27 } },
                '167': { start: { line: 439, column: 10 }, end: { line: 439, column: 25 } },
                '168': { start: { line: 442, column: 8 }, end: { line: 445, column: 9 } },
                '169': { start: { line: 444, column: 10 }, end: { line: 444, column: 36 } },
                '170': { start: { line: 447, column: 8 }, end: { line: 447, column: 23 } },
                '171': { start: { line: 450, column: 8 }, end: { line: 450, column: 55 } },
                '172': { start: { line: 453, column: 6 }, end: { line: 453, column: 16 } },
                '173': { start: { line: 466, column: 17 }, end: { line: 466, column: 30 } },
                '174': { start: { line: 467, column: 17 }, end: { line: 467, column: 30 } },
                '175': { start: { line: 468, column: 6 }, end: { line: 468, column: 65 } },
                '176': { start: { line: 482, column: 6 }, end: { line: 482, column: 72 } },
                '177': { start: { line: 487, column: 4 }, end: { line: 543, column: 5 } },
                '178': { start: { line: 489, column: 17 }, end: { line: 489, column: 40 } },
                '179': { start: { line: 490, column: 17 }, end: { line: 490, column: 41 } },
                '180': { start: { line: 493, column: 6 }, end: { line: 493, column: 46 } },
                '181': { start: { line: 493, column: 37 }, end: { line: 493, column: 46 } },
                '182': { start: { line: 495, column: 6 }, end: { line: 540, column: 7 } },
                '183': { start: { line: 498, column: 10 }, end: { line: 498, column: 18 } },
                '184': { start: { line: 499, column: 10 }, end: { line: 499, column: 18 } },
                '185': { start: { line: 500, column: 10 }, end: { line: 500, column: 16 } },
                '186': { start: { line: 504, column: 10 }, end: { line: 504, column: 35 } },
                '187': { start: { line: 505, column: 10 }, end: { line: 505, column: 16 } },
                '188': { start: { line: 509, column: 21 }, end: { line: 509, column: 45 } },
                '189': { start: { line: 510, column: 21 }, end: { line: 510, column: 46 } },
                '190': { start: { line: 511, column: 10 }, end: { line: 511, column: 69 } },
                '191': { start: { line: 512, column: 10 }, end: { line: 512, column: 16 } },
                '192': { start: { line: 516, column: 10 }, end: { line: 522, column: 11 } },
                '193': { start: { line: 518, column: 12 }, end: { line: 518, column: 37 } },
                '194': { start: { line: 519, column: 12 }, end: { line: 519, column: 43 } },
                '195': { start: { line: 521, column: 12 }, end: { line: 521, column: 43 } },
                '196': { start: { line: 523, column: 10 }, end: { line: 523, column: 16 } },
                '197': { start: { line: 527, column: 22 }, end: { line: 527, column: 46 } },
                '198': { start: { line: 528, column: 22 }, end: { line: 528, column: 47 } },
                '199': { start: { line: 529, column: 22 }, end: { line: 529, column: 46 } },
                '200': { start: { line: 530, column: 22 }, end: { line: 530, column: 47 } },
                '201': { start: { line: 531, column: 21 }, end: { line: 531, column: 74 } },
                '202': { start: { line: 532, column: 10 }, end: { line: 535, column: 11 } },
                '203': { start: { line: 532, column: 24 }, end: { line: 532, column: 25 } },
                '204': { start: { line: 533, column: 22 }, end: { line: 533, column: 42 } },
                '205': { start: { line: 534, column: 12 }, end: { line: 534, column: 58 } },
                '206': { start: { line: 536, column: 10 }, end: { line: 536, column: 16 } },
                '207': { start: { line: 539, column: 10 }, end: { line: 539, column: 63 } },
                '208': { start: { line: 541, column: 6 }, end: { line: 541, column: 14 } },
                '209': { start: { line: 542, column: 6 }, end: { line: 542, column: 14 } },
                '210': { start: { line: 546, column: 24 }, end: { line: 546, column: 38 } },
                '211': { start: { line: 547, column: 28 }, end: { line: 547, column: 72 } },
                '212': { start: { line: 548, column: 25 }, end: { line: 548, column: 46 } },
                '213': { start: { line: 551, column: 4 }, end: { line: 554, column: 5 } },
                '214': { start: { line: 551, column: 18 }, end: { line: 551, column: 19 } },
                '215': { start: { line: 552, column: 16 }, end: { line: 552, column: 27 } },
                '216': { start: { line: 553, column: 6 }, end: { line: 553, column: 78 } },
                '217': { start: { line: 568, column: 24 }, end: { line: 568, column: 34 } },
                '218': { start: { line: 569, column: 27 }, end: { line: 569, column: 61 } },
                '219': { start: { line: 570, column: 24 }, end: { line: 570, column: 42 } },
                '220': { start: { line: 572, column: 25 }, end: { line: 572, column: 26 } },
                '221': { start: { line: 573, column: 6 }, end: { line: 575, column: 7 } },
                '222': { start: { line: 573, column: 20 }, end: { line: 573, column: 21 } },
                '223': { start: { line: 574, column: 8 }, end: { line: 574, column: 39 } },
                '224': { start: { line: 578, column: 28 }, end: { line: 578, column: 66 } },
                '225': { start: { line: 581, column: 6 }, end: { line: 601, column: 7 } },
                '226': { start: { line: 581, column: 19 }, end: { line: 581, column: 20 } },
                '227': { start: { line: 582, column: 30 }, end: { line: 582, column: 36 } },
                '228': { start: { line: 583, column: 28 }, end: { line: 583, column: 48 } },
                '229': { start: { line: 584, column: 30 }, end: { line: 584, column: 49 } },
                '230': { start: { line: 587, column: 8 }, end: { line: 593, column: 10 } },
                '231': { start: { line: 596, column: 8 }, end: { line: 600, column: 9 } },
                '232': { start: { line: 596, column: 23 }, end: { line: 596, column: 24 } },
                '233': { start: { line: 598, column: 30 }, end: { line: 598, column: 63 } },
                '234': { start: { line: 599, column: 10 }, end: { line: 599, column: 78 } },
                '235': { start: { line: 603, column: 6 }, end: { line: 607, column: 8 } },
                '236': { start: { line: 611, column: 4 }, end: { line: 618, column: 6 } },
                '237': { start: { line: 619, column: 4 }, end: { line: 619, column: 66 } },
                '238': { start: { line: 620, column: 4 }, end: { line: 620, column: 14 } },
                '239': { start: { line: 624, column: 0 }, end: { line: 747, column: 2 } },
                '240': { start: { line: 625, column: 2 }, end: { line: 630, column: 3 } },
                '241': { start: { line: 626, column: 4 }, end: { line: 628, column: 6 } },
                '242': { start: { line: 629, column: 4 }, end: { line: 629, column: 11 } },
                '243': { start: { line: 631, column: 2 }, end: { line: 633, column: 3 } },
                '244': { start: { line: 632, column: 4 }, end: { line: 632, column: 11 } },
                '245': { start: { line: 635, column: 2 }, end: { line: 640, column: 3 } },
                '246': { start: { line: 636, column: 4 }, end: { line: 638, column: 6 } },
                '247': { start: { line: 639, column: 4 }, end: { line: 639, column: 13 } },
                '248': { start: { line: 642, column: 2 }, end: { line: 642, column: 11 } },
                '249': { start: { line: 645, column: 19 }, end: { line: 645, column: 33 } },
                '250': { start: { line: 646, column: 19 }, end: { line: 646, column: 32 } },
                '251': { start: { line: 648, column: 2 }, end: { line: 648, column: 25 } },
                '252': { start: { line: 649, column: 2 }, end: { line: 649, column: 36 } },
                '253': { start: { line: 652, column: 15 }, end: { line: 652, column: 34 } },
                '254': { start: { line: 653, column: 17 }, end: { line: 653, column: 41 } },
                '255': { start: { line: 654, column: 2 }, end: { line: 656, column: 3 } },
                '256': { start: { line: 655, column: 4 }, end: { line: 655, column: 61 } },
                '257': { start: { line: 659, column: 14 }, end: { line: 659, column: 63 } },
                '258': { start: { line: 660, column: 19 }, end: { line: 660, column: 33 } },
                '259': { start: { line: 661, column: 16 }, end: { line: 661, column: 42 } },
                '260': { start: { line: 662, column: 2 }, end: { line: 662, column: 34 } },
                '261': { start: { line: 663, column: 2 }, end: { line: 663, column: 30 } },
                '262': { start: { line: 666, column: 13 }, end: { line: 666, column: 20 } },
                '263': { start: { line: 667, column: 27 }, end: { line: 667, column: 51 } },
                '264': { start: { line: 668, column: 13 }, end: { line: 668, column: 34 } },
                '265': { start: { line: 669, column: 2 }, end: { line: 669, column: 12 } },
                '266': { start: { line: 670, column: 2 }, end: { line: 670, column: 18 } },
                '267': { start: { line: 672, column: 2 }, end: { line: 678, column: 3 } },
                '268': { start: { line: 674, column: 4 }, end: { line: 674, column: 71 } },
                '269': { start: { line: 675, column: 4 }, end: { line: 675, column: 72 } },
                '270': { start: { line: 676, column: 4 }, end: { line: 676, column: 77 } },
                '271': { start: { line: 677, column: 4 }, end: { line: 677, column: 64 } },
                '272': { start: { line: 679, column: 2 }, end: { line: 679, column: 43 } },
                '273': { start: { line: 681, column: 10 }, end: { line: 681, column: 45 } },
                '274': { start: { line: 682, column: 2 }, end: { line: 694, column: 3 } },
                '275': { start: { line: 684, column: 18 }, end: { line: 691, column: 6 } },
                '276': { start: { line: 685, column: 6 }, end: { line: 690, column: 7 } },
                '277': { start: { line: 685, column: 19 }, end: { line: 685, column: 20 } },
                '278': { start: { line: 686, column: 8 }, end: { line: 689, column: 9 } },
                '279': { start: { line: 686, column: 21 }, end: { line: 686, column: 22 } },
                '280': { start: { line: 687, column: 10 }, end: { line: 687, column: 53 } },
                '281': { start: { line: 688, column: 10 }, end: { line: 688, column: 30 } },
                '282': { start: { line: 692, column: 4 }, end: { line: 692, column: 41 } },
                '283': { start: { line: 693, column: 4 }, end: { line: 693, column: 42 } },
                '284': { start: { line: 697, column: 2 }, end: { line: 699, column: 3 } },
                '285': { start: { line: 698, column: 4 }, end: { line: 698, column: 31 } },
                '286': { start: { line: 700, column: 2 }, end: { line: 700, column: 59 } },
                '287': { start: { line: 703, column: 2 }, end: { line: 703, column: 53 } },
                '288': { start: { line: 705, column: 2 }, end: { line: 744, column: 3 } },
                '289': { start: { line: 706, column: 13 }, end: { line: 706, column: 14 } },
                '290': { start: { line: 707, column: 20 }, end: { line: 707, column: 24 } },
                '291': { start: { line: 709, column: 19 }, end: { line: 709, column: 44 } },
                '292': { start: { line: 711, column: 4 }, end: { line: 735, column: 5 } },
                '293': { start: { line: 713, column: 6 }, end: { line: 713, column: 66 } },
                '294': { start: { line: 713, column: 21 }, end: { line: 713, column: 66 } },
                '295': { start: { line: 715, column: 17 }, end: { line: 715, column: 45 } },
                '296': { start: { line: 716, column: 6 }, end: { line: 732, column: 7 } },
                '297': { start: { line: 717, column: 24 }, end: { line: 717, column: 34 } },
                '298': { start: { line: 718, column: 24 }, end: { line: 718, column: 34 } },
                '299': { start: { line: 719, column: 8 }, end: { line: 719, column: 71 } },
                '300': { start: { line: 720, column: 8 }, end: { line: 720, column: 77 } },
                '301': { start: { line: 721, column: 8 }, end: { line: 721, column: 70 } },
                '302': { start: { line: 722, column: 8 }, end: { line: 722, column: 77 } },
                '303': { start: { line: 723, column: 8 }, end: { line: 723, column: 70 } },
                '304': { start: { line: 724, column: 8 }, end: { line: 724, column: 53 } },
                '305': { start: { line: 725, column: 8 }, end: { line: 725, column: 51 } },
                '306': { start: { line: 726, column: 8 }, end: { line: 726, column: 42 } },
                '307': { start: { line: 728, column: 8 }, end: { line: 728, column: 26 } },
                '308': { start: { line: 731, column: 8 }, end: { line: 731, column: 68 } },
                '309': { start: { line: 733, column: 6 }, end: { line: 733, column: 31 } },
                '310': { start: { line: 734, column: 6 }, end: { line: 734, column: 24 } },
                '311': { start: { line: 738, column: 4 }, end: { line: 738, column: 22 } },
                '312': { start: { line: 740, column: 4 }, end: { line: 740, column: 30 } },
                '313': { start: { line: 741, column: 4 }, end: { line: 741, column: 29 } },
                '314': { start: { line: 743, column: 4 }, end: { line: 743, column: 12 } },
                '315': { start: { line: 746, column: 2 }, end: { line: 746, column: 11 } }
              },
              fnMap: {
                '0': {
                  name: '(anonymous_0)',
                  decl: { start: { line: 8, column: 47 }, end: { line: 8, column: 48 } },
                  loc: { start: { line: 8, column: 58 }, end: { line: 11, column: 1 } },
                  line: 8
                },
                '1': {
                  name: '(anonymous_1)',
                  decl: { start: { line: 13, column: 36 }, end: { line: 13, column: 37 } },
                  loc: { start: { line: 13, column: 48 }, end: { line: 19, column: 1 } },
                  line: 13
                },
                '2': {
                  name: 'ImageInfos',
                  decl: { start: { line: 47, column: 9 }, end: { line: 47, column: 19 } },
                  loc: { start: { line: 47, column: 35 }, end: { line: 113, column: 1 } },
                  line: 47
                },
                '3': {
                  name: '(anonymous_3)',
                  decl: { start: { line: 61, column: 19 }, end: { line: 61, column: 20 } },
                  loc: { start: { line: 61, column: 35 }, end: { line: 112, column: 3 } },
                  line: 61
                },
                '4': {
                  name: 'setPixel',
                  decl: { start: { line: 125, column: 9 }, end: { line: 125, column: 17 } },
                  loc: { start: { line: 125, column: 41 }, end: { line: 133, column: 1 } },
                  line: 125
                },
                '5': {
                  name: '(anonymous_5)',
                  decl: {
                    start: { line: 144, column: 17 },
                    end: { line: 144, column: 18 }
                  },
                  loc: { start: { line: 144, column: 32 }, end: { line: 622, column: 1 } },
                  line: 144
                },
                '6': {
                  name: '(anonymous_6)',
                  decl: {
                    start: { line: 167, column: 22 },
                    end: { line: 167, column: 23 }
                  },
                  loc: { start: { line: 167, column: 38 }, end: { line: 621, column: 3 } },
                  line: 167
                },
                '7': {
                  name: 'push',
                  decl: {
                    start: { line: 199, column: 13 },
                    end: { line: 199, column: 17 }
                  },
                  loc: { start: { line: 199, column: 29 }, end: { line: 234, column: 5 } },
                  line: 199
                },
                '8': {
                  name: 'minMax',
                  decl: {
                    start: { line: 211, column: 15 },
                    end: { line: 211, column: 21 }
                  },
                  loc: { start: { line: 211, column: 36 }, end: { line: 218, column: 7 } },
                  line: 211
                },
                '9': {
                  name: 'clamp',
                  decl: {
                    start: { line: 244, column: 13 },
                    end: { line: 244, column: 18 }
                  },
                  loc: { start: { line: 244, column: 32 }, end: { line: 248, column: 5 } },
                  line: 244
                },
                '10': {
                  name: 'byte',
                  decl: {
                    start: { line: 256, column: 13 },
                    end: { line: 256, column: 17 }
                  },
                  loc: { start: { line: 256, column: 21 }, end: { line: 258, column: 5 } },
                  line: 256
                },
                '11': {
                  name: 'Cubic',
                  decl: {
                    start: { line: 270, column: 13 },
                    end: { line: 270, column: 18 }
                  },
                  loc: { start: { line: 270, column: 35 }, end: { line: 386, column: 5 } },
                  line: 270
                },
                '12': {
                  name: '(anonymous_12)',
                  decl: {
                    start: { line: 283, column: 25 },
                    end: { line: 283, column: 26 }
                  },
                  loc: { start: { line: 283, column: 36 }, end: { line: 292, column: 7 } },
                  line: 283
                },
                '13': {
                  name: '(anonymous_13)',
                  decl: {
                    start: { line: 301, column: 23 },
                    end: { line: 301, column: 24 }
                  },
                  loc: { start: { line: 301, column: 34 }, end: { line: 308, column: 7 } },
                  line: 301
                },
                '14': {
                  name: '(anonymous_14)',
                  decl: {
                    start: { line: 319, column: 19 },
                    end: { line: 319, column: 20 }
                  },
                  loc: { start: { line: 319, column: 31 }, end: { line: 330, column: 7 } },
                  line: 319
                },
                '15': {
                  name: '(anonymous_15)',
                  decl: {
                    start: { line: 340, column: 30 },
                    end: { line: 340, column: 31 }
                  },
                  loc: { start: { line: 340, column: 41 }, end: { line: 385, column: 7 } },
                  line: 340
                },
                '16': {
                  name: 'cubicToQuadratics',
                  decl: {
                    start: { line: 403, column: 13 },
                    end: { line: 403, column: 30 }
                  },
                  loc: { start: { line: 403, column: 67 }, end: { line: 454, column: 5 } },
                  line: 403
                },
                '17': {
                  name: 'pushLine',
                  decl: {
                    start: { line: 465, column: 13 },
                    end: { line: 465, column: 21 }
                  },
                  loc: { start: { line: 465, column: 38 }, end: { line: 469, column: 5 } },
                  line: 465
                },
                '18': {
                  name: 'samePoint',
                  decl: {
                    start: { line: 481, column: 13 },
                    end: { line: 481, column: 22 }
                  },
                  loc: { start: { line: 481, column: 39 }, end: { line: 483, column: 5 } },
                  line: 481
                },
                '19': {
                  name: 'layout',
                  decl: {
                    start: { line: 567, column: 13 },
                    end: { line: 567, column: 19 }
                  },
                  loc: { start: { line: 567, column: 56 }, end: { line: 608, column: 5 } },
                  line: 567
                },
                '20': {
                  name: '(anonymous_20)',
                  decl: {
                    start: { line: 624, column: 38 },
                    end: { line: 624, column: 39 }
                  },
                  loc: { start: { line: 624, column: 68 }, end: { line: 747, column: 1 } },
                  line: 624
                },
                '21': {
                  name: '(anonymous_21)',
                  decl: {
                    start: { line: 684, column: 57 },
                    end: { line: 684, column: 58 }
                  },
                  loc: { start: { line: 684, column: 68 }, end: { line: 691, column: 5 } },
                  line: 684
                }
              },
              branchMap: {
                '0': {
                  loc: { start: { line: 14, column: 2 }, end: { line: 16, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 14, column: 2 }, end: { line: 16, column: 3 } },
                    { start: { line: 14, column: 2 }, end: { line: 16, column: 3 } }
                  ],
                  line: 14
                },
                '1': {
                  loc: { start: { line: 63, column: 4 }, end: { line: 64, column: 61 } },
                  type: 'if',
                  locations: [
                    { start: { line: 63, column: 4 }, end: { line: 64, column: 61 } },
                    { start: { line: 63, column: 4 }, end: { line: 64, column: 61 } }
                  ],
                  line: 63
                },
                '2': {
                  loc: { start: { line: 71, column: 6 }, end: { line: 76, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 71, column: 6 }, end: { line: 76, column: 7 } },
                    { start: { line: 71, column: 6 }, end: { line: 76, column: 7 } }
                  ],
                  line: 71
                },
                '3': {
                  loc: { start: { line: 79, column: 4 }, end: { line: 106, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 79, column: 4 }, end: { line: 106, column: 5 } },
                    { start: { line: 79, column: 4 }, end: { line: 106, column: 5 } }
                  ],
                  line: 79
                },
                '4': {
                  loc: { start: { line: 88, column: 8 }, end: { line: 93, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 88, column: 8 }, end: { line: 93, column: 9 } },
                    { start: { line: 88, column: 8 }, end: { line: 93, column: 9 } }
                  ],
                  line: 88
                },
                '5': {
                  loc: { start: { line: 95, column: 8 }, end: { line: 97, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 95, column: 8 }, end: { line: 97, column: 9 } },
                    { start: { line: 95, column: 8 }, end: { line: 97, column: 9 } }
                  ],
                  line: 95
                },
                '6': {
                  loc: { start: { line: 98, column: 8 }, end: { line: 101, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 98, column: 8 }, end: { line: 101, column: 9 } },
                    { start: { line: 98, column: 8 }, end: { line: 101, column: 9 } }
                  ],
                  line: 98
                },
                '7': {
                  loc: { start: { line: 170, column: 4 }, end: { line: 170, column: 22 } },
                  type: 'if',
                  locations: [
                    { start: { line: 170, column: 4 }, end: { line: 170, column: 22 } },
                    { start: { line: 170, column: 4 }, end: { line: 170, column: 22 } }
                  ],
                  line: 170
                },
                '8': {
                  loc: { start: { line: 180, column: 4 }, end: { line: 182, column: 5 } },
                  type: 'if',
                  locations: [
                    { start: { line: 180, column: 4 }, end: { line: 182, column: 5 } },
                    { start: { line: 180, column: 4 }, end: { line: 182, column: 5 } }
                  ],
                  line: 180
                },
                '9': {
                  loc: { start: { line: 180, column: 8 }, end: { line: 180, column: 53 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 180, column: 8 }, end: { line: 180, column: 20 } },
                    { start: { line: 180, column: 24 }, end: { line: 180, column: 37 } },
                    { start: { line: 180, column: 41 }, end: { line: 180, column: 53 } }
                  ],
                  line: 180
                },
                '10': {
                  loc: { start: { line: 214, column: 10 }, end: { line: 214, column: 31 } },
                  type: 'if',
                  locations: [
                    { start: { line: 214, column: 10 }, end: { line: 214, column: 31 } },
                    { start: { line: 214, column: 10 }, end: { line: 214, column: 31 } }
                  ],
                  line: 214
                },
                '11': {
                  loc: { start: { line: 215, column: 10 }, end: { line: 215, column: 31 } },
                  type: 'if',
                  locations: [
                    { start: { line: 215, column: 10 }, end: { line: 215, column: 31 } },
                    { start: { line: 215, column: 10 }, end: { line: 215, column: 31 } }
                  ],
                  line: 215
                },
                '12': {
                  loc: { start: { line: 245, column: 6 }, end: { line: 245, column: 30 } },
                  type: 'if',
                  locations: [
                    { start: { line: 245, column: 6 }, end: { line: 245, column: 30 } },
                    { start: { line: 245, column: 6 }, end: { line: 245, column: 30 } }
                  ],
                  line: 245
                },
                '13': {
                  loc: { start: { line: 246, column: 6 }, end: { line: 246, column: 30 } },
                  type: 'if',
                  locations: [
                    { start: { line: 246, column: 6 }, end: { line: 246, column: 30 } },
                    { start: { line: 246, column: 6 }, end: { line: 246, column: 30 } }
                  ],
                  line: 246
                },
                '14': {
                  loc: { start: { line: 352, column: 8 }, end: { line: 381, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 352, column: 8 }, end: { line: 381, column: 9 } },
                    { start: { line: 352, column: 8 }, end: { line: 381, column: 9 } }
                  ],
                  line: 352
                },
                '15': {
                  loc: { start: { line: 356, column: 10 }, end: { line: 380, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 356, column: 10 }, end: { line: 380, column: 11 } },
                    { start: { line: 356, column: 10 }, end: { line: 380, column: 11 } }
                  ],
                  line: 356
                },
                '16': {
                  loc: { start: { line: 357, column: 12 }, end: { line: 361, column: 13 } },
                  type: 'if',
                  locations: [
                    { start: { line: 357, column: 12 }, end: { line: 361, column: 13 } },
                    { start: { line: 357, column: 12 }, end: { line: 361, column: 13 } }
                  ],
                  line: 357
                },
                '17': {
                  loc: { start: { line: 368, column: 12 }, end: { line: 373, column: 13 } },
                  type: 'if',
                  locations: [
                    { start: { line: 368, column: 12 }, end: { line: 373, column: 13 } },
                    { start: { line: 368, column: 12 }, end: { line: 373, column: 13 } }
                  ],
                  line: 368
                },
                '18': {
                  loc: { start: { line: 368, column: 16 }, end: { line: 368, column: 32 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 368, column: 16 }, end: { line: 368, column: 22 } },
                    { start: { line: 368, column: 26 }, end: { line: 368, column: 32 } }
                  ],
                  line: 368
                },
                '19': {
                  loc: { start: { line: 376, column: 12 }, end: { line: 379, column: 13 } },
                  type: 'if',
                  locations: [
                    { start: { line: 376, column: 12 }, end: { line: 379, column: 13 } },
                    { start: { line: 376, column: 12 }, end: { line: 379, column: 13 } }
                  ],
                  line: 376
                },
                '20': {
                  loc: { start: { line: 376, column: 16 }, end: { line: 376, column: 32 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 376, column: 16 }, end: { line: 376, column: 22 } },
                    { start: { line: 376, column: 26 }, end: { line: 376, column: 32 } }
                  ],
                  line: 376
                },
                '21': {
                  loc: { start: { line: 427, column: 10 }, end: { line: 429, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 427, column: 10 }, end: { line: 429, column: 11 } },
                    { start: { line: 427, column: 10 }, end: { line: 429, column: 11 } }
                  ],
                  line: 427
                },
                '22': {
                  loc: { start: { line: 442, column: 8 }, end: { line: 445, column: 9 } },
                  type: 'if',
                  locations: [
                    { start: { line: 442, column: 8 }, end: { line: 445, column: 9 } },
                    { start: { line: 442, column: 8 }, end: { line: 445, column: 9 } }
                  ],
                  line: 442
                },
                '23': {
                  loc: { start: { line: 482, column: 13 }, end: { line: 482, column: 71 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 482, column: 13 }, end: { line: 482, column: 40 } },
                    { start: { line: 482, column: 44 }, end: { line: 482, column: 71 } }
                  ],
                  line: 482
                },
                '24': {
                  loc: { start: { line: 493, column: 6 }, end: { line: 493, column: 46 } },
                  type: 'if',
                  locations: [
                    { start: { line: 493, column: 6 }, end: { line: 493, column: 46 } },
                    { start: { line: 493, column: 6 }, end: { line: 493, column: 46 } }
                  ],
                  line: 493
                },
                '25': {
                  loc: { start: { line: 495, column: 6 }, end: { line: 540, column: 7 } },
                  type: 'switch',
                  locations: [
                    { start: { line: 496, column: 8 }, end: { line: 501, column: 9 } },
                    { start: { line: 502, column: 8 }, end: { line: 506, column: 9 } },
                    { start: { line: 507, column: 8 }, end: { line: 513, column: 9 } },
                    { start: { line: 514, column: 8 }, end: { line: 524, column: 9 } },
                    { start: { line: 525, column: 8 }, end: { line: 537, column: 9 } },
                    { start: { line: 538, column: 8 }, end: { line: 539, column: 63 } }
                  ],
                  line: 495
                },
                '26': {
                  loc: { start: { line: 516, column: 10 }, end: { line: 522, column: 11 } },
                  type: 'if',
                  locations: [
                    { start: { line: 516, column: 10 }, end: { line: 522, column: 11 } },
                    { start: { line: 516, column: 10 }, end: { line: 522, column: 11 } }
                  ],
                  line: 516
                },
                '27': {
                  loc: { start: { line: 625, column: 2 }, end: { line: 630, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 625, column: 2 }, end: { line: 630, column: 3 } },
                    { start: { line: 625, column: 2 }, end: { line: 630, column: 3 } }
                  ],
                  line: 625
                },
                '28': {
                  loc: { start: { line: 625, column: 6 }, end: { line: 625, column: 59 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 625, column: 6 }, end: { line: 625, column: 21 } },
                    { start: { line: 625, column: 25 }, end: { line: 625, column: 59 } }
                  ],
                  line: 625
                },
                '29': {
                  loc: { start: { line: 631, column: 2 }, end: { line: 633, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 631, column: 2 }, end: { line: 633, column: 3 } },
                    { start: { line: 631, column: 2 }, end: { line: 633, column: 3 } }
                  ],
                  line: 631
                },
                '30': {
                  loc: { start: { line: 631, column: 6 }, end: { line: 631, column: 32 } },
                  type: 'binary-expr',
                  locations: [
                    { start: { line: 631, column: 6 }, end: { line: 631, column: 15 } },
                    { start: { line: 631, column: 19 }, end: { line: 631, column: 32 } }
                  ],
                  line: 631
                },
                '31': {
                  loc: { start: { line: 635, column: 2 }, end: { line: 640, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 635, column: 2 }, end: { line: 640, column: 3 } },
                    { start: { line: 635, column: 2 }, end: { line: 640, column: 3 } }
                  ],
                  line: 635
                },
                '32': {
                  loc: { start: { line: 654, column: 2 }, end: { line: 656, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 654, column: 2 }, end: { line: 656, column: 3 } },
                    { start: { line: 654, column: 2 }, end: { line: 656, column: 3 } }
                  ],
                  line: 654
                },
                '33': {
                  loc: { start: { line: 672, column: 2 }, end: { line: 678, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 672, column: 2 }, end: { line: 678, column: 3 } },
                    { start: { line: 672, column: 2 }, end: { line: 678, column: 3 } }
                  ],
                  line: 672
                },
                '34': {
                  loc: { start: { line: 682, column: 2 }, end: { line: 694, column: 3 } },
                  type: 'if',
                  locations: [
                    { start: { line: 682, column: 2 }, end: { line: 694, column: 3 } },
                    { start: { line: 682, column: 2 }, end: { line: 694, column: 3 } }
                  ],
                  line: 682
                },
                '35': {
                  loc: { start: { line: 713, column: 6 }, end: { line: 713, column: 66 } },
                  type: 'if',
                  locations: [
                    { start: { line: 713, column: 6 }, end: { line: 713, column: 66 } },
                    { start: { line: 713, column: 6 }, end: { line: 713, column: 66 } }
                  ],
                  line: 713
                },
                '36': {
                  loc: { start: { line: 716, column: 6 }, end: { line: 732, column: 7 } },
                  type: 'if',
                  locations: [
                    { start: { line: 716, column: 6 }, end: { line: 732, column: 7 } },
                    { start: { line: 716, column: 6 }, end: { line: 732, column: 7 } }
                  ],
                  line: 716
                }
              },
              s: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0,
                '22': 0,
                '23': 0,
                '24': 0,
                '25': 0,
                '26': 0,
                '27': 0,
                '28': 0,
                '29': 0,
                '30': 0,
                '31': 0,
                '32': 0,
                '33': 0,
                '34': 0,
                '35': 0,
                '36': 0,
                '37': 0,
                '38': 0,
                '39': 0,
                '40': 0,
                '41': 0,
                '42': 0,
                '43': 0,
                '44': 0,
                '45': 0,
                '46': 0,
                '47': 0,
                '48': 0,
                '49': 0,
                '50': 0,
                '51': 0,
                '52': 0,
                '53': 0,
                '54': 0,
                '55': 0,
                '56': 0,
                '57': 0,
                '58': 0,
                '59': 0,
                '60': 0,
                '61': 0,
                '62': 0,
                '63': 0,
                '64': 0,
                '65': 0,
                '66': 0,
                '67': 0,
                '68': 0,
                '69': 0,
                '70': 0,
                '71': 0,
                '72': 0,
                '73': 0,
                '74': 0,
                '75': 0,
                '76': 0,
                '77': 0,
                '78': 0,
                '79': 0,
                '80': 0,
                '81': 0,
                '82': 0,
                '83': 0,
                '84': 0,
                '85': 0,
                '86': 0,
                '87': 0,
                '88': 0,
                '89': 0,
                '90': 0,
                '91': 0,
                '92': 0,
                '93': 0,
                '94': 0,
                '95': 0,
                '96': 0,
                '97': 0,
                '98': 0,
                '99': 0,
                '100': 0,
                '101': 0,
                '102': 0,
                '103': 0,
                '104': 0,
                '105': 0,
                '106': 0,
                '107': 0,
                '108': 0,
                '109': 0,
                '110': 0,
                '111': 0,
                '112': 0,
                '113': 0,
                '114': 0,
                '115': 0,
                '116': 0,
                '117': 0,
                '118': 0,
                '119': 0,
                '120': 0,
                '121': 0,
                '122': 0,
                '123': 0,
                '124': 0,
                '125': 0,
                '126': 0,
                '127': 0,
                '128': 0,
                '129': 0,
                '130': 0,
                '131': 0,
                '132': 0,
                '133': 0,
                '134': 0,
                '135': 0,
                '136': 0,
                '137': 0,
                '138': 0,
                '139': 0,
                '140': 0,
                '141': 0,
                '142': 0,
                '143': 0,
                '144': 0,
                '145': 0,
                '146': 0,
                '147': 0,
                '148': 0,
                '149': 0,
                '150': 0,
                '151': 0,
                '152': 0,
                '153': 0,
                '154': 0,
                '155': 0,
                '156': 0,
                '157': 0,
                '158': 0,
                '159': 0,
                '160': 0,
                '161': 0,
                '162': 0,
                '163': 0,
                '164': 0,
                '165': 0,
                '166': 0,
                '167': 0,
                '168': 0,
                '169': 0,
                '170': 0,
                '171': 0,
                '172': 0,
                '173': 0,
                '174': 0,
                '175': 0,
                '176': 0,
                '177': 0,
                '178': 0,
                '179': 0,
                '180': 0,
                '181': 0,
                '182': 0,
                '183': 0,
                '184': 0,
                '185': 0,
                '186': 0,
                '187': 0,
                '188': 0,
                '189': 0,
                '190': 0,
                '191': 0,
                '192': 0,
                '193': 0,
                '194': 0,
                '195': 0,
                '196': 0,
                '197': 0,
                '198': 0,
                '199': 0,
                '200': 0,
                '201': 0,
                '202': 0,
                '203': 0,
                '204': 0,
                '205': 0,
                '206': 0,
                '207': 0,
                '208': 0,
                '209': 0,
                '210': 0,
                '211': 0,
                '212': 0,
                '213': 0,
                '214': 0,
                '215': 0,
                '216': 0,
                '217': 0,
                '218': 0,
                '219': 0,
                '220': 0,
                '221': 0,
                '222': 0,
                '223': 0,
                '224': 0,
                '225': 0,
                '226': 0,
                '227': 0,
                '228': 0,
                '229': 0,
                '230': 0,
                '231': 0,
                '232': 0,
                '233': 0,
                '234': 0,
                '235': 0,
                '236': 0,
                '237': 0,
                '238': 0,
                '239': 0,
                '240': 0,
                '241': 0,
                '242': 0,
                '243': 0,
                '244': 0,
                '245': 0,
                '246': 0,
                '247': 0,
                '248': 0,
                '249': 0,
                '250': 0,
                '251': 0,
                '252': 0,
                '253': 0,
                '254': 0,
                '255': 0,
                '256': 0,
                '257': 0,
                '258': 0,
                '259': 0,
                '260': 0,
                '261': 0,
                '262': 0,
                '263': 0,
                '264': 0,
                '265': 0,
                '266': 0,
                '267': 0,
                '268': 0,
                '269': 0,
                '270': 0,
                '271': 0,
                '272': 0,
                '273': 0,
                '274': 0,
                '275': 0,
                '276': 0,
                '277': 0,
                '278': 0,
                '279': 0,
                '280': 0,
                '281': 0,
                '282': 0,
                '283': 0,
                '284': 0,
                '285': 0,
                '286': 0,
                '287': 0,
                '288': 0,
                '289': 0,
                '290': 0,
                '291': 0,
                '292': 0,
                '293': 0,
                '294': 0,
                '295': 0,
                '296': 0,
                '297': 0,
                '298': 0,
                '299': 0,
                '300': 0,
                '301': 0,
                '302': 0,
                '303': 0,
                '304': 0,
                '305': 0,
                '306': 0,
                '307': 0,
                '308': 0,
                '309': 0,
                '310': 0,
                '311': 0,
                '312': 0,
                '313': 0,
                '314': 0,
                '315': 0
              },
              f: {
                '0': 0,
                '1': 0,
                '2': 0,
                '3': 0,
                '4': 0,
                '5': 0,
                '6': 0,
                '7': 0,
                '8': 0,
                '9': 0,
                '10': 0,
                '11': 0,
                '12': 0,
                '13': 0,
                '14': 0,
                '15': 0,
                '16': 0,
                '17': 0,
                '18': 0,
                '19': 0,
                '20': 0,
                '21': 0
              },
              b: {
                '0': [0, 0],
                '1': [0, 0],
                '2': [0, 0],
                '3': [0, 0],
                '4': [0, 0],
                '5': [0, 0],
                '6': [0, 0],
                '7': [0, 0],
                '8': [0, 0],
                '9': [0, 0, 0],
                '10': [0, 0],
                '11': [0, 0],
                '12': [0, 0],
                '13': [0, 0],
                '14': [0, 0],
                '15': [0, 0],
                '16': [0, 0],
                '17': [0, 0],
                '18': [0, 0],
                '19': [0, 0],
                '20': [0, 0],
                '21': [0, 0],
                '22': [0, 0],
                '23': [0, 0],
                '24': [0, 0],
                '25': [0, 0, 0, 0, 0, 0],
                '26': [0, 0],
                '27': [0, 0],
                '28': [0, 0],
                '29': [0, 0],
                '30': [0, 0],
                '31': [0, 0],
                '32': [0, 0],
                '33': [0, 0],
                '34': [0, 0],
                '35': [0, 0],
                '36': [0, 0]
              },
              _coverageSchema: '43e27e138ebf9cfc5966b082cf9a028302ed4184',
              hash: '693d360cbaaae63d53ec353bfe6ad3482a9d379d'
            };
            var coverage = global[gcv] || (global[gcv] = {});
            if (coverage[path] && coverage[path].hash === hash) {
              return coverage[path];
            }
            return (coverage[path] = coverageData);
          })();
          _dereq_('core-js/modules/es.symbol');
          _dereq_('core-js/modules/es.symbol.description');
          _dereq_('core-js/modules/es.symbol.iterator');
          _dereq_('core-js/modules/es.array.iterator');
          _dereq_('core-js/modules/es.object.to-string');
          _dereq_('core-js/modules/es.regexp.exec');
          _dereq_('core-js/modules/es.string.iterator');
          _dereq_('core-js/modules/es.string.split');
          _dereq_('core-js/modules/es.string.sub');
          _dereq_('core-js/modules/web.dom-collections.iterator');
          var _main = _interopRequireDefault(_dereq_('../core/main'));
          var constants = _interopRequireWildcard(_dereq_('../core/constants'));
          _dereq_('./p5.Shader');
          _dereq_('./p5.RendererGL.Retained');
          function _getRequireWildcardCache() {
            if (typeof WeakMap !== 'function') return null;
            var cache = new WeakMap();
            _getRequireWildcardCache = function _getRequireWildcardCache() {
              return cache;
            };
            return cache;
          }
          function _interopRequireWildcard(obj) {
            if (obj && obj.__esModule) {
              return obj;
            }
            if (obj === null || (_typeof(obj) !== 'object' && typeof obj !== 'function')) {
              return { default: obj };
            }
            var cache = _getRequireWildcardCache();
            if (cache && cache.has(obj)) {
              return cache.get(obj);
            }
            var newObj = {};
            var hasPropertyDescriptor =
              Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var key in obj) {
              if (Object.prototype.hasOwnProperty.call(obj, key)) {
                var desc = hasPropertyDescriptor
                  ? Object.getOwnPropertyDescriptor(obj, key)
                  : null;
                if (desc && (desc.get || desc.set)) {
                  Object.defineProperty(newObj, key, desc);
                } else {
                  newObj[key] = obj[key];
                }
              }
            }
            newObj.default = obj;
            if (cache) {
              cache.set(obj, newObj);
            }
            return newObj;
          }
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }
          cov_ipne3zcz1.s[0]++;

          // Text/Typography
          // @TODO:
          _main.default.RendererGL.prototype._applyTextProperties = function() {
            //@TODO finish implementation
            //console.error('text commands not yet implemented in webgl');
            cov_ipne3zcz1.f[0]++;
          };
          cov_ipne3zcz1.s[1]++;

          _main.default.RendererGL.prototype.textWidth = function(s) {
            cov_ipne3zcz1.f[1]++;
            cov_ipne3zcz1.s[2]++;
            if (this._isOpenType()) {
              cov_ipne3zcz1.b[0][0]++;
              cov_ipne3zcz1.s[3]++;
              return this._textFont._textWidth(s, this._textSize);
            } else {
              cov_ipne3zcz1.b[0][1]++;
            }
            cov_ipne3zcz1.s[4]++;

            return 0; // TODO: error
          };

          // rendering constants

          // the number of rows/columns dividing each glyph
          var charGridWidth = (cov_ipne3zcz1.s[5]++, 9);
          var charGridHeight = (cov_ipne3zcz1.s[6]++, charGridWidth);

          // size of the image holding the bezier stroke info
          var strokeImageWidth = (cov_ipne3zcz1.s[7]++, 64);
          var strokeImageHeight = (cov_ipne3zcz1.s[8]++, 64);

          // size of the image holding the stroke indices for each row/col
          var gridImageWidth = (cov_ipne3zcz1.s[9]++, 64);
          var gridImageHeight = (cov_ipne3zcz1.s[10]++, 64);

          // size of the image holding the offset/length of each row/col stripe
          var cellImageWidth = (cov_ipne3zcz1.s[11]++, 64);
          var cellImageHeight = (cov_ipne3zcz1.s[12]++, 64);

          /**
           * @private
           * @class ImageInfos
           * @param {Integer} width
           * @param {Integer} height
           *
           * the ImageInfos class holds a list of ImageDatas of a given size.
           */
          function ImageInfos(width, height) {
            cov_ipne3zcz1.f[2]++;
            cov_ipne3zcz1.s[13]++;
            this.width = width;
            cov_ipne3zcz1.s[14]++;
            this.height = height;
            cov_ipne3zcz1.s[15]++;
            this.infos = []; // the list of images

            /**
             *
             * @method findImage
             * @param {Integer} space
             * @return {Object} contains the ImageData, and pixel index into that
             *                  ImageData where the free space was allocated.
             *
             * finds free space of a given size in the ImageData list
             */ cov_ipne3zcz1.s[16]++;
            this.findImage = function(space) {
              cov_ipne3zcz1.f[3]++;
              var imageSize = (cov_ipne3zcz1.s[17]++, this.width * this.height);
              cov_ipne3zcz1.s[18]++;
              if (space > imageSize) {
                cov_ipne3zcz1.b[1][0]++;
                cov_ipne3zcz1.s[19]++;
                throw new Error('font is too complex to render in 3D');
              } else {
                cov_ipne3zcz1.b[1][1]++;
              }

              // search through the list of images, looking for one with
              // anough unused space.
              var imageInfo, imageData;
              cov_ipne3zcz1.s[20]++;
              for (var ii = (cov_ipne3zcz1.s[21]++, this.infos.length - 1); ii >= 0; --ii) {
                var imageInfoTest = (cov_ipne3zcz1.s[22]++, this.infos[ii]);
                cov_ipne3zcz1.s[23]++;
                if (imageInfoTest.index + space < imageSize) {
                  cov_ipne3zcz1.b[2][0]++;
                  cov_ipne3zcz1.s[24]++;
                  // found one
                  imageInfo = imageInfoTest;
                  cov_ipne3zcz1.s[25]++;
                  imageData = imageInfoTest.imageData;
                  cov_ipne3zcz1.s[26]++;
                  break;
                } else {
                  cov_ipne3zcz1.b[2][1]++;
                }
              }
              cov_ipne3zcz1.s[27]++;

              if (!imageInfo) {
                cov_ipne3zcz1.b[3][0]++;
                cov_ipne3zcz1.s[28]++;
                try {
                  cov_ipne3zcz1.s[29]++;
                  // create a new image
                  imageData = new ImageData(this.width, this.height);
                } catch (err) {
                  // for browsers that don't support ImageData constructors (ie IE11)
                  // create an ImageData using the old method
                  var canvas = (cov_ipne3zcz1.s[30]++,
                  document.getElementsByTagName('canvas')[0]);
                  var created = (cov_ipne3zcz1.s[31]++, !canvas);
                  cov_ipne3zcz1.s[32]++;
                  if (!canvas) {
                    cov_ipne3zcz1.b[4][0]++;
                    cov_ipne3zcz1.s[33]++;
                    // create a temporary canvas
                    canvas = document.createElement('canvas');
                    cov_ipne3zcz1.s[34]++;
                    canvas.style.display = 'none';
                    cov_ipne3zcz1.s[35]++;
                    document.body.appendChild(canvas);
                  } else {
                    cov_ipne3zcz1.b[4][1]++;
                  }
                  var ctx = (cov_ipne3zcz1.s[36]++, canvas.getContext('2d'));
                  cov_ipne3zcz1.s[37]++;
                  if (ctx) {
                    cov_ipne3zcz1.b[5][0]++;
                    cov_ipne3zcz1.s[38]++;
                    imageData = ctx.createImageData(this.width, this.height);
                  } else {
                    cov_ipne3zcz1.b[5][1]++;
                  }
                  cov_ipne3zcz1.s[39]++;
                  if (created) {
                    cov_ipne3zcz1.b[6][0]++;
                    cov_ipne3zcz1.s[40]++;
                    // distroy the temporary canvas, if necessary
                    document.body.removeChild(canvas);
                  } else {
                    cov_ipne3zcz1.b[6][1]++;
                  }
                }
                // construct & dd the new image info
                cov_ipne3zcz1.s[41]++;
                imageInfo = { index: 0, imageData: imageData };
                cov_ipne3zcz1.s[42]++;
                this.infos.push(imageInfo);
              } else {
                cov_ipne3zcz1.b[3][1]++;
              }

              var index = (cov_ipne3zcz1.s[43]++, imageInfo.index);
              cov_ipne3zcz1.s[44]++;
              imageInfo.index += space; // move to the start of the next image
              cov_ipne3zcz1.s[45]++;
              imageData._dirty = true;
              cov_ipne3zcz1.s[46]++;
              return { imageData: imageData, index: index };
            };
          }

          /**
           * @function setPixel
           * @param {Object} imageInfo
           * @param {Number} r
           * @param {Number} g
           * @param {Number} b
           * @param {Number} a
           *
           * writes the next pixel into an indexed ImageData
           */
          function setPixel(imageInfo, r, g, b, a) {
            cov_ipne3zcz1.f[4]++;
            var imageData = (cov_ipne3zcz1.s[47]++, imageInfo.imageData);
            var pixels = (cov_ipne3zcz1.s[48]++, imageData.data);
            var index = (cov_ipne3zcz1.s[49]++, imageInfo.index++ * 4);
            cov_ipne3zcz1.s[50]++;
            pixels[index++] = r;
            cov_ipne3zcz1.s[51]++;
            pixels[index++] = g;
            cov_ipne3zcz1.s[52]++;
            pixels[index++] = b;
            cov_ipne3zcz1.s[53]++;
            pixels[index++] = a;
          }

          var SQRT3 = (cov_ipne3zcz1.s[54]++, Math.sqrt(3));

          /**
           * @private
           * @class FontInfo
           * @param {Object} font an opentype.js font object
           *
           * contains cached images and glyph information for an opentype font
           */ cov_ipne3zcz1.s[55]++;
          var FontInfo = function FontInfo(font) {
            cov_ipne3zcz1.f[5]++;
            cov_ipne3zcz1.s[56]++;
            this.font = font;
            // the bezier curve coordinates
            cov_ipne3zcz1.s[57]++;
            this.strokeImageInfos = new ImageInfos(strokeImageWidth, strokeImageHeight);
            // lists of curve indices for each row/column slice
            cov_ipne3zcz1.s[58]++;
            this.colDimImageInfos = new ImageInfos(gridImageWidth, gridImageHeight);
            cov_ipne3zcz1.s[59]++;
            this.rowDimImageInfos = new ImageInfos(gridImageWidth, gridImageHeight);
            // the offset & length of each row/col slice in the glyph
            cov_ipne3zcz1.s[60]++;
            this.colCellImageInfos = new ImageInfos(cellImageWidth, cellImageHeight);
            cov_ipne3zcz1.s[61]++;
            this.rowCellImageInfos = new ImageInfos(cellImageWidth, cellImageHeight);

            // the cached information for each glyph
            cov_ipne3zcz1.s[62]++;
            this.glyphInfos = {};

            /**
             * @method getGlyphInfo
             * @param {Glyph} glyph the x positions of points in the curve
             * @returns {Object} the glyphInfo for that glyph
             *
             * calculates rendering info for a glyph, including the curve information,
             * row & column stripes compiled into textures.
             */ cov_ipne3zcz1.s[63]++;

            this.getGlyphInfo = function(glyph) {
              cov_ipne3zcz1.f[6]++;
              // check the cache
              var gi = (cov_ipne3zcz1.s[64]++, this.glyphInfos[glyph.index]);
              cov_ipne3zcz1.s[65]++;
              if (gi) {
                cov_ipne3zcz1.b[7][0]++;
                cov_ipne3zcz1.s[66]++;
                return gi;
              } else {
                cov_ipne3zcz1.b[7][1]++;
              }

              // get the bounding box of the glyph from opentype.js
              var bb = (cov_ipne3zcz1.s[67]++, glyph.getBoundingBox());
              var xMin = (cov_ipne3zcz1.s[68]++, bb.x1);
              var yMin = (cov_ipne3zcz1.s[69]++, bb.y1);
              var gWidth = (cov_ipne3zcz1.s[70]++, bb.x2 - xMin);
              var gHeight = (cov_ipne3zcz1.s[71]++, bb.y2 - yMin);
              var cmds = (cov_ipne3zcz1.s[72]++, glyph.path.commands);
              // don't bother rendering invisible glyphs
              cov_ipne3zcz1.s[73]++;
              if (
                (cov_ipne3zcz1.b[9][0]++, gWidth === 0) ||
                (cov_ipne3zcz1.b[9][1]++, gHeight === 0) ||
                (cov_ipne3zcz1.b[9][2]++, !cmds.length)
              ) {
                cov_ipne3zcz1.b[8][0]++;
                cov_ipne3zcz1.s[74]++;
                return (this.glyphInfos[glyph.index] = {});
              } else {
                cov_ipne3zcz1.b[8][1]++;
              }

              var i;
              var strokes = (cov_ipne3zcz1.s[75]++, []); // the strokes in this glyph
              var rows = (cov_ipne3zcz1.s[76]++, []); // the indices of strokes in each row
              var cols = (cov_ipne3zcz1.s[77]++, []); // the indices of strokes in each column
              cov_ipne3zcz1.s[78]++;
              for (i = charGridWidth - 1; i >= 0; --i) {
                cov_ipne3zcz1.s[79]++;
                cols.push([]);
              }
              cov_ipne3zcz1.s[80]++;
              for (i = charGridHeight - 1; i >= 0; --i) {
                cov_ipne3zcz1.s[81]++;
                rows.push([]);
              }

              /**
               * @function push
               * @param {Number[]} xs the x positions of points in the curve
               * @param {Number[]} ys the y positions of points in the curve
               * @param {Object} v    the curve information
               *
               * adds a curve to the rows & columns that it intersects with
               */
              function push(xs, ys, v) {
                cov_ipne3zcz1.f[7]++;
                var index = (cov_ipne3zcz1.s[82]++, strokes.length); // the index of this stroke
                cov_ipne3zcz1.s[83]++;
                strokes.push(v); // add this stroke to the list

                /**
                 * @function minMax
                 * @param {Number[]} rg the list of values to compare
                 * @param {Number} min the initial minimum value
                 * @param {Number} max the initial maximum value
                 *
                 * find the minimum & maximum value in a list of values
                 */
                function minMax(rg, min, max) {
                  cov_ipne3zcz1.f[8]++;
                  cov_ipne3zcz1.s[84]++;
                  for (var _i = (cov_ipne3zcz1.s[85]++, rg.length); _i-- > 0; ) {
                    var _v = (cov_ipne3zcz1.s[86]++, rg[_i]);
                    cov_ipne3zcz1.s[87]++;
                    if (min > _v) {
                      cov_ipne3zcz1.b[10][0]++;
                      cov_ipne3zcz1.s[88]++;
                      min = _v;
                    } else {
                      cov_ipne3zcz1.b[10][1]++;
                    }
                    cov_ipne3zcz1.s[89]++;
                    if (max < _v) {
                      cov_ipne3zcz1.b[11][0]++;
                      cov_ipne3zcz1.s[90]++;
                      max = _v;
                    } else {
                      cov_ipne3zcz1.b[11][1]++;
                    }
                  }
                  cov_ipne3zcz1.s[91]++;
                  return { min: min, max: max };
                }

                // loop through the rows & columns that the curve intersects
                // adding the curve to those slices
                var mmX = (cov_ipne3zcz1.s[92]++, minMax(xs, 1, 0));
                var ixMin = (cov_ipne3zcz1.s[93]++,
                Math.max(Math.floor(mmX.min * charGridWidth), 0));
                var ixMax = (cov_ipne3zcz1.s[94]++,
                Math.min(Math.ceil(mmX.max * charGridWidth), charGridWidth));
                cov_ipne3zcz1.s[95]++;
                for (var iCol = (cov_ipne3zcz1.s[96]++, ixMin); iCol < ixMax; ++iCol) {
                  cov_ipne3zcz1.s[97]++;
                  cols[iCol].push(index);
                }

                var mmY = (cov_ipne3zcz1.s[98]++, minMax(ys, 1, 0));
                var iyMin = (cov_ipne3zcz1.s[99]++,
                Math.max(Math.floor(mmY.min * charGridHeight), 0));
                var iyMax = (cov_ipne3zcz1.s[100]++,
                Math.min(Math.ceil(mmY.max * charGridHeight), charGridHeight));
                cov_ipne3zcz1.s[101]++;

                for (var iRow = (cov_ipne3zcz1.s[102]++, iyMin); iRow < iyMax; ++iRow) {
                  cov_ipne3zcz1.s[103]++;
                  rows[iRow].push(index);
                }
              }

              /**
               * @function clamp
               * @param {Number} v the value to clamp
               * @param {Number} min the minimum value
               * @param {Number} max the maxmimum value
               *
               * clamps a value between a minimum & maximum value
               */
              function clamp(v, min, max) {
                cov_ipne3zcz1.f[9]++;
                cov_ipne3zcz1.s[104]++;
                if (v < min) {
                  cov_ipne3zcz1.b[12][0]++;
                  cov_ipne3zcz1.s[105]++;
                  return min;
                } else {
                  cov_ipne3zcz1.b[12][1]++;
                }
                cov_ipne3zcz1.s[106]++;
                if (v > max) {
                  cov_ipne3zcz1.b[13][0]++;
                  cov_ipne3zcz1.s[107]++;
                  return max;
                } else {
                  cov_ipne3zcz1.b[13][1]++;
                }
                cov_ipne3zcz1.s[108]++;
                return v;
              }

              /**
               * @function byte
               * @param {Number} v the value to scale
               *
               * converts a floating-point number in the range 0-1 to a byte 0-255
               */
              function byte(v) {
                cov_ipne3zcz1.f[10]++;
                cov_ipne3zcz1.s[109]++;
                return clamp(255 * v, 0, 255);
              }

              /**
               * @private
               * @class Cubic
               * @param {Number} p0 the start point of the curve
               * @param {Number} c0 the first control point
               * @param {Number} c1 the second control point
               * @param {Number} p1 the end point
               *
               * a cubic curve
               */
              function Cubic(p0, c0, c1, p1) {
                cov_ipne3zcz1.f[11]++;
                cov_ipne3zcz1.s[110]++;
                this.p0 = p0;
                cov_ipne3zcz1.s[111]++;
                this.c0 = c0;
                cov_ipne3zcz1.s[112]++;
                this.c1 = c1;
                cov_ipne3zcz1.s[113]++;
                this.p1 = p1;

                /**
                 * @method toQuadratic
                 * @return {Object} the quadratic approximation
                 *
                 * converts the cubic to a quadtratic approximation by
                 * picking an appropriate quadratic control point
                 */ cov_ipne3zcz1.s[114]++;
                this.toQuadratic = function() {
                  cov_ipne3zcz1.f[12]++;
                  cov_ipne3zcz1.s[115]++;
                  return {
                    x: this.p0.x,
                    y: this.p0.y,
                    x1: this.p1.x,
                    y1: this.p1.y,
                    cx: ((this.c0.x + this.c1.x) * 3 - (this.p0.x + this.p1.x)) / 4,
                    cy: ((this.c0.y + this.c1.y) * 3 - (this.p0.y + this.p1.y)) / 4
                  };
                };

                /**
                 * @method quadError
                 * @return {Number} the error
                 *
                 * calculates the magnitude of error of this curve's
                 * quadratic approximation.
                 */ cov_ipne3zcz1.s[116]++;
                this.quadError = function() {
                  cov_ipne3zcz1.f[13]++;
                  cov_ipne3zcz1.s[117]++;
                  return (
                    _main.default.Vector.sub(
                      _main.default.Vector.sub(this.p1, this.p0),
                      _main.default.Vector.mult(
                        _main.default.Vector.sub(this.c1, this.c0),
                        3
                      )
                    ).mag() / 2
                  );
                };

                /**
                 * @method split
                 * @param {Number} t the value (0-1) at which to split
                 * @return {Cubic} the second part of the curve
                 *
                 * splits the cubic into two parts at a point 't' along the curve.
                 * this cubic keeps its start point and its end point becomes the
                 * point at 't'. the 'end half is returned.
                 */ cov_ipne3zcz1.s[118]++;
                this.split = function(t) {
                  cov_ipne3zcz1.f[14]++;
                  var m1 = (cov_ipne3zcz1.s[119]++,
                  _main.default.Vector.lerp(this.p0, this.c0, t));
                  var m2 = (cov_ipne3zcz1.s[120]++,
                  _main.default.Vector.lerp(this.c0, this.c1, t));
                  var mm1 = (cov_ipne3zcz1.s[121]++, _main.default.Vector.lerp(m1, m2, t));
                  cov_ipne3zcz1.s[122]++;

                  this.c1 = _main.default.Vector.lerp(this.c1, this.p1, t);
                  cov_ipne3zcz1.s[123]++;
                  this.c0 = _main.default.Vector.lerp(m2, this.c1, t);
                  var pt = (cov_ipne3zcz1.s[124]++,
                  _main.default.Vector.lerp(mm1, this.c0, t));
                  var part1 = (cov_ipne3zcz1.s[125]++, new Cubic(this.p0, m1, mm1, pt));
                  cov_ipne3zcz1.s[126]++;
                  this.p0 = pt;
                  cov_ipne3zcz1.s[127]++;
                  return part1;
                };

                /**
                 * @method splitInflections
                 * @return {Cubic[]} the non-inflecting pieces of this cubic
                 *
                 * returns an array containing 0, 1 or 2 cubics split resulting
                 * from splitting this cubic at its inflection points.
                 * this cubic is (potentially) altered and returned in the list.
                 */ cov_ipne3zcz1.s[128]++;
                this.splitInflections = function() {
                  cov_ipne3zcz1.f[15]++;
                  var a = (cov_ipne3zcz1.s[129]++,
                  _main.default.Vector.sub(this.c0, this.p0));
                  var b = (cov_ipne3zcz1.s[130]++,
                  _main.default.Vector.sub(_main.default.Vector.sub(this.c1, this.c0), a));
                  var c = (cov_ipne3zcz1.s[131]++,
                  _main.default.Vector.sub(
                    _main.default.Vector.sub(_main.default.Vector.sub(this.p1, this.c1), a),
                    _main.default.Vector.mult(b, 2)
                  ));

                  var cubics = (cov_ipne3zcz1.s[132]++, []);

                  // find the derivative coefficients
                  var A = (cov_ipne3zcz1.s[133]++, b.x * c.y - b.y * c.x);
                  cov_ipne3zcz1.s[134]++;
                  if (A !== 0) {
                    cov_ipne3zcz1.b[14][0]++;
                    var B = (cov_ipne3zcz1.s[135]++, a.x * c.y - a.y * c.x);
                    var C = (cov_ipne3zcz1.s[136]++, a.x * b.y - a.y * b.x);
                    var disc = (cov_ipne3zcz1.s[137]++, B * B - 4 * A * C);
                    cov_ipne3zcz1.s[138]++;
                    if (disc >= 0) {
                      cov_ipne3zcz1.b[15][0]++;
                      cov_ipne3zcz1.s[139]++;
                      if (A < 0) {
                        cov_ipne3zcz1.b[16][0]++;
                        cov_ipne3zcz1.s[140]++;
                        A = -A;
                        cov_ipne3zcz1.s[141]++;
                        B = -B;
                        cov_ipne3zcz1.s[142]++;
                        C = -C;
                      } else {
                        cov_ipne3zcz1.b[16][1]++;
                      }

                      var Q = (cov_ipne3zcz1.s[143]++, Math.sqrt(disc));
                      var t0 = (cov_ipne3zcz1.s[144]++, (-B - Q) / (2 * A)); // the first inflection point
                      var t1 = (cov_ipne3zcz1.s[145]++, (-B + Q) / (2 * A)); // the second inflection point

                      // test if the first inflection point lies on the curve
                      cov_ipne3zcz1.s[146]++;
                      if (
                        (cov_ipne3zcz1.b[18][0]++, t0 > 0) &&
                        (cov_ipne3zcz1.b[18][1]++, t0 < 1)
                      ) {
                        cov_ipne3zcz1.b[17][0]++;
                        cov_ipne3zcz1.s[147]++;
                        // split at the first inflection point
                        cubics.push(this.split(t0));
                        // scale t2 into the second part
                        cov_ipne3zcz1.s[148]++;
                        t1 = 1 - (1 - t1) / (1 - t0);
                      } else {
                        cov_ipne3zcz1.b[17][1]++;
                      }

                      // test if the second inflection point lies on the curve
                      cov_ipne3zcz1.s[149]++;
                      if (
                        (cov_ipne3zcz1.b[20][0]++, t1 > 0) &&
                        (cov_ipne3zcz1.b[20][1]++, t1 < 1)
                      ) {
                        cov_ipne3zcz1.b[19][0]++;
                        cov_ipne3zcz1.s[150]++;
                        // split at the second inflection point
                        cubics.push(this.split(t1));
                      } else {
                        cov_ipne3zcz1.b[19][1]++;
                      }
                    } else {
                      cov_ipne3zcz1.b[15][1]++;
                    }
                  } else {
                    cov_ipne3zcz1.b[14][1]++;
                  }
                  cov_ipne3zcz1.s[151]++;

                  cubics.push(this);
                  cov_ipne3zcz1.s[152]++;
                  return cubics;
                };
              }

              /**
               * @function cubicToQuadratics
               * @param {Number} x0
               * @param {Number} y0
               * @param {Number} cx0
               * @param {Number} cy0
               * @param {Number} cx1
               * @param {Number} cy1
               * @param {Number} x1
               * @param {Number} y1
               * @returns {Cubic[]} an array of cubics whose quadratic approximations
               *                    closely match the civen cubic.
               *
               * converts a cubic curve to a list of quadratics.
               */
              function cubicToQuadratics(x0, y0, cx0, cy0, cx1, cy1, x1, y1) {
                cov_ipne3zcz1.f[16]++;
                // create the Cubic object and split it at its inflections
                var cubics = (cov_ipne3zcz1.s[153]++,
                new Cubic(
                  new _main.default.Vector(x0, y0),
                  new _main.default.Vector(cx0, cy0),
                  new _main.default.Vector(cx1, cy1),
                  new _main.default.Vector(x1, y1)
                ).splitInflections());

                var qs = (cov_ipne3zcz1.s[154]++, []); // the final list of quadratics
                var precision = (cov_ipne3zcz1.s[155]++, 30 / SQRT3);

                // for each of the non-inflected pieces of the original cubic
                cov_ipne3zcz1.s[156]++;
                var _iteratorNormalCompletion = true;
                var _didIteratorError = false;
                var _iteratorError = undefined;
                try {
                  for (
                    var _iterator = cubics[Symbol.iterator](), _step;
                    !(_iteratorNormalCompletion = (_step = _iterator.next()).done);
                    _iteratorNormalCompletion = true
                  ) {
                    var cubic = _step.value;
                    // the cubic is iteratively split in 3 pieces:
                    // the first piece is accumulated in 'qs', the result.
                    // the last piece is accumulated in 'tail', temporarily.
                    // the middle piece is repeatedly split again, while necessary.
                    var tail = (cov_ipne3zcz1.s[157]++, []);

                    var t3 = void 0;
                    cov_ipne3zcz1.s[158]++;
                    for (;;) {
                      cov_ipne3zcz1.s[159]++;
                      // calculate this cubic's precision
                      t3 = precision / cubic.quadError();
                      cov_ipne3zcz1.s[160]++;
                      if (t3 >= 0.5 * 0.5 * 0.5) {
                        cov_ipne3zcz1.b[21][0]++;
                        cov_ipne3zcz1.s[161]++;
                        break; // not too bad, we're done
                      } else {
                        cov_ipne3zcz1.b[21][1]++;
                      }

                      // find a split point based on the error
                      var t = (cov_ipne3zcz1.s[162]++, Math.pow(t3, 1.0 / 3.0));
                      // split the cubic in 3
                      var start = (cov_ipne3zcz1.s[163]++, cubic.split(t));
                      var middle = (cov_ipne3zcz1.s[164]++, cubic.split(1 - t / (1 - t)));
                      cov_ipne3zcz1.s[165]++;

                      qs.push(start); // the first part
                      cov_ipne3zcz1.s[166]++;
                      tail.push(cubic); // the last part
                      cov_ipne3zcz1.s[167]++;
                      cubic = middle; // iterate on the middle piece
                    }
                    cov_ipne3zcz1.s[168]++;

                    if (t3 < 1) {
                      cov_ipne3zcz1.b[22][0]++;
                      cov_ipne3zcz1.s[169]++;
                      // a little excess error, split the middle in two
                      qs.push(cubic.split(0.5));
                    } else {
                      cov_ipne3zcz1.b[22][1]++;
                    }
                    // add the middle piece to the result
                    cov_ipne3zcz1.s[170]++;
                    qs.push(cubic);

                    // finally add the tail, reversed, onto the result
                    cov_ipne3zcz1.s[171]++;
                    Array.prototype.push.apply(qs, tail.reverse());
                  }
                } catch (err) {
                  _didIteratorError = true;
                  _iteratorError = err;
                } finally {
                  try {
                    if (!_iteratorNormalCompletion && _iterator.return != null) {
                      _iterator.return();
                    }
                  } finally {
                    if (_didIteratorError) {
                      throw _iteratorError;
                    }
                  }
                }
                cov_ipne3zcz1.s[172]++;

                return qs;
              }

              /**
               * @function pushLine
               * @param {Number} x0
               * @param {Number} y0
               * @param {Number} x1
               * @param {Number} y1
               *
               * add a straight line to the row/col grid of a glyph
               */
              function pushLine(x0, y0, x1, y1) {
                cov_ipne3zcz1.f[17]++;
                var mx = (cov_ipne3zcz1.s[173]++, (x0 + x1) / 2);
                var my = (cov_ipne3zcz1.s[174]++, (y0 + y1) / 2);
                cov_ipne3zcz1.s[175]++;
                push([x0, x1], [y0, y1], { x: x0, y: y0, cx: mx, cy: my });
              }

              /**
               * @function samePoint
               * @param {Number} x0
               * @param {Number} y0
               * @param {Number} x1
               * @param {Number} y1
               * @return {Boolean} true if the two points are sufficiently close
               *
               * tests if two points are close enough to be considered the same
               */
              function samePoint(x0, y0, x1, y1) {
                cov_ipne3zcz1.f[18]++;
                cov_ipne3zcz1.s[176]++;
                return (
                  (cov_ipne3zcz1.b[23][0]++, Math.abs(x1 - x0) < 0.00001) &&
                  (cov_ipne3zcz1.b[23][1]++, Math.abs(y1 - y0) < 0.00001)
                );
              }

              var x0, y0, xs, ys;
              cov_ipne3zcz1.s[177]++;
              var _iteratorNormalCompletion2 = true;
              var _didIteratorError2 = false;
              var _iteratorError2 = undefined;
              try {
                for (
                  var _iterator2 = cmds[Symbol.iterator](), _step2;
                  !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done);
                  _iteratorNormalCompletion2 = true
                ) {
                  var cmd = _step2.value;
                  // scale the coordinates to the range 0-1
                  var x1 = (cov_ipne3zcz1.s[178]++, (cmd.x - xMin) / gWidth);
                  var y1 = (cov_ipne3zcz1.s[179]++, (cmd.y - yMin) / gHeight);

                  // don't bother if this point is the same as the last
                  cov_ipne3zcz1.s[180]++;
                  if (samePoint(x0, y0, x1, y1)) {
                    cov_ipne3zcz1.b[24][0]++;
                    cov_ipne3zcz1.s[181]++;
                    continue;
                  } else {
                    cov_ipne3zcz1.b[24][1]++;
                  }
                  cov_ipne3zcz1.s[182]++;

                  switch (cmd.type) {
                    case 'M':
                      cov_ipne3zcz1.b[25][0]++;
                      {
                        cov_ipne3zcz1.s[183]++;
                        // move
                        xs = x1;
                        cov_ipne3zcz1.s[184]++;
                        ys = y1;
                        cov_ipne3zcz1.s[185]++;
                        break;
                      }
                    case 'L':
                      cov_ipne3zcz1.b[25][1]++;
                      {
                        cov_ipne3zcz1.s[186]++;
                        // line
                        pushLine(x0, y0, x1, y1);
                        cov_ipne3zcz1.s[187]++;
                        break;
                      }
                    case 'Q':
                      cov_ipne3zcz1.b[25][2]++;
                      {
                        // quadratic
                        var cx = (cov_ipne3zcz1.s[188]++, (cmd.x1 - xMin) / gWidth);
                        var cy = (cov_ipne3zcz1.s[189]++, (cmd.y1 - yMin) / gHeight);
                        cov_ipne3zcz1.s[190]++;
                        push([x0, x1, cx], [y0, y1, cy], { x: x0, y: y0, cx: cx, cy: cy });
                        cov_ipne3zcz1.s[191]++;
                        break;
                      }
                    case 'Z':
                      cov_ipne3zcz1.b[25][3]++;
                      {
                        cov_ipne3zcz1.s[192]++;
                        // end
                        if (!samePoint(x0, y0, xs, ys)) {
                          cov_ipne3zcz1.b[26][0]++;
                          cov_ipne3zcz1.s[193]++;
                          // add an extra line closing the loop, if necessary
                          pushLine(x0, y0, xs, ys);
                          cov_ipne3zcz1.s[194]++;
                          strokes.push({ x: xs, y: ys });
                        } else {
                          cov_ipne3zcz1.b[26][1]++;
                          cov_ipne3zcz1.s[195]++;
                          strokes.push({ x: x0, y: y0 });
                        }
                        cov_ipne3zcz1.s[196]++;
                        break;
                      }
                    case 'C':
                      cov_ipne3zcz1.b[25][4]++;
                      {
                        // cubic
                        var cx1 = (cov_ipne3zcz1.s[197]++, (cmd.x1 - xMin) / gWidth);
                        var cy1 = (cov_ipne3zcz1.s[198]++, (cmd.y1 - yMin) / gHeight);
                        var cx2 = (cov_ipne3zcz1.s[199]++, (cmd.x2 - xMin) / gWidth);
                        var cy2 = (cov_ipne3zcz1.s[200]++, (cmd.y2 - yMin) / gHeight);
                        var qs = (cov_ipne3zcz1.s[201]++,
                        cubicToQuadratics(x0, y0, cx1, cy1, cx2, cy2, x1, y1));
                        cov_ipne3zcz1.s[202]++;
                        for (var iq = (cov_ipne3zcz1.s[203]++, 0); iq < qs.length; iq++) {
                          var q = (cov_ipne3zcz1.s[204]++, qs[iq].toQuadratic());
                          cov_ipne3zcz1.s[205]++;
                          push([q.x, q.x1, q.cx], [q.y, q.y1, q.cy], q);
                        }
                        cov_ipne3zcz1.s[206]++;
                        break;
                      }
                    default:
                      cov_ipne3zcz1.b[25][5]++;
                      cov_ipne3zcz1.s[207]++;
                      throw new Error('unknown command type: '.concat(cmd.type));
                  }
                  cov_ipne3zcz1.s[208]++;

                  x0 = x1;
                  cov_ipne3zcz1.s[209]++;
                  y0 = y1;
                }

                // allocate space for the strokes
              } catch (err) {
                _didIteratorError2 = true;
                _iteratorError2 = err;
              } finally {
                try {
                  if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
                    _iterator2.return();
                  }
                } finally {
                  if (_didIteratorError2) {
                    throw _iteratorError2;
                  }
                }
              }
              var strokeCount = (cov_ipne3zcz1.s[210]++, strokes.length);
              var strokeImageInfo = (cov_ipne3zcz1.s[211]++,
              this.strokeImageInfos.findImage(strokeCount));
              var strokeOffset = (cov_ipne3zcz1.s[212]++, strokeImageInfo.index);

              // fill the stroke image
              cov_ipne3zcz1.s[213]++;
              for (var il = (cov_ipne3zcz1.s[214]++, 0); il < strokeCount; ++il) {
                var s = (cov_ipne3zcz1.s[215]++, strokes[il]);
                cov_ipne3zcz1.s[216]++;
                setPixel(strokeImageInfo, byte(s.x), byte(s.y), byte(s.cx), byte(s.cy));
              }

              /**
               * @function layout
               * @param {Number[][]} dim
               * @param {ImageInfo[]} dimImageInfos
               * @param {ImageInfo[]} cellImageInfos
               * @return {Object}
               *
               * lays out the curves in a dimension (row or col) into two
               * images, one for the indices of the curves themselves, and
               * one containing the offset and length of those index spans.
               */
              function layout(dim, dimImageInfos, cellImageInfos) {
                cov_ipne3zcz1.f[19]++;
                var dimLength = (cov_ipne3zcz1.s[217]++, dim.length); // the number of slices in this dimension
                var dimImageInfo = (cov_ipne3zcz1.s[218]++,
                dimImageInfos.findImage(dimLength));
                var dimOffset = (cov_ipne3zcz1.s[219]++, dimImageInfo.index);
                // calculate the total number of stroke indices in this dimension
                var totalStrokes = (cov_ipne3zcz1.s[220]++, 0);
                cov_ipne3zcz1.s[221]++;
                for (var id = (cov_ipne3zcz1.s[222]++, 0); id < dimLength; ++id) {
                  cov_ipne3zcz1.s[223]++;
                  totalStrokes += dim[id].length;
                }

                // allocate space for the stroke indices
                var cellImageInfo = (cov_ipne3zcz1.s[224]++,
                cellImageInfos.findImage(totalStrokes));

                // for each slice in the glyph
                cov_ipne3zcz1.s[225]++;
                for (var _i2 = (cov_ipne3zcz1.s[226]++, 0); _i2 < dimLength; ++_i2) {
                  var strokeIndices = (cov_ipne3zcz1.s[227]++, dim[_i2]);
                  var _strokeCount = (cov_ipne3zcz1.s[228]++, strokeIndices.length);
                  var cellLineIndex = (cov_ipne3zcz1.s[229]++, cellImageInfo.index);

                  // write the offset and count into the glyph slice image
                  cov_ipne3zcz1.s[230]++;
                  setPixel(
                    dimImageInfo,
                    cellLineIndex >> 7,
                    cellLineIndex & 0x7f,
                    _strokeCount >> 7,
                    _strokeCount & 0x7f
                  );

                  // for each stroke index in that slice
                  cov_ipne3zcz1.s[231]++;
                  for (var iil = (cov_ipne3zcz1.s[232]++, 0); iil < _strokeCount; ++iil) {
                    // write the stroke index into the slice's image
                    var strokeIndex = (cov_ipne3zcz1.s[233]++,
                    strokeIndices[iil] + strokeOffset);
                    cov_ipne3zcz1.s[234]++;
                    setPixel(cellImageInfo, strokeIndex >> 7, strokeIndex & 0x7f, 0, 0);
                  }
                }
                cov_ipne3zcz1.s[235]++;

                return {
                  cellImageInfo: cellImageInfo,
                  dimOffset: dimOffset,
                  dimImageInfo: dimImageInfo
                };
              }

              // initialize the info for this glyph
              cov_ipne3zcz1.s[236]++;
              gi = this.glyphInfos[glyph.index] = {
                glyph: glyph,
                uGlyphRect: [bb.x1, -bb.y1, bb.x2, -bb.y2],
                strokeImageInfo: strokeImageInfo,
                strokes: strokes,
                colInfo: layout(cols, this.colDimImageInfos, this.colCellImageInfos),
                rowInfo: layout(rows, this.rowDimImageInfos, this.rowCellImageInfos)
              };
              cov_ipne3zcz1.s[237]++;

              gi.uGridOffset = [gi.colInfo.dimOffset, gi.rowInfo.dimOffset];
              cov_ipne3zcz1.s[238]++;
              return gi;
            };
          };
          cov_ipne3zcz1.s[239]++;

          _main.default.RendererGL.prototype._renderText = function(p, line, x, y, maxY) {
            cov_ipne3zcz1.f[20]++;
            cov_ipne3zcz1.s[240]++;
            if (
              (cov_ipne3zcz1.b[28][0]++, !this._textFont) ||
              (cov_ipne3zcz1.b[28][1]++, typeof this._textFont === 'string')
            ) {
              cov_ipne3zcz1.b[27][0]++;
              cov_ipne3zcz1.s[241]++;
              console.log(
                'WEBGL: you must load and set a font before drawing text. See `loadFont` and `textFont` for more details.'
              );
              cov_ipne3zcz1.s[242]++;

              return;
            } else {
              cov_ipne3zcz1.b[27][1]++;
            }
            cov_ipne3zcz1.s[243]++;
            if (
              (cov_ipne3zcz1.b[30][0]++, y >= maxY) ||
              (cov_ipne3zcz1.b[30][1]++, !this._doFill)
            ) {
              cov_ipne3zcz1.b[29][0]++;
              cov_ipne3zcz1.s[244]++;
              return; // don't render lines beyond our maxY position
            } else {
              cov_ipne3zcz1.b[29][1]++;
            }
            cov_ipne3zcz1.s[245]++;

            if (!this._isOpenType()) {
              cov_ipne3zcz1.b[31][0]++;
              cov_ipne3zcz1.s[246]++;
              console.log(
                'WEBGL: only Opentype (.otf) and Truetype (.ttf) fonts are supported'
              );
              cov_ipne3zcz1.s[247]++;

              return p;
            } else {
              cov_ipne3zcz1.b[31][1]++;
            }
            cov_ipne3zcz1.s[248]++;

            p.push(); // fix to #803

            // remember this state, so it can be restored later
            var doStroke = (cov_ipne3zcz1.s[249]++, this._doStroke);
            var drawMode = (cov_ipne3zcz1.s[250]++, this.drawMode);
            cov_ipne3zcz1.s[251]++;

            this._doStroke = false;
            cov_ipne3zcz1.s[252]++;
            this.drawMode = constants.TEXTURE;

            // get the cached FontInfo object
            var font = (cov_ipne3zcz1.s[253]++, this._textFont.font);
            var fontInfo = (cov_ipne3zcz1.s[254]++, this._textFont._fontInfo);
            cov_ipne3zcz1.s[255]++;
            if (!fontInfo) {
              cov_ipne3zcz1.b[32][0]++;
              cov_ipne3zcz1.s[256]++;
              fontInfo = this._textFont._fontInfo = new FontInfo(font);
            } else {
              cov_ipne3zcz1.b[32][1]++;
            }

            // calculate the alignment and move/scale the view accordingly
            var pos = (cov_ipne3zcz1.s[257]++,
            this._textFont._handleAlignment(this, line, x, y));
            var fontSize = (cov_ipne3zcz1.s[258]++, this._textSize);
            var scale = (cov_ipne3zcz1.s[259]++, fontSize / font.unitsPerEm);
            cov_ipne3zcz1.s[260]++;
            this.translate(pos.x, pos.y, 0);
            cov_ipne3zcz1.s[261]++;
            this.scale(scale, scale, 1);

            // initialize the font shader
            var gl = (cov_ipne3zcz1.s[262]++, this.GL);
            var initializeShader = (cov_ipne3zcz1.s[263]++, !this._defaultFontShader);
            var sh = (cov_ipne3zcz1.s[264]++, this._getFontShader());
            cov_ipne3zcz1.s[265]++;
            sh.init();
            cov_ipne3zcz1.s[266]++;
            sh.bindShader(); // first time around, bind the shader fully
            cov_ipne3zcz1.s[267]++;
            if (initializeShader) {
              cov_ipne3zcz1.b[33][0]++;
              cov_ipne3zcz1.s[268]++;
              // these are constants, really. just initialize them one-time.
              sh.setUniform('uGridImageSize', [gridImageWidth, gridImageHeight]);
              cov_ipne3zcz1.s[269]++;
              sh.setUniform('uCellsImageSize', [cellImageWidth, cellImageHeight]);
              cov_ipne3zcz1.s[270]++;
              sh.setUniform('uStrokeImageSize', [strokeImageWidth, strokeImageHeight]);
              cov_ipne3zcz1.s[271]++;
              sh.setUniform('uGridSize', [charGridWidth, charGridHeight]);
            } else {
              cov_ipne3zcz1.b[33][1]++;
            }
            cov_ipne3zcz1.s[272]++;
            this._applyColorBlend(this.curFillColor);

            var g = (cov_ipne3zcz1.s[273]++, this.retainedMode.geometry['glyph']);
            cov_ipne3zcz1.s[274]++;
            if (!g) {
              cov_ipne3zcz1.b[34][0]++;
              // create the geometry for rendering a quad
              var geom = (cov_ipne3zcz1.s[275]++,
              (this._textGeom = new _main.default.Geometry(1, 1, function() {
                cov_ipne3zcz1.f[21]++;
                cov_ipne3zcz1.s[276]++;
                for (var i = (cov_ipne3zcz1.s[277]++, 0); i <= 1; i++) {
                  cov_ipne3zcz1.s[278]++;
                  for (var j = (cov_ipne3zcz1.s[279]++, 0); j <= 1; j++) {
                    cov_ipne3zcz1.s[280]++;
                    this.vertices.push(new _main.default.Vector(j, i, 0));
                    cov_ipne3zcz1.s[281]++;
                    this.uvs.push(j, i);
                  }
                }
              })));
              cov_ipne3zcz1.s[282]++;
              geom.computeFaces().computeNormals();
              cov_ipne3zcz1.s[283]++;
              g = this.createBuffers('glyph', geom);
            } else {
              cov_ipne3zcz1.b[34][1]++;
            }

            // bind the shader buffers
            cov_ipne3zcz1.s[284]++;
            var _iteratorNormalCompletion3 = true;
            var _didIteratorError3 = false;
            var _iteratorError3 = undefined;
            try {
              for (
                var _iterator3 = this.retainedMode.buffers.text[Symbol.iterator](), _step3;
                !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done);
                _iteratorNormalCompletion3 = true
              ) {
                var buff = _step3.value;
                cov_ipne3zcz1.s[285]++;
                buff._prepareBuffer(g, sh);
              }
            } catch (err) {
              _didIteratorError3 = true;
              _iteratorError3 = err;
            } finally {
              try {
                if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
                  _iterator3.return();
                }
              } finally {
                if (_didIteratorError3) {
                  throw _iteratorError3;
                }
              }
            }
            cov_ipne3zcz1.s[286]++;
            this._bindBuffer(g.indexBuffer, gl.ELEMENT_ARRAY_BUFFER);

            // this will have to do for now...
            cov_ipne3zcz1.s[287]++;
            sh.setUniform('uMaterialColor', this.curFillColor);
            cov_ipne3zcz1.s[288]++;

            try {
              var dx = (cov_ipne3zcz1.s[289]++, 0); // the x position in the line
              var glyphPrev = (cov_ipne3zcz1.s[290]++, null); // the previous glyph, used for kerning
              // fetch the glyphs in the line of text
              var glyphs = (cov_ipne3zcz1.s[291]++, font.stringToGlyphs(line));
              cov_ipne3zcz1.s[292]++;
              var _iteratorNormalCompletion4 = true;
              var _didIteratorError4 = false;
              var _iteratorError4 = undefined;
              try {
                for (
                  var _iterator4 = glyphs[Symbol.iterator](), _step4;
                  !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done);
                  _iteratorNormalCompletion4 = true
                ) {
                  var glyph = _step4.value;
                  cov_ipne3zcz1.s[293]++;
                  // kern
                  if (glyphPrev) {
                    cov_ipne3zcz1.b[35][0]++;
                    cov_ipne3zcz1.s[294]++;
                    dx += font.getKerningValue(glyphPrev, glyph);
                  } else {
                    cov_ipne3zcz1.b[35][1]++;
                  }

                  var gi = (cov_ipne3zcz1.s[295]++, fontInfo.getGlyphInfo(glyph));
                  cov_ipne3zcz1.s[296]++;
                  if (gi.uGlyphRect) {
                    cov_ipne3zcz1.b[36][0]++;
                    var rowInfo = (cov_ipne3zcz1.s[297]++, gi.rowInfo);
                    var colInfo = (cov_ipne3zcz1.s[298]++, gi.colInfo);
                    cov_ipne3zcz1.s[299]++;
                    sh.setUniform('uSamplerStrokes', gi.strokeImageInfo.imageData);
                    cov_ipne3zcz1.s[300]++;
                    sh.setUniform('uSamplerRowStrokes', rowInfo.cellImageInfo.imageData);
                    cov_ipne3zcz1.s[301]++;
                    sh.setUniform('uSamplerRows', rowInfo.dimImageInfo.imageData);
                    cov_ipne3zcz1.s[302]++;
                    sh.setUniform('uSamplerColStrokes', colInfo.cellImageInfo.imageData);
                    cov_ipne3zcz1.s[303]++;
                    sh.setUniform('uSamplerCols', colInfo.dimImageInfo.imageData);
                    cov_ipne3zcz1.s[304]++;
                    sh.setUniform('uGridOffset', gi.uGridOffset);
                    cov_ipne3zcz1.s[305]++;
                    sh.setUniform('uGlyphRect', gi.uGlyphRect);
                    cov_ipne3zcz1.s[306]++;
                    sh.setUniform('uGlyphOffset', dx);
                    cov_ipne3zcz1.s[307]++;

                    sh.bindTextures(); // afterwards, only textures need updating

                    // draw it
                    cov_ipne3zcz1.s[308]++;
                    gl.drawElements(gl.TRIANGLES, 6, this.GL.UNSIGNED_SHORT, 0);
                  } else {
                    cov_ipne3zcz1.b[36][1]++;
                  }
                  cov_ipne3zcz1.s[309]++;
                  dx += glyph.advanceWidth;
                  cov_ipne3zcz1.s[310]++;
                  glyphPrev = glyph;
                }
              } catch (err) {
                _didIteratorError4 = true;
                _iteratorError4 = err;
              } finally {
                try {
                  if (!_iteratorNormalCompletion4 && _iterator4.return != null) {
                    _iterator4.return();
                  }
                } finally {
                  if (_didIteratorError4) {
                    throw _iteratorError4;
                  }
                }
              }
            } finally {
              cov_ipne3zcz1.s[311]++;
              // clean up
              sh.unbindShader();
              cov_ipne3zcz1.s[312]++;

              this._doStroke = doStroke;
              cov_ipne3zcz1.s[313]++;
              this.drawMode = drawMode;
              cov_ipne3zcz1.s[314]++;

              p.pop();
            }
            cov_ipne3zcz1.s[315]++;

            return p;
          };
        },
        {
          '../core/constants': 272,
          '../core/main': 283,
          './p5.RendererGL.Retained': 336,
          './p5.Shader': 338,
          'core-js/modules/es.array.iterator': 174,
          'core-js/modules/es.object.to-string': 192,
          'core-js/modules/es.regexp.exec': 196,
          'core-js/modules/es.string.iterator': 201,
          'core-js/modules/es.string.split': 206,
          'core-js/modules/es.string.sub': 207,
          'core-js/modules/es.symbol': 211,
          'core-js/modules/es.symbol.description': 209,
          'core-js/modules/es.symbol.iterator': 210,
          'core-js/modules/web.dom-collections.iterator': 244
        }
      ],
      341: [
        function(_dereq_, module, exports) {
          module.exports = {
            fes: {
              autoplay:
                "The media that tried to play (with '{{src}}') wasn't allowed to by this browser, most likely due to the browser's autoplay policy. Check out {{link}} for more information about why.",
              checkUserDefinedFns:
                "It seems that you may have accidentally written {{name}} instead of {{actualName}}.\n\nPlease correct it if it's not intentional.",
              fileLoadError: {
                bytes:
                  'It looks like there was a problem loading your file. {{suggestion}}',
                font: 'It looks like there was a problem loading your font. {{suggestion}}',
                gif:
                  'There was some trouble loading your GIF. Make sure that your GIF is using 87a or 89a encoding.',
                image:
                  'It looks like there was a problem loading your image. {{suggestion}}',
                json:
                  'It looks like there was a problem loading your JSON file. {{suggestion}}',
                large:
                  "If your large file isn't fetched successfully, we recommend splitting the file into smaller segments and fetching those.",
                strings:
                  'It looks like there was a problem loading your text file. {{suggestion}}',
                suggestion:
                  'Try checking if the file path ({{filePath}}) is correct, hosting the file online, or running a local server. (More info at {{link}})',
                table:
                  'It looks like there was a problem loading your table file. {{suggestion}}',
                xml:
                  'It looks like there was a problem loading your XML file. {{suggestion}}'
              },
              friendlyParamError: {
                type_EMPTY_VAR:
                  '{{func}}() was expecting {{formatType}} for the {{position}} parameter, received an empty variable instead. {{location}}\n\nIf not intentional, this is often a problem with scope: {{link}}',
                type_TOO_FEW_ARGUMENTS:
                  '{{func}}() was expecting at least {{minParams}} arguments, but received only {{argCount}}. {{location}}',
                type_TOO_MANY_ARGUMENTS:
                  '{{func}}() was expecting no more than {{maxParams}} arguments, but received {{argCount}}. {{location}}',
                type_WRONG_TYPE:
                  '{{func}}() was expecting {{formatType}} for the {{position}} parameter, received {{argType}} instead. {{location}}'
              },
              globalErrors: {
                reference: {
                  notDefined:
                    'There\'s an error due to "{{symbol}}" not being defined in the current scope {{location}}.\n\nIf you have defined it in your code, you should check its scope, spelling, and letter-casing (JavaScript is case-sensitive). For more:\n{{url1}}\n{{url2}}'
                },
                stackSubseq:
                  '▶️ Called from line {{line}} in "{{func}}" in {{file}} ({{location}})\n\n',
                stackTop:
                  '▶️ Error at line {{line}} in "{{func}}" in {{file}} ({{location}})\n\n',
                syntax: {
                  invalidToken:
                    "There's a syntax error due to a symbol that JavaScript doesn't recognize or didn't expect at its place.\nFor more: {{url}}",
                  unexpectedToken:
                    "There's a syntax error due to a symbol that wasn't expected at its place.\nUsually this is due to a typo. Check the line number in the error below for anything missing/extra.\nFor more: {{url}}"
                },
                type: {
                  notfunc:
                    'There\'s an error as "{{symbol}}" could not be called as a function {{location}}.\nCheck the spelling, letter-casing (JavaScript is case-sensitive) and its type.\nFor more: {{url}}',
                  notfuncObj:
                    'There\'s an error as "{{symbol}}" could not be called as a function {{location}}.\nVerify whether "{{obj}}" has "{{symbol}}" in it and check the spelling, letter-casing (JavaScript is case-sensitive) and its type.\nFor more: {{url}}'
                }
              },
              libraryError:
                'An error with message "{{error}}" occured inside the p5js library when {{func}} was called {{location}}\n\nIf not stated otherwise, it might be an issue with the arguments passed to {{func}}.',
              location: '(on line {{line}} in {{file}} [{{location}}])',
              misspelling:
                'It seems that you may have accidentally written "{{name}}" instead of "{{actualName}}" {{location}}.\n\nPlease correct it to {{actualName}} if you wish to use the {{type}} from p5.js',
              misspelling_plural:
                'It seems that you may have accidentally written "{{name}}" {{location}}.\n\nYou may have meant one of the following:\n{{suggestions}}',
              misusedTopLevel:
                "Did you just try to use p5.js's {{symbolName}} {{symbolType}}? If so, you may want to move it into your sketch's setup() function.\n\nFor more details, see: {{link}}",
              positions: {
                p_1: 'first',
                p_10: 'tenth',
                p_11: 'eleventh',
                p_12: 'twelfth',
                p_2: 'second',
                p_3: 'third',
                p_4: 'fourth',
                p_5: 'fifth',
                p_6: 'sixth',
                p_7: 'seventh',
                p_8: 'eighth',
                p_9: 'ninth'
              },
              pre: '\n🌸 p5.js says: {{message}}',
              welcome:
                'Welcome! This is your friendly debugger. To turn me off, switch to using p5.min.js.',
              wrongPreload:
                'An error with message "{{error}}" occured inside the p5js library when "{{func}}" was called {{location}}.\n\nIf not stated otherwise, it might be due to "{{func}}" being called from preload. Nothing besides load calls (loadImage, loadJSON, loadFont, loadStrings, etc.) should be inside the preload function.'
            }
          };
        },
        {}
      ],
      342: [
        function(_dereq_, module, exports) {
          'use strict';
          Object.defineProperty(exports, '__esModule', { value: true });
          exports.languages = exports.default = void 0;
          var _translation = _interopRequireDefault(_dereq_('./en/translation'));
          function _interopRequireDefault(obj) {
            return obj && obj.__esModule ? obj : { default: obj };
          }

          // Only one language is imported above. This is intentional as other languages
          // will be hosted online and then downloaded whenever needed

          /**
           * Here, we define a default/fallback language which we can use without internet.
           * You won't have to change this when adding a new language.
           *
           * `translation` is the namespace we are using for our initial set of strings
           */ var _default = {
            en: {
              translation: _translation.default
            }
          };

          /**
           * This is a list of languages that we have added so far.
           * If you have just added a new language (yay!), add its key to the list below
           * (`en` is english, `es` es español). Also add its export to
           * dev.js, which is another file in this folder.
           */ exports.default = _default;
          var languages = ['en', 'es'];
          exports.languages = languages;
        },
        { './en/translation': 341 }
      ]
    },
    {},
    [267]
  )(267);
});
