Index: trip-planner-front/node_modules/critters/dist/critters.js.map
===================================================================
--- trip-planner-front/node_modules/critters/dist/critters.js.map	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
+++ trip-planner-front/node_modules/critters/dist/critters.js.map	(revision 6a3a178323fd905112b5392bd9d3cb83b66ef2d3)
@@ -0,0 +1,1 @@
+{"version":3,"file":"critters.js","sources":["../node_modules/domelementtype/index.js","../node_modules/dom-serializer/node_modules/domelementtype/lib/index.js","../node_modules/entities/lib/decode_codepoint.js","../node_modules/entities/lib/decode.js","../node_modules/entities/lib/encode.js","../node_modules/entities/lib/index.js","../node_modules/dom-serializer/index.js","../node_modules/css-select/node_modules/domutils/lib/stringify.js","../node_modules/css-select/node_modules/domutils/lib/traversal.js","../node_modules/css-select/node_modules/domutils/lib/manipulation.js","../node_modules/css-select/node_modules/domutils/lib/querying.js","../node_modules/css-select/node_modules/domutils/lib/legacy.js","../node_modules/css-select/node_modules/domutils/lib/helpers.js","../node_modules/css-select/node_modules/domutils/index.js","../node_modules/nth-check/parse.js","../node_modules/boolbase/index.js","../node_modules/nth-check/compile.js","../node_modules/nth-check/index.js","../node_modules/css-select/lib/attributes.js","../node_modules/css-select/lib/pseudos.js","../node_modules/css-what/index.js","../node_modules/css-select/lib/general.js","../node_modules/css-select/lib/sort.js","../node_modules/css-select/lib/compile.js","../node_modules/css-select/index.js","../src/dom.js","../src/css.js","../src/util.js","../src/index.js"],"sourcesContent":["//Types of elements found in the DOM\nmodule.exports = {\n\tText: \"text\", //Text\n\tDirective: \"directive\", //<? ... ?>\n\tComment: \"comment\", //<!-- ... -->\n\tScript: \"script\", //<script> tags\n\tStyle: \"style\", //<style> tags\n\tTag: \"tag\", //Any tag\n\tCDATA: \"cdata\", //<![CDATA[ ... ]]>\n\tDoctype: \"doctype\",\n\n\tisTag: function(elem){\n\t\treturn elem.type === \"tag\" || elem.type === \"script\" || elem.type === \"style\";\n\t}\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Tests whether an element is a tag or not.\n *\n * @param elem Element to test\n */\nfunction isTag(elem) {\n    return (elem.type === \"tag\" /* Tag */ ||\n        elem.type === \"script\" /* Script */ ||\n        elem.type === \"style\" /* Style */);\n}\nexports.isTag = isTag;\n// Exports for backwards compatibility\nexports.Text = \"text\" /* Text */; //Text\nexports.Directive = \"directive\" /* Directive */; //<? ... ?>\nexports.Comment = \"comment\" /* Comment */; //<!-- ... -->\nexports.Script = \"script\" /* Script */; //<script> tags\nexports.Style = \"style\" /* Style */; //<style> tags\nexports.Tag = \"tag\" /* Tag */; //Any tag\nexports.CDATA = \"cdata\" /* CDATA */; //<![CDATA[ ... ]]>\nexports.Doctype = \"doctype\" /* Doctype */;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar decode_json_1 = __importDefault(require(\"./maps/decode.json\"));\n// modified version of https://github.com/mathiasbynens/he/blob/master/src/he.js#L94-L119\nfunction decodeCodePoint(codePoint) {\n    if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) {\n        return \"\\uFFFD\";\n    }\n    if (codePoint in decode_json_1.default) {\n        codePoint = decode_json_1.default[codePoint];\n    }\n    var output = \"\";\n    if (codePoint > 0xffff) {\n        codePoint -= 0x10000;\n        output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800);\n        codePoint = 0xdc00 | (codePoint & 0x3ff);\n    }\n    output += String.fromCharCode(codePoint);\n    return output;\n}\nexports.default = decodeCodePoint;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodeHTML = exports.decodeHTMLStrict = exports.decodeXML = void 0;\nvar entities_json_1 = __importDefault(require(\"./maps/entities.json\"));\nvar legacy_json_1 = __importDefault(require(\"./maps/legacy.json\"));\nvar xml_json_1 = __importDefault(require(\"./maps/xml.json\"));\nvar decode_codepoint_1 = __importDefault(require(\"./decode_codepoint\"));\nexports.decodeXML = getStrictDecoder(xml_json_1.default);\nexports.decodeHTMLStrict = getStrictDecoder(entities_json_1.default);\nfunction getStrictDecoder(map) {\n    var keys = Object.keys(map).join(\"|\");\n    var replace = getReplacer(map);\n    keys += \"|#[xX][\\\\da-fA-F]+|#\\\\d+\";\n    var re = new RegExp(\"&(?:\" + keys + \");\", \"g\");\n    return function (str) { return String(str).replace(re, replace); };\n}\nvar sorter = function (a, b) { return (a < b ? 1 : -1); };\nexports.decodeHTML = (function () {\n    var legacy = Object.keys(legacy_json_1.default).sort(sorter);\n    var keys = Object.keys(entities_json_1.default).sort(sorter);\n    for (var i = 0, j = 0; i < keys.length; i++) {\n        if (legacy[j] === keys[i]) {\n            keys[i] += \";?\";\n            j++;\n        }\n        else {\n            keys[i] += \";\";\n        }\n    }\n    var re = new RegExp(\"&(?:\" + keys.join(\"|\") + \"|#[xX][\\\\da-fA-F]+;?|#\\\\d+;?)\", \"g\");\n    var replace = getReplacer(entities_json_1.default);\n    function replacer(str) {\n        if (str.substr(-1) !== \";\")\n            str += \";\";\n        return replace(str);\n    }\n    //TODO consider creating a merged map\n    return function (str) { return String(str).replace(re, replacer); };\n})();\nfunction getReplacer(map) {\n    return function replace(str) {\n        if (str.charAt(1) === \"#\") {\n            var secondChar = str.charAt(2);\n            if (secondChar === \"X\" || secondChar === \"x\") {\n                return decode_codepoint_1.default(parseInt(str.substr(3), 16));\n            }\n            return decode_codepoint_1.default(parseInt(str.substr(2), 10));\n        }\n        return map[str.slice(1, -1)];\n    };\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.escape = exports.encodeHTML = exports.encodeXML = void 0;\nvar xml_json_1 = __importDefault(require(\"./maps/xml.json\"));\nvar inverseXML = getInverseObj(xml_json_1.default);\nvar xmlReplacer = getInverseReplacer(inverseXML);\nexports.encodeXML = getInverse(inverseXML, xmlReplacer);\nvar entities_json_1 = __importDefault(require(\"./maps/entities.json\"));\nvar inverseHTML = getInverseObj(entities_json_1.default);\nvar htmlReplacer = getInverseReplacer(inverseHTML);\nexports.encodeHTML = getInverse(inverseHTML, htmlReplacer);\nfunction getInverseObj(obj) {\n    return Object.keys(obj)\n        .sort()\n        .reduce(function (inverse, name) {\n        inverse[obj[name]] = \"&\" + name + \";\";\n        return inverse;\n    }, {});\n}\nfunction getInverseReplacer(inverse) {\n    var single = [];\n    var multiple = [];\n    for (var _i = 0, _a = Object.keys(inverse); _i < _a.length; _i++) {\n        var k = _a[_i];\n        if (k.length === 1) {\n            // Add value to single array\n            single.push(\"\\\\\" + k);\n        }\n        else {\n            // Add value to multiple array\n            multiple.push(k);\n        }\n    }\n    // Add ranges to single characters.\n    single.sort();\n    for (var start = 0; start < single.length - 1; start++) {\n        // Find the end of a run of characters\n        var end = start;\n        while (end < single.length - 1 &&\n            single[end].charCodeAt(1) + 1 === single[end + 1].charCodeAt(1)) {\n            end += 1;\n        }\n        var count = 1 + end - start;\n        // We want to replace at least three characters\n        if (count < 3)\n            continue;\n        single.splice(start, count, single[start] + \"-\" + single[end]);\n    }\n    multiple.unshift(\"[\" + single.join(\"\") + \"]\");\n    return new RegExp(multiple.join(\"|\"), \"g\");\n}\nvar reNonASCII = /(?:[\\x80-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/g;\nfunction singleCharReplacer(c) {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    return \"&#x\" + c.codePointAt(0).toString(16).toUpperCase() + \";\";\n}\nfunction getInverse(inverse, re) {\n    return function (data) {\n        return data\n            .replace(re, function (name) { return inverse[name]; })\n            .replace(reNonASCII, singleCharReplacer);\n    };\n}\nvar reXmlChars = getInverseReplacer(inverseXML);\nfunction escape(data) {\n    return data\n        .replace(reXmlChars, singleCharReplacer)\n        .replace(reNonASCII, singleCharReplacer);\n}\nexports.escape = escape;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.encode = exports.decodeStrict = exports.decode = void 0;\nvar decode_1 = require(\"./decode\");\nvar encode_1 = require(\"./encode\");\n/**\n * Decodes a string with entities.\n *\n * @param data String to decode.\n * @param level Optional level to decode at. 0 = XML, 1 = HTML. Default is 0.\n */\nfunction decode(data, level) {\n    return (!level || level <= 0 ? decode_1.decodeXML : decode_1.decodeHTML)(data);\n}\nexports.decode = decode;\n/**\n * Decodes a string with entities. Does not allow missing trailing semicolons for entities.\n *\n * @param data String to decode.\n * @param level Optional level to decode at. 0 = XML, 1 = HTML. Default is 0.\n */\nfunction decodeStrict(data, level) {\n    return (!level || level <= 0 ? decode_1.decodeXML : decode_1.decodeHTMLStrict)(data);\n}\nexports.decodeStrict = decodeStrict;\n/**\n * Encodes a string with entities.\n *\n * @param data String to encode.\n * @param level Optional level to encode at. 0 = XML, 1 = HTML. Default is 0.\n */\nfunction encode(data, level) {\n    return (!level || level <= 0 ? encode_1.encodeXML : encode_1.encodeHTML)(data);\n}\nexports.encode = encode;\nvar encode_2 = require(\"./encode\");\nObject.defineProperty(exports, \"encodeXML\", { enumerable: true, get: function () { return encode_2.encodeXML; } });\nObject.defineProperty(exports, \"encodeHTML\", { enumerable: true, get: function () { return encode_2.encodeHTML; } });\nObject.defineProperty(exports, \"escape\", { enumerable: true, get: function () { return encode_2.escape; } });\n// Legacy aliases\nObject.defineProperty(exports, \"encodeHTML4\", { enumerable: true, get: function () { return encode_2.encodeHTML; } });\nObject.defineProperty(exports, \"encodeHTML5\", { enumerable: true, get: function () { return encode_2.encodeHTML; } });\nvar decode_2 = require(\"./decode\");\nObject.defineProperty(exports, \"decodeXML\", { enumerable: true, get: function () { return decode_2.decodeXML; } });\nObject.defineProperty(exports, \"decodeHTML\", { enumerable: true, get: function () { return decode_2.decodeHTML; } });\nObject.defineProperty(exports, \"decodeHTMLStrict\", { enumerable: true, get: function () { return decode_2.decodeHTMLStrict; } });\n// Legacy aliases\nObject.defineProperty(exports, \"decodeHTML4\", { enumerable: true, get: function () { return decode_2.decodeHTML; } });\nObject.defineProperty(exports, \"decodeHTML5\", { enumerable: true, get: function () { return decode_2.decodeHTML; } });\nObject.defineProperty(exports, \"decodeHTML4Strict\", { enumerable: true, get: function () { return decode_2.decodeHTMLStrict; } });\nObject.defineProperty(exports, \"decodeHTML5Strict\", { enumerable: true, get: function () { return decode_2.decodeHTMLStrict; } });\nObject.defineProperty(exports, \"decodeXMLStrict\", { enumerable: true, get: function () { return decode_2.decodeXML; } });\n","/*\n  Module dependencies\n*/\nvar ElementType = require('domelementtype');\nvar entities = require('entities');\n\n/* mixed-case SVG and MathML tags & attributes\n   recognized by the HTML parser, see\n   https://html.spec.whatwg.org/multipage/parsing.html#parsing-main-inforeign\n*/\nvar foreignNames = require('./foreignNames.json');\nforeignNames.elementNames.__proto__ = null; /* use as a simple dictionary */\nforeignNames.attributeNames.__proto__ = null;\n\nvar unencodedElements = {\n  __proto__: null,\n  style: true,\n  script: true,\n  xmp: true,\n  iframe: true,\n  noembed: true,\n  noframes: true,\n  plaintext: true,\n  noscript: true\n};\n\n/*\n  Format attributes\n*/\nfunction formatAttrs(attributes, opts) {\n  if (!attributes) return;\n\n  var output = '';\n  var value;\n\n  // Loop through the attributes\n  for (var key in attributes) {\n    value = attributes[key];\n    if (output) {\n      output += ' ';\n    }\n\n    if (opts.xmlMode === 'foreign') {\n      /* fix up mixed-case attribute names */\n      key = foreignNames.attributeNames[key] || key;\n    }\n    output += key;\n    if ((value !== null && value !== '') || opts.xmlMode) {\n      output +=\n        '=\"' +\n        (opts.decodeEntities\n          ? entities.encodeXML(value)\n          : value.replace(/\\\"/g, '&quot;')) +\n        '\"';\n    }\n  }\n\n  return output;\n}\n\n/*\n  Self-enclosing tags (stolen from node-htmlparser)\n*/\nvar singleTag = {\n  __proto__: null,\n  area: true,\n  base: true,\n  basefont: true,\n  br: true,\n  col: true,\n  command: true,\n  embed: true,\n  frame: true,\n  hr: true,\n  img: true,\n  input: true,\n  isindex: true,\n  keygen: true,\n  link: true,\n  meta: true,\n  param: true,\n  source: true,\n  track: true,\n  wbr: true\n};\n\nvar render = (module.exports = function(dom, opts) {\n  if (!Array.isArray(dom) && !dom.cheerio) dom = [dom];\n  opts = opts || {};\n\n  var output = '';\n\n  for (var i = 0; i < dom.length; i++) {\n    var elem = dom[i];\n\n    if (elem.type === 'root') output += render(elem.children, opts);\n    else if (ElementType.isTag(elem)) output += renderTag(elem, opts);\n    else if (elem.type === ElementType.Directive)\n      output += renderDirective(elem);\n    else if (elem.type === ElementType.Comment) output += renderComment(elem);\n    else if (elem.type === ElementType.CDATA) output += renderCdata(elem);\n    else output += renderText(elem, opts);\n  }\n\n  return output;\n});\n\nvar foreignModeIntegrationPoints = [\n  'mi',\n  'mo',\n  'mn',\n  'ms',\n  'mtext',\n  'annotation-xml',\n  'foreignObject',\n  'desc',\n  'title'\n];\n\nfunction renderTag(elem, opts) {\n  // Handle SVG / MathML in HTML\n  if (opts.xmlMode === 'foreign') {\n    /* fix up mixed-case element names */\n    elem.name = foreignNames.elementNames[elem.name] || elem.name;\n    /* exit foreign mode at integration points */\n    if (\n      elem.parent &&\n      foreignModeIntegrationPoints.indexOf(elem.parent.name) >= 0\n    )\n      opts = Object.assign({}, opts, { xmlMode: false });\n  }\n  if (!opts.xmlMode && ['svg', 'math'].indexOf(elem.name) >= 0) {\n    opts = Object.assign({}, opts, { xmlMode: 'foreign' });\n  }\n\n  var tag = '<' + elem.name;\n  var attribs = formatAttrs(elem.attribs, opts);\n\n  if (attribs) {\n    tag += ' ' + attribs;\n  }\n\n  if (opts.xmlMode && (!elem.children || elem.children.length === 0)) {\n    tag += '/>';\n  } else {\n    tag += '>';\n    if (elem.children) {\n      tag += render(elem.children, opts);\n    }\n\n    if (!singleTag[elem.name] || opts.xmlMode) {\n      tag += '</' + elem.name + '>';\n    }\n  }\n\n  return tag;\n}\n\nfunction renderDirective(elem) {\n  return '<' + elem.data + '>';\n}\n\nfunction renderText(elem, opts) {\n  var data = elem.data || '';\n\n  // if entities weren't decoded, no need to encode them back\n  if (\n    opts.decodeEntities &&\n    !(elem.parent && elem.parent.name in unencodedElements)\n  ) {\n    data = entities.encodeXML(data);\n  }\n\n  return data;\n}\n\nfunction renderCdata(elem) {\n  return '<![CDATA[' + elem.children[0].data + ']]>';\n}\n\nfunction renderComment(elem) {\n  return '<!--' + elem.data + '-->';\n}\n","var ElementType = require(\"domelementtype\"),\n    getOuterHTML = require(\"dom-serializer\"),\n    isTag = ElementType.isTag;\n\nmodule.exports = {\n\tgetInnerHTML: getInnerHTML,\n\tgetOuterHTML: getOuterHTML,\n\tgetText: getText\n};\n\nfunction getInnerHTML(elem, opts){\n\treturn elem.children ? elem.children.map(function(elem){\n\t\treturn getOuterHTML(elem, opts);\n\t}).join(\"\") : \"\";\n}\n\nfunction getText(elem){\n\tif(Array.isArray(elem)) return elem.map(getText).join(\"\");\n\tif(isTag(elem) || elem.type === ElementType.CDATA) return getText(elem.children);\n\tif(elem.type === ElementType.Text) return elem.data;\n\treturn \"\";\n}\n","var getChildren = exports.getChildren = function(elem){\n\treturn elem.children;\n};\n\nvar getParent = exports.getParent = function(elem){\n\treturn elem.parent;\n};\n\nexports.getSiblings = function(elem){\n\tvar parent = getParent(elem);\n\treturn parent ? getChildren(parent) : [elem];\n};\n\nexports.getAttributeValue = function(elem, name){\n\treturn elem.attribs && elem.attribs[name];\n};\n\nexports.hasAttrib = function(elem, name){\n\treturn !!elem.attribs && hasOwnProperty.call(elem.attribs, name);\n};\n\nexports.getName = function(elem){\n\treturn elem.name;\n};\n","exports.removeElement = function(elem){\n\tif(elem.prev) elem.prev.next = elem.next;\n\tif(elem.next) elem.next.prev = elem.prev;\n\n\tif(elem.parent){\n\t\tvar childs = elem.parent.children;\n\t\tchilds.splice(childs.lastIndexOf(elem), 1);\n\t}\n};\n\nexports.replaceElement = function(elem, replacement){\n\tvar prev = replacement.prev = elem.prev;\n\tif(prev){\n\t\tprev.next = replacement;\n\t}\n\n\tvar next = replacement.next = elem.next;\n\tif(next){\n\t\tnext.prev = replacement;\n\t}\n\n\tvar parent = replacement.parent = elem.parent;\n\tif(parent){\n\t\tvar childs = parent.children;\n\t\tchilds[childs.lastIndexOf(elem)] = replacement;\n\t}\n};\n\nexports.appendChild = function(elem, child){\n\tchild.parent = elem;\n\n\tif(elem.children.push(child) !== 1){\n\t\tvar sibling = elem.children[elem.children.length - 2];\n\t\tsibling.next = child;\n\t\tchild.prev = sibling;\n\t\tchild.next = null;\n\t}\n};\n\nexports.append = function(elem, next){\n\tvar parent = elem.parent,\n\t\tcurrNext = elem.next;\n\n\tnext.next = currNext;\n\tnext.prev = elem;\n\telem.next = next;\n\tnext.parent = parent;\n\n\tif(currNext){\n\t\tcurrNext.prev = next;\n\t\tif(parent){\n\t\t\tvar childs = parent.children;\n\t\t\tchilds.splice(childs.lastIndexOf(currNext), 0, next);\n\t\t}\n\t} else if(parent){\n\t\tparent.children.push(next);\n\t}\n};\n\nexports.prepend = function(elem, prev){\n\tvar parent = elem.parent;\n\tif(parent){\n\t\tvar childs = parent.children;\n\t\tchilds.splice(childs.lastIndexOf(elem), 0, prev);\n\t}\n\n\tif(elem.prev){\n\t\telem.prev.next = prev;\n\t}\n\t\n\tprev.parent = parent;\n\tprev.prev = elem.prev;\n\tprev.next = elem;\n\telem.prev = prev;\n};\n\n\n","var isTag = require(\"domelementtype\").isTag;\n\nmodule.exports = {\n\tfilter: filter,\n\tfind: find,\n\tfindOneChild: findOneChild,\n\tfindOne: findOne,\n\texistsOne: existsOne,\n\tfindAll: findAll\n};\n\nfunction filter(test, element, recurse, limit){\n\tif(!Array.isArray(element)) element = [element];\n\n\tif(typeof limit !== \"number\" || !isFinite(limit)){\n\t\tlimit = Infinity;\n\t}\n\treturn find(test, element, recurse !== false, limit);\n}\n\nfunction find(test, elems, recurse, limit){\n\tvar result = [], childs;\n\n\tfor(var i = 0, j = elems.length; i < j; i++){\n\t\tif(test(elems[i])){\n\t\t\tresult.push(elems[i]);\n\t\t\tif(--limit <= 0) break;\n\t\t}\n\n\t\tchilds = elems[i].children;\n\t\tif(recurse && childs && childs.length > 0){\n\t\t\tchilds = find(test, childs, recurse, limit);\n\t\t\tresult = result.concat(childs);\n\t\t\tlimit -= childs.length;\n\t\t\tif(limit <= 0) break;\n\t\t}\n\t}\n\n\treturn result;\n}\n\nfunction findOneChild(test, elems){\n\tfor(var i = 0, l = elems.length; i < l; i++){\n\t\tif(test(elems[i])) return elems[i];\n\t}\n\n\treturn null;\n}\n\nfunction findOne(test, elems){\n\tvar elem = null;\n\n\tfor(var i = 0, l = elems.length; i < l && !elem; i++){\n\t\tif(!isTag(elems[i])){\n\t\t\tcontinue;\n\t\t} else if(test(elems[i])){\n\t\t\telem = elems[i];\n\t\t} else if(elems[i].children.length > 0){\n\t\t\telem = findOne(test, elems[i].children);\n\t\t}\n\t}\n\n\treturn elem;\n}\n\nfunction existsOne(test, elems){\n\tfor(var i = 0, l = elems.length; i < l; i++){\n\t\tif(\n\t\t\tisTag(elems[i]) && (\n\t\t\t\ttest(elems[i]) || (\n\t\t\t\t\telems[i].children.length > 0 &&\n\t\t\t\t\texistsOne(test, elems[i].children)\n\t\t\t\t)\n\t\t\t)\n\t\t){\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\nfunction findAll(test, elems){\n\tvar result = [];\n\tfor(var i = 0, j = elems.length; i < j; i++){\n\t\tif(!isTag(elems[i])) continue;\n\t\tif(test(elems[i])) result.push(elems[i]);\n\n\t\tif(elems[i].children.length > 0){\n\t\t\tresult = result.concat(findAll(test, elems[i].children));\n\t\t}\n\t}\n\treturn result;\n}\n","var ElementType = require(\"domelementtype\");\nvar isTag = exports.isTag = ElementType.isTag;\n\nexports.testElement = function(options, element){\n\tfor(var key in options){\n\t\tif(!options.hasOwnProperty(key));\n\t\telse if(key === \"tag_name\"){\n\t\t\tif(!isTag(element) || !options.tag_name(element.name)){\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else if(key === \"tag_type\"){\n\t\t\tif(!options.tag_type(element.type)) return false;\n\t\t} else if(key === \"tag_contains\"){\n\t\t\tif(isTag(element) || !options.tag_contains(element.data)){\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else if(!element.attribs || !options[key](element.attribs[key])){\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n};\n\nvar Checks = {\n\ttag_name: function(name){\n\t\tif(typeof name === \"function\"){\n\t\t\treturn function(elem){ return isTag(elem) && name(elem.name); };\n\t\t} else if(name === \"*\"){\n\t\t\treturn isTag;\n\t\t} else {\n\t\t\treturn function(elem){ return isTag(elem) && elem.name === name; };\n\t\t}\n\t},\n\ttag_type: function(type){\n\t\tif(typeof type === \"function\"){\n\t\t\treturn function(elem){ return type(elem.type); };\n\t\t} else {\n\t\t\treturn function(elem){ return elem.type === type; };\n\t\t}\n\t},\n\ttag_contains: function(data){\n\t\tif(typeof data === \"function\"){\n\t\t\treturn function(elem){ return !isTag(elem) && data(elem.data); };\n\t\t} else {\n\t\t\treturn function(elem){ return !isTag(elem) && elem.data === data; };\n\t\t}\n\t}\n};\n\nfunction getAttribCheck(attrib, value){\n\tif(typeof value === \"function\"){\n\t\treturn function(elem){ return elem.attribs && value(elem.attribs[attrib]); };\n\t} else {\n\t\treturn function(elem){ return elem.attribs && elem.attribs[attrib] === value; };\n\t}\n}\n\nfunction combineFuncs(a, b){\n\treturn function(elem){\n\t\treturn a(elem) || b(elem);\n\t};\n}\n\nexports.getElements = function(options, element, recurse, limit){\n\tvar funcs = Object.keys(options).map(function(key){\n\t\tvar value = options[key];\n\t\treturn key in Checks ? Checks[key](value) : getAttribCheck(key, value);\n\t});\n\n\treturn funcs.length === 0 ? [] : this.filter(\n\t\tfuncs.reduce(combineFuncs),\n\t\telement, recurse, limit\n\t);\n};\n\nexports.getElementById = function(id, element, recurse){\n\tif(!Array.isArray(element)) element = [element];\n\treturn this.findOne(getAttribCheck(\"id\", id), element, recurse !== false);\n};\n\nexports.getElementsByTagName = function(name, element, recurse, limit){\n\treturn this.filter(Checks.tag_name(name), element, recurse, limit);\n};\n\nexports.getElementsByTagType = function(type, element, recurse, limit){\n\treturn this.filter(Checks.tag_type(type), element, recurse, limit);\n};\n","// removeSubsets\n// Given an array of nodes, remove any member that is contained by another.\nexports.removeSubsets = function(nodes) {\n\tvar idx = nodes.length, node, ancestor, replace;\n\n\t// Check if each node (or one of its ancestors) is already contained in the\n\t// array.\n\twhile (--idx > -1) {\n\t\tnode = ancestor = nodes[idx];\n\n\t\t// Temporarily remove the node under consideration\n\t\tnodes[idx] = null;\n\t\treplace = true;\n\n\t\twhile (ancestor) {\n\t\t\tif (nodes.indexOf(ancestor) > -1) {\n\t\t\t\treplace = false;\n\t\t\t\tnodes.splice(idx, 1);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tancestor = ancestor.parent;\n\t\t}\n\n\t\t// If the node has been found to be unique, re-insert it.\n\t\tif (replace) {\n\t\t\tnodes[idx] = node;\n\t\t}\n\t}\n\n\treturn nodes;\n};\n\n// Source: http://dom.spec.whatwg.org/#dom-node-comparedocumentposition\nvar POSITION = {\n\tDISCONNECTED: 1,\n\tPRECEDING: 2,\n\tFOLLOWING: 4,\n\tCONTAINS: 8,\n\tCONTAINED_BY: 16\n};\n\n// Compare the position of one node against another node in any other document.\n// The return value is a bitmask with the following values:\n//\n// document order:\n// > There is an ordering, document order, defined on all the nodes in the\n// > document corresponding to the order in which the first character of the\n// > XML representation of each node occurs in the XML representation of the\n// > document after expansion of general entities. Thus, the document element\n// > node will be the first node. Element nodes occur before their children.\n// > Thus, document order orders element nodes in order of the occurrence of\n// > their start-tag in the XML (after expansion of entities). The attribute\n// > nodes of an element occur after the element and before its children. The\n// > relative order of attribute nodes is implementation-dependent./\n// Source:\n// http://www.w3.org/TR/DOM-Level-3-Core/glossary.html#dt-document-order\n//\n// @argument {Node} nodaA The first node to use in the comparison\n// @argument {Node} nodeB The second node to use in the comparison\n//\n// @return {Number} A bitmask describing the input nodes' relative position.\n//         See http://dom.spec.whatwg.org/#dom-node-comparedocumentposition for\n//         a description of these values.\nvar comparePos = exports.compareDocumentPosition = function(nodeA, nodeB) {\n\tvar aParents = [];\n\tvar bParents = [];\n\tvar current, sharedParent, siblings, aSibling, bSibling, idx;\n\n\tif (nodeA === nodeB) {\n\t\treturn 0;\n\t}\n\n\tcurrent = nodeA;\n\twhile (current) {\n\t\taParents.unshift(current);\n\t\tcurrent = current.parent;\n\t}\n\tcurrent = nodeB;\n\twhile (current) {\n\t\tbParents.unshift(current);\n\t\tcurrent = current.parent;\n\t}\n\n\tidx = 0;\n\twhile (aParents[idx] === bParents[idx]) {\n\t\tidx++;\n\t}\n\n\tif (idx === 0) {\n\t\treturn POSITION.DISCONNECTED;\n\t}\n\n\tsharedParent = aParents[idx - 1];\n\tsiblings = sharedParent.children;\n\taSibling = aParents[idx];\n\tbSibling = bParents[idx];\n\n\tif (siblings.indexOf(aSibling) > siblings.indexOf(bSibling)) {\n\t\tif (sharedParent === nodeB) {\n\t\t\treturn POSITION.FOLLOWING | POSITION.CONTAINED_BY;\n\t\t}\n\t\treturn POSITION.FOLLOWING;\n\t} else {\n\t\tif (sharedParent === nodeA) {\n\t\t\treturn POSITION.PRECEDING | POSITION.CONTAINS;\n\t\t}\n\t\treturn POSITION.PRECEDING;\n\t}\n};\n\n// Sort an array of nodes based on their relative position in the document and\n// remove any duplicate nodes. If the array contains nodes that do not belong\n// to the same document, sort order is unspecified.\n//\n// @argument {Array} nodes Array of DOM nodes\n//\n// @returns {Array} collection of unique nodes, sorted in document order\nexports.uniqueSort = function(nodes) {\n\tvar idx = nodes.length, node, position;\n\n\tnodes = nodes.slice();\n\n\twhile (--idx > -1) {\n\t\tnode = nodes[idx];\n\t\tposition = nodes.indexOf(node);\n\t\tif (position > -1 && position < idx) {\n\t\t\tnodes.splice(idx, 1);\n\t\t}\n\t}\n\tnodes.sort(function(a, b) {\n\t\tvar relative = comparePos(a, b);\n\t\tif (relative & POSITION.PRECEDING) {\n\t\t\treturn -1;\n\t\t} else if (relative & POSITION.FOLLOWING) {\n\t\t\treturn 1;\n\t\t}\n\t\treturn 0;\n\t});\n\n\treturn nodes;\n};\n","var DomUtils = module.exports;\n\n[\n\trequire(\"./lib/stringify\"),\n\trequire(\"./lib/traversal\"),\n\trequire(\"./lib/manipulation\"),\n\trequire(\"./lib/querying\"),\n\trequire(\"./lib/legacy\"),\n\trequire(\"./lib/helpers\")\n].forEach(function(ext){\n\tObject.keys(ext).forEach(function(key){\n\t\tDomUtils[key] = ext[key].bind(DomUtils);\n\t});\n});\n","module.exports = parse;\n\n//following http://www.w3.org/TR/css3-selectors/#nth-child-pseudo\n\n//[ ['-'|'+']? INTEGER? {N} [ S* ['-'|'+'] S* INTEGER ]?\nvar re_nthElement = /^([+\\-]?\\d*n)?\\s*(?:([+\\-]?)\\s*(\\d+))?$/;\n\n/*\n\tparses a nth-check formula, returns an array of two numbers\n*/\nfunction parse(formula){\n\tformula = formula.trim().toLowerCase();\n\n\tif(formula === \"even\"){\n\t\treturn [2, 0];\n\t} else if(formula === \"odd\"){\n\t\treturn [2, 1];\n\t} else {\n\t\tvar parsed = formula.match(re_nthElement);\n\n\t\tif(!parsed){\n\t\t\tthrow new SyntaxError(\"n-th rule couldn't be parsed ('\" + formula + \"')\");\n\t\t}\n\n\t\tvar a;\n\n\t\tif(parsed[1]){\n\t\t\ta = parseInt(parsed[1], 10);\n\t\t\tif(isNaN(a)){\n\t\t\t\tif(parsed[1].charAt(0) === \"-\") a = -1;\n\t\t\t\telse a = 1;\n\t\t\t}\n\t\t} else a = 0;\n\n\t\treturn [\n\t\t\ta,\n\t\t\tparsed[3] ? parseInt((parsed[2] || \"\") + parsed[3], 10) : 0\n\t\t];\n\t}\n}\n","module.exports = {\n\ttrueFunc: function trueFunc(){\n\t\treturn true;\n\t},\n\tfalseFunc: function falseFunc(){\n\t\treturn false;\n\t}\n};","module.exports = compile;\n\nvar BaseFuncs = require(\"boolbase\"),\n    trueFunc  = BaseFuncs.trueFunc,\n    falseFunc = BaseFuncs.falseFunc;\n\n/*\n\treturns a function that checks if an elements index matches the given rule\n\thighly optimized to return the fastest solution\n*/\nfunction compile(parsed){\n\tvar a = parsed[0],\n\t    b = parsed[1] - 1;\n\n\t//when b <= 0, a*n won't be possible for any matches when a < 0\n\t//besides, the specification says that no element is matched when a and b are 0\n\tif(b < 0 && a <= 0) return falseFunc;\n\n\t//when a is in the range -1..1, it matches any element (so only b is checked)\n\tif(a ===-1) return function(pos){ return pos <= b; };\n\tif(a === 0) return function(pos){ return pos === b; };\n\t//when b <= 0 and a === 1, they match any element\n\tif(a === 1) return b < 0 ? trueFunc : function(pos){ return pos >= b; };\n\n\t//when a > 0, modulo can be used to check if there is a match\n\tvar bMod = b % a;\n\tif(bMod < 0) bMod += a;\n\n\tif(a > 1){\n\t\treturn function(pos){\n\t\t\treturn pos >= b && pos % a === bMod;\n\t\t};\n\t}\n\n\ta *= -1; //make `a` positive\n\n\treturn function(pos){\n\t\treturn pos <= b && pos % a === bMod;\n\t};\n}","var parse = require(\"./parse.js\"),\n    compile = require(\"./compile.js\");\n\nmodule.exports = function nthCheck(formula){\n\treturn compile(parse(formula));\n};\n\nmodule.exports.parse = parse;\nmodule.exports.compile = compile;","var DomUtils  = require(\"domutils\"),\n    hasAttrib = DomUtils.hasAttrib,\n    getAttributeValue = DomUtils.getAttributeValue,\n    falseFunc = require(\"boolbase\").falseFunc;\n\n//https://github.com/slevithan/XRegExp/blob/master/src/xregexp.js#L469\nvar reChars = /[-[\\]{}()*+?.,\\\\^$|#\\s]/g;\n\n/*\n\tattribute selectors\n*/\n\nvar attributeRules = {\n\t__proto__: null,\n\tequals: function(next, data){\n\t\tvar name  = data.name,\n\t\t    value = data.value;\n\n\t\tif(data.ignoreCase){\n\t\t\tvalue = value.toLowerCase();\n\n\t\t\treturn function equalsIC(elem){\n\t\t\t\tvar attr = getAttributeValue(elem, name);\n\t\t\t\treturn attr != null && attr.toLowerCase() === value && next(elem);\n\t\t\t};\n\t\t}\n\n\t\treturn function equals(elem){\n\t\t\treturn getAttributeValue(elem, name) === value && next(elem);\n\t\t};\n\t},\n\thyphen: function(next, data){\n\t\tvar name  = data.name,\n\t\t    value = data.value,\n\t\t    len = value.length;\n\n\t\tif(data.ignoreCase){\n\t\t\tvalue = value.toLowerCase();\n\n\t\t\treturn function hyphenIC(elem){\n\t\t\t\tvar attr = getAttributeValue(elem, name);\n\t\t\t\treturn attr != null &&\n\t\t\t\t\t\t(attr.length === len || attr.charAt(len) === \"-\") &&\n\t\t\t\t\t\tattr.substr(0, len).toLowerCase() === value &&\n\t\t\t\t\t\tnext(elem);\n\t\t\t};\n\t\t}\n\n\t\treturn function hyphen(elem){\n\t\t\tvar attr = getAttributeValue(elem, name);\n\t\t\treturn attr != null &&\n\t\t\t\t\tattr.substr(0, len) === value &&\n\t\t\t\t\t(attr.length === len || attr.charAt(len) === \"-\") &&\n\t\t\t\t\tnext(elem);\n\t\t};\n\t},\n\telement: function(next, data){\n\t\tvar name = data.name,\n\t\t    value = data.value;\n\n\t\tif(/\\s/.test(value)){\n\t\t\treturn falseFunc;\n\t\t}\n\n\t\tvalue = value.replace(reChars, \"\\\\$&\");\n\n\t\tvar pattern = \"(?:^|\\\\s)\" + value + \"(?:$|\\\\s)\",\n\t\t    flags = data.ignoreCase ? \"i\" : \"\",\n\t\t    regex = new RegExp(pattern, flags);\n\n\t\treturn function element(elem){\n\t\t\tvar attr = getAttributeValue(elem, name);\n\t\t\treturn attr != null && regex.test(attr) && next(elem);\n\t\t};\n\t},\n\texists: function(next, data){\n\t\tvar name = data.name;\n\t\treturn function exists(elem){\n\t\t\treturn hasAttrib(elem, name) && next(elem);\n\t\t};\n\t},\n\tstart: function(next, data){\n\t\tvar name  = data.name,\n\t\t    value = data.value,\n\t\t    len = value.length;\n\n\t\tif(len === 0){\n\t\t\treturn falseFunc;\n\t\t}\n\t\t\n\t\tif(data.ignoreCase){\n\t\t\tvalue = value.toLowerCase();\n\n\t\t\treturn function startIC(elem){\n\t\t\t\tvar attr = getAttributeValue(elem, name);\n\t\t\t\treturn attr != null && attr.substr(0, len).toLowerCase() === value && next(elem);\n\t\t\t};\n\t\t}\n\n\t\treturn function start(elem){\n\t\t\tvar attr = getAttributeValue(elem, name);\n\t\t\treturn attr != null && attr.substr(0, len) === value && next(elem);\n\t\t};\n\t},\n\tend: function(next, data){\n\t\tvar name  = data.name,\n\t\t    value = data.value,\n\t\t    len   = -value.length;\n\n\t\tif(len === 0){\n\t\t\treturn falseFunc;\n\t\t}\n\n\t\tif(data.ignoreCase){\n\t\t\tvalue = value.toLowerCase();\n\n\t\t\treturn function endIC(elem){\n\t\t\t\tvar attr = getAttributeValue(elem, name);\n\t\t\t\treturn attr != null && attr.substr(len).toLowerCase() === value && next(elem);\n\t\t\t};\n\t\t}\n\n\t\treturn function end(elem){\n\t\t\tvar attr = getAttributeValue(elem, name);\n\t\t\treturn attr != null && attr.substr(len) === value && next(elem);\n\t\t};\n\t},\n\tany: function(next, data){\n\t\tvar name  = data.name,\n\t\t    value = data.value;\n\n\t\tif(value === \"\"){\n\t\t\treturn falseFunc;\n\t\t}\n\n\t\tif(data.ignoreCase){\n\t\t\tvar regex = new RegExp(value.replace(reChars, \"\\\\$&\"), \"i\");\n\n\t\t\treturn function anyIC(elem){\n\t\t\t\tvar attr = getAttributeValue(elem, name);\n\t\t\t\treturn attr != null && regex.test(attr) && next(elem);\n\t\t\t};\n\t\t}\n\n\t\treturn function any(elem){\n\t\t\tvar attr = getAttributeValue(elem, name);\n\t\t\treturn attr != null && attr.indexOf(value) >= 0 && next(elem);\n\t\t};\n\t},\n\tnot: function(next, data){\n\t\tvar name  = data.name,\n\t\t    value = data.value;\n\n\t\tif(value === \"\"){\n\t\t\treturn function notEmpty(elem){\n\t\t\t\treturn !!getAttributeValue(elem, name) && next(elem);\n\t\t\t};\n\t\t} else if(data.ignoreCase){\n\t\t\tvalue = value.toLowerCase();\n\n\t\t\treturn function notIC(elem){\n\t\t\t\tvar attr = getAttributeValue(elem, name);\n\t\t\t\treturn attr != null && attr.toLowerCase() !== value && next(elem);\n\t\t\t};\n\t\t}\n\n\t\treturn function not(elem){\n\t\t\treturn getAttributeValue(elem, name) !== value && next(elem);\n\t\t};\n\t}\n};\n\nmodule.exports = {\n\tcompile: function(next, data, options){\n\t\tif(options && options.strict && (\n\t\t\tdata.ignoreCase || data.action === \"not\"\n\t\t)) throw SyntaxError(\"Unsupported attribute selector\");\n\t\treturn attributeRules[data.action](next, data);\n\t},\n\trules: attributeRules\n};\n","/*\n\tpseudo selectors\n\n\t---\n\n\tthey are available in two forms:\n\t* filters called when the selector\n\t  is compiled and return a function\n\t  that needs to return next()\n\t* pseudos get called on execution\n\t  they need to return a boolean\n*/\n\nvar DomUtils    = require(\"domutils\"),\n    isTag       = DomUtils.isTag,\n    getText     = DomUtils.getText,\n    getParent   = DomUtils.getParent,\n    getChildren = DomUtils.getChildren,\n    getSiblings = DomUtils.getSiblings,\n    hasAttrib   = DomUtils.hasAttrib,\n    getName     = DomUtils.getName,\n    getAttribute= DomUtils.getAttributeValue,\n    getNCheck   = require(\"nth-check\"),\n    checkAttrib = require(\"./attributes.js\").rules.equals,\n    BaseFuncs   = require(\"boolbase\"),\n    trueFunc    = BaseFuncs.trueFunc,\n    falseFunc   = BaseFuncs.falseFunc;\n\n//helper methods\nfunction getFirstElement(elems){\n\tfor(var i = 0; elems && i < elems.length; i++){\n\t\tif(isTag(elems[i])) return elems[i];\n\t}\n}\n\nfunction getAttribFunc(name, value){\n\tvar data = {name: name, value: value};\n\treturn function attribFunc(next){\n\t\treturn checkAttrib(next, data);\n\t};\n}\n\nfunction getChildFunc(next){\n\treturn function(elem){\n\t\treturn !!getParent(elem) && next(elem);\n\t};\n}\n\nvar filters = {\n\tcontains: function(next, text){\n\t\treturn function contains(elem){\n\t\t\treturn next(elem) && getText(elem).indexOf(text) >= 0;\n\t\t};\n\t},\n\ticontains: function(next, text){\n\t\tvar itext = text.toLowerCase();\n\t\treturn function icontains(elem){\n\t\t\treturn next(elem) &&\n\t\t\t\tgetText(elem).toLowerCase().indexOf(itext) >= 0;\n\t\t};\n\t},\n\n\t//location specific methods\n\t\"nth-child\": function(next, rule){\n\t\tvar func = getNCheck(rule);\n\n\t\tif(func === falseFunc) return func;\n\t\tif(func === trueFunc)  return getChildFunc(next);\n\n\t\treturn function nthChild(elem){\n\t\t\tvar siblings = getSiblings(elem);\n\n\t\t\tfor(var i = 0, pos = 0; i < siblings.length; i++){\n\t\t\t\tif(isTag(siblings[i])){\n\t\t\t\t\tif(siblings[i] === elem) break;\n\t\t\t\t\telse pos++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn func(pos) && next(elem);\n\t\t};\n\t},\n\t\"nth-last-child\": function(next, rule){\n\t\tvar func = getNCheck(rule);\n\n\t\tif(func === falseFunc) return func;\n\t\tif(func === trueFunc)  return getChildFunc(next);\n\n\t\treturn function nthLastChild(elem){\n\t\t\tvar siblings = getSiblings(elem);\n\n\t\t\tfor(var pos = 0, i = siblings.length - 1; i >= 0; i--){\n\t\t\t\tif(isTag(siblings[i])){\n\t\t\t\t\tif(siblings[i] === elem) break;\n\t\t\t\t\telse pos++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn func(pos) && next(elem);\n\t\t};\n\t},\n\t\"nth-of-type\": function(next, rule){\n\t\tvar func = getNCheck(rule);\n\n\t\tif(func === falseFunc) return func;\n\t\tif(func === trueFunc)  return getChildFunc(next);\n\n\t\treturn function nthOfType(elem){\n\t\t\tvar siblings = getSiblings(elem);\n\n\t\t\tfor(var pos = 0, i = 0; i < siblings.length; i++){\n\t\t\t\tif(isTag(siblings[i])){\n\t\t\t\t\tif(siblings[i] === elem) break;\n\t\t\t\t\tif(getName(siblings[i]) === getName(elem)) pos++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn func(pos) && next(elem);\n\t\t};\n\t},\n\t\"nth-last-of-type\": function(next, rule){\n\t\tvar func = getNCheck(rule);\n\n\t\tif(func === falseFunc) return func;\n\t\tif(func === trueFunc)  return getChildFunc(next);\n\n\t\treturn function nthLastOfType(elem){\n\t\t\tvar siblings = getSiblings(elem);\n\n\t\t\tfor(var pos = 0, i = siblings.length - 1; i >= 0; i--){\n\t\t\t\tif(isTag(siblings[i])){\n\t\t\t\t\tif(siblings[i] === elem) break;\n\t\t\t\t\tif(getName(siblings[i]) === getName(elem)) pos++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn func(pos) && next(elem);\n\t\t};\n\t},\n\n    //TODO determine the actual root element\n    root: function(next){\n        return function(elem){\n            return !getParent(elem) && next(elem);\n        };\n    },\n\n    scope: function(next, rule, options, context){\n        if(!context || context.length === 0){\n            //equivalent to :root\n            return filters.root(next);\n        }\n\n        if(context.length === 1){\n            //NOTE: can't be unpacked, as :has uses this for side-effects\n            return function(elem){\n                return context[0] === elem && next(elem);\n            };\n        }\n\n        return function(elem){\n            return context.indexOf(elem) >= 0 && next(elem);\n        };\n    },\n\n\t//jQuery extensions (others follow as pseudos)\n\tcheckbox: getAttribFunc(\"type\", \"checkbox\"),\n\tfile: getAttribFunc(\"type\", \"file\"),\n\tpassword: getAttribFunc(\"type\", \"password\"),\n\tradio: getAttribFunc(\"type\", \"radio\"),\n\treset: getAttribFunc(\"type\", \"reset\"),\n\timage: getAttribFunc(\"type\", \"image\"),\n\tsubmit: getAttribFunc(\"type\", \"submit\")\n};\n\n//while filters are precompiled, pseudos get called when they are needed\nvar pseudos = {\n\tempty: function(elem){\n\t\treturn !getChildren(elem).some(function(elem){\n\t\t\treturn isTag(elem) || elem.type === \"text\";\n\t\t});\n\t},\n\n\t\"first-child\": function(elem){\n\t\treturn getFirstElement(getSiblings(elem)) === elem;\n\t},\n\t\"last-child\": function(elem){\n\t\tvar siblings = getSiblings(elem);\n\n\t\tfor(var i = siblings.length - 1; i >= 0; i--){\n\t\t\tif(siblings[i] === elem) return true;\n\t\t\tif(isTag(siblings[i])) break;\n\t\t}\n\n\t\treturn false;\n\t},\n\t\"first-of-type\": function(elem){\n\t\tvar siblings = getSiblings(elem);\n\n\t\tfor(var i = 0; i < siblings.length; i++){\n\t\t\tif(isTag(siblings[i])){\n\t\t\t\tif(siblings[i] === elem) return true;\n\t\t\t\tif(getName(siblings[i]) === getName(elem)) break;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\t\"last-of-type\": function(elem){\n\t\tvar siblings = getSiblings(elem);\n\n\t\tfor(var i = siblings.length-1; i >= 0; i--){\n\t\t\tif(isTag(siblings[i])){\n\t\t\t\tif(siblings[i] === elem) return true;\n\t\t\t\tif(getName(siblings[i]) === getName(elem)) break;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\t\"only-of-type\": function(elem){\n\t\tvar siblings = getSiblings(elem);\n\n\t\tfor(var i = 0, j = siblings.length; i < j; i++){\n\t\t\tif(isTag(siblings[i])){\n\t\t\t\tif(siblings[i] === elem) continue;\n\t\t\t\tif(getName(siblings[i]) === getName(elem)) return false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t},\n\t\"only-child\": function(elem){\n\t\tvar siblings = getSiblings(elem);\n\n\t\tfor(var i = 0; i < siblings.length; i++){\n\t\t\tif(isTag(siblings[i]) && siblings[i] !== elem) return false;\n\t\t}\n\n\t\treturn true;\n\t},\n\n\t//:matches(a, area, link)[href]\n\tlink: function(elem){\n\t\treturn hasAttrib(elem, \"href\");\n\t},\n\tvisited: falseFunc, //seems to be a valid implementation\n\t//TODO: :any-link once the name is finalized (as an alias of :link)\n\n\t//forms\n\t//to consider: :target\n\n\t//:matches([selected], select:not([multiple]):not(> option[selected]) > option:first-of-type)\n\tselected: function(elem){\n\t\tif(hasAttrib(elem, \"selected\")) return true;\n\t\telse if(getName(elem) !== \"option\") return false;\n\n\t\t//the first <option> in a <select> is also selected\n\t\tvar parent = getParent(elem);\n\n\t\tif(\n\t\t\t!parent ||\n\t\t\tgetName(parent) !== \"select\" ||\n\t\t\thasAttrib(parent, \"multiple\")\n\t\t) return false;\n\n\t\tvar siblings = getChildren(parent),\n\t\t\tsawElem  = false;\n\n\t\tfor(var i = 0; i < siblings.length; i++){\n\t\t\tif(isTag(siblings[i])){\n\t\t\t\tif(siblings[i] === elem){\n\t\t\t\t\tsawElem = true;\n\t\t\t\t} else if(!sawElem){\n\t\t\t\t\treturn false;\n\t\t\t\t} else if(hasAttrib(siblings[i], \"selected\")){\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn sawElem;\n\t},\n\t//https://html.spec.whatwg.org/multipage/scripting.html#disabled-elements\n\t//:matches(\n\t//  :matches(button, input, select, textarea, menuitem, optgroup, option)[disabled],\n\t//  optgroup[disabled] > option),\n\t// fieldset[disabled] * //TODO not child of first <legend>\n\t//)\n\tdisabled: function(elem){\n\t\treturn hasAttrib(elem, \"disabled\");\n\t},\n\tenabled: function(elem){\n\t\treturn !hasAttrib(elem, \"disabled\");\n\t},\n\t//:matches(:matches(:radio, :checkbox)[checked], :selected) (TODO menuitem)\n\tchecked: function(elem){\n\t\treturn hasAttrib(elem, \"checked\") || pseudos.selected(elem);\n\t},\n\t//:matches(input, select, textarea)[required]\n\trequired: function(elem){\n\t\treturn hasAttrib(elem, \"required\");\n\t},\n\t//:matches(input, select, textarea):not([required])\n\toptional: function(elem){\n\t\treturn !hasAttrib(elem, \"required\");\n\t},\n\n\t//jQuery extensions\n\n\t//:not(:empty)\n\tparent: function(elem){\n\t\treturn !pseudos.empty(elem);\n\t},\n\t//:matches(h1, h2, h3, h4, h5, h6)\n\theader: function(elem){\n\t\tvar name = getName(elem);\n\t\treturn name === \"h1\" ||\n\t\t       name === \"h2\" ||\n\t\t       name === \"h3\" ||\n\t\t       name === \"h4\" ||\n\t\t       name === \"h5\" ||\n\t\t       name === \"h6\";\n\t},\n\n\t//:matches(button, input[type=button])\n\tbutton: function(elem){\n\t\tvar name = getName(elem);\n\t\treturn name === \"button\" ||\n\t\t       name === \"input\" &&\n\t\t       getAttribute(elem, \"type\") === \"button\";\n\t},\n\t//:matches(input, textarea, select, button)\n\tinput: function(elem){\n\t\tvar name = getName(elem);\n\t\treturn name === \"input\" ||\n\t\t       name === \"textarea\" ||\n\t\t       name === \"select\" ||\n\t\t       name === \"button\";\n\t},\n\t//input:matches(:not([type!='']), [type='text' i])\n\ttext: function(elem){\n\t\tvar attr;\n\t\treturn getName(elem) === \"input\" && (\n\t\t\t!(attr = getAttribute(elem, \"type\")) ||\n\t\t\tattr.toLowerCase() === \"text\"\n\t\t);\n\t}\n};\n\nfunction verifyArgs(func, name, subselect){\n\tif(subselect === null){\n\t\tif(func.length > 1 && name !== \"scope\"){\n\t\t\tthrow new SyntaxError(\"pseudo-selector :\" + name + \" requires an argument\");\n\t\t}\n\t} else {\n\t\tif(func.length === 1){\n\t\t\tthrow new SyntaxError(\"pseudo-selector :\" + name + \" doesn't have any arguments\");\n\t\t}\n\t}\n}\n\n//FIXME this feels hacky\nvar re_CSS3 = /^(?:(?:nth|last|first|only)-(?:child|of-type)|root|empty|(?:en|dis)abled|checked|not)$/;\n\nmodule.exports = {\n\tcompile: function(next, data, options, context){\n\t\tvar name = data.name,\n\t\t\tsubselect = data.data;\n\n\t\tif(options && options.strict && !re_CSS3.test(name)){\n\t\t\tthrow SyntaxError(\":\" + name + \" isn't part of CSS3\");\n\t\t}\n\n\t\tif(typeof filters[name] === \"function\"){\n\t\t\tverifyArgs(filters[name], name,  subselect);\n\t\t\treturn filters[name](next, subselect, options, context);\n\t\t} else if(typeof pseudos[name] === \"function\"){\n\t\t\tvar func = pseudos[name];\n\t\t\tverifyArgs(func, name, subselect);\n\n\t\t\tif(next === trueFunc) return func;\n\n\t\t\treturn function pseudoArgs(elem){\n\t\t\t\treturn func(elem, subselect) && next(elem);\n\t\t\t};\n\t\t} else {\n\t\t\tthrow new SyntaxError(\"unmatched pseudo-class :\" + name);\n\t\t}\n\t},\n\tfilters: filters,\n\tpseudos: pseudos\n};\n","\"use strict\";\n\nmodule.exports = parse;\n\nvar re_name = /^(?:\\\\.|[\\w\\-\\u00b0-\\uFFFF])+/,\n    re_escape = /\\\\([\\da-f]{1,6}\\s?|(\\s)|.)/ig,\n    //modified version of https://github.com/jquery/sizzle/blob/master/src/sizzle.js#L87\n    re_attr = /^\\s*((?:\\\\.|[\\w\\u00b0-\\uFFFF\\-])+)\\s*(?:(\\S?)=\\s*(?:(['\"])([^]*?)\\3|(#?(?:\\\\.|[\\w\\u00b0-\\uFFFF\\-])*)|)|)\\s*(i)?\\]/;\n\nvar actionTypes = {\n\t__proto__: null,\n\t\"undefined\": \"exists\",\n\t\"\":  \"equals\",\n\t\"~\": \"element\",\n\t\"^\": \"start\",\n\t\"$\": \"end\",\n\t\"*\": \"any\",\n\t\"!\": \"not\",\n\t\"|\": \"hyphen\"\n};\n\nvar simpleSelectors = {\n\t__proto__: null,\n\t\">\": \"child\",\n\t\"<\": \"parent\",\n\t\"~\": \"sibling\",\n\t\"+\": \"adjacent\"\n};\n\nvar attribSelectors = {\n\t__proto__: null,\n\t\"#\": [\"id\", \"equals\"],\n\t\".\": [\"class\", \"element\"]\n};\n\n//pseudos, whose data-property is parsed as well\nvar unpackPseudos = {\n\t__proto__: null,\n\t\"has\": true,\n\t\"not\": true,\n\t\"matches\": true\n};\n\nvar stripQuotesFromPseudos = {\n\t__proto__: null,\n\t\"contains\": true,\n\t\"icontains\": true\n};\n\nvar quotes = {\n\t__proto__: null,\n\t\"\\\"\": true,\n\t\"'\": true\n};\n\n//unescape function taken from https://github.com/jquery/sizzle/blob/master/src/sizzle.js#L139\nfunction funescape( _, escaped, escapedWhitespace ) {\n\tvar high = \"0x\" + escaped - 0x10000;\n\t// NaN means non-codepoint\n\t// Support: Firefox\n\t// Workaround erroneous numeric interpretation of +\"0x\"\n\treturn high !== high || escapedWhitespace ?\n\t\tescaped :\n\t\t// BMP codepoint\n\t\thigh < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n}\n\nfunction unescapeCSS(str){\n\treturn str.replace(re_escape, funescape);\n}\n\nfunction isWhitespace(c){\n\treturn c === \" \" || c === \"\\n\" || c === \"\\t\" || c === \"\\f\" || c === \"\\r\";\n}\n\nfunction parse(selector, options){\n\tvar subselects = [];\n\n\tselector = parseSelector(subselects, selector + \"\", options);\n\n\tif(selector !== \"\"){\n\t\tthrow new SyntaxError(\"Unmatched selector: \" + selector);\n\t}\n\n\treturn subselects;\n}\n\nfunction parseSelector(subselects, selector, options){\n\tvar tokens = [],\n\t\tsawWS = false,\n\t\tdata, firstChar, name, quot;\n\n\tfunction getName(){\n\t\tvar sub = selector.match(re_name)[0];\n\t\tselector = selector.substr(sub.length);\n\t\treturn unescapeCSS(sub);\n\t}\n\n\tfunction stripWhitespace(start){\n\t\twhile(isWhitespace(selector.charAt(start))) start++;\n\t\tselector = selector.substr(start);\n\t}\n\n\tfunction isEscaped(pos) {\n\t\tvar slashCount = 0;\n\n\t\twhile (selector.charAt(--pos) === \"\\\\\") slashCount++;\n\t\treturn (slashCount & 1) === 1;\n\t}\n\n\tstripWhitespace(0);\n\n\twhile(selector !== \"\"){\n\t\tfirstChar = selector.charAt(0);\n\n\t\tif(isWhitespace(firstChar)){\n\t\t\tsawWS = true;\n\t\t\tstripWhitespace(1);\n\t\t} else if(firstChar in simpleSelectors){\n\t\t\ttokens.push({type: simpleSelectors[firstChar]});\n\t\t\tsawWS = false;\n\n\t\t\tstripWhitespace(1);\n\t\t} else if(firstChar === \",\"){\n\t\t\tif(tokens.length === 0){\n\t\t\t\tthrow new SyntaxError(\"empty sub-selector\");\n\t\t\t}\n\t\t\tsubselects.push(tokens);\n\t\t\ttokens = [];\n\t\t\tsawWS = false;\n\t\t\tstripWhitespace(1);\n\t\t} else {\n\t\t\tif(sawWS){\n\t\t\t\tif(tokens.length > 0){\n\t\t\t\t\ttokens.push({type: \"descendant\"});\n\t\t\t\t}\n\t\t\t\tsawWS = false;\n\t\t\t}\n\n\t\t\tif(firstChar === \"*\"){\n\t\t\t\tselector = selector.substr(1);\n\t\t\t\ttokens.push({type: \"universal\"});\n\t\t\t} else if(firstChar in attribSelectors){\n\t\t\t\tselector = selector.substr(1);\n\t\t\t\ttokens.push({\n\t\t\t\t\ttype: \"attribute\",\n\t\t\t\t\tname: attribSelectors[firstChar][0],\n\t\t\t\t\taction: attribSelectors[firstChar][1],\n\t\t\t\t\tvalue: getName(),\n\t\t\t\t\tignoreCase: false\n\t\t\t\t});\n\t\t\t} else if(firstChar === \"[\"){\n\t\t\t\tselector = selector.substr(1);\n\t\t\t\tdata = selector.match(re_attr);\n\t\t\t\tif(!data){\n\t\t\t\t\tthrow new SyntaxError(\"Malformed attribute selector: \" + selector);\n\t\t\t\t}\n\t\t\t\tselector = selector.substr(data[0].length);\n\t\t\t\tname = unescapeCSS(data[1]);\n\n\t\t\t\tif(\n\t\t\t\t\t!options || (\n\t\t\t\t\t\t\"lowerCaseAttributeNames\" in options ?\n\t\t\t\t\t\t\toptions.lowerCaseAttributeNames :\n\t\t\t\t\t\t\t!options.xmlMode\n\t\t\t\t\t)\n\t\t\t\t){\n\t\t\t\t\tname = name.toLowerCase();\n\t\t\t\t}\n\n\t\t\t\ttokens.push({\n\t\t\t\t\ttype: \"attribute\",\n\t\t\t\t\tname: name,\n\t\t\t\t\taction: actionTypes[data[2]],\n\t\t\t\t\tvalue: unescapeCSS(data[4] || data[5] || \"\"),\n\t\t\t\t\tignoreCase: !!data[6]\n\t\t\t\t});\n\n\t\t\t} else if(firstChar === \":\"){\n\t\t\t\tif(selector.charAt(1) === \":\"){\n\t\t\t\t\tselector = selector.substr(2);\n\t\t\t\t\ttokens.push({type: \"pseudo-element\", name: getName().toLowerCase()});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tselector = selector.substr(1);\n\n\t\t\t\tname = getName().toLowerCase();\n\t\t\t\tdata = null;\n\n\t\t\t\tif(selector.charAt(0) === \"(\"){\n\t\t\t\t\tif(name in unpackPseudos){\n\t\t\t\t\t\tquot = selector.charAt(1);\n\t\t\t\t\t\tvar quoted = quot in quotes;\n\n\t\t\t\t\t\tselector = selector.substr(quoted + 1);\n\n\t\t\t\t\t\tdata = [];\n\t\t\t\t\t\tselector = parseSelector(data, selector, options);\n\n\t\t\t\t\t\tif(quoted){\n\t\t\t\t\t\t\tif(selector.charAt(0) !== quot){\n\t\t\t\t\t\t\t\tthrow new SyntaxError(\"unmatched quotes in :\" + name);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tselector = selector.substr(1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif(selector.charAt(0) !== \")\"){\n\t\t\t\t\t\t\tthrow new SyntaxError(\"missing closing parenthesis in :\" + name + \" \" + selector);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tselector = selector.substr(1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar pos = 1, counter = 1;\n\n\t\t\t\t\t\tfor(; counter > 0 && pos < selector.length; pos++){\n\t\t\t\t\t\t\tif(selector.charAt(pos) === \"(\" && !isEscaped(pos)) counter++;\n\t\t\t\t\t\t\telse if(selector.charAt(pos) === \")\" && !isEscaped(pos)) counter--;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif(counter){\n\t\t\t\t\t\t\tthrow new SyntaxError(\"parenthesis not matched\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdata = selector.substr(1, pos - 2);\n\t\t\t\t\t\tselector = selector.substr(pos);\n\n\t\t\t\t\t\tif(name in stripQuotesFromPseudos){\n\t\t\t\t\t\t\tquot = data.charAt(0);\n\n\t\t\t\t\t\t\tif(quot === data.slice(-1) && quot in quotes){\n\t\t\t\t\t\t\t\tdata = data.slice(1, -1);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdata = unescapeCSS(data);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ttokens.push({type: \"pseudo\", name: name, data: data});\n\t\t\t} else if(re_name.test(selector)){\n\t\t\t\tname = getName();\n\n\t\t\t\tif(!options || (\"lowerCaseTags\" in options ? options.lowerCaseTags : !options.xmlMode)){\n\t\t\t\t\tname = name.toLowerCase();\n\t\t\t\t}\n\n\t\t\t\ttokens.push({type: \"tag\", name: name});\n\t\t\t} else {\n\t\t\t\tif(tokens.length && tokens[tokens.length - 1].type === \"descendant\"){\n\t\t\t\t\ttokens.pop();\n\t\t\t\t}\n\t\t\t\taddToken(subselects, tokens);\n\t\t\t\treturn selector;\n\t\t\t}\n\t\t}\n\t}\n\n\taddToken(subselects, tokens);\n\n\treturn selector;\n}\n\nfunction addToken(subselects, tokens){\n\tif(subselects.length > 0 && tokens.length === 0){\n\t\tthrow new SyntaxError(\"empty sub-selector\");\n\t}\n\n\tsubselects.push(tokens);\n}\n","var DomUtils    = require(\"domutils\"),\n    isTag       = DomUtils.isTag,\n    getParent   = DomUtils.getParent,\n    getChildren = DomUtils.getChildren,\n    getSiblings = DomUtils.getSiblings,\n    getName     = DomUtils.getName;\n\n/*\n\tall available rules\n*/\nmodule.exports = {\n\t__proto__: null,\n\n\tattribute: require(\"./attributes.js\").compile,\n\tpseudo: require(\"./pseudos.js\").compile,\n\n\t//tags\n\ttag: function(next, data){\n\t\tvar name = data.name;\n\t\treturn function tag(elem){\n\t\t\treturn getName(elem) === name && next(elem);\n\t\t};\n\t},\n\n\t//traversal\n\tdescendant: function(next, rule, options, context, acceptSelf){\n\t\treturn function descendant(elem){\n\n\t\t\tif (acceptSelf && next(elem)) return true;\n\n\t\t\tvar found = false;\n\n\t\t\twhile(!found && (elem = getParent(elem))){\n\t\t\t\tfound = next(elem);\n\t\t\t}\n\n\t\t\treturn found;\n\t\t};\n\t},\n\tparent: function(next, data, options){\n\t\tif(options && options.strict) throw SyntaxError(\"Parent selector isn't part of CSS3\");\n\n\t\treturn function parent(elem){\n\t\t\treturn getChildren(elem).some(test);\n\t\t};\n\n\t\tfunction test(elem){\n\t\t\treturn isTag(elem) && next(elem);\n\t\t}\n\t},\n\tchild: function(next){\n\t\treturn function child(elem){\n\t\t\tvar parent = getParent(elem);\n\t\t\treturn !!parent && next(parent);\n\t\t};\n\t},\n\tsibling: function(next){\n\t\treturn function sibling(elem){\n\t\t\tvar siblings = getSiblings(elem);\n\n\t\t\tfor(var i = 0; i < siblings.length; i++){\n\t\t\t\tif(isTag(siblings[i])){\n\t\t\t\t\tif(siblings[i] === elem) break;\n\t\t\t\t\tif(next(siblings[i])) return true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t};\n\t},\n\tadjacent: function(next){\n\t\treturn function adjacent(elem){\n\t\t\tvar siblings = getSiblings(elem),\n\t\t\t    lastElement;\n\n\t\t\tfor(var i = 0; i < siblings.length; i++){\n\t\t\t\tif(isTag(siblings[i])){\n\t\t\t\t\tif(siblings[i] === elem) break;\n\t\t\t\t\tlastElement = siblings[i];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn !!lastElement && next(lastElement);\n\t\t};\n\t},\n\tuniversal: function(next){\n\t\treturn next;\n\t}\n};","module.exports = sortByProcedure;\n\n/*\n\tsort the parts of the passed selector,\n\tas there is potential for optimization\n\t(some types of selectors are faster than others)\n*/\n\nvar procedure = require(\"./procedure.json\");\n\nvar attributes = {\n\t__proto__: null,\n\texists: 10,\n\tequals: 8,\n\tnot: 7,\n\tstart: 6,\n\tend: 6,\n\tany: 5,\n\thyphen: 4,\n\telement: 4\n};\n\nfunction sortByProcedure(arr){\n\tvar procs = arr.map(getProcedure);\n\tfor(var i = 1; i < arr.length; i++){\n\t\tvar procNew = procs[i];\n\n\t\tif(procNew < 0) continue;\n\n\t\tfor(var j = i - 1; j >= 0 && procNew < procs[j]; j--){\n\t\t\tvar token = arr[j + 1];\n\t\t\tarr[j + 1] = arr[j];\n\t\t\tarr[j] = token;\n\t\t\tprocs[j + 1] = procs[j];\n\t\t\tprocs[j] = procNew;\n\t\t}\n\t}\n}\n\nfunction getProcedure(token){\n\tvar proc = procedure[token.type];\n\n\tif(proc === procedure.attribute){\n\t\tproc = attributes[token.action];\n\n\t\tif(proc === attributes.equals && token.name === \"id\"){\n\t\t\t//prefer ID selectors (eg. #ID)\n\t\t\tproc = 9;\n\t\t}\n\n\t\tif(token.ignoreCase){\n\t\t\t//ignoreCase adds some overhead, prefer \"normal\" token\n\t\t\t//this is a binary operation, to ensure it's still an int\n\t\t\tproc >>= 1;\n\t\t}\n\t} else if(proc === procedure.pseudo){\n\t\tif(!token.data){\n\t\t\tproc = 3;\n\t\t} else if(token.name === \"has\" || token.name === \"contains\"){\n\t\t\tproc = 0; //expensive in any case\n\t\t} else if(token.name === \"matches\" || token.name === \"not\"){\n\t\t\tproc = 0;\n\t\t\tfor(var i = 0; i < token.data.length; i++){\n\t\t\t\t//TODO better handling of complex selectors\n\t\t\t\tif(token.data[i].length !== 1) continue;\n\t\t\t\tvar cur = getProcedure(token.data[i][0]);\n\t\t\t\t//avoid executing :has or :contains\n\t\t\t\tif(cur === 0){\n\t\t\t\t\tproc = 0;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(cur > proc) proc = cur;\n\t\t\t}\n\t\t\tif(token.data.length > 1 && proc > 0) proc -= 1;\n\t\t} else {\n\t\t\tproc = 1;\n\t\t}\n\t}\n\treturn proc;\n}\n","/*\n\tcompiles a selector to an executable function\n*/\n\nmodule.exports = compile;\nmodule.exports.compileUnsafe = compileUnsafe;\nmodule.exports.compileToken = compileToken;\n\nvar parse       = require(\"css-what\"),\n    DomUtils    = require(\"domutils\"),\n    isTag       = DomUtils.isTag,\n    Rules       = require(\"./general.js\"),\n    sortRules   = require(\"./sort.js\"),\n    BaseFuncs   = require(\"boolbase\"),\n    trueFunc    = BaseFuncs.trueFunc,\n    falseFunc   = BaseFuncs.falseFunc,\n    procedure   = require(\"./procedure.json\");\n\nfunction compile(selector, options, context){\n\tvar next = compileUnsafe(selector, options, context);\n\treturn wrap(next);\n}\n\nfunction wrap(next){\n\treturn function base(elem){\n\t\treturn isTag(elem) && next(elem);\n\t};\n}\n\nfunction compileUnsafe(selector, options, context){\n\tvar token = parse(selector, options);\n\treturn compileToken(token, options, context);\n}\n\nfunction includesScopePseudo(t){\n    return t.type === \"pseudo\" && (\n        t.name === \"scope\" || (\n            Array.isArray(t.data) &&\n            t.data.some(function(data){\n                return data.some(includesScopePseudo);\n            })\n        )\n    );\n}\n\nvar DESCENDANT_TOKEN = {type: \"descendant\"},\n    SCOPE_TOKEN = {type: \"pseudo\", name: \"scope\"},\n    PLACEHOLDER_ELEMENT = {},\n    getParent = DomUtils.getParent;\n\n//CSS 4 Spec (Draft): 3.3.1. Absolutizing a Scope-relative Selector\n//http://www.w3.org/TR/selectors4/#absolutizing\nfunction absolutize(token, context){\n    //TODO better check if context is document\n    var hasContext = !!context && !!context.length && context.every(function(e){\n        return e === PLACEHOLDER_ELEMENT || !!getParent(e);\n    });\n\n\n    token.forEach(function(t){\n        if(t.length > 0 && isTraversal(t[0]) && t[0].type !== \"descendant\"){\n            //don't return in else branch\n        } else if(hasContext && !includesScopePseudo(t)){\n            t.unshift(DESCENDANT_TOKEN);\n        } else {\n            return;\n        }\n\n        t.unshift(SCOPE_TOKEN);\n    });\n}\n\nfunction compileToken(token, options, context){\n    token = token.filter(function(t){ return t.length > 0; });\n\n\ttoken.forEach(sortRules);\n\n\tvar isArrayContext = Array.isArray(context);\n\n    context = (options && options.context) || context;\n\n    if(context && !isArrayContext) context = [context];\n\n    absolutize(token, context);\n\n\treturn token\n\t\t.map(function(rules){ return compileRules(rules, options, context, isArrayContext); })\n\t\t.reduce(reduceRules, falseFunc);\n}\n\nfunction isTraversal(t){\n\treturn procedure[t.type] < 0;\n}\n\nfunction compileRules(rules, options, context, isArrayContext){\n\tvar acceptSelf = (isArrayContext && rules[0].name === \"scope\" && rules[1].type === \"descendant\");\n\treturn rules.reduce(function(func, rule, index){\n\t\tif(func === falseFunc) return func;\n\t\treturn Rules[rule.type](func, rule, options, context, acceptSelf && index === 1);\n\t}, options && options.rootFunc || trueFunc);\n}\n\nfunction reduceRules(a, b){\n\tif(b === falseFunc || a === trueFunc){\n\t\treturn a;\n\t}\n\tif(a === falseFunc || b === trueFunc){\n\t\treturn b;\n\t}\n\n\treturn function combine(elem){\n\t\treturn a(elem) || b(elem);\n\t};\n}\n\n//:not, :has and :matches have to compile selectors\n//doing this in lib/pseudos.js would lead to circular dependencies,\n//so we add them here\n\nvar Pseudos     = require(\"./pseudos.js\"),\n    filters     = Pseudos.filters,\n    existsOne   = DomUtils.existsOne,\n    isTag       = DomUtils.isTag,\n    getChildren = DomUtils.getChildren;\n\n\nfunction containsTraversal(t){\n\treturn t.some(isTraversal);\n}\n\nfilters.not = function(next, token, options, context){\n\tvar opts = {\n\t    \txmlMode: !!(options && options.xmlMode),\n\t    \tstrict: !!(options && options.strict)\n\t    };\n\n\tif(opts.strict){\n\t\tif(token.length > 1 || token.some(containsTraversal)){\n\t\t\tthrow new SyntaxError(\"complex selectors in :not aren't allowed in strict mode\");\n\t\t}\n\t}\n\n    var func = compileToken(token, opts, context);\n\n\tif(func === falseFunc) return next;\n\tif(func === trueFunc)  return falseFunc;\n\n\treturn function(elem){\n\t\treturn !func(elem) && next(elem);\n\t};\n};\n\nfilters.has = function(next, token, options){\n\tvar opts = {\n\t\txmlMode: !!(options && options.xmlMode),\n\t\tstrict: !!(options && options.strict)\n\t};\n\n    //FIXME: Uses an array as a pointer to the current element (side effects)\n    var context = token.some(containsTraversal) ? [PLACEHOLDER_ELEMENT] : null;\n\n\tvar func = compileToken(token, opts, context);\n\n\tif(func === falseFunc) return falseFunc;\n\tif(func === trueFunc)  return function(elem){\n\t\t\treturn getChildren(elem).some(isTag) && next(elem);\n\t\t};\n\n\tfunc = wrap(func);\n\n    if(context){\n        return function has(elem){\n\t\treturn next(elem) && (\n                (context[0] = elem), existsOne(func, getChildren(elem))\n            );\n\t};\n    }\n\n    return function has(elem){\n\t\treturn next(elem) && existsOne(func, getChildren(elem));\n\t};\n};\n\nfilters.matches = function(next, token, options, context){\n\tvar opts = {\n\t\txmlMode: !!(options && options.xmlMode),\n\t\tstrict: !!(options && options.strict),\n\t\trootFunc: next\n\t};\n\n\treturn compileToken(token, opts, context);\n};\n","\"use strict\";\n\nmodule.exports = CSSselect;\n\nvar Pseudos       = require(\"./lib/pseudos.js\"),\n    DomUtils      = require(\"domutils\"),\n    findOne       = DomUtils.findOne,\n    findAll       = DomUtils.findAll,\n    getChildren   = DomUtils.getChildren,\n    removeSubsets = DomUtils.removeSubsets,\n    falseFunc     = require(\"boolbase\").falseFunc,\n    compile       = require(\"./lib/compile.js\"),\n    compileUnsafe = compile.compileUnsafe,\n    compileToken  = compile.compileToken;\n\nfunction getSelectorFunc(searchFunc){\n\treturn function select(query, elems, options){\n        if(typeof query !== \"function\") query = compileUnsafe(query, options, elems);\n        if(!Array.isArray(elems)) elems = getChildren(elems);\n\t\telse elems = removeSubsets(elems);\n\t\treturn searchFunc(query, elems);\n\t};\n}\n\nvar selectAll = getSelectorFunc(function selectAll(query, elems){\n\treturn (query === falseFunc || !elems || elems.length === 0) ? [] : findAll(query, elems);\n});\n\nvar selectOne = getSelectorFunc(function selectOne(query, elems){\n\treturn (query === falseFunc || !elems || elems.length === 0) ? null : findOne(query, elems);\n});\n\nfunction is(elem, query, options){\n\treturn (typeof query === \"function\" ? query : compile(query, options))(elem);\n}\n\n/*\n\tthe exported interface\n*/\nfunction CSSselect(query, elems, options){\n\treturn selectAll(query, elems, options);\n}\n\nCSSselect.compile = compile;\nCSSselect.filters = Pseudos.filters;\nCSSselect.pseudos = Pseudos.pseudos;\n\nCSSselect.selectAll = selectAll;\nCSSselect.selectOne = selectOne;\n\nCSSselect.is = is;\n\n//legacy methods (might be removed)\nCSSselect.parse = compile;\nCSSselect.iterate = selectAll;\n\n//hooks\nCSSselect._compileUnsafe = compileUnsafe;\nCSSselect._compileToken = compileToken;\n","/**\n * Copyright 2018 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nimport parse5 from 'parse5';\nimport select from 'css-select';\n\n// htmlparser2 has a relatively DOM-like tree format, which we'll massage into a DOM elsewhere\nconst treeAdapter = require('parse5-htmlparser2-tree-adapter');\n\nconst PARSE5_OPTS = {\n  treeAdapter\n};\n\n/**\n * Parse HTML into a mutable, serializable DOM Document.\n * The DOM implementation is an htmlparser2 DOM enhanced with basic DOM mutation methods.\n * @param {String} html   HTML to parse into a Document instance\n */\nexport function createDocument(html) {\n  const document = parse5.parse(html, PARSE5_OPTS);\n\n  defineProperties(document, DocumentExtensions);\n\n  // Extend Element.prototype with DOM manipulation methods.\n  const scratch = document.createElement('div');\n  // Get a reference to the base Node class - used by createTextNode()\n  document.$$Node = scratch.constructor;\n  const elementProto = Object.getPrototypeOf(scratch);\n  defineProperties(elementProto, ElementExtensions);\n  elementProto.ownerDocument = document;\n\n  return document;\n}\n\n/**\n * Serialize a Document to an HTML String\n * @param {Document} document   A Document, such as one created via `createDocument()`\n */\nexport function serializeDocument(document) {\n  return parse5.serialize(document, PARSE5_OPTS);\n}\n\n/**\n * Methods and descriptors to mix into Element.prototype\n */\nconst ElementExtensions = {\n  /** @extends htmlparser2.Element.prototype */\n\n  nodeName: {\n    get() {\n      return this.tagName.toUpperCase();\n    }\n  },\n\n  id: reflectedProperty('id'),\n\n  className: reflectedProperty('class'),\n\n  insertBefore(child, referenceNode) {\n    if (!referenceNode) return this.appendChild(child);\n    treeAdapter.insertBefore(this, child, referenceNode);\n    return child;\n  },\n\n  appendChild(child) {\n    treeAdapter.appendChild(this, child);\n    return child;\n  },\n\n  removeChild(child) {\n    treeAdapter.detachNode(child);\n  },\n\n  remove() {\n    treeAdapter.detachNode(this);\n  },\n\n  textContent: {\n    get() {\n      return getText(this);\n    },\n\n    set(text) {\n      this.children = [];\n      treeAdapter.insertText(this, text);\n    }\n  },\n\n  setAttribute(name, value) {\n    if (this.attribs == null) this.attribs = {};\n    if (value == null) value = '';\n    this.attribs[name] = value;\n  },\n\n  removeAttribute(name) {\n    if (this.attribs != null) {\n      delete this.attribs[name];\n    }\n  },\n\n  getAttribute(name) {\n    return this.attribs != null && this.attribs[name];\n  },\n\n  hasAttribute(name) {\n    return this.attribs != null && this.attribs[name] != null;\n  },\n\n  getAttributeNode(name) {\n    const value = this.getAttribute(name);\n    if (value != null) return { specified: true, value };\n  }\n};\n\n/**\n * Methods and descriptors to mix into the global document instance\n * @private\n */\nconst DocumentExtensions = {\n  /** @extends htmlparser2.Document.prototype */\n\n  // document is just an Element in htmlparser2, giving it a nodeType of ELEMENT_NODE.\n  // TODO: verify if these are needed for css-select\n  nodeType: {\n    get() {\n      return 9;\n    }\n  },\n\n  contentType: {\n    get() {\n      return 'text/html';\n    }\n  },\n\n  nodeName: {\n    get() {\n      return '#document';\n    }\n  },\n\n  documentElement: {\n    get() {\n      // Find the first <html> element within the document\n      return this.childNodes.filter(\n        (child) => String(child.tagName).toLowerCase() === 'html'\n      );\n    }\n  },\n\n  compatMode: {\n    get() {\n      const compatMode = {\n        'no-quirks': 'CSS1Compat',\n        quirks: 'BackCompat',\n        'limited-quirks': 'CSS1Compat'\n      };\n      return compatMode[treeAdapter.getDocumentMode(this)];\n    }\n  },\n\n  body: {\n    get() {\n      return this.querySelector('body');\n    }\n  },\n\n  createElement(name) {\n    return treeAdapter.createElement(name, null, []);\n  },\n\n  createTextNode(text) {\n    // there is no dedicated createTextNode equivalent exposed in htmlparser2's DOM\n    const Node = this.$$Node;\n    return new Node({\n      type: 'text',\n      data: text,\n      parent: null,\n      prev: null,\n      next: null\n    });\n  },\n\n  querySelector(sel) {\n    return select.selectOne(sel, this.documentElement);\n  },\n\n  querySelectorAll(sel) {\n    if (sel === ':root') {\n      return this;\n    }\n    return select(sel, this.documentElement);\n  }\n};\n\n/**\n * Essentially `Object.defineProperties()`, except function values are assigned as value descriptors for convenience.\n * @private\n */\nfunction defineProperties(obj, properties) {\n  for (const i in properties) {\n    const value = properties[i];\n    Object.defineProperty(\n      obj,\n      i,\n      typeof value === 'function' ? { value } : value\n    );\n  }\n}\n\n/**\n * Create a property descriptor defining a getter/setter pair alias for a named attribute.\n * @private\n */\nfunction reflectedProperty(attributeName) {\n  return {\n    get() {\n      return this.getAttribute(attributeName);\n    },\n    set(value) {\n      this.setAttribute(attributeName, value);\n    }\n  };\n}\n\n/**\n * Helper to get the text content of a node\n * https://github.com/fb55/domutils/blob/master/src/stringify.ts#L21\n * @private\n */\nfunction getText(node) {\n  if (Array.isArray(node)) return node.map(getText).join('');\n  if (treeAdapter.isElementNode(node))\n    return node.name === 'br' ? '\\n' : getText(node.children);\n  if (treeAdapter.isTextNode(node)) return node.data;\n  return '';\n}\n","/**\n * Copyright 2018 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nimport css from 'css';\n\n/**\n * Parse a textual CSS Stylesheet into a Stylesheet instance.\n * Stylesheet is a mutable ReworkCSS AST with format similar to CSSOM.\n * @see https://github.com/reworkcss/css\n * @private\n * @param {String} stylesheet\n * @returns {css.Stylesheet} ast\n */\nexport function parseStylesheet (stylesheet) {\n  return css.parse(stylesheet);\n}\n\n/**\n * Serialize a ReworkCSS Stylesheet to a String of CSS.\n * @private\n * @param {css.Stylesheet} ast          A Stylesheet to serialize, such as one returned from `parseStylesheet()`\n * @param {Object} options              Options to pass to `css.stringify()`\n * @param {Boolean} [options.compress]  Compress CSS output (removes comments, whitespace, etc)\n */\nexport function serializeStylesheet (ast, options) {\n  return css.stringify(ast, options);\n}\n\n/**\n * Converts a walkStyleRules() iterator to mark nodes with `.$$remove=true` instead of actually removing them.\n * This means they can be removed in a second pass, allowing the first pass to be nondestructive (eg: to preserve mirrored sheets).\n * @private\n * @param {Function} iterator   Invoked on each node in the tree. Return `false` to remove that node.\n * @returns {(rule) => void} nonDestructiveIterator\n */\nexport function markOnly (predicate) {\n  return rule => {\n    const sel = rule.selectors;\n    if (predicate(rule) === false) {\n      rule.$$remove = true;\n    }\n    rule.$$markedSelectors = rule.selectors;\n    if (rule._other) {\n      rule._other.$$markedSelectors = rule._other.selectors;\n    }\n    rule.selectors = sel;\n  };\n}\n\n/**\n * Apply filtered selectors to a rule from a previous markOnly run.\n * @private\n * @param {css.Rule} rule The Rule to apply marked selectors to (if they exist).\n*/\nexport function applyMarkedSelectors (rule) {\n  if (rule.$$markedSelectors) {\n    rule.selectors = rule.$$markedSelectors;\n  }\n  if (rule._other) {\n    applyMarkedSelectors(rule._other);\n  }\n}\n\n/**\n * Recursively walk all rules in a stylesheet.\n * @private\n * @param {css.Rule} node       A Stylesheet or Rule to descend into.\n * @param {Function} iterator   Invoked on each node in the tree. Return `false` to remove that node.\n */\nexport function walkStyleRules (node, iterator) {\n  if (node.stylesheet) return walkStyleRules(node.stylesheet, iterator);\n\n  node.rules = node.rules.filter(rule => {\n    if (rule.rules) {\n      walkStyleRules(rule, iterator);\n    }\n    rule._other = undefined;\n    rule.filterSelectors = filterSelectors;\n    return iterator(rule) !== false;\n  });\n}\n\n/**\n * Recursively walk all rules in two identical stylesheets, filtering nodes into one or the other based on a predicate.\n * @private\n * @param {css.Rule} node       A Stylesheet or Rule to descend into.\n * @param {css.Rule} node2      A second tree identical to `node`\n * @param {Function} iterator   Invoked on each node in the tree. Return `false` to remove that node from the first tree, true to remove it from the second.\n */\nexport function walkStyleRulesWithReverseMirror (node, node2, iterator) {\n  if (node2 === null) return walkStyleRules(node, iterator);\n\n  if (node.stylesheet) return walkStyleRulesWithReverseMirror(node.stylesheet, node2.stylesheet, iterator);\n\n  [node.rules, node2.rules] = splitFilter(node.rules, node2.rules, (rule, index, rules, rules2) => {\n    const rule2 = rules2[index];\n    if (rule.rules) {\n      walkStyleRulesWithReverseMirror(rule, rule2, iterator);\n    }\n    rule._other = rule2;\n    rule.filterSelectors = filterSelectors;\n    return iterator(rule) !== false;\n  });\n}\n\n// Like [].filter(), but applies the opposite filtering result to a second copy of the Array without a second pass.\n// This is just a quicker version of generating the compliment of the set returned from a filter operation.\nfunction splitFilter (a, b, predicate) {\n  const aOut = [];\n  const bOut = [];\n  for (let index = 0; index < a.length; index++) {\n    if (predicate(a[index], index, a, b)) {\n      aOut.push(a[index]);\n    } else {\n      bOut.push(a[index]);\n    }\n  }\n  return [aOut, bOut];\n}\n\n// can be invoked on a style rule to subset its selectors (with reverse mirroring)\nfunction filterSelectors (predicate) {\n  if (this._other) {\n    const [a, b] = splitFilter(this.selectors, this._other.selectors, predicate);\n    this.selectors = a;\n    this._other.selectors = b;\n  } else {\n    this.selectors = this.selectors.filter(predicate);\n  }\n}\n","import chalk from 'chalk';\n\nconst LOG_LEVELS = ['trace', 'debug', 'info', 'warn', 'error', 'silent'];\n\nexport const defaultLogger = {\n  trace(msg) {\n    console.trace(msg);\n  },\n\n  debug(msg) {\n    console.debug(msg);\n  },\n\n  warn(msg) {\n    console.warn(chalk.yellow(msg));\n  },\n\n  error(msg) {\n    console.error(chalk.bold.red(msg));\n  },\n\n  info(msg) {\n    console.info(chalk.bold.blue(msg));\n  },\n\n  silent() {}\n};\n\nexport function createLogger(logLevel) {\n  const logLevelIdx = LOG_LEVELS.indexOf(logLevel);\n\n  return LOG_LEVELS.reduce((logger, type, index) => {\n    if (index >= logLevelIdx) {\n      logger[type] = defaultLogger[type];\n    } else {\n      logger[type] = defaultLogger.silent;\n    }\n    return logger;\n  }, {});\n}\n","/**\n * Copyright 2018 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nimport path from 'path';\nimport prettyBytes from 'pretty-bytes';\nimport { createDocument, serializeDocument } from './dom';\nimport {\n  parseStylesheet,\n  serializeStylesheet,\n  walkStyleRules,\n  walkStyleRulesWithReverseMirror,\n  markOnly,\n  applyMarkedSelectors\n} from './css';\nimport { createLogger } from './util';\n\n/**\n * The mechanism to use for lazy-loading stylesheets.\n * Note: <kbd>JS</kbd> indicates a strategy requiring JavaScript (falls back to `<noscript>` unless disabled).\n *\n * - **default:** Move stylesheet links to the end of the document and insert preload meta tags in their place.\n * - **\"body\":** Move all external stylesheet links to the end of the document.\n * - **\"media\":** Load stylesheets asynchronously by adding `media=\"not x\"` and removing once loaded. <kbd>JS</kbd>\n * - **\"swap\":** Convert stylesheet links to preloads that swap to `rel=\"stylesheet\"` once loaded ([details](https://www.filamentgroup.com/lab/load-css-simpler/#the-code)). <kbd>JS</kbd>\n * - **\"swap-high\":** Use `<link rel=\"alternate stylesheet preload\">` and swap to `rel=\"stylesheet\"` once loaded ([details](http://filamentgroup.github.io/loadCSS/test/new-high.html)). <kbd>JS</kbd>\n * - **\"js\":** Inject an asynchronous CSS loader similar to [LoadCSS](https://github.com/filamentgroup/loadCSS) and use it to load stylesheets. <kbd>JS</kbd>\n * - **\"js-lazy\":** Like `\"js\"`, but the stylesheet is disabled until fully loaded.\n * @typedef {(default|'body'|'media'|'swap'|'swap-high'|'js'|'js-lazy')} PreloadStrategy\n * @public\n */\n\n/**\n * Controls which keyframes rules are inlined.\n *\n * - **\"critical\":** _(default)_ inline keyframes rules that are used by the critical CSS.\n * - **\"all\":** Inline all keyframes rules.\n * - **\"none\":** Remove all keyframes rules.\n * @typedef {('critical'|'all'|'none')} KeyframeStrategy\n * @private\n * @property {String} keyframes     Which {@link KeyframeStrategy keyframe strategy} to use (default: `critical`)_\n */\n\n/**\n * Controls log level of the plugin. Specifies the level the logger should use. A logger will\n * not produce output for any log level beneath the specified level. Available levels and order\n * are:\n *\n * - **\"info\"** _(default)_\n * - **\"warn\"**\n * - **\"error\"**\n * - **\"trace\"**\n * - **\"debug\"**\n * - **\"silent\"**\n * @typedef {('info'|'warn'|'error'|'trace'|'debug'|'silent')} LogLevel\n * @public\n */\n\n/**\n * Custom logger interface:\n * @typedef {object} Logger\n * @public\n * @property {function(String)} trace - Prints a trace message\n * @property {function(String)} debug - Prints a debug message\n * @property {function(String)} info - Prints an information message\n * @property {function(String)} warn - Prints a warning message\n * @property {function(String)} error - Prints an error message\n */\n\n/**\n * All optional. Pass them to `new Critters({ ... })`.\n * @public\n * @typedef Options\n * @property {String} path     Base path location of the CSS files _(default: `''`)_\n * @property {String} publicPath     Public path of the CSS resources. This prefix is removed from the href _(default: `''`)_\n * @property {Boolean} external     Inline styles from external stylesheets _(default: `true`)_\n * @property {Number} inlineThreshold Inline external stylesheets smaller than a given size _(default: `0`)_\n * @property {Number} minimumExternalSize If the non-critical external stylesheet would be below this size, just inline it _(default: `0`)_\n * @property {Boolean} pruneSource  Remove inlined rules from the external stylesheet _(default: `false`)_\n * @property {Boolean} mergeStylesheets Merged inlined stylesheets into a single <style> tag _(default: `true`)_\n * @property {String[]} additionalStylesheets Glob for matching other stylesheets to be used while looking for critical CSS _(default: ``)_.\n * @property {String} preload       Which {@link PreloadStrategy preload strategy} to use\n * @property {Boolean} noscriptFallback Add `<noscript>` fallback to JS-based strategies\n * @property {Boolean} inlineFonts  Inline critical font-face rules _(default: `false`)_\n * @property {Boolean} preloadFonts Preloads critical fonts _(default: `true`)_\n * @property {Boolean} fonts        Shorthand for setting `inlineFonts`+`preloadFonts`\n *  - Values:\n *  - `true` to inline critical font-face rules and preload the fonts\n *  - `false` to don't inline any font-face rules and don't preload fonts\n * @property {String} keyframes     Controls which keyframes rules are inlined.\n *  - Values:\n *  - `\"critical\"`: _(default)_ inline keyframes rules used by the critical CSS\n *  - `\"all\"` inline all keyframes rules\n *  - `\"none\"` remove all keyframes rules\n * @property {Boolean} compress     Compress resulting critical CSS _(default: `true`)_\n * @property {String} logLevel      Controls {@link LogLevel log level} of the plugin _(default: `\"info\"`)_\n * @property {object} logger        Provide a custom logger interface {@link Logger logger}\n */\n\nexport default class Critters {\n  /** @private */\n  constructor(options) {\n    this.options = Object.assign(\n      {\n        logLevel: 'info',\n        path: '',\n        publicPath: '',\n        reduceInlineStyles: true,\n        pruneSource: false,\n        additionalStylesheets: []\n      },\n      options || {}\n    );\n\n    this.urlFilter = this.options.filter;\n    if (this.urlFilter instanceof RegExp) {\n      this.urlFilter = this.urlFilter.test.bind(this.urlFilter);\n    }\n\n    this.logger = this.options.logger || createLogger(this.options.logLevel);\n  }\n\n  /**\n   * Read the contents of a file from the specified filesystem or disk\n   */\n  readFile(filename) {\n    const fs = this.fs;\n    return new Promise((resolve, reject) => {\n      const callback = (err, data) => {\n        if (err) reject(err);\n        else resolve(data);\n      };\n      if (fs && fs.readFile) {\n        fs.readFile(filename, callback);\n      } else {\n        require('fs').readFile(filename, 'utf8', callback);\n      }\n    });\n  }\n\n  /**\n   * Apply critical CSS processing to the html\n   */\n  async process(html) {\n    const start = process.hrtime.bigint();\n\n    // Parse the generated HTML in a DOM we can mutate\n    const document = createDocument(html);\n\n    if (this.options.additionalStylesheets.length > 0) {\n      this.embedAdditionalStylesheet(document);\n    }\n\n    // `external:false` skips processing of external sheets\n    if (this.options.external !== false) {\n      const externalSheets = [].slice.call(\n        document.querySelectorAll('link[rel=\"stylesheet\"]')\n      );\n\n      await Promise.all(\n        externalSheets.map((link) => this.embedLinkedStylesheet(link, document))\n      );\n    }\n\n    // go through all the style tags in the document and reduce them to only critical CSS\n    const styles = this.getAffectedStyleTags(document);\n\n    await Promise.all(\n      styles.map((style) => this.processStyle(style, document))\n    );\n\n    if (this.options.mergeStylesheets !== false && styles.length !== 0) {\n      await this.mergeStylesheets(document);\n    }\n\n    // serialize the document back to HTML and we're done\n    const output = serializeDocument(document);\n    const end = process.hrtime.bigint();\n    this.logger.info('Time ' + parseFloat(end - start) / 1000000.0);\n    return output;\n  }\n\n  /**\n   * Get the style tags that need processing\n   */\n  getAffectedStyleTags(document) {\n    const styles = [].slice.call(document.querySelectorAll('style'));\n\n    // `inline:false` skips processing of inline stylesheets\n    if (this.options.reduceInlineStyles === false) {\n      return styles.filter((style) => style.$$external);\n    }\n    return styles;\n  }\n\n  async mergeStylesheets(document) {\n    const styles = this.getAffectedStyleTags(document);\n    if (styles.length === 0) {\n      this.logger.warn(\n        'Merging inline stylesheets into a single <style> tag skipped, no inline stylesheets to merge'\n      );\n      return;\n    }\n    const first = styles[0];\n    let sheet = first.textContent;\n\n    for (let i = 1; i < styles.length; i++) {\n      const node = styles[i];\n      sheet += node.textContent;\n      node.remove();\n    }\n\n    first.textContent = sheet;\n  }\n\n  /**\n   * Given href, find the corresponding CSS asset\n   */\n  async getCssAsset(href) {\n    const outputPath = this.options.path;\n    const publicPath = this.options.publicPath;\n\n    // CHECK - the output path\n    // path on disk (with output.publicPath removed)\n    let normalizedPath = href.replace(/^\\//, '');\n    const pathPrefix = (publicPath || '').replace(/(^\\/|\\/$)/g, '') + '/';\n    if (normalizedPath.indexOf(pathPrefix) === 0) {\n      normalizedPath = normalizedPath\n        .substring(pathPrefix.length)\n        .replace(/^\\//, '');\n    }\n    const filename = path.resolve(outputPath, normalizedPath);\n\n    let sheet;\n\n    try {\n      sheet = await this.readFile(filename);\n    } catch (e) {\n      this.logger.warn(`Unable to locate stylesheet: ${filename}`);\n    }\n\n    return sheet;\n  }\n\n  checkInlineThreshold(link, style, sheet) {\n    if (\n      this.options.inlineThreshold &&\n      sheet.length < this.options.inlineThreshold\n    ) {\n      const href = style.$$name;\n      style.$$reduce = false;\n      this.logger.info(\n        `\\u001b[32mInlined all of ${href} (${sheet.length} was below the threshold of ${this.options.inlineThreshold})\\u001b[39m`\n      );\n      link.remove();\n      return true;\n    }\n\n    return false;\n  }\n\n  /**\n   * Inline the stylesheets from options.additionalStylesheets (assuming it passes `options.filter`)\n   */\n  async embedAdditionalStylesheet(document) {\n    const styleSheetsIncluded = [];\n\n    const sources = await Promise.all(\n      this.options.additionalStylesheets.map((cssFile) => {\n        if (styleSheetsIncluded.includes(cssFile)) {\n          return;\n        }\n        styleSheetsIncluded.push(cssFile);\n        const style = document.createElement('style');\n        style.$$external = true;\n        return this.getCssAsset(cssFile, style).then((sheet) => [sheet, style]);\n      })\n    );\n\n    sources.forEach(([sheet, style]) => {\n      if (!sheet) return;\n      style.textContent = sheet;\n      document.head.appendChild(style);\n    });\n  }\n\n  /**\n   * Inline the target stylesheet referred to by a <link rel=\"stylesheet\"> (assuming it passes `options.filter`)\n   */\n  async embedLinkedStylesheet(link, document) {\n    const href = link.getAttribute('href');\n    const media = link.getAttribute('media');\n\n    const preloadMode = this.options.preload;\n\n    // skip filtered resources, or network resources if no filter is provided\n    if (this.urlFilter ? this.urlFilter(href) : !(href || '').match(/\\.css$/)) {\n      return Promise.resolve();\n    }\n\n    // the reduced critical CSS gets injected into a new <style> tag\n    const style = document.createElement('style');\n    style.$$external = true;\n    const sheet = await this.getCssAsset(href, style);\n\n    if (!sheet) {\n      return;\n    }\n\n    style.textContent = sheet;\n    style.$$name = href;\n    style.$$links = [link];\n    link.parentNode.insertBefore(style, link);\n\n    if (this.checkInlineThreshold(link, style, sheet)) {\n      return;\n    }\n\n    // CSS loader is only injected for the first sheet, then this becomes an empty string\n    let cssLoaderPreamble =\n      \"function $loadcss(u,m,l){(l=document.createElement('link')).rel='stylesheet';l.href=u;document.head.appendChild(l)}\";\n    const lazy = preloadMode === 'js-lazy';\n    if (lazy) {\n      cssLoaderPreamble = cssLoaderPreamble.replace(\n        'l.href',\n        \"l.media='print';l.onload=function(){l.media=m};l.href\"\n      );\n    }\n\n    // Allow disabling any mutation of the stylesheet link:\n    if (preloadMode === false) return;\n\n    let noscriptFallback = false;\n\n    if (preloadMode === 'body') {\n      document.body.appendChild(link);\n    } else {\n      link.setAttribute('rel', 'preload');\n      link.setAttribute('as', 'style');\n      if (preloadMode === 'js' || preloadMode === 'js-lazy') {\n        const script = document.createElement('script');\n        const js = `${cssLoaderPreamble}$loadcss(${JSON.stringify(href)}${\n          lazy ? ',' + JSON.stringify(media || 'all') : ''\n        })`;\n        // script.appendChild(document.createTextNode(js));\n        script.textContent = js;\n        link.parentNode.insertBefore(script, link.nextSibling);\n        style.$$links.push(script);\n        cssLoaderPreamble = '';\n        noscriptFallback = true;\n      } else if (preloadMode === 'media') {\n        // @see https://github.com/filamentgroup/loadCSS/blob/af1106cfe0bf70147e22185afa7ead96c01dec48/src/loadCSS.js#L26\n        link.setAttribute('rel', 'stylesheet');\n        link.removeAttribute('as');\n        link.setAttribute('media', 'print');\n        link.setAttribute('onload', `this.media='${media || 'all'}'`);\n        noscriptFallback = true;\n      } else if (preloadMode === 'swap-high') {\n        // @see http://filamentgroup.github.io/loadCSS/test/new-high.html\n        link.setAttribute('rel', 'alternate stylesheet preload');\n        link.setAttribute('title', 'styles');\n        link.setAttribute('onload', `this.title='';this.rel='stylesheet'`);\n        noscriptFallback = true;\n      } else if (preloadMode === 'swap') {\n        link.setAttribute('onload', \"this.rel='stylesheet'\");\n        noscriptFallback = true;\n      } else {\n        const bodyLink = document.createElement('link');\n        bodyLink.setAttribute('rel', 'stylesheet');\n        if (media) bodyLink.setAttribute('media', media);\n        bodyLink.setAttribute('href', href);\n        document.body.appendChild(bodyLink);\n        style.$$links.push(bodyLink);\n      }\n    }\n\n    if (this.options.noscriptFallback !== false && noscriptFallback) {\n      const noscript = document.createElement('noscript');\n      const noscriptLink = document.createElement('link');\n      noscriptLink.setAttribute('rel', 'stylesheet');\n      noscriptLink.setAttribute('href', href);\n      if (media) noscriptLink.setAttribute('media', media);\n      noscript.appendChild(noscriptLink);\n      link.parentNode.insertBefore(noscript, link.nextSibling);\n      style.$$links.push(noscript);\n    }\n  }\n\n  /**\n   * Prune the source CSS files\n   */\n  pruneSource(style, before, sheetInverse) {\n    // if external stylesheet would be below minimum size, just inline everything\n    const minSize = this.options.minimumExternalSize;\n    const name = style.$$name;\n    if (minSize && sheetInverse.length < minSize) {\n      this.logger.info(\n        `\\u001b[32mInlined all of ${name} (non-critical external stylesheet would have been ${sheetInverse.length}b, which was below the threshold of ${minSize})\\u001b[39m`\n      );\n      style.textContent = before;\n      // remove any associated external resources/loaders:\n      if (style.$$links) {\n        for (const link of style.$$links) {\n          const parent = link.parentNode;\n          if (parent) parent.removeChild(link);\n        }\n      }\n\n      return true;\n    }\n\n    return false;\n  }\n\n  /**\n   * Parse the stylesheet within a <style> element, then reduce it to contain only rules used by the document.\n   */\n  async processStyle(style, document) {\n    if (style.$$reduce === false) return;\n\n    const name = style.$$name ? style.$$name.replace(/^\\//, '') : 'inline CSS';\n    const options = this.options;\n    // const document = style.ownerDocument;\n    const head = document.querySelector('head');\n    let keyframesMode = options.keyframes || 'critical';\n    // we also accept a boolean value for options.keyframes\n    if (keyframesMode === true) keyframesMode = 'all';\n    if (keyframesMode === false) keyframesMode = 'none';\n\n    let sheet = style.textContent;\n\n    // store a reference to the previous serialized stylesheet for reporting stats\n    const before = sheet;\n\n    // Skip empty stylesheets\n    if (!sheet) return;\n\n    const ast = parseStylesheet(sheet);\n    const astInverse = options.pruneSource ? parseStylesheet(sheet) : null;\n\n    // a string to search for font names (very loose)\n    let criticalFonts = '';\n\n    const failedSelectors = [];\n\n    const criticalKeyframeNames = [];\n\n    // Walk all CSS rules, marking unused rules with `.$$remove=true` for removal in the second pass.\n    // This first pass is also used to collect font and keyframe usage used in the second pass.\n    walkStyleRules(\n      ast,\n      markOnly((rule) => {\n        if (rule.type === 'rule') {\n          // Filter the selector list down to only those match\n          rule.filterSelectors((sel) => {\n            // Strip pseudo-elements and pseudo-classes, since we only care that their associated elements exist.\n            // This means any selector for a pseudo-element or having a pseudo-class will be inlined if the rest of the selector matches.\n            if (sel === ':root' || sel.match(/^::?(before|after)$/)) {\n              return true;\n            }\n            sel = sel\n              .replace(/(?<!\\\\)::?[a-z-]+(?![a-z-(])/gi, '')\n              .replace(/::?not\\(\\s*\\)/g, '')\n              .trim();\n            if (!sel) return false;\n\n            try {\n              return document.querySelector(sel) != null;\n            } catch (e) {\n              failedSelectors.push(sel + ' -> ' + e.message);\n              return false;\n            }\n          });\n          // If there are no matched selectors, remove the rule:\n          if (rule.selectors.length === 0) {\n            return false;\n          }\n\n          if (rule.declarations) {\n            for (let i = 0; i < rule.declarations.length; i++) {\n              const decl = rule.declarations[i];\n\n              // detect used fonts\n              if (decl.property && decl.property.match(/\\bfont(-family)?\\b/i)) {\n                criticalFonts += ' ' + decl.value;\n              }\n\n              // detect used keyframes\n              if (\n                decl.property === 'animation' ||\n                decl.property === 'animation-name'\n              ) {\n                // @todo: parse animation declarations and extract only the name. for now we'll do a lazy match.\n                const names = decl.value.split(/\\s+/);\n                for (let j = 0; j < names.length; j++) {\n                  const name = names[j].trim();\n                  if (name) criticalKeyframeNames.push(name);\n                }\n              }\n            }\n          }\n        }\n\n        // keep font rules, they're handled in the second pass:\n        if (rule.type === 'font-face') return;\n\n        // If there are no remaining rules, remove the whole rule:\n        const rules = rule.rules && rule.rules.filter((rule) => !rule.$$remove);\n        return !rules || rules.length !== 0;\n      })\n    );\n\n    if (failedSelectors.length !== 0) {\n      this.logger.warn(\n        `${\n          failedSelectors.length\n        } rules skipped due to selector errors:\\n  ${failedSelectors.join(\n          '\\n  '\n        )}`\n      );\n    }\n\n    const shouldPreloadFonts =\n      options.fonts === true || options.preloadFonts === true;\n    const shouldInlineFonts =\n      options.fonts !== false && options.inlineFonts === true;\n\n    const preloadedFonts = [];\n    // Second pass, using data picked up from the first\n    walkStyleRulesWithReverseMirror(ast, astInverse, (rule) => {\n      // remove any rules marked in the first pass\n      if (rule.$$remove === true) return false;\n\n      applyMarkedSelectors(rule);\n\n      // prune @keyframes rules\n      if (rule.type === 'keyframes') {\n        if (keyframesMode === 'none') return false;\n        if (keyframesMode === 'all') return true;\n        return criticalKeyframeNames.indexOf(rule.name) !== -1;\n      }\n\n      // prune @font-face rules\n      if (rule.type === 'font-face') {\n        let family, src;\n        for (let i = 0; i < rule.declarations.length; i++) {\n          const decl = rule.declarations[i];\n          if (decl.property === 'src') {\n            // @todo parse this properly and generate multiple preloads with type=\"font/woff2\" etc\n            src = (decl.value.match(/url\\s*\\(\\s*(['\"]?)(.+?)\\1\\s*\\)/) || [])[2];\n          } else if (decl.property === 'font-family') {\n            family = decl.value;\n          }\n        }\n\n        if (src && shouldPreloadFonts && preloadedFonts.indexOf(src) === -1) {\n          preloadedFonts.push(src);\n          const preload = document.createElement('link');\n          preload.setAttribute('rel', 'preload');\n          preload.setAttribute('as', 'font');\n          preload.setAttribute('crossorigin', 'anonymous');\n          preload.setAttribute('href', src.trim());\n          head.appendChild(preload);\n        }\n\n        // if we're missing info, if the font is unused, or if critical font inlining is disabled, remove the rule:\n        if (\n          !family ||\n          !src ||\n          criticalFonts.indexOf(family) === -1 ||\n          !shouldInlineFonts\n        ) {\n          return false;\n        }\n      }\n    });\n\n    sheet = serializeStylesheet(ast, {\n      compress: this.options.compress !== false\n    }).trim();\n\n    // If all rules were removed, get rid of the style element entirely\n    if (sheet.trim().length === 0) {\n      if (style.parentNode) {\n        style.remove();\n      }\n      return;\n    }\n\n    let afterText = '';\n    let styleInlinedCompletely = false;\n    if (options.pruneSource) {\n      const sheetInverse = serializeStylesheet(astInverse, {\n        compress: this.options.compress !== false\n      });\n\n      styleInlinedCompletely = this.pruneSource(style, before, sheetInverse);\n\n      if (styleInlinedCompletely) {\n        const percent = (sheetInverse.length / before.length) * 100;\n        afterText = `, reducing non-inlined size ${\n          percent | 0\n        }% to ${prettyBytes(sheetInverse.length)}`;\n      }\n    }\n\n    // replace the inline stylesheet with its critical'd counterpart\n    if (!styleInlinedCompletely) {\n      style.textContent = sheet;\n    }\n\n    // output stats\n    const percent = ((sheet.length / before.length) * 100) | 0;\n    this.logger.info(\n      '\\u001b[32mInlined ' +\n        prettyBytes(sheet.length) +\n        ' (' +\n        percent +\n        '% of original ' +\n        prettyBytes(before.length) +\n        ') of ' +\n        name +\n        afterText +\n        '.\\u001b[39m'\n    );\n  }\n}\n"],"names":["this","require$$0","require$$1","require$$2","require$$3","decode_1","encode","encode_1","foreignNames","entities","ElementType","getOuterHTML","isTag","require$$4","require$$5","BaseFuncs","compile","parse","DomUtils","falseFunc","getText","hasAttrib","trueFunc","getNCheck","getParent","getChildren","getSiblings","getName","attributes","procedure","sortRules","Rules","filters","Pseudos","existsOne","findOne","findAll","compileUnsafe","compileToken","treeAdapter","require","PARSE5_OPTS","createDocument","html","document","parse5","defineProperties","DocumentExtensions","scratch","createElement","$$Node","constructor","elementProto","Object","getPrototypeOf","ElementExtensions","ownerDocument","serializeDocument","serialize","nodeName","get","tagName","toUpperCase","id","reflectedProperty","className","insertBefore","child","referenceNode","appendChild","removeChild","detachNode","remove","textContent","set","text","children","insertText","setAttribute","name","value","attribs","removeAttribute","getAttribute","hasAttribute","getAttributeNode","specified","nodeType","contentType","documentElement","childNodes","filter","String","toLowerCase","compatMode","quirks","getDocumentMode","body","querySelector","createTextNode","Node","type","data","parent","prev","next","sel","select","selectOne","querySelectorAll","obj","properties","i","defineProperty","attributeName","node","Array","isArray","map","join","isElementNode","isTextNode","parseStylesheet","stylesheet","css","serializeStylesheet","ast","options","stringify","markOnly","predicate","rule","selectors","$$remove","$$markedSelectors","_other","applyMarkedSelectors","walkStyleRules","iterator","rules","undefined","filterSelectors","walkStyleRulesWithReverseMirror","node2","splitFilter","index","rules2","rule2","a","b","aOut","bOut","length","push","LOG_LEVELS","defaultLogger","trace","msg","console","debug","warn","chalk","yellow","error","bold","red","info","blue","silent","createLogger","logLevel","logLevelIdx","indexOf","reduce","logger","recover","result","e","then","Critters","assign","path","publicPath","reduceInlineStyles","pruneSource","additionalStylesheets","urlFilter","RegExp","test","bind","readFile","filename","fs","Promise","resolve","reject","callback","err","process","styles","getAffectedStyleTags","all","style","processStyle","output","end","hrtime","bigint","parseFloat","start","mergeStylesheets","embedAdditionalStylesheet","external","externalSheets","slice","call","link","embedLinkedStylesheet","$$external","first","sheet","getCssAsset","href","outputPath","normalizedPath","replace","pathPrefix","substring","checkInlineThreshold","inlineThreshold","$$name","$$reduce","styleSheetsIncluded","cssFile","includes","sources","forEach","head","media","preloadMode","preload","match","$$links","parentNode","cssLoaderPreamble","lazy","noscriptFallback","script","js","JSON","nextSibling","bodyLink","noscript","noscriptLink","before","sheetInverse","minSize","minimumExternalSize","keyframesMode","keyframes","astInverse","criticalFonts","failedSelectors","criticalKeyframeNames","trim","message","declarations","decl","property","names","split","j","shouldPreloadFonts","fonts","preloadFonts","shouldInlineFonts","inlineFonts","preloadedFonts","family","src","compress","afterText","styleInlinedCompletely","percent","prettyBytes"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA,kBAAc,GAAG;AACjB,CAAC,IAAI,EAAE,MAAM;AACb,CAAC,SAAS,EAAE,WAAW;AACvB,CAAC,OAAO,EAAE,SAAS;AACnB,CAAC,MAAM,EAAE,QAAQ;AACjB,CAAC,KAAK,EAAE,OAAO;AACf,CAAC,GAAG,EAAE,KAAK;AACX,CAAC,KAAK,EAAE,OAAO;AACf,CAAC,OAAO,EAAE,SAAS;AACnB;AACA,CAAC,KAAK,EAAE,SAAS,IAAI,CAAC;AACtB,EAAE,OAAO,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC;AAChF,EAAE;AACF,CAAC;;;ACdD,AACA,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9D;AACA;AACA;AACA;AACA;AACA,SAAS,KAAK,CAAC,IAAI,EAAE;AACrB,IAAI,QAAQ,IAAI,CAAC,IAAI,KAAK,KAAK;AAC/B,QAAQ,IAAI,CAAC,IAAI,KAAK,QAAQ;AAC9B,QAAQ,IAAI,CAAC,IAAI,KAAK,OAAO,cAAc;AAC3C,CAAC;AACD,aAAa,GAAG,KAAK,CAAC;AACtB;AACA,YAAY,GAAG,MAAM,YAAY;AACjC,iBAAiB,GAAG,WAAW,iBAAiB;AAChD,eAAe,GAAG,SAAS,eAAe;AAC1C,cAAc,GAAG,QAAQ,cAAc;AACvC,aAAa,GAAG,OAAO,aAAa;AACpC,WAAW,GAAG,KAAK,WAAW;AAC9B,aAAa,GAAG,OAAO,aAAa;AACpC,eAAe,GAAG,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
