mirror of
https://gitlab.com/upRootNutrition/obsidian.git
synced 2025-06-15 06:25:12 -05:00
21186 lines
1.5 MiB
21186 lines
1.5 MiB
/*
|
|
THIS IS A GENERATED/BUNDLED FILE BY ROLLUP
|
|
if you want to view the source visit the plugins github repository
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
var obsidian = require('obsidian');
|
|
var url_1 = require('url');
|
|
var path = require('path');
|
|
var EventEmitter = require('events');
|
|
var util_1 = require('util');
|
|
var require$$0$3 = require('stream');
|
|
var fs = require('fs');
|
|
var http = require('http');
|
|
var https = require('https');
|
|
var require$$0$2 = require('dns');
|
|
var os = require('os');
|
|
var require$$0$4 = require('buffer');
|
|
var zlib = require('zlib');
|
|
var http2 = require('http2');
|
|
var tls = require('tls');
|
|
var net = require('net');
|
|
|
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
|
|
var url_1__default = /*#__PURE__*/_interopDefaultLegacy(url_1);
|
|
var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
|
|
var EventEmitter__default = /*#__PURE__*/_interopDefaultLegacy(EventEmitter);
|
|
var util_1__default = /*#__PURE__*/_interopDefaultLegacy(util_1);
|
|
var require$$0__default$1 = /*#__PURE__*/_interopDefaultLegacy(require$$0$3);
|
|
var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
|
|
var http__default = /*#__PURE__*/_interopDefaultLegacy(http);
|
|
var https__default = /*#__PURE__*/_interopDefaultLegacy(https);
|
|
var require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0$2);
|
|
var os__default = /*#__PURE__*/_interopDefaultLegacy(os);
|
|
var require$$0__default$2 = /*#__PURE__*/_interopDefaultLegacy(require$$0$4);
|
|
var zlib__default = /*#__PURE__*/_interopDefaultLegacy(zlib);
|
|
var http2__default = /*#__PURE__*/_interopDefaultLegacy(http2);
|
|
var tls__default = /*#__PURE__*/_interopDefaultLegacy(tls);
|
|
var net__default = /*#__PURE__*/_interopDefaultLegacy(net);
|
|
|
|
/*! *****************************************************************************
|
|
Copyright (c) Microsoft Corporation.
|
|
|
|
Permission to use, copy, modify, and/or distribute this software for any
|
|
purpose with or without fee is hereby granted.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
PERFORMANCE OF THIS SOFTWARE.
|
|
***************************************************************************** */
|
|
|
|
function __awaiter(thisArg, _arguments, P, generator) {
|
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
});
|
|
}
|
|
|
|
// Generic options
|
|
class AnalyzerOptions {
|
|
constructor(heuristic_replimit) {
|
|
this.heuristic_replimit = heuristic_replimit;
|
|
}
|
|
}
|
|
|
|
// Abstract class
|
|
class Analyzer {
|
|
constructor(analyzerOptions) {
|
|
this.options = analyzerOptions;
|
|
}
|
|
|
|
// Subclasser must implement
|
|
// Return boolean
|
|
isVulnerable(regExp) {
|
|
return false;
|
|
}
|
|
|
|
// Subclass must implement
|
|
// Returns an AttackString or null
|
|
genAttackString(regExp) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
var analyzer$1 = function(re, replimit) {
|
|
// Build an AST
|
|
let myRegExp = null;
|
|
let ast = null;
|
|
try {
|
|
// Construct a RegExp object
|
|
if (re instanceof RegExp) {
|
|
myRegExp = re;
|
|
} else if (typeof re === "string") {
|
|
myRegExp = new RegExp(re);
|
|
} else {
|
|
myRegExp = new RegExp(String(re));
|
|
}
|
|
|
|
// Build an AST
|
|
ast = regexpTree.parse(myRegExp);
|
|
} catch (err) {
|
|
// Invalid or unparseable input
|
|
return false;
|
|
}
|
|
|
|
let currentStarHeight = 0;
|
|
let maxObservedStarHeight = 0;
|
|
|
|
let repetitionCount = 0;
|
|
|
|
regexpTree.traverse(ast, {
|
|
Repetition: {
|
|
pre({ node }) {
|
|
repetitionCount++;
|
|
|
|
currentStarHeight++;
|
|
if (maxObservedStarHeight < currentStarHeight) {
|
|
maxObservedStarHeight = currentStarHeight;
|
|
}
|
|
},
|
|
|
|
post({ node }) {
|
|
currentStarHeight--;
|
|
}
|
|
}
|
|
});
|
|
|
|
return maxObservedStarHeight <= 1 && repetitionCount <= replimit;
|
|
};
|
|
|
|
var analyzer$1 = {
|
|
"AnalyzerOptions": AnalyzerOptions,
|
|
"Analyzer": Analyzer,
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* A regexp-tree plugin to translate `/./s` to `/[\0-\uFFFF]/`.
|
|
*/
|
|
|
|
var compatDotallSTransform = {
|
|
|
|
// Whether `u` flag present. In which case we transform to
|
|
// \u{10FFFF} instead of \uFFFF.
|
|
_hasUFlag: false,
|
|
|
|
// Only run this plugin if we have `s` flag.
|
|
shouldRun: function shouldRun(ast) {
|
|
var shouldRun = ast.flags.includes('s');
|
|
|
|
if (!shouldRun) {
|
|
return false;
|
|
}
|
|
|
|
// Strip the `s` flag.
|
|
ast.flags = ast.flags.replace('s', '');
|
|
|
|
// Whether we have also `u`.
|
|
this._hasUFlag = ast.flags.includes('u');
|
|
|
|
return true;
|
|
},
|
|
Char: function Char(path) {
|
|
var node = path.node;
|
|
|
|
|
|
if (node.kind !== 'meta' || node.value !== '.') {
|
|
return;
|
|
}
|
|
|
|
var toValue = '\\uFFFF';
|
|
var toSymbol = '\uFFFF';
|
|
|
|
if (this._hasUFlag) {
|
|
toValue = '\\u{10FFFF}';
|
|
toSymbol = '\uDBFF\uDFFF';
|
|
}
|
|
|
|
path.replace({
|
|
type: 'CharacterClass',
|
|
expressions: [{
|
|
type: 'ClassRange',
|
|
from: {
|
|
type: 'Char',
|
|
value: '\\0',
|
|
kind: 'decimal',
|
|
symbol: '\0'
|
|
},
|
|
to: {
|
|
type: 'Char',
|
|
value: toValue,
|
|
kind: 'unicode',
|
|
symbol: toSymbol
|
|
}
|
|
}]
|
|
});
|
|
}
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* A regexp-tree plugin to translate `/(?<name>a)\k<name>/` to `/(a)\1/`.
|
|
*/
|
|
|
|
var compatNamedCapturingGroupsTransform = {
|
|
// To track the names of the groups, and return them
|
|
// in the transform result state.
|
|
//
|
|
// A map from name to number: {foo: 2, bar: 4}
|
|
_groupNames: {},
|
|
|
|
/**
|
|
* Initialises the trasnform.
|
|
*/
|
|
init: function init() {
|
|
this._groupNames = {};
|
|
},
|
|
|
|
|
|
/**
|
|
* Returns extra state, which eventually is returned to
|
|
*/
|
|
getExtra: function getExtra() {
|
|
return this._groupNames;
|
|
},
|
|
Group: function Group(path) {
|
|
var node = path.node;
|
|
|
|
|
|
if (!node.name) {
|
|
return;
|
|
}
|
|
|
|
// Record group name.
|
|
this._groupNames[node.name] = node.number;
|
|
|
|
delete node.name;
|
|
delete node.nameRaw;
|
|
},
|
|
Backreference: function Backreference(path) {
|
|
var node = path.node;
|
|
|
|
|
|
if (node.kind !== 'name') {
|
|
return;
|
|
}
|
|
|
|
node.kind = 'number';
|
|
node.reference = node.number;
|
|
delete node.referenceRaw;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* A regexp-tree plugin to remove `x` flag `/foo/x` to `/foo/`.
|
|
*
|
|
* Note: other features of `x` flags (whitespace, comments) are
|
|
* already removed at parsing stage.
|
|
*/
|
|
|
|
var compatXFlagTransform = {
|
|
RegExp: function RegExp(_ref) {
|
|
var node = _ref.node;
|
|
|
|
if (node.flags.includes('x')) {
|
|
node.flags = node.flags.replace('x', '');
|
|
}
|
|
}
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
var transforms$1 = {
|
|
// "dotAll" `s` flag
|
|
dotAll: compatDotallSTransform,
|
|
|
|
// Named capturing groups.
|
|
namedCapturingGroups: compatNamedCapturingGroupsTransform,
|
|
|
|
// `x` flag
|
|
xFlag: compatXFlagTransform
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* Helper `gen` function calls node type handler.
|
|
*/
|
|
|
|
function gen$1(node) {
|
|
return node ? generator$1[node.type](node) : '';
|
|
}
|
|
|
|
/**
|
|
* AST handler.
|
|
*/
|
|
var generator$1 = {
|
|
RegExp: function RegExp(node) {
|
|
return '/' + gen$1(node.body) + '/' + node.flags;
|
|
},
|
|
Alternative: function Alternative(node) {
|
|
return (node.expressions || []).map(gen$1).join('');
|
|
},
|
|
Disjunction: function Disjunction(node) {
|
|
return gen$1(node.left) + '|' + gen$1(node.right);
|
|
},
|
|
Group: function Group(node) {
|
|
var expression = gen$1(node.expression);
|
|
|
|
if (node.capturing) {
|
|
// A named group.
|
|
if (node.name) {
|
|
return '(?<' + (node.nameRaw || node.name) + '>' + expression + ')';
|
|
}
|
|
|
|
return '(' + expression + ')';
|
|
}
|
|
|
|
return '(?:' + expression + ')';
|
|
},
|
|
Backreference: function Backreference(node) {
|
|
switch (node.kind) {
|
|
case 'number':
|
|
return '\\' + node.reference;
|
|
case 'name':
|
|
return '\\k<' + (node.referenceRaw || node.reference) + '>';
|
|
default:
|
|
throw new TypeError('Unknown Backreference kind: ' + node.kind);
|
|
}
|
|
},
|
|
Assertion: function Assertion(node) {
|
|
switch (node.kind) {
|
|
case '^':
|
|
case '$':
|
|
case '\\b':
|
|
case '\\B':
|
|
return node.kind;
|
|
|
|
case 'Lookahead':
|
|
{
|
|
var assertion = gen$1(node.assertion);
|
|
|
|
if (node.negative) {
|
|
return '(?!' + assertion + ')';
|
|
}
|
|
|
|
return '(?=' + assertion + ')';
|
|
}
|
|
|
|
case 'Lookbehind':
|
|
{
|
|
var _assertion = gen$1(node.assertion);
|
|
|
|
if (node.negative) {
|
|
return '(?<!' + _assertion + ')';
|
|
}
|
|
|
|
return '(?<=' + _assertion + ')';
|
|
}
|
|
|
|
default:
|
|
throw new TypeError('Unknown Assertion kind: ' + node.kind);
|
|
}
|
|
},
|
|
CharacterClass: function CharacterClass(node) {
|
|
var expressions = node.expressions.map(gen$1).join('');
|
|
|
|
if (node.negative) {
|
|
return '[^' + expressions + ']';
|
|
}
|
|
|
|
return '[' + expressions + ']';
|
|
},
|
|
ClassRange: function ClassRange(node) {
|
|
return gen$1(node.from) + '-' + gen$1(node.to);
|
|
},
|
|
Repetition: function Repetition(node) {
|
|
return '' + gen$1(node.expression) + gen$1(node.quantifier);
|
|
},
|
|
Quantifier: function Quantifier(node) {
|
|
var quantifier = void 0;
|
|
var greedy = node.greedy ? '' : '?';
|
|
|
|
switch (node.kind) {
|
|
case '+':
|
|
case '?':
|
|
case '*':
|
|
quantifier = node.kind;
|
|
break;
|
|
case 'Range':
|
|
// Exact: {1}
|
|
if (node.from === node.to) {
|
|
quantifier = '{' + node.from + '}';
|
|
}
|
|
// Open: {1,}
|
|
else if (!node.to) {
|
|
quantifier = '{' + node.from + ',}';
|
|
}
|
|
// Closed: {1,3}
|
|
else {
|
|
quantifier = '{' + node.from + ',' + node.to + '}';
|
|
}
|
|
break;
|
|
default:
|
|
throw new TypeError('Unknown Quantifier kind: ' + node.kind);
|
|
}
|
|
|
|
return '' + quantifier + greedy;
|
|
},
|
|
Char: function Char(node) {
|
|
var value = node.value;
|
|
|
|
switch (node.kind) {
|
|
case 'simple':
|
|
{
|
|
if (node.escaped) {
|
|
return '\\' + value;
|
|
}
|
|
return value;
|
|
}
|
|
|
|
case 'hex':
|
|
case 'unicode':
|
|
case 'oct':
|
|
case 'decimal':
|
|
case 'control':
|
|
case 'meta':
|
|
return value;
|
|
|
|
default:
|
|
throw new TypeError('Unknown Char kind: ' + node.kind);
|
|
}
|
|
},
|
|
UnicodeProperty: function UnicodeProperty(node) {
|
|
var escapeChar = node.negative ? 'P' : 'p';
|
|
var namePart = void 0;
|
|
|
|
if (!node.shorthand && !node.binary) {
|
|
namePart = node.name + '=';
|
|
} else {
|
|
namePart = '';
|
|
}
|
|
|
|
return '\\' + escapeChar + '{' + namePart + node.value + '}';
|
|
}
|
|
};
|
|
|
|
var generator_1 = {
|
|
/**
|
|
* Generates a regexp string from an AST.
|
|
*
|
|
* @param Object ast - an AST node
|
|
*/
|
|
generate: gen$1
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
var NON_BINARY_PROP_NAMES_TO_ALIASES = {
|
|
General_Category: 'gc',
|
|
Script: 'sc',
|
|
Script_Extensions: 'scx'
|
|
};
|
|
|
|
var NON_BINARY_ALIASES_TO_PROP_NAMES = inverseMap(NON_BINARY_PROP_NAMES_TO_ALIASES);
|
|
|
|
var BINARY_PROP_NAMES_TO_ALIASES = {
|
|
ASCII: 'ASCII',
|
|
ASCII_Hex_Digit: 'AHex',
|
|
Alphabetic: 'Alpha',
|
|
Any: 'Any',
|
|
Assigned: 'Assigned',
|
|
Bidi_Control: 'Bidi_C',
|
|
Bidi_Mirrored: 'Bidi_M',
|
|
Case_Ignorable: 'CI',
|
|
Cased: 'Cased',
|
|
Changes_When_Casefolded: 'CWCF',
|
|
Changes_When_Casemapped: 'CWCM',
|
|
Changes_When_Lowercased: 'CWL',
|
|
Changes_When_NFKC_Casefolded: 'CWKCF',
|
|
Changes_When_Titlecased: 'CWT',
|
|
Changes_When_Uppercased: 'CWU',
|
|
Dash: 'Dash',
|
|
Default_Ignorable_Code_Point: 'DI',
|
|
Deprecated: 'Dep',
|
|
Diacritic: 'Dia',
|
|
Emoji: 'Emoji',
|
|
Emoji_Component: 'Emoji_Component',
|
|
Emoji_Modifier: 'Emoji_Modifier',
|
|
Emoji_Modifier_Base: 'Emoji_Modifier_Base',
|
|
Emoji_Presentation: 'Emoji_Presentation',
|
|
Extended_Pictographic: 'Extended_Pictographic',
|
|
Extender: 'Ext',
|
|
Grapheme_Base: 'Gr_Base',
|
|
Grapheme_Extend: 'Gr_Ext',
|
|
Hex_Digit: 'Hex',
|
|
IDS_Binary_Operator: 'IDSB',
|
|
IDS_Trinary_Operator: 'IDST',
|
|
ID_Continue: 'IDC',
|
|
ID_Start: 'IDS',
|
|
Ideographic: 'Ideo',
|
|
Join_Control: 'Join_C',
|
|
Logical_Order_Exception: 'LOE',
|
|
Lowercase: 'Lower',
|
|
Math: 'Math',
|
|
Noncharacter_Code_Point: 'NChar',
|
|
Pattern_Syntax: 'Pat_Syn',
|
|
Pattern_White_Space: 'Pat_WS',
|
|
Quotation_Mark: 'QMark',
|
|
Radical: 'Radical',
|
|
Regional_Indicator: 'RI',
|
|
Sentence_Terminal: 'STerm',
|
|
Soft_Dotted: 'SD',
|
|
Terminal_Punctuation: 'Term',
|
|
Unified_Ideograph: 'UIdeo',
|
|
Uppercase: 'Upper',
|
|
Variation_Selector: 'VS',
|
|
White_Space: 'space',
|
|
XID_Continue: 'XIDC',
|
|
XID_Start: 'XIDS'
|
|
};
|
|
|
|
var BINARY_ALIASES_TO_PROP_NAMES = inverseMap(BINARY_PROP_NAMES_TO_ALIASES);
|
|
|
|
var GENERAL_CATEGORY_VALUE_TO_ALIASES = {
|
|
Cased_Letter: 'LC',
|
|
Close_Punctuation: 'Pe',
|
|
Connector_Punctuation: 'Pc',
|
|
Control: ['Cc', 'cntrl'],
|
|
Currency_Symbol: 'Sc',
|
|
Dash_Punctuation: 'Pd',
|
|
Decimal_Number: ['Nd', 'digit'],
|
|
Enclosing_Mark: 'Me',
|
|
Final_Punctuation: 'Pf',
|
|
Format: 'Cf',
|
|
Initial_Punctuation: 'Pi',
|
|
Letter: 'L',
|
|
Letter_Number: 'Nl',
|
|
Line_Separator: 'Zl',
|
|
Lowercase_Letter: 'Ll',
|
|
Mark: ['M', 'Combining_Mark'],
|
|
Math_Symbol: 'Sm',
|
|
Modifier_Letter: 'Lm',
|
|
Modifier_Symbol: 'Sk',
|
|
Nonspacing_Mark: 'Mn',
|
|
Number: 'N',
|
|
Open_Punctuation: 'Ps',
|
|
Other: 'C',
|
|
Other_Letter: 'Lo',
|
|
Other_Number: 'No',
|
|
Other_Punctuation: 'Po',
|
|
Other_Symbol: 'So',
|
|
Paragraph_Separator: 'Zp',
|
|
Private_Use: 'Co',
|
|
Punctuation: ['P', 'punct'],
|
|
Separator: 'Z',
|
|
Space_Separator: 'Zs',
|
|
Spacing_Mark: 'Mc',
|
|
Surrogate: 'Cs',
|
|
Symbol: 'S',
|
|
Titlecase_Letter: 'Lt',
|
|
Unassigned: 'Cn',
|
|
Uppercase_Letter: 'Lu'
|
|
};
|
|
|
|
var GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES = inverseMap(GENERAL_CATEGORY_VALUE_TO_ALIASES);
|
|
|
|
var SCRIPT_VALUE_TO_ALIASES = {
|
|
Adlam: 'Adlm',
|
|
Ahom: 'Ahom',
|
|
Anatolian_Hieroglyphs: 'Hluw',
|
|
Arabic: 'Arab',
|
|
Armenian: 'Armn',
|
|
Avestan: 'Avst',
|
|
Balinese: 'Bali',
|
|
Bamum: 'Bamu',
|
|
Bassa_Vah: 'Bass',
|
|
Batak: 'Batk',
|
|
Bengali: 'Beng',
|
|
Bhaiksuki: 'Bhks',
|
|
Bopomofo: 'Bopo',
|
|
Brahmi: 'Brah',
|
|
Braille: 'Brai',
|
|
Buginese: 'Bugi',
|
|
Buhid: 'Buhd',
|
|
Canadian_Aboriginal: 'Cans',
|
|
Carian: 'Cari',
|
|
Caucasian_Albanian: 'Aghb',
|
|
Chakma: 'Cakm',
|
|
Cham: 'Cham',
|
|
Cherokee: 'Cher',
|
|
Common: 'Zyyy',
|
|
Coptic: ['Copt', 'Qaac'],
|
|
Cuneiform: 'Xsux',
|
|
Cypriot: 'Cprt',
|
|
Cyrillic: 'Cyrl',
|
|
Deseret: 'Dsrt',
|
|
Devanagari: 'Deva',
|
|
Dogra: 'Dogr',
|
|
Duployan: 'Dupl',
|
|
Egyptian_Hieroglyphs: 'Egyp',
|
|
Elbasan: 'Elba',
|
|
Ethiopic: 'Ethi',
|
|
Georgian: 'Geor',
|
|
Glagolitic: 'Glag',
|
|
Gothic: 'Goth',
|
|
Grantha: 'Gran',
|
|
Greek: 'Grek',
|
|
Gujarati: 'Gujr',
|
|
Gunjala_Gondi: 'Gong',
|
|
Gurmukhi: 'Guru',
|
|
Han: 'Hani',
|
|
Hangul: 'Hang',
|
|
Hanifi_Rohingya: 'Rohg',
|
|
Hanunoo: 'Hano',
|
|
Hatran: 'Hatr',
|
|
Hebrew: 'Hebr',
|
|
Hiragana: 'Hira',
|
|
Imperial_Aramaic: 'Armi',
|
|
Inherited: ['Zinh', 'Qaai'],
|
|
Inscriptional_Pahlavi: 'Phli',
|
|
Inscriptional_Parthian: 'Prti',
|
|
Javanese: 'Java',
|
|
Kaithi: 'Kthi',
|
|
Kannada: 'Knda',
|
|
Katakana: 'Kana',
|
|
Kayah_Li: 'Kali',
|
|
Kharoshthi: 'Khar',
|
|
Khmer: 'Khmr',
|
|
Khojki: 'Khoj',
|
|
Khudawadi: 'Sind',
|
|
Lao: 'Laoo',
|
|
Latin: 'Latn',
|
|
Lepcha: 'Lepc',
|
|
Limbu: 'Limb',
|
|
Linear_A: 'Lina',
|
|
Linear_B: 'Linb',
|
|
Lisu: 'Lisu',
|
|
Lycian: 'Lyci',
|
|
Lydian: 'Lydi',
|
|
Mahajani: 'Mahj',
|
|
Makasar: 'Maka',
|
|
Malayalam: 'Mlym',
|
|
Mandaic: 'Mand',
|
|
Manichaean: 'Mani',
|
|
Marchen: 'Marc',
|
|
Medefaidrin: 'Medf',
|
|
Masaram_Gondi: 'Gonm',
|
|
Meetei_Mayek: 'Mtei',
|
|
Mende_Kikakui: 'Mend',
|
|
Meroitic_Cursive: 'Merc',
|
|
Meroitic_Hieroglyphs: 'Mero',
|
|
Miao: 'Plrd',
|
|
Modi: 'Modi',
|
|
Mongolian: 'Mong',
|
|
Mro: 'Mroo',
|
|
Multani: 'Mult',
|
|
Myanmar: 'Mymr',
|
|
Nabataean: 'Nbat',
|
|
New_Tai_Lue: 'Talu',
|
|
Newa: 'Newa',
|
|
Nko: 'Nkoo',
|
|
Nushu: 'Nshu',
|
|
Ogham: 'Ogam',
|
|
Ol_Chiki: 'Olck',
|
|
Old_Hungarian: 'Hung',
|
|
Old_Italic: 'Ital',
|
|
Old_North_Arabian: 'Narb',
|
|
Old_Permic: 'Perm',
|
|
Old_Persian: 'Xpeo',
|
|
Old_Sogdian: 'Sogo',
|
|
Old_South_Arabian: 'Sarb',
|
|
Old_Turkic: 'Orkh',
|
|
Oriya: 'Orya',
|
|
Osage: 'Osge',
|
|
Osmanya: 'Osma',
|
|
Pahawh_Hmong: 'Hmng',
|
|
Palmyrene: 'Palm',
|
|
Pau_Cin_Hau: 'Pauc',
|
|
Phags_Pa: 'Phag',
|
|
Phoenician: 'Phnx',
|
|
Psalter_Pahlavi: 'Phlp',
|
|
Rejang: 'Rjng',
|
|
Runic: 'Runr',
|
|
Samaritan: 'Samr',
|
|
Saurashtra: 'Saur',
|
|
Sharada: 'Shrd',
|
|
Shavian: 'Shaw',
|
|
Siddham: 'Sidd',
|
|
SignWriting: 'Sgnw',
|
|
Sinhala: 'Sinh',
|
|
Sogdian: 'Sogd',
|
|
Sora_Sompeng: 'Sora',
|
|
Soyombo: 'Soyo',
|
|
Sundanese: 'Sund',
|
|
Syloti_Nagri: 'Sylo',
|
|
Syriac: 'Syrc',
|
|
Tagalog: 'Tglg',
|
|
Tagbanwa: 'Tagb',
|
|
Tai_Le: 'Tale',
|
|
Tai_Tham: 'Lana',
|
|
Tai_Viet: 'Tavt',
|
|
Takri: 'Takr',
|
|
Tamil: 'Taml',
|
|
Tangut: 'Tang',
|
|
Telugu: 'Telu',
|
|
Thaana: 'Thaa',
|
|
Thai: 'Thai',
|
|
Tibetan: 'Tibt',
|
|
Tifinagh: 'Tfng',
|
|
Tirhuta: 'Tirh',
|
|
Ugaritic: 'Ugar',
|
|
Vai: 'Vaii',
|
|
Warang_Citi: 'Wara',
|
|
Yi: 'Yiii',
|
|
Zanabazar_Square: 'Zanb'
|
|
};
|
|
|
|
var SCRIPT_VALUE_ALIASES_TO_VALUE = inverseMap(SCRIPT_VALUE_TO_ALIASES);
|
|
|
|
function inverseMap(data) {
|
|
var inverse = {};
|
|
|
|
for (var name in data) {
|
|
if (!data.hasOwnProperty(name)) {
|
|
continue;
|
|
}
|
|
var value = data[name];
|
|
if (Array.isArray(value)) {
|
|
for (var i = 0; i < value.length; i++) {
|
|
inverse[value[i]] = name;
|
|
}
|
|
} else {
|
|
inverse[value] = name;
|
|
}
|
|
}
|
|
|
|
return inverse;
|
|
}
|
|
|
|
function isValidName(name) {
|
|
return NON_BINARY_PROP_NAMES_TO_ALIASES.hasOwnProperty(name) || NON_BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name) || BINARY_PROP_NAMES_TO_ALIASES.hasOwnProperty(name) || BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name);
|
|
}
|
|
|
|
function isValidValue(name, value) {
|
|
if (isGeneralCategoryName(name)) {
|
|
return isGeneralCategoryValue(value);
|
|
}
|
|
|
|
if (isScriptCategoryName(name)) {
|
|
return isScriptCategoryValue(value);
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
function isAlias(name) {
|
|
return NON_BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name) || BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name);
|
|
}
|
|
|
|
function isGeneralCategoryName(name) {
|
|
return name === 'General_Category' || name == 'gc';
|
|
}
|
|
|
|
function isScriptCategoryName(name) {
|
|
return name === 'Script' || name === 'Script_Extensions' || name === 'sc' || name === 'scx';
|
|
}
|
|
|
|
function isGeneralCategoryValue(value) {
|
|
return GENERAL_CATEGORY_VALUE_TO_ALIASES.hasOwnProperty(value) || GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES.hasOwnProperty(value);
|
|
}
|
|
|
|
function isScriptCategoryValue(value) {
|
|
return SCRIPT_VALUE_TO_ALIASES.hasOwnProperty(value) || SCRIPT_VALUE_ALIASES_TO_VALUE.hasOwnProperty(value);
|
|
}
|
|
|
|
function isBinaryPropertyName(name) {
|
|
return BINARY_PROP_NAMES_TO_ALIASES.hasOwnProperty(name) || BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name);
|
|
}
|
|
|
|
function getCanonicalName(name) {
|
|
if (NON_BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name)) {
|
|
return NON_BINARY_ALIASES_TO_PROP_NAMES[name];
|
|
}
|
|
|
|
if (BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name)) {
|
|
return BINARY_ALIASES_TO_PROP_NAMES[name];
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
function getCanonicalValue(value) {
|
|
if (GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES.hasOwnProperty(value)) {
|
|
return GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES[value];
|
|
}
|
|
|
|
if (SCRIPT_VALUE_ALIASES_TO_VALUE.hasOwnProperty(value)) {
|
|
return SCRIPT_VALUE_ALIASES_TO_VALUE[value];
|
|
}
|
|
|
|
if (BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(value)) {
|
|
return BINARY_ALIASES_TO_PROP_NAMES[value];
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
var parserUnicodeProperties = {
|
|
isAlias: isAlias,
|
|
isValidName: isValidName,
|
|
isValidValue: isValidValue,
|
|
isGeneralCategoryValue: isGeneralCategoryValue,
|
|
isScriptCategoryValue: isScriptCategoryValue,
|
|
isBinaryPropertyName: isBinaryPropertyName,
|
|
getCanonicalName: getCanonicalName,
|
|
getCanonicalValue: getCanonicalValue,
|
|
|
|
NON_BINARY_PROP_NAMES_TO_ALIASES: NON_BINARY_PROP_NAMES_TO_ALIASES,
|
|
NON_BINARY_ALIASES_TO_PROP_NAMES: NON_BINARY_ALIASES_TO_PROP_NAMES,
|
|
|
|
BINARY_PROP_NAMES_TO_ALIASES: BINARY_PROP_NAMES_TO_ALIASES,
|
|
BINARY_ALIASES_TO_PROP_NAMES: BINARY_ALIASES_TO_PROP_NAMES,
|
|
|
|
GENERAL_CATEGORY_VALUE_TO_ALIASES: GENERAL_CATEGORY_VALUE_TO_ALIASES,
|
|
GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES: GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES,
|
|
|
|
SCRIPT_VALUE_TO_ALIASES: SCRIPT_VALUE_TO_ALIASES,
|
|
SCRIPT_VALUE_ALIASES_TO_VALUE: SCRIPT_VALUE_ALIASES_TO_VALUE
|
|
};
|
|
|
|
/**
|
|
* LR parser generated by the Syntax tool.
|
|
*
|
|
* https://www.npmjs.com/package/syntax-cli
|
|
*
|
|
* npm install -g syntax-cli
|
|
*
|
|
* syntax-cli --help
|
|
*
|
|
* To regenerate run:
|
|
*
|
|
* syntax-cli \
|
|
* --grammar ~/path-to-grammar-file \
|
|
* --mode <parsing-mode> \
|
|
* --output ~/path-to-output-parser-file.js
|
|
*/
|
|
|
|
/**
|
|
* Matched token text.
|
|
*/
|
|
|
|
var _slicedToArray$2 = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
|
|
|
|
function _toConsumableArray$8(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
|
|
|
|
var yytext = void 0;
|
|
|
|
/**
|
|
* Storage object.
|
|
*/
|
|
var yy = {};
|
|
|
|
/**
|
|
* Result of semantic action.
|
|
*/
|
|
var __ = void 0;
|
|
|
|
/**
|
|
* Result location object.
|
|
*/
|
|
var __loc = void 0;
|
|
|
|
function yyloc(start, end) {
|
|
if (!yy.options.captureLocations) {
|
|
return null;
|
|
}
|
|
|
|
// Epsilon doesn't produce location.
|
|
if (!start || !end) {
|
|
return start || end;
|
|
}
|
|
|
|
return {
|
|
startOffset: start.startOffset,
|
|
endOffset: end.endOffset,
|
|
startLine: start.startLine,
|
|
endLine: end.endLine,
|
|
startColumn: start.startColumn,
|
|
endColumn: end.endColumn
|
|
};
|
|
}
|
|
|
|
var EOF = '$';
|
|
|
|
/**
|
|
* List of productions (generated by Syntax tool).
|
|
*/
|
|
var productions = [[-1, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = _1;
|
|
}], [0, 4, function (_1, _2, _3, _4, _1loc, _2loc, _3loc, _4loc) {
|
|
__loc = yyloc(_1loc, _4loc);
|
|
__ = Node({
|
|
type: 'RegExp',
|
|
body: _2,
|
|
flags: checkFlags(_4)
|
|
}, loc(_1loc, _4loc || _3loc));
|
|
}], [1, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = _1;
|
|
}], [1, 0, function () {
|
|
__loc = null;__ = '';
|
|
}], [2, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = _1;
|
|
}], [2, 2, function (_1, _2, _1loc, _2loc) {
|
|
__loc = yyloc(_1loc, _2loc);__ = _1 + _2;
|
|
}], [3, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = _1;
|
|
}], [4, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = _1;
|
|
}], [4, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {
|
|
__loc = yyloc(_1loc, _3loc);
|
|
// Location for empty disjunction: /|/
|
|
var _loc = null;
|
|
|
|
if (_2loc) {
|
|
_loc = loc(_1loc || _2loc, _3loc || _2loc);
|
|
}
|
|
__ = Node({
|
|
type: 'Disjunction',
|
|
left: _1,
|
|
right: _3
|
|
}, _loc);
|
|
}], [5, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);
|
|
if (_1.length === 0) {
|
|
__ = null;
|
|
return;
|
|
}
|
|
|
|
if (_1.length === 1) {
|
|
__ = Node(_1[0], __loc);
|
|
} else {
|
|
__ = Node({
|
|
type: 'Alternative',
|
|
expressions: _1
|
|
}, __loc);
|
|
}
|
|
}], [6, 0, function () {
|
|
__loc = null;__ = [];
|
|
}], [6, 2, function (_1, _2, _1loc, _2loc) {
|
|
__loc = yyloc(_1loc, _2loc);__ = _1.concat(_2);
|
|
}], [7, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = Node(Object.assign({ type: 'Assertion' }, _1), __loc);
|
|
}], [7, 2, function (_1, _2, _1loc, _2loc) {
|
|
__loc = yyloc(_1loc, _2loc);
|
|
__ = _1;
|
|
|
|
if (_2) {
|
|
__ = Node({
|
|
type: 'Repetition',
|
|
expression: _1,
|
|
quantifier: _2
|
|
}, __loc);
|
|
}
|
|
}], [8, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = { kind: '^' };
|
|
}], [8, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = { kind: '$' };
|
|
}], [8, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = { kind: '\\b' };
|
|
}], [8, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = { kind: '\\B' };
|
|
}], [8, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {
|
|
__loc = yyloc(_1loc, _3loc);
|
|
__ = {
|
|
kind: 'Lookahead',
|
|
assertion: _2
|
|
};
|
|
}], [8, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {
|
|
__loc = yyloc(_1loc, _3loc);
|
|
__ = {
|
|
kind: 'Lookahead',
|
|
negative: true,
|
|
assertion: _2
|
|
};
|
|
}], [8, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {
|
|
__loc = yyloc(_1loc, _3loc);
|
|
__ = {
|
|
kind: 'Lookbehind',
|
|
assertion: _2
|
|
};
|
|
}], [8, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {
|
|
__loc = yyloc(_1loc, _3loc);
|
|
__ = {
|
|
kind: 'Lookbehind',
|
|
negative: true,
|
|
assertion: _2
|
|
};
|
|
}], [9, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = _1;
|
|
}], [9, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = _1;
|
|
}], [9, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = _1;
|
|
}], [10, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = Char(_1, 'simple', __loc);
|
|
}], [10, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = Char(_1.slice(1), 'simple', __loc);__.escaped = true;
|
|
}], [10, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = Char(_1, 'unicode', __loc);__.isSurrogatePair = true;
|
|
}], [10, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = Char(_1, 'unicode', __loc);
|
|
}], [10, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = UnicodeProperty(_1, __loc);
|
|
}], [10, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = Char(_1, 'control', __loc);
|
|
}], [10, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = Char(_1, 'hex', __loc);
|
|
}], [10, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = Char(_1, 'oct', __loc);
|
|
}], [10, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = GroupRefOrDecChar(_1, __loc);
|
|
}], [10, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = Char(_1, 'meta', __loc);
|
|
}], [10, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = Char(_1, 'meta', __loc);
|
|
}], [10, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = NamedGroupRefOrChars(_1, _1loc);
|
|
}], [11, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = _1;
|
|
}], [11, 0], [12, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = _1;
|
|
}], [12, 2, function (_1, _2, _1loc, _2loc) {
|
|
__loc = yyloc(_1loc, _2loc);
|
|
_1.greedy = false;
|
|
__ = _1;
|
|
}], [13, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);
|
|
__ = Node({
|
|
type: 'Quantifier',
|
|
kind: _1,
|
|
greedy: true
|
|
}, __loc);
|
|
}], [13, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);
|
|
__ = Node({
|
|
type: 'Quantifier',
|
|
kind: _1,
|
|
greedy: true
|
|
}, __loc);
|
|
}], [13, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);
|
|
__ = Node({
|
|
type: 'Quantifier',
|
|
kind: _1,
|
|
greedy: true
|
|
}, __loc);
|
|
}], [13, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);
|
|
var range = getRange(_1);
|
|
__ = Node({
|
|
type: 'Quantifier',
|
|
kind: 'Range',
|
|
from: range[0],
|
|
to: range[0],
|
|
greedy: true
|
|
}, __loc);
|
|
}], [13, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);
|
|
__ = Node({
|
|
type: 'Quantifier',
|
|
kind: 'Range',
|
|
from: getRange(_1)[0],
|
|
greedy: true
|
|
}, __loc);
|
|
}], [13, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);
|
|
var range = getRange(_1);
|
|
__ = Node({
|
|
type: 'Quantifier',
|
|
kind: 'Range',
|
|
from: range[0],
|
|
to: range[1],
|
|
greedy: true
|
|
}, __loc);
|
|
}], [14, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = _1;
|
|
}], [14, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = _1;
|
|
}], [15, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {
|
|
__loc = yyloc(_1loc, _3loc);
|
|
var nameRaw = String(_1);
|
|
var name = decodeUnicodeGroupName(nameRaw);
|
|
if (!yy.options.allowGroupNameDuplicates && namedGroups.hasOwnProperty(name)) {
|
|
throw new SyntaxError('Duplicate of the named group "' + name + '".');
|
|
}
|
|
|
|
namedGroups[name] = _1.groupNumber;
|
|
|
|
__ = Node({
|
|
type: 'Group',
|
|
capturing: true,
|
|
name: name,
|
|
nameRaw: nameRaw,
|
|
number: _1.groupNumber,
|
|
expression: _2
|
|
}, __loc);
|
|
}], [15, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {
|
|
__loc = yyloc(_1loc, _3loc);
|
|
__ = Node({
|
|
type: 'Group',
|
|
capturing: true,
|
|
number: _1.groupNumber,
|
|
expression: _2
|
|
}, __loc);
|
|
}], [16, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {
|
|
__loc = yyloc(_1loc, _3loc);
|
|
__ = Node({
|
|
type: 'Group',
|
|
capturing: false,
|
|
expression: _2
|
|
}, __loc);
|
|
}], [17, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {
|
|
__loc = yyloc(_1loc, _3loc);
|
|
__ = Node({
|
|
type: 'CharacterClass',
|
|
negative: true,
|
|
expressions: _2
|
|
}, __loc);
|
|
}], [17, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) {
|
|
__loc = yyloc(_1loc, _3loc);
|
|
__ = Node({
|
|
type: 'CharacterClass',
|
|
expressions: _2
|
|
}, __loc);
|
|
}], [18, 0, function () {
|
|
__loc = null;__ = [];
|
|
}], [18, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = _1;
|
|
}], [19, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = [_1];
|
|
}], [19, 2, function (_1, _2, _1loc, _2loc) {
|
|
__loc = yyloc(_1loc, _2loc);__ = [_1].concat(_2);
|
|
}], [19, 4, function (_1, _2, _3, _4, _1loc, _2loc, _3loc, _4loc) {
|
|
__loc = yyloc(_1loc, _4loc);
|
|
checkClassRange(_1, _3);
|
|
|
|
__ = [Node({
|
|
type: 'ClassRange',
|
|
from: _1,
|
|
to: _3
|
|
}, loc(_1loc, _3loc))];
|
|
|
|
if (_4) {
|
|
__ = __.concat(_4);
|
|
}
|
|
}], [20, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = _1;
|
|
}], [20, 2, function (_1, _2, _1loc, _2loc) {
|
|
__loc = yyloc(_1loc, _2loc);__ = [_1].concat(_2);
|
|
}], [20, 4, function (_1, _2, _3, _4, _1loc, _2loc, _3loc, _4loc) {
|
|
__loc = yyloc(_1loc, _4loc);
|
|
checkClassRange(_1, _3);
|
|
|
|
__ = [Node({
|
|
type: 'ClassRange',
|
|
from: _1,
|
|
to: _3
|
|
}, loc(_1loc, _3loc))];
|
|
|
|
if (_4) {
|
|
__ = __.concat(_4);
|
|
}
|
|
}], [21, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = Char(_1, 'simple', __loc);
|
|
}], [21, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = _1;
|
|
}], [22, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = _1;
|
|
}], [22, 1, function (_1, _1loc) {
|
|
__loc = yyloc(_1loc, _1loc);__ = Char(_1, 'meta', __loc);
|
|
}]];
|
|
|
|
/**
|
|
* Encoded tokens map.
|
|
*/
|
|
var tokens = { "SLASH": "23", "CHAR": "24", "BAR": "25", "BOS": "26", "EOS": "27", "ESC_b": "28", "ESC_B": "29", "POS_LA_ASSERT": "30", "R_PAREN": "31", "NEG_LA_ASSERT": "32", "POS_LB_ASSERT": "33", "NEG_LB_ASSERT": "34", "ESC_CHAR": "35", "U_CODE_SURROGATE": "36", "U_CODE": "37", "U_PROP_VALUE_EXP": "38", "CTRL_CH": "39", "HEX_CODE": "40", "OCT_CODE": "41", "DEC_CODE": "42", "META_CHAR": "43", "ANY": "44", "NAMED_GROUP_REF": "45", "Q_MARK": "46", "STAR": "47", "PLUS": "48", "RANGE_EXACT": "49", "RANGE_OPEN": "50", "RANGE_CLOSED": "51", "NAMED_CAPTURE_GROUP": "52", "L_PAREN": "53", "NON_CAPTURE_GROUP": "54", "NEG_CLASS": "55", "R_BRACKET": "56", "L_BRACKET": "57", "DASH": "58", "$": "59" };
|
|
|
|
/**
|
|
* Parsing table (generated by Syntax tool).
|
|
*/
|
|
var table = [{ "0": 1, "23": "s2" }, { "59": "acc" }, { "3": 3, "4": 4, "5": 5, "6": 6, "23": "r10", "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "23": "s7" }, { "23": "r6", "25": "s12" }, { "23": "r7", "25": "r7", "31": "r7" }, { "7": 14, "8": 15, "9": 16, "10": 25, "14": 27, "15": 42, "16": 43, "17": 26, "23": "r9", "24": "s28", "25": "r9", "26": "s17", "27": "s18", "28": "s19", "29": "s20", "30": "s21", "31": "r9", "32": "s22", "33": "s23", "34": "s24", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "52": "s44", "53": "s45", "54": "s46", "55": "s40", "57": "s41" }, { "1": 8, "2": 9, "24": "s10", "59": "r3" }, { "59": "r1" }, { "24": "s11", "59": "r2" }, { "24": "r4", "59": "r4" }, { "24": "r5", "59": "r5" }, { "5": 13, "6": 6, "23": "r10", "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "31": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "23": "r8", "25": "r8", "31": "r8" }, { "23": "r11", "24": "r11", "25": "r11", "26": "r11", "27": "r11", "28": "r11", "29": "r11", "30": "r11", "31": "r11", "32": "r11", "33": "r11", "34": "r11", "35": "r11", "36": "r11", "37": "r11", "38": "r11", "39": "r11", "40": "r11", "41": "r11", "42": "r11", "43": "r11", "44": "r11", "45": "r11", "52": "r11", "53": "r11", "54": "r11", "55": "r11", "57": "r11" }, { "23": "r12", "24": "r12", "25": "r12", "26": "r12", "27": "r12", "28": "r12", "29": "r12", "30": "r12", "31": "r12", "32": "r12", "33": "r12", "34": "r12", "35": "r12", "36": "r12", "37": "r12", "38": "r12", "39": "r12", "40": "r12", "41": "r12", "42": "r12", "43": "r12", "44": "r12", "45": "r12", "52": "r12", "53": "r12", "54": "r12", "55": "r12", "57": "r12" }, { "11": 47, "12": 48, "13": 49, "23": "r38", "24": "r38", "25": "r38", "26": "r38", "27": "r38", "28": "r38", "29": "r38", "30": "r38", "31": "r38", "32": "r38", "33": "r38", "34": "r38", "35": "r38", "36": "r38", "37": "r38", "38": "r38", "39": "r38", "40": "r38", "41": "r38", "42": "r38", "43": "r38", "44": "r38", "45": "r38", "46": "s52", "47": "s50", "48": "s51", "49": "s53", "50": "s54", "51": "s55", "52": "r38", "53": "r38", "54": "r38", "55": "r38", "57": "r38" }, { "23": "r14", "24": "r14", "25": "r14", "26": "r14", "27": "r14", "28": "r14", "29": "r14", "30": "r14", "31": "r14", "32": "r14", "33": "r14", "34": "r14", "35": "r14", "36": "r14", "37": "r14", "38": "r14", "39": "r14", "40": "r14", "41": "r14", "42": "r14", "43": "r14", "44": "r14", "45": "r14", "52": "r14", "53": "r14", "54": "r14", "55": "r14", "57": "r14" }, { "23": "r15", "24": "r15", "25": "r15", "26": "r15", "27": "r15", "28": "r15", "29": "r15", "30": "r15", "31": "r15", "32": "r15", "33": "r15", "34": "r15", "35": "r15", "36": "r15", "37": "r15", "38": "r15", "39": "r15", "40": "r15", "41": "r15", "42": "r15", "43": "r15", "44": "r15", "45": "r15", "52": "r15", "53": "r15", "54": "r15", "55": "r15", "57": "r15" }, { "23": "r16", "24": "r16", "25": "r16", "26": "r16", "27": "r16", "28": "r16", "29": "r16", "30": "r16", "31": "r16", "32": "r16", "33": "r16", "34": "r16", "35": "r16", "36": "r16", "37": "r16", "38": "r16", "39": "r16", "40": "r16", "41": "r16", "42": "r16", "43": "r16", "44": "r16", "45": "r16", "52": "r16", "53": "r16", "54": "r16", "55": "r16", "57": "r16" }, { "23": "r17", "24": "r17", "25": "r17", "26": "r17", "27": "r17", "28": "r17", "29": "r17", "30": "r17", "31": "r17", "32": "r17", "33": "r17", "34": "r17", "35": "r17", "36": "r17", "37": "r17", "38": "r17", "39": "r17", "40": "r17", "41": "r17", "42": "r17", "43": "r17", "44": "r17", "45": "r17", "52": "r17", "53": "r17", "54": "r17", "55": "r17", "57": "r17" }, { "4": 57, "5": 5, "6": 6, "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "31": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "4": 59, "5": 5, "6": 6, "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "31": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "4": 61, "5": 5, "6": 6, "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "31": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "4": 63, "5": 5, "6": 6, "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "31": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "23": "r22", "24": "r22", "25": "r22", "26": "r22", "27": "r22", "28": "r22", "29": "r22", "30": "r22", "31": "r22", "32": "r22", "33": "r22", "34": "r22", "35": "r22", "36": "r22", "37": "r22", "38": "r22", "39": "r22", "40": "r22", "41": "r22", "42": "r22", "43": "r22", "44": "r22", "45": "r22", "46": "r22", "47": "r22", "48": "r22", "49": "r22", "50": "r22", "51": "r22", "52": "r22", "53": "r22", "54": "r22", "55": "r22", "57": "r22" }, { "23": "r23", "24": "r23", "25": "r23", "26": "r23", "27": "r23", "28": "r23", "29": "r23", "30": "r23", "31": "r23", "32": "r23", "33": "r23", "34": "r23", "35": "r23", "36": "r23", "37": "r23", "38": "r23", "39": "r23", "40": "r23", "41": "r23", "42": "r23", "43": "r23", "44": "r23", "45": "r23", "46": "r23", "47": "r23", "48": "r23", "49": "r23", "50": "r23", "51": "r23", "52": "r23", "53": "r23", "54": "r23", "55": "r23", "57": "r23" }, { "23": "r24", "24": "r24", "25": "r24", "26": "r24", "27": "r24", "28": "r24", "29": "r24", "30": "r24", "31": "r24", "32": "r24", "33": "r24", "34": "r24", "35": "r24", "36": "r24", "37": "r24", "38": "r24", "39": "r24", "40": "r24", "41": "r24", "42": "r24", "43": "r24", "44": "r24", "45": "r24", "46": "r24", "47": "r24", "48": "r24", "49": "r24", "50": "r24", "51": "r24", "52": "r24", "53": "r24", "54": "r24", "55": "r24", "57": "r24" }, { "23": "r25", "24": "r25", "25": "r25", "26": "r25", "27": "r25", "28": "r25", "29": "r25", "30": "r25", "31": "r25", "32": "r25", "33": "r25", "34": "r25", "35": "r25", "36": "r25", "37": "r25", "38": "r25", "39": "r25", "40": "r25", "41": "r25", "42": "r25", "43": "r25", "44": "r25", "45": "r25", "46": "r25", "47": "r25", "48": "r25", "49": "r25", "50": "r25", "51": "r25", "52": "r25", "53": "r25", "54": "r25", "55": "r25", "56": "r25", "57": "r25", "58": "r25" }, { "23": "r26", "24": "r26", "25": "r26", "26": "r26", "27": "r26", "28": "r26", "29": "r26", "30": "r26", "31": "r26", "32": "r26", "33": "r26", "34": "r26", "35": "r26", "36": "r26", "37": "r26", "38": "r26", "39": "r26", "40": "r26", "41": "r26", "42": "r26", "43": "r26", "44": "r26", "45": "r26", "46": "r26", "47": "r26", "48": "r26", "49": "r26", "50": "r26", "51": "r26", "52": "r26", "53": "r26", "54": "r26", "55": "r26", "56": "r26", "57": "r26", "58": "r26" }, { "23": "r27", "24": "r27", "25": "r27", "26": "r27", "27": "r27", "28": "r27", "29": "r27", "30": "r27", "31": "r27", "32": "r27", "33": "r27", "34": "r27", "35": "r27", "36": "r27", "37": "r27", "38": "r27", "39": "r27", "40": "r27", "41": "r27", "42": "r27", "43": "r27", "44": "r27", "45": "r27", "46": "r27", "47": "r27", "48": "r27", "49": "r27", "50": "r27", "51": "r27", "52": "r27", "53": "r27", "54": "r27", "55": "r27", "56": "r27", "57": "r27", "58": "r27" }, { "23": "r28", "24": "r28", "25": "r28", "26": "r28", "27": "r28", "28": "r28", "29": "r28", "30": "r28", "31": "r28", "32": "r28", "33": "r28", "34": "r28", "35": "r28", "36": "r28", "37": "r28", "38": "r28", "39": "r28", "40": "r28", "41": "r28", "42": "r28", "43": "r28", "44": "r28", "45": "r28", "46": "r28", "47": "r28", "48": "r28", "49": "r28", "50": "r28", "51": "r28", "52": "r28", "53": "r28", "54": "r28", "55": "r28", "56": "r28", "57": "r28", "58": "r28" }, { "23": "r29", "24": "r29", "25": "r29", "26": "r29", "27": "r29", "28": "r29", "29": "r29", "30": "r29", "31": "r29", "32": "r29", "33": "r29", "34": "r29", "35": "r29", "36": "r29", "37": "r29", "38": "r29", "39": "r29", "40": "r29", "41": "r29", "42": "r29", "43": "r29", "44": "r29", "45": "r29", "46": "r29", "47": "r29", "48": "r29", "49": "r29", "50": "r29", "51": "r29", "52": "r29", "53": "r29", "54": "r29", "55": "r29", "56": "r29", "57": "r29", "58": "r29" }, { "23": "r30", "24": "r30", "25": "r30", "26": "r30", "27": "r30", "28": "r30", "29": "r30", "30": "r30", "31": "r30", "32": "r30", "33": "r30", "34": "r30", "35": "r30", "36": "r30", "37": "r30", "38": "r30", "39": "r30", "40": "r30", "41": "r30", "42": "r30", "43": "r30", "44": "r30", "45": "r30", "46": "r30", "47": "r30", "48": "r30", "49": "r30", "50": "r30", "51": "r30", "52": "r30", "53": "r30", "54": "r30", "55": "r30", "56": "r30", "57": "r30", "58": "r30" }, { "23": "r31", "24": "r31", "25": "r31", "26": "r31", "27": "r31", "28": "r31", "29": "r31", "30": "r31", "31": "r31", "32": "r31", "33": "r31", "34": "r31", "35": "r31", "36": "r31", "37": "r31", "38": "r31", "39": "r31", "40": "r31", "41": "r31", "42": "r31", "43": "r31", "44": "r31", "45": "r31", "46": "r31", "47": "r31", "48": "r31", "49": "r31", "50": "r31", "51": "r31", "52": "r31", "53": "r31", "54": "r31", "55": "r31", "56": "r31", "57": "r31", "58": "r31" }, { "23": "r32", "24": "r32", "25": "r32", "26": "r32", "27": "r32", "28": "r32", "29": "r32", "30": "r32", "31": "r32", "32": "r32", "33": "r32", "34": "r32", "35": "r32", "36": "r32", "37": "r32", "38": "r32", "39": "r32", "40": "r32", "41": "r32", "42": "r32", "43": "r32", "44": "r32", "45": "r32", "46": "r32", "47": "r32", "48": "r32", "49": "r32", "50": "r32", "51": "r32", "52": "r32", "53": "r32", "54": "r32", "55": "r32", "56": "r32", "57": "r32", "58": "r32" }, { "23": "r33", "24": "r33", "25": "r33", "26": "r33", "27": "r33", "28": "r33", "29": "r33", "30": "r33", "31": "r33", "32": "r33", "33": "r33", "34": "r33", "35": "r33", "36": "r33", "37": "r33", "38": "r33", "39": "r33", "40": "r33", "41": "r33", "42": "r33", "43": "r33", "44": "r33", "45": "r33", "46": "r33", "47": "r33", "48": "r33", "49": "r33", "50": "r33", "51": "r33", "52": "r33", "53": "r33", "54": "r33", "55": "r33", "56": "r33", "57": "r33", "58": "r33" }, { "23": "r34", "24": "r34", "25": "r34", "26": "r34", "27": "r34", "28": "r34", "29": "r34", "30": "r34", "31": "r34", "32": "r34", "33": "r34", "34": "r34", "35": "r34", "36": "r34", "37": "r34", "38": "r34", "39": "r34", "40": "r34", "41": "r34", "42": "r34", "43": "r34", "44": "r34", "45": "r34", "46": "r34", "47": "r34", "48": "r34", "49": "r34", "50": "r34", "51": "r34", "52": "r34", "53": "r34", "54": "r34", "55": "r34", "56": "r34", "57": "r34", "58": "r34" }, { "23": "r35", "24": "r35", "25": "r35", "26": "r35", "27": "r35", "28": "r35", "29": "r35", "30": "r35", "31": "r35", "32": "r35", "33": "r35", "34": "r35", "35": "r35", "36": "r35", "37": "r35", "38": "r35", "39": "r35", "40": "r35", "41": "r35", "42": "r35", "43": "r35", "44": "r35", "45": "r35", "46": "r35", "47": "r35", "48": "r35", "49": "r35", "50": "r35", "51": "r35", "52": "r35", "53": "r35", "54": "r35", "55": "r35", "56": "r35", "57": "r35", "58": "r35" }, { "23": "r36", "24": "r36", "25": "r36", "26": "r36", "27": "r36", "28": "r36", "29": "r36", "30": "r36", "31": "r36", "32": "r36", "33": "r36", "34": "r36", "35": "r36", "36": "r36", "37": "r36", "38": "r36", "39": "r36", "40": "r36", "41": "r36", "42": "r36", "43": "r36", "44": "r36", "45": "r36", "46": "r36", "47": "r36", "48": "r36", "49": "r36", "50": "r36", "51": "r36", "52": "r36", "53": "r36", "54": "r36", "55": "r36", "56": "r36", "57": "r36", "58": "r36" }, { "10": 70, "18": 65, "19": 66, "21": 67, "22": 69, "24": "s28", "28": "s71", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "56": "r54", "58": "s68" }, { "10": 70, "18": 83, "19": 66, "21": 67, "22": 69, "24": "s28", "28": "s71", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "56": "r54", "58": "s68" }, { "23": "r47", "24": "r47", "25": "r47", "26": "r47", "27": "r47", "28": "r47", "29": "r47", "30": "r47", "31": "r47", "32": "r47", "33": "r47", "34": "r47", "35": "r47", "36": "r47", "37": "r47", "38": "r47", "39": "r47", "40": "r47", "41": "r47", "42": "r47", "43": "r47", "44": "r47", "45": "r47", "46": "r47", "47": "r47", "48": "r47", "49": "r47", "50": "r47", "51": "r47", "52": "r47", "53": "r47", "54": "r47", "55": "r47", "57": "r47" }, { "23": "r48", "24": "r48", "25": "r48", "26": "r48", "27": "r48", "28": "r48", "29": "r48", "30": "r48", "31": "r48", "32": "r48", "33": "r48", "34": "r48", "35": "r48", "36": "r48", "37": "r48", "38": "r48", "39": "r48", "40": "r48", "41": "r48", "42": "r48", "43": "r48", "44": "r48", "45": "r48", "46": "r48", "47": "r48", "48": "r48", "49": "r48", "50": "r48", "51": "r48", "52": "r48", "53": "r48", "54": "r48", "55": "r48", "57": "r48" }, { "4": 85, "5": 5, "6": 6, "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "31": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "4": 87, "5": 5, "6": 6, "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "31": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "4": 89, "5": 5, "6": 6, "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "31": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "23": "r13", "24": "r13", "25": "r13", "26": "r13", "27": "r13", "28": "r13", "29": "r13", "30": "r13", "31": "r13", "32": "r13", "33": "r13", "34": "r13", "35": "r13", "36": "r13", "37": "r13", "38": "r13", "39": "r13", "40": "r13", "41": "r13", "42": "r13", "43": "r13", "44": "r13", "45": "r13", "52": "r13", "53": "r13", "54": "r13", "55": "r13", "57": "r13" }, { "23": "r37", "24": "r37", "25": "r37", "26": "r37", "27": "r37", "28": "r37", "29": "r37", "30": "r37", "31": "r37", "32": "r37", "33": "r37", "34": "r37", "35": "r37", "36": "r37", "37": "r37", "38": "r37", "39": "r37", "40": "r37", "41": "r37", "42": "r37", "43": "r37", "44": "r37", "45": "r37", "52": "r37", "53": "r37", "54": "r37", "55": "r37", "57": "r37" }, { "23": "r39", "24": "r39", "25": "r39", "26": "r39", "27": "r39", "28": "r39", "29": "r39", "30": "r39", "31": "r39", "32": "r39", "33": "r39", "34": "r39", "35": "r39", "36": "r39", "37": "r39", "38": "r39", "39": "r39", "40": "r39", "41": "r39", "42": "r39", "43": "r39", "44": "r39", "45": "r39", "46": "s56", "52": "r39", "53": "r39", "54": "r39", "55": "r39", "57": "r39" }, { "23": "r41", "24": "r41", "25": "r41", "26": "r41", "27": "r41", "28": "r41", "29": "r41", "30": "r41", "31": "r41", "32": "r41", "33": "r41", "34": "r41", "35": "r41", "36": "r41", "37": "r41", "38": "r41", "39": "r41", "40": "r41", "41": "r41", "42": "r41", "43": "r41", "44": "r41", "45": "r41", "46": "r41", "52": "r41", "53": "r41", "54": "r41", "55": "r41", "57": "r41" }, { "23": "r42", "24": "r42", "25": "r42", "26": "r42", "27": "r42", "28": "r42", "29": "r42", "30": "r42", "31": "r42", "32": "r42", "33": "r42", "34": "r42", "35": "r42", "36": "r42", "37": "r42", "38": "r42", "39": "r42", "40": "r42", "41": "r42", "42": "r42", "43": "r42", "44": "r42", "45": "r42", "46": "r42", "52": "r42", "53": "r42", "54": "r42", "55": "r42", "57": "r42" }, { "23": "r43", "24": "r43", "25": "r43", "26": "r43", "27": "r43", "28": "r43", "29": "r43", "30": "r43", "31": "r43", "32": "r43", "33": "r43", "34": "r43", "35": "r43", "36": "r43", "37": "r43", "38": "r43", "39": "r43", "40": "r43", "41": "r43", "42": "r43", "43": "r43", "44": "r43", "45": "r43", "46": "r43", "52": "r43", "53": "r43", "54": "r43", "55": "r43", "57": "r43" }, { "23": "r44", "24": "r44", "25": "r44", "26": "r44", "27": "r44", "28": "r44", "29": "r44", "30": "r44", "31": "r44", "32": "r44", "33": "r44", "34": "r44", "35": "r44", "36": "r44", "37": "r44", "38": "r44", "39": "r44", "40": "r44", "41": "r44", "42": "r44", "43": "r44", "44": "r44", "45": "r44", "46": "r44", "52": "r44", "53": "r44", "54": "r44", "55": "r44", "57": "r44" }, { "23": "r45", "24": "r45", "25": "r45", "26": "r45", "27": "r45", "28": "r45", "29": "r45", "30": "r45", "31": "r45", "32": "r45", "33": "r45", "34": "r45", "35": "r45", "36": "r45", "37": "r45", "38": "r45", "39": "r45", "40": "r45", "41": "r45", "42": "r45", "43": "r45", "44": "r45", "45": "r45", "46": "r45", "52": "r45", "53": "r45", "54": "r45", "55": "r45", "57": "r45" }, { "23": "r46", "24": "r46", "25": "r46", "26": "r46", "27": "r46", "28": "r46", "29": "r46", "30": "r46", "31": "r46", "32": "r46", "33": "r46", "34": "r46", "35": "r46", "36": "r46", "37": "r46", "38": "r46", "39": "r46", "40": "r46", "41": "r46", "42": "r46", "43": "r46", "44": "r46", "45": "r46", "46": "r46", "52": "r46", "53": "r46", "54": "r46", "55": "r46", "57": "r46" }, { "23": "r40", "24": "r40", "25": "r40", "26": "r40", "27": "r40", "28": "r40", "29": "r40", "30": "r40", "31": "r40", "32": "r40", "33": "r40", "34": "r40", "35": "r40", "36": "r40", "37": "r40", "38": "r40", "39": "r40", "40": "r40", "41": "r40", "42": "r40", "43": "r40", "44": "r40", "45": "r40", "52": "r40", "53": "r40", "54": "r40", "55": "r40", "57": "r40" }, { "25": "s12", "31": "s58" }, { "23": "r18", "24": "r18", "25": "r18", "26": "r18", "27": "r18", "28": "r18", "29": "r18", "30": "r18", "31": "r18", "32": "r18", "33": "r18", "34": "r18", "35": "r18", "36": "r18", "37": "r18", "38": "r18", "39": "r18", "40": "r18", "41": "r18", "42": "r18", "43": "r18", "44": "r18", "45": "r18", "52": "r18", "53": "r18", "54": "r18", "55": "r18", "57": "r18" }, { "25": "s12", "31": "s60" }, { "23": "r19", "24": "r19", "25": "r19", "26": "r19", "27": "r19", "28": "r19", "29": "r19", "30": "r19", "31": "r19", "32": "r19", "33": "r19", "34": "r19", "35": "r19", "36": "r19", "37": "r19", "38": "r19", "39": "r19", "40": "r19", "41": "r19", "42": "r19", "43": "r19", "44": "r19", "45": "r19", "52": "r19", "53": "r19", "54": "r19", "55": "r19", "57": "r19" }, { "25": "s12", "31": "s62" }, { "23": "r20", "24": "r20", "25": "r20", "26": "r20", "27": "r20", "28": "r20", "29": "r20", "30": "r20", "31": "r20", "32": "r20", "33": "r20", "34": "r20", "35": "r20", "36": "r20", "37": "r20", "38": "r20", "39": "r20", "40": "r20", "41": "r20", "42": "r20", "43": "r20", "44": "r20", "45": "r20", "52": "r20", "53": "r20", "54": "r20", "55": "r20", "57": "r20" }, { "25": "s12", "31": "s64" }, { "23": "r21", "24": "r21", "25": "r21", "26": "r21", "27": "r21", "28": "r21", "29": "r21", "30": "r21", "31": "r21", "32": "r21", "33": "r21", "34": "r21", "35": "r21", "36": "r21", "37": "r21", "38": "r21", "39": "r21", "40": "r21", "41": "r21", "42": "r21", "43": "r21", "44": "r21", "45": "r21", "52": "r21", "53": "r21", "54": "r21", "55": "r21", "57": "r21" }, { "56": "s72" }, { "56": "r55" }, { "10": 70, "20": 73, "21": 75, "22": 76, "24": "s28", "28": "s71", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "56": "r56", "58": "s74" }, { "24": "r62", "28": "r62", "35": "r62", "36": "r62", "37": "r62", "38": "r62", "39": "r62", "40": "r62", "41": "r62", "42": "r62", "43": "r62", "44": "r62", "45": "r62", "56": "r62", "58": "r62" }, { "24": "r63", "28": "r63", "35": "r63", "36": "r63", "37": "r63", "38": "r63", "39": "r63", "40": "r63", "41": "r63", "42": "r63", "43": "r63", "44": "r63", "45": "r63", "56": "r63", "58": "r63" }, { "24": "r64", "28": "r64", "35": "r64", "36": "r64", "37": "r64", "38": "r64", "39": "r64", "40": "r64", "41": "r64", "42": "r64", "43": "r64", "44": "r64", "45": "r64", "56": "r64", "58": "r64" }, { "24": "r65", "28": "r65", "35": "r65", "36": "r65", "37": "r65", "38": "r65", "39": "r65", "40": "r65", "41": "r65", "42": "r65", "43": "r65", "44": "r65", "45": "r65", "56": "r65", "58": "r65" }, { "23": "r52", "24": "r52", "25": "r52", "26": "r52", "27": "r52", "28": "r52", "29": "r52", "30": "r52", "31": "r52", "32": "r52", "33": "r52", "34": "r52", "35": "r52", "36": "r52", "37": "r52", "38": "r52", "39": "r52", "40": "r52", "41": "r52", "42": "r52", "43": "r52", "44": "r52", "45": "r52", "46": "r52", "47": "r52", "48": "r52", "49": "r52", "50": "r52", "51": "r52", "52": "r52", "53": "r52", "54": "r52", "55": "r52", "57": "r52" }, { "56": "r57" }, { "10": 70, "21": 77, "22": 69, "24": "s28", "28": "s71", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "56": "r62", "58": "s68" }, { "56": "r59" }, { "10": 70, "20": 79, "21": 75, "22": 76, "24": "s28", "28": "s71", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "56": "r63", "58": "s80" }, { "10": 70, "18": 78, "19": 66, "21": 67, "22": 69, "24": "s28", "28": "s71", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "56": "r54", "58": "s68" }, { "56": "r58" }, { "56": "r60" }, { "10": 70, "21": 81, "22": 69, "24": "s28", "28": "s71", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "56": "r62", "58": "s68" }, { "10": 70, "18": 82, "19": 66, "21": 67, "22": 69, "24": "s28", "28": "s71", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "56": "r54", "58": "s68" }, { "56": "r61" }, { "56": "s84" }, { "23": "r53", "24": "r53", "25": "r53", "26": "r53", "27": "r53", "28": "r53", "29": "r53", "30": "r53", "31": "r53", "32": "r53", "33": "r53", "34": "r53", "35": "r53", "36": "r53", "37": "r53", "38": "r53", "39": "r53", "40": "r53", "41": "r53", "42": "r53", "43": "r53", "44": "r53", "45": "r53", "46": "r53", "47": "r53", "48": "r53", "49": "r53", "50": "r53", "51": "r53", "52": "r53", "53": "r53", "54": "r53", "55": "r53", "57": "r53" }, { "25": "s12", "31": "s86" }, { "23": "r49", "24": "r49", "25": "r49", "26": "r49", "27": "r49", "28": "r49", "29": "r49", "30": "r49", "31": "r49", "32": "r49", "33": "r49", "34": "r49", "35": "r49", "36": "r49", "37": "r49", "38": "r49", "39": "r49", "40": "r49", "41": "r49", "42": "r49", "43": "r49", "44": "r49", "45": "r49", "46": "r49", "47": "r49", "48": "r49", "49": "r49", "50": "r49", "51": "r49", "52": "r49", "53": "r49", "54": "r49", "55": "r49", "57": "r49" }, { "25": "s12", "31": "s88" }, { "23": "r50", "24": "r50", "25": "r50", "26": "r50", "27": "r50", "28": "r50", "29": "r50", "30": "r50", "31": "r50", "32": "r50", "33": "r50", "34": "r50", "35": "r50", "36": "r50", "37": "r50", "38": "r50", "39": "r50", "40": "r50", "41": "r50", "42": "r50", "43": "r50", "44": "r50", "45": "r50", "46": "r50", "47": "r50", "48": "r50", "49": "r50", "50": "r50", "51": "r50", "52": "r50", "53": "r50", "54": "r50", "55": "r50", "57": "r50" }, { "25": "s12", "31": "s90" }, { "23": "r51", "24": "r51", "25": "r51", "26": "r51", "27": "r51", "28": "r51", "29": "r51", "30": "r51", "31": "r51", "32": "r51", "33": "r51", "34": "r51", "35": "r51", "36": "r51", "37": "r51", "38": "r51", "39": "r51", "40": "r51", "41": "r51", "42": "r51", "43": "r51", "44": "r51", "45": "r51", "46": "r51", "47": "r51", "48": "r51", "49": "r51", "50": "r51", "51": "r51", "52": "r51", "53": "r51", "54": "r51", "55": "r51", "57": "r51" }];
|
|
|
|
/**
|
|
* Parsing stack.
|
|
*/
|
|
var stack = [];
|
|
|
|
/**
|
|
* Tokenizer instance.
|
|
*/
|
|
var tokenizer = void 0;
|
|
/**
|
|
* Generic tokenizer used by the parser in the Syntax tool.
|
|
*
|
|
* https://www.npmjs.com/package/syntax-cli
|
|
*
|
|
* See `--custom-tokinzer` to skip this generation, and use a custom one.
|
|
*/
|
|
|
|
var lexRules = [[/^#[^\n]+/, function () {/* skip comments */}], [/^\s+/, function () {/* skip whitespace */}], [/^-/, function () {
|
|
return 'DASH';
|
|
}], [/^\//, function () {
|
|
return 'CHAR';
|
|
}], [/^#/, function () {
|
|
return 'CHAR';
|
|
}], [/^\|/, function () {
|
|
return 'CHAR';
|
|
}], [/^\./, function () {
|
|
return 'CHAR';
|
|
}], [/^\{/, function () {
|
|
return 'CHAR';
|
|
}], [/^\{\d+\}/, function () {
|
|
return 'RANGE_EXACT';
|
|
}], [/^\{\d+,\}/, function () {
|
|
return 'RANGE_OPEN';
|
|
}], [/^\{\d+,\d+\}/, function () {
|
|
return 'RANGE_CLOSED';
|
|
}], [/^\\k<(([\u0041-\u005a\u0061-\u007a\u00aa\u00b5\u00ba\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376-\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e-\u066f\u0671-\u06d3\u06d5\u06e5-\u06e6\u06ee-\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4-\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u08a0-\u08b4\u08b6-\u08bd\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f-\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc-\u09dd\u09df-\u09e1\u09f0-\u09f1\u09fc\u0a05-\u0a0a\u0a0f-\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32-\u0a33\u0a35-\u0a36\u0a38-\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2-\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0-\u0ae1\u0af9\u0b05-\u0b0c\u0b0f-\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32-\u0b33\u0b35-\u0b39\u0b3d\u0b5c-\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99-\u0b9a\u0b9c\u0b9e-\u0b9f\u0ba3-\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c60-\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0-\u0ce1\u0cf1-\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32-\u0e33\u0e40-\u0e46\u0e81-\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2-\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065-\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae-\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5-\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2-\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fef\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a-\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7bf\ua7c2-\ua7c6\ua7f7-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd-\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5-\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab67\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc]|\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c-\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\udd40-\udd74\ude80-\ude9c\udea0-\uded0\udf00-\udf1f\udf2d-\udf4a\udf50-\udf75\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf\udfd1-\udfd5]|\ud801[\udc00-\udc9d\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37-\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4-\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe-\uddbf\ude00\ude10-\ude13\ude15-\ude17\ude19-\ude35\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee4\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2\udd00-\udd23\udf00-\udf1c\udf27\udf30-\udf45\udfe0-\udff6]|\ud804[\udc03-\udc37\udc83-\udcaf\udcd0-\udce8\udd03-\udd26\udd44\udd50-\udd72\udd76\udd83-\uddb2\uddc1-\uddc4\uddda\udddc\ude00-\ude11\ude13-\ude2b\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udede\udf05-\udf0c\udf0f-\udf10\udf13-\udf28\udf2a-\udf30\udf32-\udf33\udf35-\udf39\udf3d\udf50\udf5d-\udf61]|\ud805[\udc00-\udc34\udc47-\udc4a\udc5f\udc80-\udcaf\udcc4-\udcc5\udcc7\udd80-\uddae\uddd8-\udddb\ude00-\ude2f\ude44\ude80-\udeaa\udeb8\udf00-\udf1a]|\ud806[\udc00-\udc2b\udca0-\udcdf\udcff\udda0-\udda7\uddaa-\uddd0\udde1\udde3\ude00\ude0b-\ude32\ude3a\ude50\ude5c-\ude89\ude9d\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc2e\udc40\udc72-\udc8f\udd00-\udd06\udd08-\udd09\udd0b-\udd30\udd46\udd60-\udd65\udd67-\udd68\udd6a-\udd89\udd98\udee0-\udef2]|\ud808[\udc00-\udf99]|\ud809[\udc00-\udc6e\udc80-\udd43]|\ud80c[\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udf00-\udf2f\udf40-\udf43\udf63-\udf77\udf7d-\udf8f]|\ud81b[\ude40-\ude7f\udf00-\udf4a\udf50\udf93-\udf9f\udfe0-\udfe1\udfe3]|\ud81c[\udc00-\udfff]|\ud81d[\udc00-\udfff]|\ud81e[\udc00-\udfff]|\ud81f[\udc00-\udfff]|\ud820[\udc00-\udfff]|\ud821[\udc00-\udff7]|\ud822[\udc00-\udef2]|\ud82c[\udc00-\udd1e\udd50-\udd52\udd64-\udd67\udd70-\udefb]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e-\udc9f\udca2\udca5-\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud838[\udd00-\udd2c\udd37-\udd3d\udd4e\udec0-\udeeb]|\ud83a[\udc00-\udcc4\udd00-\udd43\udd4b]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21-\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51-\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61-\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud840[\udc00-\udfff]|\ud841[\udc00-\udfff]|\ud842[\udc00-\udfff]|\ud843[\udc00-\udfff]|\ud844[\udc00-\udfff]|\ud845[\udc00-\udfff]|\ud846[\udc00-\udfff]|\ud847[\udc00-\udfff]|\ud848[\udc00-\udfff]|\ud849[\udc00-\udfff]|\ud84a[\udc00-\udfff]|\ud84b[\udc00-\udfff]|\ud84c[\udc00-\udfff]|\ud84d[\udc00-\udfff]|\ud84e[\udc00-\udfff]|\ud84f[\udc00-\udfff]|\ud850[\udc00-\udfff]|\ud851[\udc00-\udfff]|\ud852[\udc00-\udfff]|\ud853[\udc00-\udfff]|\ud854[\udc00-\udfff]|\ud855[\udc00-\udfff]|\ud856[\udc00-\udfff]|\ud857[\udc00-\udfff]|\ud858[\udc00-\udfff]|\ud859[\udc00-\udfff]|\ud85a[\udc00-\udfff]|\ud85b[\udc00-\udfff]|\ud85c[\udc00-\udfff]|\ud85d[\udc00-\udfff]|\ud85e[\udc00-\udfff]|\ud85f[\udc00-\udfff]|\ud860[\udc00-\udfff]|\ud861[\udc00-\udfff]|\ud862[\udc00-\udfff]|\ud863[\udc00-\udfff]|\ud864[\udc00-\udfff]|\ud865[\udc00-\udfff]|\ud866[\udc00-\udfff]|\ud867[\udc00-\udfff]|\ud868[\udc00-\udfff]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86a[\udc00-\udfff]|\ud86b[\udc00-\udfff]|\ud86c[\udc00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud86f[\udc00-\udfff]|\ud870[\udc00-\udfff]|\ud871[\udc00-\udfff]|\ud872[\udc00-\udfff]|\ud873[\udc00-\udea1\udeb0-\udfff]|\ud874[\udc00-\udfff]|\ud875[\udc00-\udfff]|\ud876[\udc00-\udfff]|\ud877[\udc00-\udfff]|\ud878[\udc00-\udfff]|\ud879[\udc00-\udfff]|\ud87a[\udc00-\udfe0]|\ud87e[\udc00-\ude1d])|[$_]|(\\u[0-9a-fA-F]{4}|\\u\{[0-9a-fA-F]{1,}\}))(([\u0030-\u0039\u0041-\u005a\u005f\u0061-\u007a\u00aa\u00b5\u00b7\u00ba\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0300-\u0374\u0376-\u0377\u037a-\u037d\u037f\u0386-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u0483-\u0487\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u0591-\u05bd\u05bf\u05c1-\u05c2\u05c4-\u05c5\u05c7\u05d0-\u05ea\u05ef-\u05f2\u0610-\u061a\u0620-\u0669\u066e-\u06d3\u06d5-\u06dc\u06df-\u06e8\u06ea-\u06fc\u06ff\u0710-\u074a\u074d-\u07b1\u07c0-\u07f5\u07fa\u07fd\u0800-\u082d\u0840-\u085b\u0860-\u086a\u08a0-\u08b4\u08b6-\u08bd\u08d3-\u08e1\u08e3-\u0963\u0966-\u096f\u0971-\u0983\u0985-\u098c\u098f-\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bc-\u09c4\u09c7-\u09c8\u09cb-\u09ce\u09d7\u09dc-\u09dd\u09df-\u09e3\u09e6-\u09f1\u09fc\u09fe\u0a01-\u0a03\u0a05-\u0a0a\u0a0f-\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32-\u0a33\u0a35-\u0a36\u0a38-\u0a39\u0a3c\u0a3e-\u0a42\u0a47-\u0a48\u0a4b-\u0a4d\u0a51\u0a59-\u0a5c\u0a5e\u0a66-\u0a75\u0a81-\u0a83\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2-\u0ab3\u0ab5-\u0ab9\u0abc-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ad0\u0ae0-\u0ae3\u0ae6-\u0aef\u0af9-\u0aff\u0b01-\u0b03\u0b05-\u0b0c\u0b0f-\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32-\u0b33\u0b35-\u0b39\u0b3c-\u0b44\u0b47-\u0b48\u0b4b-\u0b4d\u0b56-\u0b57\u0b5c-\u0b5d\u0b5f-\u0b63\u0b66-\u0b6f\u0b71\u0b82-\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99-\u0b9a\u0b9c\u0b9e-\u0b9f\u0ba3-\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd0\u0bd7\u0be6-\u0bef\u0c00-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55-\u0c56\u0c58-\u0c5a\u0c60-\u0c63\u0c66-\u0c6f\u0c80-\u0c83\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbc-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5-\u0cd6\u0cde\u0ce0-\u0ce3\u0ce6-\u0cef\u0cf1-\u0cf2\u0d00-\u0d03\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d44\u0d46-\u0d48\u0d4a-\u0d4e\u0d54-\u0d57\u0d5f-\u0d63\u0d66-\u0d6f\u0d7a-\u0d7f\u0d82-\u0d83\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2-\u0df3\u0e01-\u0e3a\u0e40-\u0e4e\u0e50-\u0e59\u0e81-\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0ebd\u0ec0-\u0ec4\u0ec6\u0ec8-\u0ecd\u0ed0-\u0ed9\u0edc-\u0edf\u0f00\u0f18-\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e-\u0f47\u0f49-\u0f6c\u0f71-\u0f84\u0f86-\u0f97\u0f99-\u0fbc\u0fc6\u1000-\u1049\u1050-\u109d\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u135d-\u135f\u1369-\u1371\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176c\u176e-\u1770\u1772-\u1773\u1780-\u17d3\u17d7\u17dc-\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u1820-\u1878\u1880-\u18aa\u18b0-\u18f5\u1900-\u191e\u1920-\u192b\u1930-\u193b\u1946-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u19d0-\u19da\u1a00-\u1a1b\u1a20-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1aa7\u1ab0-\u1abd\u1b00-\u1b4b\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1bf3\u1c00-\u1c37\u1c40-\u1c49\u1c4d-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1cd0-\u1cd2\u1cd4-\u1cfa\u1d00-\u1df9\u1dfb-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u203f-\u2040\u2054\u2071\u207f\u2090-\u209c\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d7f-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2de0-\u2dff\u3005-\u3007\u3021-\u302f\u3031-\u3035\u3038-\u303c\u3041-\u3096\u3099-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fef\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua62b\ua640-\ua66f\ua674-\ua67d\ua67f-\ua6f1\ua717-\ua71f\ua722-\ua788\ua78b-\ua7bf\ua7c2-\ua7c6\ua7f7-\ua827\ua840-\ua873\ua880-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f7\ua8fb\ua8fd-\ua92d\ua930-\ua953\ua960-\ua97c\ua980-\ua9c0\ua9cf-\ua9d9\ua9e0-\ua9fe\uaa00-\uaa36\uaa40-\uaa4d\uaa50-\uaa59\uaa60-\uaa76\uaa7a-\uaac2\uaadb-\uaadd\uaae0-\uaaef\uaaf2-\uaaf6\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab67\uab70-\uabea\uabec-\uabed\uabf0-\uabf9\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe00-\ufe0f\ufe20-\ufe2f\ufe33-\ufe34\ufe4d-\ufe4f\ufe70-\ufe74\ufe76-\ufefc\uff10-\uff19\uff21-\uff3a\uff3f\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc]|\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c-\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\udd40-\udd74\uddfd\ude80-\ude9c\udea0-\uded0\udee0\udf00-\udf1f\udf2d-\udf4a\udf50-\udf7a\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf\udfd1-\udfd5]|\ud801[\udc00-\udc9d\udca0-\udca9\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37-\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4-\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe-\uddbf\ude00-\ude03\ude05-\ude06\ude0c-\ude13\ude15-\ude17\ude19-\ude35\ude38-\ude3a\ude3f\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee6\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2\udd00-\udd27\udd30-\udd39\udf00-\udf1c\udf27\udf30-\udf50\udfe0-\udff6]|\ud804[\udc00-\udc46\udc66-\udc6f\udc7f-\udcba\udcd0-\udce8\udcf0-\udcf9\udd00-\udd34\udd36-\udd3f\udd44-\udd46\udd50-\udd73\udd76\udd80-\uddc4\uddc9-\uddcc\uddd0-\uddda\udddc\ude00-\ude11\ude13-\ude37\ude3e\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udeea\udef0-\udef9\udf00-\udf03\udf05-\udf0c\udf0f-\udf10\udf13-\udf28\udf2a-\udf30\udf32-\udf33\udf35-\udf39\udf3b-\udf44\udf47-\udf48\udf4b-\udf4d\udf50\udf57\udf5d-\udf63\udf66-\udf6c\udf70-\udf74]|\ud805[\udc00-\udc4a\udc50-\udc59\udc5e-\udc5f\udc80-\udcc5\udcc7\udcd0-\udcd9\udd80-\uddb5\uddb8-\uddc0\uddd8-\udddd\ude00-\ude40\ude44\ude50-\ude59\ude80-\udeb8\udec0-\udec9\udf00-\udf1a\udf1d-\udf2b\udf30-\udf39]|\ud806[\udc00-\udc3a\udca0-\udce9\udcff\udda0-\udda7\uddaa-\uddd7\uddda-\udde1\udde3-\udde4\ude00-\ude3e\ude47\ude50-\ude99\ude9d\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc36\udc38-\udc40\udc50-\udc59\udc72-\udc8f\udc92-\udca7\udca9-\udcb6\udd00-\udd06\udd08-\udd09\udd0b-\udd36\udd3a\udd3c-\udd3d\udd3f-\udd47\udd50-\udd59\udd60-\udd65\udd67-\udd68\udd6a-\udd8e\udd90-\udd91\udd93-\udd98\udda0-\udda9\udee0-\udef6]|\ud808[\udc00-\udf99]|\ud809[\udc00-\udc6e\udc80-\udd43]|\ud80c[\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\ude60-\ude69\uded0-\udeed\udef0-\udef4\udf00-\udf36\udf40-\udf43\udf50-\udf59\udf63-\udf77\udf7d-\udf8f]|\ud81b[\ude40-\ude7f\udf00-\udf4a\udf4f-\udf87\udf8f-\udf9f\udfe0-\udfe1\udfe3]|\ud81c[\udc00-\udfff]|\ud81d[\udc00-\udfff]|\ud81e[\udc00-\udfff]|\ud81f[\udc00-\udfff]|\ud820[\udc00-\udfff]|\ud821[\udc00-\udff7]|\ud822[\udc00-\udef2]|\ud82c[\udc00-\udd1e\udd50-\udd52\udd64-\udd67\udd70-\udefb]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99\udc9d-\udc9e]|\ud834[\udd65-\udd69\udd6d-\udd72\udd7b-\udd82\udd85-\udd8b\uddaa-\uddad\ude42-\ude44]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e-\udc9f\udca2\udca5-\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb\udfce-\udfff]|\ud836[\ude00-\ude36\ude3b-\ude6c\ude75\ude84\ude9b-\ude9f\udea1-\udeaf]|\ud838[\udc00-\udc06\udc08-\udc18\udc1b-\udc21\udc23-\udc24\udc26-\udc2a\udd00-\udd2c\udd30-\udd3d\udd40-\udd49\udd4e\udec0-\udef9]|\ud83a[\udc00-\udcc4\udcd0-\udcd6\udd00-\udd4b\udd50-\udd59]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21-\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51-\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61-\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud840[\udc00-\udfff]|\ud841[\udc00-\udfff]|\ud842[\udc00-\udfff]|\ud843[\udc00-\udfff]|\ud844[\udc00-\udfff]|\ud845[\udc00-\udfff]|\ud846[\udc00-\udfff]|\ud847[\udc00-\udfff]|\ud848[\udc00-\udfff]|\ud849[\udc00-\udfff]|\ud84a[\udc00-\udfff]|\ud84b[\udc00-\udfff]|\ud84c[\udc00-\udfff]|\ud84d[\udc00-\udfff]|\ud84e[\udc00-\udfff]|\ud84f[\udc00-\udfff]|\ud850[\udc00-\udfff]|\ud851[\udc00-\udfff]|\ud852[\udc00-\udfff]|\ud853[\udc00-\udfff]|\ud854[\udc00-\udfff]|\ud855[\udc00-\udfff]|\ud856[\udc00-\udfff]|\ud857[\udc00-\udfff]|\ud858[\udc00-\udfff]|\ud859[\udc00-\udfff]|\ud85a[\udc00-\udfff]|\ud85b[\udc00-\udfff]|\ud85c[\udc00-\udfff]|\ud85d[\udc00-\udfff]|\ud85e[\udc00-\udfff]|\ud85f[\udc00-\udfff]|\ud860[\udc00-\udfff]|\ud861[\udc00-\udfff]|\ud862[\udc00-\udfff]|\ud863[\udc00-\udfff]|\ud864[\udc00-\udfff]|\ud865[\udc00-\udfff]|\ud866[\udc00-\udfff]|\ud867[\udc00-\udfff]|\ud868[\udc00-\udfff]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86a[\udc00-\udfff]|\ud86b[\udc00-\udfff]|\ud86c[\udc00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud86f[\udc00-\udfff]|\ud870[\udc00-\udfff]|\ud871[\udc00-\udfff]|\ud872[\udc00-\udfff]|\ud873[\udc00-\udea1\udeb0-\udfff]|\ud874[\udc00-\udfff]|\ud875[\udc00-\udfff]|\ud876[\udc00-\udfff]|\ud877[\udc00-\udfff]|\ud878[\udc00-\udfff]|\ud879[\udc00-\udfff]|\ud87a[\udc00-\udfe0]|\ud87e[\udc00-\ude1d]|\udb40[\udd00-\uddef])|[$_]|(\\u[0-9a-fA-F]{4}|\\u\{[0-9a-fA-F]{1,}\})|[\u200c\u200d])*>/, function () {
|
|
var groupName = yytext.slice(3, -1);
|
|
validateUnicodeGroupName(groupName, this.getCurrentState());
|
|
return 'NAMED_GROUP_REF';
|
|
}], [/^\\b/, function () {
|
|
return 'ESC_b';
|
|
}], [/^\\B/, function () {
|
|
return 'ESC_B';
|
|
}], [/^\\c[a-zA-Z]/, function () {
|
|
return 'CTRL_CH';
|
|
}], [/^\\0\d{1,2}/, function () {
|
|
return 'OCT_CODE';
|
|
}], [/^\\0/, function () {
|
|
return 'DEC_CODE';
|
|
}], [/^\\\d{1,3}/, function () {
|
|
return 'DEC_CODE';
|
|
}], [/^\\u[dD][89abAB][0-9a-fA-F]{2}\\u[dD][c-fC-F][0-9a-fA-F]{2}/, function () {
|
|
return 'U_CODE_SURROGATE';
|
|
}], [/^\\u\{[0-9a-fA-F]{1,}\}/, function () {
|
|
return 'U_CODE';
|
|
}], [/^\\u[0-9a-fA-F]{4}/, function () {
|
|
return 'U_CODE';
|
|
}], [/^\\[pP]\{\w+(?:=\w+)?\}/, function () {
|
|
return 'U_PROP_VALUE_EXP';
|
|
}], [/^\\x[0-9a-fA-F]{2}/, function () {
|
|
return 'HEX_CODE';
|
|
}], [/^\\[tnrdDsSwWvf]/, function () {
|
|
return 'META_CHAR';
|
|
}], [/^\\\//, function () {
|
|
return 'ESC_CHAR';
|
|
}], [/^\\[ #]/, function () {
|
|
return 'ESC_CHAR';
|
|
}], [/^\\[\^\$\.\*\+\?\(\)\\\[\]\{\}\|\/]/, function () {
|
|
return 'ESC_CHAR';
|
|
}], [/^\\[^*?+\[()\\|]/, function () {
|
|
var s = this.getCurrentState();
|
|
if (s === 'u_class' && yytext === "\\-") {
|
|
return 'ESC_CHAR';
|
|
} else if (s === 'u' || s === 'xu' || s === 'u_class') {
|
|
throw new SyntaxError('invalid Unicode escape ' + yytext);
|
|
}
|
|
return 'ESC_CHAR';
|
|
}], [/^\(/, function () {
|
|
return 'CHAR';
|
|
}], [/^\)/, function () {
|
|
return 'CHAR';
|
|
}], [/^\(\?=/, function () {
|
|
return 'POS_LA_ASSERT';
|
|
}], [/^\(\?!/, function () {
|
|
return 'NEG_LA_ASSERT';
|
|
}], [/^\(\?<=/, function () {
|
|
return 'POS_LB_ASSERT';
|
|
}], [/^\(\?<!/, function () {
|
|
return 'NEG_LB_ASSERT';
|
|
}], [/^\(\?:/, function () {
|
|
return 'NON_CAPTURE_GROUP';
|
|
}], [/^\(\?<(([\u0041-\u005a\u0061-\u007a\u00aa\u00b5\u00ba\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376-\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e-\u066f\u0671-\u06d3\u06d5\u06e5-\u06e6\u06ee-\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4-\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u08a0-\u08b4\u08b6-\u08bd\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f-\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc-\u09dd\u09df-\u09e1\u09f0-\u09f1\u09fc\u0a05-\u0a0a\u0a0f-\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32-\u0a33\u0a35-\u0a36\u0a38-\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2-\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0-\u0ae1\u0af9\u0b05-\u0b0c\u0b0f-\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32-\u0b33\u0b35-\u0b39\u0b3d\u0b5c-\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99-\u0b9a\u0b9c\u0b9e-\u0b9f\u0ba3-\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c60-\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0-\u0ce1\u0cf1-\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32-\u0e33\u0e40-\u0e46\u0e81-\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2-\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065-\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae-\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5-\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2-\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fef\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a-\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7bf\ua7c2-\ua7c6\ua7f7-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd-\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5-\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab67\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc]|\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c-\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\udd40-\udd74\ude80-\ude9c\udea0-\uded0\udf00-\udf1f\udf2d-\udf4a\udf50-\udf75\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf\udfd1-\udfd5]|\ud801[\udc00-\udc9d\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37-\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4-\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe-\uddbf\ude00\ude10-\ude13\ude15-\ude17\ude19-\ude35\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee4\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2\udd00-\udd23\udf00-\udf1c\udf27\udf30-\udf45\udfe0-\udff6]|\ud804[\udc03-\udc37\udc83-\udcaf\udcd0-\udce8\udd03-\udd26\udd44\udd50-\udd72\udd76\udd83-\uddb2\uddc1-\uddc4\uddda\udddc\ude00-\ude11\ude13-\ude2b\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udede\udf05-\udf0c\udf0f-\udf10\udf13-\udf28\udf2a-\udf30\udf32-\udf33\udf35-\udf39\udf3d\udf50\udf5d-\udf61]|\ud805[\udc00-\udc34\udc47-\udc4a\udc5f\udc80-\udcaf\udcc4-\udcc5\udcc7\udd80-\uddae\uddd8-\udddb\ude00-\ude2f\ude44\ude80-\udeaa\udeb8\udf00-\udf1a]|\ud806[\udc00-\udc2b\udca0-\udcdf\udcff\udda0-\udda7\uddaa-\uddd0\udde1\udde3\ude00\ude0b-\ude32\ude3a\ude50\ude5c-\ude89\ude9d\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc2e\udc40\udc72-\udc8f\udd00-\udd06\udd08-\udd09\udd0b-\udd30\udd46\udd60-\udd65\udd67-\udd68\udd6a-\udd89\udd98\udee0-\udef2]|\ud808[\udc00-\udf99]|\ud809[\udc00-\udc6e\udc80-\udd43]|\ud80c[\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udf00-\udf2f\udf40-\udf43\udf63-\udf77\udf7d-\udf8f]|\ud81b[\ude40-\ude7f\udf00-\udf4a\udf50\udf93-\udf9f\udfe0-\udfe1\udfe3]|\ud81c[\udc00-\udfff]|\ud81d[\udc00-\udfff]|\ud81e[\udc00-\udfff]|\ud81f[\udc00-\udfff]|\ud820[\udc00-\udfff]|\ud821[\udc00-\udff7]|\ud822[\udc00-\udef2]|\ud82c[\udc00-\udd1e\udd50-\udd52\udd64-\udd67\udd70-\udefb]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e-\udc9f\udca2\udca5-\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud838[\udd00-\udd2c\udd37-\udd3d\udd4e\udec0-\udeeb]|\ud83a[\udc00-\udcc4\udd00-\udd43\udd4b]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21-\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51-\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61-\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud840[\udc00-\udfff]|\ud841[\udc00-\udfff]|\ud842[\udc00-\udfff]|\ud843[\udc00-\udfff]|\ud844[\udc00-\udfff]|\ud845[\udc00-\udfff]|\ud846[\udc00-\udfff]|\ud847[\udc00-\udfff]|\ud848[\udc00-\udfff]|\ud849[\udc00-\udfff]|\ud84a[\udc00-\udfff]|\ud84b[\udc00-\udfff]|\ud84c[\udc00-\udfff]|\ud84d[\udc00-\udfff]|\ud84e[\udc00-\udfff]|\ud84f[\udc00-\udfff]|\ud850[\udc00-\udfff]|\ud851[\udc00-\udfff]|\ud852[\udc00-\udfff]|\ud853[\udc00-\udfff]|\ud854[\udc00-\udfff]|\ud855[\udc00-\udfff]|\ud856[\udc00-\udfff]|\ud857[\udc00-\udfff]|\ud858[\udc00-\udfff]|\ud859[\udc00-\udfff]|\ud85a[\udc00-\udfff]|\ud85b[\udc00-\udfff]|\ud85c[\udc00-\udfff]|\ud85d[\udc00-\udfff]|\ud85e[\udc00-\udfff]|\ud85f[\udc00-\udfff]|\ud860[\udc00-\udfff]|\ud861[\udc00-\udfff]|\ud862[\udc00-\udfff]|\ud863[\udc00-\udfff]|\ud864[\udc00-\udfff]|\ud865[\udc00-\udfff]|\ud866[\udc00-\udfff]|\ud867[\udc00-\udfff]|\ud868[\udc00-\udfff]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86a[\udc00-\udfff]|\ud86b[\udc00-\udfff]|\ud86c[\udc00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud86f[\udc00-\udfff]|\ud870[\udc00-\udfff]|\ud871[\udc00-\udfff]|\ud872[\udc00-\udfff]|\ud873[\udc00-\udea1\udeb0-\udfff]|\ud874[\udc00-\udfff]|\ud875[\udc00-\udfff]|\ud876[\udc00-\udfff]|\ud877[\udc00-\udfff]|\ud878[\udc00-\udfff]|\ud879[\udc00-\udfff]|\ud87a[\udc00-\udfe0]|\ud87e[\udc00-\ude1d])|[$_]|(\\u[0-9a-fA-F]{4}|\\u\{[0-9a-fA-F]{1,}\}))(([\u0030-\u0039\u0041-\u005a\u005f\u0061-\u007a\u00aa\u00b5\u00b7\u00ba\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0300-\u0374\u0376-\u0377\u037a-\u037d\u037f\u0386-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u0483-\u0487\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u0591-\u05bd\u05bf\u05c1-\u05c2\u05c4-\u05c5\u05c7\u05d0-\u05ea\u05ef-\u05f2\u0610-\u061a\u0620-\u0669\u066e-\u06d3\u06d5-\u06dc\u06df-\u06e8\u06ea-\u06fc\u06ff\u0710-\u074a\u074d-\u07b1\u07c0-\u07f5\u07fa\u07fd\u0800-\u082d\u0840-\u085b\u0860-\u086a\u08a0-\u08b4\u08b6-\u08bd\u08d3-\u08e1\u08e3-\u0963\u0966-\u096f\u0971-\u0983\u0985-\u098c\u098f-\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bc-\u09c4\u09c7-\u09c8\u09cb-\u09ce\u09d7\u09dc-\u09dd\u09df-\u09e3\u09e6-\u09f1\u09fc\u09fe\u0a01-\u0a03\u0a05-\u0a0a\u0a0f-\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32-\u0a33\u0a35-\u0a36\u0a38-\u0a39\u0a3c\u0a3e-\u0a42\u0a47-\u0a48\u0a4b-\u0a4d\u0a51\u0a59-\u0a5c\u0a5e\u0a66-\u0a75\u0a81-\u0a83\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2-\u0ab3\u0ab5-\u0ab9\u0abc-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ad0\u0ae0-\u0ae3\u0ae6-\u0aef\u0af9-\u0aff\u0b01-\u0b03\u0b05-\u0b0c\u0b0f-\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32-\u0b33\u0b35-\u0b39\u0b3c-\u0b44\u0b47-\u0b48\u0b4b-\u0b4d\u0b56-\u0b57\u0b5c-\u0b5d\u0b5f-\u0b63\u0b66-\u0b6f\u0b71\u0b82-\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99-\u0b9a\u0b9c\u0b9e-\u0b9f\u0ba3-\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd0\u0bd7\u0be6-\u0bef\u0c00-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55-\u0c56\u0c58-\u0c5a\u0c60-\u0c63\u0c66-\u0c6f\u0c80-\u0c83\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbc-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5-\u0cd6\u0cde\u0ce0-\u0ce3\u0ce6-\u0cef\u0cf1-\u0cf2\u0d00-\u0d03\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d44\u0d46-\u0d48\u0d4a-\u0d4e\u0d54-\u0d57\u0d5f-\u0d63\u0d66-\u0d6f\u0d7a-\u0d7f\u0d82-\u0d83\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2-\u0df3\u0e01-\u0e3a\u0e40-\u0e4e\u0e50-\u0e59\u0e81-\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0ebd\u0ec0-\u0ec4\u0ec6\u0ec8-\u0ecd\u0ed0-\u0ed9\u0edc-\u0edf\u0f00\u0f18-\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e-\u0f47\u0f49-\u0f6c\u0f71-\u0f84\u0f86-\u0f97\u0f99-\u0fbc\u0fc6\u1000-\u1049\u1050-\u109d\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u135d-\u135f\u1369-\u1371\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176c\u176e-\u1770\u1772-\u1773\u1780-\u17d3\u17d7\u17dc-\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u1820-\u1878\u1880-\u18aa\u18b0-\u18f5\u1900-\u191e\u1920-\u192b\u1930-\u193b\u1946-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u19d0-\u19da\u1a00-\u1a1b\u1a20-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1aa7\u1ab0-\u1abd\u1b00-\u1b4b\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1bf3\u1c00-\u1c37\u1c40-\u1c49\u1c4d-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1cd0-\u1cd2\u1cd4-\u1cfa\u1d00-\u1df9\u1dfb-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u203f-\u2040\u2054\u2071\u207f\u2090-\u209c\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d7f-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2de0-\u2dff\u3005-\u3007\u3021-\u302f\u3031-\u3035\u3038-\u303c\u3041-\u3096\u3099-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fef\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua62b\ua640-\ua66f\ua674-\ua67d\ua67f-\ua6f1\ua717-\ua71f\ua722-\ua788\ua78b-\ua7bf\ua7c2-\ua7c6\ua7f7-\ua827\ua840-\ua873\ua880-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f7\ua8fb\ua8fd-\ua92d\ua930-\ua953\ua960-\ua97c\ua980-\ua9c0\ua9cf-\ua9d9\ua9e0-\ua9fe\uaa00-\uaa36\uaa40-\uaa4d\uaa50-\uaa59\uaa60-\uaa76\uaa7a-\uaac2\uaadb-\uaadd\uaae0-\uaaef\uaaf2-\uaaf6\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab67\uab70-\uabea\uabec-\uabed\uabf0-\uabf9\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe00-\ufe0f\ufe20-\ufe2f\ufe33-\ufe34\ufe4d-\ufe4f\ufe70-\ufe74\ufe76-\ufefc\uff10-\uff19\uff21-\uff3a\uff3f\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc]|\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c-\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\udd40-\udd74\uddfd\ude80-\ude9c\udea0-\uded0\udee0\udf00-\udf1f\udf2d-\udf4a\udf50-\udf7a\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf\udfd1-\udfd5]|\ud801[\udc00-\udc9d\udca0-\udca9\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37-\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4-\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe-\uddbf\ude00-\ude03\ude05-\ude06\ude0c-\ude13\ude15-\ude17\ude19-\ude35\ude38-\ude3a\ude3f\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee6\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2\udd00-\udd27\udd30-\udd39\udf00-\udf1c\udf27\udf30-\udf50\udfe0-\udff6]|\ud804[\udc00-\udc46\udc66-\udc6f\udc7f-\udcba\udcd0-\udce8\udcf0-\udcf9\udd00-\udd34\udd36-\udd3f\udd44-\udd46\udd50-\udd73\udd76\udd80-\uddc4\uddc9-\uddcc\uddd0-\uddda\udddc\ude00-\ude11\ude13-\ude37\ude3e\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udeea\udef0-\udef9\udf00-\udf03\udf05-\udf0c\udf0f-\udf10\udf13-\udf28\udf2a-\udf30\udf32-\udf33\udf35-\udf39\udf3b-\udf44\udf47-\udf48\udf4b-\udf4d\udf50\udf57\udf5d-\udf63\udf66-\udf6c\udf70-\udf74]|\ud805[\udc00-\udc4a\udc50-\udc59\udc5e-\udc5f\udc80-\udcc5\udcc7\udcd0-\udcd9\udd80-\uddb5\uddb8-\uddc0\uddd8-\udddd\ude00-\ude40\ude44\ude50-\ude59\ude80-\udeb8\udec0-\udec9\udf00-\udf1a\udf1d-\udf2b\udf30-\udf39]|\ud806[\udc00-\udc3a\udca0-\udce9\udcff\udda0-\udda7\uddaa-\uddd7\uddda-\udde1\udde3-\udde4\ude00-\ude3e\ude47\ude50-\ude99\ude9d\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc36\udc38-\udc40\udc50-\udc59\udc72-\udc8f\udc92-\udca7\udca9-\udcb6\udd00-\udd06\udd08-\udd09\udd0b-\udd36\udd3a\udd3c-\udd3d\udd3f-\udd47\udd50-\udd59\udd60-\udd65\udd67-\udd68\udd6a-\udd8e\udd90-\udd91\udd93-\udd98\udda0-\udda9\udee0-\udef6]|\ud808[\udc00-\udf99]|\ud809[\udc00-\udc6e\udc80-\udd43]|\ud80c[\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\ude60-\ude69\uded0-\udeed\udef0-\udef4\udf00-\udf36\udf40-\udf43\udf50-\udf59\udf63-\udf77\udf7d-\udf8f]|\ud81b[\ude40-\ude7f\udf00-\udf4a\udf4f-\udf87\udf8f-\udf9f\udfe0-\udfe1\udfe3]|\ud81c[\udc00-\udfff]|\ud81d[\udc00-\udfff]|\ud81e[\udc00-\udfff]|\ud81f[\udc00-\udfff]|\ud820[\udc00-\udfff]|\ud821[\udc00-\udff7]|\ud822[\udc00-\udef2]|\ud82c[\udc00-\udd1e\udd50-\udd52\udd64-\udd67\udd70-\udefb]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99\udc9d-\udc9e]|\ud834[\udd65-\udd69\udd6d-\udd72\udd7b-\udd82\udd85-\udd8b\uddaa-\uddad\ude42-\ude44]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e-\udc9f\udca2\udca5-\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb\udfce-\udfff]|\ud836[\ude00-\ude36\ude3b-\ude6c\ude75\ude84\ude9b-\ude9f\udea1-\udeaf]|\ud838[\udc00-\udc06\udc08-\udc18\udc1b-\udc21\udc23-\udc24\udc26-\udc2a\udd00-\udd2c\udd30-\udd3d\udd40-\udd49\udd4e\udec0-\udef9]|\ud83a[\udc00-\udcc4\udcd0-\udcd6\udd00-\udd4b\udd50-\udd59]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21-\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51-\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61-\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud840[\udc00-\udfff]|\ud841[\udc00-\udfff]|\ud842[\udc00-\udfff]|\ud843[\udc00-\udfff]|\ud844[\udc00-\udfff]|\ud845[\udc00-\udfff]|\ud846[\udc00-\udfff]|\ud847[\udc00-\udfff]|\ud848[\udc00-\udfff]|\ud849[\udc00-\udfff]|\ud84a[\udc00-\udfff]|\ud84b[\udc00-\udfff]|\ud84c[\udc00-\udfff]|\ud84d[\udc00-\udfff]|\ud84e[\udc00-\udfff]|\ud84f[\udc00-\udfff]|\ud850[\udc00-\udfff]|\ud851[\udc00-\udfff]|\ud852[\udc00-\udfff]|\ud853[\udc00-\udfff]|\ud854[\udc00-\udfff]|\ud855[\udc00-\udfff]|\ud856[\udc00-\udfff]|\ud857[\udc00-\udfff]|\ud858[\udc00-\udfff]|\ud859[\udc00-\udfff]|\ud85a[\udc00-\udfff]|\ud85b[\udc00-\udfff]|\ud85c[\udc00-\udfff]|\ud85d[\udc00-\udfff]|\ud85e[\udc00-\udfff]|\ud85f[\udc00-\udfff]|\ud860[\udc00-\udfff]|\ud861[\udc00-\udfff]|\ud862[\udc00-\udfff]|\ud863[\udc00-\udfff]|\ud864[\udc00-\udfff]|\ud865[\udc00-\udfff]|\ud866[\udc00-\udfff]|\ud867[\udc00-\udfff]|\ud868[\udc00-\udfff]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86a[\udc00-\udfff]|\ud86b[\udc00-\udfff]|\ud86c[\udc00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud86f[\udc00-\udfff]|\ud870[\udc00-\udfff]|\ud871[\udc00-\udfff]|\ud872[\udc00-\udfff]|\ud873[\udc00-\udea1\udeb0-\udfff]|\ud874[\udc00-\udfff]|\ud875[\udc00-\udfff]|\ud876[\udc00-\udfff]|\ud877[\udc00-\udfff]|\ud878[\udc00-\udfff]|\ud879[\udc00-\udfff]|\ud87a[\udc00-\udfe0]|\ud87e[\udc00-\ude1d]|\udb40[\udd00-\uddef])|[$_]|(\\u[0-9a-fA-F]{4}|\\u\{[0-9a-fA-F]{1,}\})|[\u200c\u200d])*>/, function () {
|
|
yytext = yytext.slice(3, -1);
|
|
validateUnicodeGroupName(yytext, this.getCurrentState());
|
|
return 'NAMED_CAPTURE_GROUP';
|
|
}], [/^\(/, function () {
|
|
return 'L_PAREN';
|
|
}], [/^\)/, function () {
|
|
return 'R_PAREN';
|
|
}], [/^[*?+[^$]/, function () {
|
|
return 'CHAR';
|
|
}], [/^\\\]/, function () {
|
|
return 'ESC_CHAR';
|
|
}], [/^\]/, function () {
|
|
this.popState();return 'R_BRACKET';
|
|
}], [/^\^/, function () {
|
|
return 'BOS';
|
|
}], [/^\$/, function () {
|
|
return 'EOS';
|
|
}], [/^\*/, function () {
|
|
return 'STAR';
|
|
}], [/^\?/, function () {
|
|
return 'Q_MARK';
|
|
}], [/^\+/, function () {
|
|
return 'PLUS';
|
|
}], [/^\|/, function () {
|
|
return 'BAR';
|
|
}], [/^\./, function () {
|
|
return 'ANY';
|
|
}], [/^\//, function () {
|
|
return 'SLASH';
|
|
}], [/^[^*?+\[()\\|]/, function () {
|
|
return 'CHAR';
|
|
}], [/^\[\^/, function () {
|
|
var s = this.getCurrentState();this.pushState(s === 'u' || s === 'xu' ? 'u_class' : 'class');return 'NEG_CLASS';
|
|
}], [/^\[/, function () {
|
|
var s = this.getCurrentState();this.pushState(s === 'u' || s === 'xu' ? 'u_class' : 'class');return 'L_BRACKET';
|
|
}]];
|
|
var lexRulesByConditions = { "INITIAL": [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 22, 23, 24, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], "u": [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], "xu": [0, 1, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], "x": [0, 1, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 22, 23, 24, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], "u_class": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], "class": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51] };
|
|
|
|
var EOF_TOKEN = {
|
|
type: EOF,
|
|
value: ''
|
|
};
|
|
|
|
tokenizer = {
|
|
initString: function initString(string) {
|
|
this._string = string;
|
|
this._cursor = 0;
|
|
|
|
this._states = ['INITIAL'];
|
|
this._tokensQueue = [];
|
|
|
|
this._currentLine = 1;
|
|
this._currentColumn = 0;
|
|
this._currentLineBeginOffset = 0;
|
|
|
|
/**
|
|
* Matched token location data.
|
|
*/
|
|
this._tokenStartOffset = 0;
|
|
this._tokenEndOffset = 0;
|
|
this._tokenStartLine = 1;
|
|
this._tokenEndLine = 1;
|
|
this._tokenStartColumn = 0;
|
|
this._tokenEndColumn = 0;
|
|
|
|
return this;
|
|
},
|
|
|
|
|
|
/**
|
|
* Returns tokenizer states.
|
|
*/
|
|
getStates: function getStates() {
|
|
return this._states;
|
|
},
|
|
getCurrentState: function getCurrentState() {
|
|
return this._states[this._states.length - 1];
|
|
},
|
|
pushState: function pushState(state) {
|
|
this._states.push(state);
|
|
},
|
|
begin: function begin(state) {
|
|
this.pushState(state);
|
|
},
|
|
popState: function popState() {
|
|
if (this._states.length > 1) {
|
|
return this._states.pop();
|
|
}
|
|
return this._states[0];
|
|
},
|
|
getNextToken: function getNextToken() {
|
|
// Something was queued, return it.
|
|
if (this._tokensQueue.length > 0) {
|
|
return this.onToken(this._toToken(this._tokensQueue.shift()));
|
|
}
|
|
|
|
if (!this.hasMoreTokens()) {
|
|
return this.onToken(EOF_TOKEN);
|
|
}
|
|
|
|
var string = this._string.slice(this._cursor);
|
|
var lexRulesForState = lexRulesByConditions[this.getCurrentState()];
|
|
|
|
for (var i = 0; i < lexRulesForState.length; i++) {
|
|
var lexRuleIndex = lexRulesForState[i];
|
|
var lexRule = lexRules[lexRuleIndex];
|
|
|
|
var matched = this._match(string, lexRule[0]);
|
|
|
|
// Manual handling of EOF token (the end of string). Return it
|
|
// as `EOF` symbol.
|
|
if (string === '' && matched === '') {
|
|
this._cursor++;
|
|
}
|
|
|
|
if (matched !== null) {
|
|
yytext = matched;
|
|
var token = lexRule[1].call(this);
|
|
|
|
if (!token) {
|
|
return this.getNextToken();
|
|
}
|
|
|
|
// If multiple tokens are returned, save them to return
|
|
// on next `getNextToken` call.
|
|
|
|
if (Array.isArray(token)) {
|
|
var tokensToQueue = token.slice(1);
|
|
token = token[0];
|
|
if (tokensToQueue.length > 0) {
|
|
var _tokensQueue;
|
|
|
|
(_tokensQueue = this._tokensQueue).unshift.apply(_tokensQueue, _toConsumableArray$8(tokensToQueue));
|
|
}
|
|
}
|
|
|
|
return this.onToken(this._toToken(token, yytext));
|
|
}
|
|
}
|
|
|
|
if (this.isEOF()) {
|
|
this._cursor++;
|
|
return EOF_TOKEN;
|
|
}
|
|
|
|
this.throwUnexpectedToken(string[0], this._currentLine, this._currentColumn);
|
|
},
|
|
|
|
|
|
/**
|
|
* Throws default "Unexpected token" exception, showing the actual
|
|
* line from the source, pointing with the ^ marker to the bad token.
|
|
* In addition, shows `line:column` location.
|
|
*/
|
|
throwUnexpectedToken: function throwUnexpectedToken(symbol, line, column) {
|
|
var lineSource = this._string.split('\n')[line - 1];
|
|
var lineData = '';
|
|
|
|
if (lineSource) {
|
|
var pad = ' '.repeat(column);
|
|
lineData = '\n\n' + lineSource + '\n' + pad + '^\n';
|
|
}
|
|
|
|
throw new SyntaxError(lineData + 'Unexpected token: "' + symbol + '" ' + ('at ' + line + ':' + column + '.'));
|
|
},
|
|
getCursor: function getCursor() {
|
|
return this._cursor;
|
|
},
|
|
getCurrentLine: function getCurrentLine() {
|
|
return this._currentLine;
|
|
},
|
|
getCurrentColumn: function getCurrentColumn() {
|
|
return this._currentColumn;
|
|
},
|
|
_captureLocation: function _captureLocation(matched) {
|
|
var nlRe = /\n/g;
|
|
|
|
// Absolute offsets.
|
|
this._tokenStartOffset = this._cursor;
|
|
|
|
// Line-based locations, start.
|
|
this._tokenStartLine = this._currentLine;
|
|
this._tokenStartColumn = this._tokenStartOffset - this._currentLineBeginOffset;
|
|
|
|
// Extract `\n` in the matched token.
|
|
var nlMatch = void 0;
|
|
while ((nlMatch = nlRe.exec(matched)) !== null) {
|
|
this._currentLine++;
|
|
this._currentLineBeginOffset = this._tokenStartOffset + nlMatch.index + 1;
|
|
}
|
|
|
|
this._tokenEndOffset = this._cursor + matched.length;
|
|
|
|
// Line-based locations, end.
|
|
this._tokenEndLine = this._currentLine;
|
|
this._tokenEndColumn = this._currentColumn = this._tokenEndOffset - this._currentLineBeginOffset;
|
|
},
|
|
_toToken: function _toToken(tokenType) {
|
|
var yytext = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
|
|
return {
|
|
// Basic data.
|
|
type: tokenType,
|
|
value: yytext,
|
|
|
|
// Location data.
|
|
startOffset: this._tokenStartOffset,
|
|
endOffset: this._tokenEndOffset,
|
|
startLine: this._tokenStartLine,
|
|
endLine: this._tokenEndLine,
|
|
startColumn: this._tokenStartColumn,
|
|
endColumn: this._tokenEndColumn
|
|
};
|
|
},
|
|
isEOF: function isEOF() {
|
|
return this._cursor === this._string.length;
|
|
},
|
|
hasMoreTokens: function hasMoreTokens() {
|
|
return this._cursor <= this._string.length;
|
|
},
|
|
_match: function _match(string, regexp) {
|
|
var matched = string.match(regexp);
|
|
if (matched) {
|
|
// Handle `\n` in the matched token to track line numbers.
|
|
this._captureLocation(matched[0]);
|
|
this._cursor += matched[0].length;
|
|
return matched[0];
|
|
}
|
|
return null;
|
|
},
|
|
|
|
|
|
/**
|
|
* Allows analyzing, and transforming token. Default implementation
|
|
* just passes the token through.
|
|
*/
|
|
onToken: function onToken(token) {
|
|
return token;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Expose tokenizer so it can be accessed in semantic actions.
|
|
*/
|
|
yy.lexer = tokenizer;
|
|
yy.tokenizer = tokenizer;
|
|
|
|
/**
|
|
* Global parsing options. Some options can be shadowed per
|
|
* each `parse` call, if the optations are passed.
|
|
*
|
|
* Initalized to the `captureLocations` which is passed
|
|
* from the generator. Other options can be added at runtime.
|
|
*/
|
|
yy.options = {
|
|
captureLocations: true
|
|
};
|
|
|
|
/**
|
|
* Parsing module.
|
|
*/
|
|
var yyparse = {
|
|
/**
|
|
* Sets global parsing options.
|
|
*/
|
|
setOptions: function setOptions(options) {
|
|
yy.options = options;
|
|
return this;
|
|
},
|
|
|
|
|
|
/**
|
|
* Returns parsing options.
|
|
*/
|
|
getOptions: function getOptions() {
|
|
return yy.options;
|
|
},
|
|
|
|
|
|
/**
|
|
* Parses a string.
|
|
*/
|
|
parse: function parse(string, parseOptions) {
|
|
if (!tokenizer) {
|
|
throw new Error('Tokenizer instance wasn\'t specified.');
|
|
}
|
|
|
|
tokenizer.initString(string);
|
|
|
|
/**
|
|
* If parse options are passed, override global parse options for
|
|
* this call, and later restore global options.
|
|
*/
|
|
var globalOptions = yy.options;
|
|
if (parseOptions) {
|
|
yy.options = Object.assign({}, yy.options, parseOptions);
|
|
}
|
|
|
|
/**
|
|
* Allow callers to do setup work based on the
|
|
* parsing string, and passed options.
|
|
*/
|
|
yyparse.onParseBegin(string, tokenizer, yy.options);
|
|
|
|
stack.length = 0;
|
|
stack.push(0);
|
|
|
|
var token = tokenizer.getNextToken();
|
|
var shiftedToken = null;
|
|
|
|
do {
|
|
if (!token) {
|
|
// Restore options.
|
|
yy.options = globalOptions;
|
|
unexpectedEndOfInput();
|
|
}
|
|
|
|
var state = stack[stack.length - 1];
|
|
var column = tokens[token.type];
|
|
|
|
if (!table[state].hasOwnProperty(column)) {
|
|
yy.options = globalOptions;
|
|
unexpectedToken(token);
|
|
}
|
|
|
|
var entry = table[state][column];
|
|
|
|
// Shift action.
|
|
if (entry[0] === 's') {
|
|
var _loc2 = null;
|
|
|
|
if (yy.options.captureLocations) {
|
|
_loc2 = {
|
|
startOffset: token.startOffset,
|
|
endOffset: token.endOffset,
|
|
startLine: token.startLine,
|
|
endLine: token.endLine,
|
|
startColumn: token.startColumn,
|
|
endColumn: token.endColumn
|
|
};
|
|
}
|
|
|
|
shiftedToken = this.onShift(token);
|
|
|
|
stack.push({ symbol: tokens[shiftedToken.type], semanticValue: shiftedToken.value, loc: _loc2 }, Number(entry.slice(1)));
|
|
|
|
token = tokenizer.getNextToken();
|
|
}
|
|
|
|
// Reduce action.
|
|
else if (entry[0] === 'r') {
|
|
var productionNumber = entry.slice(1);
|
|
var production = productions[productionNumber];
|
|
var hasSemanticAction = typeof production[2] === 'function';
|
|
var semanticValueArgs = hasSemanticAction ? [] : null;
|
|
|
|
var locationArgs = hasSemanticAction && yy.options.captureLocations ? [] : null;
|
|
|
|
if (production[1] !== 0) {
|
|
var rhsLength = production[1];
|
|
while (rhsLength-- > 0) {
|
|
stack.pop();
|
|
var stackEntry = stack.pop();
|
|
|
|
if (hasSemanticAction) {
|
|
semanticValueArgs.unshift(stackEntry.semanticValue);
|
|
|
|
if (locationArgs) {
|
|
locationArgs.unshift(stackEntry.loc);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
var reduceStackEntry = { symbol: production[0] };
|
|
|
|
if (hasSemanticAction) {
|
|
yytext = shiftedToken ? shiftedToken.value : null;
|
|
shiftedToken ? shiftedToken.value.length : null;
|
|
|
|
var semanticActionArgs = locationArgs !== null ? semanticValueArgs.concat(locationArgs) : semanticValueArgs;
|
|
|
|
production[2].apply(production, _toConsumableArray$8(semanticActionArgs));
|
|
|
|
reduceStackEntry.semanticValue = __;
|
|
|
|
if (locationArgs) {
|
|
reduceStackEntry.loc = __loc;
|
|
}
|
|
}
|
|
|
|
var nextState = stack[stack.length - 1];
|
|
var symbolToReduceWith = production[0];
|
|
|
|
stack.push(reduceStackEntry, table[nextState][symbolToReduceWith]);
|
|
}
|
|
|
|
// Accept.
|
|
else if (entry === 'acc') {
|
|
stack.pop();
|
|
var parsed = stack.pop();
|
|
|
|
if (stack.length !== 1 || stack[0] !== 0 || tokenizer.hasMoreTokens()) {
|
|
// Restore options.
|
|
yy.options = globalOptions;
|
|
unexpectedToken(token);
|
|
}
|
|
|
|
if (parsed.hasOwnProperty('semanticValue')) {
|
|
yy.options = globalOptions;
|
|
yyparse.onParseEnd(parsed.semanticValue);
|
|
return parsed.semanticValue;
|
|
}
|
|
|
|
yyparse.onParseEnd();
|
|
|
|
// Restore options.
|
|
yy.options = globalOptions;
|
|
return true;
|
|
}
|
|
} while (tokenizer.hasMoreTokens() || stack.length > 1);
|
|
},
|
|
setTokenizer: function setTokenizer(customTokenizer) {
|
|
tokenizer = customTokenizer;
|
|
return yyparse;
|
|
},
|
|
getTokenizer: function getTokenizer() {
|
|
return tokenizer;
|
|
},
|
|
onParseBegin: function onParseBegin(string, tokenizer, options) {},
|
|
onParseEnd: function onParseEnd(parsed) {},
|
|
|
|
|
|
/**
|
|
* Allows analyzing, and transforming shifted token. Default implementation
|
|
* just passes the token through.
|
|
*/
|
|
onShift: function onShift(token) {
|
|
return token;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Tracks capturing groups.
|
|
*/
|
|
var capturingGroupsCount = 0;
|
|
|
|
/**
|
|
* Tracks named groups.
|
|
*/
|
|
var namedGroups = {};
|
|
|
|
/**
|
|
* Parsing string.
|
|
*/
|
|
var parsingString = '';
|
|
|
|
yyparse.onParseBegin = function (string, lexer) {
|
|
parsingString = string;
|
|
capturingGroupsCount = 0;
|
|
namedGroups = {};
|
|
|
|
var lastSlash = string.lastIndexOf('/');
|
|
var flags = string.slice(lastSlash);
|
|
|
|
if (flags.includes('x') && flags.includes('u')) {
|
|
lexer.pushState('xu');
|
|
} else {
|
|
if (flags.includes('x')) {
|
|
lexer.pushState('x');
|
|
}
|
|
if (flags.includes('u')) {
|
|
lexer.pushState('u');
|
|
}
|
|
}
|
|
};
|
|
|
|
/**
|
|
* On shifting `(` remember its number to used on reduce.
|
|
*/
|
|
yyparse.onShift = function (token) {
|
|
if (token.type === 'L_PAREN' || token.type === 'NAMED_CAPTURE_GROUP') {
|
|
token.value = new String(token.value);
|
|
token.value.groupNumber = ++capturingGroupsCount;
|
|
}
|
|
return token;
|
|
};
|
|
|
|
/**
|
|
* Extracts ranges from the range string.
|
|
*/
|
|
function getRange(text) {
|
|
var range = text.match(/\d+/g).map(Number);
|
|
|
|
if (Number.isFinite(range[1]) && range[1] < range[0]) {
|
|
throw new SyntaxError('Numbers out of order in ' + text + ' quantifier');
|
|
}
|
|
|
|
return range;
|
|
}
|
|
|
|
/**
|
|
* Checks class range
|
|
*/
|
|
function checkClassRange(from, to) {
|
|
if (from.kind === 'control' || to.kind === 'control' || !isNaN(from.codePoint) && !isNaN(to.codePoint) && from.codePoint > to.codePoint) {
|
|
throw new SyntaxError('Range ' + from.value + '-' + to.value + ' out of order in character class');
|
|
}
|
|
}
|
|
|
|
// ---------------------- Unicode property -------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
* Unicode property.
|
|
*/
|
|
function UnicodeProperty(matched, loc) {
|
|
var negative = matched[1] === 'P';
|
|
var separatorIdx = matched.indexOf('=');
|
|
|
|
var name = matched.slice(3, separatorIdx !== -1 ? separatorIdx : -1);
|
|
var value = void 0;
|
|
|
|
// General_Category allows using only value as a shorthand.
|
|
var isShorthand = separatorIdx === -1 && parserUnicodeProperties.isGeneralCategoryValue(name);
|
|
|
|
// Binary propery name.
|
|
var isBinaryProperty = separatorIdx === -1 && parserUnicodeProperties.isBinaryPropertyName(name);
|
|
|
|
if (isShorthand) {
|
|
value = name;
|
|
name = 'General_Category';
|
|
} else if (isBinaryProperty) {
|
|
value = name;
|
|
} else {
|
|
if (!parserUnicodeProperties.isValidName(name)) {
|
|
throw new SyntaxError('Invalid unicode property name: ' + name + '.');
|
|
}
|
|
|
|
value = matched.slice(separatorIdx + 1, -1);
|
|
|
|
if (!parserUnicodeProperties.isValidValue(name, value)) {
|
|
throw new SyntaxError('Invalid ' + name + ' unicode property value: ' + value + '.');
|
|
}
|
|
}
|
|
|
|
return Node({
|
|
type: 'UnicodeProperty',
|
|
name: name,
|
|
value: value,
|
|
negative: negative,
|
|
shorthand: isShorthand,
|
|
binary: isBinaryProperty,
|
|
canonicalName: parserUnicodeProperties.getCanonicalName(name) || name,
|
|
canonicalValue: parserUnicodeProperties.getCanonicalValue(value) || value
|
|
}, loc);
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------------
|
|
|
|
|
|
/**
|
|
* Creates a character node.
|
|
*/
|
|
function Char(value, kind, loc) {
|
|
var symbol = void 0;
|
|
var codePoint = void 0;
|
|
|
|
switch (kind) {
|
|
case 'decimal':
|
|
{
|
|
codePoint = Number(value.slice(1));
|
|
symbol = String.fromCodePoint(codePoint);
|
|
break;
|
|
}
|
|
case 'oct':
|
|
{
|
|
codePoint = parseInt(value.slice(1), 8);
|
|
symbol = String.fromCodePoint(codePoint);
|
|
break;
|
|
}
|
|
case 'hex':
|
|
case 'unicode':
|
|
{
|
|
if (value.lastIndexOf('\\u') > 0) {
|
|
var _value$split$slice = value.split('\\u').slice(1),
|
|
_value$split$slice2 = _slicedToArray$2(_value$split$slice, 2),
|
|
lead = _value$split$slice2[0],
|
|
trail = _value$split$slice2[1];
|
|
|
|
lead = parseInt(lead, 16);
|
|
trail = parseInt(trail, 16);
|
|
codePoint = (lead - 0xd800) * 0x400 + (trail - 0xdc00) + 0x10000;
|
|
|
|
symbol = String.fromCodePoint(codePoint);
|
|
} else {
|
|
var hex = value.slice(2).replace('{', '');
|
|
codePoint = parseInt(hex, 16);
|
|
if (codePoint > 0x10ffff) {
|
|
throw new SyntaxError('Bad character escape sequence: ' + value);
|
|
}
|
|
|
|
symbol = String.fromCodePoint(codePoint);
|
|
}
|
|
break;
|
|
}
|
|
case 'meta':
|
|
{
|
|
switch (value) {
|
|
case '\\t':
|
|
symbol = '\t';
|
|
codePoint = symbol.codePointAt(0);
|
|
break;
|
|
case '\\n':
|
|
symbol = '\n';
|
|
codePoint = symbol.codePointAt(0);
|
|
break;
|
|
case '\\r':
|
|
symbol = '\r';
|
|
codePoint = symbol.codePointAt(0);
|
|
break;
|
|
case '\\v':
|
|
symbol = '\v';
|
|
codePoint = symbol.codePointAt(0);
|
|
break;
|
|
case '\\f':
|
|
symbol = '\f';
|
|
codePoint = symbol.codePointAt(0);
|
|
break;
|
|
case '\\b':
|
|
symbol = '\b';
|
|
codePoint = symbol.codePointAt(0);
|
|
case '\\0':
|
|
symbol = '\0';
|
|
codePoint = 0;
|
|
case '.':
|
|
symbol = '.';
|
|
codePoint = NaN;
|
|
break;
|
|
default:
|
|
codePoint = NaN;
|
|
}
|
|
break;
|
|
}
|
|
case 'simple':
|
|
{
|
|
symbol = value;
|
|
codePoint = symbol.codePointAt(0);
|
|
break;
|
|
}
|
|
}
|
|
|
|
return Node({
|
|
type: 'Char',
|
|
value: value,
|
|
kind: kind,
|
|
symbol: symbol,
|
|
codePoint: codePoint
|
|
}, loc);
|
|
}
|
|
|
|
/**
|
|
* Valid flags per current ECMAScript spec and
|
|
* stage 3+ proposals.
|
|
*/
|
|
var validFlags = 'gimsuxy';
|
|
|
|
/**
|
|
* Checks the flags are valid, and that
|
|
* we don't duplicate flags.
|
|
*/
|
|
function checkFlags(flags) {
|
|
var seen = new Set();
|
|
|
|
var _iteratorNormalCompletion = true;
|
|
var _didIteratorError = false;
|
|
var _iteratorError = undefined;
|
|
|
|
try {
|
|
for (var _iterator = flags[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
var flag = _step.value;
|
|
|
|
if (seen.has(flag) || !validFlags.includes(flag)) {
|
|
throw new SyntaxError('Invalid flags: ' + flags);
|
|
}
|
|
seen.add(flag);
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError = true;
|
|
_iteratorError = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion && _iterator.return) {
|
|
_iterator.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError) {
|
|
throw _iteratorError;
|
|
}
|
|
}
|
|
}
|
|
|
|
return flags.split('').sort().join('');
|
|
}
|
|
|
|
/**
|
|
* Parses patterns like \1, \2, etc. either as a backreference
|
|
* to a group, or a deciaml char code.
|
|
*/
|
|
function GroupRefOrDecChar(text, textLoc) {
|
|
var reference = Number(text.slice(1));
|
|
|
|
if (reference > 0 && reference <= capturingGroupsCount) {
|
|
return Node({
|
|
type: 'Backreference',
|
|
kind: 'number',
|
|
number: reference,
|
|
reference: reference
|
|
}, textLoc);
|
|
}
|
|
|
|
return Char(text, 'decimal', textLoc);
|
|
}
|
|
|
|
/**
|
|
* Unicode names.
|
|
*/
|
|
var uReStart = /^\\u[0-9a-fA-F]{4}/; // only matches start of string
|
|
var ucpReStart = /^\\u\{[0-9a-fA-F]{1,}\}/; // only matches start of string
|
|
var ucpReAnywhere = /\\u\{[0-9a-fA-F]{1,}\}/; // matches anywhere in string
|
|
|
|
/**
|
|
* Validates Unicode group name.
|
|
*/
|
|
function validateUnicodeGroupName(name, state) {
|
|
var isUnicodeName = ucpReAnywhere.test(name);
|
|
var isUnicodeState = state === 'u' || state === 'xu' || state === 'u_class';
|
|
|
|
if (isUnicodeName && !isUnicodeState) {
|
|
throw new SyntaxError('invalid group Unicode name "' + name + '", use `u` flag.');
|
|
}
|
|
|
|
return name;
|
|
}
|
|
|
|
// Matches the following production: https://tc39.es/ecma262/#prod-RegExpUnicodeEscapeSequence
|
|
//
|
|
// RegExpUnicodeEscapeSequence ::
|
|
// `u` LeadSurrogate `\u` TrailSurrogate # as 'leadSurrogate', 'trailSurrogate'
|
|
// `u` LeadSurrogate # as 'leadSurrogateOnly'
|
|
// `u` TrailSurrogate # as 'trailSurrogateOnly'
|
|
// `u` NonSurrogate # as 'nonSurrogate'
|
|
// `u` `{` CodePoint `}` # as 'codePoint'
|
|
//
|
|
// LeadSurrogate ::
|
|
// Hex4Digits but only if the SV of Hex4Digits is in the inclusive range 0xD800 to 0xDBFF # [dD][89aAbB][0-9a-fA-F]{2}
|
|
//
|
|
// TrailSurrogate ::
|
|
// Hex4Digits but only if the SV of Hex4Digits is in the inclusive range 0xDC00 to 0xDFFF # [dD][c-fC-F][0-9a-fA-F]{2}
|
|
//
|
|
// NonSurrogate ::
|
|
// Hex4Digits but only if the SV of Hex4Digits is not in the inclusive range 0xD800 to 0xDFFF # [0-9a-ce-fA-CE-F][0-9a-fA-F]{3}|[dD][0-7][0-9a-fA-F]{2}
|
|
//
|
|
// CodePoint ::
|
|
// HexDigits but only if MV of HexDigits ≤ 0x10FFFF # 0*(?:[0-9a-fA-F]{1,5}|10[0-9a-fA-F]{4})
|
|
//
|
|
var uidRe = /\\u(?:([dD][89aAbB][0-9a-fA-F]{2})\\u([dD][c-fC-F][0-9a-fA-F]{2})|([dD][89aAbB][0-9a-fA-F]{2})|([dD][c-fC-F][0-9a-fA-F]{2})|([0-9a-ce-fA-CE-F][0-9a-fA-F]{3}|[dD][0-7][0-9a-fA-F]{2})|\{(0*(?:[0-9a-fA-F]{1,5}|10[0-9a-fA-F]{4}))\})/;
|
|
|
|
function decodeUnicodeGroupName(name) {
|
|
return name.replace(new RegExp(uidRe, 'g'), function (_, leadSurrogate, trailSurrogate, leadSurrogateOnly, trailSurrogateOnly, nonSurrogate, codePoint) {
|
|
if (leadSurrogate) {
|
|
return String.fromCodePoint(parseInt(leadSurrogate, 16), parseInt(trailSurrogate, 16));
|
|
}
|
|
if (leadSurrogateOnly) {
|
|
return String.fromCodePoint(parseInt(leadSurrogateOnly, 16));
|
|
}
|
|
if (trailSurrogateOnly) {
|
|
// TODO: Per the spec: https://tc39.es/ecma262/#prod-RegExpUnicodeEscapeSequence
|
|
// > Each `\u` TrailSurrogate for which the choice of associated `u` LeadSurrogate is ambiguous shall be associated with the nearest possible `u` LeadSurrogate that would otherwise have no corresponding `\u` TrailSurrogate.
|
|
return String.fromCodePoint(parseInt(trailSurrogateOnly, 16));
|
|
}
|
|
if (nonSurrogate) {
|
|
return String.fromCodePoint(parseInt(nonSurrogate, 16));
|
|
}
|
|
if (codePoint) {
|
|
return String.fromCodePoint(parseInt(codePoint, 16));
|
|
}
|
|
return _;
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Extracts from `\k<foo>` pattern either a backreference
|
|
* to a named capturing group (if it presents), or parses it
|
|
* as a list of char: `\k`, `<`, `f`, etc.
|
|
*/
|
|
function NamedGroupRefOrChars(text, textLoc) {
|
|
var referenceRaw = text.slice(3, -1);
|
|
var reference = decodeUnicodeGroupName(referenceRaw);
|
|
|
|
if (namedGroups.hasOwnProperty(reference)) {
|
|
return Node({
|
|
type: 'Backreference',
|
|
kind: 'name',
|
|
number: namedGroups[reference],
|
|
reference: reference,
|
|
referenceRaw: referenceRaw
|
|
}, textLoc);
|
|
}
|
|
|
|
// Else `\k<foo>` should be parsed as a list of `Char`s.
|
|
// This is really a 0.01% edge case, but we should handle it.
|
|
|
|
var startOffset = null;
|
|
var startLine = null;
|
|
var endLine = null;
|
|
var startColumn = null;
|
|
|
|
if (textLoc) {
|
|
startOffset = textLoc.startOffset;
|
|
startLine = textLoc.startLine;
|
|
endLine = textLoc.endLine;
|
|
startColumn = textLoc.startColumn;
|
|
}
|
|
|
|
var charRe = /^[\w$<>]/;
|
|
var loc = void 0;
|
|
|
|
var chars = [
|
|
// Init to first \k, taking 2 symbols.
|
|
Char(text.slice(1, 2), 'simple', startOffset ? {
|
|
startLine: startLine,
|
|
endLine: endLine,
|
|
startColumn: startColumn,
|
|
startOffset: startOffset,
|
|
endOffset: startOffset += 2,
|
|
endColumn: startColumn += 2
|
|
} : null)];
|
|
|
|
// For \k
|
|
chars[0].escaped = true;
|
|
|
|
// Other symbols.
|
|
text = text.slice(2);
|
|
|
|
while (text.length > 0) {
|
|
var matched = null;
|
|
|
|
// Unicode, \u003B or \u{003B}
|
|
if ((matched = text.match(uReStart)) || (matched = text.match(ucpReStart))) {
|
|
if (startOffset) {
|
|
loc = {
|
|
startLine: startLine,
|
|
endLine: endLine,
|
|
startColumn: startColumn,
|
|
startOffset: startOffset,
|
|
endOffset: startOffset += matched[0].length,
|
|
endColumn: startColumn += matched[0].length
|
|
};
|
|
}
|
|
chars.push(Char(matched[0], 'unicode', loc));
|
|
text = text.slice(matched[0].length);
|
|
}
|
|
|
|
// Simple char.
|
|
else if (matched = text.match(charRe)) {
|
|
if (startOffset) {
|
|
loc = {
|
|
startLine: startLine,
|
|
endLine: endLine,
|
|
startColumn: startColumn,
|
|
startOffset: startOffset,
|
|
endOffset: ++startOffset,
|
|
endColumn: ++startColumn
|
|
};
|
|
}
|
|
chars.push(Char(matched[0], 'simple', loc));
|
|
text = text.slice(1);
|
|
}
|
|
}
|
|
|
|
return chars;
|
|
}
|
|
|
|
/**
|
|
* Creates an AST node with a location.
|
|
*/
|
|
function Node(node, loc) {
|
|
if (yy.options.captureLocations) {
|
|
node.loc = {
|
|
source: parsingString.slice(loc.startOffset, loc.endOffset),
|
|
start: {
|
|
line: loc.startLine,
|
|
column: loc.startColumn,
|
|
offset: loc.startOffset
|
|
},
|
|
end: {
|
|
line: loc.endLine,
|
|
column: loc.endColumn,
|
|
offset: loc.endOffset
|
|
}
|
|
};
|
|
}
|
|
return node;
|
|
}
|
|
|
|
/**
|
|
* Creates location node.
|
|
*/
|
|
function loc(start, end) {
|
|
if (!yy.options.captureLocations) {
|
|
return null;
|
|
}
|
|
|
|
return {
|
|
startOffset: start.startOffset,
|
|
endOffset: end.endOffset,
|
|
startLine: start.startLine,
|
|
endLine: end.endLine,
|
|
startColumn: start.startColumn,
|
|
endColumn: end.endColumn
|
|
};
|
|
}
|
|
|
|
function unexpectedToken(token) {
|
|
if (token.type === EOF) {
|
|
unexpectedEndOfInput();
|
|
}
|
|
|
|
tokenizer.throwUnexpectedToken(token.value, token.startLine, token.startColumn);
|
|
}
|
|
|
|
function unexpectedEndOfInput() {
|
|
parseError('Unexpected end of input.');
|
|
}
|
|
|
|
function parseError(message) {
|
|
throw new SyntaxError(message);
|
|
}
|
|
|
|
var regexpTree$3 = yyparse;
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
* Original parse function.
|
|
*/
|
|
var generatedParseFn = regexpTree$3.parse.bind(regexpTree$3);
|
|
|
|
/**
|
|
* Parses a regular expression.
|
|
*
|
|
* Override original `regexpTreeParser.parse` to convert a value to a string,
|
|
* since in regexp-tree we may pass strings, and RegExp instance.
|
|
*/
|
|
regexpTree$3.parse = function (regexp, options) {
|
|
return generatedParseFn('' + regexp, options);
|
|
};
|
|
|
|
// By default do not capture locations; callers may override.
|
|
regexpTree$3.setOptions({ captureLocations: false });
|
|
|
|
var parser$1 = regexpTree$3;
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
var _createClass$6 = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
|
|
|
function _classCallCheck$6(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
var DEFAULT_COLLECTION_PROP = 'expressions';
|
|
var DEFAULT_SINGLE_PROP = 'expression';
|
|
|
|
/**
|
|
* NodePath class encapsulates a traversing node,
|
|
* its parent node, property name in the parent node, and
|
|
* an index (in case if a node is part of a collection).
|
|
* It also provides set of methods for AST manipulation.
|
|
*/
|
|
|
|
var NodePath = function () {
|
|
/**
|
|
* NodePath constructor.
|
|
*
|
|
* @param Object node - an AST node
|
|
* @param NodePath parentPath - a nullable parent path
|
|
* @param string property - property name of the node in the parent
|
|
* @param number index - index of the node in a collection.
|
|
*/
|
|
function NodePath(node) {
|
|
var parentPath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
var property = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
|
|
var index = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
|
|
|
|
_classCallCheck$6(this, NodePath);
|
|
|
|
this.node = node;
|
|
this.parentPath = parentPath;
|
|
this.parent = parentPath ? parentPath.node : null;
|
|
this.property = property;
|
|
this.index = index;
|
|
}
|
|
|
|
_createClass$6(NodePath, [{
|
|
key: '_enforceProp',
|
|
value: function _enforceProp(property) {
|
|
if (!this.node.hasOwnProperty(property)) {
|
|
throw new Error('Node of type ' + this.node.type + ' doesn\'t have "' + property + '" collection.');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Sets a node into a children collection or the single child.
|
|
* By default child nodes are supposed to be under `expressions` property.
|
|
* An explicit property can be passed.
|
|
*
|
|
* @param Object node - a node to set into a collection or as single child
|
|
* @param number index - index at which to set
|
|
* @param string property - name of the collection or single property
|
|
*/
|
|
|
|
}, {
|
|
key: 'setChild',
|
|
value: function setChild(node) {
|
|
var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
var property = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
|
|
|
|
|
|
var childPath = void 0;
|
|
if (index != null) {
|
|
if (!property) {
|
|
property = DEFAULT_COLLECTION_PROP;
|
|
}
|
|
this._enforceProp(property);
|
|
this.node[property][index] = node;
|
|
childPath = NodePath.getForNode(node, this, property, index);
|
|
} else {
|
|
if (!property) {
|
|
property = DEFAULT_SINGLE_PROP;
|
|
}
|
|
this._enforceProp(property);
|
|
this.node[property] = node;
|
|
childPath = NodePath.getForNode(node, this, property, null);
|
|
}
|
|
return childPath;
|
|
}
|
|
|
|
/**
|
|
* Appends a node to a children collection.
|
|
* By default child nodes are supposed to be under `expressions` property.
|
|
* An explicit property can be passed.
|
|
*
|
|
* @param Object node - a node to set into a collection or as single child
|
|
* @param string property - name of the collection or single property
|
|
*/
|
|
|
|
}, {
|
|
key: 'appendChild',
|
|
value: function appendChild(node) {
|
|
var property = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
|
|
|
|
if (!property) {
|
|
property = DEFAULT_COLLECTION_PROP;
|
|
}
|
|
this._enforceProp(property);
|
|
var end = this.node[property].length;
|
|
return this.setChild(node, end, property);
|
|
}
|
|
|
|
/**
|
|
* Inserts a node into a collection.
|
|
* By default child nodes are supposed to be under `expressions` property.
|
|
* An explicit property can be passed.
|
|
*
|
|
* @param Object node - a node to insert into a collection
|
|
* @param number index - index at which to insert
|
|
* @param string property - name of the collection property
|
|
*/
|
|
|
|
}, {
|
|
key: 'insertChildAt',
|
|
value: function insertChildAt(node, index) {
|
|
var property = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : DEFAULT_COLLECTION_PROP;
|
|
|
|
this._enforceProp(property);
|
|
|
|
this.node[property].splice(index, 0, node);
|
|
|
|
// If we inserted a node before the traversing index,
|
|
// we should increase the later.
|
|
if (index <= NodePath.getTraversingIndex()) {
|
|
NodePath.updateTraversingIndex(+1);
|
|
}
|
|
|
|
this._rebuildIndex(this.node, property);
|
|
}
|
|
|
|
/**
|
|
* Removes a node.
|
|
*/
|
|
|
|
}, {
|
|
key: 'remove',
|
|
value: function remove() {
|
|
if (this.isRemoved()) {
|
|
return;
|
|
}
|
|
NodePath.registry.delete(this.node);
|
|
|
|
this.node = null;
|
|
|
|
if (!this.parent) {
|
|
return;
|
|
}
|
|
|
|
// A node is in a collection.
|
|
if (this.index !== null) {
|
|
this.parent[this.property].splice(this.index, 1);
|
|
|
|
// If we remove a node before the traversing index,
|
|
// we should increase the later.
|
|
if (this.index <= NodePath.getTraversingIndex()) {
|
|
NodePath.updateTraversingIndex(-1);
|
|
}
|
|
|
|
// Rebuild index.
|
|
this._rebuildIndex(this.parent, this.property);
|
|
|
|
this.index = null;
|
|
this.property = null;
|
|
|
|
return;
|
|
}
|
|
|
|
// A simple node.
|
|
delete this.parent[this.property];
|
|
this.property = null;
|
|
}
|
|
|
|
/**
|
|
* Rebuilds child nodes index (used on remove/insert).
|
|
*/
|
|
|
|
}, {
|
|
key: '_rebuildIndex',
|
|
value: function _rebuildIndex(parent, property) {
|
|
var parentPath = NodePath.getForNode(parent);
|
|
|
|
for (var i = 0; i < parent[property].length; i++) {
|
|
var path = NodePath.getForNode(parent[property][i], parentPath, property, i);
|
|
path.index = i;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Whether the path was removed.
|
|
*/
|
|
|
|
}, {
|
|
key: 'isRemoved',
|
|
value: function isRemoved() {
|
|
return this.node === null;
|
|
}
|
|
|
|
/**
|
|
* Replaces a node with the passed one.
|
|
*/
|
|
|
|
}, {
|
|
key: 'replace',
|
|
value: function replace(newNode) {
|
|
NodePath.registry.delete(this.node);
|
|
|
|
this.node = newNode;
|
|
|
|
if (!this.parent) {
|
|
return null;
|
|
}
|
|
|
|
// A node is in a collection.
|
|
if (this.index !== null) {
|
|
this.parent[this.property][this.index] = newNode;
|
|
}
|
|
|
|
// A simple node.
|
|
else {
|
|
this.parent[this.property] = newNode;
|
|
}
|
|
|
|
// Rebuild the node path for the new node.
|
|
return NodePath.getForNode(newNode, this.parentPath, this.property, this.index);
|
|
}
|
|
|
|
/**
|
|
* Updates a node inline.
|
|
*/
|
|
|
|
}, {
|
|
key: 'update',
|
|
value: function update(nodeProps) {
|
|
Object.assign(this.node, nodeProps);
|
|
}
|
|
|
|
/**
|
|
* Returns parent.
|
|
*/
|
|
|
|
}, {
|
|
key: 'getParent',
|
|
value: function getParent() {
|
|
return this.parentPath;
|
|
}
|
|
|
|
/**
|
|
* Returns nth child.
|
|
*/
|
|
|
|
}, {
|
|
key: 'getChild',
|
|
value: function getChild() {
|
|
var n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
|
|
|
|
if (this.node.expressions) {
|
|
return NodePath.getForNode(this.node.expressions[n], this, DEFAULT_COLLECTION_PROP, n);
|
|
} else if (this.node.expression && n == 0) {
|
|
return NodePath.getForNode(this.node.expression, this, DEFAULT_SINGLE_PROP);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* Whether a path node is syntactically equal to the passed one.
|
|
*
|
|
* NOTE: we don't rely on `source` property from the `loc` data
|
|
* (which would be the fastest comparison), since it might be unsync
|
|
* after several modifications. We use here simple `JSON.stringify`
|
|
* excluding the `loc` data.
|
|
*
|
|
* @param NodePath other - path to compare to.
|
|
* @return boolean
|
|
*/
|
|
|
|
}, {
|
|
key: 'hasEqualSource',
|
|
value: function hasEqualSource(path) {
|
|
return JSON.stringify(this.node, jsonSkipLoc) === JSON.stringify(path.node, jsonSkipLoc);
|
|
}
|
|
|
|
/**
|
|
* JSON-encodes a node skipping location.
|
|
*/
|
|
|
|
}, {
|
|
key: 'jsonEncode',
|
|
value: function jsonEncode() {
|
|
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
format = _ref.format,
|
|
useLoc = _ref.useLoc;
|
|
|
|
return JSON.stringify(this.node, useLoc ? null : jsonSkipLoc, format);
|
|
}
|
|
|
|
/**
|
|
* Returns previous sibling.
|
|
*/
|
|
|
|
}, {
|
|
key: 'getPreviousSibling',
|
|
value: function getPreviousSibling() {
|
|
if (!this.parent || this.index == null) {
|
|
return null;
|
|
}
|
|
return NodePath.getForNode(this.parent[this.property][this.index - 1], NodePath.getForNode(this.parent), this.property, this.index - 1);
|
|
}
|
|
|
|
/**
|
|
* Returns next sibling.
|
|
*/
|
|
|
|
}, {
|
|
key: 'getNextSibling',
|
|
value: function getNextSibling() {
|
|
if (!this.parent || this.index == null) {
|
|
return null;
|
|
}
|
|
return NodePath.getForNode(this.parent[this.property][this.index + 1], NodePath.getForNode(this.parent), this.property, this.index + 1);
|
|
}
|
|
|
|
/**
|
|
* Returns a NodePath instance for a node.
|
|
*
|
|
* The same NodePath can be reused in several places, e.g.
|
|
* a parent node passed for all its children.
|
|
*/
|
|
|
|
}], [{
|
|
key: 'getForNode',
|
|
value: function getForNode(node) {
|
|
var parentPath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
var prop = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
|
|
var index = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : -1;
|
|
|
|
if (!node) {
|
|
return null;
|
|
}
|
|
|
|
if (!NodePath.registry.has(node)) {
|
|
NodePath.registry.set(node, new NodePath(node, parentPath, prop, index == -1 ? null : index));
|
|
}
|
|
|
|
var path = NodePath.registry.get(node);
|
|
|
|
if (parentPath !== null) {
|
|
path.parentPath = parentPath;
|
|
path.parent = path.parentPath.node;
|
|
}
|
|
|
|
if (prop !== null) {
|
|
path.property = prop;
|
|
}
|
|
|
|
if (index >= 0) {
|
|
path.index = index;
|
|
}
|
|
|
|
return path;
|
|
}
|
|
|
|
/**
|
|
* Initializes the NodePath registry. The registry is a map from
|
|
* a node to its NodePath instance.
|
|
*/
|
|
|
|
}, {
|
|
key: 'initRegistry',
|
|
value: function initRegistry() {
|
|
if (!NodePath.registry) {
|
|
NodePath.registry = new Map();
|
|
}
|
|
NodePath.registry.clear();
|
|
}
|
|
|
|
/**
|
|
* Updates index of a currently traversing collection.
|
|
*/
|
|
|
|
}, {
|
|
key: 'updateTraversingIndex',
|
|
value: function updateTraversingIndex(dx) {
|
|
return NodePath.traversingIndexStack[NodePath.traversingIndexStack.length - 1] += dx;
|
|
}
|
|
|
|
/**
|
|
* Returns current traversing index.
|
|
*/
|
|
|
|
}, {
|
|
key: 'getTraversingIndex',
|
|
value: function getTraversingIndex() {
|
|
return NodePath.traversingIndexStack[NodePath.traversingIndexStack.length - 1];
|
|
}
|
|
}]);
|
|
|
|
return NodePath;
|
|
}();
|
|
|
|
NodePath.initRegistry();
|
|
|
|
/**
|
|
* Index of a currently traversing collection is stored on top of the
|
|
* `NodePath.traversingIndexStack`. Remove/insert methods can adjust
|
|
* this index.
|
|
*/
|
|
NodePath.traversingIndexStack = [];
|
|
|
|
// Helper function used to skip `loc` in JSON operations.
|
|
function jsonSkipLoc(prop, value) {
|
|
if (prop === 'loc') {
|
|
return undefined;
|
|
}
|
|
return value;
|
|
}
|
|
|
|
var nodePath = NodePath;
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
* Does an actual AST traversal, using visitor pattern,
|
|
* and calling set of callbacks.
|
|
*
|
|
* Based on https://github.com/olov/ast-traverse
|
|
*
|
|
* Expects AST in Mozilla Parser API: nodes which are supposed to be
|
|
* handled should have `type` property.
|
|
*
|
|
* @param Object root - a root node to start traversal from.
|
|
*
|
|
* @param Object options - an object with set of callbacks:
|
|
*
|
|
* - `pre(node, parent, prop, index)` - a hook called on node enter
|
|
* - `post`(node, parent, prop, index) - a hook called on node exit
|
|
* - `skipProperty(prop)` - a predicated whether a property should be skipped
|
|
*/
|
|
function astTraverse(root) {
|
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
|
|
var pre = options.pre;
|
|
var post = options.post;
|
|
var skipProperty = options.skipProperty;
|
|
|
|
function visit(node, parent, prop, idx) {
|
|
if (!node || typeof node.type !== 'string') {
|
|
return;
|
|
}
|
|
|
|
var res = undefined;
|
|
if (pre) {
|
|
res = pre(node, parent, prop, idx);
|
|
}
|
|
|
|
if (res !== false) {
|
|
|
|
// A node can be replaced during traversal, so we have to
|
|
// recalculate it from the parent, to avoid traversing "dead" nodes.
|
|
if (parent && parent[prop]) {
|
|
if (!isNaN(idx)) {
|
|
node = parent[prop][idx];
|
|
} else {
|
|
node = parent[prop];
|
|
}
|
|
}
|
|
|
|
for (var _prop in node) {
|
|
if (node.hasOwnProperty(_prop)) {
|
|
if (skipProperty ? skipProperty(_prop, node) : _prop[0] === '$') {
|
|
continue;
|
|
}
|
|
|
|
var child = node[_prop];
|
|
|
|
// Collection node.
|
|
//
|
|
// NOTE: a node (or several nodes) can be removed or inserted
|
|
// during traversal.
|
|
//
|
|
// Current traversing index is stored on top of the
|
|
// `NodePath.traversingIndexStack`. The stack is used to support
|
|
// recursive nature of the traversal.
|
|
//
|
|
// In this case `NodePath.traversingIndex` (which we use here) is
|
|
// updated in the NodePath remove/insert methods.
|
|
//
|
|
if (Array.isArray(child)) {
|
|
var index = 0;
|
|
nodePath.traversingIndexStack.push(index);
|
|
while (index < child.length) {
|
|
visit(child[index], node, _prop, index);
|
|
index = nodePath.updateTraversingIndex(+1);
|
|
}
|
|
nodePath.traversingIndexStack.pop();
|
|
}
|
|
|
|
// Simple node.
|
|
else {
|
|
visit(child, node, _prop);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (post) {
|
|
post(node, parent, prop, idx);
|
|
}
|
|
}
|
|
|
|
visit(root, null);
|
|
}
|
|
|
|
var traverse = {
|
|
/**
|
|
* Traverses an AST.
|
|
*
|
|
* @param Object ast - an AST node
|
|
*
|
|
* @param Object | Array<Object> handlers:
|
|
*
|
|
* an object (or an array of objects)
|
|
*
|
|
* Each such object contains a handler function per node.
|
|
* In case of an array of handlers, they are applied in order.
|
|
* A handler may return a transformed node (or a different type).
|
|
*
|
|
* The per-node function may instead be an object with functions pre and post.
|
|
* pre is called before visiting the node, post after.
|
|
* If a handler is a function, it is treated as the pre function, with an empty post.
|
|
*
|
|
* @param Object options:
|
|
*
|
|
* a config object, specifying traversal options:
|
|
*
|
|
* `asNodes`: boolean - whether handlers should receives raw AST nodes
|
|
* (false by default), instead of a `NodePath` wrapper. Note, by default
|
|
* `NodePath` wrapper provides a set of convenient method to manipulate
|
|
* a traversing AST, and also has access to all parents list. A raw
|
|
* nodes traversal should be used in rare cases, when no `NodePath`
|
|
* features are needed.
|
|
*
|
|
* Special hooks:
|
|
*
|
|
* - `shouldRun(ast)` - a predicate determining whether the handler
|
|
* should be applied.
|
|
*
|
|
* NOTE: Multiple handlers are used as an optimization of applying all of
|
|
* them in one AST traversal pass.
|
|
*/
|
|
traverse: function traverse(ast, handlers) {
|
|
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : { asNodes: false };
|
|
|
|
|
|
if (!Array.isArray(handlers)) {
|
|
handlers = [handlers];
|
|
}
|
|
|
|
// Filter out handlers by result of `shouldRun`, if the method is present.
|
|
handlers = handlers.filter(function (handler) {
|
|
if (typeof handler.shouldRun !== 'function') {
|
|
return true;
|
|
}
|
|
return handler.shouldRun(ast);
|
|
});
|
|
|
|
nodePath.initRegistry();
|
|
|
|
// Allow handlers to initializer themselves.
|
|
handlers.forEach(function (handler) {
|
|
if (typeof handler.init === 'function') {
|
|
handler.init(ast);
|
|
}
|
|
});
|
|
|
|
function getPathFor(node, parent, prop, index) {
|
|
var parentPath = nodePath.getForNode(parent);
|
|
var nodePath$1 = nodePath.getForNode(node, parentPath, prop, index);
|
|
|
|
return nodePath$1;
|
|
}
|
|
|
|
// Handle actual nodes.
|
|
astTraverse(ast, {
|
|
/**
|
|
* Handler on node enter.
|
|
*/
|
|
pre: function pre(node, parent, prop, index) {
|
|
var nodePath = void 0;
|
|
if (!options.asNodes) {
|
|
nodePath = getPathFor(node, parent, prop, index);
|
|
}
|
|
|
|
var _iteratorNormalCompletion = true;
|
|
var _didIteratorError = false;
|
|
var _iteratorError = undefined;
|
|
|
|
try {
|
|
for (var _iterator = handlers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
var handler = _step.value;
|
|
|
|
// "Catch-all" `*` handler.
|
|
if (typeof handler['*'] === 'function') {
|
|
if (nodePath) {
|
|
// A path/node can be removed by some previous handler.
|
|
if (!nodePath.isRemoved()) {
|
|
var handlerResult = handler['*'](nodePath);
|
|
// Explicitly stop traversal.
|
|
if (handlerResult === false) {
|
|
return false;
|
|
}
|
|
}
|
|
} else {
|
|
handler['*'](node, parent, prop, index);
|
|
}
|
|
}
|
|
|
|
// Per-node handler.
|
|
var handlerFuncPre = void 0;
|
|
if (typeof handler[node.type] === 'function') {
|
|
handlerFuncPre = handler[node.type];
|
|
} else if (typeof handler[node.type] === 'object' && typeof handler[node.type].pre === 'function') {
|
|
handlerFuncPre = handler[node.type].pre;
|
|
}
|
|
|
|
if (handlerFuncPre) {
|
|
if (nodePath) {
|
|
// A path/node can be removed by some previous handler.
|
|
if (!nodePath.isRemoved()) {
|
|
var _handlerResult = handlerFuncPre.call(handler, nodePath);
|
|
// Explicitly stop traversal.
|
|
if (_handlerResult === false) {
|
|
return false;
|
|
}
|
|
}
|
|
} else {
|
|
handlerFuncPre.call(handler, node, parent, prop, index);
|
|
}
|
|
}
|
|
} // Loop over handlers
|
|
} catch (err) {
|
|
_didIteratorError = true;
|
|
_iteratorError = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion && _iterator.return) {
|
|
_iterator.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError) {
|
|
throw _iteratorError;
|
|
}
|
|
}
|
|
}
|
|
},
|
|
// pre func
|
|
|
|
/**
|
|
* Handler on node exit.
|
|
*/
|
|
post: function post(node, parent, prop, index) {
|
|
if (!node) {
|
|
return;
|
|
}
|
|
|
|
var nodePath = void 0;
|
|
if (!options.asNodes) {
|
|
nodePath = getPathFor(node, parent, prop, index);
|
|
}
|
|
|
|
var _iteratorNormalCompletion2 = true;
|
|
var _didIteratorError2 = false;
|
|
var _iteratorError2 = undefined;
|
|
|
|
try {
|
|
for (var _iterator2 = handlers[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
|
var handler = _step2.value;
|
|
|
|
// Per-node handler.
|
|
var handlerFuncPost = void 0;
|
|
if (typeof handler[node.type] === 'object' && typeof handler[node.type].post === 'function') {
|
|
handlerFuncPost = handler[node.type].post;
|
|
}
|
|
|
|
if (handlerFuncPost) {
|
|
if (nodePath) {
|
|
// A path/node can be removed by some previous handler.
|
|
if (!nodePath.isRemoved()) {
|
|
var handlerResult = handlerFuncPost.call(handler, nodePath);
|
|
// Explicitly stop traversal.
|
|
if (handlerResult === false) {
|
|
return false;
|
|
}
|
|
}
|
|
} else {
|
|
handlerFuncPost.call(handler, node, parent, prop, index);
|
|
}
|
|
}
|
|
} // Loop over handlers
|
|
} catch (err) {
|
|
_didIteratorError2 = true;
|
|
_iteratorError2 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion2 && _iterator2.return) {
|
|
_iterator2.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError2) {
|
|
throw _iteratorError2;
|
|
}
|
|
}
|
|
}
|
|
},
|
|
// post func
|
|
|
|
/**
|
|
* Skip locations by default.
|
|
*/
|
|
skipProperty: function skipProperty(prop) {
|
|
return prop === 'loc';
|
|
}
|
|
});
|
|
}
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
var _createClass$5 = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
|
|
|
function _classCallCheck$5(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
* Transform result.
|
|
*/
|
|
|
|
var TransformResult = function () {
|
|
/**
|
|
* Initializes a transform result for an AST.
|
|
*
|
|
* @param Object ast - an AST node
|
|
* @param mixed extra - any extra data a transform may return
|
|
*/
|
|
function TransformResult(ast) {
|
|
var extra = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
|
|
_classCallCheck$5(this, TransformResult);
|
|
|
|
this._ast = ast;
|
|
this._source = null;
|
|
this._string = null;
|
|
this._regexp = null;
|
|
this._extra = extra;
|
|
}
|
|
|
|
_createClass$5(TransformResult, [{
|
|
key: 'getAST',
|
|
value: function getAST() {
|
|
return this._ast;
|
|
}
|
|
}, {
|
|
key: 'setExtra',
|
|
value: function setExtra(extra) {
|
|
this._extra = extra;
|
|
}
|
|
}, {
|
|
key: 'getExtra',
|
|
value: function getExtra() {
|
|
return this._extra;
|
|
}
|
|
}, {
|
|
key: 'toRegExp',
|
|
value: function toRegExp() {
|
|
if (!this._regexp) {
|
|
this._regexp = new RegExp(this.getSource(), this._ast.flags);
|
|
}
|
|
return this._regexp;
|
|
}
|
|
}, {
|
|
key: 'getSource',
|
|
value: function getSource() {
|
|
if (!this._source) {
|
|
this._source = generator_1.generate(this._ast.body);
|
|
}
|
|
return this._source;
|
|
}
|
|
}, {
|
|
key: 'getFlags',
|
|
value: function getFlags() {
|
|
return this._ast.flags;
|
|
}
|
|
}, {
|
|
key: 'toString',
|
|
value: function toString() {
|
|
if (!this._string) {
|
|
this._string = generator_1.generate(this._ast);
|
|
}
|
|
return this._string;
|
|
}
|
|
}]);
|
|
|
|
return TransformResult;
|
|
}();
|
|
|
|
var transform = {
|
|
/**
|
|
* Expose `TransformResult`.
|
|
*/
|
|
TransformResult: TransformResult,
|
|
|
|
/**
|
|
* Transforms a regular expression applying a set of
|
|
* transformation handlers.
|
|
*
|
|
* @param string | AST | RegExp:
|
|
*
|
|
* a regular expression in different representations: a string,
|
|
* a RegExp object, or an AST.
|
|
*
|
|
* @param Object | Array<Object>:
|
|
*
|
|
* a handler (or a list of handlers) from `traverse` API.
|
|
*
|
|
* @return TransformResult instance.
|
|
*
|
|
* Example:
|
|
*
|
|
* transform(/[a-z]/i, {
|
|
* onChar(path) {
|
|
* const {node} = path;
|
|
*
|
|
* if (...) {
|
|
* path.remove();
|
|
* }
|
|
* }
|
|
* });
|
|
*/
|
|
transform: function transform(regexp, handlers) {
|
|
var ast = regexp;
|
|
|
|
if (regexp instanceof RegExp) {
|
|
regexp = '' + regexp;
|
|
}
|
|
|
|
if (typeof regexp === 'string') {
|
|
ast = parser$1.parse(regexp, {
|
|
captureLocations: true
|
|
});
|
|
}
|
|
|
|
traverse.traverse(ast, handlers);
|
|
|
|
return new TransformResult(ast);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
|
|
|
|
|
|
var compatTranspiler = {
|
|
/**
|
|
* Translates a regexp in new syntax to equivalent regexp in old syntax.
|
|
*
|
|
* @param string|RegExp|AST - regexp
|
|
* @param Array transformsWhitelist - names of the transforms to apply
|
|
*/
|
|
transform: function transform$1(regexp) {
|
|
var transformsWhitelist = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
|
|
var transformToApply = transformsWhitelist.length > 0 ? transformsWhitelist : Object.keys(transforms$1);
|
|
|
|
var result = void 0;
|
|
|
|
// Collect extra data per transform.
|
|
var extra = {};
|
|
|
|
transformToApply.forEach(function (transformName) {
|
|
|
|
if (!transforms$1.hasOwnProperty(transformName)) {
|
|
throw new Error('Unknown compat-transform: ' + transformName + '. ' + 'Available transforms are: ' + Object.keys(transforms$1).join(', '));
|
|
}
|
|
|
|
var handler = transforms$1[transformName];
|
|
|
|
result = transform.transform(regexp, handler);
|
|
regexp = result.getAST();
|
|
|
|
// Collect `extra` transform result.
|
|
if (typeof handler.getExtra === 'function') {
|
|
extra[transformName] = handler.getExtra();
|
|
}
|
|
});
|
|
|
|
// Set the final extras for all transforms.
|
|
result.setExtra(extra);
|
|
|
|
return result;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* Performs a deep copy of an simple object.
|
|
* Only handles scalar values, arrays and objects.
|
|
*
|
|
* @param obj Object
|
|
*/
|
|
|
|
var clone = function clone(obj) {
|
|
if (obj === null || typeof obj !== 'object') {
|
|
return obj;
|
|
}
|
|
var res = void 0;
|
|
if (Array.isArray(obj)) {
|
|
res = [];
|
|
} else {
|
|
res = {};
|
|
}
|
|
for (var i in obj) {
|
|
res[i] = clone(obj[i]);
|
|
}
|
|
return res;
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* A regexp-tree plugin to transform surrogate pairs into single unicode code point
|
|
*
|
|
* \ud83d\ude80 -> \u{1f680}
|
|
*/
|
|
|
|
var charSurrogatePairToSingleUnicodeTransform = {
|
|
shouldRun: function shouldRun(ast) {
|
|
return ast.flags.includes('u');
|
|
},
|
|
Char: function Char(path) {
|
|
var node = path.node;
|
|
|
|
if (node.kind !== 'unicode' || !node.isSurrogatePair || isNaN(node.codePoint)) {
|
|
return;
|
|
}
|
|
node.value = '\\u{' + node.codePoint.toString(16) + '}';
|
|
delete node.isSurrogatePair;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
var UPPER_A_CP$1 = 'A'.codePointAt(0);
|
|
var UPPER_Z_CP$1 = 'Z'.codePointAt(0);
|
|
var LOWER_A_CP = 'a'.codePointAt(0);
|
|
var LOWER_Z_CP = 'z'.codePointAt(0);
|
|
var DIGIT_0_CP = '0'.codePointAt(0);
|
|
var DIGIT_9_CP = '9'.codePointAt(0);
|
|
|
|
/**
|
|
* A regexp-tree plugin to transform coded chars into simple chars.
|
|
*
|
|
* \u0061 -> a
|
|
*/
|
|
var charCodeToSimpleCharTransform = {
|
|
Char: function Char(path) {
|
|
var node = path.node,
|
|
parent = path.parent;
|
|
|
|
if (isNaN(node.codePoint) || node.kind === 'simple') {
|
|
return;
|
|
}
|
|
|
|
if (parent.type === 'ClassRange') {
|
|
if (!isSimpleRange(parent)) {
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (!isPrintableASCIIChar(node.codePoint)) {
|
|
return;
|
|
}
|
|
|
|
var symbol = String.fromCodePoint(node.codePoint);
|
|
var newChar = {
|
|
type: 'Char',
|
|
kind: 'simple',
|
|
value: symbol,
|
|
symbol: symbol,
|
|
codePoint: node.codePoint
|
|
};
|
|
if (needsEscape(symbol, parent.type)) {
|
|
newChar.escaped = true;
|
|
}
|
|
path.replace(newChar);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Checks if a range is included either in 0-9, a-z or A-Z
|
|
* @param classRange
|
|
* @returns {boolean}
|
|
*/
|
|
function isSimpleRange(classRange) {
|
|
var from = classRange.from,
|
|
to = classRange.to;
|
|
|
|
return from.codePoint >= DIGIT_0_CP && from.codePoint <= DIGIT_9_CP && to.codePoint >= DIGIT_0_CP && to.codePoint <= DIGIT_9_CP || from.codePoint >= UPPER_A_CP$1 && from.codePoint <= UPPER_Z_CP$1 && to.codePoint >= UPPER_A_CP$1 && to.codePoint <= UPPER_Z_CP$1 || from.codePoint >= LOWER_A_CP && from.codePoint <= LOWER_Z_CP && to.codePoint >= LOWER_A_CP && to.codePoint <= LOWER_Z_CP;
|
|
}
|
|
|
|
/**
|
|
* Checks if a code point in the range of printable ASCII chars
|
|
* (DEL char excluded)
|
|
* @param codePoint
|
|
* @returns {boolean}
|
|
*/
|
|
function isPrintableASCIIChar(codePoint) {
|
|
return codePoint >= 0x20 && codePoint <= 0x7e;
|
|
}
|
|
|
|
function needsEscape(symbol, parentType) {
|
|
if (parentType === 'ClassRange' || parentType === 'CharacterClass') {
|
|
return (/[\]\\^-]/.test(symbol)
|
|
);
|
|
}
|
|
|
|
return (/[*[()+?^$./\\|{}]/.test(symbol)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
var UPPER_A_CP = 'A'.codePointAt(0);
|
|
var UPPER_Z_CP = 'Z'.codePointAt(0);
|
|
/**
|
|
* Transforms case-insensitive regexp to lowercase
|
|
*
|
|
* /AaBbÏ/i -> /aabbï/i
|
|
*/
|
|
var charCaseInsensitiveLowercaseTransform = {
|
|
_AZClassRanges: null,
|
|
_hasUFlag: false,
|
|
init: function init(ast) {
|
|
this._AZClassRanges = new Set();
|
|
this._hasUFlag = ast.flags.includes('u');
|
|
},
|
|
shouldRun: function shouldRun(ast) {
|
|
return ast.flags.includes('i');
|
|
},
|
|
Char: function Char(path) {
|
|
var node = path.node,
|
|
parent = path.parent;
|
|
|
|
if (isNaN(node.codePoint)) {
|
|
return;
|
|
}
|
|
|
|
// Engine support for case-insensitive matching without the u flag
|
|
// for characters above \u1000 does not seem reliable.
|
|
if (!this._hasUFlag && node.codePoint >= 0x1000) {
|
|
return;
|
|
}
|
|
|
|
if (parent.type === 'ClassRange') {
|
|
// The only class ranges we handle must be inside A-Z.
|
|
// After the `from` char is processed, the isAZClassRange test
|
|
// will be false, so we use a Set to keep track of parents and
|
|
// process the `to` char.
|
|
if (!this._AZClassRanges.has(parent) && !isAZClassRange(parent)) {
|
|
return;
|
|
}
|
|
this._AZClassRanges.add(parent);
|
|
}
|
|
|
|
var lower = node.symbol.toLowerCase();
|
|
if (lower !== node.symbol) {
|
|
node.value = displaySymbolAsValue(lower, node);
|
|
node.symbol = lower;
|
|
node.codePoint = lower.codePointAt(0);
|
|
}
|
|
}
|
|
};
|
|
|
|
function isAZClassRange(classRange) {
|
|
var from = classRange.from,
|
|
to = classRange.to;
|
|
// A-Z
|
|
|
|
return from.codePoint >= UPPER_A_CP && from.codePoint <= UPPER_Z_CP && to.codePoint >= UPPER_A_CP && to.codePoint <= UPPER_Z_CP;
|
|
}
|
|
|
|
function displaySymbolAsValue(symbol, node) {
|
|
var codePoint = symbol.codePointAt(0);
|
|
if (node.kind === 'decimal') {
|
|
return '\\' + codePoint;
|
|
}
|
|
if (node.kind === 'oct') {
|
|
return '\\0' + codePoint.toString(8);
|
|
}
|
|
if (node.kind === 'hex') {
|
|
return '\\x' + codePoint.toString(16);
|
|
}
|
|
if (node.kind === 'unicode') {
|
|
if (node.isSurrogatePair) {
|
|
var _getSurrogatePairFrom = getSurrogatePairFromCodePoint(codePoint),
|
|
lead = _getSurrogatePairFrom.lead,
|
|
trail = _getSurrogatePairFrom.trail;
|
|
|
|
return '\\u' + '0'.repeat(4 - lead.length) + lead + '\\u' + '0'.repeat(4 - trail.length) + trail;
|
|
} else if (node.value.includes('{')) {
|
|
return '\\u{' + codePoint.toString(16) + '}';
|
|
} else {
|
|
var code = codePoint.toString(16);
|
|
return '\\u' + '0'.repeat(4 - code.length) + code;
|
|
}
|
|
}
|
|
// simple
|
|
return symbol;
|
|
}
|
|
|
|
/**
|
|
* Converts a code point to a surrogate pair.
|
|
* Conversion algorithm is taken from The Unicode Standard 3.0 Section 3.7
|
|
* (https://www.unicode.org/versions/Unicode3.0.0/ch03.pdf)
|
|
* @param {number} codePoint - Between 0x10000 and 0x10ffff
|
|
* @returns {{lead: string, trail: string}}
|
|
*/
|
|
function getSurrogatePairFromCodePoint(codePoint) {
|
|
var lead = Math.floor((codePoint - 0x10000) / 0x400) + 0xd800;
|
|
var trail = (codePoint - 0x10000) % 0x400 + 0xdc00;
|
|
return {
|
|
lead: lead.toString(16),
|
|
trail: trail.toString(16)
|
|
};
|
|
}
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* A regexp-tree plugin to remove duplicates from character classes.
|
|
*/
|
|
|
|
var charClassRemoveDuplicatesTransform = {
|
|
CharacterClass: function CharacterClass(path) {
|
|
var node = path.node;
|
|
|
|
var sources = {};
|
|
|
|
for (var i = 0; i < node.expressions.length; i++) {
|
|
var childPath = path.getChild(i);
|
|
var source = childPath.jsonEncode();
|
|
|
|
if (sources.hasOwnProperty(source)) {
|
|
childPath.remove();
|
|
|
|
// Since we remove the current node.
|
|
// TODO: make it simpler for users with a method.
|
|
i--;
|
|
}
|
|
|
|
sources[source] = true;
|
|
}
|
|
}
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* Flattens a nested disjunction node to a list.
|
|
*
|
|
* /a|b|c|d/
|
|
*
|
|
* {{{a, b}, c}, d} -> [a, b, c, d]
|
|
*/
|
|
|
|
function _toConsumableArray$7(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
|
|
|
|
function disjunctionToList$1(node) {
|
|
if (node.type !== 'Disjunction') {
|
|
throw new TypeError('Expected "Disjunction" node, got "' + node.type + '"');
|
|
}
|
|
|
|
var list = [];
|
|
|
|
if (node.left && node.left.type === 'Disjunction') {
|
|
list.push.apply(list, _toConsumableArray$7(disjunctionToList$1(node.left)).concat([node.right]));
|
|
} else {
|
|
list.push(node.left, node.right);
|
|
}
|
|
|
|
return list;
|
|
}
|
|
|
|
/**
|
|
* Builds a nested disjunction node from a list.
|
|
*
|
|
* /a|b|c|d/
|
|
*
|
|
* [a, b, c, d] -> {{{a, b}, c}, d}
|
|
*/
|
|
function listToDisjunction$1(list) {
|
|
return list.reduce(function (left, right) {
|
|
return {
|
|
type: 'Disjunction',
|
|
left: left,
|
|
right: right
|
|
};
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Increases a quantifier by one.
|
|
* Does not change greediness.
|
|
* * -> +
|
|
* + -> {2,}
|
|
* ? -> {1,2}
|
|
* {2} -> {3}
|
|
* {2,} -> {3,}
|
|
* {2,3} -> {3,4}
|
|
*/
|
|
function increaseQuantifierByOne$2(quantifier) {
|
|
if (quantifier.kind === '*') {
|
|
|
|
quantifier.kind = '+';
|
|
} else if (quantifier.kind === '+') {
|
|
|
|
quantifier.kind = 'Range';
|
|
quantifier.from = 2;
|
|
delete quantifier.to;
|
|
} else if (quantifier.kind === '?') {
|
|
|
|
quantifier.kind = 'Range';
|
|
quantifier.from = 1;
|
|
quantifier.to = 2;
|
|
} else if (quantifier.kind === 'Range') {
|
|
|
|
quantifier.from += 1;
|
|
if (quantifier.to) {
|
|
quantifier.to += 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
var utils = {
|
|
disjunctionToList: disjunctionToList$1,
|
|
listToDisjunction: listToDisjunction$1,
|
|
increaseQuantifierByOne: increaseQuantifierByOne$2
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
var increaseQuantifierByOne$1 = utils.increaseQuantifierByOne;
|
|
|
|
/**
|
|
* A regexp-tree plugin to merge quantifiers
|
|
*
|
|
* a+a+ -> a{2,}
|
|
* a{2}a{3} -> a{5}
|
|
* a{1,2}a{2,3} -> a{3,5}
|
|
*/
|
|
|
|
|
|
var quantifiersMergeTransform = {
|
|
Repetition: function Repetition(path) {
|
|
var node = path.node,
|
|
parent = path.parent;
|
|
|
|
|
|
if (parent.type !== 'Alternative' || !path.index) {
|
|
return;
|
|
}
|
|
|
|
var previousSibling = path.getPreviousSibling();
|
|
|
|
if (!previousSibling) {
|
|
return;
|
|
}
|
|
|
|
if (previousSibling.node.type === 'Repetition') {
|
|
if (!previousSibling.getChild().hasEqualSource(path.getChild())) {
|
|
return;
|
|
}
|
|
|
|
var _extractFromTo = extractFromTo(previousSibling.node.quantifier),
|
|
previousSiblingFrom = _extractFromTo.from,
|
|
previousSiblingTo = _extractFromTo.to;
|
|
|
|
var _extractFromTo2 = extractFromTo(node.quantifier),
|
|
nodeFrom = _extractFromTo2.from,
|
|
nodeTo = _extractFromTo2.to;
|
|
|
|
// It's does not seem reliable to merge quantifiers with different greediness
|
|
// when none of both is a greedy open range
|
|
|
|
|
|
if (previousSibling.node.quantifier.greedy !== node.quantifier.greedy && !isGreedyOpenRange(previousSibling.node.quantifier) && !isGreedyOpenRange(node.quantifier)) {
|
|
return;
|
|
}
|
|
|
|
// a*a* -> a*
|
|
// a*a+ -> a+
|
|
// a+a+ -> a{2,}
|
|
// a{2}a{4} -> a{6}
|
|
// a{1,2}a{2,3} -> a{3,5}
|
|
// a{1,}a{2,} -> a{3,}
|
|
// a+a{2,} -> a{3,}
|
|
|
|
// a??a{2,} -> a{2,}
|
|
// a*?a{2,} -> a{2,}
|
|
// a+?a{2,} -> a{3,}
|
|
|
|
node.quantifier.kind = 'Range';
|
|
node.quantifier.from = previousSiblingFrom + nodeFrom;
|
|
if (previousSiblingTo && nodeTo) {
|
|
node.quantifier.to = previousSiblingTo + nodeTo;
|
|
} else {
|
|
delete node.quantifier.to;
|
|
}
|
|
if (isGreedyOpenRange(previousSibling.node.quantifier) || isGreedyOpenRange(node.quantifier)) {
|
|
node.quantifier.greedy = true;
|
|
}
|
|
|
|
previousSibling.remove();
|
|
} else {
|
|
if (!previousSibling.hasEqualSource(path.getChild())) {
|
|
return;
|
|
}
|
|
|
|
increaseQuantifierByOne$1(node.quantifier);
|
|
previousSibling.remove();
|
|
}
|
|
}
|
|
};
|
|
|
|
function isGreedyOpenRange(quantifier) {
|
|
return quantifier.greedy && (quantifier.kind === '+' || quantifier.kind === '*' || quantifier.kind === 'Range' && !quantifier.to);
|
|
}
|
|
|
|
function extractFromTo(quantifier) {
|
|
var from = void 0,
|
|
to = void 0;
|
|
if (quantifier.kind === '*') {
|
|
from = 0;
|
|
} else if (quantifier.kind === '+') {
|
|
from = 1;
|
|
} else if (quantifier.kind === '?') {
|
|
from = 0;
|
|
to = 1;
|
|
} else {
|
|
from = quantifier.from;
|
|
if (quantifier.to) {
|
|
to = quantifier.to;
|
|
}
|
|
}
|
|
return { from: from, to: to };
|
|
}
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* A regexp-tree plugin to replace different range-based quantifiers
|
|
* with their symbol equivalents.
|
|
*
|
|
* a{0,} -> a*
|
|
* a{1,} -> a+
|
|
* a{1} -> a
|
|
*
|
|
* NOTE: the following is automatically handled in the generator:
|
|
*
|
|
* a{3,3} -> a{3}
|
|
*/
|
|
|
|
var quantifierRangeToSymbolTransform = {
|
|
Quantifier: function Quantifier(path) {
|
|
var node = path.node;
|
|
|
|
|
|
if (node.kind !== 'Range') {
|
|
return;
|
|
}
|
|
|
|
// a{0,} -> a*
|
|
rewriteOpenZero(path);
|
|
|
|
// a{1,} -> a+
|
|
rewriteOpenOne(path);
|
|
|
|
// a{1} -> a
|
|
rewriteExactOne(path);
|
|
}
|
|
};
|
|
|
|
function rewriteOpenZero(path) {
|
|
var node = path.node;
|
|
|
|
|
|
if (node.from !== 0 || node.to) {
|
|
return;
|
|
}
|
|
|
|
node.kind = '*';
|
|
delete node.from;
|
|
}
|
|
|
|
function rewriteOpenOne(path) {
|
|
var node = path.node;
|
|
|
|
|
|
if (node.from !== 1 || node.to) {
|
|
return;
|
|
}
|
|
|
|
node.kind = '+';
|
|
delete node.from;
|
|
}
|
|
|
|
function rewriteExactOne(path) {
|
|
var node = path.node;
|
|
|
|
|
|
if (node.from !== 1 || node.to !== 1) {
|
|
return;
|
|
}
|
|
|
|
path.parentPath.replace(path.parentPath.node.expression);
|
|
}
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* A regexp-tree plugin to simplify character classes
|
|
* spanning only one or two chars.
|
|
*
|
|
* [a-a] -> [a]
|
|
* [a-b] -> [ab]
|
|
*/
|
|
|
|
var charClassClassrangesToCharsTransform = {
|
|
ClassRange: function ClassRange(path) {
|
|
var node = path.node;
|
|
|
|
|
|
if (node.from.codePoint === node.to.codePoint) {
|
|
|
|
path.replace(node.from);
|
|
} else if (node.from.codePoint === node.to.codePoint - 1) {
|
|
|
|
path.getParent().insertChildAt(node.to, path.index + 1);
|
|
path.replace(node.from);
|
|
}
|
|
}
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* A regexp-tree plugin to replace standard character classes with
|
|
* their meta symbols equivalents.
|
|
*/
|
|
|
|
function _toConsumableArray$6(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
|
|
|
|
var charClassToMetaTransform = {
|
|
_hasIFlag: false,
|
|
_hasUFlag: false,
|
|
init: function init(ast) {
|
|
this._hasIFlag = ast.flags.includes('i');
|
|
this._hasUFlag = ast.flags.includes('u');
|
|
},
|
|
CharacterClass: function CharacterClass(path) {
|
|
// [0-9] -> \d
|
|
rewriteNumberRanges(path);
|
|
|
|
// [a-zA-Z_0-9] -> \w
|
|
rewriteWordRanges(path, this._hasIFlag, this._hasUFlag);
|
|
|
|
// [ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff] -> \s
|
|
rewriteWhitespaceRanges(path);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Rewrites number ranges: [0-9] -> \d
|
|
*/
|
|
function rewriteNumberRanges(path) {
|
|
var node = path.node;
|
|
|
|
|
|
node.expressions.forEach(function (expression, i) {
|
|
if (isFullNumberRange(expression)) {
|
|
path.getChild(i).replace({
|
|
type: 'Char',
|
|
value: '\\d',
|
|
kind: 'meta'
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Rewrites word ranges: [a-zA-Z_0-9] -> \w
|
|
* Thus, the ranges may go in any order, and other symbols/ranges
|
|
* are kept untouched, e.g. [a-z_\dA-Z$] -> [\w$]
|
|
*/
|
|
function rewriteWordRanges(path, hasIFlag, hasUFlag) {
|
|
var node = path.node;
|
|
|
|
|
|
var numberPath = null;
|
|
var lowerCasePath = null;
|
|
var upperCasePath = null;
|
|
var underscorePath = null;
|
|
var u017fPath = null;
|
|
var u212aPath = null;
|
|
|
|
node.expressions.forEach(function (expression, i) {
|
|
// \d
|
|
if (isMetaChar(expression, '\\d')) {
|
|
numberPath = path.getChild(i);
|
|
}
|
|
|
|
// a-z
|
|
else if (isLowerCaseRange(expression)) {
|
|
lowerCasePath = path.getChild(i);
|
|
}
|
|
|
|
// A-Z
|
|
else if (isUpperCaseRange(expression)) {
|
|
upperCasePath = path.getChild(i);
|
|
}
|
|
|
|
// _
|
|
else if (isUnderscore(expression)) {
|
|
underscorePath = path.getChild(i);
|
|
} else if (hasIFlag && hasUFlag && isCodePoint(expression, 0x017f)) {
|
|
u017fPath = path.getChild(i);
|
|
} else if (hasIFlag && hasUFlag && isCodePoint(expression, 0x212a)) {
|
|
u212aPath = path.getChild(i);
|
|
}
|
|
});
|
|
|
|
// If we found the whole pattern, replace it.
|
|
if (numberPath && (lowerCasePath && upperCasePath || hasIFlag && (lowerCasePath || upperCasePath)) && underscorePath && (!hasUFlag || !hasIFlag || u017fPath && u212aPath)) {
|
|
// Put \w in place of \d.
|
|
numberPath.replace({
|
|
type: 'Char',
|
|
value: '\\w',
|
|
kind: 'meta'
|
|
});
|
|
|
|
// Other paths are removed.
|
|
if (lowerCasePath) {
|
|
lowerCasePath.remove();
|
|
}
|
|
if (upperCasePath) {
|
|
upperCasePath.remove();
|
|
}
|
|
underscorePath.remove();
|
|
if (u017fPath) {
|
|
u017fPath.remove();
|
|
}
|
|
if (u212aPath) {
|
|
u212aPath.remove();
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Rewrites whitespace ranges: [ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff] -> \s.
|
|
*/
|
|
var whitespaceRangeTests = [function (node) {
|
|
return isChar(node, ' ');
|
|
}].concat(_toConsumableArray$6(['\\f', '\\n', '\\r', '\\t', '\\v'].map(function (char) {
|
|
return function (node) {
|
|
return isMetaChar(node, char);
|
|
};
|
|
})), _toConsumableArray$6([0x00a0, 0x1680, 0x2028, 0x2029, 0x202f, 0x205f, 0x3000, 0xfeff].map(function (codePoint) {
|
|
return function (node) {
|
|
return isCodePoint(node, codePoint);
|
|
};
|
|
})), [function (node) {
|
|
return node.type === 'ClassRange' && isCodePoint(node.from, 0x2000) && isCodePoint(node.to, 0x200a);
|
|
}]);
|
|
|
|
function rewriteWhitespaceRanges(path) {
|
|
var node = path.node;
|
|
|
|
|
|
if (node.expressions.length < whitespaceRangeTests.length || !whitespaceRangeTests.every(function (test) {
|
|
return node.expressions.some(function (expression) {
|
|
return test(expression);
|
|
});
|
|
})) {
|
|
return;
|
|
}
|
|
|
|
// If we found the whole pattern, replace it.
|
|
|
|
// Put \s in place of \n.
|
|
var nNode = node.expressions.find(function (expression) {
|
|
return isMetaChar(expression, '\\n');
|
|
});
|
|
nNode.value = '\\s';
|
|
nNode.symbol = undefined;
|
|
nNode.codePoint = NaN;
|
|
|
|
// Other paths are removed.
|
|
node.expressions.map(function (expression, i) {
|
|
return whitespaceRangeTests.some(function (test) {
|
|
return test(expression);
|
|
}) ? path.getChild(i) : undefined;
|
|
}).filter(Boolean).forEach(function (path) {
|
|
return path.remove();
|
|
});
|
|
}
|
|
|
|
function isFullNumberRange(node) {
|
|
return node.type === 'ClassRange' && node.from.value === '0' && node.to.value === '9';
|
|
}
|
|
|
|
function isChar(node, value) {
|
|
var kind = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'simple';
|
|
|
|
return node.type === 'Char' && node.value === value && node.kind === kind;
|
|
}
|
|
|
|
function isMetaChar(node, value) {
|
|
return isChar(node, value, 'meta');
|
|
}
|
|
|
|
function isLowerCaseRange(node) {
|
|
return node.type === 'ClassRange' && node.from.value === 'a' && node.to.value === 'z';
|
|
}
|
|
|
|
function isUpperCaseRange(node) {
|
|
return node.type === 'ClassRange' && node.from.value === 'A' && node.to.value === 'Z';
|
|
}
|
|
|
|
function isUnderscore(node) {
|
|
return node.type === 'Char' && node.value === '_' && node.kind === 'simple';
|
|
}
|
|
|
|
function isCodePoint(node, codePoint) {
|
|
return node.type === 'Char' && node.kind === 'unicode' && node.codePoint === codePoint;
|
|
}
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* A regexp-tree plugin to replace single char character classes with
|
|
* just that character.
|
|
*
|
|
* [\d] -> \d, [^\w] -> \W
|
|
*/
|
|
|
|
var charClassToSingleCharTransform = {
|
|
CharacterClass: function CharacterClass(path) {
|
|
var node = path.node;
|
|
|
|
|
|
if (node.expressions.length !== 1 || !hasAppropriateSiblings$1(path) || !isAppropriateChar(node.expressions[0])) {
|
|
return;
|
|
}
|
|
|
|
var _node$expressions$ = node.expressions[0],
|
|
value = _node$expressions$.value,
|
|
kind = _node$expressions$.kind,
|
|
escaped = _node$expressions$.escaped;
|
|
|
|
|
|
if (node.negative) {
|
|
// For negative can extract only meta chars like [^\w] -> \W
|
|
// cannot do for [^a] -> a (wrong).
|
|
if (!isMeta$1(value)) {
|
|
return;
|
|
}
|
|
|
|
value = getInverseMeta(value);
|
|
}
|
|
|
|
path.replace({
|
|
type: 'Char',
|
|
value: value,
|
|
kind: kind,
|
|
escaped: escaped || shouldEscape(value)
|
|
});
|
|
}
|
|
};
|
|
|
|
function isAppropriateChar(node) {
|
|
return node.type === 'Char' &&
|
|
// We don't extract [\b] (backspace) since \b has different
|
|
// semantics (word boundary).
|
|
node.value !== '\\b';
|
|
}
|
|
|
|
function isMeta$1(value) {
|
|
return (/^\\[dwsDWS]$/.test(value)
|
|
);
|
|
}
|
|
|
|
function getInverseMeta(value) {
|
|
return (/[dws]/.test(value) ? value.toUpperCase() : value.toLowerCase()
|
|
);
|
|
}
|
|
|
|
function hasAppropriateSiblings$1(path) {
|
|
var parent = path.parent,
|
|
index = path.index;
|
|
|
|
|
|
if (parent.type !== 'Alternative') {
|
|
return true;
|
|
}
|
|
|
|
var previousNode = parent.expressions[index - 1];
|
|
if (previousNode == null) {
|
|
return true;
|
|
}
|
|
|
|
// Don't optimized \1[0] to \10
|
|
if (previousNode.type === 'Backreference' && previousNode.kind === 'number') {
|
|
return false;
|
|
}
|
|
|
|
// Don't optimized \2[0] to \20
|
|
if (previousNode.type === 'Char' && previousNode.kind === 'decimal') {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
// Note: \{ and \} are always preserved to avoid `a[{]2[}]` turning
|
|
// into `a{2}`.
|
|
function shouldEscape(value) {
|
|
return (/[*[()+?$./{}|]/.test(value)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* A regexp-tree plugin to remove unnecessary escape.
|
|
*
|
|
* \e -> e
|
|
*
|
|
* [\(] -> [(]
|
|
*/
|
|
|
|
var charEscapeUnescapeTransform = {
|
|
_hasXFlag: false,
|
|
init: function init(ast) {
|
|
this._hasXFlag = ast.flags.includes('x');
|
|
},
|
|
Char: function Char(path) {
|
|
var node = path.node;
|
|
|
|
|
|
if (!node.escaped) {
|
|
return;
|
|
}
|
|
|
|
if (shouldUnescape(path, this._hasXFlag)) {
|
|
delete node.escaped;
|
|
}
|
|
}
|
|
};
|
|
|
|
function shouldUnescape(path, hasXFlag) {
|
|
var value = path.node.value,
|
|
index = path.index,
|
|
parent = path.parent;
|
|
|
|
// In char class (, etc are allowed.
|
|
|
|
if (parent.type !== 'CharacterClass' && parent.type !== 'ClassRange') {
|
|
return !preservesEscape(value, index, parent, hasXFlag);
|
|
}
|
|
|
|
return !preservesInCharClass(value, index, parent);
|
|
}
|
|
|
|
/**
|
|
* \], \\, \^, \-
|
|
*/
|
|
function preservesInCharClass(value, index, parent) {
|
|
if (value === '^') {
|
|
// Avoid [\^a] turning into [^a]
|
|
return index === 0 && !parent.negative;
|
|
}
|
|
if (value === '-') {
|
|
// Avoid [a\-z] turning into [a-z]
|
|
return true;
|
|
}
|
|
return (/[\]\\]/.test(value)
|
|
);
|
|
}
|
|
|
|
function preservesEscape(value, index, parent, hasXFlag) {
|
|
if (value === '{') {
|
|
return preservesOpeningCurlyBraceEscape(index, parent);
|
|
}
|
|
|
|
if (value === '}') {
|
|
return preservesClosingCurlyBraceEscape(index, parent);
|
|
}
|
|
|
|
if (hasXFlag && /[ #]/.test(value)) {
|
|
return true;
|
|
}
|
|
|
|
return (/[*[()+?^$./\\|]/.test(value)
|
|
);
|
|
}
|
|
|
|
function consumeNumbers(startIndex, parent, rtl) {
|
|
var i = startIndex;
|
|
var siblingNode = (rtl ? i >= 0 : i < parent.expressions.length) && parent.expressions[i];
|
|
|
|
while (siblingNode && siblingNode.type === 'Char' && siblingNode.kind === 'simple' && !siblingNode.escaped && /\d/.test(siblingNode.value)) {
|
|
rtl ? i-- : i++;
|
|
siblingNode = (rtl ? i >= 0 : i < parent.expressions.length) && parent.expressions[i];
|
|
}
|
|
|
|
return Math.abs(startIndex - i);
|
|
}
|
|
|
|
function isSimpleChar(node, value) {
|
|
return node && node.type === 'Char' && node.kind === 'simple' && !node.escaped && node.value === value;
|
|
}
|
|
|
|
function preservesOpeningCurlyBraceEscape(index, parent) {
|
|
// (?:\{) -> (?:{)
|
|
if (index == null) {
|
|
return false;
|
|
}
|
|
|
|
var nbFollowingNumbers = consumeNumbers(index + 1, parent);
|
|
var i = index + nbFollowingNumbers + 1;
|
|
var nextSiblingNode = i < parent.expressions.length && parent.expressions[i];
|
|
|
|
if (nbFollowingNumbers) {
|
|
// Avoid \{3} turning into {3}
|
|
if (isSimpleChar(nextSiblingNode, '}')) {
|
|
return true;
|
|
}
|
|
|
|
if (isSimpleChar(nextSiblingNode, ',')) {
|
|
nbFollowingNumbers = consumeNumbers(i + 1, parent);
|
|
i = i + nbFollowingNumbers + 1;
|
|
nextSiblingNode = i < parent.expressions.length && parent.expressions[i];
|
|
|
|
// Avoid \{3,} turning into {3,}
|
|
return isSimpleChar(nextSiblingNode, '}');
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function preservesClosingCurlyBraceEscape(index, parent) {
|
|
// (?:\{) -> (?:{)
|
|
if (index == null) {
|
|
return false;
|
|
}
|
|
|
|
var nbPrecedingNumbers = consumeNumbers(index - 1, parent, true);
|
|
var i = index - nbPrecedingNumbers - 1;
|
|
var previousSiblingNode = i >= 0 && parent.expressions[i];
|
|
|
|
// Avoid {3\} turning into {3}
|
|
if (nbPrecedingNumbers && isSimpleChar(previousSiblingNode, '{')) {
|
|
return true;
|
|
}
|
|
|
|
if (isSimpleChar(previousSiblingNode, ',')) {
|
|
nbPrecedingNumbers = consumeNumbers(i - 1, parent, true);
|
|
i = i - nbPrecedingNumbers - 1;
|
|
previousSiblingNode = i < parent.expressions.length && parent.expressions[i];
|
|
|
|
// Avoid {3,\} turning into {3,}
|
|
return nbPrecedingNumbers && isSimpleChar(previousSiblingNode, '{');
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* A regexp-tree plugin to merge class ranges.
|
|
*
|
|
* [a-ec] -> [a-e]
|
|
* [a-ec-e] -> [a-e]
|
|
* [\w\da-f] -> [\w]
|
|
* [abcdef] -> [a-f]
|
|
*/
|
|
|
|
var charClassClassrangesMergeTransform = {
|
|
_hasIUFlags: false,
|
|
init: function init(ast) {
|
|
this._hasIUFlags = ast.flags.includes('i') && ast.flags.includes('u');
|
|
},
|
|
CharacterClass: function CharacterClass(path) {
|
|
var node = path.node;
|
|
|
|
var expressions = node.expressions;
|
|
|
|
var metas = [];
|
|
// Extract metas
|
|
expressions.forEach(function (expression) {
|
|
if (isMeta(expression)) {
|
|
metas.push(expression.value);
|
|
}
|
|
});
|
|
|
|
expressions.sort(sortCharClass);
|
|
|
|
for (var i = 0; i < expressions.length; i++) {
|
|
var expression = expressions[i];
|
|
if (fitsInMetas(expression, metas, this._hasIUFlags) || combinesWithPrecedingClassRange(expression, expressions[i - 1]) || combinesWithFollowingClassRange(expression, expressions[i + 1])) {
|
|
expressions.splice(i, 1);
|
|
i--;
|
|
} else {
|
|
var nbMergedChars = charCombinesWithPrecedingChars(expression, i, expressions);
|
|
expressions.splice(i - nbMergedChars + 1, nbMergedChars);
|
|
i -= nbMergedChars;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Sorts expressions in char class in the following order:
|
|
* - meta chars, ordered alphabetically by value
|
|
* - chars (except `control` kind) and class ranges, ordered alphabetically (`from` char is used for class ranges)
|
|
* - if ambiguous, class range comes before char
|
|
* - if ambiguous between two class ranges, orders alphabetically by `to` char
|
|
* - control chars, ordered alphabetically by value
|
|
* @param {Object} a - Left Char or ClassRange node
|
|
* @param {Object} b - Right Char or ClassRange node
|
|
* @returns {number}
|
|
*/
|
|
function sortCharClass(a, b) {
|
|
var aValue = getSortValue(a);
|
|
var bValue = getSortValue(b);
|
|
|
|
if (aValue === bValue) {
|
|
// We want ClassRange before Char
|
|
// [bb-d] -> [b-db]
|
|
if (a.type === 'ClassRange' && b.type !== 'ClassRange') {
|
|
return -1;
|
|
}
|
|
if (b.type === 'ClassRange' && a.type !== 'ClassRange') {
|
|
return 1;
|
|
}
|
|
if (a.type === 'ClassRange' && b.type === 'ClassRange') {
|
|
return getSortValue(a.to) - getSortValue(b.to);
|
|
}
|
|
if (isMeta(a) && isMeta(b) || isControl(a) && isControl(b)) {
|
|
return a.value < b.value ? -1 : 1;
|
|
}
|
|
}
|
|
return aValue - bValue;
|
|
}
|
|
|
|
/**
|
|
* @param {Object} expression - Char or ClassRange node
|
|
* @returns {number}
|
|
*/
|
|
function getSortValue(expression) {
|
|
if (expression.type === 'Char') {
|
|
if (expression.value === '-') {
|
|
return Infinity;
|
|
}
|
|
if (expression.kind === 'control') {
|
|
return Infinity;
|
|
}
|
|
if (expression.kind === 'meta' && isNaN(expression.codePoint)) {
|
|
return -1;
|
|
}
|
|
return expression.codePoint;
|
|
}
|
|
// ClassRange
|
|
return expression.from.codePoint;
|
|
}
|
|
|
|
/**
|
|
* Checks if a node is a meta char from the set \d\w\s\D\W\S
|
|
* @param {Object} expression - Char or ClassRange node
|
|
* @param {?string} value
|
|
* @returns {boolean}
|
|
*/
|
|
function isMeta(expression) {
|
|
var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
|
|
return expression.type === 'Char' && expression.kind === 'meta' && (value ? expression.value === value : /^\\[dws]$/i.test(expression.value));
|
|
}
|
|
|
|
/**
|
|
* @param {Object} expression - Char or ClassRange node
|
|
* @returns {boolean}
|
|
*/
|
|
function isControl(expression) {
|
|
return expression.type === 'Char' && expression.kind === 'control';
|
|
}
|
|
|
|
/**
|
|
* @param {Object} expression - Char or ClassRange node
|
|
* @param {string[]} metas - Array of meta chars, e.g. ["\\w", "\\s"]
|
|
* @param {boolean} hasIUFlags
|
|
* @returns {boolean}
|
|
*/
|
|
function fitsInMetas(expression, metas, hasIUFlags) {
|
|
for (var i = 0; i < metas.length; i++) {
|
|
if (fitsInMeta(expression, metas[i], hasIUFlags)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* @param {Object} expression - Char or ClassRange node
|
|
* @param {string} meta - e.g. "\\w"
|
|
* @param {boolean} hasIUFlags
|
|
* @returns {boolean}
|
|
*/
|
|
function fitsInMeta(expression, meta, hasIUFlags) {
|
|
if (expression.type === 'ClassRange') {
|
|
return fitsInMeta(expression.from, meta, hasIUFlags) && fitsInMeta(expression.to, meta, hasIUFlags);
|
|
}
|
|
|
|
// Special cases:
|
|
// \S contains \w and \d
|
|
if (meta === '\\S' && (isMeta(expression, '\\w') || isMeta(expression, '\\d'))) {
|
|
return true;
|
|
}
|
|
// \D contains \W and \s
|
|
if (meta === '\\D' && (isMeta(expression, '\\W') || isMeta(expression, '\\s'))) {
|
|
return true;
|
|
}
|
|
// \w contains \d
|
|
if (meta === '\\w' && isMeta(expression, '\\d')) {
|
|
return true;
|
|
}
|
|
// \W contains \s
|
|
if (meta === '\\W' && isMeta(expression, '\\s')) {
|
|
return true;
|
|
}
|
|
|
|
if (expression.type !== 'Char' || isNaN(expression.codePoint)) {
|
|
return false;
|
|
}
|
|
|
|
if (meta === '\\s') {
|
|
return fitsInMetaS(expression);
|
|
}
|
|
if (meta === '\\S') {
|
|
return !fitsInMetaS(expression);
|
|
}
|
|
if (meta === '\\d') {
|
|
return fitsInMetaD(expression);
|
|
}
|
|
if (meta === '\\D') {
|
|
return !fitsInMetaD(expression);
|
|
}
|
|
if (meta === '\\w') {
|
|
return fitsInMetaW(expression, hasIUFlags);
|
|
}
|
|
if (meta === '\\W') {
|
|
return !fitsInMetaW(expression, hasIUFlags);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* @param {Object} expression - Char node with codePoint
|
|
* @returns {boolean}
|
|
*/
|
|
function fitsInMetaS(expression) {
|
|
return expression.codePoint === 0x0009 || // \t
|
|
expression.codePoint === 0x000a || // \n
|
|
expression.codePoint === 0x000b || // \v
|
|
expression.codePoint === 0x000c || // \f
|
|
expression.codePoint === 0x000d || // \r
|
|
expression.codePoint === 0x0020 || // space
|
|
expression.codePoint === 0x00a0 || // nbsp
|
|
expression.codePoint === 0x1680 || // part of Zs
|
|
expression.codePoint >= 0x2000 && expression.codePoint <= 0x200a || // part of Zs
|
|
expression.codePoint === 0x2028 || // line separator
|
|
expression.codePoint === 0x2029 || // paragraph separator
|
|
expression.codePoint === 0x202f || // part of Zs
|
|
expression.codePoint === 0x205f || // part of Zs
|
|
expression.codePoint === 0x3000 || // part of Zs
|
|
expression.codePoint === 0xfeff; // zwnbsp
|
|
}
|
|
|
|
/**
|
|
* @param {Object} expression - Char node with codePoint
|
|
* @returns {boolean}
|
|
*/
|
|
function fitsInMetaD(expression) {
|
|
return expression.codePoint >= 0x30 && expression.codePoint <= 0x39; // 0-9
|
|
}
|
|
|
|
/**
|
|
* @param {Object} expression - Char node with codePoint
|
|
* @param {boolean} hasIUFlags
|
|
* @returns {boolean}
|
|
*/
|
|
function fitsInMetaW(expression, hasIUFlags) {
|
|
return fitsInMetaD(expression) || expression.codePoint >= 0x41 && expression.codePoint <= 0x5a || // A-Z
|
|
expression.codePoint >= 0x61 && expression.codePoint <= 0x7a || // a-z
|
|
expression.value === '_' || hasIUFlags && (expression.codePoint === 0x017f || expression.codePoint === 0x212a);
|
|
}
|
|
|
|
/**
|
|
* @param {Object} expression - Char or ClassRange node
|
|
* @param {Object} classRange - Char or ClassRange node
|
|
* @returns {boolean}
|
|
*/
|
|
function combinesWithPrecedingClassRange(expression, classRange) {
|
|
if (classRange && classRange.type === 'ClassRange') {
|
|
if (fitsInClassRange(expression, classRange)) {
|
|
// [a-gc] -> [a-g]
|
|
// [a-gc-e] -> [a-g]
|
|
return true;
|
|
} else if (
|
|
// We only want \w chars or char codes to keep readability
|
|
isMetaWCharOrCode(expression) && classRange.to.codePoint === expression.codePoint - 1) {
|
|
// [a-de] -> [a-e]
|
|
classRange.to = expression;
|
|
return true;
|
|
} else if (expression.type === 'ClassRange' && expression.from.codePoint <= classRange.to.codePoint + 1 && expression.to.codePoint >= classRange.from.codePoint - 1) {
|
|
// [a-db-f] -> [a-f]
|
|
// [b-fa-d] -> [a-f]
|
|
// [a-cd-f] -> [a-f]
|
|
if (expression.from.codePoint < classRange.from.codePoint) {
|
|
classRange.from = expression.from;
|
|
}
|
|
if (expression.to.codePoint > classRange.to.codePoint) {
|
|
classRange.to = expression.to;
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* @param {Object} expression - Char or ClassRange node
|
|
* @param {Object} classRange - Char or ClassRange node
|
|
* @returns {boolean}
|
|
*/
|
|
function combinesWithFollowingClassRange(expression, classRange) {
|
|
if (classRange && classRange.type === 'ClassRange') {
|
|
// Considering the elements were ordered alphabetically,
|
|
// there is only one case to handle
|
|
// [ab-e] -> [a-e]
|
|
if (
|
|
// We only want \w chars or char codes to keep readability
|
|
isMetaWCharOrCode(expression) && classRange.from.codePoint === expression.codePoint + 1) {
|
|
classRange.from = expression;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* @param {Object} expression - Char or ClassRange node
|
|
* @param {Object} classRange - ClassRange node
|
|
* @returns {boolean}
|
|
*/
|
|
function fitsInClassRange(expression, classRange) {
|
|
if (expression.type === 'Char' && isNaN(expression.codePoint)) {
|
|
return false;
|
|
}
|
|
if (expression.type === 'ClassRange') {
|
|
return fitsInClassRange(expression.from, classRange) && fitsInClassRange(expression.to, classRange);
|
|
}
|
|
return expression.codePoint >= classRange.from.codePoint && expression.codePoint <= classRange.to.codePoint;
|
|
}
|
|
|
|
/**
|
|
* @param {Object} expression - Char or ClassRange node
|
|
* @param {Number} index
|
|
* @param {Object[]} expressions - expressions in CharClass
|
|
* @returns {number} - Number of characters combined with expression
|
|
*/
|
|
function charCombinesWithPrecedingChars(expression, index, expressions) {
|
|
// We only want \w chars or char codes to keep readability
|
|
if (!isMetaWCharOrCode(expression)) {
|
|
return 0;
|
|
}
|
|
var nbMergedChars = 0;
|
|
while (index > 0) {
|
|
var currentExpression = expressions[index];
|
|
var precedingExpresion = expressions[index - 1];
|
|
if (isMetaWCharOrCode(precedingExpresion) && precedingExpresion.codePoint === currentExpression.codePoint - 1) {
|
|
nbMergedChars++;
|
|
index--;
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (nbMergedChars > 1) {
|
|
expressions[index] = {
|
|
type: 'ClassRange',
|
|
from: expressions[index],
|
|
to: expression
|
|
};
|
|
return nbMergedChars;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
function isMetaWCharOrCode(expression) {
|
|
return expression && expression.type === 'Char' && !isNaN(expression.codePoint) && (fitsInMetaW(expression, false) || expression.kind === 'unicode' || expression.kind === 'hex' || expression.kind === 'oct' || expression.kind === 'decimal');
|
|
}
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
|
|
|
|
var disjunctionToList = utils.disjunctionToList,
|
|
listToDisjunction = utils.listToDisjunction;
|
|
|
|
/**
|
|
* Removes duplicates from a disjunction sequence:
|
|
*
|
|
* /(ab|bc|ab)+(xy|xy)+/ -> /(ab|bc)+(xy)+/
|
|
*/
|
|
|
|
|
|
var disjunctionRemoveDuplicatesTransform = {
|
|
Disjunction: function Disjunction(path) {
|
|
var node = path.node;
|
|
|
|
// Make unique nodes.
|
|
|
|
var uniqueNodesMap = {};
|
|
|
|
var parts = disjunctionToList(node).filter(function (part) {
|
|
var encoded = part ? nodePath.getForNode(part).jsonEncode() : 'null';
|
|
|
|
// Already recorded this part, filter out.
|
|
if (uniqueNodesMap.hasOwnProperty(encoded)) {
|
|
return false;
|
|
}
|
|
|
|
uniqueNodesMap[encoded] = part;
|
|
return true;
|
|
});
|
|
|
|
// Replace with the optimized disjunction.
|
|
path.replace(listToDisjunction(parts));
|
|
}
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* A regexp-tree plugin to replace single char group disjunction to char group
|
|
*
|
|
* a|b|c -> [abc]
|
|
* [12]|3|4 -> [1234]
|
|
* (a|b|c) -> ([abc])
|
|
* (?:a|b|c) -> [abc]
|
|
*/
|
|
|
|
var groupSingleCharsToCharClass = {
|
|
Disjunction: function Disjunction(path) {
|
|
var node = path.node,
|
|
parent = path.parent;
|
|
|
|
|
|
if (!handlers[parent.type]) {
|
|
return;
|
|
}
|
|
|
|
var charset = new Map();
|
|
|
|
if (!shouldProcess(node, charset) || !charset.size) {
|
|
return;
|
|
}
|
|
|
|
var characterClass = {
|
|
type: 'CharacterClass',
|
|
expressions: Array.from(charset.keys()).sort().map(function (key) {
|
|
return charset.get(key);
|
|
})
|
|
};
|
|
|
|
handlers[parent.type](path.getParent(), characterClass);
|
|
}
|
|
};
|
|
|
|
var handlers = {
|
|
RegExp: function RegExp(path, characterClass) {
|
|
var node = path.node;
|
|
|
|
|
|
node.body = characterClass;
|
|
},
|
|
Group: function Group(path, characterClass) {
|
|
var node = path.node;
|
|
|
|
|
|
if (node.capturing) {
|
|
node.expression = characterClass;
|
|
} else {
|
|
path.replace(characterClass);
|
|
}
|
|
}
|
|
};
|
|
|
|
function shouldProcess(expression, charset) {
|
|
if (!expression) {
|
|
// Abort on empty disjunction part
|
|
return false;
|
|
}
|
|
|
|
var type = expression.type;
|
|
|
|
|
|
if (type === 'Disjunction') {
|
|
var left = expression.left,
|
|
right = expression.right;
|
|
|
|
|
|
return shouldProcess(left, charset) && shouldProcess(right, charset);
|
|
} else if (type === 'Char') {
|
|
var value = expression.value;
|
|
|
|
|
|
charset.set(value, expression);
|
|
|
|
return true;
|
|
} else if (type === 'CharacterClass' && !expression.negative) {
|
|
return expression.expressions.every(function (expression) {
|
|
return shouldProcess(expression, charset);
|
|
});
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* A regexp-tree plugin to remove non-capturing empty groups.
|
|
*
|
|
* /(?:)a/ -> /a/
|
|
* /a|(?:)/ -> /a|/
|
|
*/
|
|
|
|
var removeEmptyGroupTransform = {
|
|
Group: function Group(path) {
|
|
var node = path.node,
|
|
parent = path.parent;
|
|
|
|
var childPath = path.getChild();
|
|
|
|
if (node.capturing || childPath) {
|
|
return;
|
|
}
|
|
|
|
if (parent.type === 'Repetition') {
|
|
|
|
path.getParent().replace(node);
|
|
} else if (parent.type !== 'RegExp') {
|
|
|
|
path.remove();
|
|
}
|
|
}
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* A regexp-tree plugin to remove unnecessary groups.
|
|
*
|
|
* /(?:a)/ -> /a/
|
|
*/
|
|
|
|
function _toConsumableArray$5(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
|
|
|
|
var ungroupTransform = {
|
|
Group: function Group(path) {
|
|
var node = path.node,
|
|
parent = path.parent;
|
|
|
|
var childPath = path.getChild();
|
|
|
|
if (node.capturing || !childPath) {
|
|
return;
|
|
}
|
|
|
|
// Don't optimize \1(?:0) to \10
|
|
if (!hasAppropriateSiblings(path)) {
|
|
return;
|
|
}
|
|
|
|
// Don't optimize /a(?:b|c)/ to /ab|c/
|
|
// but /(?:b|c)/ to /b|c/ is ok
|
|
if (childPath.node.type === 'Disjunction' && parent.type !== 'RegExp') {
|
|
return;
|
|
}
|
|
|
|
// Don't optimize /(?:ab)+/ to /ab+/
|
|
// but /(?:a)+/ to /a+/ is ok
|
|
// and /(?:[a-d])+/ to /[a-d]+/ is ok too
|
|
if (parent.type === 'Repetition' && childPath.node.type !== 'Char' && childPath.node.type !== 'CharacterClass') {
|
|
return;
|
|
}
|
|
|
|
if (childPath.node.type === 'Alternative') {
|
|
var parentPath = path.getParent();
|
|
if (parentPath.node.type === 'Alternative') {
|
|
// /abc(?:def)ghi/ When (?:def) is ungrouped its content must be merged with parent alternative
|
|
|
|
parentPath.replace({
|
|
type: 'Alternative',
|
|
expressions: [].concat(_toConsumableArray$5(parent.expressions.slice(0, path.index)), _toConsumableArray$5(childPath.node.expressions), _toConsumableArray$5(parent.expressions.slice(path.index + 1)))
|
|
});
|
|
}
|
|
} else {
|
|
path.replace(childPath.node);
|
|
}
|
|
}
|
|
};
|
|
|
|
function hasAppropriateSiblings(path) {
|
|
var parent = path.parent,
|
|
index = path.index;
|
|
|
|
|
|
if (parent.type !== 'Alternative') {
|
|
return true;
|
|
}
|
|
|
|
var previousNode = parent.expressions[index - 1];
|
|
if (previousNode == null) {
|
|
return true;
|
|
}
|
|
|
|
// Don't optimized \1(?:0) to \10
|
|
if (previousNode.type === 'Backreference' && previousNode.kind === 'number') {
|
|
return false;
|
|
}
|
|
|
|
// Don't optimized \2(?:0) to \20
|
|
if (previousNode.type === 'Char' && previousNode.kind === 'decimal') {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
function _toConsumableArray$4(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
|
|
|
|
|
|
|
|
var increaseQuantifierByOne = utils.increaseQuantifierByOne;
|
|
|
|
/**
|
|
* A regexp-tree plugin to combine repeating patterns.
|
|
*
|
|
* /^abcabcabc/ -> /^abc{3}/
|
|
* /^(?:abc){2}abc/ -> /^(?:abc){3}/
|
|
* /^abc(?:abc){2}/ -> /^(?:abc){3}/
|
|
*/
|
|
|
|
var combineRepeatingPatternsTransform = {
|
|
Alternative: function Alternative(path) {
|
|
var node = path.node;
|
|
|
|
// We can skip the first child
|
|
|
|
var index = 1;
|
|
while (index < node.expressions.length) {
|
|
var child = path.getChild(index);
|
|
index = Math.max(1, combineRepeatingPatternLeft(path, child, index));
|
|
|
|
if (index >= node.expressions.length) {
|
|
break;
|
|
}
|
|
|
|
child = path.getChild(index);
|
|
index = Math.max(1, combineWithPreviousRepetition(path, child, index));
|
|
|
|
if (index >= node.expressions.length) {
|
|
break;
|
|
}
|
|
|
|
child = path.getChild(index);
|
|
index = Math.max(1, combineRepetitionWithPrevious(path, child, index));
|
|
|
|
index++;
|
|
}
|
|
}
|
|
};
|
|
|
|
// abcabc -> (?:abc){2}
|
|
function combineRepeatingPatternLeft(alternative, child, index) {
|
|
var node = alternative.node;
|
|
|
|
|
|
var nbPossibleLengths = Math.ceil(index / 2);
|
|
var i = 0;
|
|
|
|
while (i < nbPossibleLengths) {
|
|
var startIndex = index - 2 * i - 1;
|
|
var right = void 0,
|
|
left = void 0;
|
|
|
|
if (i === 0) {
|
|
right = child;
|
|
left = alternative.getChild(startIndex);
|
|
} else {
|
|
right = nodePath.getForNode({
|
|
type: 'Alternative',
|
|
expressions: [].concat(_toConsumableArray$4(node.expressions.slice(index - i, index)), [child.node])
|
|
});
|
|
|
|
left = nodePath.getForNode({
|
|
type: 'Alternative',
|
|
expressions: [].concat(_toConsumableArray$4(node.expressions.slice(startIndex, index - i)))
|
|
});
|
|
}
|
|
|
|
if (right.hasEqualSource(left)) {
|
|
for (var j = 0; j < 2 * i + 1; j++) {
|
|
alternative.getChild(startIndex).remove();
|
|
}
|
|
|
|
child.replace({
|
|
type: 'Repetition',
|
|
expression: i === 0 && right.node.type !== 'Repetition' ? right.node : {
|
|
type: 'Group',
|
|
capturing: false,
|
|
expression: right.node
|
|
},
|
|
quantifier: {
|
|
type: 'Quantifier',
|
|
kind: 'Range',
|
|
from: 2,
|
|
to: 2,
|
|
greedy: true
|
|
}
|
|
});
|
|
return startIndex;
|
|
}
|
|
|
|
i++;
|
|
}
|
|
|
|
return index;
|
|
}
|
|
|
|
// (?:abc){2}abc -> (?:abc){3}
|
|
function combineWithPreviousRepetition(alternative, child, index) {
|
|
var node = alternative.node;
|
|
|
|
|
|
var i = 0;
|
|
while (i < index) {
|
|
var previousChild = alternative.getChild(i);
|
|
|
|
if (previousChild.node.type === 'Repetition' && previousChild.node.quantifier.greedy) {
|
|
var left = previousChild.getChild();
|
|
var right = void 0;
|
|
|
|
if (left.node.type === 'Group' && !left.node.capturing) {
|
|
left = left.getChild();
|
|
}
|
|
|
|
if (i + 1 === index) {
|
|
right = child;
|
|
if (right.node.type === 'Group' && !right.node.capturing) {
|
|
right = right.getChild();
|
|
}
|
|
} else {
|
|
right = nodePath.getForNode({
|
|
type: 'Alternative',
|
|
expressions: [].concat(_toConsumableArray$4(node.expressions.slice(i + 1, index + 1)))
|
|
});
|
|
}
|
|
|
|
if (left.hasEqualSource(right)) {
|
|
for (var j = i; j < index; j++) {
|
|
alternative.getChild(i + 1).remove();
|
|
}
|
|
|
|
increaseQuantifierByOne(previousChild.node.quantifier);
|
|
|
|
return i;
|
|
}
|
|
}
|
|
|
|
i++;
|
|
}
|
|
return index;
|
|
}
|
|
|
|
// abc(?:abc){2} -> (?:abc){3}
|
|
function combineRepetitionWithPrevious(alternative, child, index) {
|
|
var node = alternative.node;
|
|
|
|
|
|
if (child.node.type === 'Repetition' && child.node.quantifier.greedy) {
|
|
var right = child.getChild();
|
|
var left = void 0;
|
|
|
|
if (right.node.type === 'Group' && !right.node.capturing) {
|
|
right = right.getChild();
|
|
}
|
|
|
|
var rightLength = void 0;
|
|
if (right.node.type === 'Alternative') {
|
|
rightLength = right.node.expressions.length;
|
|
left = nodePath.getForNode({
|
|
type: 'Alternative',
|
|
expressions: [].concat(_toConsumableArray$4(node.expressions.slice(index - rightLength, index)))
|
|
});
|
|
} else {
|
|
rightLength = 1;
|
|
left = alternative.getChild(index - 1);
|
|
if (left.node.type === 'Group' && !left.node.capturing) {
|
|
left = left.getChild();
|
|
}
|
|
}
|
|
|
|
if (left.hasEqualSource(right)) {
|
|
for (var j = index - rightLength; j < index; j++) {
|
|
alternative.getChild(index - rightLength).remove();
|
|
}
|
|
|
|
increaseQuantifierByOne(child.node.quantifier);
|
|
|
|
return index - rightLength;
|
|
}
|
|
}
|
|
return index;
|
|
}
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
var transforms = new Map([
|
|
// \ud83d\ude80 -> \u{1f680}
|
|
['charSurrogatePairToSingleUnicode', charSurrogatePairToSingleUnicodeTransform],
|
|
|
|
// \u0061 -> a
|
|
['charCodeToSimpleChar', charCodeToSimpleCharTransform],
|
|
|
|
// /Aa/i -> /aa/i
|
|
['charCaseInsensitiveLowerCaseTransform', charCaseInsensitiveLowercaseTransform],
|
|
|
|
// [\d\d] -> [\d]
|
|
['charClassRemoveDuplicates', charClassRemoveDuplicatesTransform],
|
|
|
|
// a{1,2}a{2,3} -> a{3,5}
|
|
['quantifiersMerge', quantifiersMergeTransform],
|
|
|
|
// a{1,} -> a+, a{3,3} -> a{3}, a{1} -> a
|
|
['quantifierRangeToSymbol', quantifierRangeToSymbolTransform],
|
|
|
|
// [a-a] -> [a], [a-b] -> [ab]
|
|
['charClassClassrangesToChars', charClassClassrangesToCharsTransform],
|
|
|
|
// [0-9] -> [\d]
|
|
['charClassToMeta', charClassToMetaTransform],
|
|
|
|
// [\d] -> \d, [^\w] -> \W
|
|
['charClassToSingleChar', charClassToSingleCharTransform],
|
|
|
|
// \e -> e
|
|
['charEscapeUnescape', charEscapeUnescapeTransform],
|
|
|
|
// [a-de-f] -> [a-f]
|
|
['charClassClassrangesMerge', charClassClassrangesMergeTransform],
|
|
|
|
// (ab|ab) -> (ab)
|
|
['disjunctionRemoveDuplicates', disjunctionRemoveDuplicatesTransform],
|
|
|
|
// (a|b|c) -> [abc]
|
|
['groupSingleCharsToCharClass', groupSingleCharsToCharClass],
|
|
|
|
// (?:)a -> a
|
|
['removeEmptyGroup', removeEmptyGroupTransform],
|
|
|
|
// (?:a) -> a
|
|
['ungroup', ungroupTransform],
|
|
|
|
// abcabcabc -> (?:abc){3}
|
|
['combineRepeatingPatterns', combineRepeatingPatternsTransform]]);
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var optimizer = {
|
|
/**
|
|
* Optimizer transforms a regular expression into an optimized version,
|
|
* replacing some sub-expressions with their idiomatic patterns.
|
|
*
|
|
* @param string | RegExp | AST - a regexp to optimize.
|
|
*
|
|
* @return TransformResult - an optimized regexp.
|
|
*
|
|
* Example:
|
|
*
|
|
* /[a-zA-Z_0-9][a-zA-Z_0-9]*\e{1,}/
|
|
*
|
|
* Optimized to:
|
|
*
|
|
* /\w+e+/
|
|
*/
|
|
optimize: function optimize(regexp) {
|
|
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
_ref$whitelist = _ref.whitelist,
|
|
whitelist = _ref$whitelist === undefined ? [] : _ref$whitelist,
|
|
_ref$blacklist = _ref.blacklist,
|
|
blacklist = _ref$blacklist === undefined ? [] : _ref$blacklist;
|
|
|
|
var transformsRaw = whitelist.length > 0 ? whitelist : Array.from(transforms.keys());
|
|
|
|
var transformToApply = transformsRaw.filter(function (transform) {
|
|
return !blacklist.includes(transform);
|
|
});
|
|
|
|
var ast = regexp;
|
|
if (regexp instanceof RegExp) {
|
|
regexp = '' + regexp;
|
|
}
|
|
|
|
if (typeof regexp === 'string') {
|
|
ast = parser$1.parse(regexp);
|
|
}
|
|
|
|
var result = new transform.TransformResult(ast);
|
|
var prevResultString = void 0;
|
|
|
|
do {
|
|
// Get a copy of the current state here so
|
|
// we can compare it with the state at the
|
|
// end of the loop.
|
|
prevResultString = result.toString();
|
|
ast = clone(result.getAST());
|
|
|
|
transformToApply.forEach(function (transformName) {
|
|
if (!transforms.has(transformName)) {
|
|
throw new Error('Unknown optimization-transform: ' + transformName + '. ' + 'Available transforms are: ' + Array.from(transforms.keys()).join(', '));
|
|
}
|
|
|
|
var transformer = transforms.get(transformName);
|
|
|
|
// Don't override result just yet since we
|
|
// might want to rollback the transform
|
|
var newResult = transform.transform(ast, transformer);
|
|
|
|
if (newResult.toString() !== result.toString()) {
|
|
if (newResult.toString().length <= result.toString().length) {
|
|
result = newResult;
|
|
} else {
|
|
// Result has changed but is not shorter:
|
|
// restore ast to its previous state.
|
|
|
|
ast = clone(result.getAST());
|
|
}
|
|
}
|
|
});
|
|
|
|
// Keep running the optimizer until it stops
|
|
// making any change to the regexp.
|
|
} while (result.toString() !== prevResultString);
|
|
|
|
return result;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* Epsilon, the empty string.
|
|
*/
|
|
|
|
var EPSILON$3 = 'ε';
|
|
|
|
/**
|
|
* Epsilon-closure.
|
|
*/
|
|
var EPSILON_CLOSURE$2 = EPSILON$3 + '*';
|
|
|
|
var specialSymbols = {
|
|
EPSILON: EPSILON$3,
|
|
EPSILON_CLOSURE: EPSILON_CLOSURE$2
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
var _slicedToArray$1 = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
|
|
|
|
var _createClass$4 = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
|
|
|
function _toConsumableArray$3(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
|
|
|
|
function _classCallCheck$4(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
var EPSILON$2 = specialSymbols.EPSILON,
|
|
EPSILON_CLOSURE$1 = specialSymbols.EPSILON_CLOSURE;
|
|
|
|
/**
|
|
* NFA fragment.
|
|
*
|
|
* NFA sub-fragments can be combined to a larger NFAs building
|
|
* the resulting machine. Combining the fragments is done by patching
|
|
* edges of the in- and out-states.
|
|
*
|
|
* 2-states implementation, `in`, and `out`. Eventually all transitions
|
|
* go to the same `out`, which can further be connected via ε-transition
|
|
* with other fragment.
|
|
*/
|
|
|
|
|
|
var NFA = function () {
|
|
function NFA(inState, outState) {
|
|
_classCallCheck$4(this, NFA);
|
|
|
|
this.in = inState;
|
|
this.out = outState;
|
|
}
|
|
|
|
/**
|
|
* Tries to recognize a string based on this NFA fragment.
|
|
*/
|
|
|
|
|
|
_createClass$4(NFA, [{
|
|
key: 'matches',
|
|
value: function matches(string) {
|
|
return this.in.matches(string);
|
|
}
|
|
|
|
/**
|
|
* Returns an alphabet for this NFA.
|
|
*/
|
|
|
|
}, {
|
|
key: 'getAlphabet',
|
|
value: function getAlphabet() {
|
|
if (!this._alphabet) {
|
|
this._alphabet = new Set();
|
|
var table = this.getTransitionTable();
|
|
for (var state in table) {
|
|
var transitions = table[state];
|
|
for (var symbol in transitions) {
|
|
if (symbol !== EPSILON_CLOSURE$1) {
|
|
this._alphabet.add(symbol);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return this._alphabet;
|
|
}
|
|
|
|
/**
|
|
* Returns set of accepting states.
|
|
*/
|
|
|
|
}, {
|
|
key: 'getAcceptingStates',
|
|
value: function getAcceptingStates() {
|
|
if (!this._acceptingStates) {
|
|
// States are determined during table construction.
|
|
this.getTransitionTable();
|
|
}
|
|
return this._acceptingStates;
|
|
}
|
|
|
|
/**
|
|
* Returns accepting state numbers.
|
|
*/
|
|
|
|
}, {
|
|
key: 'getAcceptingStateNumbers',
|
|
value: function getAcceptingStateNumbers() {
|
|
if (!this._acceptingStateNumbers) {
|
|
this._acceptingStateNumbers = new Set();
|
|
var _iteratorNormalCompletion = true;
|
|
var _didIteratorError = false;
|
|
var _iteratorError = undefined;
|
|
|
|
try {
|
|
for (var _iterator = this.getAcceptingStates()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
var acceptingState = _step.value;
|
|
|
|
this._acceptingStateNumbers.add(acceptingState.number);
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError = true;
|
|
_iteratorError = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion && _iterator.return) {
|
|
_iterator.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError) {
|
|
throw _iteratorError;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return this._acceptingStateNumbers;
|
|
}
|
|
|
|
/**
|
|
* Builds and returns transition table.
|
|
*/
|
|
|
|
}, {
|
|
key: 'getTransitionTable',
|
|
value: function getTransitionTable() {
|
|
var _this = this;
|
|
|
|
if (!this._transitionTable) {
|
|
this._transitionTable = {};
|
|
this._acceptingStates = new Set();
|
|
|
|
var visited = new Set();
|
|
var symbols = new Set();
|
|
|
|
var visitState = function visitState(state) {
|
|
if (visited.has(state)) {
|
|
return;
|
|
}
|
|
|
|
visited.add(state);
|
|
state.number = visited.size;
|
|
_this._transitionTable[state.number] = {};
|
|
|
|
if (state.accepting) {
|
|
_this._acceptingStates.add(state);
|
|
}
|
|
|
|
var transitions = state.getTransitions();
|
|
|
|
var _iteratorNormalCompletion2 = true;
|
|
var _didIteratorError2 = false;
|
|
var _iteratorError2 = undefined;
|
|
|
|
try {
|
|
for (var _iterator2 = transitions[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
|
var _ref = _step2.value;
|
|
|
|
var _ref2 = _slicedToArray$1(_ref, 2);
|
|
|
|
var symbol = _ref2[0];
|
|
var symbolTransitions = _ref2[1];
|
|
|
|
var combinedState = [];
|
|
symbols.add(symbol);
|
|
var _iteratorNormalCompletion3 = true;
|
|
var _didIteratorError3 = false;
|
|
var _iteratorError3 = undefined;
|
|
|
|
try {
|
|
for (var _iterator3 = symbolTransitions[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
|
|
var nextState = _step3.value;
|
|
|
|
visitState(nextState);
|
|
combinedState.push(nextState.number);
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError3 = true;
|
|
_iteratorError3 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion3 && _iterator3.return) {
|
|
_iterator3.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError3) {
|
|
throw _iteratorError3;
|
|
}
|
|
}
|
|
}
|
|
|
|
_this._transitionTable[state.number][symbol] = combinedState;
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError2 = true;
|
|
_iteratorError2 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion2 && _iterator2.return) {
|
|
_iterator2.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError2) {
|
|
throw _iteratorError2;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
// Traverse the graph starting from the `in`.
|
|
visitState(this.in);
|
|
|
|
// Append epsilon-closure column.
|
|
visited.forEach(function (state) {
|
|
delete _this._transitionTable[state.number][EPSILON$2];
|
|
_this._transitionTable[state.number][EPSILON_CLOSURE$1] = [].concat(_toConsumableArray$3(state.getEpsilonClosure())).map(function (s) {
|
|
return s.number;
|
|
});
|
|
});
|
|
}
|
|
|
|
return this._transitionTable;
|
|
}
|
|
}]);
|
|
|
|
return NFA;
|
|
}();
|
|
|
|
var nfa = NFA;
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
// DFA minization.
|
|
|
|
/**
|
|
* Map from state to current set it goes.
|
|
*/
|
|
|
|
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
|
|
|
|
function _toArray(arr) { return Array.isArray(arr) ? arr : Array.from(arr); }
|
|
|
|
function _toConsumableArray$2(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
|
|
|
|
var currentTransitionMap = null;
|
|
|
|
/**
|
|
* Takes a DFA, and returns a minimized version of it
|
|
* compressing some states to groups (using standard, 0-, 1-,
|
|
* 2-, ... N-equivalence algorithm).
|
|
*/
|
|
function minimize(dfa) {
|
|
var table = dfa.getTransitionTable();
|
|
var allStates = Object.keys(table);
|
|
var alphabet = dfa.getAlphabet();
|
|
var accepting = dfa.getAcceptingStateNumbers();
|
|
|
|
currentTransitionMap = {};
|
|
|
|
var nonAccepting = new Set();
|
|
|
|
allStates.forEach(function (state) {
|
|
state = Number(state);
|
|
var isAccepting = accepting.has(state);
|
|
|
|
if (isAccepting) {
|
|
currentTransitionMap[state] = accepting;
|
|
} else {
|
|
nonAccepting.add(state);
|
|
currentTransitionMap[state] = nonAccepting;
|
|
}
|
|
});
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Step 1: build equivalent sets.
|
|
|
|
// All [1..N] equivalent sets.
|
|
var all = [
|
|
// 0-equivalent sets.
|
|
[nonAccepting, accepting].filter(function (set) {
|
|
return set.size > 0;
|
|
})];
|
|
|
|
var current = void 0;
|
|
var previous = void 0;
|
|
|
|
// Top of the stack is the current list of sets to analyze.
|
|
current = all[all.length - 1];
|
|
|
|
// Previous set (to check whether we need to stop).
|
|
previous = all[all.length - 2];
|
|
|
|
// Until we'll not have the same N and N-1 equivalent rows.
|
|
|
|
var _loop = function _loop() {
|
|
var newTransitionMap = {};
|
|
|
|
var _iteratorNormalCompletion3 = true;
|
|
var _didIteratorError3 = false;
|
|
var _iteratorError3 = undefined;
|
|
|
|
try {
|
|
for (var _iterator3 = current[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
|
|
var _set = _step3.value;
|
|
|
|
// Handled states for this set.
|
|
var handledStates = {};
|
|
|
|
var _set2 = _toArray(_set),
|
|
first = _set2[0],
|
|
rest = _set2.slice(1);
|
|
|
|
handledStates[first] = new Set([first]);
|
|
|
|
// Have to compare each from the rest states with
|
|
// the already handled states, and see if they are equivalent.
|
|
var _iteratorNormalCompletion4 = true;
|
|
var _didIteratorError4 = false;
|
|
var _iteratorError4 = undefined;
|
|
|
|
try {
|
|
restSets: for (var _iterator4 = rest[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
|
|
var state = _step4.value;
|
|
var _iteratorNormalCompletion5 = true;
|
|
var _didIteratorError5 = false;
|
|
var _iteratorError5 = undefined;
|
|
|
|
try {
|
|
for (var _iterator5 = Object.keys(handledStates)[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {
|
|
var handledState = _step5.value;
|
|
|
|
// This and some previously handled state are equivalent --
|
|
// just append this state to the same set.
|
|
if (areEquivalent(state, handledState, table, alphabet)) {
|
|
handledStates[handledState].add(state);
|
|
handledStates[state] = handledStates[handledState];
|
|
continue restSets;
|
|
}
|
|
}
|
|
// Else, this state is not equivalent to any of the
|
|
// handled states -- allocate a new set for it.
|
|
} catch (err) {
|
|
_didIteratorError5 = true;
|
|
_iteratorError5 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion5 && _iterator5.return) {
|
|
_iterator5.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError5) {
|
|
throw _iteratorError5;
|
|
}
|
|
}
|
|
}
|
|
|
|
handledStates[state] = new Set([state]);
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError4 = true;
|
|
_iteratorError4 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion4 && _iterator4.return) {
|
|
_iterator4.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError4) {
|
|
throw _iteratorError4;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Add these handled states to all states map.
|
|
|
|
|
|
Object.assign(newTransitionMap, handledStates);
|
|
}
|
|
|
|
// Update current transition map for the handled row.
|
|
} catch (err) {
|
|
_didIteratorError3 = true;
|
|
_iteratorError3 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion3 && _iterator3.return) {
|
|
_iterator3.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError3) {
|
|
throw _iteratorError3;
|
|
}
|
|
}
|
|
}
|
|
|
|
currentTransitionMap = newTransitionMap;
|
|
|
|
var newSets = new Set(Object.keys(newTransitionMap).map(function (state) {
|
|
return newTransitionMap[state];
|
|
}));
|
|
|
|
all.push([].concat(_toConsumableArray$2(newSets)));
|
|
|
|
// Top of the stack is the current.
|
|
current = all[all.length - 1];
|
|
|
|
// Previous set.
|
|
previous = all[all.length - 2];
|
|
};
|
|
|
|
while (!sameRow(current, previous)) {
|
|
_loop();
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Step 2: build minimized table from the equivalent sets.
|
|
|
|
// Remap state numbers from sets to index-based.
|
|
var remaped = new Map();
|
|
var idx = 1;
|
|
current.forEach(function (set) {
|
|
return remaped.set(set, idx++);
|
|
});
|
|
|
|
// Build the minimized table from the calculated equivalent sets.
|
|
var minimizedTable = {};
|
|
|
|
var minimizedAcceptingStates = new Set();
|
|
|
|
var updateAcceptingStates = function updateAcceptingStates(set, idx) {
|
|
var _iteratorNormalCompletion = true;
|
|
var _didIteratorError = false;
|
|
var _iteratorError = undefined;
|
|
|
|
try {
|
|
for (var _iterator = set[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
var state = _step.value;
|
|
|
|
if (accepting.has(state)) {
|
|
minimizedAcceptingStates.add(idx);
|
|
}
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError = true;
|
|
_iteratorError = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion && _iterator.return) {
|
|
_iterator.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError) {
|
|
throw _iteratorError;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
var _iteratorNormalCompletion2 = true;
|
|
var _didIteratorError2 = false;
|
|
var _iteratorError2 = undefined;
|
|
|
|
try {
|
|
for (var _iterator2 = remaped.entries()[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
|
var _ref = _step2.value;
|
|
|
|
var _ref2 = _slicedToArray(_ref, 2);
|
|
|
|
var set = _ref2[0];
|
|
var _idx = _ref2[1];
|
|
|
|
minimizedTable[_idx] = {};
|
|
var _iteratorNormalCompletion6 = true;
|
|
var _didIteratorError6 = false;
|
|
var _iteratorError6 = undefined;
|
|
|
|
try {
|
|
for (var _iterator6 = alphabet[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {
|
|
var symbol = _step6.value;
|
|
|
|
updateAcceptingStates(set, _idx);
|
|
|
|
// Determine original transition for this symbol from the set.
|
|
var originalTransition = void 0;
|
|
var _iteratorNormalCompletion7 = true;
|
|
var _didIteratorError7 = false;
|
|
var _iteratorError7 = undefined;
|
|
|
|
try {
|
|
for (var _iterator7 = set[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {
|
|
var originalState = _step7.value;
|
|
|
|
originalTransition = table[originalState][symbol];
|
|
if (originalTransition) {
|
|
break;
|
|
}
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError7 = true;
|
|
_iteratorError7 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion7 && _iterator7.return) {
|
|
_iterator7.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError7) {
|
|
throw _iteratorError7;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (originalTransition) {
|
|
minimizedTable[_idx][symbol] = remaped.get(currentTransitionMap[originalTransition]);
|
|
}
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError6 = true;
|
|
_iteratorError6 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion6 && _iterator6.return) {
|
|
_iterator6.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError6) {
|
|
throw _iteratorError6;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Update the table, and accepting states on the original DFA.
|
|
} catch (err) {
|
|
_didIteratorError2 = true;
|
|
_iteratorError2 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion2 && _iterator2.return) {
|
|
_iterator2.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError2) {
|
|
throw _iteratorError2;
|
|
}
|
|
}
|
|
}
|
|
|
|
dfa.setTransitionTable(minimizedTable);
|
|
dfa.setAcceptingStateNumbers(minimizedAcceptingStates);
|
|
|
|
return dfa;
|
|
}
|
|
|
|
function sameRow(r1, r2) {
|
|
if (!r2) {
|
|
return false;
|
|
}
|
|
|
|
if (r1.length !== r2.length) {
|
|
return false;
|
|
}
|
|
|
|
for (var i = 0; i < r1.length; i++) {
|
|
var s1 = r1[i];
|
|
var s2 = r2[i];
|
|
|
|
if (s1.size !== s2.size) {
|
|
return false;
|
|
}
|
|
|
|
if ([].concat(_toConsumableArray$2(s1)).sort().join(',') !== [].concat(_toConsumableArray$2(s2)).sort().join(',')) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Checks whether two states are N-equivalent, i.e. whether they go
|
|
* to the same set on a symbol.
|
|
*/
|
|
function areEquivalent(s1, s2, table, alphabet) {
|
|
var _iteratorNormalCompletion8 = true;
|
|
var _didIteratorError8 = false;
|
|
var _iteratorError8 = undefined;
|
|
|
|
try {
|
|
for (var _iterator8 = alphabet[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) {
|
|
var symbol = _step8.value;
|
|
|
|
if (!goToSameSet(s1, s2, table, symbol)) {
|
|
return false;
|
|
}
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError8 = true;
|
|
_iteratorError8 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion8 && _iterator8.return) {
|
|
_iterator8.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError8) {
|
|
throw _iteratorError8;
|
|
}
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Checks whether states go to the same set.
|
|
*/
|
|
function goToSameSet(s1, s2, table, symbol) {
|
|
if (!currentTransitionMap[s1] || !currentTransitionMap[s2]) {
|
|
return false;
|
|
}
|
|
|
|
var originalTransitionS1 = table[s1][symbol];
|
|
var originalTransitionS2 = table[s2][symbol];
|
|
|
|
// If no actual transition on this symbol, treat it as positive.
|
|
if (!originalTransitionS1 && !originalTransitionS2) {
|
|
return true;
|
|
}
|
|
|
|
// Otherwise, check if they are in the same sets.
|
|
return currentTransitionMap[s1].has(originalTransitionS1) && currentTransitionMap[s2].has(originalTransitionS2);
|
|
}
|
|
|
|
var dfaMinimizer = {
|
|
minimize: minimize
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
var _createClass$3 = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
|
|
|
function _toConsumableArray$1(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
|
|
|
|
function _classCallCheck$3(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
|
|
|
|
var EPSILON_CLOSURE = specialSymbols.EPSILON_CLOSURE;
|
|
|
|
/**
|
|
* DFA is build by converting from NFA (subset construction).
|
|
*/
|
|
|
|
|
|
var DFA = function () {
|
|
function DFA(nfa) {
|
|
_classCallCheck$3(this, DFA);
|
|
|
|
this._nfa = nfa;
|
|
}
|
|
|
|
/**
|
|
* Minimizes DFA.
|
|
*/
|
|
|
|
|
|
_createClass$3(DFA, [{
|
|
key: 'minimize',
|
|
value: function minimize() {
|
|
this.getTransitionTable();
|
|
|
|
this._originalAcceptingStateNumbers = this._acceptingStateNumbers;
|
|
this._originalTransitionTable = this._transitionTable;
|
|
|
|
dfaMinimizer.minimize(this);
|
|
}
|
|
|
|
/**
|
|
* Returns alphabet for this DFA.
|
|
*/
|
|
|
|
}, {
|
|
key: 'getAlphabet',
|
|
value: function getAlphabet() {
|
|
return this._nfa.getAlphabet();
|
|
}
|
|
|
|
/**
|
|
* Returns accepting states.
|
|
*/
|
|
|
|
}, {
|
|
key: 'getAcceptingStateNumbers',
|
|
value: function getAcceptingStateNumbers() {
|
|
if (!this._acceptingStateNumbers) {
|
|
// Accepting states are determined during table construction.
|
|
this.getTransitionTable();
|
|
}
|
|
|
|
return this._acceptingStateNumbers;
|
|
}
|
|
|
|
/**
|
|
* Returns original accepting states.
|
|
*/
|
|
|
|
}, {
|
|
key: 'getOriginaAcceptingStateNumbers',
|
|
value: function getOriginaAcceptingStateNumbers() {
|
|
if (!this._originalAcceptingStateNumbers) {
|
|
// Accepting states are determined during table construction.
|
|
this.getTransitionTable();
|
|
}
|
|
|
|
return this._originalAcceptingStateNumbers;
|
|
}
|
|
|
|
/**
|
|
* Sets transition table.
|
|
*/
|
|
|
|
}, {
|
|
key: 'setTransitionTable',
|
|
value: function setTransitionTable(table) {
|
|
this._transitionTable = table;
|
|
}
|
|
|
|
/**
|
|
* Sets accepting states.
|
|
*/
|
|
|
|
}, {
|
|
key: 'setAcceptingStateNumbers',
|
|
value: function setAcceptingStateNumbers(stateNumbers) {
|
|
this._acceptingStateNumbers = stateNumbers;
|
|
}
|
|
|
|
/**
|
|
* DFA transition table is built from NFA table.
|
|
*/
|
|
|
|
}, {
|
|
key: 'getTransitionTable',
|
|
value: function getTransitionTable() {
|
|
var _this = this;
|
|
|
|
if (this._transitionTable) {
|
|
return this._transitionTable;
|
|
}
|
|
|
|
// Calculate from NFA transition table.
|
|
var nfaTable = this._nfa.getTransitionTable();
|
|
var nfaStates = Object.keys(nfaTable);
|
|
|
|
this._acceptingStateNumbers = new Set();
|
|
|
|
// Start state of DFA is E(S[nfa])
|
|
var startState = nfaTable[nfaStates[0]][EPSILON_CLOSURE];
|
|
|
|
// Init the worklist (states which should be in the DFA).
|
|
var worklist = [startState];
|
|
|
|
var alphabet = this.getAlphabet();
|
|
var nfaAcceptingStates = this._nfa.getAcceptingStateNumbers();
|
|
|
|
var dfaTable = {};
|
|
|
|
// Determine whether the combined DFA state is accepting.
|
|
var updateAcceptingStates = function updateAcceptingStates(states) {
|
|
var _iteratorNormalCompletion = true;
|
|
var _didIteratorError = false;
|
|
var _iteratorError = undefined;
|
|
|
|
try {
|
|
for (var _iterator = nfaAcceptingStates[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
var nfaAcceptingState = _step.value;
|
|
|
|
// If any of the states from NFA is accepting, DFA's
|
|
// state is accepting as well.
|
|
if (states.indexOf(nfaAcceptingState) !== -1) {
|
|
_this._acceptingStateNumbers.add(states.join(','));
|
|
break;
|
|
}
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError = true;
|
|
_iteratorError = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion && _iterator.return) {
|
|
_iterator.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError) {
|
|
throw _iteratorError;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
while (worklist.length > 0) {
|
|
var states = worklist.shift();
|
|
var dfaStateLabel = states.join(',');
|
|
dfaTable[dfaStateLabel] = {};
|
|
|
|
var _iteratorNormalCompletion2 = true;
|
|
var _didIteratorError2 = false;
|
|
var _iteratorError2 = undefined;
|
|
|
|
try {
|
|
for (var _iterator2 = alphabet[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
|
var symbol = _step2.value;
|
|
|
|
var onSymbol = [];
|
|
|
|
// Determine whether the combined state is accepting.
|
|
updateAcceptingStates(states);
|
|
|
|
var _iteratorNormalCompletion3 = true;
|
|
var _didIteratorError3 = false;
|
|
var _iteratorError3 = undefined;
|
|
|
|
try {
|
|
for (var _iterator3 = states[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
|
|
var state = _step3.value;
|
|
|
|
var nfaStatesOnSymbol = nfaTable[state][symbol];
|
|
if (!nfaStatesOnSymbol) {
|
|
continue;
|
|
}
|
|
|
|
var _iteratorNormalCompletion4 = true;
|
|
var _didIteratorError4 = false;
|
|
var _iteratorError4 = undefined;
|
|
|
|
try {
|
|
for (var _iterator4 = nfaStatesOnSymbol[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
|
|
var nfaStateOnSymbol = _step4.value;
|
|
|
|
if (!nfaTable[nfaStateOnSymbol]) {
|
|
continue;
|
|
}
|
|
onSymbol.push.apply(onSymbol, _toConsumableArray$1(nfaTable[nfaStateOnSymbol][EPSILON_CLOSURE]));
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError4 = true;
|
|
_iteratorError4 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion4 && _iterator4.return) {
|
|
_iterator4.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError4) {
|
|
throw _iteratorError4;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError3 = true;
|
|
_iteratorError3 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion3 && _iterator3.return) {
|
|
_iterator3.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError3) {
|
|
throw _iteratorError3;
|
|
}
|
|
}
|
|
}
|
|
|
|
var dfaStatesOnSymbolSet = new Set(onSymbol);
|
|
var dfaStatesOnSymbol = [].concat(_toConsumableArray$1(dfaStatesOnSymbolSet));
|
|
|
|
if (dfaStatesOnSymbol.length > 0) {
|
|
var dfaOnSymbolStr = dfaStatesOnSymbol.join(',');
|
|
|
|
dfaTable[dfaStateLabel][symbol] = dfaOnSymbolStr;
|
|
|
|
if (!dfaTable.hasOwnProperty(dfaOnSymbolStr)) {
|
|
worklist.unshift(dfaStatesOnSymbol);
|
|
}
|
|
}
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError2 = true;
|
|
_iteratorError2 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion2 && _iterator2.return) {
|
|
_iterator2.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError2) {
|
|
throw _iteratorError2;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return this._transitionTable = this._remapStateNumbers(dfaTable);
|
|
}
|
|
|
|
/**
|
|
* Remaps state numbers in the resulting table:
|
|
* combined states '1,2,3' -> 1, '3,4' -> 2, etc.
|
|
*/
|
|
|
|
}, {
|
|
key: '_remapStateNumbers',
|
|
value: function _remapStateNumbers(calculatedDFATable) {
|
|
var newStatesMap = {};
|
|
|
|
this._originalTransitionTable = calculatedDFATable;
|
|
var transitionTable = {};
|
|
|
|
Object.keys(calculatedDFATable).forEach(function (originalNumber, newNumber) {
|
|
newStatesMap[originalNumber] = newNumber + 1;
|
|
});
|
|
|
|
for (var originalNumber in calculatedDFATable) {
|
|
var originalRow = calculatedDFATable[originalNumber];
|
|
var row = {};
|
|
|
|
for (var symbol in originalRow) {
|
|
row[symbol] = newStatesMap[originalRow[symbol]];
|
|
}
|
|
|
|
transitionTable[newStatesMap[originalNumber]] = row;
|
|
}
|
|
|
|
// Remap accepting states.
|
|
this._originalAcceptingStateNumbers = this._acceptingStateNumbers;
|
|
this._acceptingStateNumbers = new Set();
|
|
|
|
var _iteratorNormalCompletion5 = true;
|
|
var _didIteratorError5 = false;
|
|
var _iteratorError5 = undefined;
|
|
|
|
try {
|
|
for (var _iterator5 = this._originalAcceptingStateNumbers[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {
|
|
var _originalNumber = _step5.value;
|
|
|
|
this._acceptingStateNumbers.add(newStatesMap[_originalNumber]);
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError5 = true;
|
|
_iteratorError5 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion5 && _iterator5.return) {
|
|
_iterator5.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError5) {
|
|
throw _iteratorError5;
|
|
}
|
|
}
|
|
}
|
|
|
|
return transitionTable;
|
|
}
|
|
|
|
/**
|
|
* Returns original DFA table, where state numbers
|
|
* are combined numbers from NFA.
|
|
*/
|
|
|
|
}, {
|
|
key: 'getOriginalTransitionTable',
|
|
value: function getOriginalTransitionTable() {
|
|
if (!this._originalTransitionTable) {
|
|
// Original table is determined during table construction.
|
|
this.getTransitionTable();
|
|
}
|
|
return this._originalTransitionTable;
|
|
}
|
|
|
|
/**
|
|
* Checks whether this DFA accepts a string.
|
|
*/
|
|
|
|
}, {
|
|
key: 'matches',
|
|
value: function matches(string) {
|
|
var state = 1;
|
|
var i = 0;
|
|
var table = this.getTransitionTable();
|
|
|
|
while (string[i]) {
|
|
state = table[state][string[i++]];
|
|
if (!state) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if (!this.getAcceptingStateNumbers().has(state)) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}]);
|
|
|
|
return DFA;
|
|
}();
|
|
|
|
var dfa = DFA;
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* A generic FA State class (base for NFA and DFA).
|
|
*
|
|
* Maintains the transition map, and the flag whether
|
|
* the state is accepting.
|
|
*/
|
|
|
|
var _createClass$2 = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
|
|
|
function _classCallCheck$2(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
var State = function () {
|
|
function State() {
|
|
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
_ref$accepting = _ref.accepting,
|
|
accepting = _ref$accepting === undefined ? false : _ref$accepting;
|
|
|
|
_classCallCheck$2(this, State);
|
|
|
|
/**
|
|
* Outgoing transitions to other states.
|
|
*/
|
|
this._transitions = new Map();
|
|
|
|
/**
|
|
* Whether the state is accepting.
|
|
*/
|
|
this.accepting = accepting;
|
|
}
|
|
|
|
/**
|
|
* Returns transitions for this state.
|
|
*/
|
|
|
|
|
|
_createClass$2(State, [{
|
|
key: 'getTransitions',
|
|
value: function getTransitions() {
|
|
return this._transitions;
|
|
}
|
|
|
|
/**
|
|
* Creates a transition on symbol.
|
|
*/
|
|
|
|
}, {
|
|
key: 'addTransition',
|
|
value: function addTransition(symbol, toState) {
|
|
this.getTransitionsOnSymbol(symbol).add(toState);
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Returns transitions set on symbol.
|
|
*/
|
|
|
|
}, {
|
|
key: 'getTransitionsOnSymbol',
|
|
value: function getTransitionsOnSymbol(symbol) {
|
|
var transitions = this._transitions.get(symbol);
|
|
|
|
if (!transitions) {
|
|
transitions = new Set();
|
|
this._transitions.set(symbol, transitions);
|
|
}
|
|
|
|
return transitions;
|
|
}
|
|
}]);
|
|
|
|
return State;
|
|
}();
|
|
|
|
var state = State;
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
var _createClass$1 = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
|
|
|
function _classCallCheck$1(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
|
|
|
|
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
|
|
|
|
|
|
|
|
var EPSILON$1 = specialSymbols.EPSILON;
|
|
|
|
/**
|
|
* NFA state.
|
|
*
|
|
* Allows nondeterministic transitions to several states on the
|
|
* same symbol, and also epsilon-transitions.
|
|
*/
|
|
|
|
|
|
var NFAState = function (_State) {
|
|
_inherits(NFAState, _State);
|
|
|
|
function NFAState() {
|
|
_classCallCheck$1(this, NFAState);
|
|
|
|
return _possibleConstructorReturn(this, (NFAState.__proto__ || Object.getPrototypeOf(NFAState)).apply(this, arguments));
|
|
}
|
|
|
|
_createClass$1(NFAState, [{
|
|
key: 'matches',
|
|
|
|
|
|
/**
|
|
* Whether this state matches a string.
|
|
*
|
|
* We maintain set of visited epsilon-states to avoid infinite loops
|
|
* when an epsilon-transition goes eventually to itself.
|
|
*
|
|
* NOTE: this function is rather "educational", since we use DFA for strings
|
|
* matching. DFA is built on top of NFA, and uses fast transition table.
|
|
*/
|
|
value: function matches(string) {
|
|
var visited = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Set();
|
|
|
|
// An epsilon-state has been visited, stop to avoid infinite loop.
|
|
if (visited.has(this)) {
|
|
return false;
|
|
}
|
|
|
|
visited.add(this);
|
|
|
|
// No symbols left..
|
|
if (string.length === 0) {
|
|
// .. and we're in the accepting state.
|
|
if (this.accepting) {
|
|
return true;
|
|
}
|
|
|
|
// Check if we can reach any accepting state from
|
|
// on the epsilon transitions.
|
|
var _iteratorNormalCompletion = true;
|
|
var _didIteratorError = false;
|
|
var _iteratorError = undefined;
|
|
|
|
try {
|
|
for (var _iterator = this.getTransitionsOnSymbol(EPSILON$1)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
var nextState = _step.value;
|
|
|
|
if (nextState.matches('', visited)) {
|
|
return true;
|
|
}
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError = true;
|
|
_iteratorError = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion && _iterator.return) {
|
|
_iterator.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError) {
|
|
throw _iteratorError;
|
|
}
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
// Else, we get some symbols.
|
|
var symbol = string[0];
|
|
var rest = string.slice(1);
|
|
|
|
var symbolTransitions = this.getTransitionsOnSymbol(symbol);
|
|
var _iteratorNormalCompletion2 = true;
|
|
var _didIteratorError2 = false;
|
|
var _iteratorError2 = undefined;
|
|
|
|
try {
|
|
for (var _iterator2 = symbolTransitions[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
|
var _nextState = _step2.value;
|
|
|
|
if (_nextState.matches(rest)) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
// If we couldn't match on symbol, check still epsilon-transitions
|
|
// without consuming the symbol (i.e. continue from `string`, not `rest`).
|
|
} catch (err) {
|
|
_didIteratorError2 = true;
|
|
_iteratorError2 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion2 && _iterator2.return) {
|
|
_iterator2.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError2) {
|
|
throw _iteratorError2;
|
|
}
|
|
}
|
|
}
|
|
|
|
var _iteratorNormalCompletion3 = true;
|
|
var _didIteratorError3 = false;
|
|
var _iteratorError3 = undefined;
|
|
|
|
try {
|
|
for (var _iterator3 = this.getTransitionsOnSymbol(EPSILON$1)[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
|
|
var _nextState2 = _step3.value;
|
|
|
|
if (_nextState2.matches(string, visited)) {
|
|
return true;
|
|
}
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError3 = true;
|
|
_iteratorError3 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion3 && _iterator3.return) {
|
|
_iterator3.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError3) {
|
|
throw _iteratorError3;
|
|
}
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Returns an ε-closure for this state:
|
|
* self + all states following ε-transitions.
|
|
*/
|
|
|
|
}, {
|
|
key: 'getEpsilonClosure',
|
|
value: function getEpsilonClosure() {
|
|
var _this2 = this;
|
|
|
|
if (!this._epsilonClosure) {
|
|
(function () {
|
|
var epsilonTransitions = _this2.getTransitionsOnSymbol(EPSILON$1);
|
|
var closure = _this2._epsilonClosure = new Set();
|
|
closure.add(_this2);
|
|
var _iteratorNormalCompletion4 = true;
|
|
var _didIteratorError4 = false;
|
|
var _iteratorError4 = undefined;
|
|
|
|
try {
|
|
for (var _iterator4 = epsilonTransitions[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
|
|
var nextState = _step4.value;
|
|
|
|
if (!closure.has(nextState)) {
|
|
closure.add(nextState);
|
|
var nextClosure = nextState.getEpsilonClosure();
|
|
nextClosure.forEach(function (state) {
|
|
return closure.add(state);
|
|
});
|
|
}
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError4 = true;
|
|
_iteratorError4 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion4 && _iterator4.return) {
|
|
_iterator4.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError4) {
|
|
throw _iteratorError4;
|
|
}
|
|
}
|
|
}
|
|
})();
|
|
}
|
|
|
|
return this._epsilonClosure;
|
|
}
|
|
}]);
|
|
|
|
return NFAState;
|
|
}(state);
|
|
|
|
var nfaState = NFAState;
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
|
|
|
|
|
|
var EPSILON = specialSymbols.EPSILON;
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// Char NFA fragment: `c`
|
|
|
|
/**
|
|
* Char factory.
|
|
*
|
|
* Creates an NFA fragment for a single char.
|
|
*
|
|
* [in] --c--> [out]
|
|
*/
|
|
|
|
|
|
function char$2(c) {
|
|
var inState = new nfaState();
|
|
var outState = new nfaState({
|
|
accepting: true
|
|
});
|
|
|
|
return new nfa(inState.addTransition(c, outState), outState);
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// Epsilon NFA fragment
|
|
|
|
/**
|
|
* Epsilon factory.
|
|
*
|
|
* Creates an NFA fragment for ε (recognizes an empty string).
|
|
*
|
|
* [in] --ε--> [out]
|
|
*/
|
|
function e() {
|
|
return char$2(EPSILON);
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// Alteration NFA fragment: `abc`
|
|
|
|
/**
|
|
* Creates a connection between two NFA fragments on epsilon transition.
|
|
*
|
|
* [in-a] --a--> [out-a] --ε--> [in-b] --b--> [out-b]
|
|
*/
|
|
function altPair(first, second) {
|
|
first.out.accepting = false;
|
|
second.out.accepting = true;
|
|
|
|
first.out.addTransition(EPSILON, second.in);
|
|
|
|
return new nfa(first.in, second.out);
|
|
}
|
|
|
|
/**
|
|
* Alteration factory.
|
|
*
|
|
* Creates a alteration NFA for (at least) two NFA-fragments.
|
|
*/
|
|
function alt$1(first) {
|
|
for (var _len = arguments.length, fragments = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
fragments[_key - 1] = arguments[_key];
|
|
}
|
|
|
|
var _iteratorNormalCompletion = true;
|
|
var _didIteratorError = false;
|
|
var _iteratorError = undefined;
|
|
|
|
try {
|
|
for (var _iterator = fragments[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
var fragment = _step.value;
|
|
|
|
first = altPair(first, fragment);
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError = true;
|
|
_iteratorError = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion && _iterator.return) {
|
|
_iterator.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError) {
|
|
throw _iteratorError;
|
|
}
|
|
}
|
|
}
|
|
|
|
return first;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// Disjunction NFA fragment: `a|b`
|
|
|
|
/**
|
|
* Creates a disjunction choice between two fragments.
|
|
*/
|
|
function orPair(first, second) {
|
|
var inState = new nfaState();
|
|
var outState = new nfaState();
|
|
|
|
inState.addTransition(EPSILON, first.in);
|
|
inState.addTransition(EPSILON, second.in);
|
|
|
|
outState.accepting = true;
|
|
first.out.accepting = false;
|
|
second.out.accepting = false;
|
|
|
|
first.out.addTransition(EPSILON, outState);
|
|
second.out.addTransition(EPSILON, outState);
|
|
|
|
return new nfa(inState, outState);
|
|
}
|
|
|
|
/**
|
|
* Disjunction factory.
|
|
*
|
|
* Creates a disjunction NFA for (at least) two NFA-fragments.
|
|
*/
|
|
function or$1(first) {
|
|
for (var _len2 = arguments.length, fragments = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
|
|
fragments[_key2 - 1] = arguments[_key2];
|
|
}
|
|
|
|
var _iteratorNormalCompletion2 = true;
|
|
var _didIteratorError2 = false;
|
|
var _iteratorError2 = undefined;
|
|
|
|
try {
|
|
for (var _iterator2 = fragments[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
|
var fragment = _step2.value;
|
|
|
|
first = orPair(first, fragment);
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError2 = true;
|
|
_iteratorError2 = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion2 && _iterator2.return) {
|
|
_iterator2.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError2) {
|
|
throw _iteratorError2;
|
|
}
|
|
}
|
|
}
|
|
|
|
return first;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// Kleene-closure
|
|
|
|
/**
|
|
* Kleene star/closure.
|
|
*
|
|
* a*
|
|
*/
|
|
function repExplicit(fragment) {
|
|
var inState = new nfaState();
|
|
var outState = new nfaState({
|
|
accepting: true
|
|
});
|
|
|
|
// 0 or more.
|
|
inState.addTransition(EPSILON, fragment.in);
|
|
inState.addTransition(EPSILON, outState);
|
|
|
|
fragment.out.accepting = false;
|
|
fragment.out.addTransition(EPSILON, outState);
|
|
outState.addTransition(EPSILON, fragment.in);
|
|
|
|
return new nfa(inState, outState);
|
|
}
|
|
|
|
/**
|
|
* Optimized Kleene-star: just adds ε-transitions from
|
|
* input to the output, and back.
|
|
*/
|
|
function rep$1(fragment) {
|
|
fragment.in.addTransition(EPSILON, fragment.out);
|
|
fragment.out.addTransition(EPSILON, fragment.in);
|
|
return fragment;
|
|
}
|
|
|
|
/**
|
|
* Optimized Plus: just adds ε-transitions from
|
|
* the output to the input.
|
|
*/
|
|
function plusRep$1(fragment) {
|
|
fragment.out.addTransition(EPSILON, fragment.in);
|
|
return fragment;
|
|
}
|
|
|
|
/**
|
|
* Optimized ? repetition: just adds ε-transitions from
|
|
* the input to the output.
|
|
*/
|
|
function questionRep$1(fragment) {
|
|
fragment.in.addTransition(EPSILON, fragment.out);
|
|
return fragment;
|
|
}
|
|
|
|
var builders = {
|
|
alt: alt$1,
|
|
char: char$2,
|
|
e: e,
|
|
or: or$1,
|
|
rep: rep$1,
|
|
repExplicit: repExplicit,
|
|
plusRep: plusRep$1,
|
|
questionRep: questionRep$1
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
|
|
|
|
|
|
|
|
var alt = builders.alt,
|
|
char$1 = builders.char,
|
|
or = builders.or,
|
|
rep = builders.rep,
|
|
plusRep = builders.plusRep,
|
|
questionRep = builders.questionRep;
|
|
|
|
/**
|
|
* Helper `gen` function calls node type handler.
|
|
*/
|
|
|
|
|
|
function gen(node) {
|
|
if (node && !generator[node.type]) {
|
|
throw new Error(node.type + ' is not supported in NFA/DFA interpreter.');
|
|
}
|
|
|
|
return node ? generator[node.type](node) : '';
|
|
}
|
|
|
|
/**
|
|
* AST handler.
|
|
*/
|
|
var generator = {
|
|
RegExp: function RegExp(node) {
|
|
if (node.flags !== '') {
|
|
throw new Error('NFA/DFA: Flags are not supported yet.');
|
|
}
|
|
|
|
return gen(node.body);
|
|
},
|
|
Alternative: function Alternative(node) {
|
|
var fragments = (node.expressions || []).map(gen);
|
|
return alt.apply(undefined, _toConsumableArray(fragments));
|
|
},
|
|
Disjunction: function Disjunction(node) {
|
|
return or(gen(node.left), gen(node.right));
|
|
},
|
|
Repetition: function Repetition(node) {
|
|
switch (node.quantifier.kind) {
|
|
case '*':
|
|
return rep(gen(node.expression));
|
|
case '+':
|
|
return plusRep(gen(node.expression));
|
|
case '?':
|
|
return questionRep(gen(node.expression));
|
|
default:
|
|
throw new Error('Unknown repeatition: ' + node.quantifier.kind + '.');
|
|
}
|
|
},
|
|
Char: function Char(node) {
|
|
if (node.kind !== 'simple') {
|
|
throw new Error('NFA/DFA: Only simple chars are supported yet.');
|
|
}
|
|
|
|
return char$1(node.value);
|
|
},
|
|
Group: function Group(node) {
|
|
return gen(node.expression);
|
|
}
|
|
};
|
|
|
|
var nfaFromRegexp = {
|
|
/**
|
|
* Builds an NFA from the passed regexp.
|
|
*/
|
|
build: function build(regexp) {
|
|
var ast = regexp;
|
|
|
|
if (regexp instanceof RegExp) {
|
|
regexp = '' + regexp;
|
|
}
|
|
|
|
if (typeof regexp === 'string') {
|
|
ast = parser$1.parse(regexp, {
|
|
captureLocations: true
|
|
});
|
|
}
|
|
|
|
return gen(ast);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var finiteAutomaton = {
|
|
|
|
/**
|
|
* Export NFA and DFA classes.
|
|
*/
|
|
NFA: nfa,
|
|
DFA: dfa,
|
|
|
|
/**
|
|
* Expose builders.
|
|
*/
|
|
builders: builders,
|
|
|
|
/**
|
|
* Builds an NFA for the passed regexp.
|
|
*
|
|
* @param string | AST | RegExp:
|
|
*
|
|
* a regular expression in different representations: a string,
|
|
* a RegExp object, or an AST.
|
|
*/
|
|
toNFA: function toNFA(regexp) {
|
|
return nfaFromRegexp.build(regexp);
|
|
},
|
|
|
|
|
|
/**
|
|
* Builds DFA for the passed regexp.
|
|
*
|
|
* @param string | AST | RegExp:
|
|
*
|
|
* a regular expression in different representations: a string,
|
|
* a RegExp object, or an AST.
|
|
*/
|
|
toDFA: function toDFA(regexp) {
|
|
return new dfa(this.toNFA(regexp));
|
|
},
|
|
|
|
|
|
/**
|
|
* Returns true if regexp accepts the string.
|
|
*/
|
|
test: function test(regexp, string) {
|
|
return this.toDFA(regexp).matches(string);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
/**
|
|
* The `RegExpTree` class provides runtime support for `compat-transpiler`
|
|
* module from `regexp-tree`.
|
|
*
|
|
* E.g. it tracks names of the capturing groups, in order to access the
|
|
* names on the matched result.
|
|
*
|
|
* It's a thin-wrapper on top of original regexp.
|
|
*/
|
|
|
|
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
|
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
var RegExpTree$1 = function () {
|
|
/**
|
|
* Initializes a `RegExpTree` instance.
|
|
*
|
|
* @param RegExp - a regular expression
|
|
*
|
|
* @param Object state:
|
|
*
|
|
* An extra state which may store any related to transformation
|
|
* data, for example, names of the groups.
|
|
*
|
|
* - flags - original flags
|
|
* - groups - names of the groups, and their indices
|
|
* - source - original source
|
|
*/
|
|
function RegExpTree(re, _ref) {
|
|
var flags = _ref.flags,
|
|
groups = _ref.groups,
|
|
source = _ref.source;
|
|
|
|
_classCallCheck(this, RegExpTree);
|
|
|
|
this._re = re;
|
|
this._groups = groups;
|
|
|
|
// Original props.
|
|
this.flags = flags;
|
|
this.source = source || re.source;
|
|
this.dotAll = flags.includes('s');
|
|
|
|
// Inherited directly from `re`.
|
|
this.global = re.global;
|
|
this.ignoreCase = re.ignoreCase;
|
|
this.multiline = re.multiline;
|
|
this.sticky = re.sticky;
|
|
this.unicode = re.unicode;
|
|
}
|
|
|
|
/**
|
|
* Facade wrapper for RegExp `test` method.
|
|
*/
|
|
|
|
|
|
_createClass(RegExpTree, [{
|
|
key: 'test',
|
|
value: function test(string) {
|
|
return this._re.test(string);
|
|
}
|
|
|
|
/**
|
|
* Facade wrapper for RegExp `compile` method.
|
|
*/
|
|
|
|
}, {
|
|
key: 'compile',
|
|
value: function compile(string) {
|
|
return this._re.compile(string);
|
|
}
|
|
|
|
/**
|
|
* Facade wrapper for RegExp `toString` method.
|
|
*/
|
|
|
|
}, {
|
|
key: 'toString',
|
|
value: function toString() {
|
|
if (!this._toStringResult) {
|
|
this._toStringResult = '/' + this.source + '/' + this.flags;
|
|
}
|
|
return this._toStringResult;
|
|
}
|
|
|
|
/**
|
|
* Facade wrapper for RegExp `exec` method.
|
|
*/
|
|
|
|
}, {
|
|
key: 'exec',
|
|
value: function exec(string) {
|
|
var result = this._re.exec(string);
|
|
|
|
if (!this._groups || !result) {
|
|
return result;
|
|
}
|
|
|
|
result.groups = {};
|
|
|
|
for (var group in this._groups) {
|
|
var groupNumber = this._groups[group];
|
|
result.groups[group] = result[groupNumber];
|
|
}
|
|
|
|
return result;
|
|
}
|
|
}]);
|
|
|
|
return RegExpTree;
|
|
}();
|
|
|
|
var runtime = {
|
|
RegExpTree: RegExpTree$1
|
|
};
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var RegExpTree = runtime.RegExpTree;
|
|
|
|
/**
|
|
* An API object for RegExp processing (parsing/transform/generation).
|
|
*/
|
|
|
|
|
|
var regexpTree$2 = {
|
|
/**
|
|
* Parser module exposed.
|
|
*/
|
|
parser: parser$1,
|
|
|
|
/**
|
|
* Expose finite-automaton module.
|
|
*/
|
|
fa: finiteAutomaton,
|
|
|
|
/**
|
|
* `TransformResult` exposed.
|
|
*/
|
|
TransformResult: transform.TransformResult,
|
|
|
|
/**
|
|
* Parses a regexp string, producing an AST.
|
|
*
|
|
* @param string regexp
|
|
*
|
|
* a regular expression in different formats: string, AST, RegExp.
|
|
*
|
|
* @param Object options
|
|
*
|
|
* parsing options for this parse call. Default are:
|
|
*
|
|
* - captureLocations: boolean
|
|
* - any other custom options
|
|
*
|
|
* @return Object AST
|
|
*/
|
|
parse: function parse(regexp, options) {
|
|
return parser$1.parse('' + regexp, options);
|
|
},
|
|
|
|
|
|
/**
|
|
* Traverses a RegExp AST.
|
|
*
|
|
* @param Object ast
|
|
* @param Object | Array<Object> handlers
|
|
*
|
|
* Each `handler` is an object containing handler function for needed
|
|
* node types. Example:
|
|
*
|
|
* regexpTree.traverse(ast, {
|
|
* onChar(node) {
|
|
* ...
|
|
* },
|
|
* });
|
|
*
|
|
* The value for a node type may also be an object with functions pre and post.
|
|
* This enables more context-aware analyses, e.g. measuring star height.
|
|
*/
|
|
traverse: function traverse$1(ast, handlers, options) {
|
|
return traverse.traverse(ast, handlers, options);
|
|
},
|
|
|
|
|
|
/**
|
|
* Transforms a regular expression.
|
|
*
|
|
* A regexp can be passed in different formats (string, regexp or AST),
|
|
* applying a set of transformations. It is a convenient wrapper
|
|
* on top of "parse-traverse-generate" tool chain.
|
|
*
|
|
* @param string | AST | RegExp regexp - a regular expression;
|
|
* @param Object | Array<Object> handlers - a list of handlers.
|
|
*
|
|
* @return TransformResult - a transformation result.
|
|
*/
|
|
transform: function transform$1(regexp, handlers) {
|
|
return transform.transform(regexp, handlers);
|
|
},
|
|
|
|
|
|
/**
|
|
* Generates a RegExp string from an AST.
|
|
*
|
|
* @param Object ast
|
|
*
|
|
* Invariant:
|
|
*
|
|
* regexpTree.generate(regexpTree.parse('/[a-z]+/i')); // '/[a-z]+/i'
|
|
*/
|
|
generate: function generate(ast) {
|
|
return generator_1.generate(ast);
|
|
},
|
|
|
|
|
|
/**
|
|
* Creates a RegExp object from a regexp string.
|
|
*
|
|
* @param string regexp
|
|
*/
|
|
toRegExp: function toRegExp(regexp) {
|
|
var compat = this.compatTranspile(regexp);
|
|
return new RegExp(compat.getSource(), compat.getFlags());
|
|
},
|
|
|
|
|
|
/**
|
|
* Optimizes a regular expression by replacing some
|
|
* sub-expressions with their idiomatic patterns.
|
|
*
|
|
* @param string regexp
|
|
*
|
|
* @return TransformResult object
|
|
*/
|
|
optimize: function optimize(regexp, whitelist) {
|
|
var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
|
|
blacklist = _ref.blacklist;
|
|
|
|
return optimizer.optimize(regexp, { whitelist: whitelist, blacklist: blacklist });
|
|
},
|
|
|
|
|
|
/**
|
|
* Translates a regular expression in new syntax or in new format
|
|
* into equivalent expressions in old syntax.
|
|
*
|
|
* @param string regexp
|
|
*
|
|
* @return TransformResult object
|
|
*/
|
|
compatTranspile: function compatTranspile(regexp, whitelist) {
|
|
return compatTranspiler.transform(regexp, whitelist);
|
|
},
|
|
|
|
|
|
/**
|
|
* Executes a regular expression on a string.
|
|
*
|
|
* @param RegExp|string re - a regular expression.
|
|
* @param string string - a testing string.
|
|
*/
|
|
exec: function exec(re, string) {
|
|
if (typeof re === 'string') {
|
|
var compat = this.compatTranspile(re);
|
|
var extra = compat.getExtra();
|
|
|
|
if (extra.namedCapturingGroups) {
|
|
re = new RegExpTree(compat.toRegExp(), {
|
|
flags: compat.getFlags(),
|
|
source: compat.getSource(),
|
|
groups: extra.namedCapturingGroups
|
|
});
|
|
} else {
|
|
re = compat.toRegExp();
|
|
}
|
|
}
|
|
|
|
return re.exec(string);
|
|
}
|
|
};
|
|
|
|
var regexpTree_1 = regexpTree$2;
|
|
|
|
/**
|
|
* The MIT License (MIT)
|
|
* Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
|
|
*/
|
|
|
|
var regexpTree$1 = regexpTree_1;
|
|
|
|
var analyzer = analyzer$1;
|
|
|
|
// Exports an Analyzer subclass
|
|
|
|
|
|
|
|
|
|
class HeuristicAnalyzer extends analyzer.Analyzer {
|
|
constructor(analyzerOptions) {
|
|
super(analyzerOptions);
|
|
}
|
|
|
|
isVulnerable(regExp) {
|
|
// Heuristic #1: Star height > 1
|
|
const starHeight = this._measureStarHeight(regExp);
|
|
if (starHeight > 1) {
|
|
return true;
|
|
}
|
|
|
|
// Heuristic #2: # repetitions > limit
|
|
// TODO This is a poor heuristic
|
|
const nRepetitions = this._measureRepetitions(regExp);
|
|
if (nRepetitions > this.options.heuristic_replimit) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
genAttackString(regExp) {
|
|
return null;
|
|
}
|
|
|
|
_measureStarHeight(regExp) {
|
|
let currentStarHeight = 0;
|
|
let maxObservedStarHeight = 0;
|
|
|
|
const ast = regexpTree$1.parse(regExp);
|
|
|
|
regexpTree$1.traverse(ast, {
|
|
Repetition: {
|
|
pre({ node }) {
|
|
currentStarHeight++;
|
|
if (maxObservedStarHeight < currentStarHeight) {
|
|
maxObservedStarHeight = currentStarHeight;
|
|
}
|
|
},
|
|
|
|
post({ node }) {
|
|
currentStarHeight--;
|
|
}
|
|
}
|
|
});
|
|
|
|
return maxObservedStarHeight;
|
|
}
|
|
|
|
_measureRepetitions(regExp) {
|
|
let nRepetitions = 0;
|
|
|
|
const ast = regexpTree$1.parse(regExp);
|
|
regexpTree$1.traverse(ast, {
|
|
Repetition: {
|
|
pre({ node }) {
|
|
nRepetitions++;
|
|
}
|
|
}
|
|
});
|
|
|
|
return nRepetitions;
|
|
}
|
|
}
|
|
|
|
var heuristicAnalyzer = HeuristicAnalyzer;
|
|
|
|
// Load the analyzers
|
|
|
|
|
|
var analyzerFamily = [heuristicAnalyzer];
|
|
|
|
const DEFAULT_SAFE_REP_LIMIT = 25;
|
|
const RET_IS_SAFE = true;
|
|
const RET_IS_VULNERABLE = false;
|
|
|
|
class Args {
|
|
constructor(regExp, analyzerOptions) {
|
|
this.regExp = regExp;
|
|
this.analyzerOptions = analyzerOptions;
|
|
}
|
|
}
|
|
|
|
function safeRegex(re, opts) {
|
|
try {
|
|
const args = buildArgs(re, opts);
|
|
const analyzerResponses = askAnalyzersIfVulnerable(args);
|
|
|
|
// Did any analyzer say true?
|
|
if (analyzerResponses.find((isVulnerable) => isVulnerable)) {
|
|
return RET_IS_VULNERABLE;
|
|
} else {
|
|
return RET_IS_SAFE;
|
|
}
|
|
} catch (err) {
|
|
// Invalid or unparseable input
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function buildArgs(re, opts) {
|
|
// Build AnalyzerOptions
|
|
if (!opts) opts = {};
|
|
const heuristic_replimit = opts.limit === undefined ? DEFAULT_SAFE_REP_LIMIT : opts.limit;
|
|
|
|
const analyzerOptions = new analyzer.AnalyzerOptions(heuristic_replimit);
|
|
|
|
// Build RegExp
|
|
let regExp = null;
|
|
// Construct a RegExp object
|
|
if (re instanceof RegExp) {
|
|
regExp = re;
|
|
} else if (typeof re === 'string') {
|
|
regExp = new RegExp(re);
|
|
} else {
|
|
regExp = new RegExp(String(re));
|
|
}
|
|
|
|
return new Args(regExp, analyzerOptions);
|
|
}
|
|
|
|
function askAnalyzersIfVulnerable(args) {
|
|
let analyzerSaysVulnerable = [];
|
|
|
|
// Query the Analyzers
|
|
let Analyzer;
|
|
for (Analyzer of analyzerFamily) {
|
|
try {
|
|
const analyzer = new Analyzer(args.analyzerOptions);
|
|
analyzerSaysVulnerable.push(analyzer.isVulnerable(args.regExp));
|
|
} catch (err) {
|
|
/* istanbul ignore next */ // No need to worry about code coverage here.
|
|
analyzerSaysVulnerable.push(false);
|
|
}
|
|
}
|
|
|
|
return analyzerSaysVulnerable;
|
|
}
|
|
|
|
// Export
|
|
|
|
var safeRegex_1 = safeRegex;
|
|
|
|
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
|
|
|
|
function getDefaultExportFromCjs (x) {
|
|
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
|
|
}
|
|
|
|
function createCommonjsModule(fn) {
|
|
var module = { exports: {} };
|
|
return fn(module, module.exports), module.exports;
|
|
}
|
|
|
|
function commonjsRequire (path) {
|
|
throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');
|
|
}
|
|
|
|
var dist = createCommonjsModule(function (module, exports) {
|
|
/// <reference lib="es2018"/>
|
|
/// <reference lib="dom"/>
|
|
/// <reference types="node"/>
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const typedArrayTypeNames = [
|
|
'Int8Array',
|
|
'Uint8Array',
|
|
'Uint8ClampedArray',
|
|
'Int16Array',
|
|
'Uint16Array',
|
|
'Int32Array',
|
|
'Uint32Array',
|
|
'Float32Array',
|
|
'Float64Array',
|
|
'BigInt64Array',
|
|
'BigUint64Array'
|
|
];
|
|
function isTypedArrayName(name) {
|
|
return typedArrayTypeNames.includes(name);
|
|
}
|
|
const objectTypeNames = [
|
|
'Function',
|
|
'Generator',
|
|
'AsyncGenerator',
|
|
'GeneratorFunction',
|
|
'AsyncGeneratorFunction',
|
|
'AsyncFunction',
|
|
'Observable',
|
|
'Array',
|
|
'Buffer',
|
|
'Object',
|
|
'RegExp',
|
|
'Date',
|
|
'Error',
|
|
'Map',
|
|
'Set',
|
|
'WeakMap',
|
|
'WeakSet',
|
|
'ArrayBuffer',
|
|
'SharedArrayBuffer',
|
|
'DataView',
|
|
'Promise',
|
|
'URL',
|
|
'FormData',
|
|
'URLSearchParams',
|
|
'HTMLElement',
|
|
...typedArrayTypeNames
|
|
];
|
|
function isObjectTypeName(name) {
|
|
return objectTypeNames.includes(name);
|
|
}
|
|
const primitiveTypeNames = [
|
|
'null',
|
|
'undefined',
|
|
'string',
|
|
'number',
|
|
'bigint',
|
|
'boolean',
|
|
'symbol'
|
|
];
|
|
function isPrimitiveTypeName(name) {
|
|
return primitiveTypeNames.includes(name);
|
|
}
|
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
function isOfType(type) {
|
|
return (value) => typeof value === type;
|
|
}
|
|
const { toString } = Object.prototype;
|
|
const getObjectType = (value) => {
|
|
const objectTypeName = toString.call(value).slice(8, -1);
|
|
if (/HTML\w+Element/.test(objectTypeName) && is.domElement(value)) {
|
|
return 'HTMLElement';
|
|
}
|
|
if (isObjectTypeName(objectTypeName)) {
|
|
return objectTypeName;
|
|
}
|
|
return undefined;
|
|
};
|
|
const isObjectOfType = (type) => (value) => getObjectType(value) === type;
|
|
function is(value) {
|
|
if (value === null) {
|
|
return 'null';
|
|
}
|
|
switch (typeof value) {
|
|
case 'undefined':
|
|
return 'undefined';
|
|
case 'string':
|
|
return 'string';
|
|
case 'number':
|
|
return 'number';
|
|
case 'boolean':
|
|
return 'boolean';
|
|
case 'function':
|
|
return 'Function';
|
|
case 'bigint':
|
|
return 'bigint';
|
|
case 'symbol':
|
|
return 'symbol';
|
|
}
|
|
if (is.observable(value)) {
|
|
return 'Observable';
|
|
}
|
|
if (is.array(value)) {
|
|
return 'Array';
|
|
}
|
|
if (is.buffer(value)) {
|
|
return 'Buffer';
|
|
}
|
|
const tagType = getObjectType(value);
|
|
if (tagType) {
|
|
return tagType;
|
|
}
|
|
if (value instanceof String || value instanceof Boolean || value instanceof Number) {
|
|
throw new TypeError('Please don\'t use object wrappers for primitive types');
|
|
}
|
|
return 'Object';
|
|
}
|
|
is.undefined = isOfType('undefined');
|
|
is.string = isOfType('string');
|
|
const isNumberType = isOfType('number');
|
|
is.number = (value) => isNumberType(value) && !is.nan(value);
|
|
is.bigint = isOfType('bigint');
|
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
is.function_ = isOfType('function');
|
|
is.null_ = (value) => value === null;
|
|
is.class_ = (value) => is.function_(value) && value.toString().startsWith('class ');
|
|
is.boolean = (value) => value === true || value === false;
|
|
is.symbol = isOfType('symbol');
|
|
is.numericString = (value) => is.string(value) && !is.emptyStringOrWhitespace(value) && !Number.isNaN(Number(value));
|
|
is.array = (value, assertion) => {
|
|
if (!Array.isArray(value)) {
|
|
return false;
|
|
}
|
|
if (!is.function_(assertion)) {
|
|
return true;
|
|
}
|
|
return value.every(assertion);
|
|
};
|
|
is.buffer = (value) => { var _a, _b, _c, _d; return (_d = (_c = (_b = (_a = value) === null || _a === void 0 ? void 0 : _a.constructor) === null || _b === void 0 ? void 0 : _b.isBuffer) === null || _c === void 0 ? void 0 : _c.call(_b, value)) !== null && _d !== void 0 ? _d : false; };
|
|
is.nullOrUndefined = (value) => is.null_(value) || is.undefined(value);
|
|
is.object = (value) => !is.null_(value) && (typeof value === 'object' || is.function_(value));
|
|
is.iterable = (value) => { var _a; return is.function_((_a = value) === null || _a === void 0 ? void 0 : _a[Symbol.iterator]); };
|
|
is.asyncIterable = (value) => { var _a; return is.function_((_a = value) === null || _a === void 0 ? void 0 : _a[Symbol.asyncIterator]); };
|
|
is.generator = (value) => is.iterable(value) && is.function_(value.next) && is.function_(value.throw);
|
|
is.asyncGenerator = (value) => is.asyncIterable(value) && is.function_(value.next) && is.function_(value.throw);
|
|
is.nativePromise = (value) => isObjectOfType('Promise')(value);
|
|
const hasPromiseAPI = (value) => {
|
|
var _a, _b;
|
|
return is.function_((_a = value) === null || _a === void 0 ? void 0 : _a.then) &&
|
|
is.function_((_b = value) === null || _b === void 0 ? void 0 : _b.catch);
|
|
};
|
|
is.promise = (value) => is.nativePromise(value) || hasPromiseAPI(value);
|
|
is.generatorFunction = isObjectOfType('GeneratorFunction');
|
|
is.asyncGeneratorFunction = (value) => getObjectType(value) === 'AsyncGeneratorFunction';
|
|
is.asyncFunction = (value) => getObjectType(value) === 'AsyncFunction';
|
|
// eslint-disable-next-line no-prototype-builtins, @typescript-eslint/ban-types
|
|
is.boundFunction = (value) => is.function_(value) && !value.hasOwnProperty('prototype');
|
|
is.regExp = isObjectOfType('RegExp');
|
|
is.date = isObjectOfType('Date');
|
|
is.error = isObjectOfType('Error');
|
|
is.map = (value) => isObjectOfType('Map')(value);
|
|
is.set = (value) => isObjectOfType('Set')(value);
|
|
is.weakMap = (value) => isObjectOfType('WeakMap')(value);
|
|
is.weakSet = (value) => isObjectOfType('WeakSet')(value);
|
|
is.int8Array = isObjectOfType('Int8Array');
|
|
is.uint8Array = isObjectOfType('Uint8Array');
|
|
is.uint8ClampedArray = isObjectOfType('Uint8ClampedArray');
|
|
is.int16Array = isObjectOfType('Int16Array');
|
|
is.uint16Array = isObjectOfType('Uint16Array');
|
|
is.int32Array = isObjectOfType('Int32Array');
|
|
is.uint32Array = isObjectOfType('Uint32Array');
|
|
is.float32Array = isObjectOfType('Float32Array');
|
|
is.float64Array = isObjectOfType('Float64Array');
|
|
is.bigInt64Array = isObjectOfType('BigInt64Array');
|
|
is.bigUint64Array = isObjectOfType('BigUint64Array');
|
|
is.arrayBuffer = isObjectOfType('ArrayBuffer');
|
|
is.sharedArrayBuffer = isObjectOfType('SharedArrayBuffer');
|
|
is.dataView = isObjectOfType('DataView');
|
|
is.directInstanceOf = (instance, class_) => Object.getPrototypeOf(instance) === class_.prototype;
|
|
is.urlInstance = (value) => isObjectOfType('URL')(value);
|
|
is.urlString = (value) => {
|
|
if (!is.string(value)) {
|
|
return false;
|
|
}
|
|
try {
|
|
new URL(value); // eslint-disable-line no-new
|
|
return true;
|
|
}
|
|
catch (_a) {
|
|
return false;
|
|
}
|
|
};
|
|
// TODO: Use the `not` operator with a type guard here when it's available.
|
|
// Example: `is.truthy = (value: unknown): value is (not false | not 0 | not '' | not undefined | not null) => Boolean(value);`
|
|
is.truthy = (value) => Boolean(value);
|
|
// Example: `is.falsy = (value: unknown): value is (not true | 0 | '' | undefined | null) => Boolean(value);`
|
|
is.falsy = (value) => !value;
|
|
is.nan = (value) => Number.isNaN(value);
|
|
is.primitive = (value) => is.null_(value) || isPrimitiveTypeName(typeof value);
|
|
is.integer = (value) => Number.isInteger(value);
|
|
is.safeInteger = (value) => Number.isSafeInteger(value);
|
|
is.plainObject = (value) => {
|
|
// From: https://github.com/sindresorhus/is-plain-obj/blob/main/index.js
|
|
if (toString.call(value) !== '[object Object]') {
|
|
return false;
|
|
}
|
|
const prototype = Object.getPrototypeOf(value);
|
|
return prototype === null || prototype === Object.getPrototypeOf({});
|
|
};
|
|
is.typedArray = (value) => isTypedArrayName(getObjectType(value));
|
|
const isValidLength = (value) => is.safeInteger(value) && value >= 0;
|
|
is.arrayLike = (value) => !is.nullOrUndefined(value) && !is.function_(value) && isValidLength(value.length);
|
|
is.inRange = (value, range) => {
|
|
if (is.number(range)) {
|
|
return value >= Math.min(0, range) && value <= Math.max(range, 0);
|
|
}
|
|
if (is.array(range) && range.length === 2) {
|
|
return value >= Math.min(...range) && value <= Math.max(...range);
|
|
}
|
|
throw new TypeError(`Invalid range: ${JSON.stringify(range)}`);
|
|
};
|
|
const NODE_TYPE_ELEMENT = 1;
|
|
const DOM_PROPERTIES_TO_CHECK = [
|
|
'innerHTML',
|
|
'ownerDocument',
|
|
'style',
|
|
'attributes',
|
|
'nodeValue'
|
|
];
|
|
is.domElement = (value) => {
|
|
return is.object(value) &&
|
|
value.nodeType === NODE_TYPE_ELEMENT &&
|
|
is.string(value.nodeName) &&
|
|
!is.plainObject(value) &&
|
|
DOM_PROPERTIES_TO_CHECK.every(property => property in value);
|
|
};
|
|
is.observable = (value) => {
|
|
var _a, _b, _c, _d;
|
|
if (!value) {
|
|
return false;
|
|
}
|
|
// eslint-disable-next-line no-use-extend-native/no-use-extend-native
|
|
if (value === ((_b = (_a = value)[Symbol.observable]) === null || _b === void 0 ? void 0 : _b.call(_a))) {
|
|
return true;
|
|
}
|
|
if (value === ((_d = (_c = value)['@@observable']) === null || _d === void 0 ? void 0 : _d.call(_c))) {
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
is.nodeStream = (value) => is.object(value) && is.function_(value.pipe) && !is.observable(value);
|
|
is.infinite = (value) => value === Infinity || value === -Infinity;
|
|
const isAbsoluteMod2 = (remainder) => (value) => is.integer(value) && Math.abs(value % 2) === remainder;
|
|
is.evenInteger = isAbsoluteMod2(0);
|
|
is.oddInteger = isAbsoluteMod2(1);
|
|
is.emptyArray = (value) => is.array(value) && value.length === 0;
|
|
is.nonEmptyArray = (value) => is.array(value) && value.length > 0;
|
|
is.emptyString = (value) => is.string(value) && value.length === 0;
|
|
// TODO: Use `not ''` when the `not` operator is available.
|
|
is.nonEmptyString = (value) => is.string(value) && value.length > 0;
|
|
const isWhiteSpaceString = (value) => is.string(value) && !/\S/.test(value);
|
|
is.emptyStringOrWhitespace = (value) => is.emptyString(value) || isWhiteSpaceString(value);
|
|
is.emptyObject = (value) => is.object(value) && !is.map(value) && !is.set(value) && Object.keys(value).length === 0;
|
|
// TODO: Use `not` operator here to remove `Map` and `Set` from type guard:
|
|
// - https://github.com/Microsoft/TypeScript/pull/29317
|
|
is.nonEmptyObject = (value) => is.object(value) && !is.map(value) && !is.set(value) && Object.keys(value).length > 0;
|
|
is.emptySet = (value) => is.set(value) && value.size === 0;
|
|
is.nonEmptySet = (value) => is.set(value) && value.size > 0;
|
|
is.emptyMap = (value) => is.map(value) && value.size === 0;
|
|
is.nonEmptyMap = (value) => is.map(value) && value.size > 0;
|
|
// `PropertyKey` is any value that can be used as an object key (string, number, or symbol)
|
|
is.propertyKey = (value) => is.any([is.string, is.number, is.symbol], value);
|
|
is.formData = (value) => isObjectOfType('FormData')(value);
|
|
is.urlSearchParams = (value) => isObjectOfType('URLSearchParams')(value);
|
|
const predicateOnArray = (method, predicate, values) => {
|
|
if (!is.function_(predicate)) {
|
|
throw new TypeError(`Invalid predicate: ${JSON.stringify(predicate)}`);
|
|
}
|
|
if (values.length === 0) {
|
|
throw new TypeError('Invalid number of values');
|
|
}
|
|
return method.call(values, predicate);
|
|
};
|
|
is.any = (predicate, ...values) => {
|
|
const predicates = is.array(predicate) ? predicate : [predicate];
|
|
return predicates.some(singlePredicate => predicateOnArray(Array.prototype.some, singlePredicate, values));
|
|
};
|
|
is.all = (predicate, ...values) => predicateOnArray(Array.prototype.every, predicate, values);
|
|
const assertType = (condition, description, value, options = {}) => {
|
|
if (!condition) {
|
|
const { multipleValues } = options;
|
|
const valuesMessage = multipleValues ?
|
|
`received values of types ${[
|
|
...new Set(value.map(singleValue => `\`${is(singleValue)}\``))
|
|
].join(', ')}` :
|
|
`received value of type \`${is(value)}\``;
|
|
throw new TypeError(`Expected value which is \`${description}\`, ${valuesMessage}.`);
|
|
}
|
|
};
|
|
exports.assert = {
|
|
// Unknowns.
|
|
undefined: (value) => assertType(is.undefined(value), 'undefined', value),
|
|
string: (value) => assertType(is.string(value), 'string', value),
|
|
number: (value) => assertType(is.number(value), 'number', value),
|
|
bigint: (value) => assertType(is.bigint(value), 'bigint', value),
|
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
function_: (value) => assertType(is.function_(value), 'Function', value),
|
|
null_: (value) => assertType(is.null_(value), 'null', value),
|
|
class_: (value) => assertType(is.class_(value), "Class" /* class_ */, value),
|
|
boolean: (value) => assertType(is.boolean(value), 'boolean', value),
|
|
symbol: (value) => assertType(is.symbol(value), 'symbol', value),
|
|
numericString: (value) => assertType(is.numericString(value), "string with a number" /* numericString */, value),
|
|
array: (value, assertion) => {
|
|
const assert = assertType;
|
|
assert(is.array(value), 'Array', value);
|
|
if (assertion) {
|
|
value.forEach(assertion);
|
|
}
|
|
},
|
|
buffer: (value) => assertType(is.buffer(value), 'Buffer', value),
|
|
nullOrUndefined: (value) => assertType(is.nullOrUndefined(value), "null or undefined" /* nullOrUndefined */, value),
|
|
object: (value) => assertType(is.object(value), 'Object', value),
|
|
iterable: (value) => assertType(is.iterable(value), "Iterable" /* iterable */, value),
|
|
asyncIterable: (value) => assertType(is.asyncIterable(value), "AsyncIterable" /* asyncIterable */, value),
|
|
generator: (value) => assertType(is.generator(value), 'Generator', value),
|
|
asyncGenerator: (value) => assertType(is.asyncGenerator(value), 'AsyncGenerator', value),
|
|
nativePromise: (value) => assertType(is.nativePromise(value), "native Promise" /* nativePromise */, value),
|
|
promise: (value) => assertType(is.promise(value), 'Promise', value),
|
|
generatorFunction: (value) => assertType(is.generatorFunction(value), 'GeneratorFunction', value),
|
|
asyncGeneratorFunction: (value) => assertType(is.asyncGeneratorFunction(value), 'AsyncGeneratorFunction', value),
|
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
asyncFunction: (value) => assertType(is.asyncFunction(value), 'AsyncFunction', value),
|
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
boundFunction: (value) => assertType(is.boundFunction(value), 'Function', value),
|
|
regExp: (value) => assertType(is.regExp(value), 'RegExp', value),
|
|
date: (value) => assertType(is.date(value), 'Date', value),
|
|
error: (value) => assertType(is.error(value), 'Error', value),
|
|
map: (value) => assertType(is.map(value), 'Map', value),
|
|
set: (value) => assertType(is.set(value), 'Set', value),
|
|
weakMap: (value) => assertType(is.weakMap(value), 'WeakMap', value),
|
|
weakSet: (value) => assertType(is.weakSet(value), 'WeakSet', value),
|
|
int8Array: (value) => assertType(is.int8Array(value), 'Int8Array', value),
|
|
uint8Array: (value) => assertType(is.uint8Array(value), 'Uint8Array', value),
|
|
uint8ClampedArray: (value) => assertType(is.uint8ClampedArray(value), 'Uint8ClampedArray', value),
|
|
int16Array: (value) => assertType(is.int16Array(value), 'Int16Array', value),
|
|
uint16Array: (value) => assertType(is.uint16Array(value), 'Uint16Array', value),
|
|
int32Array: (value) => assertType(is.int32Array(value), 'Int32Array', value),
|
|
uint32Array: (value) => assertType(is.uint32Array(value), 'Uint32Array', value),
|
|
float32Array: (value) => assertType(is.float32Array(value), 'Float32Array', value),
|
|
float64Array: (value) => assertType(is.float64Array(value), 'Float64Array', value),
|
|
bigInt64Array: (value) => assertType(is.bigInt64Array(value), 'BigInt64Array', value),
|
|
bigUint64Array: (value) => assertType(is.bigUint64Array(value), 'BigUint64Array', value),
|
|
arrayBuffer: (value) => assertType(is.arrayBuffer(value), 'ArrayBuffer', value),
|
|
sharedArrayBuffer: (value) => assertType(is.sharedArrayBuffer(value), 'SharedArrayBuffer', value),
|
|
dataView: (value) => assertType(is.dataView(value), 'DataView', value),
|
|
urlInstance: (value) => assertType(is.urlInstance(value), 'URL', value),
|
|
urlString: (value) => assertType(is.urlString(value), "string with a URL" /* urlString */, value),
|
|
truthy: (value) => assertType(is.truthy(value), "truthy" /* truthy */, value),
|
|
falsy: (value) => assertType(is.falsy(value), "falsy" /* falsy */, value),
|
|
nan: (value) => assertType(is.nan(value), "NaN" /* nan */, value),
|
|
primitive: (value) => assertType(is.primitive(value), "primitive" /* primitive */, value),
|
|
integer: (value) => assertType(is.integer(value), "integer" /* integer */, value),
|
|
safeInteger: (value) => assertType(is.safeInteger(value), "integer" /* safeInteger */, value),
|
|
plainObject: (value) => assertType(is.plainObject(value), "plain object" /* plainObject */, value),
|
|
typedArray: (value) => assertType(is.typedArray(value), "TypedArray" /* typedArray */, value),
|
|
arrayLike: (value) => assertType(is.arrayLike(value), "array-like" /* arrayLike */, value),
|
|
domElement: (value) => assertType(is.domElement(value), "HTMLElement" /* domElement */, value),
|
|
observable: (value) => assertType(is.observable(value), 'Observable', value),
|
|
nodeStream: (value) => assertType(is.nodeStream(value), "Node.js Stream" /* nodeStream */, value),
|
|
infinite: (value) => assertType(is.infinite(value), "infinite number" /* infinite */, value),
|
|
emptyArray: (value) => assertType(is.emptyArray(value), "empty array" /* emptyArray */, value),
|
|
nonEmptyArray: (value) => assertType(is.nonEmptyArray(value), "non-empty array" /* nonEmptyArray */, value),
|
|
emptyString: (value) => assertType(is.emptyString(value), "empty string" /* emptyString */, value),
|
|
nonEmptyString: (value) => assertType(is.nonEmptyString(value), "non-empty string" /* nonEmptyString */, value),
|
|
emptyStringOrWhitespace: (value) => assertType(is.emptyStringOrWhitespace(value), "empty string or whitespace" /* emptyStringOrWhitespace */, value),
|
|
emptyObject: (value) => assertType(is.emptyObject(value), "empty object" /* emptyObject */, value),
|
|
nonEmptyObject: (value) => assertType(is.nonEmptyObject(value), "non-empty object" /* nonEmptyObject */, value),
|
|
emptySet: (value) => assertType(is.emptySet(value), "empty set" /* emptySet */, value),
|
|
nonEmptySet: (value) => assertType(is.nonEmptySet(value), "non-empty set" /* nonEmptySet */, value),
|
|
emptyMap: (value) => assertType(is.emptyMap(value), "empty map" /* emptyMap */, value),
|
|
nonEmptyMap: (value) => assertType(is.nonEmptyMap(value), "non-empty map" /* nonEmptyMap */, value),
|
|
propertyKey: (value) => assertType(is.propertyKey(value), 'PropertyKey', value),
|
|
formData: (value) => assertType(is.formData(value), 'FormData', value),
|
|
urlSearchParams: (value) => assertType(is.urlSearchParams(value), 'URLSearchParams', value),
|
|
// Numbers.
|
|
evenInteger: (value) => assertType(is.evenInteger(value), "even integer" /* evenInteger */, value),
|
|
oddInteger: (value) => assertType(is.oddInteger(value), "odd integer" /* oddInteger */, value),
|
|
// Two arguments.
|
|
directInstanceOf: (instance, class_) => assertType(is.directInstanceOf(instance, class_), "T" /* directInstanceOf */, instance),
|
|
inRange: (value, range) => assertType(is.inRange(value, range), "in range" /* inRange */, value),
|
|
// Variadic functions.
|
|
any: (predicate, ...values) => {
|
|
return assertType(is.any(predicate, ...values), "predicate returns truthy for any value" /* any */, values, { multipleValues: true });
|
|
},
|
|
all: (predicate, ...values) => assertType(is.all(predicate, ...values), "predicate returns truthy for all values" /* all */, values, { multipleValues: true })
|
|
};
|
|
// Some few keywords are reserved, but we'll populate them for Node.js users
|
|
// See https://github.com/Microsoft/TypeScript/issues/2536
|
|
Object.defineProperties(is, {
|
|
class: {
|
|
value: is.class_
|
|
},
|
|
function: {
|
|
value: is.function_
|
|
},
|
|
null: {
|
|
value: is.null_
|
|
}
|
|
});
|
|
Object.defineProperties(exports.assert, {
|
|
class: {
|
|
value: exports.assert.class_
|
|
},
|
|
function: {
|
|
value: exports.assert.function_
|
|
},
|
|
null: {
|
|
value: exports.assert.null_
|
|
}
|
|
});
|
|
exports.default = is;
|
|
// For CommonJS default export support
|
|
module.exports = is;
|
|
module.exports.default = is;
|
|
module.exports.assert = exports.assert;
|
|
});
|
|
|
|
class CancelError extends Error {
|
|
constructor(reason) {
|
|
super(reason || 'Promise was canceled');
|
|
this.name = 'CancelError';
|
|
}
|
|
|
|
get isCanceled() {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
class PCancelable {
|
|
static fn(userFn) {
|
|
return (...arguments_) => {
|
|
return new PCancelable((resolve, reject, onCancel) => {
|
|
arguments_.push(onCancel);
|
|
// eslint-disable-next-line promise/prefer-await-to-then
|
|
userFn(...arguments_).then(resolve, reject);
|
|
});
|
|
};
|
|
}
|
|
|
|
constructor(executor) {
|
|
this._cancelHandlers = [];
|
|
this._isPending = true;
|
|
this._isCanceled = false;
|
|
this._rejectOnCancel = true;
|
|
|
|
this._promise = new Promise((resolve, reject) => {
|
|
this._reject = reject;
|
|
|
|
const onResolve = value => {
|
|
if (!this._isCanceled || !onCancel.shouldReject) {
|
|
this._isPending = false;
|
|
resolve(value);
|
|
}
|
|
};
|
|
|
|
const onReject = error => {
|
|
this._isPending = false;
|
|
reject(error);
|
|
};
|
|
|
|
const onCancel = handler => {
|
|
if (!this._isPending) {
|
|
throw new Error('The `onCancel` handler was attached after the promise settled.');
|
|
}
|
|
|
|
this._cancelHandlers.push(handler);
|
|
};
|
|
|
|
Object.defineProperties(onCancel, {
|
|
shouldReject: {
|
|
get: () => this._rejectOnCancel,
|
|
set: boolean => {
|
|
this._rejectOnCancel = boolean;
|
|
}
|
|
}
|
|
});
|
|
|
|
return executor(onResolve, onReject, onCancel);
|
|
});
|
|
}
|
|
|
|
then(onFulfilled, onRejected) {
|
|
// eslint-disable-next-line promise/prefer-await-to-then
|
|
return this._promise.then(onFulfilled, onRejected);
|
|
}
|
|
|
|
catch(onRejected) {
|
|
return this._promise.catch(onRejected);
|
|
}
|
|
|
|
finally(onFinally) {
|
|
return this._promise.finally(onFinally);
|
|
}
|
|
|
|
cancel(reason) {
|
|
if (!this._isPending || this._isCanceled) {
|
|
return;
|
|
}
|
|
|
|
this._isCanceled = true;
|
|
|
|
if (this._cancelHandlers.length > 0) {
|
|
try {
|
|
for (const handler of this._cancelHandlers) {
|
|
handler();
|
|
}
|
|
} catch (error) {
|
|
this._reject(error);
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (this._rejectOnCancel) {
|
|
this._reject(new CancelError(reason));
|
|
}
|
|
}
|
|
|
|
get isCanceled() {
|
|
return this._isCanceled;
|
|
}
|
|
}
|
|
|
|
Object.setPrototypeOf(PCancelable.prototype, Promise.prototype);
|
|
|
|
var pCancelable = PCancelable;
|
|
var CancelError_1 = CancelError;
|
|
pCancelable.CancelError = CancelError_1;
|
|
|
|
var source$4 = createCommonjsModule(function (module, exports) {
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
function isTLSSocket(socket) {
|
|
return socket.encrypted;
|
|
}
|
|
const deferToConnect = (socket, fn) => {
|
|
let listeners;
|
|
if (typeof fn === 'function') {
|
|
const connect = fn;
|
|
listeners = { connect };
|
|
}
|
|
else {
|
|
listeners = fn;
|
|
}
|
|
const hasConnectListener = typeof listeners.connect === 'function';
|
|
const hasSecureConnectListener = typeof listeners.secureConnect === 'function';
|
|
const hasCloseListener = typeof listeners.close === 'function';
|
|
const onConnect = () => {
|
|
if (hasConnectListener) {
|
|
listeners.connect();
|
|
}
|
|
if (isTLSSocket(socket) && hasSecureConnectListener) {
|
|
if (socket.authorized) {
|
|
listeners.secureConnect();
|
|
}
|
|
else if (!socket.authorizationError) {
|
|
socket.once('secureConnect', listeners.secureConnect);
|
|
}
|
|
}
|
|
if (hasCloseListener) {
|
|
socket.once('close', listeners.close);
|
|
}
|
|
};
|
|
if (socket.writable && !socket.connecting) {
|
|
onConnect();
|
|
}
|
|
else if (socket.connecting) {
|
|
socket.once('connect', onConnect);
|
|
}
|
|
else if (socket.destroyed && hasCloseListener) {
|
|
listeners.close(socket._hadError);
|
|
}
|
|
};
|
|
exports.default = deferToConnect;
|
|
// For CommonJS default export support
|
|
module.exports = deferToConnect;
|
|
module.exports.default = deferToConnect;
|
|
});
|
|
|
|
var source$3 = createCommonjsModule(function (module, exports) {
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
|
|
|
const nodejsMajorVersion = Number(process.versions.node.split('.')[0]);
|
|
const timer = (request) => {
|
|
if (request.timings) {
|
|
return request.timings;
|
|
}
|
|
const timings = {
|
|
start: Date.now(),
|
|
socket: undefined,
|
|
lookup: undefined,
|
|
connect: undefined,
|
|
secureConnect: undefined,
|
|
upload: undefined,
|
|
response: undefined,
|
|
end: undefined,
|
|
error: undefined,
|
|
abort: undefined,
|
|
phases: {
|
|
wait: undefined,
|
|
dns: undefined,
|
|
tcp: undefined,
|
|
tls: undefined,
|
|
request: undefined,
|
|
firstByte: undefined,
|
|
download: undefined,
|
|
total: undefined
|
|
}
|
|
};
|
|
request.timings = timings;
|
|
const handleError = (origin) => {
|
|
const emit = origin.emit.bind(origin);
|
|
origin.emit = (event, ...args) => {
|
|
// Catches the `error` event
|
|
if (event === 'error') {
|
|
timings.error = Date.now();
|
|
timings.phases.total = timings.error - timings.start;
|
|
origin.emit = emit;
|
|
}
|
|
// Saves the original behavior
|
|
return emit(event, ...args);
|
|
};
|
|
};
|
|
handleError(request);
|
|
const onAbort = () => {
|
|
timings.abort = Date.now();
|
|
// Let the `end` response event be responsible for setting the total phase,
|
|
// unless the Node.js major version is >= 13.
|
|
if (!timings.response || nodejsMajorVersion >= 13) {
|
|
timings.phases.total = Date.now() - timings.start;
|
|
}
|
|
};
|
|
request.prependOnceListener('abort', onAbort);
|
|
const onSocket = (socket) => {
|
|
timings.socket = Date.now();
|
|
timings.phases.wait = timings.socket - timings.start;
|
|
if (util_1__default['default'].types.isProxy(socket)) {
|
|
return;
|
|
}
|
|
const lookupListener = () => {
|
|
timings.lookup = Date.now();
|
|
timings.phases.dns = timings.lookup - timings.socket;
|
|
};
|
|
socket.prependOnceListener('lookup', lookupListener);
|
|
source$4.default(socket, {
|
|
connect: () => {
|
|
timings.connect = Date.now();
|
|
if (timings.lookup === undefined) {
|
|
socket.removeListener('lookup', lookupListener);
|
|
timings.lookup = timings.connect;
|
|
timings.phases.dns = timings.lookup - timings.socket;
|
|
}
|
|
timings.phases.tcp = timings.connect - timings.lookup;
|
|
// This callback is called before flushing any data,
|
|
// so we don't need to set `timings.phases.request` here.
|
|
},
|
|
secureConnect: () => {
|
|
timings.secureConnect = Date.now();
|
|
timings.phases.tls = timings.secureConnect - timings.connect;
|
|
}
|
|
});
|
|
};
|
|
if (request.socket) {
|
|
onSocket(request.socket);
|
|
}
|
|
else {
|
|
request.prependOnceListener('socket', onSocket);
|
|
}
|
|
const onUpload = () => {
|
|
var _a;
|
|
timings.upload = Date.now();
|
|
timings.phases.request = timings.upload - ((_a = timings.secureConnect) !== null && _a !== void 0 ? _a : timings.connect);
|
|
};
|
|
const writableFinished = () => {
|
|
if (typeof request.writableFinished === 'boolean') {
|
|
return request.writableFinished;
|
|
}
|
|
// Node.js doesn't have `request.writableFinished` property
|
|
return request.finished && request.outputSize === 0 && (!request.socket || request.socket.writableLength === 0);
|
|
};
|
|
if (writableFinished()) {
|
|
onUpload();
|
|
}
|
|
else {
|
|
request.prependOnceListener('finish', onUpload);
|
|
}
|
|
request.prependOnceListener('response', (response) => {
|
|
timings.response = Date.now();
|
|
timings.phases.firstByte = timings.response - timings.upload;
|
|
response.timings = timings;
|
|
handleError(response);
|
|
response.prependOnceListener('end', () => {
|
|
timings.end = Date.now();
|
|
timings.phases.download = timings.end - timings.response;
|
|
timings.phases.total = timings.end - timings.start;
|
|
});
|
|
response.prependOnceListener('aborted', onAbort);
|
|
});
|
|
return timings;
|
|
};
|
|
exports.default = timer;
|
|
// For CommonJS default export support
|
|
module.exports = timer;
|
|
module.exports.default = timer;
|
|
});
|
|
|
|
const {
|
|
V4MAPPED,
|
|
ADDRCONFIG,
|
|
ALL,
|
|
promises: {
|
|
Resolver: AsyncResolver
|
|
},
|
|
lookup: dnsLookup
|
|
} = require$$0__default['default'];
|
|
const {promisify} = util_1__default['default'];
|
|
|
|
|
|
const kCacheableLookupCreateConnection = Symbol('cacheableLookupCreateConnection');
|
|
const kCacheableLookupInstance = Symbol('cacheableLookupInstance');
|
|
const kExpires = Symbol('expires');
|
|
|
|
const supportsALL = typeof ALL === 'number';
|
|
|
|
const verifyAgent = agent => {
|
|
if (!(agent && typeof agent.createConnection === 'function')) {
|
|
throw new Error('Expected an Agent instance as the first argument');
|
|
}
|
|
};
|
|
|
|
const map4to6 = entries => {
|
|
for (const entry of entries) {
|
|
if (entry.family === 6) {
|
|
continue;
|
|
}
|
|
|
|
entry.address = `::ffff:${entry.address}`;
|
|
entry.family = 6;
|
|
}
|
|
};
|
|
|
|
const getIfaceInfo = () => {
|
|
let has4 = false;
|
|
let has6 = false;
|
|
|
|
for (const device of Object.values(os__default['default'].networkInterfaces())) {
|
|
for (const iface of device) {
|
|
if (iface.internal) {
|
|
continue;
|
|
}
|
|
|
|
if (iface.family === 'IPv6') {
|
|
has6 = true;
|
|
} else {
|
|
has4 = true;
|
|
}
|
|
|
|
if (has4 && has6) {
|
|
return {has4, has6};
|
|
}
|
|
}
|
|
}
|
|
|
|
return {has4, has6};
|
|
};
|
|
|
|
const isIterable = map => {
|
|
return Symbol.iterator in map;
|
|
};
|
|
|
|
const ttl = {ttl: true};
|
|
const all = {all: true};
|
|
|
|
class CacheableLookup {
|
|
constructor({
|
|
cache = new Map(),
|
|
maxTtl = Infinity,
|
|
fallbackDuration = 3600,
|
|
errorTtl = 0.15,
|
|
resolver = new AsyncResolver(),
|
|
lookup = dnsLookup
|
|
} = {}) {
|
|
this.maxTtl = maxTtl;
|
|
this.errorTtl = errorTtl;
|
|
|
|
this._cache = cache;
|
|
this._resolver = resolver;
|
|
this._dnsLookup = promisify(lookup);
|
|
|
|
if (this._resolver instanceof AsyncResolver) {
|
|
this._resolve4 = this._resolver.resolve4.bind(this._resolver);
|
|
this._resolve6 = this._resolver.resolve6.bind(this._resolver);
|
|
} else {
|
|
this._resolve4 = promisify(this._resolver.resolve4.bind(this._resolver));
|
|
this._resolve6 = promisify(this._resolver.resolve6.bind(this._resolver));
|
|
}
|
|
|
|
this._iface = getIfaceInfo();
|
|
|
|
this._pending = {};
|
|
this._nextRemovalTime = false;
|
|
this._hostnamesToFallback = new Set();
|
|
|
|
if (fallbackDuration < 1) {
|
|
this._fallback = false;
|
|
} else {
|
|
this._fallback = true;
|
|
|
|
const interval = setInterval(() => {
|
|
this._hostnamesToFallback.clear();
|
|
}, fallbackDuration * 1000);
|
|
|
|
/* istanbul ignore next: There is no `interval.unref()` when running inside an Electron renderer */
|
|
if (interval.unref) {
|
|
interval.unref();
|
|
}
|
|
}
|
|
|
|
this.lookup = this.lookup.bind(this);
|
|
this.lookupAsync = this.lookupAsync.bind(this);
|
|
}
|
|
|
|
set servers(servers) {
|
|
this.clear();
|
|
|
|
this._resolver.setServers(servers);
|
|
}
|
|
|
|
get servers() {
|
|
return this._resolver.getServers();
|
|
}
|
|
|
|
lookup(hostname, options, callback) {
|
|
if (typeof options === 'function') {
|
|
callback = options;
|
|
options = {};
|
|
} else if (typeof options === 'number') {
|
|
options = {
|
|
family: options
|
|
};
|
|
}
|
|
|
|
if (!callback) {
|
|
throw new Error('Callback must be a function.');
|
|
}
|
|
|
|
// eslint-disable-next-line promise/prefer-await-to-then
|
|
this.lookupAsync(hostname, options).then(result => {
|
|
if (options.all) {
|
|
callback(null, result);
|
|
} else {
|
|
callback(null, result.address, result.family, result.expires, result.ttl);
|
|
}
|
|
}, callback);
|
|
}
|
|
|
|
async lookupAsync(hostname, options = {}) {
|
|
if (typeof options === 'number') {
|
|
options = {
|
|
family: options
|
|
};
|
|
}
|
|
|
|
let cached = await this.query(hostname);
|
|
|
|
if (options.family === 6) {
|
|
const filtered = cached.filter(entry => entry.family === 6);
|
|
|
|
if (options.hints & V4MAPPED) {
|
|
if ((supportsALL && options.hints & ALL) || filtered.length === 0) {
|
|
map4to6(cached);
|
|
} else {
|
|
cached = filtered;
|
|
}
|
|
} else {
|
|
cached = filtered;
|
|
}
|
|
} else if (options.family === 4) {
|
|
cached = cached.filter(entry => entry.family === 4);
|
|
}
|
|
|
|
if (options.hints & ADDRCONFIG) {
|
|
const {_iface} = this;
|
|
cached = cached.filter(entry => entry.family === 6 ? _iface.has6 : _iface.has4);
|
|
}
|
|
|
|
if (cached.length === 0) {
|
|
const error = new Error(`cacheableLookup ENOTFOUND ${hostname}`);
|
|
error.code = 'ENOTFOUND';
|
|
error.hostname = hostname;
|
|
|
|
throw error;
|
|
}
|
|
|
|
if (options.all) {
|
|
return cached;
|
|
}
|
|
|
|
return cached[0];
|
|
}
|
|
|
|
async query(hostname) {
|
|
let cached = await this._cache.get(hostname);
|
|
|
|
if (!cached) {
|
|
const pending = this._pending[hostname];
|
|
|
|
if (pending) {
|
|
cached = await pending;
|
|
} else {
|
|
const newPromise = this.queryAndCache(hostname);
|
|
this._pending[hostname] = newPromise;
|
|
|
|
try {
|
|
cached = await newPromise;
|
|
} finally {
|
|
delete this._pending[hostname];
|
|
}
|
|
}
|
|
}
|
|
|
|
cached = cached.map(entry => {
|
|
return {...entry};
|
|
});
|
|
|
|
return cached;
|
|
}
|
|
|
|
async _resolve(hostname) {
|
|
const wrap = async promise => {
|
|
try {
|
|
return await promise;
|
|
} catch (error) {
|
|
if (error.code === 'ENODATA' || error.code === 'ENOTFOUND') {
|
|
return [];
|
|
}
|
|
|
|
throw error;
|
|
}
|
|
};
|
|
|
|
// ANY is unsafe as it doesn't trigger new queries in the underlying server.
|
|
const [A, AAAA] = await Promise.all([
|
|
this._resolve4(hostname, ttl),
|
|
this._resolve6(hostname, ttl)
|
|
].map(promise => wrap(promise)));
|
|
|
|
let aTtl = 0;
|
|
let aaaaTtl = 0;
|
|
let cacheTtl = 0;
|
|
|
|
const now = Date.now();
|
|
|
|
for (const entry of A) {
|
|
entry.family = 4;
|
|
entry.expires = now + (entry.ttl * 1000);
|
|
|
|
aTtl = Math.max(aTtl, entry.ttl);
|
|
}
|
|
|
|
for (const entry of AAAA) {
|
|
entry.family = 6;
|
|
entry.expires = now + (entry.ttl * 1000);
|
|
|
|
aaaaTtl = Math.max(aaaaTtl, entry.ttl);
|
|
}
|
|
|
|
if (A.length > 0) {
|
|
if (AAAA.length > 0) {
|
|
cacheTtl = Math.min(aTtl, aaaaTtl);
|
|
} else {
|
|
cacheTtl = aTtl;
|
|
}
|
|
} else {
|
|
cacheTtl = aaaaTtl;
|
|
}
|
|
|
|
return {
|
|
entries: [
|
|
...A,
|
|
...AAAA
|
|
],
|
|
cacheTtl
|
|
};
|
|
}
|
|
|
|
async _lookup(hostname) {
|
|
try {
|
|
const entries = await this._dnsLookup(hostname, {
|
|
all: true
|
|
});
|
|
|
|
return {
|
|
entries,
|
|
cacheTtl: 0
|
|
};
|
|
} catch (_) {
|
|
return {
|
|
entries: [],
|
|
cacheTtl: 0
|
|
};
|
|
}
|
|
}
|
|
|
|
async _set(hostname, data, cacheTtl) {
|
|
if (this.maxTtl > 0 && cacheTtl > 0) {
|
|
cacheTtl = Math.min(cacheTtl, this.maxTtl) * 1000;
|
|
data[kExpires] = Date.now() + cacheTtl;
|
|
|
|
try {
|
|
await this._cache.set(hostname, data, cacheTtl);
|
|
} catch (error) {
|
|
this.lookupAsync = async () => {
|
|
const cacheError = new Error('Cache Error. Please recreate the CacheableLookup instance.');
|
|
cacheError.cause = error;
|
|
|
|
throw cacheError;
|
|
};
|
|
}
|
|
|
|
if (isIterable(this._cache)) {
|
|
this._tick(cacheTtl);
|
|
}
|
|
}
|
|
}
|
|
|
|
async queryAndCache(hostname) {
|
|
if (this._hostnamesToFallback.has(hostname)) {
|
|
return this._dnsLookup(hostname, all);
|
|
}
|
|
|
|
let query = await this._resolve(hostname);
|
|
|
|
if (query.entries.length === 0 && this._fallback) {
|
|
query = await this._lookup(hostname);
|
|
|
|
if (query.entries.length !== 0) {
|
|
// Use `dns.lookup(...)` for that particular hostname
|
|
this._hostnamesToFallback.add(hostname);
|
|
}
|
|
}
|
|
|
|
const cacheTtl = query.entries.length === 0 ? this.errorTtl : query.cacheTtl;
|
|
await this._set(hostname, query.entries, cacheTtl);
|
|
|
|
return query.entries;
|
|
}
|
|
|
|
_tick(ms) {
|
|
const nextRemovalTime = this._nextRemovalTime;
|
|
|
|
if (!nextRemovalTime || ms < nextRemovalTime) {
|
|
clearTimeout(this._removalTimeout);
|
|
|
|
this._nextRemovalTime = ms;
|
|
|
|
this._removalTimeout = setTimeout(() => {
|
|
this._nextRemovalTime = false;
|
|
|
|
let nextExpiry = Infinity;
|
|
|
|
const now = Date.now();
|
|
|
|
for (const [hostname, entries] of this._cache) {
|
|
const expires = entries[kExpires];
|
|
|
|
if (now >= expires) {
|
|
this._cache.delete(hostname);
|
|
} else if (expires < nextExpiry) {
|
|
nextExpiry = expires;
|
|
}
|
|
}
|
|
|
|
if (nextExpiry !== Infinity) {
|
|
this._tick(nextExpiry - now);
|
|
}
|
|
}, ms);
|
|
|
|
/* istanbul ignore next: There is no `timeout.unref()` when running inside an Electron renderer */
|
|
if (this._removalTimeout.unref) {
|
|
this._removalTimeout.unref();
|
|
}
|
|
}
|
|
}
|
|
|
|
install(agent) {
|
|
verifyAgent(agent);
|
|
|
|
if (kCacheableLookupCreateConnection in agent) {
|
|
throw new Error('CacheableLookup has been already installed');
|
|
}
|
|
|
|
agent[kCacheableLookupCreateConnection] = agent.createConnection;
|
|
agent[kCacheableLookupInstance] = this;
|
|
|
|
agent.createConnection = (options, callback) => {
|
|
if (!('lookup' in options)) {
|
|
options.lookup = this.lookup;
|
|
}
|
|
|
|
return agent[kCacheableLookupCreateConnection](options, callback);
|
|
};
|
|
}
|
|
|
|
uninstall(agent) {
|
|
verifyAgent(agent);
|
|
|
|
if (agent[kCacheableLookupCreateConnection]) {
|
|
if (agent[kCacheableLookupInstance] !== this) {
|
|
throw new Error('The agent is not owned by this CacheableLookup instance');
|
|
}
|
|
|
|
agent.createConnection = agent[kCacheableLookupCreateConnection];
|
|
|
|
delete agent[kCacheableLookupCreateConnection];
|
|
delete agent[kCacheableLookupInstance];
|
|
}
|
|
}
|
|
|
|
updateInterfaceInfo() {
|
|
const {_iface} = this;
|
|
|
|
this._iface = getIfaceInfo();
|
|
|
|
if ((_iface.has4 && !this._iface.has4) || (_iface.has6 && !this._iface.has6)) {
|
|
this._cache.clear();
|
|
}
|
|
}
|
|
|
|
clear(hostname) {
|
|
if (hostname) {
|
|
this._cache.delete(hostname);
|
|
return;
|
|
}
|
|
|
|
this._cache.clear();
|
|
}
|
|
}
|
|
|
|
var source$2 = CacheableLookup;
|
|
var _default$k = CacheableLookup;
|
|
source$2.default = _default$k;
|
|
|
|
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs
|
|
const DATA_URL_DEFAULT_MIME_TYPE = 'text/plain';
|
|
const DATA_URL_DEFAULT_CHARSET = 'us-ascii';
|
|
|
|
const testParameter = (name, filters) => {
|
|
return filters.some(filter => filter instanceof RegExp ? filter.test(name) : filter === name);
|
|
};
|
|
|
|
const normalizeDataURL = (urlString, {stripHash}) => {
|
|
const match = /^data:(?<type>[^,]*?),(?<data>[^#]*?)(?:#(?<hash>.*))?$/.exec(urlString);
|
|
|
|
if (!match) {
|
|
throw new Error(`Invalid URL: ${urlString}`);
|
|
}
|
|
|
|
let {type, data, hash} = match.groups;
|
|
const mediaType = type.split(';');
|
|
hash = stripHash ? '' : hash;
|
|
|
|
let isBase64 = false;
|
|
if (mediaType[mediaType.length - 1] === 'base64') {
|
|
mediaType.pop();
|
|
isBase64 = true;
|
|
}
|
|
|
|
// Lowercase MIME type
|
|
const mimeType = (mediaType.shift() || '').toLowerCase();
|
|
const attributes = mediaType
|
|
.map(attribute => {
|
|
let [key, value = ''] = attribute.split('=').map(string => string.trim());
|
|
|
|
// Lowercase `charset`
|
|
if (key === 'charset') {
|
|
value = value.toLowerCase();
|
|
|
|
if (value === DATA_URL_DEFAULT_CHARSET) {
|
|
return '';
|
|
}
|
|
}
|
|
|
|
return `${key}${value ? `=${value}` : ''}`;
|
|
})
|
|
.filter(Boolean);
|
|
|
|
const normalizedMediaType = [
|
|
...attributes
|
|
];
|
|
|
|
if (isBase64) {
|
|
normalizedMediaType.push('base64');
|
|
}
|
|
|
|
if (normalizedMediaType.length !== 0 || (mimeType && mimeType !== DATA_URL_DEFAULT_MIME_TYPE)) {
|
|
normalizedMediaType.unshift(mimeType);
|
|
}
|
|
|
|
return `data:${normalizedMediaType.join(';')},${isBase64 ? data.trim() : data}${hash ? `#${hash}` : ''}`;
|
|
};
|
|
|
|
const normalizeUrl = (urlString, options) => {
|
|
options = {
|
|
defaultProtocol: 'http:',
|
|
normalizeProtocol: true,
|
|
forceHttp: false,
|
|
forceHttps: false,
|
|
stripAuthentication: true,
|
|
stripHash: false,
|
|
stripTextFragment: true,
|
|
stripWWW: true,
|
|
removeQueryParameters: [/^utm_\w+/i],
|
|
removeTrailingSlash: true,
|
|
removeSingleSlash: true,
|
|
removeDirectoryIndex: false,
|
|
sortQueryParameters: true,
|
|
...options
|
|
};
|
|
|
|
urlString = urlString.trim();
|
|
|
|
// Data URL
|
|
if (/^data:/i.test(urlString)) {
|
|
return normalizeDataURL(urlString, options);
|
|
}
|
|
|
|
if (/^view-source:/i.test(urlString)) {
|
|
throw new Error('`view-source:` is not supported as it is a non-standard protocol');
|
|
}
|
|
|
|
const hasRelativeProtocol = urlString.startsWith('//');
|
|
const isRelativeUrl = !hasRelativeProtocol && /^\.*\//.test(urlString);
|
|
|
|
// Prepend protocol
|
|
if (!isRelativeUrl) {
|
|
urlString = urlString.replace(/^(?!(?:\w+:)?\/\/)|^\/\//, options.defaultProtocol);
|
|
}
|
|
|
|
const urlObj = new URL(urlString);
|
|
|
|
if (options.forceHttp && options.forceHttps) {
|
|
throw new Error('The `forceHttp` and `forceHttps` options cannot be used together');
|
|
}
|
|
|
|
if (options.forceHttp && urlObj.protocol === 'https:') {
|
|
urlObj.protocol = 'http:';
|
|
}
|
|
|
|
if (options.forceHttps && urlObj.protocol === 'http:') {
|
|
urlObj.protocol = 'https:';
|
|
}
|
|
|
|
// Remove auth
|
|
if (options.stripAuthentication) {
|
|
urlObj.username = '';
|
|
urlObj.password = '';
|
|
}
|
|
|
|
// Remove hash
|
|
if (options.stripHash) {
|
|
urlObj.hash = '';
|
|
} else if (options.stripTextFragment) {
|
|
urlObj.hash = urlObj.hash.replace(/#?:~:text.*?$/i, '');
|
|
}
|
|
|
|
// Remove duplicate slashes if not preceded by a protocol
|
|
if (urlObj.pathname) {
|
|
urlObj.pathname = urlObj.pathname.replace(/(?<!\b(?:[a-z][a-z\d+\-.]{1,50}:))\/{2,}/g, '/');
|
|
}
|
|
|
|
// Decode URI octets
|
|
if (urlObj.pathname) {
|
|
try {
|
|
urlObj.pathname = decodeURI(urlObj.pathname);
|
|
} catch (_) {}
|
|
}
|
|
|
|
// Remove directory index
|
|
if (options.removeDirectoryIndex === true) {
|
|
options.removeDirectoryIndex = [/^index\.[a-z]+$/];
|
|
}
|
|
|
|
if (Array.isArray(options.removeDirectoryIndex) && options.removeDirectoryIndex.length > 0) {
|
|
let pathComponents = urlObj.pathname.split('/');
|
|
const lastComponent = pathComponents[pathComponents.length - 1];
|
|
|
|
if (testParameter(lastComponent, options.removeDirectoryIndex)) {
|
|
pathComponents = pathComponents.slice(0, pathComponents.length - 1);
|
|
urlObj.pathname = pathComponents.slice(1).join('/') + '/';
|
|
}
|
|
}
|
|
|
|
if (urlObj.hostname) {
|
|
// Remove trailing dot
|
|
urlObj.hostname = urlObj.hostname.replace(/\.$/, '');
|
|
|
|
// Remove `www.`
|
|
if (options.stripWWW && /^www\.(?!www\.)(?:[a-z\-\d]{1,63})\.(?:[a-z.\-\d]{2,63})$/.test(urlObj.hostname)) {
|
|
// Each label should be max 63 at length (min: 1).
|
|
// Source: https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names
|
|
// Each TLD should be up to 63 characters long (min: 2).
|
|
// It is technically possible to have a single character TLD, but none currently exist.
|
|
urlObj.hostname = urlObj.hostname.replace(/^www\./, '');
|
|
}
|
|
}
|
|
|
|
// Remove query unwanted parameters
|
|
if (Array.isArray(options.removeQueryParameters)) {
|
|
for (const key of [...urlObj.searchParams.keys()]) {
|
|
if (testParameter(key, options.removeQueryParameters)) {
|
|
urlObj.searchParams.delete(key);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (options.removeQueryParameters === true) {
|
|
urlObj.search = '';
|
|
}
|
|
|
|
// Sort query parameters
|
|
if (options.sortQueryParameters) {
|
|
urlObj.searchParams.sort();
|
|
}
|
|
|
|
if (options.removeTrailingSlash) {
|
|
urlObj.pathname = urlObj.pathname.replace(/\/$/, '');
|
|
}
|
|
|
|
const oldUrlString = urlString;
|
|
|
|
// Take advantage of many of the Node `url` normalizations
|
|
urlString = urlObj.toString();
|
|
|
|
if (!options.removeSingleSlash && urlObj.pathname === '/' && !oldUrlString.endsWith('/') && urlObj.hash === '') {
|
|
urlString = urlString.replace(/\/$/, '');
|
|
}
|
|
|
|
// Remove ending `/` unless removeSingleSlash is false
|
|
if ((options.removeTrailingSlash || urlObj.pathname === '/') && urlObj.hash === '' && options.removeSingleSlash) {
|
|
urlString = urlString.replace(/\/$/, '');
|
|
}
|
|
|
|
// Restore relative protocol, if applicable
|
|
if (hasRelativeProtocol && !options.normalizeProtocol) {
|
|
urlString = urlString.replace(/^http:\/\//, '//');
|
|
}
|
|
|
|
// Remove http/https
|
|
if (options.stripProtocol) {
|
|
urlString = urlString.replace(/^(?:https?:)?\/\//, '');
|
|
}
|
|
|
|
return urlString;
|
|
};
|
|
|
|
var normalizeUrl_1 = normalizeUrl;
|
|
|
|
// Returns a wrapper function that returns a wrapped callback
|
|
// The wrapper function should do some stuff, and return a
|
|
// presumably different callback function.
|
|
// This makes sure that own properties are retained, so that
|
|
// decorations and such are not lost along the way.
|
|
var wrappy_1 = wrappy;
|
|
function wrappy (fn, cb) {
|
|
if (fn && cb) return wrappy(fn)(cb)
|
|
|
|
if (typeof fn !== 'function')
|
|
throw new TypeError('need wrapper function')
|
|
|
|
Object.keys(fn).forEach(function (k) {
|
|
wrapper[k] = fn[k];
|
|
});
|
|
|
|
return wrapper
|
|
|
|
function wrapper() {
|
|
var args = new Array(arguments.length);
|
|
for (var i = 0; i < args.length; i++) {
|
|
args[i] = arguments[i];
|
|
}
|
|
var ret = fn.apply(this, args);
|
|
var cb = args[args.length-1];
|
|
if (typeof ret === 'function' && ret !== cb) {
|
|
Object.keys(cb).forEach(function (k) {
|
|
ret[k] = cb[k];
|
|
});
|
|
}
|
|
return ret
|
|
}
|
|
}
|
|
|
|
var once_1 = wrappy_1(once);
|
|
var strict = wrappy_1(onceStrict);
|
|
|
|
once.proto = once(function () {
|
|
Object.defineProperty(Function.prototype, 'once', {
|
|
value: function () {
|
|
return once(this)
|
|
},
|
|
configurable: true
|
|
});
|
|
|
|
Object.defineProperty(Function.prototype, 'onceStrict', {
|
|
value: function () {
|
|
return onceStrict(this)
|
|
},
|
|
configurable: true
|
|
});
|
|
});
|
|
|
|
function once (fn) {
|
|
var f = function () {
|
|
if (f.called) return f.value
|
|
f.called = true;
|
|
return f.value = fn.apply(this, arguments)
|
|
};
|
|
f.called = false;
|
|
return f
|
|
}
|
|
|
|
function onceStrict (fn) {
|
|
var f = function () {
|
|
if (f.called)
|
|
throw new Error(f.onceError)
|
|
f.called = true;
|
|
return f.value = fn.apply(this, arguments)
|
|
};
|
|
var name = fn.name || 'Function wrapped with `once`';
|
|
f.onceError = name + " shouldn't be called more than once";
|
|
f.called = false;
|
|
return f
|
|
}
|
|
once_1.strict = strict;
|
|
|
|
var noop$1 = function() {};
|
|
|
|
var isRequest$1 = function(stream) {
|
|
return stream.setHeader && typeof stream.abort === 'function';
|
|
};
|
|
|
|
var isChildProcess = function(stream) {
|
|
return stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3
|
|
};
|
|
|
|
var eos = function(stream, opts, callback) {
|
|
if (typeof opts === 'function') return eos(stream, null, opts);
|
|
if (!opts) opts = {};
|
|
|
|
callback = once_1(callback || noop$1);
|
|
|
|
var ws = stream._writableState;
|
|
var rs = stream._readableState;
|
|
var readable = opts.readable || (opts.readable !== false && stream.readable);
|
|
var writable = opts.writable || (opts.writable !== false && stream.writable);
|
|
var cancelled = false;
|
|
|
|
var onlegacyfinish = function() {
|
|
if (!stream.writable) onfinish();
|
|
};
|
|
|
|
var onfinish = function() {
|
|
writable = false;
|
|
if (!readable) callback.call(stream);
|
|
};
|
|
|
|
var onend = function() {
|
|
readable = false;
|
|
if (!writable) callback.call(stream);
|
|
};
|
|
|
|
var onexit = function(exitCode) {
|
|
callback.call(stream, exitCode ? new Error('exited with error code: ' + exitCode) : null);
|
|
};
|
|
|
|
var onerror = function(err) {
|
|
callback.call(stream, err);
|
|
};
|
|
|
|
var onclose = function() {
|
|
process.nextTick(onclosenexttick);
|
|
};
|
|
|
|
var onclosenexttick = function() {
|
|
if (cancelled) return;
|
|
if (readable && !(rs && (rs.ended && !rs.destroyed))) return callback.call(stream, new Error('premature close'));
|
|
if (writable && !(ws && (ws.ended && !ws.destroyed))) return callback.call(stream, new Error('premature close'));
|
|
};
|
|
|
|
var onrequest = function() {
|
|
stream.req.on('finish', onfinish);
|
|
};
|
|
|
|
if (isRequest$1(stream)) {
|
|
stream.on('complete', onfinish);
|
|
stream.on('abort', onclose);
|
|
if (stream.req) onrequest();
|
|
else stream.on('request', onrequest);
|
|
} else if (writable && !ws) { // legacy streams
|
|
stream.on('end', onlegacyfinish);
|
|
stream.on('close', onlegacyfinish);
|
|
}
|
|
|
|
if (isChildProcess(stream)) stream.on('exit', onexit);
|
|
|
|
stream.on('end', onend);
|
|
stream.on('finish', onfinish);
|
|
if (opts.error !== false) stream.on('error', onerror);
|
|
stream.on('close', onclose);
|
|
|
|
return function() {
|
|
cancelled = true;
|
|
stream.removeListener('complete', onfinish);
|
|
stream.removeListener('abort', onclose);
|
|
stream.removeListener('request', onrequest);
|
|
if (stream.req) stream.req.removeListener('finish', onfinish);
|
|
stream.removeListener('end', onlegacyfinish);
|
|
stream.removeListener('close', onlegacyfinish);
|
|
stream.removeListener('finish', onfinish);
|
|
stream.removeListener('exit', onexit);
|
|
stream.removeListener('end', onend);
|
|
stream.removeListener('error', onerror);
|
|
stream.removeListener('close', onclose);
|
|
};
|
|
};
|
|
|
|
var endOfStream = eos;
|
|
|
|
// we only need fs to get the ReadStream and WriteStream prototypes
|
|
|
|
var noop = function () {};
|
|
var ancient = /^v?\.0/.test(process.version);
|
|
|
|
var isFn = function (fn) {
|
|
return typeof fn === 'function'
|
|
};
|
|
|
|
var isFS = function (stream) {
|
|
if (!ancient) return false // newer node version do not need to care about fs is a special way
|
|
if (!fs__default['default']) return false // browser
|
|
return (stream instanceof (fs__default['default'].ReadStream || noop) || stream instanceof (fs__default['default'].WriteStream || noop)) && isFn(stream.close)
|
|
};
|
|
|
|
var isRequest = function (stream) {
|
|
return stream.setHeader && isFn(stream.abort)
|
|
};
|
|
|
|
var destroyer = function (stream, reading, writing, callback) {
|
|
callback = once_1(callback);
|
|
|
|
var closed = false;
|
|
stream.on('close', function () {
|
|
closed = true;
|
|
});
|
|
|
|
endOfStream(stream, {readable: reading, writable: writing}, function (err) {
|
|
if (err) return callback(err)
|
|
closed = true;
|
|
callback();
|
|
});
|
|
|
|
var destroyed = false;
|
|
return function (err) {
|
|
if (closed) return
|
|
if (destroyed) return
|
|
destroyed = true;
|
|
|
|
if (isFS(stream)) return stream.close(noop) // use close for fs streams to avoid fd leaks
|
|
if (isRequest(stream)) return stream.abort() // request.destroy just do .end - .abort is what we want
|
|
|
|
if (isFn(stream.destroy)) return stream.destroy()
|
|
|
|
callback(err || new Error('stream was destroyed'));
|
|
}
|
|
};
|
|
|
|
var call = function (fn) {
|
|
fn();
|
|
};
|
|
|
|
var pipe = function (from, to) {
|
|
return from.pipe(to)
|
|
};
|
|
|
|
var pump = function () {
|
|
var streams = Array.prototype.slice.call(arguments);
|
|
var callback = isFn(streams[streams.length - 1] || noop) && streams.pop() || noop;
|
|
|
|
if (Array.isArray(streams[0])) streams = streams[0];
|
|
if (streams.length < 2) throw new Error('pump requires two streams per minimum')
|
|
|
|
var error;
|
|
var destroys = streams.map(function (stream, i) {
|
|
var reading = i < streams.length - 1;
|
|
var writing = i > 0;
|
|
return destroyer(stream, reading, writing, function (err) {
|
|
if (!error) error = err;
|
|
if (err) destroys.forEach(call);
|
|
if (reading) return
|
|
destroys.forEach(call);
|
|
callback(error);
|
|
})
|
|
});
|
|
|
|
return streams.reduce(pipe)
|
|
};
|
|
|
|
var pump_1 = pump;
|
|
|
|
const {PassThrough: PassThroughStream} = require$$0__default$1['default'];
|
|
|
|
var bufferStream = options => {
|
|
options = {...options};
|
|
|
|
const {array} = options;
|
|
let {encoding} = options;
|
|
const isBuffer = encoding === 'buffer';
|
|
let objectMode = false;
|
|
|
|
if (array) {
|
|
objectMode = !(encoding || isBuffer);
|
|
} else {
|
|
encoding = encoding || 'utf8';
|
|
}
|
|
|
|
if (isBuffer) {
|
|
encoding = null;
|
|
}
|
|
|
|
const stream = new PassThroughStream({objectMode});
|
|
|
|
if (encoding) {
|
|
stream.setEncoding(encoding);
|
|
}
|
|
|
|
let length = 0;
|
|
const chunks = [];
|
|
|
|
stream.on('data', chunk => {
|
|
chunks.push(chunk);
|
|
|
|
if (objectMode) {
|
|
length = chunks.length;
|
|
} else {
|
|
length += chunk.length;
|
|
}
|
|
});
|
|
|
|
stream.getBufferedValue = () => {
|
|
if (array) {
|
|
return chunks;
|
|
}
|
|
|
|
return isBuffer ? Buffer.concat(chunks, length) : chunks.join('');
|
|
};
|
|
|
|
stream.getBufferedLength = () => length;
|
|
|
|
return stream;
|
|
};
|
|
|
|
const {constants: BufferConstants} = require$$0__default$2['default'];
|
|
|
|
|
|
|
|
class MaxBufferError extends Error {
|
|
constructor() {
|
|
super('maxBuffer exceeded');
|
|
this.name = 'MaxBufferError';
|
|
}
|
|
}
|
|
|
|
async function getStream(inputStream, options) {
|
|
if (!inputStream) {
|
|
return Promise.reject(new Error('Expected a stream'));
|
|
}
|
|
|
|
options = {
|
|
maxBuffer: Infinity,
|
|
...options
|
|
};
|
|
|
|
const {maxBuffer} = options;
|
|
|
|
let stream;
|
|
await new Promise((resolve, reject) => {
|
|
const rejectPromise = error => {
|
|
// Don't retrieve an oversized buffer.
|
|
if (error && stream.getBufferedLength() <= BufferConstants.MAX_LENGTH) {
|
|
error.bufferedData = stream.getBufferedValue();
|
|
}
|
|
|
|
reject(error);
|
|
};
|
|
|
|
stream = pump_1(inputStream, bufferStream(options), error => {
|
|
if (error) {
|
|
rejectPromise(error);
|
|
return;
|
|
}
|
|
|
|
resolve();
|
|
});
|
|
|
|
stream.on('data', () => {
|
|
if (stream.getBufferedLength() > maxBuffer) {
|
|
rejectPromise(new MaxBufferError());
|
|
}
|
|
});
|
|
});
|
|
|
|
return stream.getBufferedValue();
|
|
}
|
|
|
|
var getStream_1 = getStream;
|
|
// TODO: Remove this for the next major release
|
|
var _default$j = getStream;
|
|
var buffer = (stream, options) => getStream(stream, {...options, encoding: 'buffer'});
|
|
var array = (stream, options) => getStream(stream, {...options, array: true});
|
|
var MaxBufferError_1 = MaxBufferError;
|
|
getStream_1.default = _default$j;
|
|
getStream_1.buffer = buffer;
|
|
getStream_1.array = array;
|
|
getStream_1.MaxBufferError = MaxBufferError_1;
|
|
|
|
// rfc7231 6.1
|
|
const statusCodeCacheableByDefault = new Set([
|
|
200,
|
|
203,
|
|
204,
|
|
206,
|
|
300,
|
|
301,
|
|
404,
|
|
405,
|
|
410,
|
|
414,
|
|
501,
|
|
]);
|
|
|
|
// This implementation does not understand partial responses (206)
|
|
const understoodStatuses = new Set([
|
|
200,
|
|
203,
|
|
204,
|
|
300,
|
|
301,
|
|
302,
|
|
303,
|
|
307,
|
|
308,
|
|
404,
|
|
405,
|
|
410,
|
|
414,
|
|
501,
|
|
]);
|
|
|
|
const errorStatusCodes = new Set([
|
|
500,
|
|
502,
|
|
503,
|
|
504,
|
|
]);
|
|
|
|
const hopByHopHeaders = {
|
|
date: true, // included, because we add Age update Date
|
|
connection: true,
|
|
'keep-alive': true,
|
|
'proxy-authenticate': true,
|
|
'proxy-authorization': true,
|
|
te: true,
|
|
trailer: true,
|
|
'transfer-encoding': true,
|
|
upgrade: true,
|
|
};
|
|
|
|
const excludedFromRevalidationUpdate = {
|
|
// Since the old body is reused, it doesn't make sense to change properties of the body
|
|
'content-length': true,
|
|
'content-encoding': true,
|
|
'transfer-encoding': true,
|
|
'content-range': true,
|
|
};
|
|
|
|
function toNumberOrZero(s) {
|
|
const n = parseInt(s, 10);
|
|
return isFinite(n) ? n : 0;
|
|
}
|
|
|
|
// RFC 5861
|
|
function isErrorResponse(response) {
|
|
// consider undefined response as faulty
|
|
if(!response) {
|
|
return true
|
|
}
|
|
return errorStatusCodes.has(response.status);
|
|
}
|
|
|
|
function parseCacheControl(header) {
|
|
const cc = {};
|
|
if (!header) return cc;
|
|
|
|
// TODO: When there is more than one value present for a given directive (e.g., two Expires header fields, multiple Cache-Control: max-age directives),
|
|
// the directive's value is considered invalid. Caches are encouraged to consider responses that have invalid freshness information to be stale
|
|
const parts = header.trim().split(/\s*,\s*/); // TODO: lame parsing
|
|
for (const part of parts) {
|
|
const [k, v] = part.split(/\s*=\s*/, 2);
|
|
cc[k] = v === undefined ? true : v.replace(/^"|"$/g, ''); // TODO: lame unquoting
|
|
}
|
|
|
|
return cc;
|
|
}
|
|
|
|
function formatCacheControl(cc) {
|
|
let parts = [];
|
|
for (const k in cc) {
|
|
const v = cc[k];
|
|
parts.push(v === true ? k : k + '=' + v);
|
|
}
|
|
if (!parts.length) {
|
|
return undefined;
|
|
}
|
|
return parts.join(', ');
|
|
}
|
|
|
|
var httpCacheSemantics = class CachePolicy {
|
|
constructor(
|
|
req,
|
|
res,
|
|
{
|
|
shared,
|
|
cacheHeuristic,
|
|
immutableMinTimeToLive,
|
|
ignoreCargoCult,
|
|
_fromObject,
|
|
} = {}
|
|
) {
|
|
if (_fromObject) {
|
|
this._fromObject(_fromObject);
|
|
return;
|
|
}
|
|
|
|
if (!res || !res.headers) {
|
|
throw Error('Response headers missing');
|
|
}
|
|
this._assertRequestHasHeaders(req);
|
|
|
|
this._responseTime = this.now();
|
|
this._isShared = shared !== false;
|
|
this._cacheHeuristic =
|
|
undefined !== cacheHeuristic ? cacheHeuristic : 0.1; // 10% matches IE
|
|
this._immutableMinTtl =
|
|
undefined !== immutableMinTimeToLive
|
|
? immutableMinTimeToLive
|
|
: 24 * 3600 * 1000;
|
|
|
|
this._status = 'status' in res ? res.status : 200;
|
|
this._resHeaders = res.headers;
|
|
this._rescc = parseCacheControl(res.headers['cache-control']);
|
|
this._method = 'method' in req ? req.method : 'GET';
|
|
this._url = req.url;
|
|
this._host = req.headers.host;
|
|
this._noAuthorization = !req.headers.authorization;
|
|
this._reqHeaders = res.headers.vary ? req.headers : null; // Don't keep all request headers if they won't be used
|
|
this._reqcc = parseCacheControl(req.headers['cache-control']);
|
|
|
|
// Assume that if someone uses legacy, non-standard uncecessary options they don't understand caching,
|
|
// so there's no point stricly adhering to the blindly copy&pasted directives.
|
|
if (
|
|
ignoreCargoCult &&
|
|
'pre-check' in this._rescc &&
|
|
'post-check' in this._rescc
|
|
) {
|
|
delete this._rescc['pre-check'];
|
|
delete this._rescc['post-check'];
|
|
delete this._rescc['no-cache'];
|
|
delete this._rescc['no-store'];
|
|
delete this._rescc['must-revalidate'];
|
|
this._resHeaders = Object.assign({}, this._resHeaders, {
|
|
'cache-control': formatCacheControl(this._rescc),
|
|
});
|
|
delete this._resHeaders.expires;
|
|
delete this._resHeaders.pragma;
|
|
}
|
|
|
|
// When the Cache-Control header field is not present in a request, caches MUST consider the no-cache request pragma-directive
|
|
// as having the same effect as if "Cache-Control: no-cache" were present (see Section 5.2.1).
|
|
if (
|
|
res.headers['cache-control'] == null &&
|
|
/no-cache/.test(res.headers.pragma)
|
|
) {
|
|
this._rescc['no-cache'] = true;
|
|
}
|
|
}
|
|
|
|
now() {
|
|
return Date.now();
|
|
}
|
|
|
|
storable() {
|
|
// The "no-store" request directive indicates that a cache MUST NOT store any part of either this request or any response to it.
|
|
return !!(
|
|
!this._reqcc['no-store'] &&
|
|
// A cache MUST NOT store a response to any request, unless:
|
|
// The request method is understood by the cache and defined as being cacheable, and
|
|
('GET' === this._method ||
|
|
'HEAD' === this._method ||
|
|
('POST' === this._method && this._hasExplicitExpiration())) &&
|
|
// the response status code is understood by the cache, and
|
|
understoodStatuses.has(this._status) &&
|
|
// the "no-store" cache directive does not appear in request or response header fields, and
|
|
!this._rescc['no-store'] &&
|
|
// the "private" response directive does not appear in the response, if the cache is shared, and
|
|
(!this._isShared || !this._rescc.private) &&
|
|
// the Authorization header field does not appear in the request, if the cache is shared,
|
|
(!this._isShared ||
|
|
this._noAuthorization ||
|
|
this._allowsStoringAuthenticated()) &&
|
|
// the response either:
|
|
// contains an Expires header field, or
|
|
(this._resHeaders.expires ||
|
|
// contains a max-age response directive, or
|
|
// contains a s-maxage response directive and the cache is shared, or
|
|
// contains a public response directive.
|
|
this._rescc['max-age'] ||
|
|
(this._isShared && this._rescc['s-maxage']) ||
|
|
this._rescc.public ||
|
|
// has a status code that is defined as cacheable by default
|
|
statusCodeCacheableByDefault.has(this._status))
|
|
);
|
|
}
|
|
|
|
_hasExplicitExpiration() {
|
|
// 4.2.1 Calculating Freshness Lifetime
|
|
return (
|
|
(this._isShared && this._rescc['s-maxage']) ||
|
|
this._rescc['max-age'] ||
|
|
this._resHeaders.expires
|
|
);
|
|
}
|
|
|
|
_assertRequestHasHeaders(req) {
|
|
if (!req || !req.headers) {
|
|
throw Error('Request headers missing');
|
|
}
|
|
}
|
|
|
|
satisfiesWithoutRevalidation(req) {
|
|
this._assertRequestHasHeaders(req);
|
|
|
|
// When presented with a request, a cache MUST NOT reuse a stored response, unless:
|
|
// the presented request does not contain the no-cache pragma (Section 5.4), nor the no-cache cache directive,
|
|
// unless the stored response is successfully validated (Section 4.3), and
|
|
const requestCC = parseCacheControl(req.headers['cache-control']);
|
|
if (requestCC['no-cache'] || /no-cache/.test(req.headers.pragma)) {
|
|
return false;
|
|
}
|
|
|
|
if (requestCC['max-age'] && this.age() > requestCC['max-age']) {
|
|
return false;
|
|
}
|
|
|
|
if (
|
|
requestCC['min-fresh'] &&
|
|
this.timeToLive() < 1000 * requestCC['min-fresh']
|
|
) {
|
|
return false;
|
|
}
|
|
|
|
// the stored response is either:
|
|
// fresh, or allowed to be served stale
|
|
if (this.stale()) {
|
|
const allowsStale =
|
|
requestCC['max-stale'] &&
|
|
!this._rescc['must-revalidate'] &&
|
|
(true === requestCC['max-stale'] ||
|
|
requestCC['max-stale'] > this.age() - this.maxAge());
|
|
if (!allowsStale) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return this._requestMatches(req, false);
|
|
}
|
|
|
|
_requestMatches(req, allowHeadMethod) {
|
|
// The presented effective request URI and that of the stored response match, and
|
|
return (
|
|
(!this._url || this._url === req.url) &&
|
|
this._host === req.headers.host &&
|
|
// the request method associated with the stored response allows it to be used for the presented request, and
|
|
(!req.method ||
|
|
this._method === req.method ||
|
|
(allowHeadMethod && 'HEAD' === req.method)) &&
|
|
// selecting header fields nominated by the stored response (if any) match those presented, and
|
|
this._varyMatches(req)
|
|
);
|
|
}
|
|
|
|
_allowsStoringAuthenticated() {
|
|
// following Cache-Control response directives (Section 5.2.2) have such an effect: must-revalidate, public, and s-maxage.
|
|
return (
|
|
this._rescc['must-revalidate'] ||
|
|
this._rescc.public ||
|
|
this._rescc['s-maxage']
|
|
);
|
|
}
|
|
|
|
_varyMatches(req) {
|
|
if (!this._resHeaders.vary) {
|
|
return true;
|
|
}
|
|
|
|
// A Vary header field-value of "*" always fails to match
|
|
if (this._resHeaders.vary === '*') {
|
|
return false;
|
|
}
|
|
|
|
const fields = this._resHeaders.vary
|
|
.trim()
|
|
.toLowerCase()
|
|
.split(/\s*,\s*/);
|
|
for (const name of fields) {
|
|
if (req.headers[name] !== this._reqHeaders[name]) return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
_copyWithoutHopByHopHeaders(inHeaders) {
|
|
const headers = {};
|
|
for (const name in inHeaders) {
|
|
if (hopByHopHeaders[name]) continue;
|
|
headers[name] = inHeaders[name];
|
|
}
|
|
// 9.1. Connection
|
|
if (inHeaders.connection) {
|
|
const tokens = inHeaders.connection.trim().split(/\s*,\s*/);
|
|
for (const name of tokens) {
|
|
delete headers[name];
|
|
}
|
|
}
|
|
if (headers.warning) {
|
|
const warnings = headers.warning.split(/,/).filter(warning => {
|
|
return !/^\s*1[0-9][0-9]/.test(warning);
|
|
});
|
|
if (!warnings.length) {
|
|
delete headers.warning;
|
|
} else {
|
|
headers.warning = warnings.join(',').trim();
|
|
}
|
|
}
|
|
return headers;
|
|
}
|
|
|
|
responseHeaders() {
|
|
const headers = this._copyWithoutHopByHopHeaders(this._resHeaders);
|
|
const age = this.age();
|
|
|
|
// A cache SHOULD generate 113 warning if it heuristically chose a freshness
|
|
// lifetime greater than 24 hours and the response's age is greater than 24 hours.
|
|
if (
|
|
age > 3600 * 24 &&
|
|
!this._hasExplicitExpiration() &&
|
|
this.maxAge() > 3600 * 24
|
|
) {
|
|
headers.warning =
|
|
(headers.warning ? `${headers.warning}, ` : '') +
|
|
'113 - "rfc7234 5.5.4"';
|
|
}
|
|
headers.age = `${Math.round(age)}`;
|
|
headers.date = new Date(this.now()).toUTCString();
|
|
return headers;
|
|
}
|
|
|
|
/**
|
|
* Value of the Date response header or current time if Date was invalid
|
|
* @return timestamp
|
|
*/
|
|
date() {
|
|
const serverDate = Date.parse(this._resHeaders.date);
|
|
if (isFinite(serverDate)) {
|
|
return serverDate;
|
|
}
|
|
return this._responseTime;
|
|
}
|
|
|
|
/**
|
|
* Value of the Age header, in seconds, updated for the current time.
|
|
* May be fractional.
|
|
*
|
|
* @return Number
|
|
*/
|
|
age() {
|
|
let age = this._ageValue();
|
|
|
|
const residentTime = (this.now() - this._responseTime) / 1000;
|
|
return age + residentTime;
|
|
}
|
|
|
|
_ageValue() {
|
|
return toNumberOrZero(this._resHeaders.age);
|
|
}
|
|
|
|
/**
|
|
* Value of applicable max-age (or heuristic equivalent) in seconds. This counts since response's `Date`.
|
|
*
|
|
* For an up-to-date value, see `timeToLive()`.
|
|
*
|
|
* @return Number
|
|
*/
|
|
maxAge() {
|
|
if (!this.storable() || this._rescc['no-cache']) {
|
|
return 0;
|
|
}
|
|
|
|
// Shared responses with cookies are cacheable according to the RFC, but IMHO it'd be unwise to do so by default
|
|
// so this implementation requires explicit opt-in via public header
|
|
if (
|
|
this._isShared &&
|
|
(this._resHeaders['set-cookie'] &&
|
|
!this._rescc.public &&
|
|
!this._rescc.immutable)
|
|
) {
|
|
return 0;
|
|
}
|
|
|
|
if (this._resHeaders.vary === '*') {
|
|
return 0;
|
|
}
|
|
|
|
if (this._isShared) {
|
|
if (this._rescc['proxy-revalidate']) {
|
|
return 0;
|
|
}
|
|
// if a response includes the s-maxage directive, a shared cache recipient MUST ignore the Expires field.
|
|
if (this._rescc['s-maxage']) {
|
|
return toNumberOrZero(this._rescc['s-maxage']);
|
|
}
|
|
}
|
|
|
|
// If a response includes a Cache-Control field with the max-age directive, a recipient MUST ignore the Expires field.
|
|
if (this._rescc['max-age']) {
|
|
return toNumberOrZero(this._rescc['max-age']);
|
|
}
|
|
|
|
const defaultMinTtl = this._rescc.immutable ? this._immutableMinTtl : 0;
|
|
|
|
const serverDate = this.date();
|
|
if (this._resHeaders.expires) {
|
|
const expires = Date.parse(this._resHeaders.expires);
|
|
// A cache recipient MUST interpret invalid date formats, especially the value "0", as representing a time in the past (i.e., "already expired").
|
|
if (Number.isNaN(expires) || expires < serverDate) {
|
|
return 0;
|
|
}
|
|
return Math.max(defaultMinTtl, (expires - serverDate) / 1000);
|
|
}
|
|
|
|
if (this._resHeaders['last-modified']) {
|
|
const lastModified = Date.parse(this._resHeaders['last-modified']);
|
|
if (isFinite(lastModified) && serverDate > lastModified) {
|
|
return Math.max(
|
|
defaultMinTtl,
|
|
((serverDate - lastModified) / 1000) * this._cacheHeuristic
|
|
);
|
|
}
|
|
}
|
|
|
|
return defaultMinTtl;
|
|
}
|
|
|
|
timeToLive() {
|
|
const age = this.maxAge() - this.age();
|
|
const staleIfErrorAge = age + toNumberOrZero(this._rescc['stale-if-error']);
|
|
const staleWhileRevalidateAge = age + toNumberOrZero(this._rescc['stale-while-revalidate']);
|
|
return Math.max(0, age, staleIfErrorAge, staleWhileRevalidateAge) * 1000;
|
|
}
|
|
|
|
stale() {
|
|
return this.maxAge() <= this.age();
|
|
}
|
|
|
|
_useStaleIfError() {
|
|
return this.maxAge() + toNumberOrZero(this._rescc['stale-if-error']) > this.age();
|
|
}
|
|
|
|
useStaleWhileRevalidate() {
|
|
return this.maxAge() + toNumberOrZero(this._rescc['stale-while-revalidate']) > this.age();
|
|
}
|
|
|
|
static fromObject(obj) {
|
|
return new this(undefined, undefined, { _fromObject: obj });
|
|
}
|
|
|
|
_fromObject(obj) {
|
|
if (this._responseTime) throw Error('Reinitialized');
|
|
if (!obj || obj.v !== 1) throw Error('Invalid serialization');
|
|
|
|
this._responseTime = obj.t;
|
|
this._isShared = obj.sh;
|
|
this._cacheHeuristic = obj.ch;
|
|
this._immutableMinTtl =
|
|
obj.imm !== undefined ? obj.imm : 24 * 3600 * 1000;
|
|
this._status = obj.st;
|
|
this._resHeaders = obj.resh;
|
|
this._rescc = obj.rescc;
|
|
this._method = obj.m;
|
|
this._url = obj.u;
|
|
this._host = obj.h;
|
|
this._noAuthorization = obj.a;
|
|
this._reqHeaders = obj.reqh;
|
|
this._reqcc = obj.reqcc;
|
|
}
|
|
|
|
toObject() {
|
|
return {
|
|
v: 1,
|
|
t: this._responseTime,
|
|
sh: this._isShared,
|
|
ch: this._cacheHeuristic,
|
|
imm: this._immutableMinTtl,
|
|
st: this._status,
|
|
resh: this._resHeaders,
|
|
rescc: this._rescc,
|
|
m: this._method,
|
|
u: this._url,
|
|
h: this._host,
|
|
a: this._noAuthorization,
|
|
reqh: this._reqHeaders,
|
|
reqcc: this._reqcc,
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Headers for sending to the origin server to revalidate stale response.
|
|
* Allows server to return 304 to allow reuse of the previous response.
|
|
*
|
|
* Hop by hop headers are always stripped.
|
|
* Revalidation headers may be added or removed, depending on request.
|
|
*/
|
|
revalidationHeaders(incomingReq) {
|
|
this._assertRequestHasHeaders(incomingReq);
|
|
const headers = this._copyWithoutHopByHopHeaders(incomingReq.headers);
|
|
|
|
// This implementation does not understand range requests
|
|
delete headers['if-range'];
|
|
|
|
if (!this._requestMatches(incomingReq, true) || !this.storable()) {
|
|
// revalidation allowed via HEAD
|
|
// not for the same resource, or wasn't allowed to be cached anyway
|
|
delete headers['if-none-match'];
|
|
delete headers['if-modified-since'];
|
|
return headers;
|
|
}
|
|
|
|
/* MUST send that entity-tag in any cache validation request (using If-Match or If-None-Match) if an entity-tag has been provided by the origin server. */
|
|
if (this._resHeaders.etag) {
|
|
headers['if-none-match'] = headers['if-none-match']
|
|
? `${headers['if-none-match']}, ${this._resHeaders.etag}`
|
|
: this._resHeaders.etag;
|
|
}
|
|
|
|
// Clients MAY issue simple (non-subrange) GET requests with either weak validators or strong validators. Clients MUST NOT use weak validators in other forms of request.
|
|
const forbidsWeakValidators =
|
|
headers['accept-ranges'] ||
|
|
headers['if-match'] ||
|
|
headers['if-unmodified-since'] ||
|
|
(this._method && this._method != 'GET');
|
|
|
|
/* SHOULD send the Last-Modified value in non-subrange cache validation requests (using If-Modified-Since) if only a Last-Modified value has been provided by the origin server.
|
|
Note: This implementation does not understand partial responses (206) */
|
|
if (forbidsWeakValidators) {
|
|
delete headers['if-modified-since'];
|
|
|
|
if (headers['if-none-match']) {
|
|
const etags = headers['if-none-match']
|
|
.split(/,/)
|
|
.filter(etag => {
|
|
return !/^\s*W\//.test(etag);
|
|
});
|
|
if (!etags.length) {
|
|
delete headers['if-none-match'];
|
|
} else {
|
|
headers['if-none-match'] = etags.join(',').trim();
|
|
}
|
|
}
|
|
} else if (
|
|
this._resHeaders['last-modified'] &&
|
|
!headers['if-modified-since']
|
|
) {
|
|
headers['if-modified-since'] = this._resHeaders['last-modified'];
|
|
}
|
|
|
|
return headers;
|
|
}
|
|
|
|
/**
|
|
* Creates new CachePolicy with information combined from the previews response,
|
|
* and the new revalidation response.
|
|
*
|
|
* Returns {policy, modified} where modified is a boolean indicating
|
|
* whether the response body has been modified, and old cached body can't be used.
|
|
*
|
|
* @return {Object} {policy: CachePolicy, modified: Boolean}
|
|
*/
|
|
revalidatedPolicy(request, response) {
|
|
this._assertRequestHasHeaders(request);
|
|
if(this._useStaleIfError() && isErrorResponse(response)) { // I consider the revalidation request unsuccessful
|
|
return {
|
|
modified: false,
|
|
matches: false,
|
|
policy: this,
|
|
};
|
|
}
|
|
if (!response || !response.headers) {
|
|
throw Error('Response headers missing');
|
|
}
|
|
|
|
// These aren't going to be supported exactly, since one CachePolicy object
|
|
// doesn't know about all the other cached objects.
|
|
let matches = false;
|
|
if (response.status !== undefined && response.status != 304) {
|
|
matches = false;
|
|
} else if (
|
|
response.headers.etag &&
|
|
!/^\s*W\//.test(response.headers.etag)
|
|
) {
|
|
// "All of the stored responses with the same strong validator are selected.
|
|
// If none of the stored responses contain the same strong validator,
|
|
// then the cache MUST NOT use the new response to update any stored responses."
|
|
matches =
|
|
this._resHeaders.etag &&
|
|
this._resHeaders.etag.replace(/^\s*W\//, '') ===
|
|
response.headers.etag;
|
|
} else if (this._resHeaders.etag && response.headers.etag) {
|
|
// "If the new response contains a weak validator and that validator corresponds
|
|
// to one of the cache's stored responses,
|
|
// then the most recent of those matching stored responses is selected for update."
|
|
matches =
|
|
this._resHeaders.etag.replace(/^\s*W\//, '') ===
|
|
response.headers.etag.replace(/^\s*W\//, '');
|
|
} else if (this._resHeaders['last-modified']) {
|
|
matches =
|
|
this._resHeaders['last-modified'] ===
|
|
response.headers['last-modified'];
|
|
} else {
|
|
// If the new response does not include any form of validator (such as in the case where
|
|
// a client generates an If-Modified-Since request from a source other than the Last-Modified
|
|
// response header field), and there is only one stored response, and that stored response also
|
|
// lacks a validator, then that stored response is selected for update.
|
|
if (
|
|
!this._resHeaders.etag &&
|
|
!this._resHeaders['last-modified'] &&
|
|
!response.headers.etag &&
|
|
!response.headers['last-modified']
|
|
) {
|
|
matches = true;
|
|
}
|
|
}
|
|
|
|
if (!matches) {
|
|
return {
|
|
policy: new this.constructor(request, response),
|
|
// Client receiving 304 without body, even if it's invalid/mismatched has no option
|
|
// but to reuse a cached body. We don't have a good way to tell clients to do
|
|
// error recovery in such case.
|
|
modified: response.status != 304,
|
|
matches: false,
|
|
};
|
|
}
|
|
|
|
// use other header fields provided in the 304 (Not Modified) response to replace all instances
|
|
// of the corresponding header fields in the stored response.
|
|
const headers = {};
|
|
for (const k in this._resHeaders) {
|
|
headers[k] =
|
|
k in response.headers && !excludedFromRevalidationUpdate[k]
|
|
? response.headers[k]
|
|
: this._resHeaders[k];
|
|
}
|
|
|
|
const newResponse = Object.assign({}, response, {
|
|
status: this._status,
|
|
method: this._method,
|
|
headers,
|
|
});
|
|
return {
|
|
policy: new this.constructor(request, newResponse, {
|
|
shared: this._isShared,
|
|
cacheHeuristic: this._cacheHeuristic,
|
|
immutableMinTimeToLive: this._immutableMinTtl,
|
|
}),
|
|
modified: false,
|
|
matches: true,
|
|
};
|
|
}
|
|
};
|
|
|
|
var lowercaseKeys = object => {
|
|
const result = {};
|
|
|
|
for (const [key, value] of Object.entries(object)) {
|
|
result[key.toLowerCase()] = value;
|
|
}
|
|
|
|
return result;
|
|
};
|
|
|
|
const Readable$1 = require$$0__default$1['default'].Readable;
|
|
|
|
|
|
class Response extends Readable$1 {
|
|
constructor(statusCode, headers, body, url) {
|
|
if (typeof statusCode !== 'number') {
|
|
throw new TypeError('Argument `statusCode` should be a number');
|
|
}
|
|
if (typeof headers !== 'object') {
|
|
throw new TypeError('Argument `headers` should be an object');
|
|
}
|
|
if (!(body instanceof Buffer)) {
|
|
throw new TypeError('Argument `body` should be a buffer');
|
|
}
|
|
if (typeof url !== 'string') {
|
|
throw new TypeError('Argument `url` should be a string');
|
|
}
|
|
|
|
super();
|
|
this.statusCode = statusCode;
|
|
this.headers = lowercaseKeys(headers);
|
|
this.body = body;
|
|
this.url = url;
|
|
}
|
|
|
|
_read() {
|
|
this.push(this.body);
|
|
this.push(null);
|
|
}
|
|
}
|
|
|
|
var src$3 = Response;
|
|
|
|
// We define these manually to ensure they're always copied
|
|
// even if they would move up the prototype chain
|
|
// https://nodejs.org/api/http.html#http_class_http_incomingmessage
|
|
const knownProps = [
|
|
'destroy',
|
|
'setTimeout',
|
|
'socket',
|
|
'headers',
|
|
'trailers',
|
|
'rawHeaders',
|
|
'statusCode',
|
|
'httpVersion',
|
|
'httpVersionMinor',
|
|
'httpVersionMajor',
|
|
'rawTrailers',
|
|
'statusMessage'
|
|
];
|
|
|
|
var mimicResponse$1 = (fromStream, toStream) => {
|
|
const fromProps = new Set(Object.keys(fromStream).concat(knownProps));
|
|
|
|
for (const prop of fromProps) {
|
|
// Don't overwrite existing properties
|
|
if (prop in toStream) {
|
|
continue;
|
|
}
|
|
|
|
toStream[prop] = typeof fromStream[prop] === 'function' ? fromStream[prop].bind(fromStream) : fromStream[prop];
|
|
}
|
|
};
|
|
|
|
const PassThrough$1 = require$$0__default$1['default'].PassThrough;
|
|
|
|
|
|
const cloneResponse = response => {
|
|
if (!(response && response.pipe)) {
|
|
throw new TypeError('Parameter `response` must be a response stream.');
|
|
}
|
|
|
|
const clone = new PassThrough$1();
|
|
mimicResponse$1(response, clone);
|
|
|
|
return response.pipe(clone);
|
|
};
|
|
|
|
var src$2 = cloneResponse;
|
|
|
|
//TODO: handle reviver/dehydrate function like normal
|
|
//and handle indentation, like normal.
|
|
//if anyone needs this... please send pull request.
|
|
|
|
var stringify = function stringify (o) {
|
|
if('undefined' == typeof o) return o
|
|
|
|
if(o && Buffer.isBuffer(o))
|
|
return JSON.stringify(':base64:' + o.toString('base64'))
|
|
|
|
if(o && o.toJSON)
|
|
o = o.toJSON();
|
|
|
|
if(o && 'object' === typeof o) {
|
|
var s = '';
|
|
var array = Array.isArray(o);
|
|
s = array ? '[' : '{';
|
|
var first = true;
|
|
|
|
for(var k in o) {
|
|
var ignore = 'function' == typeof o[k] || (!array && 'undefined' === typeof o[k]);
|
|
if(Object.hasOwnProperty.call(o, k) && !ignore) {
|
|
if(!first)
|
|
s += ',';
|
|
first = false;
|
|
if (array) {
|
|
if(o[k] == undefined)
|
|
s += 'null';
|
|
else
|
|
s += stringify(o[k]);
|
|
} else if (o[k] !== void(0)) {
|
|
s += stringify(k) + ':' + stringify(o[k]);
|
|
}
|
|
}
|
|
}
|
|
|
|
s += array ? ']' : '}';
|
|
|
|
return s
|
|
} else if ('string' === typeof o) {
|
|
return JSON.stringify(/^:/.test(o) ? ':' + o : o)
|
|
} else if ('undefined' === typeof o) {
|
|
return 'null';
|
|
} else
|
|
return JSON.stringify(o)
|
|
};
|
|
|
|
var parse = function (s) {
|
|
return JSON.parse(s, function (key, value) {
|
|
if('string' === typeof value) {
|
|
if(/^:base64:/.test(value))
|
|
return Buffer.from(value.substring(8), 'base64')
|
|
else
|
|
return /^:/.test(value) ? value.substring(1) : value
|
|
}
|
|
return value
|
|
})
|
|
};
|
|
|
|
var jsonBuffer = {
|
|
stringify: stringify,
|
|
parse: parse
|
|
};
|
|
|
|
const loadStore = opts => {
|
|
const adapters = {
|
|
redis: '@keyv/redis',
|
|
mongodb: '@keyv/mongo',
|
|
mongo: '@keyv/mongo',
|
|
sqlite: '@keyv/sqlite',
|
|
postgresql: '@keyv/postgres',
|
|
postgres: '@keyv/postgres',
|
|
mysql: '@keyv/mysql'
|
|
};
|
|
if (opts.adapter || opts.uri) {
|
|
const adapter = opts.adapter || /^[^:]*/.exec(opts.uri)[0];
|
|
return new (commonjsRequire(adapters[adapter]))(opts);
|
|
}
|
|
|
|
return new Map();
|
|
};
|
|
|
|
class Keyv extends EventEmitter__default['default'] {
|
|
constructor(uri, opts) {
|
|
super();
|
|
this.opts = Object.assign(
|
|
{
|
|
namespace: 'keyv',
|
|
serialize: jsonBuffer.stringify,
|
|
deserialize: jsonBuffer.parse
|
|
},
|
|
(typeof uri === 'string') ? { uri } : uri,
|
|
opts
|
|
);
|
|
|
|
if (!this.opts.store) {
|
|
const adapterOpts = Object.assign({}, this.opts);
|
|
this.opts.store = loadStore(adapterOpts);
|
|
}
|
|
|
|
if (typeof this.opts.store.on === 'function') {
|
|
this.opts.store.on('error', err => this.emit('error', err));
|
|
}
|
|
|
|
this.opts.store.namespace = this.opts.namespace;
|
|
}
|
|
|
|
_getKeyPrefix(key) {
|
|
return `${this.opts.namespace}:${key}`;
|
|
}
|
|
|
|
get(key, opts) {
|
|
const keyPrefixed = this._getKeyPrefix(key);
|
|
const { store } = this.opts;
|
|
return Promise.resolve()
|
|
.then(() => store.get(keyPrefixed))
|
|
.then(data => {
|
|
return (typeof data === 'string') ? this.opts.deserialize(data) : data;
|
|
})
|
|
.then(data => {
|
|
if (data === undefined) {
|
|
return undefined;
|
|
}
|
|
|
|
if (typeof data.expires === 'number' && Date.now() > data.expires) {
|
|
this.delete(key);
|
|
return undefined;
|
|
}
|
|
|
|
return (opts && opts.raw) ? data : data.value;
|
|
});
|
|
}
|
|
|
|
set(key, value, ttl) {
|
|
const keyPrefixed = this._getKeyPrefix(key);
|
|
if (typeof ttl === 'undefined') {
|
|
ttl = this.opts.ttl;
|
|
}
|
|
|
|
if (ttl === 0) {
|
|
ttl = undefined;
|
|
}
|
|
|
|
const { store } = this.opts;
|
|
|
|
return Promise.resolve()
|
|
.then(() => {
|
|
const expires = (typeof ttl === 'number') ? (Date.now() + ttl) : null;
|
|
value = { value, expires };
|
|
return this.opts.serialize(value);
|
|
})
|
|
.then(value => store.set(keyPrefixed, value, ttl))
|
|
.then(() => true);
|
|
}
|
|
|
|
delete(key) {
|
|
const keyPrefixed = this._getKeyPrefix(key);
|
|
const { store } = this.opts;
|
|
return Promise.resolve()
|
|
.then(() => store.delete(keyPrefixed));
|
|
}
|
|
|
|
clear() {
|
|
const { store } = this.opts;
|
|
return Promise.resolve()
|
|
.then(() => store.clear());
|
|
}
|
|
}
|
|
|
|
var src$1 = Keyv;
|
|
|
|
class CacheableRequest {
|
|
constructor(request, cacheAdapter) {
|
|
if (typeof request !== 'function') {
|
|
throw new TypeError('Parameter `request` must be a function');
|
|
}
|
|
|
|
this.cache = new src$1({
|
|
uri: typeof cacheAdapter === 'string' && cacheAdapter,
|
|
store: typeof cacheAdapter !== 'string' && cacheAdapter,
|
|
namespace: 'cacheable-request'
|
|
});
|
|
|
|
return this.createCacheableRequest(request);
|
|
}
|
|
|
|
createCacheableRequest(request) {
|
|
return (opts, cb) => {
|
|
let url;
|
|
if (typeof opts === 'string') {
|
|
url = normalizeUrlObject(url_1__default['default'].parse(opts));
|
|
opts = {};
|
|
} else if (opts instanceof url_1__default['default'].URL) {
|
|
url = normalizeUrlObject(url_1__default['default'].parse(opts.toString()));
|
|
opts = {};
|
|
} else {
|
|
const [pathname, ...searchParts] = (opts.path || '').split('?');
|
|
const search = searchParts.length > 0 ?
|
|
`?${searchParts.join('?')}` :
|
|
'';
|
|
url = normalizeUrlObject({ ...opts, pathname, search });
|
|
}
|
|
|
|
opts = {
|
|
headers: {},
|
|
method: 'GET',
|
|
cache: true,
|
|
strictTtl: false,
|
|
automaticFailover: false,
|
|
...opts,
|
|
...urlObjectToRequestOptions(url)
|
|
};
|
|
opts.headers = lowercaseKeys(opts.headers);
|
|
|
|
const ee = new EventEmitter__default['default']();
|
|
const normalizedUrlString = normalizeUrl_1(
|
|
url_1__default['default'].format(url),
|
|
{
|
|
stripWWW: false,
|
|
removeTrailingSlash: false,
|
|
stripAuthentication: false
|
|
}
|
|
);
|
|
const key = `${opts.method}:${normalizedUrlString}`;
|
|
let revalidate = false;
|
|
let madeRequest = false;
|
|
|
|
const makeRequest = opts => {
|
|
madeRequest = true;
|
|
let requestErrored = false;
|
|
let requestErrorCallback;
|
|
|
|
const requestErrorPromise = new Promise(resolve => {
|
|
requestErrorCallback = () => {
|
|
if (!requestErrored) {
|
|
requestErrored = true;
|
|
resolve();
|
|
}
|
|
};
|
|
});
|
|
|
|
const handler = response => {
|
|
if (revalidate && !opts.forceRefresh) {
|
|
response.status = response.statusCode;
|
|
const revalidatedPolicy = httpCacheSemantics.fromObject(revalidate.cachePolicy).revalidatedPolicy(opts, response);
|
|
if (!revalidatedPolicy.modified) {
|
|
const headers = revalidatedPolicy.policy.responseHeaders();
|
|
response = new src$3(revalidate.statusCode, headers, revalidate.body, revalidate.url);
|
|
response.cachePolicy = revalidatedPolicy.policy;
|
|
response.fromCache = true;
|
|
}
|
|
}
|
|
|
|
if (!response.fromCache) {
|
|
response.cachePolicy = new httpCacheSemantics(opts, response, opts);
|
|
response.fromCache = false;
|
|
}
|
|
|
|
let clonedResponse;
|
|
if (opts.cache && response.cachePolicy.storable()) {
|
|
clonedResponse = src$2(response);
|
|
|
|
(async () => {
|
|
try {
|
|
const bodyPromise = getStream_1.buffer(response);
|
|
|
|
await Promise.race([
|
|
requestErrorPromise,
|
|
new Promise(resolve => response.once('end', resolve))
|
|
]);
|
|
|
|
if (requestErrored) {
|
|
return;
|
|
}
|
|
|
|
const body = await bodyPromise;
|
|
|
|
const value = {
|
|
cachePolicy: response.cachePolicy.toObject(),
|
|
url: response.url,
|
|
statusCode: response.fromCache ? revalidate.statusCode : response.statusCode,
|
|
body
|
|
};
|
|
|
|
let ttl = opts.strictTtl ? response.cachePolicy.timeToLive() : undefined;
|
|
if (opts.maxTtl) {
|
|
ttl = ttl ? Math.min(ttl, opts.maxTtl) : opts.maxTtl;
|
|
}
|
|
|
|
await this.cache.set(key, value, ttl);
|
|
} catch (error) {
|
|
ee.emit('error', new CacheableRequest.CacheError(error));
|
|
}
|
|
})();
|
|
} else if (opts.cache && revalidate) {
|
|
(async () => {
|
|
try {
|
|
await this.cache.delete(key);
|
|
} catch (error) {
|
|
ee.emit('error', new CacheableRequest.CacheError(error));
|
|
}
|
|
})();
|
|
}
|
|
|
|
ee.emit('response', clonedResponse || response);
|
|
if (typeof cb === 'function') {
|
|
cb(clonedResponse || response);
|
|
}
|
|
};
|
|
|
|
try {
|
|
const req = request(opts, handler);
|
|
req.once('error', requestErrorCallback);
|
|
req.once('abort', requestErrorCallback);
|
|
ee.emit('request', req);
|
|
} catch (error) {
|
|
ee.emit('error', new CacheableRequest.RequestError(error));
|
|
}
|
|
};
|
|
|
|
(async () => {
|
|
const get = async opts => {
|
|
await Promise.resolve();
|
|
|
|
const cacheEntry = opts.cache ? await this.cache.get(key) : undefined;
|
|
if (typeof cacheEntry === 'undefined') {
|
|
return makeRequest(opts);
|
|
}
|
|
|
|
const policy = httpCacheSemantics.fromObject(cacheEntry.cachePolicy);
|
|
if (policy.satisfiesWithoutRevalidation(opts) && !opts.forceRefresh) {
|
|
const headers = policy.responseHeaders();
|
|
const response = new src$3(cacheEntry.statusCode, headers, cacheEntry.body, cacheEntry.url);
|
|
response.cachePolicy = policy;
|
|
response.fromCache = true;
|
|
|
|
ee.emit('response', response);
|
|
if (typeof cb === 'function') {
|
|
cb(response);
|
|
}
|
|
} else {
|
|
revalidate = cacheEntry;
|
|
opts.headers = policy.revalidationHeaders(opts);
|
|
makeRequest(opts);
|
|
}
|
|
};
|
|
|
|
const errorHandler = error => ee.emit('error', new CacheableRequest.CacheError(error));
|
|
this.cache.once('error', errorHandler);
|
|
ee.on('response', () => this.cache.removeListener('error', errorHandler));
|
|
|
|
try {
|
|
await get(opts);
|
|
} catch (error) {
|
|
if (opts.automaticFailover && !madeRequest) {
|
|
makeRequest(opts);
|
|
}
|
|
|
|
ee.emit('error', new CacheableRequest.CacheError(error));
|
|
}
|
|
})();
|
|
|
|
return ee;
|
|
};
|
|
}
|
|
}
|
|
|
|
function urlObjectToRequestOptions(url) {
|
|
const options = { ...url };
|
|
options.path = `${url.pathname || '/'}${url.search || ''}`;
|
|
delete options.pathname;
|
|
delete options.search;
|
|
return options;
|
|
}
|
|
|
|
function normalizeUrlObject(url) {
|
|
// If url was parsed by url.parse or new URL:
|
|
// - hostname will be set
|
|
// - host will be hostname[:port]
|
|
// - port will be set if it was explicit in the parsed string
|
|
// Otherwise, url was from request options:
|
|
// - hostname or host may be set
|
|
// - host shall not have port encoded
|
|
return {
|
|
protocol: url.protocol,
|
|
auth: url.auth,
|
|
hostname: url.hostname || url.host || 'localhost',
|
|
port: url.port,
|
|
pathname: url.pathname,
|
|
search: url.search
|
|
};
|
|
}
|
|
|
|
CacheableRequest.RequestError = class extends Error {
|
|
constructor(error) {
|
|
super(error.message);
|
|
this.name = 'RequestError';
|
|
Object.assign(this, error);
|
|
}
|
|
};
|
|
|
|
CacheableRequest.CacheError = class extends Error {
|
|
constructor(error) {
|
|
super(error.message);
|
|
this.name = 'CacheError';
|
|
Object.assign(this, error);
|
|
}
|
|
};
|
|
|
|
var src = CacheableRequest;
|
|
|
|
// We define these manually to ensure they're always copied
|
|
// even if they would move up the prototype chain
|
|
// https://nodejs.org/api/http.html#http_class_http_incomingmessage
|
|
const knownProperties = [
|
|
'aborted',
|
|
'complete',
|
|
'headers',
|
|
'httpVersion',
|
|
'httpVersionMinor',
|
|
'httpVersionMajor',
|
|
'method',
|
|
'rawHeaders',
|
|
'rawTrailers',
|
|
'setTimeout',
|
|
'socket',
|
|
'statusCode',
|
|
'statusMessage',
|
|
'trailers',
|
|
'url'
|
|
];
|
|
|
|
var mimicResponse = (fromStream, toStream) => {
|
|
if (toStream._readableState.autoDestroy) {
|
|
throw new Error('The second stream must have the `autoDestroy` option set to `false`');
|
|
}
|
|
|
|
const fromProperties = new Set(Object.keys(fromStream).concat(knownProperties));
|
|
|
|
const properties = {};
|
|
|
|
for (const property of fromProperties) {
|
|
// Don't overwrite existing properties.
|
|
if (property in toStream) {
|
|
continue;
|
|
}
|
|
|
|
properties[property] = {
|
|
get() {
|
|
const value = fromStream[property];
|
|
const isFunction = typeof value === 'function';
|
|
|
|
return isFunction ? value.bind(fromStream) : value;
|
|
},
|
|
set(value) {
|
|
fromStream[property] = value;
|
|
},
|
|
enumerable: true,
|
|
configurable: false
|
|
};
|
|
}
|
|
|
|
Object.defineProperties(toStream, properties);
|
|
|
|
fromStream.once('aborted', () => {
|
|
toStream.destroy();
|
|
|
|
toStream.emit('aborted');
|
|
});
|
|
|
|
fromStream.once('close', () => {
|
|
if (fromStream.complete) {
|
|
if (toStream.readable) {
|
|
toStream.once('end', () => {
|
|
toStream.emit('close');
|
|
});
|
|
} else {
|
|
toStream.emit('close');
|
|
}
|
|
} else {
|
|
toStream.emit('close');
|
|
}
|
|
});
|
|
|
|
return toStream;
|
|
};
|
|
|
|
const {Transform, PassThrough} = require$$0__default$1['default'];
|
|
|
|
|
|
|
|
var decompressResponse = response => {
|
|
const contentEncoding = (response.headers['content-encoding'] || '').toLowerCase();
|
|
|
|
if (!['gzip', 'deflate', 'br'].includes(contentEncoding)) {
|
|
return response;
|
|
}
|
|
|
|
// TODO: Remove this when targeting Node.js 12.
|
|
const isBrotli = contentEncoding === 'br';
|
|
if (isBrotli && typeof zlib__default['default'].createBrotliDecompress !== 'function') {
|
|
response.destroy(new Error('Brotli is not supported on Node.js < 12'));
|
|
return response;
|
|
}
|
|
|
|
let isEmpty = true;
|
|
|
|
const checker = new Transform({
|
|
transform(data, _encoding, callback) {
|
|
isEmpty = false;
|
|
|
|
callback(null, data);
|
|
},
|
|
|
|
flush(callback) {
|
|
callback();
|
|
}
|
|
});
|
|
|
|
const finalStream = new PassThrough({
|
|
autoDestroy: false,
|
|
destroy(error, callback) {
|
|
response.destroy();
|
|
|
|
callback(error);
|
|
}
|
|
});
|
|
|
|
const decompressStream = isBrotli ? zlib__default['default'].createBrotliDecompress() : zlib__default['default'].createUnzip();
|
|
|
|
decompressStream.once('error', error => {
|
|
if (isEmpty && !response.readable) {
|
|
finalStream.end();
|
|
return;
|
|
}
|
|
|
|
finalStream.destroy(error);
|
|
});
|
|
|
|
mimicResponse(response, finalStream);
|
|
response.pipe(checker).pipe(decompressStream).pipe(finalStream);
|
|
|
|
return finalStream;
|
|
};
|
|
|
|
class QuickLRU {
|
|
constructor(options = {}) {
|
|
if (!(options.maxSize && options.maxSize > 0)) {
|
|
throw new TypeError('`maxSize` must be a number greater than 0');
|
|
}
|
|
|
|
this.maxSize = options.maxSize;
|
|
this.onEviction = options.onEviction;
|
|
this.cache = new Map();
|
|
this.oldCache = new Map();
|
|
this._size = 0;
|
|
}
|
|
|
|
_set(key, value) {
|
|
this.cache.set(key, value);
|
|
this._size++;
|
|
|
|
if (this._size >= this.maxSize) {
|
|
this._size = 0;
|
|
|
|
if (typeof this.onEviction === 'function') {
|
|
for (const [key, value] of this.oldCache.entries()) {
|
|
this.onEviction(key, value);
|
|
}
|
|
}
|
|
|
|
this.oldCache = this.cache;
|
|
this.cache = new Map();
|
|
}
|
|
}
|
|
|
|
get(key) {
|
|
if (this.cache.has(key)) {
|
|
return this.cache.get(key);
|
|
}
|
|
|
|
if (this.oldCache.has(key)) {
|
|
const value = this.oldCache.get(key);
|
|
this.oldCache.delete(key);
|
|
this._set(key, value);
|
|
return value;
|
|
}
|
|
}
|
|
|
|
set(key, value) {
|
|
if (this.cache.has(key)) {
|
|
this.cache.set(key, value);
|
|
} else {
|
|
this._set(key, value);
|
|
}
|
|
|
|
return this;
|
|
}
|
|
|
|
has(key) {
|
|
return this.cache.has(key) || this.oldCache.has(key);
|
|
}
|
|
|
|
peek(key) {
|
|
if (this.cache.has(key)) {
|
|
return this.cache.get(key);
|
|
}
|
|
|
|
if (this.oldCache.has(key)) {
|
|
return this.oldCache.get(key);
|
|
}
|
|
}
|
|
|
|
delete(key) {
|
|
const deleted = this.cache.delete(key);
|
|
if (deleted) {
|
|
this._size--;
|
|
}
|
|
|
|
return this.oldCache.delete(key) || deleted;
|
|
}
|
|
|
|
clear() {
|
|
this.cache.clear();
|
|
this.oldCache.clear();
|
|
this._size = 0;
|
|
}
|
|
|
|
* keys() {
|
|
for (const [key] of this) {
|
|
yield key;
|
|
}
|
|
}
|
|
|
|
* values() {
|
|
for (const [, value] of this) {
|
|
yield value;
|
|
}
|
|
}
|
|
|
|
* [Symbol.iterator]() {
|
|
for (const item of this.cache) {
|
|
yield item;
|
|
}
|
|
|
|
for (const item of this.oldCache) {
|
|
const [key] = item;
|
|
if (!this.cache.has(key)) {
|
|
yield item;
|
|
}
|
|
}
|
|
}
|
|
|
|
get size() {
|
|
let oldCacheSize = 0;
|
|
for (const key of this.oldCache.keys()) {
|
|
if (!this.cache.has(key)) {
|
|
oldCacheSize++;
|
|
}
|
|
}
|
|
|
|
return Math.min(this._size + oldCacheSize, this.maxSize);
|
|
}
|
|
}
|
|
|
|
var quickLru = QuickLRU;
|
|
|
|
const kCurrentStreamsCount = Symbol('currentStreamsCount');
|
|
const kRequest = Symbol('request');
|
|
const kOriginSet = Symbol('cachedOriginSet');
|
|
const kGracefullyClosing = Symbol('gracefullyClosing');
|
|
|
|
const nameKeys = [
|
|
// `http2.connect()` options
|
|
'maxDeflateDynamicTableSize',
|
|
'maxSessionMemory',
|
|
'maxHeaderListPairs',
|
|
'maxOutstandingPings',
|
|
'maxReservedRemoteStreams',
|
|
'maxSendHeaderBlockLength',
|
|
'paddingStrategy',
|
|
|
|
// `tls.connect()` options
|
|
'localAddress',
|
|
'path',
|
|
'rejectUnauthorized',
|
|
'minDHSize',
|
|
|
|
// `tls.createSecureContext()` options
|
|
'ca',
|
|
'cert',
|
|
'clientCertEngine',
|
|
'ciphers',
|
|
'key',
|
|
'pfx',
|
|
'servername',
|
|
'minVersion',
|
|
'maxVersion',
|
|
'secureProtocol',
|
|
'crl',
|
|
'honorCipherOrder',
|
|
'ecdhCurve',
|
|
'dhparam',
|
|
'secureOptions',
|
|
'sessionIdContext'
|
|
];
|
|
|
|
const getSortedIndex = (array, value, compare) => {
|
|
let low = 0;
|
|
let high = array.length;
|
|
|
|
while (low < high) {
|
|
const mid = (low + high) >>> 1;
|
|
|
|
/* istanbul ignore next */
|
|
if (compare(array[mid], value)) {
|
|
// This never gets called because we use descending sort. Better to have this anyway.
|
|
low = mid + 1;
|
|
} else {
|
|
high = mid;
|
|
}
|
|
}
|
|
|
|
return low;
|
|
};
|
|
|
|
const compareSessions = (a, b) => {
|
|
return a.remoteSettings.maxConcurrentStreams > b.remoteSettings.maxConcurrentStreams;
|
|
};
|
|
|
|
// See https://tools.ietf.org/html/rfc8336
|
|
const closeCoveredSessions = (where, session) => {
|
|
// Clients SHOULD NOT emit new requests on any connection whose Origin
|
|
// Set is a proper subset of another connection's Origin Set, and they
|
|
// SHOULD close it once all outstanding requests are satisfied.
|
|
for (const coveredSession of where) {
|
|
if (
|
|
// The set is a proper subset when its length is less than the other set.
|
|
coveredSession[kOriginSet].length < session[kOriginSet].length &&
|
|
|
|
// And the other set includes all elements of the subset.
|
|
coveredSession[kOriginSet].every(origin => session[kOriginSet].includes(origin)) &&
|
|
|
|
// Makes sure that the session can handle all requests from the covered session.
|
|
coveredSession[kCurrentStreamsCount] + session[kCurrentStreamsCount] <= session.remoteSettings.maxConcurrentStreams
|
|
) {
|
|
// This allows pending requests to finish and prevents making new requests.
|
|
gracefullyClose(coveredSession);
|
|
}
|
|
}
|
|
};
|
|
|
|
// This is basically inverted `closeCoveredSessions(...)`.
|
|
const closeSessionIfCovered = (where, coveredSession) => {
|
|
for (const session of where) {
|
|
if (
|
|
coveredSession[kOriginSet].length < session[kOriginSet].length &&
|
|
coveredSession[kOriginSet].every(origin => session[kOriginSet].includes(origin)) &&
|
|
coveredSession[kCurrentStreamsCount] + session[kCurrentStreamsCount] <= session.remoteSettings.maxConcurrentStreams
|
|
) {
|
|
gracefullyClose(coveredSession);
|
|
}
|
|
}
|
|
};
|
|
|
|
const getSessions = ({agent, isFree}) => {
|
|
const result = {};
|
|
|
|
// eslint-disable-next-line guard-for-in
|
|
for (const normalizedOptions in agent.sessions) {
|
|
const sessions = agent.sessions[normalizedOptions];
|
|
|
|
const filtered = sessions.filter(session => {
|
|
const result = session[Agent$1.kCurrentStreamsCount] < session.remoteSettings.maxConcurrentStreams;
|
|
|
|
return isFree ? result : !result;
|
|
});
|
|
|
|
if (filtered.length !== 0) {
|
|
result[normalizedOptions] = filtered;
|
|
}
|
|
}
|
|
|
|
return result;
|
|
};
|
|
|
|
const gracefullyClose = session => {
|
|
session[kGracefullyClosing] = true;
|
|
|
|
if (session[kCurrentStreamsCount] === 0) {
|
|
session.close();
|
|
}
|
|
};
|
|
|
|
class Agent$1 extends EventEmitter__default['default'] {
|
|
constructor({timeout = 60000, maxSessions = Infinity, maxFreeSessions = 10, maxCachedTlsSessions = 100} = {}) {
|
|
super();
|
|
|
|
// A session is considered busy when its current streams count
|
|
// is equal to or greater than the `maxConcurrentStreams` value.
|
|
|
|
// A session is considered free when its current streams count
|
|
// is less than the `maxConcurrentStreams` value.
|
|
|
|
// SESSIONS[NORMALIZED_OPTIONS] = [];
|
|
this.sessions = {};
|
|
|
|
// The queue for creating new sessions. It looks like this:
|
|
// QUEUE[NORMALIZED_OPTIONS][NORMALIZED_ORIGIN] = ENTRY_FUNCTION
|
|
//
|
|
// The entry function has `listeners`, `completed` and `destroyed` properties.
|
|
// `listeners` is an array of objects containing `resolve` and `reject` functions.
|
|
// `completed` is a boolean. It's set to true after ENTRY_FUNCTION is executed.
|
|
// `destroyed` is a boolean. If it's set to true, the session will be destroyed if hasn't connected yet.
|
|
this.queue = {};
|
|
|
|
// Each session will use this timeout value.
|
|
this.timeout = timeout;
|
|
|
|
// Max sessions in total
|
|
this.maxSessions = maxSessions;
|
|
|
|
// Max free sessions in total
|
|
// TODO: decreasing `maxFreeSessions` should close some sessions
|
|
this.maxFreeSessions = maxFreeSessions;
|
|
|
|
this._freeSessionsCount = 0;
|
|
this._sessionsCount = 0;
|
|
|
|
// We don't support push streams by default.
|
|
this.settings = {
|
|
enablePush: false
|
|
};
|
|
|
|
// Reusing TLS sessions increases performance.
|
|
this.tlsSessionCache = new quickLru({maxSize: maxCachedTlsSessions});
|
|
}
|
|
|
|
static normalizeOrigin(url, servername) {
|
|
if (typeof url === 'string') {
|
|
url = new URL(url);
|
|
}
|
|
|
|
if (servername && url.hostname !== servername) {
|
|
url.hostname = servername;
|
|
}
|
|
|
|
return url.origin;
|
|
}
|
|
|
|
normalizeOptions(options) {
|
|
let normalized = '';
|
|
|
|
if (options) {
|
|
for (const key of nameKeys) {
|
|
if (options[key]) {
|
|
normalized += `:${options[key]}`;
|
|
}
|
|
}
|
|
}
|
|
|
|
return normalized;
|
|
}
|
|
|
|
_tryToCreateNewSession(normalizedOptions, normalizedOrigin) {
|
|
if (!(normalizedOptions in this.queue) || !(normalizedOrigin in this.queue[normalizedOptions])) {
|
|
return;
|
|
}
|
|
|
|
const item = this.queue[normalizedOptions][normalizedOrigin];
|
|
|
|
// The entry function can be run only once.
|
|
// BUG: The session may be never created when:
|
|
// - the first condition is false AND
|
|
// - this function is never called with the same arguments in the future.
|
|
if (this._sessionsCount < this.maxSessions && !item.completed) {
|
|
item.completed = true;
|
|
|
|
item();
|
|
}
|
|
}
|
|
|
|
getSession(origin, options, listeners) {
|
|
return new Promise((resolve, reject) => {
|
|
if (Array.isArray(listeners)) {
|
|
listeners = [...listeners];
|
|
|
|
// Resolve the current promise ASAP, we're just moving the listeners.
|
|
// They will be executed at a different time.
|
|
resolve();
|
|
} else {
|
|
listeners = [{resolve, reject}];
|
|
}
|
|
|
|
const normalizedOptions = this.normalizeOptions(options);
|
|
const normalizedOrigin = Agent$1.normalizeOrigin(origin, options && options.servername);
|
|
|
|
if (normalizedOrigin === undefined) {
|
|
for (const {reject} of listeners) {
|
|
reject(new TypeError('The `origin` argument needs to be a string or an URL object'));
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
if (normalizedOptions in this.sessions) {
|
|
const sessions = this.sessions[normalizedOptions];
|
|
|
|
let maxConcurrentStreams = -1;
|
|
let currentStreamsCount = -1;
|
|
let optimalSession;
|
|
|
|
// We could just do this.sessions[normalizedOptions].find(...) but that isn't optimal.
|
|
// Additionally, we are looking for session which has biggest current pending streams count.
|
|
for (const session of sessions) {
|
|
const sessionMaxConcurrentStreams = session.remoteSettings.maxConcurrentStreams;
|
|
|
|
if (sessionMaxConcurrentStreams < maxConcurrentStreams) {
|
|
break;
|
|
}
|
|
|
|
if (session[kOriginSet].includes(normalizedOrigin)) {
|
|
const sessionCurrentStreamsCount = session[kCurrentStreamsCount];
|
|
|
|
if (
|
|
sessionCurrentStreamsCount >= sessionMaxConcurrentStreams ||
|
|
session[kGracefullyClosing] ||
|
|
// Unfortunately the `close` event isn't called immediately,
|
|
// so `session.destroyed` is `true`, but `session.closed` is `false`.
|
|
session.destroyed
|
|
) {
|
|
continue;
|
|
}
|
|
|
|
// We only need set this once.
|
|
if (!optimalSession) {
|
|
maxConcurrentStreams = sessionMaxConcurrentStreams;
|
|
}
|
|
|
|
// We're looking for the session which has biggest current pending stream count,
|
|
// in order to minimalize the amount of active sessions.
|
|
if (sessionCurrentStreamsCount > currentStreamsCount) {
|
|
optimalSession = session;
|
|
currentStreamsCount = sessionCurrentStreamsCount;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (optimalSession) {
|
|
/* istanbul ignore next: safety check */
|
|
if (listeners.length !== 1) {
|
|
for (const {reject} of listeners) {
|
|
const error = new Error(
|
|
`Expected the length of listeners to be 1, got ${listeners.length}.\n` +
|
|
'Please report this to https://github.com/szmarczak/http2-wrapper/'
|
|
);
|
|
|
|
reject(error);
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
listeners[0].resolve(optimalSession);
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (normalizedOptions in this.queue) {
|
|
if (normalizedOrigin in this.queue[normalizedOptions]) {
|
|
// There's already an item in the queue, just attach ourselves to it.
|
|
this.queue[normalizedOptions][normalizedOrigin].listeners.push(...listeners);
|
|
|
|
// This shouldn't be executed here.
|
|
// See the comment inside _tryToCreateNewSession.
|
|
this._tryToCreateNewSession(normalizedOptions, normalizedOrigin);
|
|
return;
|
|
}
|
|
} else {
|
|
this.queue[normalizedOptions] = {};
|
|
}
|
|
|
|
// The entry must be removed from the queue IMMEDIATELY when:
|
|
// 1. the session connects successfully,
|
|
// 2. an error occurs.
|
|
const removeFromQueue = () => {
|
|
// Our entry can be replaced. We cannot remove the new one.
|
|
if (normalizedOptions in this.queue && this.queue[normalizedOptions][normalizedOrigin] === entry) {
|
|
delete this.queue[normalizedOptions][normalizedOrigin];
|
|
|
|
if (Object.keys(this.queue[normalizedOptions]).length === 0) {
|
|
delete this.queue[normalizedOptions];
|
|
}
|
|
}
|
|
};
|
|
|
|
// The main logic is here
|
|
const entry = () => {
|
|
const name = `${normalizedOrigin}:${normalizedOptions}`;
|
|
let receivedSettings = false;
|
|
|
|
try {
|
|
const session = http2__default['default'].connect(origin, {
|
|
createConnection: this.createConnection,
|
|
settings: this.settings,
|
|
session: this.tlsSessionCache.get(name),
|
|
...options
|
|
});
|
|
session[kCurrentStreamsCount] = 0;
|
|
session[kGracefullyClosing] = false;
|
|
|
|
const isFree = () => session[kCurrentStreamsCount] < session.remoteSettings.maxConcurrentStreams;
|
|
let wasFree = true;
|
|
|
|
session.socket.once('session', tlsSession => {
|
|
this.tlsSessionCache.set(name, tlsSession);
|
|
});
|
|
|
|
session.once('error', error => {
|
|
// Listeners are empty when the session successfully connected.
|
|
for (const {reject} of listeners) {
|
|
reject(error);
|
|
}
|
|
|
|
// The connection got broken, purge the cache.
|
|
this.tlsSessionCache.delete(name);
|
|
});
|
|
|
|
session.setTimeout(this.timeout, () => {
|
|
// Terminates all streams owned by this session.
|
|
// TODO: Maybe the streams should have a "Session timed out" error?
|
|
session.destroy();
|
|
});
|
|
|
|
session.once('close', () => {
|
|
if (receivedSettings) {
|
|
// 1. If it wasn't free then no need to decrease because
|
|
// it has been decreased already in session.request().
|
|
// 2. `stream.once('close')` won't increment the count
|
|
// because the session is already closed.
|
|
if (wasFree) {
|
|
this._freeSessionsCount--;
|
|
}
|
|
|
|
this._sessionsCount--;
|
|
|
|
// This cannot be moved to the stream logic,
|
|
// because there may be a session that hadn't made a single request.
|
|
const where = this.sessions[normalizedOptions];
|
|
where.splice(where.indexOf(session), 1);
|
|
|
|
if (where.length === 0) {
|
|
delete this.sessions[normalizedOptions];
|
|
}
|
|
} else {
|
|
// Broken connection
|
|
const error = new Error('Session closed without receiving a SETTINGS frame');
|
|
error.code = 'HTTP2WRAPPER_NOSETTINGS';
|
|
|
|
for (const {reject} of listeners) {
|
|
reject(error);
|
|
}
|
|
|
|
removeFromQueue();
|
|
}
|
|
|
|
// There may be another session awaiting.
|
|
this._tryToCreateNewSession(normalizedOptions, normalizedOrigin);
|
|
});
|
|
|
|
// Iterates over the queue and processes listeners.
|
|
const processListeners = () => {
|
|
if (!(normalizedOptions in this.queue) || !isFree()) {
|
|
return;
|
|
}
|
|
|
|
for (const origin of session[kOriginSet]) {
|
|
if (origin in this.queue[normalizedOptions]) {
|
|
const {listeners} = this.queue[normalizedOptions][origin];
|
|
|
|
// Prevents session overloading.
|
|
while (listeners.length !== 0 && isFree()) {
|
|
// We assume `resolve(...)` calls `request(...)` *directly*,
|
|
// otherwise the session will get overloaded.
|
|
listeners.shift().resolve(session);
|
|
}
|
|
|
|
const where = this.queue[normalizedOptions];
|
|
if (where[origin].listeners.length === 0) {
|
|
delete where[origin];
|
|
|
|
if (Object.keys(where).length === 0) {
|
|
delete this.queue[normalizedOptions];
|
|
break;
|
|
}
|
|
}
|
|
|
|
// We're no longer free, no point in continuing.
|
|
if (!isFree()) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
// The Origin Set cannot shrink. No need to check if it suddenly became covered by another one.
|
|
session.on('origin', () => {
|
|
session[kOriginSet] = session.originSet;
|
|
|
|
if (!isFree()) {
|
|
// The session is full.
|
|
return;
|
|
}
|
|
|
|
processListeners();
|
|
|
|
// Close covered sessions (if possible).
|
|
closeCoveredSessions(this.sessions[normalizedOptions], session);
|
|
});
|
|
|
|
session.once('remoteSettings', () => {
|
|
// Fix Node.js bug preventing the process from exiting
|
|
session.ref();
|
|
session.unref();
|
|
|
|
this._sessionsCount++;
|
|
|
|
// The Agent could have been destroyed already.
|
|
if (entry.destroyed) {
|
|
const error = new Error('Agent has been destroyed');
|
|
|
|
for (const listener of listeners) {
|
|
listener.reject(error);
|
|
}
|
|
|
|
session.destroy();
|
|
return;
|
|
}
|
|
|
|
session[kOriginSet] = session.originSet;
|
|
|
|
{
|
|
const where = this.sessions;
|
|
|
|
if (normalizedOptions in where) {
|
|
const sessions = where[normalizedOptions];
|
|
sessions.splice(getSortedIndex(sessions, session, compareSessions), 0, session);
|
|
} else {
|
|
where[normalizedOptions] = [session];
|
|
}
|
|
}
|
|
|
|
this._freeSessionsCount += 1;
|
|
receivedSettings = true;
|
|
|
|
this.emit('session', session);
|
|
|
|
processListeners();
|
|
removeFromQueue();
|
|
|
|
// TODO: Close last recently used (or least used?) session
|
|
if (session[kCurrentStreamsCount] === 0 && this._freeSessionsCount > this.maxFreeSessions) {
|
|
session.close();
|
|
}
|
|
|
|
// Check if we haven't managed to execute all listeners.
|
|
if (listeners.length !== 0) {
|
|
// Request for a new session with predefined listeners.
|
|
this.getSession(normalizedOrigin, options, listeners);
|
|
listeners.length = 0;
|
|
}
|
|
|
|
// `session.remoteSettings.maxConcurrentStreams` might get increased
|
|
session.on('remoteSettings', () => {
|
|
processListeners();
|
|
|
|
// In case the Origin Set changes
|
|
closeCoveredSessions(this.sessions[normalizedOptions], session);
|
|
});
|
|
});
|
|
|
|
// Shim `session.request()` in order to catch all streams
|
|
session[kRequest] = session.request;
|
|
session.request = (headers, streamOptions) => {
|
|
if (session[kGracefullyClosing]) {
|
|
throw new Error('The session is gracefully closing. No new streams are allowed.');
|
|
}
|
|
|
|
const stream = session[kRequest](headers, streamOptions);
|
|
|
|
// The process won't exit until the session is closed or all requests are gone.
|
|
session.ref();
|
|
|
|
++session[kCurrentStreamsCount];
|
|
|
|
if (session[kCurrentStreamsCount] === session.remoteSettings.maxConcurrentStreams) {
|
|
this._freeSessionsCount--;
|
|
}
|
|
|
|
stream.once('close', () => {
|
|
wasFree = isFree();
|
|
|
|
--session[kCurrentStreamsCount];
|
|
|
|
if (!session.destroyed && !session.closed) {
|
|
closeSessionIfCovered(this.sessions[normalizedOptions], session);
|
|
|
|
if (isFree() && !session.closed) {
|
|
if (!wasFree) {
|
|
this._freeSessionsCount++;
|
|
|
|
wasFree = true;
|
|
}
|
|
|
|
const isEmpty = session[kCurrentStreamsCount] === 0;
|
|
|
|
if (isEmpty) {
|
|
session.unref();
|
|
}
|
|
|
|
if (
|
|
isEmpty &&
|
|
(
|
|
this._freeSessionsCount > this.maxFreeSessions ||
|
|
session[kGracefullyClosing]
|
|
)
|
|
) {
|
|
session.close();
|
|
} else {
|
|
closeCoveredSessions(this.sessions[normalizedOptions], session);
|
|
processListeners();
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
return stream;
|
|
};
|
|
} catch (error) {
|
|
for (const listener of listeners) {
|
|
listener.reject(error);
|
|
}
|
|
|
|
removeFromQueue();
|
|
}
|
|
};
|
|
|
|
entry.listeners = listeners;
|
|
entry.completed = false;
|
|
entry.destroyed = false;
|
|
|
|
this.queue[normalizedOptions][normalizedOrigin] = entry;
|
|
this._tryToCreateNewSession(normalizedOptions, normalizedOrigin);
|
|
});
|
|
}
|
|
|
|
request(origin, options, headers, streamOptions) {
|
|
return new Promise((resolve, reject) => {
|
|
this.getSession(origin, options, [{
|
|
reject,
|
|
resolve: session => {
|
|
try {
|
|
resolve(session.request(headers, streamOptions));
|
|
} catch (error) {
|
|
reject(error);
|
|
}
|
|
}
|
|
}]);
|
|
});
|
|
}
|
|
|
|
createConnection(origin, options) {
|
|
return Agent$1.connect(origin, options);
|
|
}
|
|
|
|
static connect(origin, options) {
|
|
options.ALPNProtocols = ['h2'];
|
|
|
|
const port = origin.port || 443;
|
|
const host = origin.hostname || origin.host;
|
|
|
|
if (typeof options.servername === 'undefined') {
|
|
options.servername = host;
|
|
}
|
|
|
|
return tls__default['default'].connect(port, host, options);
|
|
}
|
|
|
|
closeFreeSessions() {
|
|
for (const sessions of Object.values(this.sessions)) {
|
|
for (const session of sessions) {
|
|
if (session[kCurrentStreamsCount] === 0) {
|
|
session.close();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
destroy(reason) {
|
|
for (const sessions of Object.values(this.sessions)) {
|
|
for (const session of sessions) {
|
|
session.destroy(reason);
|
|
}
|
|
}
|
|
|
|
for (const entriesOfAuthority of Object.values(this.queue)) {
|
|
for (const entry of Object.values(entriesOfAuthority)) {
|
|
entry.destroyed = true;
|
|
}
|
|
}
|
|
|
|
// New requests should NOT attach to destroyed sessions
|
|
this.queue = {};
|
|
}
|
|
|
|
get freeSessions() {
|
|
return getSessions({agent: this, isFree: true});
|
|
}
|
|
|
|
get busySessions() {
|
|
return getSessions({agent: this, isFree: false});
|
|
}
|
|
}
|
|
|
|
Agent$1.kCurrentStreamsCount = kCurrentStreamsCount;
|
|
Agent$1.kGracefullyClosing = kGracefullyClosing;
|
|
|
|
var agent = {
|
|
Agent: Agent$1,
|
|
globalAgent: new Agent$1()
|
|
};
|
|
|
|
const {Readable} = require$$0__default$1['default'];
|
|
|
|
class IncomingMessage extends Readable {
|
|
constructor(socket, highWaterMark) {
|
|
super({
|
|
highWaterMark,
|
|
autoDestroy: false
|
|
});
|
|
|
|
this.statusCode = null;
|
|
this.statusMessage = '';
|
|
this.httpVersion = '2.0';
|
|
this.httpVersionMajor = 2;
|
|
this.httpVersionMinor = 0;
|
|
this.headers = {};
|
|
this.trailers = {};
|
|
this.req = null;
|
|
|
|
this.aborted = false;
|
|
this.complete = false;
|
|
this.upgrade = null;
|
|
|
|
this.rawHeaders = [];
|
|
this.rawTrailers = [];
|
|
|
|
this.socket = socket;
|
|
this.connection = socket;
|
|
|
|
this._dumped = false;
|
|
}
|
|
|
|
_destroy(error) {
|
|
this.req._request.destroy(error);
|
|
}
|
|
|
|
setTimeout(ms, callback) {
|
|
this.req.setTimeout(ms, callback);
|
|
return this;
|
|
}
|
|
|
|
_dump() {
|
|
if (!this._dumped) {
|
|
this._dumped = true;
|
|
|
|
this.removeAllListeners('data');
|
|
this.resume();
|
|
}
|
|
}
|
|
|
|
_read() {
|
|
if (this.req) {
|
|
this.req._request.resume();
|
|
}
|
|
}
|
|
}
|
|
|
|
var incomingMessage = IncomingMessage;
|
|
|
|
/* istanbul ignore file: https://github.com/nodejs/node/blob/a91293d4d9ab403046ab5eb022332e4e3d249bd3/lib/internal/url.js#L1257 */
|
|
|
|
var urlToOptions$1 = url => {
|
|
const options = {
|
|
protocol: url.protocol,
|
|
hostname: typeof url.hostname === 'string' && url.hostname.startsWith('[') ? url.hostname.slice(1, -1) : url.hostname,
|
|
host: url.host,
|
|
hash: url.hash,
|
|
search: url.search,
|
|
pathname: url.pathname,
|
|
href: url.href,
|
|
path: `${url.pathname || ''}${url.search || ''}`
|
|
};
|
|
|
|
if (typeof url.port === 'string' && url.port.length !== 0) {
|
|
options.port = Number(url.port);
|
|
}
|
|
|
|
if (url.username || url.password) {
|
|
options.auth = `${url.username || ''}:${url.password || ''}`;
|
|
}
|
|
|
|
return options;
|
|
};
|
|
|
|
var proxyEvents$1 = (from, to, events) => {
|
|
for (const event of events) {
|
|
from.on(event, (...args) => to.emit(event, ...args));
|
|
}
|
|
};
|
|
|
|
var isRequestPseudoHeader = header => {
|
|
switch (header) {
|
|
case ':method':
|
|
case ':scheme':
|
|
case ':authority':
|
|
case ':path':
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
};
|
|
|
|
var errors = createCommonjsModule(function (module) {
|
|
/* istanbul ignore file: https://github.com/nodejs/node/blob/master/lib/internal/errors.js */
|
|
|
|
const makeError = (Base, key, getMessage) => {
|
|
module.exports[key] = class NodeError extends Base {
|
|
constructor(...args) {
|
|
super(typeof getMessage === 'string' ? getMessage : getMessage(args));
|
|
this.name = `${super.name} [${key}]`;
|
|
this.code = key;
|
|
}
|
|
};
|
|
};
|
|
|
|
makeError(TypeError, 'ERR_INVALID_ARG_TYPE', args => {
|
|
const type = args[0].includes('.') ? 'property' : 'argument';
|
|
|
|
let valid = args[1];
|
|
const isManyTypes = Array.isArray(valid);
|
|
|
|
if (isManyTypes) {
|
|
valid = `${valid.slice(0, -1).join(', ')} or ${valid.slice(-1)}`;
|
|
}
|
|
|
|
return `The "${args[0]}" ${type} must be ${isManyTypes ? 'one of' : 'of'} type ${valid}. Received ${typeof args[2]}`;
|
|
});
|
|
|
|
makeError(TypeError, 'ERR_INVALID_PROTOCOL', args => {
|
|
return `Protocol "${args[0]}" not supported. Expected "${args[1]}"`;
|
|
});
|
|
|
|
makeError(Error, 'ERR_HTTP_HEADERS_SENT', args => {
|
|
return `Cannot ${args[0]} headers after they are sent to the client`;
|
|
});
|
|
|
|
makeError(TypeError, 'ERR_INVALID_HTTP_TOKEN', args => {
|
|
return `${args[0]} must be a valid HTTP token [${args[1]}]`;
|
|
});
|
|
|
|
makeError(TypeError, 'ERR_HTTP_INVALID_HEADER_VALUE', args => {
|
|
return `Invalid value "${args[0]} for header "${args[1]}"`;
|
|
});
|
|
|
|
makeError(TypeError, 'ERR_INVALID_CHAR', args => {
|
|
return `Invalid character in ${args[0]} [${args[1]}]`;
|
|
});
|
|
});
|
|
|
|
const {Writable} = require$$0__default$1['default'];
|
|
const {Agent, globalAgent} = agent;
|
|
|
|
|
|
|
|
|
|
const {
|
|
ERR_INVALID_ARG_TYPE,
|
|
ERR_INVALID_PROTOCOL,
|
|
ERR_HTTP_HEADERS_SENT,
|
|
ERR_INVALID_HTTP_TOKEN,
|
|
ERR_HTTP_INVALID_HEADER_VALUE,
|
|
ERR_INVALID_CHAR
|
|
} = errors;
|
|
|
|
const {
|
|
HTTP2_HEADER_STATUS,
|
|
HTTP2_HEADER_METHOD,
|
|
HTTP2_HEADER_PATH,
|
|
HTTP2_METHOD_CONNECT
|
|
} = http2__default['default'].constants;
|
|
|
|
const kHeaders = Symbol('headers');
|
|
const kOrigin = Symbol('origin');
|
|
const kSession = Symbol('session');
|
|
const kOptions = Symbol('options');
|
|
const kFlushedHeaders = Symbol('flushedHeaders');
|
|
const kJobs = Symbol('jobs');
|
|
|
|
const isValidHttpToken = /^[\^`\-\w!#$%&*+.|~]+$/;
|
|
const isInvalidHeaderValue = /[^\t\u0020-\u007E\u0080-\u00FF]/;
|
|
|
|
class ClientRequest extends Writable {
|
|
constructor(input, options, callback) {
|
|
super({
|
|
autoDestroy: false
|
|
});
|
|
|
|
const hasInput = typeof input === 'string' || input instanceof URL;
|
|
if (hasInput) {
|
|
input = urlToOptions$1(input instanceof URL ? input : new URL(input));
|
|
}
|
|
|
|
if (typeof options === 'function' || options === undefined) {
|
|
// (options, callback)
|
|
callback = options;
|
|
options = hasInput ? input : {...input};
|
|
} else {
|
|
// (input, options, callback)
|
|
options = {...input, ...options};
|
|
}
|
|
|
|
if (options.h2session) {
|
|
this[kSession] = options.h2session;
|
|
} else if (options.agent === false) {
|
|
this.agent = new Agent({maxFreeSessions: 0});
|
|
} else if (typeof options.agent === 'undefined' || options.agent === null) {
|
|
if (typeof options.createConnection === 'function') {
|
|
// This is a workaround - we don't have to create the session on our own.
|
|
this.agent = new Agent({maxFreeSessions: 0});
|
|
this.agent.createConnection = options.createConnection;
|
|
} else {
|
|
this.agent = globalAgent;
|
|
}
|
|
} else if (typeof options.agent.request === 'function') {
|
|
this.agent = options.agent;
|
|
} else {
|
|
throw new ERR_INVALID_ARG_TYPE('options.agent', ['Agent-like Object', 'undefined', 'false'], options.agent);
|
|
}
|
|
|
|
if (options.protocol && options.protocol !== 'https:') {
|
|
throw new ERR_INVALID_PROTOCOL(options.protocol, 'https:');
|
|
}
|
|
|
|
const port = options.port || options.defaultPort || (this.agent && this.agent.defaultPort) || 443;
|
|
const host = options.hostname || options.host || 'localhost';
|
|
|
|
// Don't enforce the origin via options. It may be changed in an Agent.
|
|
delete options.hostname;
|
|
delete options.host;
|
|
delete options.port;
|
|
|
|
const {timeout} = options;
|
|
options.timeout = undefined;
|
|
|
|
this[kHeaders] = Object.create(null);
|
|
this[kJobs] = [];
|
|
|
|
this.socket = null;
|
|
this.connection = null;
|
|
|
|
this.method = options.method || 'GET';
|
|
this.path = options.path;
|
|
|
|
this.res = null;
|
|
this.aborted = false;
|
|
this.reusedSocket = false;
|
|
|
|
if (options.headers) {
|
|
for (const [header, value] of Object.entries(options.headers)) {
|
|
this.setHeader(header, value);
|
|
}
|
|
}
|
|
|
|
if (options.auth && !('authorization' in this[kHeaders])) {
|
|
this[kHeaders].authorization = 'Basic ' + Buffer.from(options.auth).toString('base64');
|
|
}
|
|
|
|
options.session = options.tlsSession;
|
|
options.path = options.socketPath;
|
|
|
|
this[kOptions] = options;
|
|
|
|
// Clients that generate HTTP/2 requests directly SHOULD use the :authority pseudo-header field instead of the Host header field.
|
|
if (port === 443) {
|
|
this[kOrigin] = `https://${host}`;
|
|
|
|
if (!(':authority' in this[kHeaders])) {
|
|
this[kHeaders][':authority'] = host;
|
|
}
|
|
} else {
|
|
this[kOrigin] = `https://${host}:${port}`;
|
|
|
|
if (!(':authority' in this[kHeaders])) {
|
|
this[kHeaders][':authority'] = `${host}:${port}`;
|
|
}
|
|
}
|
|
|
|
if (timeout) {
|
|
this.setTimeout(timeout);
|
|
}
|
|
|
|
if (callback) {
|
|
this.once('response', callback);
|
|
}
|
|
|
|
this[kFlushedHeaders] = false;
|
|
}
|
|
|
|
get method() {
|
|
return this[kHeaders][HTTP2_HEADER_METHOD];
|
|
}
|
|
|
|
set method(value) {
|
|
if (value) {
|
|
this[kHeaders][HTTP2_HEADER_METHOD] = value.toUpperCase();
|
|
}
|
|
}
|
|
|
|
get path() {
|
|
return this[kHeaders][HTTP2_HEADER_PATH];
|
|
}
|
|
|
|
set path(value) {
|
|
if (value) {
|
|
this[kHeaders][HTTP2_HEADER_PATH] = value;
|
|
}
|
|
}
|
|
|
|
get _mustNotHaveABody() {
|
|
return this.method === 'GET' || this.method === 'HEAD' || this.method === 'DELETE';
|
|
}
|
|
|
|
_write(chunk, encoding, callback) {
|
|
// https://github.com/nodejs/node/blob/654df09ae0c5e17d1b52a900a545f0664d8c7627/lib/internal/http2/util.js#L148-L156
|
|
if (this._mustNotHaveABody) {
|
|
callback(new Error('The GET, HEAD and DELETE methods must NOT have a body'));
|
|
/* istanbul ignore next: Node.js 12 throws directly */
|
|
return;
|
|
}
|
|
|
|
this.flushHeaders();
|
|
|
|
const callWrite = () => this._request.write(chunk, encoding, callback);
|
|
if (this._request) {
|
|
callWrite();
|
|
} else {
|
|
this[kJobs].push(callWrite);
|
|
}
|
|
}
|
|
|
|
_final(callback) {
|
|
if (this.destroyed) {
|
|
return;
|
|
}
|
|
|
|
this.flushHeaders();
|
|
|
|
const callEnd = () => {
|
|
// For GET, HEAD and DELETE
|
|
if (this._mustNotHaveABody) {
|
|
callback();
|
|
return;
|
|
}
|
|
|
|
this._request.end(callback);
|
|
};
|
|
|
|
if (this._request) {
|
|
callEnd();
|
|
} else {
|
|
this[kJobs].push(callEnd);
|
|
}
|
|
}
|
|
|
|
abort() {
|
|
if (this.res && this.res.complete) {
|
|
return;
|
|
}
|
|
|
|
if (!this.aborted) {
|
|
process.nextTick(() => this.emit('abort'));
|
|
}
|
|
|
|
this.aborted = true;
|
|
|
|
this.destroy();
|
|
}
|
|
|
|
_destroy(error, callback) {
|
|
if (this.res) {
|
|
this.res._dump();
|
|
}
|
|
|
|
if (this._request) {
|
|
this._request.destroy();
|
|
}
|
|
|
|
callback(error);
|
|
}
|
|
|
|
async flushHeaders() {
|
|
if (this[kFlushedHeaders] || this.destroyed) {
|
|
return;
|
|
}
|
|
|
|
this[kFlushedHeaders] = true;
|
|
|
|
const isConnectMethod = this.method === HTTP2_METHOD_CONNECT;
|
|
|
|
// The real magic is here
|
|
const onStream = stream => {
|
|
this._request = stream;
|
|
|
|
if (this.destroyed) {
|
|
stream.destroy();
|
|
return;
|
|
}
|
|
|
|
// Forwards `timeout`, `continue`, `close` and `error` events to this instance.
|
|
if (!isConnectMethod) {
|
|
proxyEvents$1(stream, this, ['timeout', 'continue', 'close', 'error']);
|
|
}
|
|
|
|
// Wait for the `finish` event. We don't want to emit the `response` event
|
|
// before `request.end()` is called.
|
|
const waitForEnd = fn => {
|
|
return (...args) => {
|
|
if (!this.writable && !this.destroyed) {
|
|
fn(...args);
|
|
} else {
|
|
this.once('finish', () => {
|
|
fn(...args);
|
|
});
|
|
}
|
|
};
|
|
};
|
|
|
|
// This event tells we are ready to listen for the data.
|
|
stream.once('response', waitForEnd((headers, flags, rawHeaders) => {
|
|
// If we were to emit raw request stream, it would be as fast as the native approach.
|
|
// Note that wrapping the raw stream in a Proxy instance won't improve the performance (already tested it).
|
|
const response = new incomingMessage(this.socket, stream.readableHighWaterMark);
|
|
this.res = response;
|
|
|
|
response.req = this;
|
|
response.statusCode = headers[HTTP2_HEADER_STATUS];
|
|
response.headers = headers;
|
|
response.rawHeaders = rawHeaders;
|
|
|
|
response.once('end', () => {
|
|
if (this.aborted) {
|
|
response.aborted = true;
|
|
response.emit('aborted');
|
|
} else {
|
|
response.complete = true;
|
|
|
|
// Has no effect, just be consistent with the Node.js behavior
|
|
response.socket = null;
|
|
response.connection = null;
|
|
}
|
|
});
|
|
|
|
if (isConnectMethod) {
|
|
response.upgrade = true;
|
|
|
|
// The HTTP1 API says the socket is detached here,
|
|
// but we can't do that so we pass the original HTTP2 request.
|
|
if (this.emit('connect', response, stream, Buffer.alloc(0))) {
|
|
this.emit('close');
|
|
} else {
|
|
// No listeners attached, destroy the original request.
|
|
stream.destroy();
|
|
}
|
|
} else {
|
|
// Forwards data
|
|
stream.on('data', chunk => {
|
|
if (!response._dumped && !response.push(chunk)) {
|
|
stream.pause();
|
|
}
|
|
});
|
|
|
|
stream.once('end', () => {
|
|
response.push(null);
|
|
});
|
|
|
|
if (!this.emit('response', response)) {
|
|
// No listeners attached, dump the response.
|
|
response._dump();
|
|
}
|
|
}
|
|
}));
|
|
|
|
// Emits `information` event
|
|
stream.once('headers', waitForEnd(
|
|
headers => this.emit('information', {statusCode: headers[HTTP2_HEADER_STATUS]})
|
|
));
|
|
|
|
stream.once('trailers', waitForEnd((trailers, flags, rawTrailers) => {
|
|
const {res} = this;
|
|
|
|
// Assigns trailers to the response object.
|
|
res.trailers = trailers;
|
|
res.rawTrailers = rawTrailers;
|
|
}));
|
|
|
|
const {socket} = stream.session;
|
|
this.socket = socket;
|
|
this.connection = socket;
|
|
|
|
for (const job of this[kJobs]) {
|
|
job();
|
|
}
|
|
|
|
this.emit('socket', this.socket);
|
|
};
|
|
|
|
// Makes a HTTP2 request
|
|
if (this[kSession]) {
|
|
try {
|
|
onStream(this[kSession].request(this[kHeaders]));
|
|
} catch (error) {
|
|
this.emit('error', error);
|
|
}
|
|
} else {
|
|
this.reusedSocket = true;
|
|
|
|
try {
|
|
onStream(await this.agent.request(this[kOrigin], this[kOptions], this[kHeaders]));
|
|
} catch (error) {
|
|
this.emit('error', error);
|
|
}
|
|
}
|
|
}
|
|
|
|
getHeader(name) {
|
|
if (typeof name !== 'string') {
|
|
throw new ERR_INVALID_ARG_TYPE('name', 'string', name);
|
|
}
|
|
|
|
return this[kHeaders][name.toLowerCase()];
|
|
}
|
|
|
|
get headersSent() {
|
|
return this[kFlushedHeaders];
|
|
}
|
|
|
|
removeHeader(name) {
|
|
if (typeof name !== 'string') {
|
|
throw new ERR_INVALID_ARG_TYPE('name', 'string', name);
|
|
}
|
|
|
|
if (this.headersSent) {
|
|
throw new ERR_HTTP_HEADERS_SENT('remove');
|
|
}
|
|
|
|
delete this[kHeaders][name.toLowerCase()];
|
|
}
|
|
|
|
setHeader(name, value) {
|
|
if (this.headersSent) {
|
|
throw new ERR_HTTP_HEADERS_SENT('set');
|
|
}
|
|
|
|
if (typeof name !== 'string' || (!isValidHttpToken.test(name) && !isRequestPseudoHeader(name))) {
|
|
throw new ERR_INVALID_HTTP_TOKEN('Header name', name);
|
|
}
|
|
|
|
if (typeof value === 'undefined') {
|
|
throw new ERR_HTTP_INVALID_HEADER_VALUE(value, name);
|
|
}
|
|
|
|
if (isInvalidHeaderValue.test(value)) {
|
|
throw new ERR_INVALID_CHAR('header content', name);
|
|
}
|
|
|
|
this[kHeaders][name.toLowerCase()] = value;
|
|
}
|
|
|
|
setNoDelay() {
|
|
// HTTP2 sockets cannot be malformed, do nothing.
|
|
}
|
|
|
|
setSocketKeepAlive() {
|
|
// HTTP2 sockets cannot be malformed, do nothing.
|
|
}
|
|
|
|
setTimeout(ms, callback) {
|
|
const applyTimeout = () => this._request.setTimeout(ms, callback);
|
|
|
|
if (this._request) {
|
|
applyTimeout();
|
|
} else {
|
|
this[kJobs].push(applyTimeout);
|
|
}
|
|
|
|
return this;
|
|
}
|
|
|
|
get maxHeadersCount() {
|
|
if (!this.destroyed && this._request) {
|
|
return this._request.session.localSettings.maxHeaderListSize;
|
|
}
|
|
|
|
return undefined;
|
|
}
|
|
|
|
set maxHeadersCount(_value) {
|
|
// Updating HTTP2 settings would affect all requests, do nothing.
|
|
}
|
|
}
|
|
|
|
var clientRequest = ClientRequest;
|
|
|
|
var resolveAlpn = (options = {}, connect = tls__default['default'].connect) => new Promise((resolve, reject) => {
|
|
let timeout = false;
|
|
|
|
let socket;
|
|
|
|
const callback = async () => {
|
|
await socketPromise;
|
|
|
|
socket.off('timeout', onTimeout);
|
|
socket.off('error', reject);
|
|
|
|
if (options.resolveSocket) {
|
|
resolve({alpnProtocol: socket.alpnProtocol, socket, timeout});
|
|
|
|
if (timeout) {
|
|
await Promise.resolve();
|
|
socket.emit('timeout');
|
|
}
|
|
} else {
|
|
socket.destroy();
|
|
resolve({alpnProtocol: socket.alpnProtocol, timeout});
|
|
}
|
|
};
|
|
|
|
const onTimeout = async () => {
|
|
timeout = true;
|
|
callback();
|
|
};
|
|
|
|
const socketPromise = (async () => {
|
|
try {
|
|
socket = await connect(options, callback);
|
|
|
|
socket.on('error', reject);
|
|
socket.once('timeout', onTimeout);
|
|
} catch (error) {
|
|
reject(error);
|
|
}
|
|
})();
|
|
});
|
|
|
|
/* istanbul ignore file: https://github.com/nodejs/node/blob/v13.0.1/lib/_http_agent.js */
|
|
|
|
var calculateServerName = options => {
|
|
let servername = options.host;
|
|
const hostHeader = options.headers && options.headers.host;
|
|
|
|
if (hostHeader) {
|
|
if (hostHeader.startsWith('[')) {
|
|
const index = hostHeader.indexOf(']');
|
|
if (index === -1) {
|
|
servername = hostHeader;
|
|
} else {
|
|
servername = hostHeader.slice(1, -1);
|
|
}
|
|
} else {
|
|
servername = hostHeader.split(':', 1)[0];
|
|
}
|
|
}
|
|
|
|
if (net__default['default'].isIP(servername)) {
|
|
return '';
|
|
}
|
|
|
|
return servername;
|
|
};
|
|
|
|
const cache = new quickLru({maxSize: 100});
|
|
const queue = new Map();
|
|
|
|
const installSocket = (agent, socket, options) => {
|
|
socket._httpMessage = {shouldKeepAlive: true};
|
|
|
|
const onFree = () => {
|
|
agent.emit('free', socket, options);
|
|
};
|
|
|
|
socket.on('free', onFree);
|
|
|
|
const onClose = () => {
|
|
agent.removeSocket(socket, options);
|
|
};
|
|
|
|
socket.on('close', onClose);
|
|
|
|
const onRemove = () => {
|
|
agent.removeSocket(socket, options);
|
|
socket.off('close', onClose);
|
|
socket.off('free', onFree);
|
|
socket.off('agentRemove', onRemove);
|
|
};
|
|
|
|
socket.on('agentRemove', onRemove);
|
|
|
|
agent.emit('free', socket, options);
|
|
};
|
|
|
|
const resolveProtocol = async options => {
|
|
const name = `${options.host}:${options.port}:${options.ALPNProtocols.sort()}`;
|
|
|
|
if (!cache.has(name)) {
|
|
if (queue.has(name)) {
|
|
const result = await queue.get(name);
|
|
return result.alpnProtocol;
|
|
}
|
|
|
|
const {path, agent} = options;
|
|
options.path = options.socketPath;
|
|
|
|
const resultPromise = resolveAlpn(options);
|
|
queue.set(name, resultPromise);
|
|
|
|
try {
|
|
const {socket, alpnProtocol} = await resultPromise;
|
|
cache.set(name, alpnProtocol);
|
|
|
|
options.path = path;
|
|
|
|
if (alpnProtocol === 'h2') {
|
|
// https://github.com/nodejs/node/issues/33343
|
|
socket.destroy();
|
|
} else {
|
|
const {globalAgent} = https__default['default'];
|
|
const defaultCreateConnection = https__default['default'].Agent.prototype.createConnection;
|
|
|
|
if (agent) {
|
|
if (agent.createConnection === defaultCreateConnection) {
|
|
installSocket(agent, socket, options);
|
|
} else {
|
|
socket.destroy();
|
|
}
|
|
} else if (globalAgent.createConnection === defaultCreateConnection) {
|
|
installSocket(globalAgent, socket, options);
|
|
} else {
|
|
socket.destroy();
|
|
}
|
|
}
|
|
|
|
queue.delete(name);
|
|
|
|
return alpnProtocol;
|
|
} catch (error) {
|
|
queue.delete(name);
|
|
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
return cache.get(name);
|
|
};
|
|
|
|
var auto = async (input, options, callback) => {
|
|
if (typeof input === 'string' || input instanceof URL) {
|
|
input = urlToOptions$1(new URL(input));
|
|
}
|
|
|
|
if (typeof options === 'function') {
|
|
callback = options;
|
|
options = undefined;
|
|
}
|
|
|
|
options = {
|
|
ALPNProtocols: ['h2', 'http/1.1'],
|
|
...input,
|
|
...options,
|
|
resolveSocket: true
|
|
};
|
|
|
|
if (!Array.isArray(options.ALPNProtocols) || options.ALPNProtocols.length === 0) {
|
|
throw new Error('The `ALPNProtocols` option must be an Array with at least one entry');
|
|
}
|
|
|
|
options.protocol = options.protocol || 'https:';
|
|
const isHttps = options.protocol === 'https:';
|
|
|
|
options.host = options.hostname || options.host || 'localhost';
|
|
options.session = options.tlsSession;
|
|
options.servername = options.servername || calculateServerName(options);
|
|
options.port = options.port || (isHttps ? 443 : 80);
|
|
options._defaultAgent = isHttps ? https__default['default'].globalAgent : http__default['default'].globalAgent;
|
|
|
|
const agents = options.agent;
|
|
|
|
if (agents) {
|
|
if (agents.addRequest) {
|
|
throw new Error('The `options.agent` object can contain only `http`, `https` or `http2` properties');
|
|
}
|
|
|
|
options.agent = agents[isHttps ? 'https' : 'http'];
|
|
}
|
|
|
|
if (isHttps) {
|
|
const protocol = await resolveProtocol(options);
|
|
|
|
if (protocol === 'h2') {
|
|
if (agents) {
|
|
options.agent = agents.http2;
|
|
}
|
|
|
|
return new clientRequest(options, callback);
|
|
}
|
|
}
|
|
|
|
return http__default['default'].request(options, callback);
|
|
};
|
|
|
|
var protocolCache = cache;
|
|
auto.protocolCache = protocolCache;
|
|
|
|
const request = (url, options, callback) => {
|
|
return new clientRequest(url, options, callback);
|
|
};
|
|
|
|
const get = (url, options, callback) => {
|
|
// eslint-disable-next-line unicorn/prevent-abbreviations
|
|
const req = new clientRequest(url, options, callback);
|
|
req.end();
|
|
|
|
return req;
|
|
};
|
|
|
|
var source$1 = {
|
|
...http2__default['default'],
|
|
ClientRequest: clientRequest,
|
|
IncomingMessage: incomingMessage,
|
|
...agent,
|
|
request,
|
|
get,
|
|
auto
|
|
};
|
|
|
|
var is_1 = dist;
|
|
|
|
var _default$i = (body) => is_1.default.nodeStream(body) && is_1.default.function_(body.getBoundary);
|
|
|
|
var isFormData = /*#__PURE__*/Object.defineProperty({
|
|
default: _default$i
|
|
}, '__esModule', {value: true});
|
|
|
|
var is_form_data_1 = isFormData;
|
|
|
|
const statAsync = util_1__default['default'].promisify(fs__default['default'].stat);
|
|
var _default$h = async (body, headers) => {
|
|
if (headers && 'content-length' in headers) {
|
|
return Number(headers['content-length']);
|
|
}
|
|
if (!body) {
|
|
return 0;
|
|
}
|
|
if (is_1.default.string(body)) {
|
|
return Buffer.byteLength(body);
|
|
}
|
|
if (is_1.default.buffer(body)) {
|
|
return body.length;
|
|
}
|
|
if (is_form_data_1.default(body)) {
|
|
return util_1__default['default'].promisify(body.getLength.bind(body))();
|
|
}
|
|
if (body instanceof fs__default['default'].ReadStream) {
|
|
const { size } = await statAsync(body.path);
|
|
if (size === 0) {
|
|
return undefined;
|
|
}
|
|
return size;
|
|
}
|
|
return undefined;
|
|
};
|
|
|
|
var getBodySize = /*#__PURE__*/Object.defineProperty({
|
|
default: _default$h
|
|
}, '__esModule', {value: true});
|
|
|
|
function default_1$1(from, to, events) {
|
|
const fns = {};
|
|
for (const event of events) {
|
|
fns[event] = (...args) => {
|
|
to.emit(event, ...args);
|
|
};
|
|
from.on(event, fns[event]);
|
|
}
|
|
return () => {
|
|
for (const event of events) {
|
|
from.off(event, fns[event]);
|
|
}
|
|
};
|
|
}
|
|
var _default$g = default_1$1;
|
|
|
|
var proxyEvents = /*#__PURE__*/Object.defineProperty({
|
|
default: _default$g
|
|
}, '__esModule', {value: true});
|
|
|
|
// When attaching listeners, it's very easy to forget about them.
|
|
// Especially if you do error handling and set timeouts.
|
|
// So instead of checking if it's proper to throw an error on every timeout ever,
|
|
// use this simple tool which will remove all listeners you have attached.
|
|
var _default$f = () => {
|
|
const handlers = [];
|
|
return {
|
|
once(origin, event, fn) {
|
|
origin.once(event, fn);
|
|
handlers.push({ origin, event, fn });
|
|
},
|
|
unhandleAll() {
|
|
for (const handler of handlers) {
|
|
const { origin, event, fn } = handler;
|
|
origin.removeListener(event, fn);
|
|
}
|
|
handlers.length = 0;
|
|
}
|
|
};
|
|
};
|
|
|
|
var unhandle = /*#__PURE__*/Object.defineProperty({
|
|
default: _default$f
|
|
}, '__esModule', {value: true});
|
|
|
|
var unhandle_1 = unhandle;
|
|
|
|
var timedOut = createCommonjsModule(function (module, exports) {
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.TimeoutError = void 0;
|
|
|
|
|
|
const reentry = Symbol('reentry');
|
|
const noop = () => { };
|
|
class TimeoutError extends Error {
|
|
constructor(threshold, event) {
|
|
super(`Timeout awaiting '${event}' for ${threshold}ms`);
|
|
this.event = event;
|
|
this.name = 'TimeoutError';
|
|
this.code = 'ETIMEDOUT';
|
|
}
|
|
}
|
|
exports.TimeoutError = TimeoutError;
|
|
exports.default = (request, delays, options) => {
|
|
if (reentry in request) {
|
|
return noop;
|
|
}
|
|
request[reentry] = true;
|
|
const cancelers = [];
|
|
const { once, unhandleAll } = unhandle_1.default();
|
|
const addTimeout = (delay, callback, event) => {
|
|
var _a;
|
|
const timeout = setTimeout(callback, delay, delay, event);
|
|
(_a = timeout.unref) === null || _a === void 0 ? void 0 : _a.call(timeout);
|
|
const cancel = () => {
|
|
clearTimeout(timeout);
|
|
};
|
|
cancelers.push(cancel);
|
|
return cancel;
|
|
};
|
|
const { host, hostname } = options;
|
|
const timeoutHandler = (delay, event) => {
|
|
request.destroy(new TimeoutError(delay, event));
|
|
};
|
|
const cancelTimeouts = () => {
|
|
for (const cancel of cancelers) {
|
|
cancel();
|
|
}
|
|
unhandleAll();
|
|
};
|
|
request.once('error', error => {
|
|
cancelTimeouts();
|
|
// Save original behavior
|
|
/* istanbul ignore next */
|
|
if (request.listenerCount('error') === 0) {
|
|
throw error;
|
|
}
|
|
});
|
|
request.once('close', cancelTimeouts);
|
|
once(request, 'response', (response) => {
|
|
once(response, 'end', cancelTimeouts);
|
|
});
|
|
if (typeof delays.request !== 'undefined') {
|
|
addTimeout(delays.request, timeoutHandler, 'request');
|
|
}
|
|
if (typeof delays.socket !== 'undefined') {
|
|
const socketTimeoutHandler = () => {
|
|
timeoutHandler(delays.socket, 'socket');
|
|
};
|
|
request.setTimeout(delays.socket, socketTimeoutHandler);
|
|
// `request.setTimeout(0)` causes a memory leak.
|
|
// We can just remove the listener and forget about the timer - it's unreffed.
|
|
// See https://github.com/sindresorhus/got/issues/690
|
|
cancelers.push(() => {
|
|
request.removeListener('timeout', socketTimeoutHandler);
|
|
});
|
|
}
|
|
once(request, 'socket', (socket) => {
|
|
var _a;
|
|
const { socketPath } = request;
|
|
/* istanbul ignore next: hard to test */
|
|
if (socket.connecting) {
|
|
const hasPath = Boolean(socketPath !== null && socketPath !== void 0 ? socketPath : net__default['default'].isIP((_a = hostname !== null && hostname !== void 0 ? hostname : host) !== null && _a !== void 0 ? _a : '') !== 0);
|
|
if (typeof delays.lookup !== 'undefined' && !hasPath && typeof socket.address().address === 'undefined') {
|
|
const cancelTimeout = addTimeout(delays.lookup, timeoutHandler, 'lookup');
|
|
once(socket, 'lookup', cancelTimeout);
|
|
}
|
|
if (typeof delays.connect !== 'undefined') {
|
|
const timeConnect = () => addTimeout(delays.connect, timeoutHandler, 'connect');
|
|
if (hasPath) {
|
|
once(socket, 'connect', timeConnect());
|
|
}
|
|
else {
|
|
once(socket, 'lookup', (error) => {
|
|
if (error === null) {
|
|
once(socket, 'connect', timeConnect());
|
|
}
|
|
});
|
|
}
|
|
}
|
|
if (typeof delays.secureConnect !== 'undefined' && options.protocol === 'https:') {
|
|
once(socket, 'connect', () => {
|
|
const cancelTimeout = addTimeout(delays.secureConnect, timeoutHandler, 'secureConnect');
|
|
once(socket, 'secureConnect', cancelTimeout);
|
|
});
|
|
}
|
|
}
|
|
if (typeof delays.send !== 'undefined') {
|
|
const timeRequest = () => addTimeout(delays.send, timeoutHandler, 'send');
|
|
/* istanbul ignore next: hard to test */
|
|
if (socket.connecting) {
|
|
once(socket, 'connect', () => {
|
|
once(request, 'upload-complete', timeRequest());
|
|
});
|
|
}
|
|
else {
|
|
once(request, 'upload-complete', timeRequest());
|
|
}
|
|
}
|
|
});
|
|
if (typeof delays.response !== 'undefined') {
|
|
once(request, 'upload-complete', () => {
|
|
const cancelTimeout = addTimeout(delays.response, timeoutHandler, 'response');
|
|
once(request, 'response', cancelTimeout);
|
|
});
|
|
}
|
|
return cancelTimeouts;
|
|
};
|
|
});
|
|
|
|
var _default$e = (url) => {
|
|
// Cast to URL
|
|
url = url;
|
|
const options = {
|
|
protocol: url.protocol,
|
|
hostname: is_1.default.string(url.hostname) && url.hostname.startsWith('[') ? url.hostname.slice(1, -1) : url.hostname,
|
|
host: url.host,
|
|
hash: url.hash,
|
|
search: url.search,
|
|
pathname: url.pathname,
|
|
href: url.href,
|
|
path: `${url.pathname || ''}${url.search || ''}`
|
|
};
|
|
if (is_1.default.string(url.port) && url.port.length > 0) {
|
|
options.port = Number(url.port);
|
|
}
|
|
if (url.username || url.password) {
|
|
options.auth = `${url.username || ''}:${url.password || ''}`;
|
|
}
|
|
return options;
|
|
};
|
|
|
|
var urlToOptions = /*#__PURE__*/Object.defineProperty({
|
|
default: _default$e
|
|
}, '__esModule', {value: true});
|
|
|
|
/* istanbul ignore file: deprecated */
|
|
|
|
const keys = [
|
|
'protocol',
|
|
'host',
|
|
'hostname',
|
|
'port',
|
|
'pathname',
|
|
'search'
|
|
];
|
|
var _default$d = (origin, options) => {
|
|
var _a, _b;
|
|
if (options.path) {
|
|
if (options.pathname) {
|
|
throw new TypeError('Parameters `path` and `pathname` are mutually exclusive.');
|
|
}
|
|
if (options.search) {
|
|
throw new TypeError('Parameters `path` and `search` are mutually exclusive.');
|
|
}
|
|
if (options.searchParams) {
|
|
throw new TypeError('Parameters `path` and `searchParams` are mutually exclusive.');
|
|
}
|
|
}
|
|
if (options.search && options.searchParams) {
|
|
throw new TypeError('Parameters `search` and `searchParams` are mutually exclusive.');
|
|
}
|
|
if (!origin) {
|
|
if (!options.protocol) {
|
|
throw new TypeError('No URL protocol specified');
|
|
}
|
|
origin = `${options.protocol}//${(_b = (_a = options.hostname) !== null && _a !== void 0 ? _a : options.host) !== null && _b !== void 0 ? _b : ''}`;
|
|
}
|
|
const url = new url_1__default['default'].URL(origin);
|
|
if (options.path) {
|
|
const searchIndex = options.path.indexOf('?');
|
|
if (searchIndex === -1) {
|
|
options.pathname = options.path;
|
|
}
|
|
else {
|
|
options.pathname = options.path.slice(0, searchIndex);
|
|
options.search = options.path.slice(searchIndex + 1);
|
|
}
|
|
delete options.path;
|
|
}
|
|
for (const key of keys) {
|
|
if (options[key]) {
|
|
url[key] = options[key].toString();
|
|
}
|
|
}
|
|
return url;
|
|
};
|
|
|
|
var optionsToUrl = /*#__PURE__*/Object.defineProperty({
|
|
default: _default$d
|
|
}, '__esModule', {value: true});
|
|
|
|
class WeakableMap {
|
|
constructor() {
|
|
this.weakMap = new WeakMap();
|
|
this.map = new Map();
|
|
}
|
|
set(key, value) {
|
|
if (typeof key === 'object') {
|
|
this.weakMap.set(key, value);
|
|
}
|
|
else {
|
|
this.map.set(key, value);
|
|
}
|
|
}
|
|
get(key) {
|
|
if (typeof key === 'object') {
|
|
return this.weakMap.get(key);
|
|
}
|
|
return this.map.get(key);
|
|
}
|
|
has(key) {
|
|
if (typeof key === 'object') {
|
|
return this.weakMap.has(key);
|
|
}
|
|
return this.map.has(key);
|
|
}
|
|
}
|
|
var _default$c = WeakableMap;
|
|
|
|
var weakableMap = /*#__PURE__*/Object.defineProperty({
|
|
default: _default$c
|
|
}, '__esModule', {value: true});
|
|
|
|
// TODO: Update https://github.com/sindresorhus/get-stream
|
|
const getBuffer = async (stream) => {
|
|
const chunks = [];
|
|
let length = 0;
|
|
for await (const chunk of stream) {
|
|
chunks.push(chunk);
|
|
length += Buffer.byteLength(chunk);
|
|
}
|
|
if (Buffer.isBuffer(chunks[0])) {
|
|
return Buffer.concat(chunks, length);
|
|
}
|
|
return Buffer.from(chunks.join(''));
|
|
};
|
|
var _default$b = getBuffer;
|
|
|
|
var getBuffer_1 = /*#__PURE__*/Object.defineProperty({
|
|
default: _default$b
|
|
}, '__esModule', {value: true});
|
|
|
|
var dnsIpVersion = createCommonjsModule(function (module, exports) {
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.dnsLookupIpVersionToFamily = exports.isDnsLookupIpVersion = void 0;
|
|
const conversionTable = {
|
|
auto: 0,
|
|
ipv4: 4,
|
|
ipv6: 6
|
|
};
|
|
exports.isDnsLookupIpVersion = (value) => {
|
|
return value in conversionTable;
|
|
};
|
|
exports.dnsLookupIpVersionToFamily = (dnsLookupIpVersion) => {
|
|
if (exports.isDnsLookupIpVersion(dnsLookupIpVersion)) {
|
|
return conversionTable[dnsLookupIpVersion];
|
|
}
|
|
throw new Error('Invalid DNS lookup IP version');
|
|
};
|
|
});
|
|
|
|
var isResponseOk = createCommonjsModule(function (module, exports) {
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.isResponseOk = void 0;
|
|
exports.isResponseOk = (response) => {
|
|
const { statusCode } = response;
|
|
const limitStatusCode = response.request.options.followRedirect ? 299 : 399;
|
|
return (statusCode >= 200 && statusCode <= limitStatusCode) || statusCode === 304;
|
|
};
|
|
});
|
|
|
|
const alreadyWarned = new Set();
|
|
var _default$a = (message) => {
|
|
if (alreadyWarned.has(message)) {
|
|
return;
|
|
}
|
|
alreadyWarned.add(message);
|
|
// @ts-expect-error Missing types.
|
|
process.emitWarning(`Got: ${message}`, {
|
|
type: 'DeprecationWarning'
|
|
});
|
|
};
|
|
|
|
var deprecationWarning = /*#__PURE__*/Object.defineProperty({
|
|
default: _default$a
|
|
}, '__esModule', {value: true});
|
|
|
|
const normalizeArguments = (options, defaults) => {
|
|
if (is_1.default.null_(options.encoding)) {
|
|
throw new TypeError('To get a Buffer, set `options.responseType` to `buffer` instead');
|
|
}
|
|
is_1.assert.any([is_1.default.string, is_1.default.undefined], options.encoding);
|
|
is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.resolveBodyOnly);
|
|
is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.methodRewriting);
|
|
is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.isStream);
|
|
is_1.assert.any([is_1.default.string, is_1.default.undefined], options.responseType);
|
|
// `options.responseType`
|
|
if (options.responseType === undefined) {
|
|
options.responseType = 'text';
|
|
}
|
|
// `options.retry`
|
|
const { retry } = options;
|
|
if (defaults) {
|
|
options.retry = { ...defaults.retry };
|
|
}
|
|
else {
|
|
options.retry = {
|
|
calculateDelay: retryObject => retryObject.computedValue,
|
|
limit: 0,
|
|
methods: [],
|
|
statusCodes: [],
|
|
errorCodes: [],
|
|
maxRetryAfter: undefined
|
|
};
|
|
}
|
|
if (is_1.default.object(retry)) {
|
|
options.retry = {
|
|
...options.retry,
|
|
...retry
|
|
};
|
|
options.retry.methods = [...new Set(options.retry.methods.map(method => method.toUpperCase()))];
|
|
options.retry.statusCodes = [...new Set(options.retry.statusCodes)];
|
|
options.retry.errorCodes = [...new Set(options.retry.errorCodes)];
|
|
}
|
|
else if (is_1.default.number(retry)) {
|
|
options.retry.limit = retry;
|
|
}
|
|
if (is_1.default.undefined(options.retry.maxRetryAfter)) {
|
|
options.retry.maxRetryAfter = Math.min(
|
|
// TypeScript is not smart enough to handle `.filter(x => is.number(x))`.
|
|
// eslint-disable-next-line unicorn/no-fn-reference-in-iterator
|
|
...[options.timeout.request, options.timeout.connect].filter(is_1.default.number));
|
|
}
|
|
// `options.pagination`
|
|
if (is_1.default.object(options.pagination)) {
|
|
if (defaults) {
|
|
options.pagination = {
|
|
...defaults.pagination,
|
|
...options.pagination
|
|
};
|
|
}
|
|
const { pagination } = options;
|
|
if (!is_1.default.function_(pagination.transform)) {
|
|
throw new Error('`options.pagination.transform` must be implemented');
|
|
}
|
|
if (!is_1.default.function_(pagination.shouldContinue)) {
|
|
throw new Error('`options.pagination.shouldContinue` must be implemented');
|
|
}
|
|
if (!is_1.default.function_(pagination.filter)) {
|
|
throw new TypeError('`options.pagination.filter` must be implemented');
|
|
}
|
|
if (!is_1.default.function_(pagination.paginate)) {
|
|
throw new Error('`options.pagination.paginate` must be implemented');
|
|
}
|
|
}
|
|
// JSON mode
|
|
if (options.responseType === 'json' && options.headers.accept === undefined) {
|
|
options.headers.accept = 'application/json';
|
|
}
|
|
return options;
|
|
};
|
|
var _default$9 = normalizeArguments;
|
|
|
|
var normalizeArguments_1 = /*#__PURE__*/Object.defineProperty({
|
|
default: _default$9
|
|
}, '__esModule', {value: true});
|
|
|
|
var calculateRetryDelay_1 = createCommonjsModule(function (module, exports) {
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.retryAfterStatusCodes = void 0;
|
|
exports.retryAfterStatusCodes = new Set([413, 429, 503]);
|
|
const calculateRetryDelay = ({ attemptCount, retryOptions, error, retryAfter }) => {
|
|
if (attemptCount > retryOptions.limit) {
|
|
return 0;
|
|
}
|
|
const hasMethod = retryOptions.methods.includes(error.options.method);
|
|
const hasErrorCode = retryOptions.errorCodes.includes(error.code);
|
|
const hasStatusCode = error.response && retryOptions.statusCodes.includes(error.response.statusCode);
|
|
if (!hasMethod || (!hasErrorCode && !hasStatusCode)) {
|
|
return 0;
|
|
}
|
|
if (error.response) {
|
|
if (retryAfter) {
|
|
if (retryOptions.maxRetryAfter === undefined || retryAfter > retryOptions.maxRetryAfter) {
|
|
return 0;
|
|
}
|
|
return retryAfter;
|
|
}
|
|
if (error.response.statusCode === 413) {
|
|
return 0;
|
|
}
|
|
}
|
|
const noise = Math.random() * 100;
|
|
return ((2 ** (attemptCount - 1)) * 1000) + noise;
|
|
};
|
|
exports.default = calculateRetryDelay;
|
|
});
|
|
|
|
var get_body_size_1 = getBodySize;
|
|
|
|
var proxy_events_1 = proxyEvents;
|
|
|
|
var timed_out_1 = timedOut;
|
|
|
|
var url_to_options_1 = urlToOptions;
|
|
|
|
var options_to_url_1 = optionsToUrl;
|
|
|
|
var weakable_map_1 = weakableMap;
|
|
|
|
var get_buffer_1 = getBuffer_1;
|
|
|
|
var dns_ip_version_1 = dnsIpVersion;
|
|
|
|
var is_response_ok_1 = isResponseOk;
|
|
|
|
var deprecation_warning_1 = deprecationWarning;
|
|
|
|
var normalize_arguments_1 = normalizeArguments_1;
|
|
|
|
var calculate_retry_delay_1 = calculateRetryDelay_1;
|
|
|
|
var core$2 = createCommonjsModule(function (module, exports) {
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.UnsupportedProtocolError = exports.ReadError = exports.TimeoutError = exports.UploadError = exports.CacheError = exports.HTTPError = exports.MaxRedirectsError = exports.RequestError = exports.setNonEnumerableProperties = exports.knownHookEvents = exports.withoutBody = exports.kIsNormalizedAlready = void 0;
|
|
|
|
|
|
|
|
|
|
|
|
const http_1 = http__default['default'];
|
|
|
|
|
|
|
|
|
|
|
|
// @ts-expect-error Missing types
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let globalDnsCache;
|
|
const kRequest = Symbol('request');
|
|
const kResponse = Symbol('response');
|
|
const kResponseSize = Symbol('responseSize');
|
|
const kDownloadedSize = Symbol('downloadedSize');
|
|
const kBodySize = Symbol('bodySize');
|
|
const kUploadedSize = Symbol('uploadedSize');
|
|
const kServerResponsesPiped = Symbol('serverResponsesPiped');
|
|
const kUnproxyEvents = Symbol('unproxyEvents');
|
|
const kIsFromCache = Symbol('isFromCache');
|
|
const kCancelTimeouts = Symbol('cancelTimeouts');
|
|
const kStartedReading = Symbol('startedReading');
|
|
const kStopReading = Symbol('stopReading');
|
|
const kTriggerRead = Symbol('triggerRead');
|
|
const kBody = Symbol('body');
|
|
const kJobs = Symbol('jobs');
|
|
const kOriginalResponse = Symbol('originalResponse');
|
|
const kRetryTimeout = Symbol('retryTimeout');
|
|
exports.kIsNormalizedAlready = Symbol('isNormalizedAlready');
|
|
const supportsBrotli = is_1.default.string(process.versions.brotli);
|
|
exports.withoutBody = new Set(['GET', 'HEAD']);
|
|
exports.knownHookEvents = [
|
|
'init',
|
|
'beforeRequest',
|
|
'beforeRedirect',
|
|
'beforeError',
|
|
'beforeRetry',
|
|
// Promise-Only
|
|
'afterResponse'
|
|
];
|
|
function validateSearchParameters(searchParameters) {
|
|
// eslint-disable-next-line guard-for-in
|
|
for (const key in searchParameters) {
|
|
const value = searchParameters[key];
|
|
if (!is_1.default.string(value) && !is_1.default.number(value) && !is_1.default.boolean(value) && !is_1.default.null_(value) && !is_1.default.undefined(value)) {
|
|
throw new TypeError(`The \`searchParams\` value '${String(value)}' must be a string, number, boolean or null`);
|
|
}
|
|
}
|
|
}
|
|
function isClientRequest(clientRequest) {
|
|
return is_1.default.object(clientRequest) && !('statusCode' in clientRequest);
|
|
}
|
|
const cacheableStore = new weakable_map_1.default();
|
|
const waitForOpenFile = async (file) => new Promise((resolve, reject) => {
|
|
const onError = (error) => {
|
|
reject(error);
|
|
};
|
|
// Node.js 12 has incomplete types
|
|
if (!file.pending) {
|
|
resolve();
|
|
}
|
|
file.once('error', onError);
|
|
file.once('ready', () => {
|
|
file.off('error', onError);
|
|
resolve();
|
|
});
|
|
});
|
|
const redirectCodes = new Set([300, 301, 302, 303, 304, 307, 308]);
|
|
const nonEnumerableProperties = [
|
|
'context',
|
|
'body',
|
|
'json',
|
|
'form'
|
|
];
|
|
exports.setNonEnumerableProperties = (sources, to) => {
|
|
// Non enumerable properties shall not be merged
|
|
const properties = {};
|
|
for (const source of sources) {
|
|
if (!source) {
|
|
continue;
|
|
}
|
|
for (const name of nonEnumerableProperties) {
|
|
if (!(name in source)) {
|
|
continue;
|
|
}
|
|
properties[name] = {
|
|
writable: true,
|
|
configurable: true,
|
|
enumerable: false,
|
|
// @ts-expect-error TS doesn't see the check above
|
|
value: source[name]
|
|
};
|
|
}
|
|
}
|
|
Object.defineProperties(to, properties);
|
|
};
|
|
/**
|
|
An error to be thrown when a request fails.
|
|
Contains a `code` property with error class code, like `ECONNREFUSED`.
|
|
*/
|
|
class RequestError extends Error {
|
|
constructor(message, error, self) {
|
|
var _a;
|
|
super(message);
|
|
Error.captureStackTrace(this, this.constructor);
|
|
this.name = 'RequestError';
|
|
this.code = error.code;
|
|
if (self instanceof Request) {
|
|
Object.defineProperty(this, 'request', {
|
|
enumerable: false,
|
|
value: self
|
|
});
|
|
Object.defineProperty(this, 'response', {
|
|
enumerable: false,
|
|
value: self[kResponse]
|
|
});
|
|
Object.defineProperty(this, 'options', {
|
|
// This fails because of TS 3.7.2 useDefineForClassFields
|
|
// Ref: https://github.com/microsoft/TypeScript/issues/34972
|
|
enumerable: false,
|
|
value: self.options
|
|
});
|
|
}
|
|
else {
|
|
Object.defineProperty(this, 'options', {
|
|
// This fails because of TS 3.7.2 useDefineForClassFields
|
|
// Ref: https://github.com/microsoft/TypeScript/issues/34972
|
|
enumerable: false,
|
|
value: self
|
|
});
|
|
}
|
|
this.timings = (_a = this.request) === null || _a === void 0 ? void 0 : _a.timings;
|
|
// Recover the original stacktrace
|
|
if (is_1.default.string(error.stack) && is_1.default.string(this.stack)) {
|
|
const indexOfMessage = this.stack.indexOf(this.message) + this.message.length;
|
|
const thisStackTrace = this.stack.slice(indexOfMessage).split('\n').reverse();
|
|
const errorStackTrace = error.stack.slice(error.stack.indexOf(error.message) + error.message.length).split('\n').reverse();
|
|
// Remove duplicated traces
|
|
while (errorStackTrace.length !== 0 && errorStackTrace[0] === thisStackTrace[0]) {
|
|
thisStackTrace.shift();
|
|
}
|
|
this.stack = `${this.stack.slice(0, indexOfMessage)}${thisStackTrace.reverse().join('\n')}${errorStackTrace.reverse().join('\n')}`;
|
|
}
|
|
}
|
|
}
|
|
exports.RequestError = RequestError;
|
|
/**
|
|
An error to be thrown when the server redirects you more than ten times.
|
|
Includes a `response` property.
|
|
*/
|
|
class MaxRedirectsError extends RequestError {
|
|
constructor(request) {
|
|
super(`Redirected ${request.options.maxRedirects} times. Aborting.`, {}, request);
|
|
this.name = 'MaxRedirectsError';
|
|
}
|
|
}
|
|
exports.MaxRedirectsError = MaxRedirectsError;
|
|
/**
|
|
An error to be thrown when the server response code is not 2xx nor 3xx if `options.followRedirect` is `true`, but always except for 304.
|
|
Includes a `response` property.
|
|
*/
|
|
class HTTPError extends RequestError {
|
|
constructor(response) {
|
|
super(`Response code ${response.statusCode} (${response.statusMessage})`, {}, response.request);
|
|
this.name = 'HTTPError';
|
|
}
|
|
}
|
|
exports.HTTPError = HTTPError;
|
|
/**
|
|
An error to be thrown when a cache method fails.
|
|
For example, if the database goes down or there's a filesystem error.
|
|
*/
|
|
class CacheError extends RequestError {
|
|
constructor(error, request) {
|
|
super(error.message, error, request);
|
|
this.name = 'CacheError';
|
|
}
|
|
}
|
|
exports.CacheError = CacheError;
|
|
/**
|
|
An error to be thrown when the request body is a stream and an error occurs while reading from that stream.
|
|
*/
|
|
class UploadError extends RequestError {
|
|
constructor(error, request) {
|
|
super(error.message, error, request);
|
|
this.name = 'UploadError';
|
|
}
|
|
}
|
|
exports.UploadError = UploadError;
|
|
/**
|
|
An error to be thrown when the request is aborted due to a timeout.
|
|
Includes an `event` and `timings` property.
|
|
*/
|
|
class TimeoutError extends RequestError {
|
|
constructor(error, timings, request) {
|
|
super(error.message, error, request);
|
|
this.name = 'TimeoutError';
|
|
this.event = error.event;
|
|
this.timings = timings;
|
|
}
|
|
}
|
|
exports.TimeoutError = TimeoutError;
|
|
/**
|
|
An error to be thrown when reading from response stream fails.
|
|
*/
|
|
class ReadError extends RequestError {
|
|
constructor(error, request) {
|
|
super(error.message, error, request);
|
|
this.name = 'ReadError';
|
|
}
|
|
}
|
|
exports.ReadError = ReadError;
|
|
/**
|
|
An error to be thrown when given an unsupported protocol.
|
|
*/
|
|
class UnsupportedProtocolError extends RequestError {
|
|
constructor(options) {
|
|
super(`Unsupported protocol "${options.url.protocol}"`, {}, options);
|
|
this.name = 'UnsupportedProtocolError';
|
|
}
|
|
}
|
|
exports.UnsupportedProtocolError = UnsupportedProtocolError;
|
|
const proxiedRequestEvents = [
|
|
'socket',
|
|
'connect',
|
|
'continue',
|
|
'information',
|
|
'upgrade',
|
|
'timeout'
|
|
];
|
|
class Request extends require$$0__default$1['default'].Duplex {
|
|
constructor(url, options = {}, defaults) {
|
|
super({
|
|
// This must be false, to enable throwing after destroy
|
|
// It is used for retry logic in Promise API
|
|
autoDestroy: false,
|
|
// It needs to be zero because we're just proxying the data to another stream
|
|
highWaterMark: 0
|
|
});
|
|
this[kDownloadedSize] = 0;
|
|
this[kUploadedSize] = 0;
|
|
this.requestInitialized = false;
|
|
this[kServerResponsesPiped] = new Set();
|
|
this.redirects = [];
|
|
this[kStopReading] = false;
|
|
this[kTriggerRead] = false;
|
|
this[kJobs] = [];
|
|
this.retryCount = 0;
|
|
// TODO: Remove this when targeting Node.js >= 12
|
|
this._progressCallbacks = [];
|
|
const unlockWrite = () => this._unlockWrite();
|
|
const lockWrite = () => this._lockWrite();
|
|
this.on('pipe', (source) => {
|
|
source.prependListener('data', unlockWrite);
|
|
source.on('data', lockWrite);
|
|
source.prependListener('end', unlockWrite);
|
|
source.on('end', lockWrite);
|
|
});
|
|
this.on('unpipe', (source) => {
|
|
source.off('data', unlockWrite);
|
|
source.off('data', lockWrite);
|
|
source.off('end', unlockWrite);
|
|
source.off('end', lockWrite);
|
|
});
|
|
this.on('pipe', source => {
|
|
if (source instanceof http_1.IncomingMessage) {
|
|
this.options.headers = {
|
|
...source.headers,
|
|
...this.options.headers
|
|
};
|
|
}
|
|
});
|
|
const { json, body, form } = options;
|
|
if (json || body || form) {
|
|
this._lockWrite();
|
|
}
|
|
if (exports.kIsNormalizedAlready in options) {
|
|
this.options = options;
|
|
}
|
|
else {
|
|
try {
|
|
// @ts-expect-error Common TypeScript bug saying that `this.constructor` is not accessible
|
|
this.options = this.constructor.normalizeArguments(url, options, defaults);
|
|
}
|
|
catch (error) {
|
|
// TODO: Move this to `_destroy()`
|
|
if (is_1.default.nodeStream(options.body)) {
|
|
options.body.destroy();
|
|
}
|
|
this.destroy(error);
|
|
return;
|
|
}
|
|
}
|
|
(async () => {
|
|
var _a;
|
|
try {
|
|
if (this.options.body instanceof fs__default['default'].ReadStream) {
|
|
await waitForOpenFile(this.options.body);
|
|
}
|
|
const { url: normalizedURL } = this.options;
|
|
if (!normalizedURL) {
|
|
throw new TypeError('Missing `url` property');
|
|
}
|
|
this.requestUrl = normalizedURL.toString();
|
|
decodeURI(this.requestUrl);
|
|
await this._finalizeBody();
|
|
await this._makeRequest();
|
|
if (this.destroyed) {
|
|
(_a = this[kRequest]) === null || _a === void 0 ? void 0 : _a.destroy();
|
|
return;
|
|
}
|
|
// Queued writes etc.
|
|
for (const job of this[kJobs]) {
|
|
job();
|
|
}
|
|
// Prevent memory leak
|
|
this[kJobs].length = 0;
|
|
this.requestInitialized = true;
|
|
}
|
|
catch (error) {
|
|
if (error instanceof RequestError) {
|
|
this._beforeError(error);
|
|
return;
|
|
}
|
|
// This is a workaround for https://github.com/nodejs/node/issues/33335
|
|
if (!this.destroyed) {
|
|
this.destroy(error);
|
|
}
|
|
}
|
|
})();
|
|
}
|
|
static normalizeArguments(url, options, defaults) {
|
|
var _a, _b, _c, _d, _e;
|
|
const rawOptions = options;
|
|
if (is_1.default.object(url) && !is_1.default.urlInstance(url)) {
|
|
options = { ...defaults, ...url, ...options };
|
|
}
|
|
else {
|
|
if (url && options && options.url !== undefined) {
|
|
throw new TypeError('The `url` option is mutually exclusive with the `input` argument');
|
|
}
|
|
options = { ...defaults, ...options };
|
|
if (url !== undefined) {
|
|
options.url = url;
|
|
}
|
|
if (is_1.default.urlInstance(options.url)) {
|
|
options.url = new url_1__default['default'].URL(options.url.toString());
|
|
}
|
|
}
|
|
// TODO: Deprecate URL options in Got 12.
|
|
// Support extend-specific options
|
|
if (options.cache === false) {
|
|
options.cache = undefined;
|
|
}
|
|
if (options.dnsCache === false) {
|
|
options.dnsCache = undefined;
|
|
}
|
|
// Nice type assertions
|
|
is_1.assert.any([is_1.default.string, is_1.default.undefined], options.method);
|
|
is_1.assert.any([is_1.default.object, is_1.default.undefined], options.headers);
|
|
is_1.assert.any([is_1.default.string, is_1.default.urlInstance, is_1.default.undefined], options.prefixUrl);
|
|
is_1.assert.any([is_1.default.object, is_1.default.undefined], options.cookieJar);
|
|
is_1.assert.any([is_1.default.object, is_1.default.string, is_1.default.undefined], options.searchParams);
|
|
is_1.assert.any([is_1.default.object, is_1.default.string, is_1.default.undefined], options.cache);
|
|
is_1.assert.any([is_1.default.object, is_1.default.number, is_1.default.undefined], options.timeout);
|
|
is_1.assert.any([is_1.default.object, is_1.default.undefined], options.context);
|
|
is_1.assert.any([is_1.default.object, is_1.default.undefined], options.hooks);
|
|
is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.decompress);
|
|
is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.ignoreInvalidCookies);
|
|
is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.followRedirect);
|
|
is_1.assert.any([is_1.default.number, is_1.default.undefined], options.maxRedirects);
|
|
is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.throwHttpErrors);
|
|
is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.http2);
|
|
is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.allowGetBody);
|
|
is_1.assert.any([is_1.default.string, is_1.default.undefined], options.localAddress);
|
|
is_1.assert.any([dns_ip_version_1.isDnsLookupIpVersion, is_1.default.undefined], options.dnsLookupIpVersion);
|
|
is_1.assert.any([is_1.default.object, is_1.default.undefined], options.https);
|
|
is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.rejectUnauthorized);
|
|
if (options.https) {
|
|
is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.https.rejectUnauthorized);
|
|
is_1.assert.any([is_1.default.function_, is_1.default.undefined], options.https.checkServerIdentity);
|
|
is_1.assert.any([is_1.default.string, is_1.default.object, is_1.default.array, is_1.default.undefined], options.https.certificateAuthority);
|
|
is_1.assert.any([is_1.default.string, is_1.default.object, is_1.default.array, is_1.default.undefined], options.https.key);
|
|
is_1.assert.any([is_1.default.string, is_1.default.object, is_1.default.array, is_1.default.undefined], options.https.certificate);
|
|
is_1.assert.any([is_1.default.string, is_1.default.undefined], options.https.passphrase);
|
|
is_1.assert.any([is_1.default.string, is_1.default.buffer, is_1.default.array, is_1.default.undefined], options.https.pfx);
|
|
}
|
|
is_1.assert.any([is_1.default.object, is_1.default.undefined], options.cacheOptions);
|
|
// `options.method`
|
|
if (is_1.default.string(options.method)) {
|
|
options.method = options.method.toUpperCase();
|
|
}
|
|
else {
|
|
options.method = 'GET';
|
|
}
|
|
// `options.headers`
|
|
if (options.headers === (defaults === null || defaults === void 0 ? void 0 : defaults.headers)) {
|
|
options.headers = { ...options.headers };
|
|
}
|
|
else {
|
|
options.headers = lowercaseKeys({ ...(defaults === null || defaults === void 0 ? void 0 : defaults.headers), ...options.headers });
|
|
}
|
|
// Disallow legacy `url.Url`
|
|
if ('slashes' in options) {
|
|
throw new TypeError('The legacy `url.Url` has been deprecated. Use `URL` instead.');
|
|
}
|
|
// `options.auth`
|
|
if ('auth' in options) {
|
|
throw new TypeError('Parameter `auth` is deprecated. Use `username` / `password` instead.');
|
|
}
|
|
// `options.searchParams`
|
|
if ('searchParams' in options) {
|
|
if (options.searchParams && options.searchParams !== (defaults === null || defaults === void 0 ? void 0 : defaults.searchParams)) {
|
|
let searchParameters;
|
|
if (is_1.default.string(options.searchParams) || (options.searchParams instanceof url_1__default['default'].URLSearchParams)) {
|
|
searchParameters = new url_1__default['default'].URLSearchParams(options.searchParams);
|
|
}
|
|
else {
|
|
validateSearchParameters(options.searchParams);
|
|
searchParameters = new url_1__default['default'].URLSearchParams();
|
|
// eslint-disable-next-line guard-for-in
|
|
for (const key in options.searchParams) {
|
|
const value = options.searchParams[key];
|
|
if (value === null) {
|
|
searchParameters.append(key, '');
|
|
}
|
|
else if (value !== undefined) {
|
|
searchParameters.append(key, value);
|
|
}
|
|
}
|
|
}
|
|
// `normalizeArguments()` is also used to merge options
|
|
(_a = defaults === null || defaults === void 0 ? void 0 : defaults.searchParams) === null || _a === void 0 ? void 0 : _a.forEach((value, key) => {
|
|
// Only use default if one isn't already defined
|
|
if (!searchParameters.has(key)) {
|
|
searchParameters.append(key, value);
|
|
}
|
|
});
|
|
options.searchParams = searchParameters;
|
|
}
|
|
}
|
|
// `options.username` & `options.password`
|
|
options.username = (_b = options.username) !== null && _b !== void 0 ? _b : '';
|
|
options.password = (_c = options.password) !== null && _c !== void 0 ? _c : '';
|
|
// `options.prefixUrl` & `options.url`
|
|
if (is_1.default.undefined(options.prefixUrl)) {
|
|
options.prefixUrl = (_d = defaults === null || defaults === void 0 ? void 0 : defaults.prefixUrl) !== null && _d !== void 0 ? _d : '';
|
|
}
|
|
else {
|
|
options.prefixUrl = options.prefixUrl.toString();
|
|
if (options.prefixUrl !== '' && !options.prefixUrl.endsWith('/')) {
|
|
options.prefixUrl += '/';
|
|
}
|
|
}
|
|
if (is_1.default.string(options.url)) {
|
|
if (options.url.startsWith('/')) {
|
|
throw new Error('`input` must not start with a slash when using `prefixUrl`');
|
|
}
|
|
options.url = options_to_url_1.default(options.prefixUrl + options.url, options);
|
|
}
|
|
else if ((is_1.default.undefined(options.url) && options.prefixUrl !== '') || options.protocol) {
|
|
options.url = options_to_url_1.default(options.prefixUrl, options);
|
|
}
|
|
if (options.url) {
|
|
if ('port' in options) {
|
|
delete options.port;
|
|
}
|
|
// Make it possible to change `options.prefixUrl`
|
|
let { prefixUrl } = options;
|
|
Object.defineProperty(options, 'prefixUrl', {
|
|
set: (value) => {
|
|
const url = options.url;
|
|
if (!url.href.startsWith(value)) {
|
|
throw new Error(`Cannot change \`prefixUrl\` from ${prefixUrl} to ${value}: ${url.href}`);
|
|
}
|
|
options.url = new url_1__default['default'].URL(value + url.href.slice(prefixUrl.length));
|
|
prefixUrl = value;
|
|
},
|
|
get: () => prefixUrl
|
|
});
|
|
// Support UNIX sockets
|
|
let { protocol } = options.url;
|
|
if (protocol === 'unix:') {
|
|
protocol = 'http:';
|
|
options.url = new url_1__default['default'].URL(`http://unix${options.url.pathname}${options.url.search}`);
|
|
}
|
|
// Set search params
|
|
if (options.searchParams) {
|
|
// eslint-disable-next-line @typescript-eslint/no-base-to-string
|
|
options.url.search = options.searchParams.toString();
|
|
}
|
|
// Protocol check
|
|
if (protocol !== 'http:' && protocol !== 'https:') {
|
|
throw new UnsupportedProtocolError(options);
|
|
}
|
|
// Update `username`
|
|
if (options.username === '') {
|
|
options.username = options.url.username;
|
|
}
|
|
else {
|
|
options.url.username = options.username;
|
|
}
|
|
// Update `password`
|
|
if (options.password === '') {
|
|
options.password = options.url.password;
|
|
}
|
|
else {
|
|
options.url.password = options.password;
|
|
}
|
|
}
|
|
// `options.cookieJar`
|
|
const { cookieJar } = options;
|
|
if (cookieJar) {
|
|
let { setCookie, getCookieString } = cookieJar;
|
|
is_1.assert.function_(setCookie);
|
|
is_1.assert.function_(getCookieString);
|
|
/* istanbul ignore next: Horrible `tough-cookie` v3 check */
|
|
if (setCookie.length === 4 && getCookieString.length === 0) {
|
|
setCookie = util_1__default['default'].promisify(setCookie.bind(options.cookieJar));
|
|
getCookieString = util_1__default['default'].promisify(getCookieString.bind(options.cookieJar));
|
|
options.cookieJar = {
|
|
setCookie,
|
|
getCookieString: getCookieString
|
|
};
|
|
}
|
|
}
|
|
// `options.cache`
|
|
const { cache } = options;
|
|
if (cache) {
|
|
if (!cacheableStore.has(cache)) {
|
|
cacheableStore.set(cache, new src(((requestOptions, handler) => {
|
|
const result = requestOptions[kRequest](requestOptions, handler);
|
|
// TODO: remove this when `cacheable-request` supports async request functions.
|
|
if (is_1.default.promise(result)) {
|
|
// @ts-expect-error
|
|
// We only need to implement the error handler in order to support HTTP2 caching.
|
|
// The result will be a promise anyway.
|
|
result.once = (event, handler) => {
|
|
if (event === 'error') {
|
|
result.catch(handler);
|
|
}
|
|
else if (event === 'abort') {
|
|
// The empty catch is needed here in case when
|
|
// it rejects before it's `await`ed in `_makeRequest`.
|
|
(async () => {
|
|
try {
|
|
const request = (await result);
|
|
request.once('abort', handler);
|
|
}
|
|
catch (_a) { }
|
|
})();
|
|
}
|
|
else {
|
|
/* istanbul ignore next: safety check */
|
|
throw new Error(`Unknown HTTP2 promise event: ${event}`);
|
|
}
|
|
return result;
|
|
};
|
|
}
|
|
return result;
|
|
}), cache));
|
|
}
|
|
}
|
|
// `options.cacheOptions`
|
|
options.cacheOptions = { ...options.cacheOptions };
|
|
// `options.dnsCache`
|
|
if (options.dnsCache === true) {
|
|
if (!globalDnsCache) {
|
|
globalDnsCache = new source$2.default();
|
|
}
|
|
options.dnsCache = globalDnsCache;
|
|
}
|
|
else if (!is_1.default.undefined(options.dnsCache) && !options.dnsCache.lookup) {
|
|
throw new TypeError(`Parameter \`dnsCache\` must be a CacheableLookup instance or a boolean, got ${is_1.default(options.dnsCache)}`);
|
|
}
|
|
// `options.timeout`
|
|
if (is_1.default.number(options.timeout)) {
|
|
options.timeout = { request: options.timeout };
|
|
}
|
|
else if (defaults && options.timeout !== defaults.timeout) {
|
|
options.timeout = {
|
|
...defaults.timeout,
|
|
...options.timeout
|
|
};
|
|
}
|
|
else {
|
|
options.timeout = { ...options.timeout };
|
|
}
|
|
// `options.context`
|
|
if (!options.context) {
|
|
options.context = {};
|
|
}
|
|
// `options.hooks`
|
|
const areHooksDefault = options.hooks === (defaults === null || defaults === void 0 ? void 0 : defaults.hooks);
|
|
options.hooks = { ...options.hooks };
|
|
for (const event of exports.knownHookEvents) {
|
|
if (event in options.hooks) {
|
|
if (is_1.default.array(options.hooks[event])) {
|
|
// See https://github.com/microsoft/TypeScript/issues/31445#issuecomment-576929044
|
|
options.hooks[event] = [...options.hooks[event]];
|
|
}
|
|
else {
|
|
throw new TypeError(`Parameter \`${event}\` must be an Array, got ${is_1.default(options.hooks[event])}`);
|
|
}
|
|
}
|
|
else {
|
|
options.hooks[event] = [];
|
|
}
|
|
}
|
|
if (defaults && !areHooksDefault) {
|
|
for (const event of exports.knownHookEvents) {
|
|
const defaultHooks = defaults.hooks[event];
|
|
if (defaultHooks.length > 0) {
|
|
// See https://github.com/microsoft/TypeScript/issues/31445#issuecomment-576929044
|
|
options.hooks[event] = [
|
|
...defaults.hooks[event],
|
|
...options.hooks[event]
|
|
];
|
|
}
|
|
}
|
|
}
|
|
// DNS options
|
|
if ('family' in options) {
|
|
deprecation_warning_1.default('"options.family" was never documented, please use "options.dnsLookupIpVersion"');
|
|
}
|
|
// HTTPS options
|
|
if (defaults === null || defaults === void 0 ? void 0 : defaults.https) {
|
|
options.https = { ...defaults.https, ...options.https };
|
|
}
|
|
if ('rejectUnauthorized' in options) {
|
|
deprecation_warning_1.default('"options.rejectUnauthorized" is now deprecated, please use "options.https.rejectUnauthorized"');
|
|
}
|
|
if ('checkServerIdentity' in options) {
|
|
deprecation_warning_1.default('"options.checkServerIdentity" was never documented, please use "options.https.checkServerIdentity"');
|
|
}
|
|
if ('ca' in options) {
|
|
deprecation_warning_1.default('"options.ca" was never documented, please use "options.https.certificateAuthority"');
|
|
}
|
|
if ('key' in options) {
|
|
deprecation_warning_1.default('"options.key" was never documented, please use "options.https.key"');
|
|
}
|
|
if ('cert' in options) {
|
|
deprecation_warning_1.default('"options.cert" was never documented, please use "options.https.certificate"');
|
|
}
|
|
if ('passphrase' in options) {
|
|
deprecation_warning_1.default('"options.passphrase" was never documented, please use "options.https.passphrase"');
|
|
}
|
|
if ('pfx' in options) {
|
|
deprecation_warning_1.default('"options.pfx" was never documented, please use "options.https.pfx"');
|
|
}
|
|
// Other options
|
|
if ('followRedirects' in options) {
|
|
throw new TypeError('The `followRedirects` option does not exist. Use `followRedirect` instead.');
|
|
}
|
|
if (options.agent) {
|
|
for (const key in options.agent) {
|
|
if (key !== 'http' && key !== 'https' && key !== 'http2') {
|
|
throw new TypeError(`Expected the \`options.agent\` properties to be \`http\`, \`https\` or \`http2\`, got \`${key}\``);
|
|
}
|
|
}
|
|
}
|
|
options.maxRedirects = (_e = options.maxRedirects) !== null && _e !== void 0 ? _e : 0;
|
|
// Set non-enumerable properties
|
|
exports.setNonEnumerableProperties([defaults, rawOptions], options);
|
|
return normalize_arguments_1.default(options, defaults);
|
|
}
|
|
_lockWrite() {
|
|
const onLockedWrite = () => {
|
|
throw new TypeError('The payload has been already provided');
|
|
};
|
|
this.write = onLockedWrite;
|
|
this.end = onLockedWrite;
|
|
}
|
|
_unlockWrite() {
|
|
this.write = super.write;
|
|
this.end = super.end;
|
|
}
|
|
async _finalizeBody() {
|
|
const { options } = this;
|
|
const { headers } = options;
|
|
const isForm = !is_1.default.undefined(options.form);
|
|
const isJSON = !is_1.default.undefined(options.json);
|
|
const isBody = !is_1.default.undefined(options.body);
|
|
const hasPayload = isForm || isJSON || isBody;
|
|
const cannotHaveBody = exports.withoutBody.has(options.method) && !(options.method === 'GET' && options.allowGetBody);
|
|
this._cannotHaveBody = cannotHaveBody;
|
|
if (hasPayload) {
|
|
if (cannotHaveBody) {
|
|
throw new TypeError(`The \`${options.method}\` method cannot be used with a body`);
|
|
}
|
|
if ([isBody, isForm, isJSON].filter(isTrue => isTrue).length > 1) {
|
|
throw new TypeError('The `body`, `json` and `form` options are mutually exclusive');
|
|
}
|
|
if (isBody &&
|
|
!(options.body instanceof require$$0__default$1['default'].Readable) &&
|
|
!is_1.default.string(options.body) &&
|
|
!is_1.default.buffer(options.body) &&
|
|
!is_form_data_1.default(options.body)) {
|
|
throw new TypeError('The `body` option must be a stream.Readable, string or Buffer');
|
|
}
|
|
if (isForm && !is_1.default.object(options.form)) {
|
|
throw new TypeError('The `form` option must be an Object');
|
|
}
|
|
{
|
|
// Serialize body
|
|
const noContentType = !is_1.default.string(headers['content-type']);
|
|
if (isBody) {
|
|
// Special case for https://github.com/form-data/form-data
|
|
if (is_form_data_1.default(options.body) && noContentType) {
|
|
headers['content-type'] = `multipart/form-data; boundary=${options.body.getBoundary()}`;
|
|
}
|
|
this[kBody] = options.body;
|
|
}
|
|
else if (isForm) {
|
|
if (noContentType) {
|
|
headers['content-type'] = 'application/x-www-form-urlencoded';
|
|
}
|
|
this[kBody] = (new url_1__default['default'].URLSearchParams(options.form)).toString();
|
|
}
|
|
else {
|
|
if (noContentType) {
|
|
headers['content-type'] = 'application/json';
|
|
}
|
|
this[kBody] = options.stringifyJson(options.json);
|
|
}
|
|
const uploadBodySize = await get_body_size_1.default(this[kBody], options.headers);
|
|
// See https://tools.ietf.org/html/rfc7230#section-3.3.2
|
|
// A user agent SHOULD send a Content-Length in a request message when
|
|
// no Transfer-Encoding is sent and the request method defines a meaning
|
|
// for an enclosed payload body. For example, a Content-Length header
|
|
// field is normally sent in a POST request even when the value is 0
|
|
// (indicating an empty payload body). A user agent SHOULD NOT send a
|
|
// Content-Length header field when the request message does not contain
|
|
// a payload body and the method semantics do not anticipate such a
|
|
// body.
|
|
if (is_1.default.undefined(headers['content-length']) && is_1.default.undefined(headers['transfer-encoding'])) {
|
|
if (!cannotHaveBody && !is_1.default.undefined(uploadBodySize)) {
|
|
headers['content-length'] = String(uploadBodySize);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if (cannotHaveBody) {
|
|
this._lockWrite();
|
|
}
|
|
else {
|
|
this._unlockWrite();
|
|
}
|
|
this[kBodySize] = Number(headers['content-length']) || undefined;
|
|
}
|
|
async _onResponseBase(response) {
|
|
const { options } = this;
|
|
const { url } = options;
|
|
this[kOriginalResponse] = response;
|
|
if (options.decompress) {
|
|
response = decompressResponse(response);
|
|
}
|
|
const statusCode = response.statusCode;
|
|
const typedResponse = response;
|
|
typedResponse.statusMessage = typedResponse.statusMessage ? typedResponse.statusMessage : http__default['default'].STATUS_CODES[statusCode];
|
|
typedResponse.url = options.url.toString();
|
|
typedResponse.requestUrl = this.requestUrl;
|
|
typedResponse.redirectUrls = this.redirects;
|
|
typedResponse.request = this;
|
|
typedResponse.isFromCache = response.fromCache || false;
|
|
typedResponse.ip = this.ip;
|
|
typedResponse.retryCount = this.retryCount;
|
|
this[kIsFromCache] = typedResponse.isFromCache;
|
|
this[kResponseSize] = Number(response.headers['content-length']) || undefined;
|
|
this[kResponse] = response;
|
|
response.once('end', () => {
|
|
this[kResponseSize] = this[kDownloadedSize];
|
|
this.emit('downloadProgress', this.downloadProgress);
|
|
});
|
|
response.once('error', (error) => {
|
|
// Force clean-up, because some packages don't do this.
|
|
// TODO: Fix decompress-response
|
|
response.destroy();
|
|
this._beforeError(new ReadError(error, this));
|
|
});
|
|
response.once('aborted', () => {
|
|
this._beforeError(new ReadError({
|
|
name: 'Error',
|
|
message: 'The server aborted pending request',
|
|
code: 'ECONNRESET'
|
|
}, this));
|
|
});
|
|
this.emit('downloadProgress', this.downloadProgress);
|
|
const rawCookies = response.headers['set-cookie'];
|
|
if (is_1.default.object(options.cookieJar) && rawCookies) {
|
|
let promises = rawCookies.map(async (rawCookie) => options.cookieJar.setCookie(rawCookie, url.toString()));
|
|
if (options.ignoreInvalidCookies) {
|
|
promises = promises.map(async (p) => p.catch(() => { }));
|
|
}
|
|
try {
|
|
await Promise.all(promises);
|
|
}
|
|
catch (error) {
|
|
this._beforeError(error);
|
|
return;
|
|
}
|
|
}
|
|
if (options.followRedirect && response.headers.location && redirectCodes.has(statusCode)) {
|
|
// We're being redirected, we don't care about the response.
|
|
// It'd be best to abort the request, but we can't because
|
|
// we would have to sacrifice the TCP connection. We don't want that.
|
|
response.resume();
|
|
if (this[kRequest]) {
|
|
this[kCancelTimeouts]();
|
|
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
|
delete this[kRequest];
|
|
this[kUnproxyEvents]();
|
|
}
|
|
const shouldBeGet = statusCode === 303 && options.method !== 'GET' && options.method !== 'HEAD';
|
|
if (shouldBeGet || !options.methodRewriting) {
|
|
// Server responded with "see other", indicating that the resource exists at another location,
|
|
// and the client should request it from that location via GET or HEAD.
|
|
options.method = 'GET';
|
|
if ('body' in options) {
|
|
delete options.body;
|
|
}
|
|
if ('json' in options) {
|
|
delete options.json;
|
|
}
|
|
if ('form' in options) {
|
|
delete options.form;
|
|
}
|
|
this[kBody] = undefined;
|
|
delete options.headers['content-length'];
|
|
}
|
|
if (this.redirects.length >= options.maxRedirects) {
|
|
this._beforeError(new MaxRedirectsError(this));
|
|
return;
|
|
}
|
|
try {
|
|
// Do not remove. See https://github.com/sindresorhus/got/pull/214
|
|
const redirectBuffer = Buffer.from(response.headers.location, 'binary').toString();
|
|
// Handles invalid URLs. See https://github.com/sindresorhus/got/issues/604
|
|
const redirectUrl = new url_1__default['default'].URL(redirectBuffer, url);
|
|
const redirectString = redirectUrl.toString();
|
|
decodeURI(redirectString);
|
|
// Redirecting to a different site, clear sensitive data.
|
|
if (redirectUrl.hostname !== url.hostname || redirectUrl.port !== url.port) {
|
|
if ('host' in options.headers) {
|
|
delete options.headers.host;
|
|
}
|
|
if ('cookie' in options.headers) {
|
|
delete options.headers.cookie;
|
|
}
|
|
if ('authorization' in options.headers) {
|
|
delete options.headers.authorization;
|
|
}
|
|
if (options.username || options.password) {
|
|
options.username = '';
|
|
options.password = '';
|
|
}
|
|
}
|
|
else {
|
|
redirectUrl.username = options.username;
|
|
redirectUrl.password = options.password;
|
|
}
|
|
this.redirects.push(redirectString);
|
|
options.url = redirectUrl;
|
|
for (const hook of options.hooks.beforeRedirect) {
|
|
// eslint-disable-next-line no-await-in-loop
|
|
await hook(options, typedResponse);
|
|
}
|
|
this.emit('redirect', typedResponse, options);
|
|
await this._makeRequest();
|
|
}
|
|
catch (error) {
|
|
this._beforeError(error);
|
|
return;
|
|
}
|
|
return;
|
|
}
|
|
if (options.isStream && options.throwHttpErrors && !is_response_ok_1.isResponseOk(typedResponse)) {
|
|
this._beforeError(new HTTPError(typedResponse));
|
|
return;
|
|
}
|
|
response.on('readable', () => {
|
|
if (this[kTriggerRead]) {
|
|
this._read();
|
|
}
|
|
});
|
|
this.on('resume', () => {
|
|
response.resume();
|
|
});
|
|
this.on('pause', () => {
|
|
response.pause();
|
|
});
|
|
response.once('end', () => {
|
|
this.push(null);
|
|
});
|
|
this.emit('response', response);
|
|
for (const destination of this[kServerResponsesPiped]) {
|
|
if (destination.headersSent) {
|
|
continue;
|
|
}
|
|
// eslint-disable-next-line guard-for-in
|
|
for (const key in response.headers) {
|
|
const isAllowed = options.decompress ? key !== 'content-encoding' : true;
|
|
const value = response.headers[key];
|
|
if (isAllowed) {
|
|
destination.setHeader(key, value);
|
|
}
|
|
}
|
|
destination.statusCode = statusCode;
|
|
}
|
|
}
|
|
async _onResponse(response) {
|
|
try {
|
|
await this._onResponseBase(response);
|
|
}
|
|
catch (error) {
|
|
/* istanbul ignore next: better safe than sorry */
|
|
this._beforeError(error);
|
|
}
|
|
}
|
|
_onRequest(request) {
|
|
const { options } = this;
|
|
const { timeout, url } = options;
|
|
source$3.default(request);
|
|
this[kCancelTimeouts] = timed_out_1.default(request, timeout, url);
|
|
const responseEventName = options.cache ? 'cacheableResponse' : 'response';
|
|
request.once(responseEventName, (response) => {
|
|
void this._onResponse(response);
|
|
});
|
|
request.once('error', (error) => {
|
|
var _a;
|
|
// Force clean-up, because some packages (e.g. nock) don't do this.
|
|
request.destroy();
|
|
// Node.js <= 12.18.2 mistakenly emits the response `end` first.
|
|
(_a = request.res) === null || _a === void 0 ? void 0 : _a.removeAllListeners('end');
|
|
error = error instanceof timed_out_1.TimeoutError ? new TimeoutError(error, this.timings, this) : new RequestError(error.message, error, this);
|
|
this._beforeError(error);
|
|
});
|
|
this[kUnproxyEvents] = proxy_events_1.default(request, this, proxiedRequestEvents);
|
|
this[kRequest] = request;
|
|
this.emit('uploadProgress', this.uploadProgress);
|
|
// Send body
|
|
const body = this[kBody];
|
|
const currentRequest = this.redirects.length === 0 ? this : request;
|
|
if (is_1.default.nodeStream(body)) {
|
|
body.pipe(currentRequest);
|
|
body.once('error', (error) => {
|
|
this._beforeError(new UploadError(error, this));
|
|
});
|
|
}
|
|
else {
|
|
this._unlockWrite();
|
|
if (!is_1.default.undefined(body)) {
|
|
this._writeRequest(body, undefined, () => { });
|
|
currentRequest.end();
|
|
this._lockWrite();
|
|
}
|
|
else if (this._cannotHaveBody || this._noPipe) {
|
|
currentRequest.end();
|
|
this._lockWrite();
|
|
}
|
|
}
|
|
this.emit('request', request);
|
|
}
|
|
async _createCacheableRequest(url, options) {
|
|
return new Promise((resolve, reject) => {
|
|
// TODO: Remove `utils/url-to-options.ts` when `cacheable-request` is fixed
|
|
Object.assign(options, url_to_options_1.default(url));
|
|
// `http-cache-semantics` checks this
|
|
// TODO: Fix this ignore.
|
|
// @ts-expect-error
|
|
delete options.url;
|
|
let request;
|
|
// This is ugly
|
|
const cacheRequest = cacheableStore.get(options.cache)(options, async (response) => {
|
|
// TODO: Fix `cacheable-response`
|
|
response._readableState.autoDestroy = false;
|
|
if (request) {
|
|
(await request).emit('cacheableResponse', response);
|
|
}
|
|
resolve(response);
|
|
});
|
|
// Restore options
|
|
options.url = url;
|
|
cacheRequest.once('error', reject);
|
|
cacheRequest.once('request', async (requestOrPromise) => {
|
|
request = requestOrPromise;
|
|
resolve(request);
|
|
});
|
|
});
|
|
}
|
|
async _makeRequest() {
|
|
var _a, _b, _c, _d, _e;
|
|
const { options } = this;
|
|
const { headers } = options;
|
|
for (const key in headers) {
|
|
if (is_1.default.undefined(headers[key])) {
|
|
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
|
delete headers[key];
|
|
}
|
|
else if (is_1.default.null_(headers[key])) {
|
|
throw new TypeError(`Use \`undefined\` instead of \`null\` to delete the \`${key}\` header`);
|
|
}
|
|
}
|
|
if (options.decompress && is_1.default.undefined(headers['accept-encoding'])) {
|
|
headers['accept-encoding'] = supportsBrotli ? 'gzip, deflate, br' : 'gzip, deflate';
|
|
}
|
|
// Set cookies
|
|
if (options.cookieJar) {
|
|
const cookieString = await options.cookieJar.getCookieString(options.url.toString());
|
|
if (is_1.default.nonEmptyString(cookieString)) {
|
|
options.headers.cookie = cookieString;
|
|
}
|
|
}
|
|
for (const hook of options.hooks.beforeRequest) {
|
|
// eslint-disable-next-line no-await-in-loop
|
|
const result = await hook(options);
|
|
if (!is_1.default.undefined(result)) {
|
|
// @ts-expect-error Skip the type mismatch to support abstract responses
|
|
options.request = () => result;
|
|
break;
|
|
}
|
|
}
|
|
if (options.body && this[kBody] !== options.body) {
|
|
this[kBody] = options.body;
|
|
}
|
|
const { agent, request, timeout, url } = options;
|
|
if (options.dnsCache && !('lookup' in options)) {
|
|
options.lookup = options.dnsCache.lookup;
|
|
}
|
|
// UNIX sockets
|
|
if (url.hostname === 'unix') {
|
|
const matches = /(?<socketPath>.+?):(?<path>.+)/.exec(`${url.pathname}${url.search}`);
|
|
if (matches === null || matches === void 0 ? void 0 : matches.groups) {
|
|
const { socketPath, path } = matches.groups;
|
|
Object.assign(options, {
|
|
socketPath,
|
|
path,
|
|
host: ''
|
|
});
|
|
}
|
|
}
|
|
const isHttps = url.protocol === 'https:';
|
|
// Fallback function
|
|
let fallbackFn;
|
|
if (options.http2) {
|
|
fallbackFn = source$1.auto;
|
|
}
|
|
else {
|
|
fallbackFn = isHttps ? https__default['default'].request : http__default['default'].request;
|
|
}
|
|
const realFn = (_a = options.request) !== null && _a !== void 0 ? _a : fallbackFn;
|
|
// Cache support
|
|
const fn = options.cache ? this._createCacheableRequest : realFn;
|
|
// Pass an agent directly when HTTP2 is disabled
|
|
if (agent && !options.http2) {
|
|
options.agent = agent[isHttps ? 'https' : 'http'];
|
|
}
|
|
// Prepare plain HTTP request options
|
|
options[kRequest] = realFn;
|
|
delete options.request;
|
|
// TODO: Fix this ignore.
|
|
// @ts-expect-error
|
|
delete options.timeout;
|
|
const requestOptions = options;
|
|
requestOptions.shared = (_b = options.cacheOptions) === null || _b === void 0 ? void 0 : _b.shared;
|
|
requestOptions.cacheHeuristic = (_c = options.cacheOptions) === null || _c === void 0 ? void 0 : _c.cacheHeuristic;
|
|
requestOptions.immutableMinTimeToLive = (_d = options.cacheOptions) === null || _d === void 0 ? void 0 : _d.immutableMinTimeToLive;
|
|
requestOptions.ignoreCargoCult = (_e = options.cacheOptions) === null || _e === void 0 ? void 0 : _e.ignoreCargoCult;
|
|
// If `dnsLookupIpVersion` is not present do not override `family`
|
|
if (options.dnsLookupIpVersion !== undefined) {
|
|
try {
|
|
requestOptions.family = dns_ip_version_1.dnsLookupIpVersionToFamily(options.dnsLookupIpVersion);
|
|
}
|
|
catch (_f) {
|
|
throw new Error('Invalid `dnsLookupIpVersion` option value');
|
|
}
|
|
}
|
|
// HTTPS options remapping
|
|
if (options.https) {
|
|
if ('rejectUnauthorized' in options.https) {
|
|
requestOptions.rejectUnauthorized = options.https.rejectUnauthorized;
|
|
}
|
|
if (options.https.checkServerIdentity) {
|
|
requestOptions.checkServerIdentity = options.https.checkServerIdentity;
|
|
}
|
|
if (options.https.certificateAuthority) {
|
|
requestOptions.ca = options.https.certificateAuthority;
|
|
}
|
|
if (options.https.certificate) {
|
|
requestOptions.cert = options.https.certificate;
|
|
}
|
|
if (options.https.key) {
|
|
requestOptions.key = options.https.key;
|
|
}
|
|
if (options.https.passphrase) {
|
|
requestOptions.passphrase = options.https.passphrase;
|
|
}
|
|
if (options.https.pfx) {
|
|
requestOptions.pfx = options.https.pfx;
|
|
}
|
|
}
|
|
try {
|
|
let requestOrResponse = await fn(url, requestOptions);
|
|
if (is_1.default.undefined(requestOrResponse)) {
|
|
requestOrResponse = fallbackFn(url, requestOptions);
|
|
}
|
|
// Restore options
|
|
options.request = request;
|
|
options.timeout = timeout;
|
|
options.agent = agent;
|
|
// HTTPS options restore
|
|
if (options.https) {
|
|
if ('rejectUnauthorized' in options.https) {
|
|
delete requestOptions.rejectUnauthorized;
|
|
}
|
|
if (options.https.checkServerIdentity) {
|
|
// @ts-expect-error - This one will be removed when we remove the alias.
|
|
delete requestOptions.checkServerIdentity;
|
|
}
|
|
if (options.https.certificateAuthority) {
|
|
delete requestOptions.ca;
|
|
}
|
|
if (options.https.certificate) {
|
|
delete requestOptions.cert;
|
|
}
|
|
if (options.https.key) {
|
|
delete requestOptions.key;
|
|
}
|
|
if (options.https.passphrase) {
|
|
delete requestOptions.passphrase;
|
|
}
|
|
if (options.https.pfx) {
|
|
delete requestOptions.pfx;
|
|
}
|
|
}
|
|
if (isClientRequest(requestOrResponse)) {
|
|
this._onRequest(requestOrResponse);
|
|
// Emit the response after the stream has been ended
|
|
}
|
|
else if (this.writable) {
|
|
this.once('finish', () => {
|
|
void this._onResponse(requestOrResponse);
|
|
});
|
|
this._unlockWrite();
|
|
this.end();
|
|
this._lockWrite();
|
|
}
|
|
else {
|
|
void this._onResponse(requestOrResponse);
|
|
}
|
|
}
|
|
catch (error) {
|
|
if (error instanceof src.CacheError) {
|
|
throw new CacheError(error, this);
|
|
}
|
|
throw new RequestError(error.message, error, this);
|
|
}
|
|
}
|
|
async _error(error) {
|
|
try {
|
|
for (const hook of this.options.hooks.beforeError) {
|
|
// eslint-disable-next-line no-await-in-loop
|
|
error = await hook(error);
|
|
}
|
|
}
|
|
catch (error_) {
|
|
error = new RequestError(error_.message, error_, this);
|
|
}
|
|
this.destroy(error);
|
|
}
|
|
_beforeError(error) {
|
|
if (this[kStopReading]) {
|
|
return;
|
|
}
|
|
const { options } = this;
|
|
const retryCount = this.retryCount + 1;
|
|
this[kStopReading] = true;
|
|
if (!(error instanceof RequestError)) {
|
|
error = new RequestError(error.message, error, this);
|
|
}
|
|
const typedError = error;
|
|
const { response } = typedError;
|
|
void (async () => {
|
|
if (response && !response.body) {
|
|
response.setEncoding(this._readableState.encoding);
|
|
try {
|
|
response.rawBody = await get_buffer_1.default(response);
|
|
response.body = response.rawBody.toString();
|
|
}
|
|
catch (_a) { }
|
|
}
|
|
if (this.listenerCount('retry') !== 0) {
|
|
let backoff;
|
|
try {
|
|
let retryAfter;
|
|
if (response && 'retry-after' in response.headers) {
|
|
retryAfter = Number(response.headers['retry-after']);
|
|
if (Number.isNaN(retryAfter)) {
|
|
retryAfter = Date.parse(response.headers['retry-after']) - Date.now();
|
|
if (retryAfter <= 0) {
|
|
retryAfter = 1;
|
|
}
|
|
}
|
|
else {
|
|
retryAfter *= 1000;
|
|
}
|
|
}
|
|
backoff = await options.retry.calculateDelay({
|
|
attemptCount: retryCount,
|
|
retryOptions: options.retry,
|
|
error: typedError,
|
|
retryAfter,
|
|
computedValue: calculate_retry_delay_1.default({
|
|
attemptCount: retryCount,
|
|
retryOptions: options.retry,
|
|
error: typedError,
|
|
retryAfter,
|
|
computedValue: 0
|
|
})
|
|
});
|
|
}
|
|
catch (error_) {
|
|
void this._error(new RequestError(error_.message, error_, this));
|
|
return;
|
|
}
|
|
if (backoff) {
|
|
const retry = async () => {
|
|
try {
|
|
for (const hook of this.options.hooks.beforeRetry) {
|
|
// eslint-disable-next-line no-await-in-loop
|
|
await hook(this.options, typedError, retryCount);
|
|
}
|
|
}
|
|
catch (error_) {
|
|
void this._error(new RequestError(error_.message, error, this));
|
|
return;
|
|
}
|
|
// Something forced us to abort the retry
|
|
if (this.destroyed) {
|
|
return;
|
|
}
|
|
this.destroy();
|
|
this.emit('retry', retryCount, error);
|
|
};
|
|
this[kRetryTimeout] = setTimeout(retry, backoff);
|
|
return;
|
|
}
|
|
}
|
|
void this._error(typedError);
|
|
})();
|
|
}
|
|
_read() {
|
|
this[kTriggerRead] = true;
|
|
const response = this[kResponse];
|
|
if (response && !this[kStopReading]) {
|
|
// We cannot put this in the `if` above
|
|
// because `.read()` also triggers the `end` event
|
|
if (response.readableLength) {
|
|
this[kTriggerRead] = false;
|
|
}
|
|
let data;
|
|
while ((data = response.read()) !== null) {
|
|
this[kDownloadedSize] += data.length;
|
|
this[kStartedReading] = true;
|
|
const progress = this.downloadProgress;
|
|
if (progress.percent < 1) {
|
|
this.emit('downloadProgress', progress);
|
|
}
|
|
this.push(data);
|
|
}
|
|
}
|
|
}
|
|
// Node.js 12 has incorrect types, so the encoding must be a string
|
|
_write(chunk, encoding, callback) {
|
|
const write = () => {
|
|
this._writeRequest(chunk, encoding, callback);
|
|
};
|
|
if (this.requestInitialized) {
|
|
write();
|
|
}
|
|
else {
|
|
this[kJobs].push(write);
|
|
}
|
|
}
|
|
_writeRequest(chunk, encoding, callback) {
|
|
if (this[kRequest].destroyed) {
|
|
// Probably the `ClientRequest` instance will throw
|
|
return;
|
|
}
|
|
this._progressCallbacks.push(() => {
|
|
this[kUploadedSize] += Buffer.byteLength(chunk, encoding);
|
|
const progress = this.uploadProgress;
|
|
if (progress.percent < 1) {
|
|
this.emit('uploadProgress', progress);
|
|
}
|
|
});
|
|
// TODO: What happens if it's from cache? Then this[kRequest] won't be defined.
|
|
this[kRequest].write(chunk, encoding, (error) => {
|
|
if (!error && this._progressCallbacks.length > 0) {
|
|
this._progressCallbacks.shift()();
|
|
}
|
|
callback(error);
|
|
});
|
|
}
|
|
_final(callback) {
|
|
const endRequest = () => {
|
|
// FIX: Node.js 10 calls the write callback AFTER the end callback!
|
|
while (this._progressCallbacks.length !== 0) {
|
|
this._progressCallbacks.shift()();
|
|
}
|
|
// We need to check if `this[kRequest]` is present,
|
|
// because it isn't when we use cache.
|
|
if (!(kRequest in this)) {
|
|
callback();
|
|
return;
|
|
}
|
|
if (this[kRequest].destroyed) {
|
|
callback();
|
|
return;
|
|
}
|
|
this[kRequest].end((error) => {
|
|
if (!error) {
|
|
this[kBodySize] = this[kUploadedSize];
|
|
this.emit('uploadProgress', this.uploadProgress);
|
|
this[kRequest].emit('upload-complete');
|
|
}
|
|
callback(error);
|
|
});
|
|
};
|
|
if (this.requestInitialized) {
|
|
endRequest();
|
|
}
|
|
else {
|
|
this[kJobs].push(endRequest);
|
|
}
|
|
}
|
|
_destroy(error, callback) {
|
|
var _a;
|
|
this[kStopReading] = true;
|
|
// Prevent further retries
|
|
clearTimeout(this[kRetryTimeout]);
|
|
if (kRequest in this) {
|
|
this[kCancelTimeouts]();
|
|
// TODO: Remove the next `if` when these get fixed:
|
|
// - https://github.com/nodejs/node/issues/32851
|
|
if (!((_a = this[kResponse]) === null || _a === void 0 ? void 0 : _a.complete)) {
|
|
this[kRequest].destroy();
|
|
}
|
|
}
|
|
if (error !== null && !is_1.default.undefined(error) && !(error instanceof RequestError)) {
|
|
error = new RequestError(error.message, error, this);
|
|
}
|
|
callback(error);
|
|
}
|
|
get _isAboutToError() {
|
|
return this[kStopReading];
|
|
}
|
|
/**
|
|
The remote IP address.
|
|
*/
|
|
get ip() {
|
|
var _a;
|
|
return (_a = this.socket) === null || _a === void 0 ? void 0 : _a.remoteAddress;
|
|
}
|
|
/**
|
|
Indicates whether the request has been aborted or not.
|
|
*/
|
|
get aborted() {
|
|
var _a, _b, _c;
|
|
return ((_b = (_a = this[kRequest]) === null || _a === void 0 ? void 0 : _a.destroyed) !== null && _b !== void 0 ? _b : this.destroyed) && !((_c = this[kOriginalResponse]) === null || _c === void 0 ? void 0 : _c.complete);
|
|
}
|
|
get socket() {
|
|
var _a, _b;
|
|
return (_b = (_a = this[kRequest]) === null || _a === void 0 ? void 0 : _a.socket) !== null && _b !== void 0 ? _b : undefined;
|
|
}
|
|
/**
|
|
Progress event for downloading (receiving a response).
|
|
*/
|
|
get downloadProgress() {
|
|
let percent;
|
|
if (this[kResponseSize]) {
|
|
percent = this[kDownloadedSize] / this[kResponseSize];
|
|
}
|
|
else if (this[kResponseSize] === this[kDownloadedSize]) {
|
|
percent = 1;
|
|
}
|
|
else {
|
|
percent = 0;
|
|
}
|
|
return {
|
|
percent,
|
|
transferred: this[kDownloadedSize],
|
|
total: this[kResponseSize]
|
|
};
|
|
}
|
|
/**
|
|
Progress event for uploading (sending a request).
|
|
*/
|
|
get uploadProgress() {
|
|
let percent;
|
|
if (this[kBodySize]) {
|
|
percent = this[kUploadedSize] / this[kBodySize];
|
|
}
|
|
else if (this[kBodySize] === this[kUploadedSize]) {
|
|
percent = 1;
|
|
}
|
|
else {
|
|
percent = 0;
|
|
}
|
|
return {
|
|
percent,
|
|
transferred: this[kUploadedSize],
|
|
total: this[kBodySize]
|
|
};
|
|
}
|
|
/**
|
|
The object contains the following properties:
|
|
|
|
- `start` - Time when the request started.
|
|
- `socket` - Time when a socket was assigned to the request.
|
|
- `lookup` - Time when the DNS lookup finished.
|
|
- `connect` - Time when the socket successfully connected.
|
|
- `secureConnect` - Time when the socket securely connected.
|
|
- `upload` - Time when the request finished uploading.
|
|
- `response` - Time when the request fired `response` event.
|
|
- `end` - Time when the response fired `end` event.
|
|
- `error` - Time when the request fired `error` event.
|
|
- `abort` - Time when the request fired `abort` event.
|
|
- `phases`
|
|
- `wait` - `timings.socket - timings.start`
|
|
- `dns` - `timings.lookup - timings.socket`
|
|
- `tcp` - `timings.connect - timings.lookup`
|
|
- `tls` - `timings.secureConnect - timings.connect`
|
|
- `request` - `timings.upload - (timings.secureConnect || timings.connect)`
|
|
- `firstByte` - `timings.response - timings.upload`
|
|
- `download` - `timings.end - timings.response`
|
|
- `total` - `(timings.end || timings.error || timings.abort) - timings.start`
|
|
|
|
If something has not been measured yet, it will be `undefined`.
|
|
|
|
__Note__: The time is a `number` representing the milliseconds elapsed since the UNIX epoch.
|
|
*/
|
|
get timings() {
|
|
var _a;
|
|
return (_a = this[kRequest]) === null || _a === void 0 ? void 0 : _a.timings;
|
|
}
|
|
/**
|
|
Whether the response was retrieved from the cache.
|
|
*/
|
|
get isFromCache() {
|
|
return this[kIsFromCache];
|
|
}
|
|
pipe(destination, options) {
|
|
if (this[kStartedReading]) {
|
|
throw new Error('Failed to pipe. The response has been emitted already.');
|
|
}
|
|
if (destination instanceof http_1.ServerResponse) {
|
|
this[kServerResponsesPiped].add(destination);
|
|
}
|
|
return super.pipe(destination, options);
|
|
}
|
|
unpipe(destination) {
|
|
if (destination instanceof http_1.ServerResponse) {
|
|
this[kServerResponsesPiped].delete(destination);
|
|
}
|
|
super.unpipe(destination);
|
|
return this;
|
|
}
|
|
}
|
|
exports.default = Request;
|
|
});
|
|
|
|
var core_1 = core$2;
|
|
|
|
var types$1 = createCommonjsModule(function (module, exports) {
|
|
var __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
if (k2 === undefined) k2 = k;
|
|
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
}) : (function(o, m, k, k2) {
|
|
if (k2 === undefined) k2 = k;
|
|
o[k2] = m[k];
|
|
}));
|
|
var __exportStar = (commonjsGlobal && commonjsGlobal.__exportStar) || function(m, exports) {
|
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.CancelError = exports.ParseError = void 0;
|
|
|
|
/**
|
|
An error to be thrown when server response code is 2xx, and parsing body fails.
|
|
Includes a `response` property.
|
|
*/
|
|
class ParseError extends core_1.RequestError {
|
|
constructor(error, response) {
|
|
const { options } = response.request;
|
|
super(`${error.message} in "${options.url.toString()}"`, error, response.request);
|
|
this.name = 'ParseError';
|
|
}
|
|
}
|
|
exports.ParseError = ParseError;
|
|
/**
|
|
An error to be thrown when the request is aborted with `.cancel()`.
|
|
*/
|
|
class CancelError extends core_1.RequestError {
|
|
constructor(request) {
|
|
super('Promise was canceled', {}, request);
|
|
this.name = 'CancelError';
|
|
}
|
|
get isCanceled() {
|
|
return true;
|
|
}
|
|
}
|
|
exports.CancelError = CancelError;
|
|
__exportStar(core_1, exports);
|
|
});
|
|
|
|
var types_1 = types$1;
|
|
|
|
const parseBody = (response, responseType, parseJson, encoding) => {
|
|
const { rawBody } = response;
|
|
try {
|
|
if (responseType === 'text') {
|
|
return rawBody.toString(encoding);
|
|
}
|
|
if (responseType === 'json') {
|
|
return rawBody.length === 0 ? '' : parseJson(rawBody.toString());
|
|
}
|
|
if (responseType === 'buffer') {
|
|
return rawBody;
|
|
}
|
|
throw new types_1.ParseError({
|
|
message: `Unknown body type '${responseType}'`,
|
|
name: 'Error'
|
|
}, response);
|
|
}
|
|
catch (error) {
|
|
throw new types_1.ParseError(error, response);
|
|
}
|
|
};
|
|
var _default$8 = parseBody;
|
|
|
|
var parseBody_1 = /*#__PURE__*/Object.defineProperty({
|
|
default: _default$8
|
|
}, '__esModule', {value: true});
|
|
|
|
var parse_body_1 = parseBody_1;
|
|
|
|
var asPromise_1 = createCommonjsModule(function (module, exports) {
|
|
var __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
if (k2 === undefined) k2 = k;
|
|
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
}) : (function(o, m, k, k2) {
|
|
if (k2 === undefined) k2 = k;
|
|
o[k2] = m[k];
|
|
}));
|
|
var __exportStar = (commonjsGlobal && commonjsGlobal.__exportStar) || function(m, exports) {
|
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const proxiedRequestEvents = [
|
|
'request',
|
|
'response',
|
|
'redirect',
|
|
'uploadProgress',
|
|
'downloadProgress'
|
|
];
|
|
function asPromise(normalizedOptions) {
|
|
let globalRequest;
|
|
let globalResponse;
|
|
const emitter = new EventEmitter__default['default'].EventEmitter();
|
|
const promise = new pCancelable((resolve, reject, onCancel) => {
|
|
const makeRequest = (retryCount) => {
|
|
const request = new core_1.default(undefined, normalizedOptions);
|
|
request.retryCount = retryCount;
|
|
request._noPipe = true;
|
|
onCancel(() => request.destroy());
|
|
onCancel.shouldReject = false;
|
|
onCancel(() => reject(new types_1.CancelError(request)));
|
|
globalRequest = request;
|
|
request.once('response', async (response) => {
|
|
var _a;
|
|
response.retryCount = retryCount;
|
|
if (response.request.aborted) {
|
|
// Canceled while downloading - will throw a `CancelError` or `TimeoutError` error
|
|
return;
|
|
}
|
|
// Download body
|
|
let rawBody;
|
|
try {
|
|
rawBody = await get_buffer_1.default(request);
|
|
response.rawBody = rawBody;
|
|
}
|
|
catch (_b) {
|
|
// The same error is caught below.
|
|
// See request.once('error')
|
|
return;
|
|
}
|
|
if (request._isAboutToError) {
|
|
return;
|
|
}
|
|
// Parse body
|
|
const contentEncoding = ((_a = response.headers['content-encoding']) !== null && _a !== void 0 ? _a : '').toLowerCase();
|
|
const isCompressed = ['gzip', 'deflate', 'br'].includes(contentEncoding);
|
|
const { options } = request;
|
|
if (isCompressed && !options.decompress) {
|
|
response.body = rawBody;
|
|
}
|
|
else {
|
|
try {
|
|
response.body = parse_body_1.default(response, options.responseType, options.parseJson, options.encoding);
|
|
}
|
|
catch (error) {
|
|
// Fallback to `utf8`
|
|
response.body = rawBody.toString();
|
|
if (is_response_ok_1.isResponseOk(response)) {
|
|
request._beforeError(error);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
try {
|
|
for (const [index, hook] of options.hooks.afterResponse.entries()) {
|
|
// @ts-expect-error TS doesn't notice that CancelableRequest is a Promise
|
|
// eslint-disable-next-line no-await-in-loop
|
|
response = await hook(response, async (updatedOptions) => {
|
|
const typedOptions = core_1.default.normalizeArguments(undefined, {
|
|
...updatedOptions,
|
|
retry: {
|
|
calculateDelay: () => 0
|
|
},
|
|
throwHttpErrors: false,
|
|
resolveBodyOnly: false
|
|
}, options);
|
|
// Remove any further hooks for that request, because we'll call them anyway.
|
|
// The loop continues. We don't want duplicates (asPromise recursion).
|
|
typedOptions.hooks.afterResponse = typedOptions.hooks.afterResponse.slice(0, index);
|
|
for (const hook of typedOptions.hooks.beforeRetry) {
|
|
// eslint-disable-next-line no-await-in-loop
|
|
await hook(typedOptions);
|
|
}
|
|
const promise = asPromise(typedOptions);
|
|
onCancel(() => {
|
|
promise.catch(() => { });
|
|
promise.cancel();
|
|
});
|
|
return promise;
|
|
});
|
|
}
|
|
}
|
|
catch (error) {
|
|
request._beforeError(new types_1.RequestError(error.message, error, request));
|
|
return;
|
|
}
|
|
if (!is_response_ok_1.isResponseOk(response)) {
|
|
request._beforeError(new types_1.HTTPError(response));
|
|
return;
|
|
}
|
|
globalResponse = response;
|
|
resolve(request.options.resolveBodyOnly ? response.body : response);
|
|
});
|
|
const onError = (error) => {
|
|
if (promise.isCanceled) {
|
|
return;
|
|
}
|
|
const { options } = request;
|
|
if (error instanceof types_1.HTTPError && !options.throwHttpErrors) {
|
|
const { response } = error;
|
|
resolve(request.options.resolveBodyOnly ? response.body : response);
|
|
return;
|
|
}
|
|
reject(error);
|
|
};
|
|
request.once('error', onError);
|
|
const previousBody = request.options.body;
|
|
request.once('retry', (newRetryCount, error) => {
|
|
var _a, _b;
|
|
if (previousBody === ((_a = error.request) === null || _a === void 0 ? void 0 : _a.options.body) && is_1.default.nodeStream((_b = error.request) === null || _b === void 0 ? void 0 : _b.options.body)) {
|
|
onError(error);
|
|
return;
|
|
}
|
|
makeRequest(newRetryCount);
|
|
});
|
|
proxy_events_1.default(request, emitter, proxiedRequestEvents);
|
|
};
|
|
makeRequest(0);
|
|
});
|
|
promise.on = (event, fn) => {
|
|
emitter.on(event, fn);
|
|
return promise;
|
|
};
|
|
const shortcut = (responseType) => {
|
|
const newPromise = (async () => {
|
|
// Wait until downloading has ended
|
|
await promise;
|
|
const { options } = globalResponse.request;
|
|
return parse_body_1.default(globalResponse, responseType, options.parseJson, options.encoding);
|
|
})();
|
|
Object.defineProperties(newPromise, Object.getOwnPropertyDescriptors(promise));
|
|
return newPromise;
|
|
};
|
|
promise.json = () => {
|
|
const { headers } = globalRequest.options;
|
|
if (!globalRequest.writableFinished && headers.accept === undefined) {
|
|
headers.accept = 'application/json';
|
|
}
|
|
return shortcut('json');
|
|
};
|
|
promise.buffer = () => shortcut('buffer');
|
|
promise.text = () => shortcut('text');
|
|
return promise;
|
|
}
|
|
exports.default = asPromise;
|
|
__exportStar(types_1, exports);
|
|
});
|
|
|
|
function createRejection(error, ...beforeErrorGroups) {
|
|
const promise = (async () => {
|
|
if (error instanceof types_1.RequestError) {
|
|
try {
|
|
for (const hooks of beforeErrorGroups) {
|
|
if (hooks) {
|
|
for (const hook of hooks) {
|
|
// eslint-disable-next-line no-await-in-loop
|
|
error = await hook(error);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (error_) {
|
|
error = error_;
|
|
}
|
|
}
|
|
throw error;
|
|
})();
|
|
const returnPromise = () => promise;
|
|
promise.json = returnPromise;
|
|
promise.text = returnPromise;
|
|
promise.buffer = returnPromise;
|
|
promise.on = returnPromise;
|
|
return promise;
|
|
}
|
|
var _default$7 = createRejection;
|
|
|
|
var createRejection_1 = /*#__PURE__*/Object.defineProperty({
|
|
default: _default$7
|
|
}, '__esModule', {value: true});
|
|
|
|
function deepFreeze(object) {
|
|
for (const value of Object.values(object)) {
|
|
if (is_1.default.plainObject(value) || is_1.default.array(value)) {
|
|
deepFreeze(value);
|
|
}
|
|
}
|
|
return Object.freeze(object);
|
|
}
|
|
var _default$6 = deepFreeze;
|
|
|
|
var deepFreeze_1 = /*#__PURE__*/Object.defineProperty({
|
|
default: _default$6
|
|
}, '__esModule', {value: true});
|
|
|
|
var types = /*#__PURE__*/Object.defineProperty({
|
|
|
|
}, '__esModule', {value: true});
|
|
|
|
var require$$0$1 = asPromise_1;
|
|
|
|
var create_rejection_1 = createRejection_1;
|
|
|
|
var deep_freeze_1 = deepFreeze_1;
|
|
|
|
var require$$0 = types;
|
|
|
|
var create_1$1 = createCommonjsModule(function (module, exports) {
|
|
var __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
if (k2 === undefined) k2 = k;
|
|
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
}) : (function(o, m, k, k2) {
|
|
if (k2 === undefined) k2 = k;
|
|
o[k2] = m[k];
|
|
}));
|
|
var __exportStar = (commonjsGlobal && commonjsGlobal.__exportStar) || function(m, exports) {
|
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.defaultHandler = void 0;
|
|
|
|
|
|
|
|
|
|
|
|
const errors = {
|
|
RequestError: require$$0$1.RequestError,
|
|
CacheError: require$$0$1.CacheError,
|
|
ReadError: require$$0$1.ReadError,
|
|
HTTPError: require$$0$1.HTTPError,
|
|
MaxRedirectsError: require$$0$1.MaxRedirectsError,
|
|
TimeoutError: require$$0$1.TimeoutError,
|
|
ParseError: require$$0$1.ParseError,
|
|
CancelError: require$$0$1.CancelError,
|
|
UnsupportedProtocolError: require$$0$1.UnsupportedProtocolError,
|
|
UploadError: require$$0$1.UploadError
|
|
};
|
|
// The `delay` package weighs 10KB (!)
|
|
const delay = async (ms) => new Promise(resolve => {
|
|
setTimeout(resolve, ms);
|
|
});
|
|
const { normalizeArguments } = core_1.default;
|
|
const mergeOptions = (...sources) => {
|
|
let mergedOptions;
|
|
for (const source of sources) {
|
|
mergedOptions = normalizeArguments(undefined, source, mergedOptions);
|
|
}
|
|
return mergedOptions;
|
|
};
|
|
const getPromiseOrStream = (options) => options.isStream ? new core_1.default(undefined, options) : require$$0$1.default(options);
|
|
const isGotInstance = (value) => ('defaults' in value && 'options' in value.defaults);
|
|
const aliases = [
|
|
'get',
|
|
'post',
|
|
'put',
|
|
'patch',
|
|
'head',
|
|
'delete'
|
|
];
|
|
exports.defaultHandler = (options, next) => next(options);
|
|
const callInitHooks = (hooks, options) => {
|
|
if (hooks) {
|
|
for (const hook of hooks) {
|
|
hook(options);
|
|
}
|
|
}
|
|
};
|
|
const create = (defaults) => {
|
|
// Proxy properties from next handlers
|
|
defaults._rawHandlers = defaults.handlers;
|
|
defaults.handlers = defaults.handlers.map(fn => ((options, next) => {
|
|
// This will be assigned by assigning result
|
|
let root;
|
|
const result = fn(options, newOptions => {
|
|
root = next(newOptions);
|
|
return root;
|
|
});
|
|
if (result !== root && !options.isStream && root) {
|
|
const typedResult = result;
|
|
const { then: promiseThen, catch: promiseCatch, finally: promiseFianlly } = typedResult;
|
|
Object.setPrototypeOf(typedResult, Object.getPrototypeOf(root));
|
|
Object.defineProperties(typedResult, Object.getOwnPropertyDescriptors(root));
|
|
// These should point to the new promise
|
|
// eslint-disable-next-line promise/prefer-await-to-then
|
|
typedResult.then = promiseThen;
|
|
typedResult.catch = promiseCatch;
|
|
typedResult.finally = promiseFianlly;
|
|
}
|
|
return result;
|
|
}));
|
|
// Got interface
|
|
const got = ((url, options = {}, _defaults) => {
|
|
var _a, _b;
|
|
let iteration = 0;
|
|
const iterateHandlers = (newOptions) => {
|
|
return defaults.handlers[iteration++](newOptions, iteration === defaults.handlers.length ? getPromiseOrStream : iterateHandlers);
|
|
};
|
|
// TODO: Remove this in Got 12.
|
|
if (is_1.default.plainObject(url)) {
|
|
const mergedOptions = {
|
|
...url,
|
|
...options
|
|
};
|
|
core_1.setNonEnumerableProperties([url, options], mergedOptions);
|
|
options = mergedOptions;
|
|
url = undefined;
|
|
}
|
|
try {
|
|
// Call `init` hooks
|
|
let initHookError;
|
|
try {
|
|
callInitHooks(defaults.options.hooks.init, options);
|
|
callInitHooks((_a = options.hooks) === null || _a === void 0 ? void 0 : _a.init, options);
|
|
}
|
|
catch (error) {
|
|
initHookError = error;
|
|
}
|
|
// Normalize options & call handlers
|
|
const normalizedOptions = normalizeArguments(url, options, _defaults !== null && _defaults !== void 0 ? _defaults : defaults.options);
|
|
normalizedOptions[core_1.kIsNormalizedAlready] = true;
|
|
if (initHookError) {
|
|
throw new require$$0$1.RequestError(initHookError.message, initHookError, normalizedOptions);
|
|
}
|
|
return iterateHandlers(normalizedOptions);
|
|
}
|
|
catch (error) {
|
|
if (options.isStream) {
|
|
throw error;
|
|
}
|
|
else {
|
|
return create_rejection_1.default(error, defaults.options.hooks.beforeError, (_b = options.hooks) === null || _b === void 0 ? void 0 : _b.beforeError);
|
|
}
|
|
}
|
|
});
|
|
got.extend = (...instancesOrOptions) => {
|
|
const optionsArray = [defaults.options];
|
|
let handlers = [...defaults._rawHandlers];
|
|
let isMutableDefaults;
|
|
for (const value of instancesOrOptions) {
|
|
if (isGotInstance(value)) {
|
|
optionsArray.push(value.defaults.options);
|
|
handlers.push(...value.defaults._rawHandlers);
|
|
isMutableDefaults = value.defaults.mutableDefaults;
|
|
}
|
|
else {
|
|
optionsArray.push(value);
|
|
if ('handlers' in value) {
|
|
handlers.push(...value.handlers);
|
|
}
|
|
isMutableDefaults = value.mutableDefaults;
|
|
}
|
|
}
|
|
handlers = handlers.filter(handler => handler !== exports.defaultHandler);
|
|
if (handlers.length === 0) {
|
|
handlers.push(exports.defaultHandler);
|
|
}
|
|
return create({
|
|
options: mergeOptions(...optionsArray),
|
|
handlers,
|
|
mutableDefaults: Boolean(isMutableDefaults)
|
|
});
|
|
};
|
|
// Pagination
|
|
const paginateEach = (async function* (url, options) {
|
|
// TODO: Remove this `@ts-expect-error` when upgrading to TypeScript 4.
|
|
// Error: Argument of type 'Merge<Options, PaginationOptions<T, R>> | undefined' is not assignable to parameter of type 'Options | undefined'.
|
|
// @ts-expect-error
|
|
let normalizedOptions = normalizeArguments(url, options, defaults.options);
|
|
normalizedOptions.resolveBodyOnly = false;
|
|
const pagination = normalizedOptions.pagination;
|
|
if (!is_1.default.object(pagination)) {
|
|
throw new TypeError('`options.pagination` must be implemented');
|
|
}
|
|
const all = [];
|
|
let { countLimit } = pagination;
|
|
let numberOfRequests = 0;
|
|
while (numberOfRequests < pagination.requestLimit) {
|
|
if (numberOfRequests !== 0) {
|
|
// eslint-disable-next-line no-await-in-loop
|
|
await delay(pagination.backoff);
|
|
}
|
|
// @ts-expect-error FIXME!
|
|
// TODO: Throw when result is not an instance of Response
|
|
// eslint-disable-next-line no-await-in-loop
|
|
const result = (await got(undefined, undefined, normalizedOptions));
|
|
// eslint-disable-next-line no-await-in-loop
|
|
const parsed = await pagination.transform(result);
|
|
const current = [];
|
|
for (const item of parsed) {
|
|
if (pagination.filter(item, all, current)) {
|
|
if (!pagination.shouldContinue(item, all, current)) {
|
|
return;
|
|
}
|
|
yield item;
|
|
if (pagination.stackAllItems) {
|
|
all.push(item);
|
|
}
|
|
current.push(item);
|
|
if (--countLimit <= 0) {
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
const optionsToMerge = pagination.paginate(result, all, current);
|
|
if (optionsToMerge === false) {
|
|
return;
|
|
}
|
|
if (optionsToMerge === result.request.options) {
|
|
normalizedOptions = result.request.options;
|
|
}
|
|
else if (optionsToMerge !== undefined) {
|
|
normalizedOptions = normalizeArguments(undefined, optionsToMerge, normalizedOptions);
|
|
}
|
|
numberOfRequests++;
|
|
}
|
|
});
|
|
got.paginate = paginateEach;
|
|
got.paginate.all = (async (url, options) => {
|
|
const results = [];
|
|
for await (const item of paginateEach(url, options)) {
|
|
results.push(item);
|
|
}
|
|
return results;
|
|
});
|
|
// For those who like very descriptive names
|
|
got.paginate.each = paginateEach;
|
|
// Stream API
|
|
got.stream = ((url, options) => got(url, { ...options, isStream: true }));
|
|
// Shortcuts
|
|
for (const method of aliases) {
|
|
got[method] = ((url, options) => got(url, { ...options, method }));
|
|
got.stream[method] = ((url, options) => {
|
|
return got(url, { ...options, method, isStream: true });
|
|
});
|
|
}
|
|
Object.assign(got, errors);
|
|
Object.defineProperty(got, 'defaults', {
|
|
value: defaults.mutableDefaults ? defaults : deep_freeze_1.default(defaults),
|
|
writable: defaults.mutableDefaults,
|
|
configurable: defaults.mutableDefaults,
|
|
enumerable: true
|
|
});
|
|
got.mergeOptions = mergeOptions;
|
|
return got;
|
|
};
|
|
exports.default = create;
|
|
__exportStar(require$$0, exports);
|
|
});
|
|
|
|
var create_1 = create_1$1;
|
|
|
|
var source = createCommonjsModule(function (module, exports) {
|
|
var __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
if (k2 === undefined) k2 = k;
|
|
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
}) : (function(o, m, k, k2) {
|
|
if (k2 === undefined) k2 = k;
|
|
o[k2] = m[k];
|
|
}));
|
|
var __exportStar = (commonjsGlobal && commonjsGlobal.__exportStar) || function(m, exports) {
|
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
|
|
|
const defaults = {
|
|
options: {
|
|
method: 'GET',
|
|
retry: {
|
|
limit: 2,
|
|
methods: [
|
|
'GET',
|
|
'PUT',
|
|
'HEAD',
|
|
'DELETE',
|
|
'OPTIONS',
|
|
'TRACE'
|
|
],
|
|
statusCodes: [
|
|
408,
|
|
413,
|
|
429,
|
|
500,
|
|
502,
|
|
503,
|
|
504,
|
|
521,
|
|
522,
|
|
524
|
|
],
|
|
errorCodes: [
|
|
'ETIMEDOUT',
|
|
'ECONNRESET',
|
|
'EADDRINUSE',
|
|
'ECONNREFUSED',
|
|
'EPIPE',
|
|
'ENOTFOUND',
|
|
'ENETUNREACH',
|
|
'EAI_AGAIN'
|
|
],
|
|
maxRetryAfter: undefined,
|
|
calculateDelay: ({ computedValue }) => computedValue
|
|
},
|
|
timeout: {},
|
|
headers: {
|
|
'user-agent': 'got (https://github.com/sindresorhus/got)'
|
|
},
|
|
hooks: {
|
|
init: [],
|
|
beforeRequest: [],
|
|
beforeRedirect: [],
|
|
beforeRetry: [],
|
|
beforeError: [],
|
|
afterResponse: []
|
|
},
|
|
cache: undefined,
|
|
dnsCache: undefined,
|
|
decompress: true,
|
|
throwHttpErrors: true,
|
|
followRedirect: true,
|
|
isStream: false,
|
|
responseType: 'text',
|
|
resolveBodyOnly: false,
|
|
maxRedirects: 10,
|
|
prefixUrl: '',
|
|
methodRewriting: true,
|
|
ignoreInvalidCookies: false,
|
|
context: {},
|
|
// TODO: Set this to `true` when Got 12 gets released
|
|
http2: false,
|
|
allowGetBody: false,
|
|
https: undefined,
|
|
pagination: {
|
|
transform: (response) => {
|
|
if (response.request.options.responseType === 'json') {
|
|
return response.body;
|
|
}
|
|
return JSON.parse(response.body);
|
|
},
|
|
paginate: response => {
|
|
if (!Reflect.has(response.headers, 'link')) {
|
|
return false;
|
|
}
|
|
const items = response.headers.link.split(',');
|
|
let next;
|
|
for (const item of items) {
|
|
const parsed = item.split(';');
|
|
if (parsed[1].includes('next')) {
|
|
next = parsed[0].trimStart().trim();
|
|
next = next.slice(1, -1);
|
|
break;
|
|
}
|
|
}
|
|
if (next) {
|
|
const options = {
|
|
url: new url_1__default['default'].URL(next)
|
|
};
|
|
return options;
|
|
}
|
|
return false;
|
|
},
|
|
filter: () => true,
|
|
shouldContinue: () => true,
|
|
countLimit: Infinity,
|
|
backoff: 0,
|
|
requestLimit: 10000,
|
|
stackAllItems: true
|
|
},
|
|
parseJson: (text) => JSON.parse(text),
|
|
stringifyJson: (object) => JSON.stringify(object),
|
|
cacheOptions: {}
|
|
},
|
|
handlers: [create_1.defaultHandler],
|
|
mutableDefaults: false
|
|
};
|
|
const got = create_1.default(defaults);
|
|
exports.default = got;
|
|
// For CommonJS default export support
|
|
module.exports = got;
|
|
module.exports.default = got;
|
|
module.exports.__esModule = true; // Workaround for TS issue: https://github.com/sindresorhus/got/pull/1267
|
|
__exportStar(create_1, exports);
|
|
__exportStar(require$$0$1, exports);
|
|
});
|
|
|
|
var got = /*@__PURE__*/getDefaultExportFromCjs(source);
|
|
|
|
var FsPromise = createCommonjsModule(function (module, exports) {
|
|
/**
|
|
* Module convert fs functions to promise based functions
|
|
*/
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.readFile = exports.writeFileSync = exports.writeFile = exports.read = exports.open = exports.close = exports.stat = exports.createReadStream = exports.pathExists = void 0;
|
|
|
|
exports.pathExists = fs__default['default'].existsSync;
|
|
exports.createReadStream = fs__default['default'].createReadStream;
|
|
async function stat(path) {
|
|
return new Promise((resolve, reject) => {
|
|
fs__default['default'].stat(path, (err, stats) => {
|
|
if (err)
|
|
reject(err);
|
|
else
|
|
resolve(stats);
|
|
});
|
|
});
|
|
}
|
|
exports.stat = stat;
|
|
async function close(fd) {
|
|
return new Promise((resolve, reject) => {
|
|
fs__default['default'].close(fd, err => {
|
|
if (err)
|
|
reject(err);
|
|
else
|
|
resolve();
|
|
});
|
|
});
|
|
}
|
|
exports.close = close;
|
|
async function open(path, mode) {
|
|
return new Promise((resolve, reject) => {
|
|
fs__default['default'].open(path, mode, (err, fd) => {
|
|
if (err)
|
|
reject(err);
|
|
else
|
|
resolve(fd);
|
|
});
|
|
});
|
|
}
|
|
exports.open = open;
|
|
async function read(fd, buffer, offset, length, position) {
|
|
return new Promise((resolve, reject) => {
|
|
fs__default['default'].read(fd, buffer, offset, length, position, (err, bytesRead, _buffer) => {
|
|
if (err)
|
|
reject(err);
|
|
else
|
|
resolve({ bytesRead, buffer: _buffer });
|
|
});
|
|
});
|
|
}
|
|
exports.read = read;
|
|
async function writeFile(path, data) {
|
|
return new Promise((resolve, reject) => {
|
|
fs__default['default'].writeFile(path, data, err => {
|
|
if (err)
|
|
reject(err);
|
|
else
|
|
resolve();
|
|
});
|
|
});
|
|
}
|
|
exports.writeFile = writeFile;
|
|
function writeFileSync(path, data) {
|
|
fs__default['default'].writeFileSync(path, data);
|
|
}
|
|
exports.writeFileSync = writeFileSync;
|
|
async function readFile(path) {
|
|
return new Promise((resolve, reject) => {
|
|
fs__default['default'].readFile(path, (err, buffer) => {
|
|
if (err)
|
|
reject(err);
|
|
else
|
|
resolve(buffer);
|
|
});
|
|
});
|
|
}
|
|
exports.readFile = readFile;
|
|
});
|
|
|
|
var EndOfFileStream = createCommonjsModule(function (module, exports) {
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.EndOfStreamError = exports.defaultMessages = void 0;
|
|
exports.defaultMessages = 'End-Of-Stream';
|
|
/**
|
|
* Thrown on read operation of the end of file or stream has been reached
|
|
*/
|
|
class EndOfStreamError extends Error {
|
|
constructor() {
|
|
super(exports.defaultMessages);
|
|
}
|
|
}
|
|
exports.EndOfStreamError = EndOfStreamError;
|
|
});
|
|
|
|
var lib$2 = createCommonjsModule(function (module, exports) {
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.StreamReader = exports.EndOfStreamError = void 0;
|
|
|
|
var EndOfFileStream_2 = EndOfFileStream;
|
|
Object.defineProperty(exports, "EndOfStreamError", { enumerable: true, get: function () { return EndOfFileStream_2.EndOfStreamError; } });
|
|
class Deferred {
|
|
constructor() {
|
|
this.resolve = () => null;
|
|
this.reject = () => null;
|
|
this.promise = new Promise((resolve, reject) => {
|
|
this.reject = reject;
|
|
this.resolve = resolve;
|
|
});
|
|
}
|
|
}
|
|
const maxStreamReadSize = 1 * 1024 * 1024; // Maximum request length on read-stream operation
|
|
class StreamReader {
|
|
constructor(s) {
|
|
this.s = s;
|
|
/**
|
|
* Deferred read request
|
|
*/
|
|
this.request = null;
|
|
this.endOfStream = false;
|
|
/**
|
|
* Store peeked data
|
|
* @type {Array}
|
|
*/
|
|
this.peekQueue = [];
|
|
if (!s.read || !s.once) {
|
|
throw new Error('Expected an instance of stream.Readable');
|
|
}
|
|
this.s.once('end', () => this.reject(new EndOfFileStream.EndOfStreamError()));
|
|
this.s.once('error', err => this.reject(err));
|
|
this.s.once('close', () => this.reject(new Error('Stream closed')));
|
|
}
|
|
/**
|
|
* Read ahead (peek) from stream. Subsequent read or peeks will return the same data
|
|
* @param uint8Array - Uint8Array (or Buffer) to store data read from stream in
|
|
* @param offset - Offset target
|
|
* @param length - Number of bytes to read
|
|
* @returns Number of bytes peeked
|
|
*/
|
|
async peek(uint8Array, offset, length) {
|
|
const bytesRead = await this.read(uint8Array, offset, length);
|
|
this.peekQueue.push(uint8Array.subarray(offset, offset + bytesRead)); // Put read data back to peek buffer
|
|
return bytesRead;
|
|
}
|
|
/**
|
|
* Read chunk from stream
|
|
* @param buffer - Target Uint8Array (or Buffer) to store data read from stream in
|
|
* @param offset - Offset target
|
|
* @param length - Number of bytes to read
|
|
* @returns Number of bytes read
|
|
*/
|
|
async read(buffer, offset, length) {
|
|
if (length === 0) {
|
|
return 0;
|
|
}
|
|
if (this.peekQueue.length === 0 && this.endOfStream) {
|
|
throw new EndOfFileStream.EndOfStreamError();
|
|
}
|
|
let remaining = length;
|
|
let bytesRead = 0;
|
|
// consume peeked data first
|
|
while (this.peekQueue.length > 0 && remaining > 0) {
|
|
const peekData = this.peekQueue.pop(); // Front of queue
|
|
if (!peekData)
|
|
throw new Error('peekData should be defined');
|
|
const lenCopy = Math.min(peekData.length, remaining);
|
|
buffer.set(peekData.subarray(0, lenCopy), offset + bytesRead);
|
|
bytesRead += lenCopy;
|
|
remaining -= lenCopy;
|
|
if (lenCopy < peekData.length) {
|
|
// remainder back to queue
|
|
this.peekQueue.push(peekData.subarray(lenCopy));
|
|
}
|
|
}
|
|
// continue reading from stream if required
|
|
while (remaining > 0 && !this.endOfStream) {
|
|
const reqLen = Math.min(remaining, maxStreamReadSize);
|
|
const chunkLen = await this._read(buffer, offset + bytesRead, reqLen);
|
|
bytesRead += chunkLen;
|
|
if (chunkLen < reqLen)
|
|
break;
|
|
remaining -= chunkLen;
|
|
}
|
|
return bytesRead;
|
|
}
|
|
/**
|
|
* Read chunk from stream
|
|
* @param buffer Target Uint8Array (or Buffer) to store data read from stream in
|
|
* @param offset Offset target
|
|
* @param length Number of bytes to read
|
|
* @returns Number of bytes read
|
|
*/
|
|
async _read(buffer, offset, length) {
|
|
if (this.request)
|
|
throw new Error('Concurrent read operation?');
|
|
const readBuffer = this.s.read(length);
|
|
if (readBuffer) {
|
|
buffer.set(readBuffer, offset);
|
|
return readBuffer.length;
|
|
}
|
|
else {
|
|
this.request = {
|
|
buffer,
|
|
offset,
|
|
length,
|
|
deferred: new Deferred()
|
|
};
|
|
this.s.once('readable', () => {
|
|
this.tryRead();
|
|
});
|
|
return this.request.deferred.promise;
|
|
}
|
|
}
|
|
tryRead() {
|
|
if (!this.request)
|
|
throw new Error('this.request should be defined');
|
|
const readBuffer = this.s.read(this.request.length);
|
|
if (readBuffer) {
|
|
this.request.buffer.set(readBuffer, this.request.offset);
|
|
this.request.deferred.resolve(readBuffer.length);
|
|
this.request = null;
|
|
}
|
|
else {
|
|
this.s.once('readable', () => {
|
|
this.tryRead();
|
|
});
|
|
}
|
|
}
|
|
reject(err) {
|
|
this.endOfStream = true;
|
|
if (this.request) {
|
|
this.request.deferred.reject(err);
|
|
this.request = null;
|
|
}
|
|
}
|
|
}
|
|
exports.StreamReader = StreamReader;
|
|
});
|
|
|
|
var AbstractTokenizer_1 = createCommonjsModule(function (module, exports) {
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.AbstractTokenizer = void 0;
|
|
|
|
/**
|
|
* Core tokenizer
|
|
*/
|
|
class AbstractTokenizer {
|
|
constructor(fileInfo) {
|
|
/**
|
|
* Tokenizer-stream position
|
|
*/
|
|
this.position = 0;
|
|
this.numBuffer = new Uint8Array(8);
|
|
this.fileInfo = fileInfo ? fileInfo : {};
|
|
}
|
|
/**
|
|
* Read a token from the tokenizer-stream
|
|
* @param token - The token to read
|
|
* @param position - If provided, the desired position in the tokenizer-stream
|
|
* @returns Promise with token data
|
|
*/
|
|
async readToken(token, position = this.position) {
|
|
const uint8Array = Buffer.alloc(token.len);
|
|
const len = await this.readBuffer(uint8Array, { position });
|
|
if (len < token.len)
|
|
throw new lib$2.EndOfStreamError();
|
|
return token.get(uint8Array, 0);
|
|
}
|
|
/**
|
|
* Peek a token from the tokenizer-stream.
|
|
* @param token - Token to peek from the tokenizer-stream.
|
|
* @param position - Offset where to begin reading within the file. If position is null, data will be read from the current file position.
|
|
* @returns Promise with token data
|
|
*/
|
|
async peekToken(token, position = this.position) {
|
|
const uint8Array = Buffer.alloc(token.len);
|
|
const len = await this.peekBuffer(uint8Array, { position });
|
|
if (len < token.len)
|
|
throw new lib$2.EndOfStreamError();
|
|
return token.get(uint8Array, 0);
|
|
}
|
|
/**
|
|
* Read a numeric token from the stream
|
|
* @param token - Numeric token
|
|
* @returns Promise with number
|
|
*/
|
|
async readNumber(token) {
|
|
const len = await this.readBuffer(this.numBuffer, { length: token.len });
|
|
if (len < token.len)
|
|
throw new lib$2.EndOfStreamError();
|
|
return token.get(this.numBuffer, 0);
|
|
}
|
|
/**
|
|
* Read a numeric token from the stream
|
|
* @param token - Numeric token
|
|
* @returns Promise with number
|
|
*/
|
|
async peekNumber(token) {
|
|
const len = await this.peekBuffer(this.numBuffer, { length: token.len });
|
|
if (len < token.len)
|
|
throw new lib$2.EndOfStreamError();
|
|
return token.get(this.numBuffer, 0);
|
|
}
|
|
/**
|
|
* Ignore number of bytes, advances the pointer in under tokenizer-stream.
|
|
* @param length - Number of bytes to ignore
|
|
* @return resolves the number of bytes ignored, equals length if this available, otherwise the number of bytes available
|
|
*/
|
|
async ignore(length) {
|
|
if (this.fileInfo.size !== undefined) {
|
|
const bytesLeft = this.fileInfo.size - this.position;
|
|
if (length > bytesLeft) {
|
|
this.position += bytesLeft;
|
|
return bytesLeft;
|
|
}
|
|
}
|
|
this.position += length;
|
|
return length;
|
|
}
|
|
async close() {
|
|
// empty
|
|
}
|
|
normalizeOptions(uint8Array, options) {
|
|
if (options && options.position !== undefined && options.position < this.position) {
|
|
throw new Error('`options.position` must be equal or greater than `tokenizer.position`');
|
|
}
|
|
if (options) {
|
|
return {
|
|
mayBeLess: options.mayBeLess === true,
|
|
offset: options.offset ? options.offset : 0,
|
|
length: options.length ? options.length : (uint8Array.length - (options.offset ? options.offset : 0)),
|
|
position: options.position ? options.position : this.position
|
|
};
|
|
}
|
|
return {
|
|
mayBeLess: false,
|
|
offset: 0,
|
|
length: uint8Array.length,
|
|
position: this.position
|
|
};
|
|
}
|
|
}
|
|
exports.AbstractTokenizer = AbstractTokenizer;
|
|
});
|
|
|
|
var ReadStreamTokenizer_1 = createCommonjsModule(function (module, exports) {
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.ReadStreamTokenizer = void 0;
|
|
|
|
|
|
const maxBufferSize = 256000;
|
|
class ReadStreamTokenizer extends AbstractTokenizer_1.AbstractTokenizer {
|
|
constructor(stream, fileInfo) {
|
|
super(fileInfo);
|
|
this.streamReader = new lib$2.StreamReader(stream);
|
|
}
|
|
/**
|
|
* Get file information, an HTTP-client may implement this doing a HEAD request
|
|
* @return Promise with file information
|
|
*/
|
|
async getFileInfo() {
|
|
return this.fileInfo;
|
|
}
|
|
/**
|
|
* Read buffer from tokenizer
|
|
* @param uint8Array - Target Uint8Array to fill with data read from the tokenizer-stream
|
|
* @param options - Read behaviour options
|
|
* @returns Promise with number of bytes read
|
|
*/
|
|
async readBuffer(uint8Array, options) {
|
|
const normOptions = this.normalizeOptions(uint8Array, options);
|
|
const skipBytes = normOptions.position - this.position;
|
|
if (skipBytes > 0) {
|
|
await this.ignore(skipBytes);
|
|
return this.readBuffer(uint8Array, options);
|
|
}
|
|
else if (skipBytes < 0) {
|
|
throw new Error('`options.position` must be equal or greater than `tokenizer.position`');
|
|
}
|
|
if (normOptions.length === 0) {
|
|
return 0;
|
|
}
|
|
const bytesRead = await this.streamReader.read(uint8Array, normOptions.offset, normOptions.length);
|
|
this.position += bytesRead;
|
|
if ((!options || !options.mayBeLess) && bytesRead < normOptions.length) {
|
|
throw new lib$2.EndOfStreamError();
|
|
}
|
|
return bytesRead;
|
|
}
|
|
/**
|
|
* Peek (read ahead) buffer from tokenizer
|
|
* @param uint8Array - Uint8Array (or Buffer) to write data to
|
|
* @param options - Read behaviour options
|
|
* @returns Promise with number of bytes peeked
|
|
*/
|
|
async peekBuffer(uint8Array, options) {
|
|
const normOptions = this.normalizeOptions(uint8Array, options);
|
|
let bytesRead = 0;
|
|
if (normOptions.position) {
|
|
const skipBytes = normOptions.position - this.position;
|
|
if (skipBytes > 0) {
|
|
const skipBuffer = new Uint8Array(normOptions.length + skipBytes);
|
|
bytesRead = await this.peekBuffer(skipBuffer, { mayBeLess: normOptions.mayBeLess });
|
|
uint8Array.set(skipBuffer.subarray(skipBytes), normOptions.offset);
|
|
return bytesRead - skipBytes;
|
|
}
|
|
else if (skipBytes < 0) {
|
|
throw new Error('Cannot peek from a negative offset in a stream');
|
|
}
|
|
}
|
|
if (normOptions.length > 0) {
|
|
try {
|
|
bytesRead = await this.streamReader.peek(uint8Array, normOptions.offset, normOptions.length);
|
|
}
|
|
catch (err) {
|
|
if (options && options.mayBeLess && err instanceof lib$2.EndOfStreamError) {
|
|
return 0;
|
|
}
|
|
throw err;
|
|
}
|
|
if ((!normOptions.mayBeLess) && bytesRead < normOptions.length) {
|
|
throw new lib$2.EndOfStreamError();
|
|
}
|
|
}
|
|
return bytesRead;
|
|
}
|
|
async ignore(length) {
|
|
// debug(`ignore ${this.position}...${this.position + length - 1}`);
|
|
const bufSize = Math.min(maxBufferSize, length);
|
|
const buf = new Uint8Array(bufSize);
|
|
let totBytesRead = 0;
|
|
while (totBytesRead < length) {
|
|
const remaining = length - totBytesRead;
|
|
const bytesRead = await this.readBuffer(buf, { length: Math.min(bufSize, remaining) });
|
|
if (bytesRead < 0) {
|
|
return bytesRead;
|
|
}
|
|
totBytesRead += bytesRead;
|
|
}
|
|
return totBytesRead;
|
|
}
|
|
}
|
|
exports.ReadStreamTokenizer = ReadStreamTokenizer;
|
|
});
|
|
|
|
var BufferTokenizer_1 = createCommonjsModule(function (module, exports) {
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.BufferTokenizer = void 0;
|
|
|
|
|
|
class BufferTokenizer extends AbstractTokenizer_1.AbstractTokenizer {
|
|
/**
|
|
* Construct BufferTokenizer
|
|
* @param uint8Array - Uint8Array to tokenize
|
|
* @param fileInfo - Pass additional file information to the tokenizer
|
|
*/
|
|
constructor(uint8Array, fileInfo) {
|
|
super(fileInfo);
|
|
this.uint8Array = uint8Array;
|
|
this.fileInfo.size = this.fileInfo.size ? this.fileInfo.size : uint8Array.length;
|
|
}
|
|
/**
|
|
* Read buffer from tokenizer
|
|
* @param uint8Array - Uint8Array to tokenize
|
|
* @param options - Read behaviour options
|
|
* @returns {Promise<number>}
|
|
*/
|
|
async readBuffer(uint8Array, options) {
|
|
if (options && options.position) {
|
|
if (options.position < this.position) {
|
|
throw new Error('`options.position` must be equal or greater than `tokenizer.position`');
|
|
}
|
|
this.position = options.position;
|
|
}
|
|
const bytesRead = await this.peekBuffer(uint8Array, options);
|
|
this.position += bytesRead;
|
|
return bytesRead;
|
|
}
|
|
/**
|
|
* Peek (read ahead) buffer from tokenizer
|
|
* @param uint8Array
|
|
* @param options - Read behaviour options
|
|
* @returns {Promise<number>}
|
|
*/
|
|
async peekBuffer(uint8Array, options) {
|
|
const normOptions = this.normalizeOptions(uint8Array, options);
|
|
const bytes2read = Math.min(this.uint8Array.length - normOptions.position, normOptions.length);
|
|
if ((!normOptions.mayBeLess) && bytes2read < normOptions.length) {
|
|
throw new lib$2.EndOfStreamError();
|
|
}
|
|
else {
|
|
uint8Array.set(this.uint8Array.subarray(normOptions.position, normOptions.position + bytes2read), normOptions.offset);
|
|
return bytes2read;
|
|
}
|
|
}
|
|
async close() {
|
|
// empty
|
|
}
|
|
}
|
|
exports.BufferTokenizer = BufferTokenizer;
|
|
});
|
|
|
|
var core$1 = createCommonjsModule(function (module, exports) {
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.fromBuffer = exports.fromStream = exports.EndOfStreamError = void 0;
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "EndOfStreamError", { enumerable: true, get: function () { return lib$2.EndOfStreamError; } });
|
|
/**
|
|
* Construct ReadStreamTokenizer from given Stream.
|
|
* Will set fileSize, if provided given Stream has set the .path property/
|
|
* @param stream - Read from Node.js Stream.Readable
|
|
* @param fileInfo - Pass the file information, like size and MIME-type of the correspnding stream.
|
|
* @returns ReadStreamTokenizer
|
|
*/
|
|
function fromStream(stream, fileInfo) {
|
|
fileInfo = fileInfo ? fileInfo : {};
|
|
return new ReadStreamTokenizer_1.ReadStreamTokenizer(stream, fileInfo);
|
|
}
|
|
exports.fromStream = fromStream;
|
|
/**
|
|
* Construct ReadStreamTokenizer from given Buffer.
|
|
* @param uint8Array - Uint8Array to tokenize
|
|
* @param fileInfo - Pass additional file information to the tokenizer
|
|
* @returns BufferTokenizer
|
|
*/
|
|
function fromBuffer(uint8Array, fileInfo) {
|
|
return new BufferTokenizer_1.BufferTokenizer(uint8Array, fileInfo);
|
|
}
|
|
exports.fromBuffer = fromBuffer;
|
|
});
|
|
|
|
var FileTokenizer_1 = createCommonjsModule(function (module, exports) {
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.fromFile = exports.FileTokenizer = void 0;
|
|
|
|
|
|
|
|
class FileTokenizer extends AbstractTokenizer_1.AbstractTokenizer {
|
|
constructor(fd, fileInfo) {
|
|
super(fileInfo);
|
|
this.fd = fd;
|
|
}
|
|
/**
|
|
* Read buffer from file
|
|
* @param uint8Array - Uint8Array to write result to
|
|
* @param options - Read behaviour options
|
|
* @returns Promise number of bytes read
|
|
*/
|
|
async readBuffer(uint8Array, options) {
|
|
const normOptions = this.normalizeOptions(uint8Array, options);
|
|
this.position = normOptions.position;
|
|
const res = await FsPromise.read(this.fd, uint8Array, normOptions.offset, normOptions.length, normOptions.position);
|
|
this.position += res.bytesRead;
|
|
if (res.bytesRead < normOptions.length && (!options || !options.mayBeLess)) {
|
|
throw new lib$2.EndOfStreamError();
|
|
}
|
|
return res.bytesRead;
|
|
}
|
|
/**
|
|
* Peek buffer from file
|
|
* @param uint8Array - Uint8Array (or Buffer) to write data to
|
|
* @param options - Read behaviour options
|
|
* @returns Promise number of bytes read
|
|
*/
|
|
async peekBuffer(uint8Array, options) {
|
|
const normOptions = this.normalizeOptions(uint8Array, options);
|
|
const res = await FsPromise.read(this.fd, uint8Array, normOptions.offset, normOptions.length, normOptions.position);
|
|
if ((!normOptions.mayBeLess) && res.bytesRead < normOptions.length) {
|
|
throw new lib$2.EndOfStreamError();
|
|
}
|
|
return res.bytesRead;
|
|
}
|
|
async close() {
|
|
return FsPromise.close(this.fd);
|
|
}
|
|
}
|
|
exports.FileTokenizer = FileTokenizer;
|
|
async function fromFile(sourceFilePath) {
|
|
const stat = await FsPromise.stat(sourceFilePath);
|
|
if (!stat.isFile) {
|
|
throw new Error(`File not a file: ${sourceFilePath}`);
|
|
}
|
|
const fd = await FsPromise.open(sourceFilePath, 'r');
|
|
return new FileTokenizer(fd, { path: sourceFilePath, size: stat.size });
|
|
}
|
|
exports.fromFile = fromFile;
|
|
});
|
|
|
|
var lib$1 = createCommonjsModule(function (module, exports) {
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.fromStream = exports.fromBuffer = exports.EndOfStreamError = exports.fromFile = void 0;
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "fromFile", { enumerable: true, get: function () { return FileTokenizer_1.fromFile; } });
|
|
var core_1 = core$1;
|
|
Object.defineProperty(exports, "EndOfStreamError", { enumerable: true, get: function () { return core_1.EndOfStreamError; } });
|
|
Object.defineProperty(exports, "fromBuffer", { enumerable: true, get: function () { return core_1.fromBuffer; } });
|
|
/**
|
|
* Construct ReadStreamTokenizer from given Stream.
|
|
* Will set fileSize, if provided given Stream has set the .path property.
|
|
* @param stream - Node.js Stream.Readable
|
|
* @param fileInfo - Pass additional file information to the tokenizer
|
|
* @returns Tokenizer
|
|
*/
|
|
async function fromStream(stream, fileInfo) {
|
|
fileInfo = fileInfo ? fileInfo : {};
|
|
if (stream.path) {
|
|
const stat = await FsPromise.stat(stream.path);
|
|
fileInfo.path = stream.path;
|
|
fileInfo.size = stat.size;
|
|
}
|
|
return core$1.fromStream(stream, fileInfo);
|
|
}
|
|
exports.fromStream = fromStream;
|
|
});
|
|
|
|
/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
|
|
var read = function (buffer, offset, isLE, mLen, nBytes) {
|
|
var e, m;
|
|
var eLen = (nBytes * 8) - mLen - 1;
|
|
var eMax = (1 << eLen) - 1;
|
|
var eBias = eMax >> 1;
|
|
var nBits = -7;
|
|
var i = isLE ? (nBytes - 1) : 0;
|
|
var d = isLE ? -1 : 1;
|
|
var s = buffer[offset + i];
|
|
|
|
i += d;
|
|
|
|
e = s & ((1 << (-nBits)) - 1);
|
|
s >>= (-nBits);
|
|
nBits += eLen;
|
|
for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}
|
|
|
|
m = e & ((1 << (-nBits)) - 1);
|
|
e >>= (-nBits);
|
|
nBits += mLen;
|
|
for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}
|
|
|
|
if (e === 0) {
|
|
e = 1 - eBias;
|
|
} else if (e === eMax) {
|
|
return m ? NaN : ((s ? -1 : 1) * Infinity)
|
|
} else {
|
|
m = m + Math.pow(2, mLen);
|
|
e = e - eBias;
|
|
}
|
|
return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
|
|
};
|
|
|
|
var write = function (buffer, value, offset, isLE, mLen, nBytes) {
|
|
var e, m, c;
|
|
var eLen = (nBytes * 8) - mLen - 1;
|
|
var eMax = (1 << eLen) - 1;
|
|
var eBias = eMax >> 1;
|
|
var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0);
|
|
var i = isLE ? 0 : (nBytes - 1);
|
|
var d = isLE ? 1 : -1;
|
|
var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;
|
|
|
|
value = Math.abs(value);
|
|
|
|
if (isNaN(value) || value === Infinity) {
|
|
m = isNaN(value) ? 1 : 0;
|
|
e = eMax;
|
|
} else {
|
|
e = Math.floor(Math.log(value) / Math.LN2);
|
|
if (value * (c = Math.pow(2, -e)) < 1) {
|
|
e--;
|
|
c *= 2;
|
|
}
|
|
if (e + eBias >= 1) {
|
|
value += rt / c;
|
|
} else {
|
|
value += rt * Math.pow(2, 1 - eBias);
|
|
}
|
|
if (value * c >= 2) {
|
|
e++;
|
|
c /= 2;
|
|
}
|
|
|
|
if (e + eBias >= eMax) {
|
|
m = 0;
|
|
e = eMax;
|
|
} else if (e + eBias >= 1) {
|
|
m = ((value * c) - 1) * Math.pow(2, mLen);
|
|
e = e + eBias;
|
|
} else {
|
|
m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);
|
|
e = 0;
|
|
}
|
|
}
|
|
|
|
for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
|
|
|
|
e = (e << mLen) | m;
|
|
eLen += mLen;
|
|
for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
|
|
|
|
buffer[offset + i - d] |= s * 128;
|
|
};
|
|
|
|
var ieee754 = {
|
|
read: read,
|
|
write: write
|
|
};
|
|
|
|
var lib = createCommonjsModule(function (module, exports) {
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.AnsiStringType = exports.StringType = exports.BufferType = exports.Uint8ArrayType = exports.IgnoreType = exports.Float80_LE = exports.Float80_BE = exports.Float64_LE = exports.Float64_BE = exports.Float32_LE = exports.Float32_BE = exports.Float16_LE = exports.Float16_BE = exports.INT64_BE = exports.UINT64_BE = exports.INT64_LE = exports.UINT64_LE = exports.INT32_LE = exports.INT32_BE = exports.INT24_BE = exports.INT24_LE = exports.INT16_LE = exports.INT16_BE = exports.INT8 = exports.UINT32_BE = exports.UINT32_LE = exports.UINT24_BE = exports.UINT24_LE = exports.UINT16_BE = exports.UINT16_LE = exports.UINT8 = void 0;
|
|
|
|
// Primitive types
|
|
function dv(array) {
|
|
return new DataView(array.buffer, array.byteOffset);
|
|
}
|
|
/**
|
|
* 8-bit unsigned integer
|
|
*/
|
|
exports.UINT8 = {
|
|
len: 1,
|
|
get(array, offset) {
|
|
return dv(array).getUint8(offset);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setUint8(offset, value);
|
|
return offset + 1;
|
|
}
|
|
};
|
|
/**
|
|
* 16-bit unsigned integer, Little Endian byte order
|
|
*/
|
|
exports.UINT16_LE = {
|
|
len: 2,
|
|
get(array, offset) {
|
|
return dv(array).getUint16(offset, true);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setUint16(offset, value, true);
|
|
return offset + 2;
|
|
}
|
|
};
|
|
/**
|
|
* 16-bit unsigned integer, Big Endian byte order
|
|
*/
|
|
exports.UINT16_BE = {
|
|
len: 2,
|
|
get(array, offset) {
|
|
return dv(array).getUint16(offset);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setUint16(offset, value);
|
|
return offset + 2;
|
|
}
|
|
};
|
|
/**
|
|
* 24-bit unsigned integer, Little Endian byte order
|
|
*/
|
|
exports.UINT24_LE = {
|
|
len: 3,
|
|
get(array, offset) {
|
|
const dataView = dv(array);
|
|
return dataView.getUint8(offset) + (dataView.getUint16(offset + 1, true) << 8);
|
|
},
|
|
put(array, offset, value) {
|
|
const dataView = dv(array);
|
|
dataView.setUint8(offset, value & 0xff);
|
|
dataView.setUint16(offset + 1, value >> 8, true);
|
|
return offset + 3;
|
|
}
|
|
};
|
|
/**
|
|
* 24-bit unsigned integer, Big Endian byte order
|
|
*/
|
|
exports.UINT24_BE = {
|
|
len: 3,
|
|
get(array, offset) {
|
|
const dataView = dv(array);
|
|
return (dataView.getUint16(offset) << 8) + dataView.getUint8(offset + 2);
|
|
},
|
|
put(array, offset, value) {
|
|
const dataView = dv(array);
|
|
dataView.setUint16(offset, value >> 8);
|
|
dataView.setUint8(offset + 2, value & 0xff);
|
|
return offset + 3;
|
|
}
|
|
};
|
|
/**
|
|
* 32-bit unsigned integer, Little Endian byte order
|
|
*/
|
|
exports.UINT32_LE = {
|
|
len: 4,
|
|
get(array, offset) {
|
|
return dv(array).getUint32(offset, true);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setUint32(offset, value, true);
|
|
return offset + 4;
|
|
}
|
|
};
|
|
/**
|
|
* 32-bit unsigned integer, Big Endian byte order
|
|
*/
|
|
exports.UINT32_BE = {
|
|
len: 4,
|
|
get(array, offset) {
|
|
return dv(array).getUint32(offset);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setUint32(offset, value);
|
|
return offset + 4;
|
|
}
|
|
};
|
|
/**
|
|
* 8-bit signed integer
|
|
*/
|
|
exports.INT8 = {
|
|
len: 1,
|
|
get(array, offset) {
|
|
return dv(array).getInt8(offset);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setInt8(offset, value);
|
|
return offset + 2;
|
|
}
|
|
};
|
|
/**
|
|
* 16-bit signed integer, Big Endian byte order
|
|
*/
|
|
exports.INT16_BE = {
|
|
len: 2,
|
|
get(array, offset) {
|
|
return dv(array).getInt16(offset);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setInt16(offset, value);
|
|
return offset + 2;
|
|
}
|
|
};
|
|
/**
|
|
* 16-bit signed integer, Little Endian byte order
|
|
*/
|
|
exports.INT16_LE = {
|
|
len: 2,
|
|
get(array, offset) {
|
|
return dv(array).getInt16(offset, true);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setInt16(offset, value, true);
|
|
return offset + 2;
|
|
}
|
|
};
|
|
/**
|
|
* 24-bit signed integer, Little Endian byte order
|
|
*/
|
|
exports.INT24_LE = {
|
|
len: 3,
|
|
get(array, offset) {
|
|
const unsigned = exports.UINT24_LE.get(array, offset);
|
|
return unsigned > 0x7fffff ? unsigned - 0x1000000 : unsigned;
|
|
},
|
|
put(array, offset, value) {
|
|
const dataView = dv(array);
|
|
dataView.setUint8(offset, value & 0xff);
|
|
dataView.setUint16(offset + 1, value >> 8, true);
|
|
return offset + 3;
|
|
}
|
|
};
|
|
/**
|
|
* 24-bit signed integer, Big Endian byte order
|
|
*/
|
|
exports.INT24_BE = {
|
|
len: 3,
|
|
get(array, offset) {
|
|
const unsigned = exports.UINT24_BE.get(array, offset);
|
|
return unsigned > 0x7fffff ? unsigned - 0x1000000 : unsigned;
|
|
},
|
|
put(array, offset, value) {
|
|
const dataView = dv(array);
|
|
dataView.setUint16(offset, value >> 8);
|
|
dataView.setUint8(offset + 2, value & 0xff);
|
|
return offset + 3;
|
|
}
|
|
};
|
|
/**
|
|
* 32-bit signed integer, Big Endian byte order
|
|
*/
|
|
exports.INT32_BE = {
|
|
len: 4,
|
|
get(array, offset) {
|
|
return dv(array).getInt32(offset);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setInt32(offset, value);
|
|
return offset + 4;
|
|
}
|
|
};
|
|
/**
|
|
* 32-bit signed integer, Big Endian byte order
|
|
*/
|
|
exports.INT32_LE = {
|
|
len: 4,
|
|
get(array, offset) {
|
|
return dv(array).getInt32(offset, true);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setInt32(offset, value, true);
|
|
return offset + 4;
|
|
}
|
|
};
|
|
/**
|
|
* 64-bit unsigned integer, Little Endian byte order
|
|
*/
|
|
exports.UINT64_LE = {
|
|
len: 8,
|
|
get(array, offset) {
|
|
return dv(array).getBigUint64(offset, true);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setBigUint64(offset, value, true);
|
|
return offset + 8;
|
|
}
|
|
};
|
|
/**
|
|
* 64-bit signed integer, Little Endian byte order
|
|
*/
|
|
exports.INT64_LE = {
|
|
len: 8,
|
|
get(array, offset) {
|
|
return dv(array).getBigInt64(offset, true);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setBigInt64(offset, value, true);
|
|
return offset + 8;
|
|
}
|
|
};
|
|
/**
|
|
* 64-bit unsigned integer, Big Endian byte order
|
|
*/
|
|
exports.UINT64_BE = {
|
|
len: 8,
|
|
get(array, offset) {
|
|
return dv(array).getBigUint64(offset);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setBigUint64(offset, value);
|
|
return offset + 8;
|
|
}
|
|
};
|
|
/**
|
|
* 64-bit signed integer, Big Endian byte order
|
|
*/
|
|
exports.INT64_BE = {
|
|
len: 8,
|
|
get(array, offset) {
|
|
return dv(array).getBigInt64(offset);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setBigInt64(offset, value);
|
|
return offset + 8;
|
|
}
|
|
};
|
|
/**
|
|
* IEEE 754 16-bit (half precision) float, big endian
|
|
*/
|
|
exports.Float16_BE = {
|
|
len: 2,
|
|
get(dataView, offset) {
|
|
return ieee754.read(dataView, offset, false, 10, this.len);
|
|
},
|
|
put(dataView, offset, value) {
|
|
ieee754.write(dataView, value, offset, false, 10, this.len);
|
|
return offset + this.len;
|
|
}
|
|
};
|
|
/**
|
|
* IEEE 754 16-bit (half precision) float, little endian
|
|
*/
|
|
exports.Float16_LE = {
|
|
len: 2,
|
|
get(array, offset) {
|
|
return ieee754.read(array, offset, true, 10, this.len);
|
|
},
|
|
put(array, offset, value) {
|
|
ieee754.write(array, value, offset, true, 10, this.len);
|
|
return offset + this.len;
|
|
}
|
|
};
|
|
/**
|
|
* IEEE 754 32-bit (single precision) float, big endian
|
|
*/
|
|
exports.Float32_BE = {
|
|
len: 4,
|
|
get(array, offset) {
|
|
return dv(array).getFloat32(offset);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setFloat32(offset, value);
|
|
return offset + 4;
|
|
}
|
|
};
|
|
/**
|
|
* IEEE 754 32-bit (single precision) float, little endian
|
|
*/
|
|
exports.Float32_LE = {
|
|
len: 4,
|
|
get(array, offset) {
|
|
return dv(array).getFloat32(offset, true);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setFloat32(offset, value, true);
|
|
return offset + 4;
|
|
}
|
|
};
|
|
/**
|
|
* IEEE 754 64-bit (double precision) float, big endian
|
|
*/
|
|
exports.Float64_BE = {
|
|
len: 8,
|
|
get(array, offset) {
|
|
return dv(array).getFloat64(offset);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setFloat64(offset, value);
|
|
return offset + 8;
|
|
}
|
|
};
|
|
/**
|
|
* IEEE 754 64-bit (double precision) float, little endian
|
|
*/
|
|
exports.Float64_LE = {
|
|
len: 8,
|
|
get(array, offset) {
|
|
return dv(array).getFloat64(offset, true);
|
|
},
|
|
put(array, offset, value) {
|
|
dv(array).setFloat64(offset, value, true);
|
|
return offset + 8;
|
|
}
|
|
};
|
|
/**
|
|
* IEEE 754 80-bit (extended precision) float, big endian
|
|
*/
|
|
exports.Float80_BE = {
|
|
len: 10,
|
|
get(array, offset) {
|
|
return ieee754.read(array, offset, false, 63, this.len);
|
|
},
|
|
put(array, offset, value) {
|
|
ieee754.write(array, value, offset, false, 63, this.len);
|
|
return offset + this.len;
|
|
}
|
|
};
|
|
/**
|
|
* IEEE 754 80-bit (extended precision) float, little endian
|
|
*/
|
|
exports.Float80_LE = {
|
|
len: 10,
|
|
get(array, offset) {
|
|
return ieee754.read(array, offset, true, 63, this.len);
|
|
},
|
|
put(array, offset, value) {
|
|
ieee754.write(array, value, offset, true, 63, this.len);
|
|
return offset + this.len;
|
|
}
|
|
};
|
|
/**
|
|
* Ignore a given number of bytes
|
|
*/
|
|
class IgnoreType {
|
|
/**
|
|
* @param len number of bytes to ignore
|
|
*/
|
|
constructor(len) {
|
|
this.len = len;
|
|
}
|
|
// ToDo: don't read, but skip data
|
|
get(array, off) {
|
|
}
|
|
}
|
|
exports.IgnoreType = IgnoreType;
|
|
class Uint8ArrayType {
|
|
constructor(len) {
|
|
this.len = len;
|
|
}
|
|
get(array, offset) {
|
|
return array.subarray(offset, offset + this.len);
|
|
}
|
|
}
|
|
exports.Uint8ArrayType = Uint8ArrayType;
|
|
class BufferType {
|
|
constructor(len) {
|
|
this.len = len;
|
|
}
|
|
get(buffer, off) {
|
|
return buffer.slice(off, off + this.len);
|
|
}
|
|
}
|
|
exports.BufferType = BufferType;
|
|
/**
|
|
* Consume a fixed number of bytes from the stream and return a string with a specified encoding.
|
|
*/
|
|
class StringType {
|
|
constructor(len, encoding) {
|
|
this.len = len;
|
|
this.encoding = encoding;
|
|
}
|
|
get(uint8Array, offset) {
|
|
return Buffer.from(uint8Array).toString(this.encoding, offset, offset + this.len);
|
|
}
|
|
}
|
|
exports.StringType = StringType;
|
|
/**
|
|
* ANSI Latin 1 String
|
|
* Using windows-1252 / ISO 8859-1 decoding
|
|
*/
|
|
class AnsiStringType {
|
|
constructor(len) {
|
|
this.len = len;
|
|
}
|
|
static decode(buffer, offset, until) {
|
|
let str = '';
|
|
for (let i = offset; i < until; ++i) {
|
|
str += AnsiStringType.codePointToString(AnsiStringType.singleByteDecoder(buffer[i]));
|
|
}
|
|
return str;
|
|
}
|
|
static inRange(a, min, max) {
|
|
return min <= a && a <= max;
|
|
}
|
|
static codePointToString(cp) {
|
|
if (cp <= 0xFFFF) {
|
|
return String.fromCharCode(cp);
|
|
}
|
|
else {
|
|
cp -= 0x10000;
|
|
return String.fromCharCode((cp >> 10) + 0xD800, (cp & 0x3FF) + 0xDC00);
|
|
}
|
|
}
|
|
static singleByteDecoder(bite) {
|
|
if (AnsiStringType.inRange(bite, 0x00, 0x7F)) {
|
|
return bite;
|
|
}
|
|
const codePoint = AnsiStringType.windows1252[bite - 0x80];
|
|
if (codePoint === null) {
|
|
throw Error('invaliding encoding');
|
|
}
|
|
return codePoint;
|
|
}
|
|
get(buffer, offset = 0) {
|
|
return AnsiStringType.decode(buffer, offset, offset + this.len);
|
|
}
|
|
}
|
|
exports.AnsiStringType = AnsiStringType;
|
|
AnsiStringType.windows1252 = [8364, 129, 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 352,
|
|
8249, 338, 141, 381, 143, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 732,
|
|
8482, 353, 8250, 339, 157, 382, 376, 160, 161, 162, 163, 164, 165, 166, 167, 168,
|
|
169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
|
|
185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
|
|
201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216,
|
|
217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232,
|
|
233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247,
|
|
248, 249, 250, 251, 252, 253, 254, 255];
|
|
});
|
|
|
|
var stringToBytes$1 = string => [...string].map(character => character.charCodeAt(0));
|
|
|
|
/**
|
|
Checks whether the TAR checksum is valid.
|
|
|
|
@param {Buffer} buffer - The TAR header `[offset ... offset + 512]`.
|
|
@param {number} offset - TAR header offset.
|
|
@returns {boolean} `true` if the TAR checksum is valid, otherwise `false`.
|
|
*/
|
|
var tarHeaderChecksumMatches$1 = (buffer, offset = 0) => {
|
|
const readSum = parseInt(buffer.toString('utf8', 148, 154).replace(/\0.*$/, '').trim(), 8); // Read sum in header
|
|
if (isNaN(readSum)) {
|
|
return false;
|
|
}
|
|
|
|
let sum = 8 * 0x20; // Initialize signed bit sum
|
|
|
|
for (let i = offset; i < offset + 148; i++) {
|
|
sum += buffer[i];
|
|
}
|
|
|
|
for (let i = offset + 156; i < offset + 512; i++) {
|
|
sum += buffer[i];
|
|
}
|
|
|
|
return readSum === sum;
|
|
};
|
|
|
|
/**
|
|
ID3 UINT32 sync-safe tokenizer token.
|
|
28 bits (representing up to 256MB) integer, the msb is 0 to avoid "false syncsignals".
|
|
*/
|
|
var uint32SyncSafeToken$1 = {
|
|
get: (buffer, offset) => {
|
|
return (buffer[offset + 3] & 0x7F) | ((buffer[offset + 2]) << 7) | ((buffer[offset + 1]) << 14) | ((buffer[offset]) << 21);
|
|
},
|
|
len: 4
|
|
};
|
|
|
|
var util$1 = {
|
|
stringToBytes: stringToBytes$1,
|
|
tarHeaderChecksumMatches: tarHeaderChecksumMatches$1,
|
|
uint32SyncSafeToken: uint32SyncSafeToken$1
|
|
};
|
|
|
|
var supported = {
|
|
extensions: [
|
|
'jpg',
|
|
'png',
|
|
'apng',
|
|
'gif',
|
|
'webp',
|
|
'flif',
|
|
'xcf',
|
|
'cr2',
|
|
'cr3',
|
|
'orf',
|
|
'arw',
|
|
'dng',
|
|
'nef',
|
|
'rw2',
|
|
'raf',
|
|
'tif',
|
|
'bmp',
|
|
'icns',
|
|
'jxr',
|
|
'psd',
|
|
'indd',
|
|
'zip',
|
|
'tar',
|
|
'rar',
|
|
'gz',
|
|
'bz2',
|
|
'7z',
|
|
'dmg',
|
|
'mp4',
|
|
'mid',
|
|
'mkv',
|
|
'webm',
|
|
'mov',
|
|
'avi',
|
|
'mpg',
|
|
'mp2',
|
|
'mp3',
|
|
'm4a',
|
|
'oga',
|
|
'ogg',
|
|
'ogv',
|
|
'opus',
|
|
'flac',
|
|
'wav',
|
|
'spx',
|
|
'amr',
|
|
'pdf',
|
|
'epub',
|
|
'exe',
|
|
'swf',
|
|
'rtf',
|
|
'wasm',
|
|
'woff',
|
|
'woff2',
|
|
'eot',
|
|
'ttf',
|
|
'otf',
|
|
'ico',
|
|
'flv',
|
|
'ps',
|
|
'xz',
|
|
'sqlite',
|
|
'nes',
|
|
'crx',
|
|
'xpi',
|
|
'cab',
|
|
'deb',
|
|
'ar',
|
|
'rpm',
|
|
'Z',
|
|
'lz',
|
|
'cfb',
|
|
'mxf',
|
|
'mts',
|
|
'blend',
|
|
'bpg',
|
|
'docx',
|
|
'pptx',
|
|
'xlsx',
|
|
'3gp',
|
|
'3g2',
|
|
'jp2',
|
|
'jpm',
|
|
'jpx',
|
|
'mj2',
|
|
'aif',
|
|
'qcp',
|
|
'odt',
|
|
'ods',
|
|
'odp',
|
|
'xml',
|
|
'mobi',
|
|
'heic',
|
|
'cur',
|
|
'ktx',
|
|
'ape',
|
|
'wv',
|
|
'dcm',
|
|
'ics',
|
|
'glb',
|
|
'pcap',
|
|
'dsf',
|
|
'lnk',
|
|
'alias',
|
|
'voc',
|
|
'ac3',
|
|
'm4v',
|
|
'm4p',
|
|
'm4b',
|
|
'f4v',
|
|
'f4p',
|
|
'f4b',
|
|
'f4a',
|
|
'mie',
|
|
'asf',
|
|
'ogm',
|
|
'ogx',
|
|
'mpc',
|
|
'arrow',
|
|
'shp',
|
|
'aac',
|
|
'mp1',
|
|
'it',
|
|
's3m',
|
|
'xm',
|
|
'ai',
|
|
'skp',
|
|
'avif',
|
|
'eps',
|
|
'lzh',
|
|
'pgp',
|
|
'asar',
|
|
'stl',
|
|
'chm',
|
|
'3mf',
|
|
'zst',
|
|
'jxl',
|
|
'vcf'
|
|
],
|
|
mimeTypes: [
|
|
'image/jpeg',
|
|
'image/png',
|
|
'image/gif',
|
|
'image/webp',
|
|
'image/flif',
|
|
'image/x-xcf',
|
|
'image/x-canon-cr2',
|
|
'image/x-canon-cr3',
|
|
'image/tiff',
|
|
'image/bmp',
|
|
'image/vnd.ms-photo',
|
|
'image/vnd.adobe.photoshop',
|
|
'application/x-indesign',
|
|
'application/epub+zip',
|
|
'application/x-xpinstall',
|
|
'application/vnd.oasis.opendocument.text',
|
|
'application/vnd.oasis.opendocument.spreadsheet',
|
|
'application/vnd.oasis.opendocument.presentation',
|
|
'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
|
'application/vnd.openxmlformats-officedocument.presentationml.presentation',
|
|
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
|
'application/zip',
|
|
'application/x-tar',
|
|
'application/x-rar-compressed',
|
|
'application/gzip',
|
|
'application/x-bzip2',
|
|
'application/x-7z-compressed',
|
|
'application/x-apple-diskimage',
|
|
'application/x-apache-arrow',
|
|
'video/mp4',
|
|
'audio/midi',
|
|
'video/x-matroska',
|
|
'video/webm',
|
|
'video/quicktime',
|
|
'video/vnd.avi',
|
|
'audio/vnd.wave',
|
|
'audio/qcelp',
|
|
'audio/x-ms-asf',
|
|
'video/x-ms-asf',
|
|
'application/vnd.ms-asf',
|
|
'video/mpeg',
|
|
'video/3gpp',
|
|
'audio/mpeg',
|
|
'audio/mp4', // RFC 4337
|
|
'audio/opus',
|
|
'video/ogg',
|
|
'audio/ogg',
|
|
'application/ogg',
|
|
'audio/x-flac',
|
|
'audio/ape',
|
|
'audio/wavpack',
|
|
'audio/amr',
|
|
'application/pdf',
|
|
'application/x-msdownload',
|
|
'application/x-shockwave-flash',
|
|
'application/rtf',
|
|
'application/wasm',
|
|
'font/woff',
|
|
'font/woff2',
|
|
'application/vnd.ms-fontobject',
|
|
'font/ttf',
|
|
'font/otf',
|
|
'image/x-icon',
|
|
'video/x-flv',
|
|
'application/postscript',
|
|
'application/eps',
|
|
'application/x-xz',
|
|
'application/x-sqlite3',
|
|
'application/x-nintendo-nes-rom',
|
|
'application/x-google-chrome-extension',
|
|
'application/vnd.ms-cab-compressed',
|
|
'application/x-deb',
|
|
'application/x-unix-archive',
|
|
'application/x-rpm',
|
|
'application/x-compress',
|
|
'application/x-lzip',
|
|
'application/x-cfb',
|
|
'application/x-mie',
|
|
'application/mxf',
|
|
'video/mp2t',
|
|
'application/x-blender',
|
|
'image/bpg',
|
|
'image/jp2',
|
|
'image/jpx',
|
|
'image/jpm',
|
|
'image/mj2',
|
|
'audio/aiff',
|
|
'application/xml',
|
|
'application/x-mobipocket-ebook',
|
|
'image/heif',
|
|
'image/heif-sequence',
|
|
'image/heic',
|
|
'image/heic-sequence',
|
|
'image/icns',
|
|
'image/ktx',
|
|
'application/dicom',
|
|
'audio/x-musepack',
|
|
'text/calendar',
|
|
'text/vcard',
|
|
'model/gltf-binary',
|
|
'application/vnd.tcpdump.pcap',
|
|
'audio/x-dsf', // Non-standard
|
|
'application/x.ms.shortcut', // Invented by us
|
|
'application/x.apple.alias', // Invented by us
|
|
'audio/x-voc',
|
|
'audio/vnd.dolby.dd-raw',
|
|
'audio/x-m4a',
|
|
'image/apng',
|
|
'image/x-olympus-orf',
|
|
'image/x-sony-arw',
|
|
'image/x-adobe-dng',
|
|
'image/x-nikon-nef',
|
|
'image/x-panasonic-rw2',
|
|
'image/x-fujifilm-raf',
|
|
'video/x-m4v',
|
|
'video/3gpp2',
|
|
'application/x-esri-shape',
|
|
'audio/aac',
|
|
'audio/x-it',
|
|
'audio/x-s3m',
|
|
'audio/x-xm',
|
|
'video/MP1S',
|
|
'video/MP2P',
|
|
'application/vnd.sketchup.skp',
|
|
'image/avif',
|
|
'application/x-lzh-compressed',
|
|
'application/pgp-encrypted',
|
|
'application/x-asar',
|
|
'model/stl',
|
|
'application/vnd.ms-htmlhelp',
|
|
'model/3mf',
|
|
'image/jxl',
|
|
'application/zstd'
|
|
]
|
|
};
|
|
|
|
const {
|
|
stringToBytes,
|
|
tarHeaderChecksumMatches,
|
|
uint32SyncSafeToken
|
|
} = util$1;
|
|
|
|
|
|
const minimumBytes = 4100; // A fair amount of file-types are detectable within this range
|
|
|
|
async function fromStream(stream) {
|
|
const tokenizer = await core$1.fromStream(stream);
|
|
try {
|
|
return await fromTokenizer(tokenizer);
|
|
} finally {
|
|
await tokenizer.close();
|
|
}
|
|
}
|
|
|
|
async function fromBuffer(input) {
|
|
if (!(input instanceof Uint8Array || input instanceof ArrayBuffer || Buffer.isBuffer(input))) {
|
|
throw new TypeError(`Expected the \`input\` argument to be of type \`Uint8Array\` or \`Buffer\` or \`ArrayBuffer\`, got \`${typeof input}\``);
|
|
}
|
|
|
|
const buffer = input instanceof Buffer ? input : Buffer.from(input);
|
|
|
|
if (!(buffer && buffer.length > 1)) {
|
|
return;
|
|
}
|
|
|
|
const tokenizer = core$1.fromBuffer(buffer);
|
|
return fromTokenizer(tokenizer);
|
|
}
|
|
|
|
function _check(buffer, headers, options) {
|
|
options = {
|
|
offset: 0,
|
|
...options
|
|
};
|
|
|
|
for (const [index, header] of headers.entries()) {
|
|
// If a bitmask is set
|
|
if (options.mask) {
|
|
// If header doesn't equal `buf` with bits masked off
|
|
if (header !== (options.mask[index] & buffer[index + options.offset])) {
|
|
return false;
|
|
}
|
|
} else if (header !== buffer[index + options.offset]) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
async function fromTokenizer(tokenizer) {
|
|
try {
|
|
return _fromTokenizer(tokenizer);
|
|
} catch (error) {
|
|
if (!(error instanceof core$1.EndOfStreamError)) {
|
|
throw error;
|
|
}
|
|
}
|
|
}
|
|
|
|
async function _fromTokenizer(tokenizer) {
|
|
let buffer = Buffer.alloc(minimumBytes);
|
|
const bytesRead = 12;
|
|
const check = (header, options) => _check(buffer, header, options);
|
|
const checkString = (header, options) => check(stringToBytes(header), options);
|
|
|
|
// Keep reading until EOF if the file size is unknown.
|
|
if (!tokenizer.fileInfo.size) {
|
|
tokenizer.fileInfo.size = Number.MAX_SAFE_INTEGER;
|
|
}
|
|
|
|
await tokenizer.peekBuffer(buffer, {length: bytesRead, mayBeLess: true});
|
|
|
|
// -- 2-byte signatures --
|
|
|
|
if (check([0x42, 0x4D])) {
|
|
return {
|
|
ext: 'bmp',
|
|
mime: 'image/bmp'
|
|
};
|
|
}
|
|
|
|
if (check([0x0B, 0x77])) {
|
|
return {
|
|
ext: 'ac3',
|
|
mime: 'audio/vnd.dolby.dd-raw'
|
|
};
|
|
}
|
|
|
|
if (check([0x78, 0x01])) {
|
|
return {
|
|
ext: 'dmg',
|
|
mime: 'application/x-apple-diskimage'
|
|
};
|
|
}
|
|
|
|
if (check([0x4D, 0x5A])) {
|
|
return {
|
|
ext: 'exe',
|
|
mime: 'application/x-msdownload'
|
|
};
|
|
}
|
|
|
|
if (check([0x25, 0x21])) {
|
|
await tokenizer.peekBuffer(buffer, {length: 24, mayBeLess: true});
|
|
|
|
if (checkString('PS-Adobe-', {offset: 2}) &&
|
|
checkString(' EPSF-', {offset: 14})) {
|
|
return {
|
|
ext: 'eps',
|
|
mime: 'application/eps'
|
|
};
|
|
}
|
|
|
|
return {
|
|
ext: 'ps',
|
|
mime: 'application/postscript'
|
|
};
|
|
}
|
|
|
|
if (
|
|
check([0x1F, 0xA0]) ||
|
|
check([0x1F, 0x9D])
|
|
) {
|
|
return {
|
|
ext: 'Z',
|
|
mime: 'application/x-compress'
|
|
};
|
|
}
|
|
|
|
// -- 3-byte signatures --
|
|
|
|
if (check([0xFF, 0xD8, 0xFF])) {
|
|
return {
|
|
ext: 'jpg',
|
|
mime: 'image/jpeg'
|
|
};
|
|
}
|
|
|
|
if (check([0x49, 0x49, 0xBC])) {
|
|
return {
|
|
ext: 'jxr',
|
|
mime: 'image/vnd.ms-photo'
|
|
};
|
|
}
|
|
|
|
if (check([0x1F, 0x8B, 0x8])) {
|
|
return {
|
|
ext: 'gz',
|
|
mime: 'application/gzip'
|
|
};
|
|
}
|
|
|
|
if (check([0x42, 0x5A, 0x68])) {
|
|
return {
|
|
ext: 'bz2',
|
|
mime: 'application/x-bzip2'
|
|
};
|
|
}
|
|
|
|
if (checkString('ID3')) {
|
|
await tokenizer.ignore(6); // Skip ID3 header until the header size
|
|
const id3HeaderLen = await tokenizer.readToken(uint32SyncSafeToken);
|
|
if (tokenizer.position + id3HeaderLen > tokenizer.fileInfo.size) {
|
|
// Guess file type based on ID3 header for backward compatibility
|
|
return {
|
|
ext: 'mp3',
|
|
mime: 'audio/mpeg'
|
|
};
|
|
}
|
|
|
|
await tokenizer.ignore(id3HeaderLen);
|
|
return fromTokenizer(tokenizer); // Skip ID3 header, recursion
|
|
}
|
|
|
|
// Musepack, SV7
|
|
if (checkString('MP+')) {
|
|
return {
|
|
ext: 'mpc',
|
|
mime: 'audio/x-musepack'
|
|
};
|
|
}
|
|
|
|
if (
|
|
(buffer[0] === 0x43 || buffer[0] === 0x46) &&
|
|
check([0x57, 0x53], {offset: 1})
|
|
) {
|
|
return {
|
|
ext: 'swf',
|
|
mime: 'application/x-shockwave-flash'
|
|
};
|
|
}
|
|
|
|
// -- 4-byte signatures --
|
|
|
|
if (check([0x47, 0x49, 0x46])) {
|
|
return {
|
|
ext: 'gif',
|
|
mime: 'image/gif'
|
|
};
|
|
}
|
|
|
|
if (checkString('FLIF')) {
|
|
return {
|
|
ext: 'flif',
|
|
mime: 'image/flif'
|
|
};
|
|
}
|
|
|
|
if (checkString('8BPS')) {
|
|
return {
|
|
ext: 'psd',
|
|
mime: 'image/vnd.adobe.photoshop'
|
|
};
|
|
}
|
|
|
|
if (checkString('WEBP', {offset: 8})) {
|
|
return {
|
|
ext: 'webp',
|
|
mime: 'image/webp'
|
|
};
|
|
}
|
|
|
|
// Musepack, SV8
|
|
if (checkString('MPCK')) {
|
|
return {
|
|
ext: 'mpc',
|
|
mime: 'audio/x-musepack'
|
|
};
|
|
}
|
|
|
|
if (checkString('FORM')) {
|
|
return {
|
|
ext: 'aif',
|
|
mime: 'audio/aiff'
|
|
};
|
|
}
|
|
|
|
if (checkString('icns', {offset: 0})) {
|
|
return {
|
|
ext: 'icns',
|
|
mime: 'image/icns'
|
|
};
|
|
}
|
|
|
|
// Zip-based file formats
|
|
// Need to be before the `zip` check
|
|
if (check([0x50, 0x4B, 0x3, 0x4])) { // Local file header signature
|
|
try {
|
|
while (tokenizer.position + 30 < tokenizer.fileInfo.size) {
|
|
await tokenizer.readBuffer(buffer, {length: 30});
|
|
|
|
// https://en.wikipedia.org/wiki/Zip_(file_format)#File_headers
|
|
const zipHeader = {
|
|
compressedSize: buffer.readUInt32LE(18),
|
|
uncompressedSize: buffer.readUInt32LE(22),
|
|
filenameLength: buffer.readUInt16LE(26),
|
|
extraFieldLength: buffer.readUInt16LE(28)
|
|
};
|
|
|
|
zipHeader.filename = await tokenizer.readToken(new lib.StringType(zipHeader.filenameLength, 'utf-8'));
|
|
await tokenizer.ignore(zipHeader.extraFieldLength);
|
|
|
|
// Assumes signed `.xpi` from addons.mozilla.org
|
|
if (zipHeader.filename === 'META-INF/mozilla.rsa') {
|
|
return {
|
|
ext: 'xpi',
|
|
mime: 'application/x-xpinstall'
|
|
};
|
|
}
|
|
|
|
if (zipHeader.filename.endsWith('.rels') || zipHeader.filename.endsWith('.xml')) {
|
|
const type = zipHeader.filename.split('/')[0];
|
|
switch (type) {
|
|
case '_rels':
|
|
break;
|
|
case 'word':
|
|
return {
|
|
ext: 'docx',
|
|
mime: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
|
|
};
|
|
case 'ppt':
|
|
return {
|
|
ext: 'pptx',
|
|
mime: 'application/vnd.openxmlformats-officedocument.presentationml.presentation'
|
|
};
|
|
case 'xl':
|
|
return {
|
|
ext: 'xlsx',
|
|
mime: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
|
|
};
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (zipHeader.filename.startsWith('xl/')) {
|
|
return {
|
|
ext: 'xlsx',
|
|
mime: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
|
|
};
|
|
}
|
|
|
|
if (zipHeader.filename.startsWith('3D/') && zipHeader.filename.endsWith('.model')) {
|
|
return {
|
|
ext: '3mf',
|
|
mime: 'model/3mf'
|
|
};
|
|
}
|
|
|
|
// The docx, xlsx and pptx file types extend the Office Open XML file format:
|
|
// https://en.wikipedia.org/wiki/Office_Open_XML_file_formats
|
|
// We look for:
|
|
// - one entry named '[Content_Types].xml' or '_rels/.rels',
|
|
// - one entry indicating specific type of file.
|
|
// MS Office, OpenOffice and LibreOffice may put the parts in different order, so the check should not rely on it.
|
|
if (zipHeader.filename === 'mimetype' && zipHeader.compressedSize === zipHeader.uncompressedSize) {
|
|
const mimeType = await tokenizer.readToken(new lib.StringType(zipHeader.compressedSize, 'utf-8'));
|
|
|
|
switch (mimeType) {
|
|
case 'application/epub+zip':
|
|
return {
|
|
ext: 'epub',
|
|
mime: 'application/epub+zip'
|
|
};
|
|
case 'application/vnd.oasis.opendocument.text':
|
|
return {
|
|
ext: 'odt',
|
|
mime: 'application/vnd.oasis.opendocument.text'
|
|
};
|
|
case 'application/vnd.oasis.opendocument.spreadsheet':
|
|
return {
|
|
ext: 'ods',
|
|
mime: 'application/vnd.oasis.opendocument.spreadsheet'
|
|
};
|
|
case 'application/vnd.oasis.opendocument.presentation':
|
|
return {
|
|
ext: 'odp',
|
|
mime: 'application/vnd.oasis.opendocument.presentation'
|
|
};
|
|
default:
|
|
}
|
|
}
|
|
|
|
// Try to find next header manually when current one is corrupted
|
|
if (zipHeader.compressedSize === 0) {
|
|
let nextHeaderIndex = -1;
|
|
|
|
while (nextHeaderIndex < 0 && (tokenizer.position < tokenizer.fileInfo.size)) {
|
|
await tokenizer.peekBuffer(buffer, {mayBeLess: true});
|
|
|
|
nextHeaderIndex = buffer.indexOf('504B0304', 0, 'hex');
|
|
// Move position to the next header if found, skip the whole buffer otherwise
|
|
await tokenizer.ignore(nextHeaderIndex >= 0 ? nextHeaderIndex : buffer.length);
|
|
}
|
|
} else {
|
|
await tokenizer.ignore(zipHeader.compressedSize);
|
|
}
|
|
}
|
|
} catch (error) {
|
|
if (!(error instanceof core$1.EndOfStreamError)) {
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
return {
|
|
ext: 'zip',
|
|
mime: 'application/zip'
|
|
};
|
|
}
|
|
|
|
if (checkString('OggS')) {
|
|
// This is an OGG container
|
|
await tokenizer.ignore(28);
|
|
const type = Buffer.alloc(8);
|
|
await tokenizer.readBuffer(type);
|
|
|
|
// Needs to be before `ogg` check
|
|
if (_check(type, [0x4F, 0x70, 0x75, 0x73, 0x48, 0x65, 0x61, 0x64])) {
|
|
return {
|
|
ext: 'opus',
|
|
mime: 'audio/opus'
|
|
};
|
|
}
|
|
|
|
// If ' theora' in header.
|
|
if (_check(type, [0x80, 0x74, 0x68, 0x65, 0x6F, 0x72, 0x61])) {
|
|
return {
|
|
ext: 'ogv',
|
|
mime: 'video/ogg'
|
|
};
|
|
}
|
|
|
|
// If '\x01video' in header.
|
|
if (_check(type, [0x01, 0x76, 0x69, 0x64, 0x65, 0x6F, 0x00])) {
|
|
return {
|
|
ext: 'ogm',
|
|
mime: 'video/ogg'
|
|
};
|
|
}
|
|
|
|
// If ' FLAC' in header https://xiph.org/flac/faq.html
|
|
if (_check(type, [0x7F, 0x46, 0x4C, 0x41, 0x43])) {
|
|
return {
|
|
ext: 'oga',
|
|
mime: 'audio/ogg'
|
|
};
|
|
}
|
|
|
|
// 'Speex ' in header https://en.wikipedia.org/wiki/Speex
|
|
if (_check(type, [0x53, 0x70, 0x65, 0x65, 0x78, 0x20, 0x20])) {
|
|
return {
|
|
ext: 'spx',
|
|
mime: 'audio/ogg'
|
|
};
|
|
}
|
|
|
|
// If '\x01vorbis' in header
|
|
if (_check(type, [0x01, 0x76, 0x6F, 0x72, 0x62, 0x69, 0x73])) {
|
|
return {
|
|
ext: 'ogg',
|
|
mime: 'audio/ogg'
|
|
};
|
|
}
|
|
|
|
// Default OGG container https://www.iana.org/assignments/media-types/application/ogg
|
|
return {
|
|
ext: 'ogx',
|
|
mime: 'application/ogg'
|
|
};
|
|
}
|
|
|
|
if (
|
|
check([0x50, 0x4B]) &&
|
|
(buffer[2] === 0x3 || buffer[2] === 0x5 || buffer[2] === 0x7) &&
|
|
(buffer[3] === 0x4 || buffer[3] === 0x6 || buffer[3] === 0x8)
|
|
) {
|
|
return {
|
|
ext: 'zip',
|
|
mime: 'application/zip'
|
|
};
|
|
}
|
|
|
|
//
|
|
|
|
// File Type Box (https://en.wikipedia.org/wiki/ISO_base_media_file_format)
|
|
// It's not required to be first, but it's recommended to be. Almost all ISO base media files start with `ftyp` box.
|
|
// `ftyp` box must contain a brand major identifier, which must consist of ISO 8859-1 printable characters.
|
|
// Here we check for 8859-1 printable characters (for simplicity, it's a mask which also catches one non-printable character).
|
|
if (
|
|
checkString('ftyp', {offset: 4}) &&
|
|
(buffer[8] & 0x60) !== 0x00 // Brand major, first character ASCII?
|
|
) {
|
|
// They all can have MIME `video/mp4` except `application/mp4` special-case which is hard to detect.
|
|
// For some cases, we're specific, everything else falls to `video/mp4` with `mp4` extension.
|
|
const brandMajor = buffer.toString('binary', 8, 12).replace('\0', ' ').trim();
|
|
switch (brandMajor) {
|
|
case 'avif':
|
|
return {ext: 'avif', mime: 'image/avif'};
|
|
case 'mif1':
|
|
return {ext: 'heic', mime: 'image/heif'};
|
|
case 'msf1':
|
|
return {ext: 'heic', mime: 'image/heif-sequence'};
|
|
case 'heic':
|
|
case 'heix':
|
|
return {ext: 'heic', mime: 'image/heic'};
|
|
case 'hevc':
|
|
case 'hevx':
|
|
return {ext: 'heic', mime: 'image/heic-sequence'};
|
|
case 'qt':
|
|
return {ext: 'mov', mime: 'video/quicktime'};
|
|
case 'M4V':
|
|
case 'M4VH':
|
|
case 'M4VP':
|
|
return {ext: 'm4v', mime: 'video/x-m4v'};
|
|
case 'M4P':
|
|
return {ext: 'm4p', mime: 'video/mp4'};
|
|
case 'M4B':
|
|
return {ext: 'm4b', mime: 'audio/mp4'};
|
|
case 'M4A':
|
|
return {ext: 'm4a', mime: 'audio/x-m4a'};
|
|
case 'F4V':
|
|
return {ext: 'f4v', mime: 'video/mp4'};
|
|
case 'F4P':
|
|
return {ext: 'f4p', mime: 'video/mp4'};
|
|
case 'F4A':
|
|
return {ext: 'f4a', mime: 'audio/mp4'};
|
|
case 'F4B':
|
|
return {ext: 'f4b', mime: 'audio/mp4'};
|
|
case 'crx':
|
|
return {ext: 'cr3', mime: 'image/x-canon-cr3'};
|
|
default:
|
|
if (brandMajor.startsWith('3g')) {
|
|
if (brandMajor.startsWith('3g2')) {
|
|
return {ext: '3g2', mime: 'video/3gpp2'};
|
|
}
|
|
|
|
return {ext: '3gp', mime: 'video/3gpp'};
|
|
}
|
|
|
|
return {ext: 'mp4', mime: 'video/mp4'};
|
|
}
|
|
}
|
|
|
|
if (checkString('MThd')) {
|
|
return {
|
|
ext: 'mid',
|
|
mime: 'audio/midi'
|
|
};
|
|
}
|
|
|
|
if (
|
|
checkString('wOFF') &&
|
|
(
|
|
check([0x00, 0x01, 0x00, 0x00], {offset: 4}) ||
|
|
checkString('OTTO', {offset: 4})
|
|
)
|
|
) {
|
|
return {
|
|
ext: 'woff',
|
|
mime: 'font/woff'
|
|
};
|
|
}
|
|
|
|
if (
|
|
checkString('wOF2') &&
|
|
(
|
|
check([0x00, 0x01, 0x00, 0x00], {offset: 4}) ||
|
|
checkString('OTTO', {offset: 4})
|
|
)
|
|
) {
|
|
return {
|
|
ext: 'woff2',
|
|
mime: 'font/woff2'
|
|
};
|
|
}
|
|
|
|
if (check([0xD4, 0xC3, 0xB2, 0xA1]) || check([0xA1, 0xB2, 0xC3, 0xD4])) {
|
|
return {
|
|
ext: 'pcap',
|
|
mime: 'application/vnd.tcpdump.pcap'
|
|
};
|
|
}
|
|
|
|
// Sony DSD Stream File (DSF)
|
|
if (checkString('DSD ')) {
|
|
return {
|
|
ext: 'dsf',
|
|
mime: 'audio/x-dsf' // Non-standard
|
|
};
|
|
}
|
|
|
|
if (checkString('LZIP')) {
|
|
return {
|
|
ext: 'lz',
|
|
mime: 'application/x-lzip'
|
|
};
|
|
}
|
|
|
|
if (checkString('fLaC')) {
|
|
return {
|
|
ext: 'flac',
|
|
mime: 'audio/x-flac'
|
|
};
|
|
}
|
|
|
|
if (check([0x42, 0x50, 0x47, 0xFB])) {
|
|
return {
|
|
ext: 'bpg',
|
|
mime: 'image/bpg'
|
|
};
|
|
}
|
|
|
|
if (checkString('wvpk')) {
|
|
return {
|
|
ext: 'wv',
|
|
mime: 'audio/wavpack'
|
|
};
|
|
}
|
|
|
|
if (checkString('%PDF')) {
|
|
await tokenizer.ignore(1350);
|
|
const maxBufferSize = 10 * 1024 * 1024;
|
|
const buffer = Buffer.alloc(Math.min(maxBufferSize, tokenizer.fileInfo.size));
|
|
await tokenizer.readBuffer(buffer, {mayBeLess: true});
|
|
|
|
// Check if this is an Adobe Illustrator file
|
|
if (buffer.includes(Buffer.from('AIPrivateData'))) {
|
|
return {
|
|
ext: 'ai',
|
|
mime: 'application/postscript'
|
|
};
|
|
}
|
|
|
|
// Assume this is just a normal PDF
|
|
return {
|
|
ext: 'pdf',
|
|
mime: 'application/pdf'
|
|
};
|
|
}
|
|
|
|
if (check([0x00, 0x61, 0x73, 0x6D])) {
|
|
return {
|
|
ext: 'wasm',
|
|
mime: 'application/wasm'
|
|
};
|
|
}
|
|
|
|
// TIFF, little-endian type
|
|
if (check([0x49, 0x49, 0x2A, 0x0])) {
|
|
if (checkString('CR', {offset: 8})) {
|
|
return {
|
|
ext: 'cr2',
|
|
mime: 'image/x-canon-cr2'
|
|
};
|
|
}
|
|
|
|
if (check([0x1C, 0x00, 0xFE, 0x00], {offset: 8}) || check([0x1F, 0x00, 0x0B, 0x00], {offset: 8})) {
|
|
return {
|
|
ext: 'nef',
|
|
mime: 'image/x-nikon-nef'
|
|
};
|
|
}
|
|
|
|
if (
|
|
check([0x08, 0x00, 0x00, 0x00], {offset: 4}) &&
|
|
(check([0x2D, 0x00, 0xFE, 0x00], {offset: 8}) ||
|
|
check([0x27, 0x00, 0xFE, 0x00], {offset: 8}))
|
|
) {
|
|
return {
|
|
ext: 'dng',
|
|
mime: 'image/x-adobe-dng'
|
|
};
|
|
}
|
|
|
|
buffer = Buffer.alloc(24);
|
|
await tokenizer.peekBuffer(buffer);
|
|
if (
|
|
(check([0x10, 0xFB, 0x86, 0x01], {offset: 4}) || check([0x08, 0x00, 0x00, 0x00], {offset: 4})) &&
|
|
// This pattern differentiates ARW from other TIFF-ish file types:
|
|
check([0x00, 0xFE, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x01], {offset: 9})
|
|
) {
|
|
return {
|
|
ext: 'arw',
|
|
mime: 'image/x-sony-arw'
|
|
};
|
|
}
|
|
|
|
return {
|
|
ext: 'tif',
|
|
mime: 'image/tiff'
|
|
};
|
|
}
|
|
|
|
// TIFF, big-endian type
|
|
if (check([0x4D, 0x4D, 0x0, 0x2A])) {
|
|
return {
|
|
ext: 'tif',
|
|
mime: 'image/tiff'
|
|
};
|
|
}
|
|
|
|
if (checkString('MAC ')) {
|
|
return {
|
|
ext: 'ape',
|
|
mime: 'audio/ape'
|
|
};
|
|
}
|
|
|
|
// https://github.com/threatstack/libmagic/blob/master/magic/Magdir/matroska
|
|
if (check([0x1A, 0x45, 0xDF, 0xA3])) { // Root element: EBML
|
|
async function readField() {
|
|
const msb = await tokenizer.peekNumber(lib.UINT8);
|
|
let mask = 0x80;
|
|
let ic = 0; // 0 = A, 1 = B, 2 = C, 3 = D
|
|
|
|
while ((msb & mask) === 0) {
|
|
++ic;
|
|
mask >>= 1;
|
|
}
|
|
|
|
const id = Buffer.alloc(ic + 1);
|
|
await tokenizer.readBuffer(id);
|
|
return id;
|
|
}
|
|
|
|
async function readElement() {
|
|
const id = await readField();
|
|
const lenField = await readField();
|
|
lenField[0] ^= 0x80 >> (lenField.length - 1);
|
|
const nrLen = Math.min(6, lenField.length); // JavaScript can max read 6 bytes integer
|
|
return {
|
|
id: id.readUIntBE(0, id.length),
|
|
len: lenField.readUIntBE(lenField.length - nrLen, nrLen)
|
|
};
|
|
}
|
|
|
|
async function readChildren(level, children) {
|
|
while (children > 0) {
|
|
const e = await readElement();
|
|
if (e.id === 0x4282) {
|
|
return tokenizer.readToken(new lib.StringType(e.len, 'utf-8')); // Return DocType
|
|
}
|
|
|
|
await tokenizer.ignore(e.len); // ignore payload
|
|
--children;
|
|
}
|
|
}
|
|
|
|
const re = await readElement();
|
|
const docType = await readChildren(1, re.len);
|
|
|
|
switch (docType) {
|
|
case 'webm':
|
|
return {
|
|
ext: 'webm',
|
|
mime: 'video/webm'
|
|
};
|
|
|
|
case 'matroska':
|
|
return {
|
|
ext: 'mkv',
|
|
mime: 'video/x-matroska'
|
|
};
|
|
|
|
default:
|
|
return;
|
|
}
|
|
}
|
|
|
|
// RIFF file format which might be AVI, WAV, QCP, etc
|
|
if (check([0x52, 0x49, 0x46, 0x46])) {
|
|
if (check([0x41, 0x56, 0x49], {offset: 8})) {
|
|
return {
|
|
ext: 'avi',
|
|
mime: 'video/vnd.avi'
|
|
};
|
|
}
|
|
|
|
if (check([0x57, 0x41, 0x56, 0x45], {offset: 8})) {
|
|
return {
|
|
ext: 'wav',
|
|
mime: 'audio/vnd.wave'
|
|
};
|
|
}
|
|
|
|
// QLCM, QCP file
|
|
if (check([0x51, 0x4C, 0x43, 0x4D], {offset: 8})) {
|
|
return {
|
|
ext: 'qcp',
|
|
mime: 'audio/qcelp'
|
|
};
|
|
}
|
|
}
|
|
|
|
if (checkString('SQLi')) {
|
|
return {
|
|
ext: 'sqlite',
|
|
mime: 'application/x-sqlite3'
|
|
};
|
|
}
|
|
|
|
if (check([0x4E, 0x45, 0x53, 0x1A])) {
|
|
return {
|
|
ext: 'nes',
|
|
mime: 'application/x-nintendo-nes-rom'
|
|
};
|
|
}
|
|
|
|
if (checkString('Cr24')) {
|
|
return {
|
|
ext: 'crx',
|
|
mime: 'application/x-google-chrome-extension'
|
|
};
|
|
}
|
|
|
|
if (
|
|
checkString('MSCF') ||
|
|
checkString('ISc(')
|
|
) {
|
|
return {
|
|
ext: 'cab',
|
|
mime: 'application/vnd.ms-cab-compressed'
|
|
};
|
|
}
|
|
|
|
if (check([0xED, 0xAB, 0xEE, 0xDB])) {
|
|
return {
|
|
ext: 'rpm',
|
|
mime: 'application/x-rpm'
|
|
};
|
|
}
|
|
|
|
if (check([0xC5, 0xD0, 0xD3, 0xC6])) {
|
|
return {
|
|
ext: 'eps',
|
|
mime: 'application/eps'
|
|
};
|
|
}
|
|
|
|
if (check([0x28, 0xB5, 0x2F, 0xFD])) {
|
|
return {
|
|
ext: 'zst',
|
|
mime: 'application/zstd'
|
|
};
|
|
}
|
|
|
|
// -- 5-byte signatures --
|
|
|
|
if (check([0x4F, 0x54, 0x54, 0x4F, 0x00])) {
|
|
return {
|
|
ext: 'otf',
|
|
mime: 'font/otf'
|
|
};
|
|
}
|
|
|
|
if (checkString('#!AMR')) {
|
|
return {
|
|
ext: 'amr',
|
|
mime: 'audio/amr'
|
|
};
|
|
}
|
|
|
|
if (checkString('{\\rtf')) {
|
|
return {
|
|
ext: 'rtf',
|
|
mime: 'application/rtf'
|
|
};
|
|
}
|
|
|
|
if (check([0x46, 0x4C, 0x56, 0x01])) {
|
|
return {
|
|
ext: 'flv',
|
|
mime: 'video/x-flv'
|
|
};
|
|
}
|
|
|
|
if (checkString('IMPM')) {
|
|
return {
|
|
ext: 'it',
|
|
mime: 'audio/x-it'
|
|
};
|
|
}
|
|
|
|
if (
|
|
checkString('-lh0-', {offset: 2}) ||
|
|
checkString('-lh1-', {offset: 2}) ||
|
|
checkString('-lh2-', {offset: 2}) ||
|
|
checkString('-lh3-', {offset: 2}) ||
|
|
checkString('-lh4-', {offset: 2}) ||
|
|
checkString('-lh5-', {offset: 2}) ||
|
|
checkString('-lh6-', {offset: 2}) ||
|
|
checkString('-lh7-', {offset: 2}) ||
|
|
checkString('-lzs-', {offset: 2}) ||
|
|
checkString('-lz4-', {offset: 2}) ||
|
|
checkString('-lz5-', {offset: 2}) ||
|
|
checkString('-lhd-', {offset: 2})
|
|
) {
|
|
return {
|
|
ext: 'lzh',
|
|
mime: 'application/x-lzh-compressed'
|
|
};
|
|
}
|
|
|
|
// MPEG program stream (PS or MPEG-PS)
|
|
if (check([0x00, 0x00, 0x01, 0xBA])) {
|
|
// MPEG-PS, MPEG-1 Part 1
|
|
if (check([0x21], {offset: 4, mask: [0xF1]})) {
|
|
return {
|
|
ext: 'mpg', // May also be .ps, .mpeg
|
|
mime: 'video/MP1S'
|
|
};
|
|
}
|
|
|
|
// MPEG-PS, MPEG-2 Part 1
|
|
if (check([0x44], {offset: 4, mask: [0xC4]})) {
|
|
return {
|
|
ext: 'mpg', // May also be .mpg, .m2p, .vob or .sub
|
|
mime: 'video/MP2P'
|
|
};
|
|
}
|
|
}
|
|
|
|
if (checkString('ITSF')) {
|
|
return {
|
|
ext: 'chm',
|
|
mime: 'application/vnd.ms-htmlhelp'
|
|
};
|
|
}
|
|
|
|
// -- 6-byte signatures --
|
|
|
|
if (check([0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00])) {
|
|
return {
|
|
ext: 'xz',
|
|
mime: 'application/x-xz'
|
|
};
|
|
}
|
|
|
|
if (checkString('<?xml ')) {
|
|
return {
|
|
ext: 'xml',
|
|
mime: 'application/xml'
|
|
};
|
|
}
|
|
|
|
if (check([0x37, 0x7A, 0xBC, 0xAF, 0x27, 0x1C])) {
|
|
return {
|
|
ext: '7z',
|
|
mime: 'application/x-7z-compressed'
|
|
};
|
|
}
|
|
|
|
if (
|
|
check([0x52, 0x61, 0x72, 0x21, 0x1A, 0x7]) &&
|
|
(buffer[6] === 0x0 || buffer[6] === 0x1)
|
|
) {
|
|
return {
|
|
ext: 'rar',
|
|
mime: 'application/x-rar-compressed'
|
|
};
|
|
}
|
|
|
|
if (checkString('solid ')) {
|
|
return {
|
|
ext: 'stl',
|
|
mime: 'model/stl'
|
|
};
|
|
}
|
|
|
|
// -- 7-byte signatures --
|
|
|
|
if (checkString('BLENDER')) {
|
|
return {
|
|
ext: 'blend',
|
|
mime: 'application/x-blender'
|
|
};
|
|
}
|
|
|
|
if (checkString('!<arch>')) {
|
|
await tokenizer.ignore(8);
|
|
const str = await tokenizer.readToken(new lib.StringType(13, 'ascii'));
|
|
if (str === 'debian-binary') {
|
|
return {
|
|
ext: 'deb',
|
|
mime: 'application/x-deb'
|
|
};
|
|
}
|
|
|
|
return {
|
|
ext: 'ar',
|
|
mime: 'application/x-unix-archive'
|
|
};
|
|
}
|
|
|
|
// -- 8-byte signatures --
|
|
|
|
if (check([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A])) {
|
|
// APNG format (https://wiki.mozilla.org/APNG_Specification)
|
|
// 1. Find the first IDAT (image data) chunk (49 44 41 54)
|
|
// 2. Check if there is an "acTL" chunk before the IDAT one (61 63 54 4C)
|
|
|
|
// Offset calculated as follows:
|
|
// - 8 bytes: PNG signature
|
|
// - 4 (length) + 4 (chunk type) + 13 (chunk data) + 4 (CRC): IHDR chunk
|
|
|
|
await tokenizer.ignore(8); // ignore PNG signature
|
|
|
|
async function readChunkHeader() {
|
|
return {
|
|
length: await tokenizer.readToken(lib.INT32_BE),
|
|
type: await tokenizer.readToken(new lib.StringType(4, 'binary'))
|
|
};
|
|
}
|
|
|
|
do {
|
|
const chunk = await readChunkHeader();
|
|
if (chunk.length < 0) {
|
|
return; // Invalid chunk length
|
|
}
|
|
|
|
switch (chunk.type) {
|
|
case 'IDAT':
|
|
return {
|
|
ext: 'png',
|
|
mime: 'image/png'
|
|
};
|
|
case 'acTL':
|
|
return {
|
|
ext: 'apng',
|
|
mime: 'image/apng'
|
|
};
|
|
default:
|
|
await tokenizer.ignore(chunk.length + 4); // Ignore chunk-data + CRC
|
|
}
|
|
} while (tokenizer.position + 8 < tokenizer.fileInfo.size);
|
|
|
|
return {
|
|
ext: 'png',
|
|
mime: 'image/png'
|
|
};
|
|
}
|
|
|
|
if (check([0x41, 0x52, 0x52, 0x4F, 0x57, 0x31, 0x00, 0x00])) {
|
|
return {
|
|
ext: 'arrow',
|
|
mime: 'application/x-apache-arrow'
|
|
};
|
|
}
|
|
|
|
if (check([0x67, 0x6C, 0x54, 0x46, 0x02, 0x00, 0x00, 0x00])) {
|
|
return {
|
|
ext: 'glb',
|
|
mime: 'model/gltf-binary'
|
|
};
|
|
}
|
|
|
|
// `mov` format variants
|
|
if (
|
|
check([0x66, 0x72, 0x65, 0x65], {offset: 4}) || // `free`
|
|
check([0x6D, 0x64, 0x61, 0x74], {offset: 4}) || // `mdat` MJPEG
|
|
check([0x6D, 0x6F, 0x6F, 0x76], {offset: 4}) || // `moov`
|
|
check([0x77, 0x69, 0x64, 0x65], {offset: 4}) // `wide`
|
|
) {
|
|
return {
|
|
ext: 'mov',
|
|
mime: 'video/quicktime'
|
|
};
|
|
}
|
|
|
|
// -- 9-byte signatures --
|
|
|
|
if (check([0x49, 0x49, 0x52, 0x4F, 0x08, 0x00, 0x00, 0x00, 0x18])) {
|
|
return {
|
|
ext: 'orf',
|
|
mime: 'image/x-olympus-orf'
|
|
};
|
|
}
|
|
|
|
if (checkString('gimp xcf ')) {
|
|
return {
|
|
ext: 'xcf',
|
|
mime: 'image/x-xcf'
|
|
};
|
|
}
|
|
|
|
// -- 12-byte signatures --
|
|
|
|
if (check([0x49, 0x49, 0x55, 0x00, 0x18, 0x00, 0x00, 0x00, 0x88, 0xE7, 0x74, 0xD8])) {
|
|
return {
|
|
ext: 'rw2',
|
|
mime: 'image/x-panasonic-rw2'
|
|
};
|
|
}
|
|
|
|
// ASF_Header_Object first 80 bytes
|
|
if (check([0x30, 0x26, 0xB2, 0x75, 0x8E, 0x66, 0xCF, 0x11, 0xA6, 0xD9])) {
|
|
async function readHeader() {
|
|
const guid = Buffer.alloc(16);
|
|
await tokenizer.readBuffer(guid);
|
|
return {
|
|
id: guid,
|
|
size: Number(await tokenizer.readToken(lib.UINT64_LE))
|
|
};
|
|
}
|
|
|
|
await tokenizer.ignore(30);
|
|
// Search for header should be in first 1KB of file.
|
|
while (tokenizer.position + 24 < tokenizer.fileInfo.size) {
|
|
const header = await readHeader();
|
|
let payload = header.size - 24;
|
|
if (_check(header.id, [0x91, 0x07, 0xDC, 0xB7, 0xB7, 0xA9, 0xCF, 0x11, 0x8E, 0xE6, 0x00, 0xC0, 0x0C, 0x20, 0x53, 0x65])) {
|
|
// Sync on Stream-Properties-Object (B7DC0791-A9B7-11CF-8EE6-00C00C205365)
|
|
const typeId = Buffer.alloc(16);
|
|
payload -= await tokenizer.readBuffer(typeId);
|
|
|
|
if (_check(typeId, [0x40, 0x9E, 0x69, 0xF8, 0x4D, 0x5B, 0xCF, 0x11, 0xA8, 0xFD, 0x00, 0x80, 0x5F, 0x5C, 0x44, 0x2B])) {
|
|
// Found audio:
|
|
return {
|
|
ext: 'asf',
|
|
mime: 'audio/x-ms-asf'
|
|
};
|
|
}
|
|
|
|
if (_check(typeId, [0xC0, 0xEF, 0x19, 0xBC, 0x4D, 0x5B, 0xCF, 0x11, 0xA8, 0xFD, 0x00, 0x80, 0x5F, 0x5C, 0x44, 0x2B])) {
|
|
// Found video:
|
|
return {
|
|
ext: 'asf',
|
|
mime: 'video/x-ms-asf'
|
|
};
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
await tokenizer.ignore(payload);
|
|
}
|
|
|
|
// Default to ASF generic extension
|
|
return {
|
|
ext: 'asf',
|
|
mime: 'application/vnd.ms-asf'
|
|
};
|
|
}
|
|
|
|
if (check([0xAB, 0x4B, 0x54, 0x58, 0x20, 0x31, 0x31, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A])) {
|
|
return {
|
|
ext: 'ktx',
|
|
mime: 'image/ktx'
|
|
};
|
|
}
|
|
|
|
if ((check([0x7E, 0x10, 0x04]) || check([0x7E, 0x18, 0x04])) && check([0x30, 0x4D, 0x49, 0x45], {offset: 4})) {
|
|
return {
|
|
ext: 'mie',
|
|
mime: 'application/x-mie'
|
|
};
|
|
}
|
|
|
|
if (check([0x27, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], {offset: 2})) {
|
|
return {
|
|
ext: 'shp',
|
|
mime: 'application/x-esri-shape'
|
|
};
|
|
}
|
|
|
|
if (check([0x00, 0x00, 0x00, 0x0C, 0x6A, 0x50, 0x20, 0x20, 0x0D, 0x0A, 0x87, 0x0A])) {
|
|
// JPEG-2000 family
|
|
|
|
await tokenizer.ignore(20);
|
|
const type = await tokenizer.readToken(new lib.StringType(4, 'ascii'));
|
|
switch (type) {
|
|
case 'jp2 ':
|
|
return {
|
|
ext: 'jp2',
|
|
mime: 'image/jp2'
|
|
};
|
|
case 'jpx ':
|
|
return {
|
|
ext: 'jpx',
|
|
mime: 'image/jpx'
|
|
};
|
|
case 'jpm ':
|
|
return {
|
|
ext: 'jpm',
|
|
mime: 'image/jpm'
|
|
};
|
|
case 'mjp2':
|
|
return {
|
|
ext: 'mj2',
|
|
mime: 'image/mj2'
|
|
};
|
|
default:
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (
|
|
check([0xFF, 0x0A]) ||
|
|
check([0x00, 0x00, 0x00, 0x0C, 0x4A, 0x58, 0x4C, 0x20, 0x0D, 0x0A, 0x87, 0x0A])
|
|
) {
|
|
return {
|
|
ext: 'jxl',
|
|
mime: 'image/jxl'
|
|
};
|
|
}
|
|
|
|
// -- Unsafe signatures --
|
|
|
|
if (
|
|
check([0x0, 0x0, 0x1, 0xBA]) ||
|
|
check([0x0, 0x0, 0x1, 0xB3])
|
|
) {
|
|
return {
|
|
ext: 'mpg',
|
|
mime: 'video/mpeg'
|
|
};
|
|
}
|
|
|
|
if (check([0x00, 0x01, 0x00, 0x00, 0x00])) {
|
|
return {
|
|
ext: 'ttf',
|
|
mime: 'font/ttf'
|
|
};
|
|
}
|
|
|
|
if (check([0x00, 0x00, 0x01, 0x00])) {
|
|
return {
|
|
ext: 'ico',
|
|
mime: 'image/x-icon'
|
|
};
|
|
}
|
|
|
|
if (check([0x00, 0x00, 0x02, 0x00])) {
|
|
return {
|
|
ext: 'cur',
|
|
mime: 'image/x-icon'
|
|
};
|
|
}
|
|
|
|
if (check([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1])) {
|
|
// Detected Microsoft Compound File Binary File (MS-CFB) Format.
|
|
return {
|
|
ext: 'cfb',
|
|
mime: 'application/x-cfb'
|
|
};
|
|
}
|
|
|
|
// Increase sample size from 12 to 256.
|
|
await tokenizer.peekBuffer(buffer, {length: Math.min(256, tokenizer.fileInfo.size), mayBeLess: true});
|
|
|
|
// -- 15-byte signatures --
|
|
|
|
if (checkString('BEGIN:')) {
|
|
if (checkString('VCARD', {offset: 6})) {
|
|
return {
|
|
ext: 'vcf',
|
|
mime: 'text/vcard'
|
|
};
|
|
}
|
|
|
|
if (checkString('VCALENDAR', {offset: 6})) {
|
|
return {
|
|
ext: 'ics',
|
|
mime: 'text/calendar'
|
|
};
|
|
}
|
|
}
|
|
|
|
// `raf` is here just to keep all the raw image detectors together.
|
|
if (checkString('FUJIFILMCCD-RAW')) {
|
|
return {
|
|
ext: 'raf',
|
|
mime: 'image/x-fujifilm-raf'
|
|
};
|
|
}
|
|
|
|
if (checkString('Extended Module:')) {
|
|
return {
|
|
ext: 'xm',
|
|
mime: 'audio/x-xm'
|
|
};
|
|
}
|
|
|
|
if (checkString('Creative Voice File')) {
|
|
return {
|
|
ext: 'voc',
|
|
mime: 'audio/x-voc'
|
|
};
|
|
}
|
|
|
|
if (check([0x04, 0x00, 0x00, 0x00]) && buffer.length >= 16) { // Rough & quick check Pickle/ASAR
|
|
const jsonSize = buffer.readUInt32LE(12);
|
|
if (jsonSize > 12 && buffer.length >= jsonSize + 16) {
|
|
try {
|
|
const header = buffer.slice(16, jsonSize + 16).toString();
|
|
const json = JSON.parse(header);
|
|
// Check if Pickle is ASAR
|
|
if (json.files) { // Final check, assuring Pickle/ASAR format
|
|
return {
|
|
ext: 'asar',
|
|
mime: 'application/x-asar'
|
|
};
|
|
}
|
|
} catch (_) {
|
|
}
|
|
}
|
|
}
|
|
|
|
if (check([0x06, 0x0E, 0x2B, 0x34, 0x02, 0x05, 0x01, 0x01, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x02])) {
|
|
return {
|
|
ext: 'mxf',
|
|
mime: 'application/mxf'
|
|
};
|
|
}
|
|
|
|
if (checkString('SCRM', {offset: 44})) {
|
|
return {
|
|
ext: 's3m',
|
|
mime: 'audio/x-s3m'
|
|
};
|
|
}
|
|
|
|
if (check([0x47], {offset: 4}) && (check([0x47], {offset: 192}) || check([0x47], {offset: 196}))) {
|
|
return {
|
|
ext: 'mts',
|
|
mime: 'video/mp2t'
|
|
};
|
|
}
|
|
|
|
if (check([0x42, 0x4F, 0x4F, 0x4B, 0x4D, 0x4F, 0x42, 0x49], {offset: 60})) {
|
|
return {
|
|
ext: 'mobi',
|
|
mime: 'application/x-mobipocket-ebook'
|
|
};
|
|
}
|
|
|
|
if (check([0x44, 0x49, 0x43, 0x4D], {offset: 128})) {
|
|
return {
|
|
ext: 'dcm',
|
|
mime: 'application/dicom'
|
|
};
|
|
}
|
|
|
|
if (check([0x4C, 0x00, 0x00, 0x00, 0x01, 0x14, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46])) {
|
|
return {
|
|
ext: 'lnk',
|
|
mime: 'application/x.ms.shortcut' // Invented by us
|
|
};
|
|
}
|
|
|
|
if (check([0x62, 0x6F, 0x6F, 0x6B, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x61, 0x72, 0x6B, 0x00, 0x00, 0x00, 0x00])) {
|
|
return {
|
|
ext: 'alias',
|
|
mime: 'application/x.apple.alias' // Invented by us
|
|
};
|
|
}
|
|
|
|
if (
|
|
check([0x4C, 0x50], {offset: 34}) &&
|
|
(
|
|
check([0x00, 0x00, 0x01], {offset: 8}) ||
|
|
check([0x01, 0x00, 0x02], {offset: 8}) ||
|
|
check([0x02, 0x00, 0x02], {offset: 8})
|
|
)
|
|
) {
|
|
return {
|
|
ext: 'eot',
|
|
mime: 'application/vnd.ms-fontobject'
|
|
};
|
|
}
|
|
|
|
if (check([0x06, 0x06, 0xED, 0xF5, 0xD8, 0x1D, 0x46, 0xE5, 0xBD, 0x31, 0xEF, 0xE7, 0xFE, 0x74, 0xB7, 0x1D])) {
|
|
return {
|
|
ext: 'indd',
|
|
mime: 'application/x-indesign'
|
|
};
|
|
}
|
|
|
|
// Increase sample size from 256 to 512
|
|
await tokenizer.peekBuffer(buffer, {length: Math.min(512, tokenizer.fileInfo.size), mayBeLess: true});
|
|
|
|
// Requires a buffer size of 512 bytes
|
|
if (tarHeaderChecksumMatches(buffer)) {
|
|
return {
|
|
ext: 'tar',
|
|
mime: 'application/x-tar'
|
|
};
|
|
}
|
|
|
|
if (check([0xFF, 0xFE, 0xFF, 0x0E, 0x53, 0x00, 0x6B, 0x00, 0x65, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x55, 0x00, 0x70, 0x00, 0x20, 0x00, 0x4D, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x6C, 0x00])) {
|
|
return {
|
|
ext: 'skp',
|
|
mime: 'application/vnd.sketchup.skp'
|
|
};
|
|
}
|
|
|
|
if (checkString('-----BEGIN PGP MESSAGE-----')) {
|
|
return {
|
|
ext: 'pgp',
|
|
mime: 'application/pgp-encrypted'
|
|
};
|
|
}
|
|
|
|
// Check MPEG 1 or 2 Layer 3 header, or 'layer 0' for ADTS (MPEG sync-word 0xFFE)
|
|
if (buffer.length >= 2 && check([0xFF, 0xE0], {offset: 0, mask: [0xFF, 0xE0]})) {
|
|
if (check([0x10], {offset: 1, mask: [0x16]})) {
|
|
// Check for (ADTS) MPEG-2
|
|
if (check([0x08], {offset: 1, mask: [0x08]})) {
|
|
return {
|
|
ext: 'aac',
|
|
mime: 'audio/aac'
|
|
};
|
|
}
|
|
|
|
// Must be (ADTS) MPEG-4
|
|
return {
|
|
ext: 'aac',
|
|
mime: 'audio/aac'
|
|
};
|
|
}
|
|
|
|
// MPEG 1 or 2 Layer 3 header
|
|
// Check for MPEG layer 3
|
|
if (check([0x02], {offset: 1, mask: [0x06]})) {
|
|
return {
|
|
ext: 'mp3',
|
|
mime: 'audio/mpeg'
|
|
};
|
|
}
|
|
|
|
// Check for MPEG layer 2
|
|
if (check([0x04], {offset: 1, mask: [0x06]})) {
|
|
return {
|
|
ext: 'mp2',
|
|
mime: 'audio/mpeg'
|
|
};
|
|
}
|
|
|
|
// Check for MPEG layer 1
|
|
if (check([0x06], {offset: 1, mask: [0x06]})) {
|
|
return {
|
|
ext: 'mp1',
|
|
mime: 'audio/mpeg'
|
|
};
|
|
}
|
|
}
|
|
}
|
|
|
|
const stream = readableStream => new Promise((resolve, reject) => {
|
|
// Using `eval` to work around issues when bundling with Webpack
|
|
const stream = eval('require')('stream'); // eslint-disable-line no-eval
|
|
|
|
readableStream.on('error', reject);
|
|
readableStream.once('readable', async () => {
|
|
// Set up output stream
|
|
const pass = new stream.PassThrough();
|
|
let outputStream;
|
|
if (stream.pipeline) {
|
|
outputStream = stream.pipeline(readableStream, pass, () => {
|
|
});
|
|
} else {
|
|
outputStream = readableStream.pipe(pass);
|
|
}
|
|
|
|
// Read the input stream and detect the filetype
|
|
const chunk = readableStream.read(minimumBytes) || readableStream.read() || Buffer.alloc(0);
|
|
try {
|
|
const fileType = await fromBuffer(chunk);
|
|
pass.fileType = fileType;
|
|
} catch (error) {
|
|
reject(error);
|
|
}
|
|
|
|
resolve(outputStream);
|
|
});
|
|
});
|
|
|
|
const fileType$1 = {
|
|
fromStream,
|
|
fromTokenizer,
|
|
fromBuffer,
|
|
stream
|
|
};
|
|
|
|
Object.defineProperty(fileType$1, 'extensions', {
|
|
get() {
|
|
return new Set(supported.extensions);
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(fileType$1, 'mimeTypes', {
|
|
get() {
|
|
return new Set(supported.mimeTypes);
|
|
}
|
|
});
|
|
|
|
var core = fileType$1;
|
|
|
|
async function fromFile(path) {
|
|
const tokenizer = await lib$1.fromFile(path);
|
|
try {
|
|
return await core.fromTokenizer(tokenizer);
|
|
} finally {
|
|
await tokenizer.close();
|
|
}
|
|
}
|
|
|
|
const fileType = {
|
|
fromFile
|
|
};
|
|
|
|
Object.assign(fileType, core);
|
|
|
|
Object.defineProperty(fileType, 'extensions', {
|
|
get() {
|
|
return core.extensions;
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(fileType, 'mimeTypes', {
|
|
get() {
|
|
return core.mimeTypes;
|
|
}
|
|
});
|
|
|
|
var fileType_1 = fileType;
|
|
|
|
var util = createCommonjsModule(function (module, exports) {
|
|
|
|
const nameStartChar = ':A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD';
|
|
const nameChar = nameStartChar + '\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040';
|
|
const nameRegexp = '[' + nameStartChar + '][' + nameChar + ']*';
|
|
const regexName = new RegExp('^' + nameRegexp + '$');
|
|
|
|
const getAllMatches = function(string, regex) {
|
|
const matches = [];
|
|
let match = regex.exec(string);
|
|
while (match) {
|
|
const allmatches = [];
|
|
const len = match.length;
|
|
for (let index = 0; index < len; index++) {
|
|
allmatches.push(match[index]);
|
|
}
|
|
matches.push(allmatches);
|
|
match = regex.exec(string);
|
|
}
|
|
return matches;
|
|
};
|
|
|
|
const isName = function(string) {
|
|
const match = regexName.exec(string);
|
|
return !(match === null || typeof match === 'undefined');
|
|
};
|
|
|
|
exports.isExist = function(v) {
|
|
return typeof v !== 'undefined';
|
|
};
|
|
|
|
exports.isEmptyObject = function(obj) {
|
|
return Object.keys(obj).length === 0;
|
|
};
|
|
|
|
/**
|
|
* Copy all the properties of a into b.
|
|
* @param {*} target
|
|
* @param {*} a
|
|
*/
|
|
exports.merge = function(target, a, arrayMode) {
|
|
if (a) {
|
|
const keys = Object.keys(a); // will return an array of own properties
|
|
const len = keys.length; //don't make it inline
|
|
for (let i = 0; i < len; i++) {
|
|
if (arrayMode === 'strict') {
|
|
target[keys[i]] = [ a[keys[i]] ];
|
|
} else {
|
|
target[keys[i]] = a[keys[i]];
|
|
}
|
|
}
|
|
}
|
|
};
|
|
/* exports.merge =function (b,a){
|
|
return Object.assign(b,a);
|
|
} */
|
|
|
|
exports.getValue = function(v) {
|
|
if (exports.isExist(v)) {
|
|
return v;
|
|
} else {
|
|
return '';
|
|
}
|
|
};
|
|
|
|
// const fakeCall = function(a) {return a;};
|
|
// const fakeCallNoReturn = function() {};
|
|
|
|
exports.buildOptions = function(options, defaultOptions, props) {
|
|
var newOptions = {};
|
|
if (!options) {
|
|
return defaultOptions; //if there are not options
|
|
}
|
|
|
|
for (let i = 0; i < props.length; i++) {
|
|
if (options[props[i]] !== undefined) {
|
|
newOptions[props[i]] = options[props[i]];
|
|
} else {
|
|
newOptions[props[i]] = defaultOptions[props[i]];
|
|
}
|
|
}
|
|
return newOptions;
|
|
};
|
|
|
|
/**
|
|
* Check if a tag name should be treated as array
|
|
*
|
|
* @param tagName the node tagname
|
|
* @param arrayMode the array mode option
|
|
* @param parentTagName the parent tag name
|
|
* @returns {boolean} true if node should be parsed as array
|
|
*/
|
|
exports.isTagNameInArrayMode = function (tagName, arrayMode, parentTagName) {
|
|
if (arrayMode === false) {
|
|
return false;
|
|
} else if (arrayMode instanceof RegExp) {
|
|
return arrayMode.test(tagName);
|
|
} else if (typeof arrayMode === 'function') {
|
|
return !!arrayMode(tagName, parentTagName);
|
|
}
|
|
|
|
return arrayMode === "strict";
|
|
};
|
|
|
|
exports.isName = isName;
|
|
exports.getAllMatches = getAllMatches;
|
|
exports.nameRegexp = nameRegexp;
|
|
});
|
|
|
|
const convertToJson = function(node, options, parentTagName) {
|
|
const jObj = {};
|
|
|
|
// when no child node or attr is present
|
|
if ((!node.child || util.isEmptyObject(node.child)) && (!node.attrsMap || util.isEmptyObject(node.attrsMap))) {
|
|
return util.isExist(node.val) ? node.val : '';
|
|
}
|
|
|
|
// otherwise create a textnode if node has some text
|
|
if (util.isExist(node.val) && !(typeof node.val === 'string' && (node.val === '' || node.val === options.cdataPositionChar))) {
|
|
const asArray = util.isTagNameInArrayMode(node.tagname, options.arrayMode, parentTagName);
|
|
jObj[options.textNodeName] = asArray ? [node.val] : node.val;
|
|
}
|
|
|
|
util.merge(jObj, node.attrsMap, options.arrayMode);
|
|
|
|
const keys = Object.keys(node.child);
|
|
for (let index = 0; index < keys.length; index++) {
|
|
const tagName = keys[index];
|
|
if (node.child[tagName] && node.child[tagName].length > 1) {
|
|
jObj[tagName] = [];
|
|
for (let tag in node.child[tagName]) {
|
|
if (node.child[tagName].hasOwnProperty(tag)) {
|
|
jObj[tagName].push(convertToJson(node.child[tagName][tag], options, tagName));
|
|
}
|
|
}
|
|
} else {
|
|
const result = convertToJson(node.child[tagName][0], options, tagName);
|
|
const asArray = (options.arrayMode === true && typeof result === 'object') || util.isTagNameInArrayMode(tagName, options.arrayMode, parentTagName);
|
|
jObj[tagName] = asArray ? [result] : result;
|
|
}
|
|
}
|
|
|
|
//add value
|
|
return jObj;
|
|
};
|
|
|
|
var convertToJson_1 = convertToJson;
|
|
|
|
var node2json = {
|
|
convertToJson: convertToJson_1
|
|
};
|
|
|
|
var xmlNode = function(tagname, parent, val) {
|
|
this.tagname = tagname;
|
|
this.parent = parent;
|
|
this.child = {}; //child tags
|
|
this.attrsMap = {}; //attributes map
|
|
this.val = val; //text only
|
|
this.addChild = function(child) {
|
|
if (Array.isArray(this.child[child.tagname])) {
|
|
//already presents
|
|
this.child[child.tagname].push(child);
|
|
} else {
|
|
this.child[child.tagname] = [child];
|
|
}
|
|
};
|
|
};
|
|
|
|
const hexRegex = /0x[a-zA-Z0-9]+/;
|
|
const numRegex = /^([\-\+])?(0*)(\.[0-9]+(e\-?[0-9]+)?|[0-9]+(\.[0-9]+(e\-?[0-9]+)?)?)$/;
|
|
// const octRegex = /0x[a-z0-9]+/;
|
|
// const binRegex = /0x[a-z0-9]+/;
|
|
|
|
const consider = {
|
|
hex : true,
|
|
leadingZeros: true,
|
|
decimalPoint: "\.",
|
|
//skipLike: /regex/
|
|
};
|
|
|
|
function toNumber(str, options = {}){
|
|
// const options = Object.assign({}, consider);
|
|
// if(opt.leadingZeros === false){
|
|
// options.leadingZeros = false;
|
|
// }else if(opt.hex === false){
|
|
// options.hex = false;
|
|
// }
|
|
|
|
options = Object.assign({}, consider, options );
|
|
if(!str || typeof str !== "string" ) return str;
|
|
|
|
let trimmedStr = str.trim();
|
|
|
|
if(options.skipLike !== undefined && options.skipLike.test(trimmedStr)) return str;
|
|
else if (options.hex && hexRegex.test(trimmedStr)) {
|
|
return Number.parseInt(trimmedStr, 16);
|
|
// } else if (options.parseOct && octRegex.test(str)) {
|
|
// return Number.parseInt(val, 8);
|
|
// }else if (options.parseBin && binRegex.test(str)) {
|
|
// return Number.parseInt(val, 2);
|
|
}else {
|
|
//separate negative sign, leading zeros, and rest number
|
|
const match = numRegex.exec(trimmedStr);
|
|
if(match){
|
|
match[1];
|
|
const leadingZeros = match[2];
|
|
const num = match[3]; //complete num
|
|
match[4] || match[6];
|
|
if(leadingZeros.length === 1 && num[0] === ".") return Number(str);
|
|
else if(!options.leadingZeros && leadingZeros.length > 0) return str;
|
|
else return Number(trimmedStr);
|
|
}else { //non-numeric string
|
|
return str;
|
|
}
|
|
}
|
|
}
|
|
|
|
var strnum = toNumber;
|
|
|
|
const buildOptions$3 = util.buildOptions;
|
|
|
|
|
|
|
|
'<((!\\[CDATA\\[([\\s\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\/)(NAME)\\s*>))([^<]*)'
|
|
.replace(/NAME/g, util.nameRegexp);
|
|
|
|
//const tagsRegx = new RegExp("<(\\/?[\\w:\\-\._]+)([^>]*)>(\\s*"+cdataRegx+")*([^<]+)?","g");
|
|
//const tagsRegx = new RegExp("<(\\/?)((\\w*:)?([\\w:\\-\._]+))([^>]*)>([^<]*)("+cdataRegx+"([^<]*))*([^<]+)?","g");
|
|
|
|
//polyfill
|
|
if (!Number.parseInt && window.parseInt) {
|
|
Number.parseInt = window.parseInt;
|
|
}
|
|
if (!Number.parseFloat && window.parseFloat) {
|
|
Number.parseFloat = window.parseFloat;
|
|
}
|
|
|
|
const defaultOptions$2 = {
|
|
attributeNamePrefix: '@_',
|
|
attrNodeName: false,
|
|
textNodeName: '#text',
|
|
ignoreAttributes: true,
|
|
ignoreNameSpace: false,
|
|
allowBooleanAttributes: false, //a tag can have attributes without any value
|
|
//ignoreRootElement : false,
|
|
parseNodeValue: true,
|
|
parseAttributeValue: false,
|
|
arrayMode: false,
|
|
trimValues: true, //Trim string values of tag and attributes
|
|
cdataTagName: false,
|
|
cdataPositionChar: '\\c',
|
|
numParseOptions: {
|
|
hex: true,
|
|
leadingZeros: true
|
|
},
|
|
tagValueProcessor: function(a, tagName) {
|
|
return a;
|
|
},
|
|
attrValueProcessor: function(a, attrName) {
|
|
return a;
|
|
},
|
|
stopNodes: []
|
|
//decodeStrict: false,
|
|
};
|
|
|
|
var defaultOptions_1 = defaultOptions$2;
|
|
|
|
const props$2 = [
|
|
'attributeNamePrefix',
|
|
'attrNodeName',
|
|
'textNodeName',
|
|
'ignoreAttributes',
|
|
'ignoreNameSpace',
|
|
'allowBooleanAttributes',
|
|
'parseNodeValue',
|
|
'parseAttributeValue',
|
|
'arrayMode',
|
|
'trimValues',
|
|
'cdataTagName',
|
|
'cdataPositionChar',
|
|
'tagValueProcessor',
|
|
'attrValueProcessor',
|
|
'parseTrueNumberOnly',
|
|
'numParseOptions',
|
|
'stopNodes'
|
|
];
|
|
var props_1 = props$2;
|
|
|
|
/**
|
|
* Trim -> valueProcessor -> parse value
|
|
* @param {string} tagName
|
|
* @param {string} val
|
|
* @param {object} options
|
|
*/
|
|
function processTagValue(tagName, val, options) {
|
|
if (val) {
|
|
if (options.trimValues) {
|
|
val = val.trim();
|
|
}
|
|
val = options.tagValueProcessor(val, tagName);
|
|
val = parseValue(val, options.parseNodeValue, options.numParseOptions);
|
|
}
|
|
|
|
return val;
|
|
}
|
|
|
|
function resolveNameSpace(tagname, options) {
|
|
if (options.ignoreNameSpace) {
|
|
const tags = tagname.split(':');
|
|
const prefix = tagname.charAt(0) === '/' ? '/' : '';
|
|
if (tags[0] === 'xmlns') {
|
|
return '';
|
|
}
|
|
if (tags.length === 2) {
|
|
tagname = prefix + tags[1];
|
|
}
|
|
}
|
|
return tagname;
|
|
}
|
|
|
|
function parseValue(val, shouldParse, options) {
|
|
if (shouldParse && typeof val === 'string') {
|
|
//console.log(options)
|
|
const newval = val.trim();
|
|
if(newval === 'true' ) return true;
|
|
else if(newval === 'false' ) return false;
|
|
else return strnum(val, options);
|
|
} else {
|
|
if (util.isExist(val)) {
|
|
return val;
|
|
} else {
|
|
return '';
|
|
}
|
|
}
|
|
}
|
|
|
|
//TODO: change regex to capture NS
|
|
//const attrsRegx = new RegExp("([\\w\\-\\.\\:]+)\\s*=\\s*(['\"])((.|\n)*?)\\2","gm");
|
|
const attrsRegx = new RegExp('([^\\s=]+)\\s*(=\\s*([\'"])(.*?)\\3)?', 'g');
|
|
|
|
function buildAttributesMap(attrStr, options) {
|
|
if (!options.ignoreAttributes && typeof attrStr === 'string') {
|
|
attrStr = attrStr.replace(/\r?\n/g, ' ');
|
|
//attrStr = attrStr || attrStr.trim();
|
|
|
|
const matches = util.getAllMatches(attrStr, attrsRegx);
|
|
const len = matches.length; //don't make it inline
|
|
const attrs = {};
|
|
for (let i = 0; i < len; i++) {
|
|
const attrName = resolveNameSpace(matches[i][1], options);
|
|
if (attrName.length) {
|
|
if (matches[i][4] !== undefined) {
|
|
if (options.trimValues) {
|
|
matches[i][4] = matches[i][4].trim();
|
|
}
|
|
matches[i][4] = options.attrValueProcessor(matches[i][4], attrName);
|
|
attrs[options.attributeNamePrefix + attrName] = parseValue(
|
|
matches[i][4],
|
|
options.parseAttributeValue,
|
|
options.numParseOptions
|
|
);
|
|
} else if (options.allowBooleanAttributes) {
|
|
attrs[options.attributeNamePrefix + attrName] = true;
|
|
}
|
|
}
|
|
}
|
|
if (!Object.keys(attrs).length) {
|
|
return;
|
|
}
|
|
if (options.attrNodeName) {
|
|
const attrCollection = {};
|
|
attrCollection[options.attrNodeName] = attrs;
|
|
return attrCollection;
|
|
}
|
|
return attrs;
|
|
}
|
|
}
|
|
|
|
const getTraversalObj = function(xmlData, options) {
|
|
xmlData = xmlData.replace(/\r\n?/g, "\n");
|
|
options = buildOptions$3(options, defaultOptions$2, props$2);
|
|
const xmlObj = new xmlNode('!xml');
|
|
let currentNode = xmlObj;
|
|
let textData = "";
|
|
|
|
//function match(xmlData){
|
|
for(let i=0; i< xmlData.length; i++){
|
|
const ch = xmlData[i];
|
|
if(ch === '<'){
|
|
if( xmlData[i+1] === '/') {//Closing Tag
|
|
const closeIndex = findClosingIndex(xmlData, ">", i, "Closing Tag is not closed.");
|
|
let tagName = xmlData.substring(i+2,closeIndex).trim();
|
|
|
|
if(options.ignoreNameSpace){
|
|
const colonIndex = tagName.indexOf(":");
|
|
if(colonIndex !== -1){
|
|
tagName = tagName.substr(colonIndex+1);
|
|
}
|
|
}
|
|
|
|
/* if (currentNode.parent) {
|
|
currentNode.parent.val = util.getValue(currentNode.parent.val) + '' + processTagValue2(tagName, textData , options);
|
|
} */
|
|
if(currentNode){
|
|
if(currentNode.val){
|
|
currentNode.val = util.getValue(currentNode.val) + '' + processTagValue(tagName, textData , options);
|
|
}else {
|
|
currentNode.val = processTagValue(tagName, textData , options);
|
|
}
|
|
}
|
|
|
|
if (options.stopNodes.length && options.stopNodes.includes(currentNode.tagname)) {
|
|
currentNode.child = [];
|
|
if (currentNode.attrsMap == undefined) { currentNode.attrsMap = {};}
|
|
currentNode.val = xmlData.substr(currentNode.startIndex + 1, i - currentNode.startIndex - 1);
|
|
}
|
|
currentNode = currentNode.parent;
|
|
textData = "";
|
|
i = closeIndex;
|
|
} else if( xmlData[i+1] === '?') {
|
|
i = findClosingIndex(xmlData, "?>", i, "Pi Tag is not closed.");
|
|
} else if(xmlData.substr(i + 1, 3) === '!--') {
|
|
i = findClosingIndex(xmlData, "-->", i, "Comment is not closed.");
|
|
} else if( xmlData.substr(i + 1, 2) === '!D') {
|
|
const closeIndex = findClosingIndex(xmlData, ">", i, "DOCTYPE is not closed.");
|
|
const tagExp = xmlData.substring(i, closeIndex);
|
|
if(tagExp.indexOf("[") >= 0){
|
|
i = xmlData.indexOf("]>", i) + 1;
|
|
}else {
|
|
i = closeIndex;
|
|
}
|
|
}else if(xmlData.substr(i + 1, 2) === '![') {
|
|
const closeIndex = findClosingIndex(xmlData, "]]>", i, "CDATA is not closed.") - 2;
|
|
const tagExp = xmlData.substring(i + 9,closeIndex);
|
|
|
|
//considerations
|
|
//1. CDATA will always have parent node
|
|
//2. A tag with CDATA is not a leaf node so it's value would be string type.
|
|
if(textData){
|
|
currentNode.val = util.getValue(currentNode.val) + '' + processTagValue(currentNode.tagname, textData , options);
|
|
textData = "";
|
|
}
|
|
|
|
if (options.cdataTagName) {
|
|
//add cdata node
|
|
const childNode = new xmlNode(options.cdataTagName, currentNode, tagExp);
|
|
currentNode.addChild(childNode);
|
|
//for backtracking
|
|
currentNode.val = util.getValue(currentNode.val) + options.cdataPositionChar;
|
|
//add rest value to parent node
|
|
if (tagExp) {
|
|
childNode.val = tagExp;
|
|
}
|
|
} else {
|
|
currentNode.val = (currentNode.val || '') + (tagExp || '');
|
|
}
|
|
|
|
i = closeIndex + 2;
|
|
}else {//Opening tag
|
|
const result = closingIndexForOpeningTag(xmlData, i+1);
|
|
let tagExp = result.data;
|
|
const closeIndex = result.index;
|
|
const separatorIndex = tagExp.indexOf(" ");
|
|
let tagName = tagExp;
|
|
let shouldBuildAttributesMap = true;
|
|
if(separatorIndex !== -1){
|
|
tagName = tagExp.substr(0, separatorIndex).replace(/\s\s*$/, '');
|
|
tagExp = tagExp.substr(separatorIndex + 1);
|
|
}
|
|
|
|
if(options.ignoreNameSpace){
|
|
const colonIndex = tagName.indexOf(":");
|
|
if(colonIndex !== -1){
|
|
tagName = tagName.substr(colonIndex+1);
|
|
shouldBuildAttributesMap = tagName !== result.data.substr(colonIndex + 1);
|
|
}
|
|
}
|
|
|
|
//save text to parent node
|
|
if (currentNode && textData) {
|
|
if(currentNode.tagname !== '!xml'){
|
|
currentNode.val = util.getValue(currentNode.val) + '' + processTagValue( currentNode.tagname, textData, options);
|
|
}
|
|
}
|
|
|
|
if(tagExp.length > 0 && tagExp.lastIndexOf("/") === tagExp.length - 1){//selfClosing tag
|
|
|
|
if(tagName[tagName.length - 1] === "/"){ //remove trailing '/'
|
|
tagName = tagName.substr(0, tagName.length - 1);
|
|
tagExp = tagName;
|
|
}else {
|
|
tagExp = tagExp.substr(0, tagExp.length - 1);
|
|
}
|
|
|
|
const childNode = new xmlNode(tagName, currentNode, '');
|
|
if(tagName !== tagExp){
|
|
childNode.attrsMap = buildAttributesMap(tagExp, options);
|
|
}
|
|
currentNode.addChild(childNode);
|
|
}else {//opening tag
|
|
|
|
const childNode = new xmlNode( tagName, currentNode );
|
|
if (options.stopNodes.length && options.stopNodes.includes(childNode.tagname)) {
|
|
childNode.startIndex=closeIndex;
|
|
}
|
|
if(tagName !== tagExp && shouldBuildAttributesMap){
|
|
childNode.attrsMap = buildAttributesMap(tagExp, options);
|
|
}
|
|
currentNode.addChild(childNode);
|
|
currentNode = childNode;
|
|
}
|
|
textData = "";
|
|
i = closeIndex;
|
|
}
|
|
}else {
|
|
textData += xmlData[i];
|
|
}
|
|
}
|
|
return xmlObj;
|
|
};
|
|
|
|
function closingIndexForOpeningTag(data, i){
|
|
let attrBoundary;
|
|
let tagExp = "";
|
|
for (let index = i; index < data.length; index++) {
|
|
let ch = data[index];
|
|
if (attrBoundary) {
|
|
if (ch === attrBoundary) attrBoundary = "";//reset
|
|
} else if (ch === '"' || ch === "'") {
|
|
attrBoundary = ch;
|
|
} else if (ch === '>') {
|
|
return {
|
|
data: tagExp,
|
|
index: index
|
|
}
|
|
} else if (ch === '\t') {
|
|
ch = " ";
|
|
}
|
|
tagExp += ch;
|
|
}
|
|
}
|
|
|
|
function findClosingIndex(xmlData, str, i, errMsg){
|
|
const closingIndex = xmlData.indexOf(str, i);
|
|
if(closingIndex === -1){
|
|
throw new Error(errMsg)
|
|
}else {
|
|
return closingIndex + str.length - 1;
|
|
}
|
|
}
|
|
|
|
var getTraversalObj_1 = getTraversalObj;
|
|
|
|
var xmlstr2xmlnode = {
|
|
defaultOptions: defaultOptions_1,
|
|
props: props_1,
|
|
getTraversalObj: getTraversalObj_1
|
|
};
|
|
|
|
const defaultOptions$1 = {
|
|
allowBooleanAttributes: false, //A tag can have attributes without any value
|
|
};
|
|
|
|
const props$1 = ['allowBooleanAttributes'];
|
|
|
|
//const tagsPattern = new RegExp("<\\/?([\\w:\\-_\.]+)\\s*\/?>","g");
|
|
var validate = function (xmlData, options) {
|
|
options = util.buildOptions(options, defaultOptions$1, props$1);
|
|
|
|
//xmlData = xmlData.replace(/(\r\n|\n|\r)/gm,"");//make it single line
|
|
//xmlData = xmlData.replace(/(^\s*<\?xml.*?\?>)/g,"");//Remove XML starting tag
|
|
//xmlData = xmlData.replace(/(<!DOCTYPE[\s\w\"\.\/\-\:]+(\[.*\])*\s*>)/g,"");//Remove DOCTYPE
|
|
const tags = [];
|
|
let tagFound = false;
|
|
|
|
//indicates that the root tag has been closed (aka. depth 0 has been reached)
|
|
let reachedRoot = false;
|
|
|
|
if (xmlData[0] === '\ufeff') {
|
|
// check for byte order mark (BOM)
|
|
xmlData = xmlData.substr(1);
|
|
}
|
|
|
|
for (let i = 0; i < xmlData.length; i++) {
|
|
|
|
if (xmlData[i] === '<' && xmlData[i+1] === '?') {
|
|
i+=2;
|
|
i = readPI(xmlData,i);
|
|
if (i.err) return i;
|
|
}else if (xmlData[i] === '<') {
|
|
//starting of tag
|
|
//read until you reach to '>' avoiding any '>' in attribute value
|
|
|
|
i++;
|
|
|
|
if (xmlData[i] === '!') {
|
|
i = readCommentAndCDATA(xmlData, i);
|
|
continue;
|
|
} else {
|
|
let closingTag = false;
|
|
if (xmlData[i] === '/') {
|
|
//closing tag
|
|
closingTag = true;
|
|
i++;
|
|
}
|
|
//read tagname
|
|
let tagName = '';
|
|
for (; i < xmlData.length &&
|
|
xmlData[i] !== '>' &&
|
|
xmlData[i] !== ' ' &&
|
|
xmlData[i] !== '\t' &&
|
|
xmlData[i] !== '\n' &&
|
|
xmlData[i] !== '\r'; i++
|
|
) {
|
|
tagName += xmlData[i];
|
|
}
|
|
tagName = tagName.trim();
|
|
//console.log(tagName);
|
|
|
|
if (tagName[tagName.length - 1] === '/') {
|
|
//self closing tag without attributes
|
|
tagName = tagName.substring(0, tagName.length - 1);
|
|
//continue;
|
|
i--;
|
|
}
|
|
if (!validateTagName(tagName)) {
|
|
let msg;
|
|
if (tagName.trim().length === 0) {
|
|
msg = "There is an unnecessary space between tag name and backward slash '</ ..'.";
|
|
} else {
|
|
msg = "Tag '"+tagName+"' is an invalid name.";
|
|
}
|
|
return getErrorObject('InvalidTag', msg, getLineNumberForPosition(xmlData, i));
|
|
}
|
|
|
|
const result = readAttributeStr(xmlData, i);
|
|
if (result === false) {
|
|
return getErrorObject('InvalidAttr', "Attributes for '"+tagName+"' have open quote.", getLineNumberForPosition(xmlData, i));
|
|
}
|
|
let attrStr = result.value;
|
|
i = result.index;
|
|
|
|
if (attrStr[attrStr.length - 1] === '/') {
|
|
//self closing tag
|
|
attrStr = attrStr.substring(0, attrStr.length - 1);
|
|
const isValid = validateAttributeString(attrStr, options);
|
|
if (isValid === true) {
|
|
tagFound = true;
|
|
//continue; //text may presents after self closing tag
|
|
} else {
|
|
//the result from the nested function returns the position of the error within the attribute
|
|
//in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute
|
|
//this gives us the absolute index in the entire xml, which we can use to find the line at last
|
|
return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, i - attrStr.length + isValid.err.line));
|
|
}
|
|
} else if (closingTag) {
|
|
if (!result.tagClosed) {
|
|
return getErrorObject('InvalidTag', "Closing tag '"+tagName+"' doesn't have proper closing.", getLineNumberForPosition(xmlData, i));
|
|
} else if (attrStr.trim().length > 0) {
|
|
return getErrorObject('InvalidTag', "Closing tag '"+tagName+"' can't have attributes or invalid starting.", getLineNumberForPosition(xmlData, i));
|
|
} else {
|
|
const otg = tags.pop();
|
|
if (tagName !== otg) {
|
|
return getErrorObject('InvalidTag', "Closing tag '"+otg+"' is expected inplace of '"+tagName+"'.", getLineNumberForPosition(xmlData, i));
|
|
}
|
|
|
|
//when there are no more tags, we reached the root level.
|
|
if (tags.length == 0) {
|
|
reachedRoot = true;
|
|
}
|
|
}
|
|
} else {
|
|
const isValid = validateAttributeString(attrStr, options);
|
|
if (isValid !== true) {
|
|
//the result from the nested function returns the position of the error within the attribute
|
|
//in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute
|
|
//this gives us the absolute index in the entire xml, which we can use to find the line at last
|
|
return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, i - attrStr.length + isValid.err.line));
|
|
}
|
|
|
|
//if the root level has been reached before ...
|
|
if (reachedRoot === true) {
|
|
return getErrorObject('InvalidXml', 'Multiple possible root nodes found.', getLineNumberForPosition(xmlData, i));
|
|
} else {
|
|
tags.push(tagName);
|
|
}
|
|
tagFound = true;
|
|
}
|
|
|
|
//skip tag text value
|
|
//It may include comments and CDATA value
|
|
for (i++; i < xmlData.length; i++) {
|
|
if (xmlData[i] === '<') {
|
|
if (xmlData[i + 1] === '!') {
|
|
//comment or CADATA
|
|
i++;
|
|
i = readCommentAndCDATA(xmlData, i);
|
|
continue;
|
|
} else if (xmlData[i+1] === '?') {
|
|
i = readPI(xmlData, ++i);
|
|
if (i.err) return i;
|
|
} else {
|
|
break;
|
|
}
|
|
} else if (xmlData[i] === '&') {
|
|
const afterAmp = validateAmpersand(xmlData, i);
|
|
if (afterAmp == -1)
|
|
return getErrorObject('InvalidChar', "char '&' is not expected.", getLineNumberForPosition(xmlData, i));
|
|
i = afterAmp;
|
|
}
|
|
} //end of reading tag text value
|
|
if (xmlData[i] === '<') {
|
|
i--;
|
|
}
|
|
}
|
|
} else {
|
|
if (xmlData[i] === ' ' || xmlData[i] === '\t' || xmlData[i] === '\n' || xmlData[i] === '\r') {
|
|
continue;
|
|
}
|
|
return getErrorObject('InvalidChar', "char '"+xmlData[i]+"' is not expected.", getLineNumberForPosition(xmlData, i));
|
|
}
|
|
}
|
|
|
|
if (!tagFound) {
|
|
return getErrorObject('InvalidXml', 'Start tag expected.', 1);
|
|
} else if (tags.length > 0) {
|
|
return getErrorObject('InvalidXml', "Invalid '"+JSON.stringify(tags, null, 4).replace(/\r?\n/g, '')+"' found.", 1);
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
/**
|
|
* Read Processing insstructions and skip
|
|
* @param {*} xmlData
|
|
* @param {*} i
|
|
*/
|
|
function readPI(xmlData, i) {
|
|
var start = i;
|
|
for (; i < xmlData.length; i++) {
|
|
if (xmlData[i] == '?' || xmlData[i] == ' ') {
|
|
//tagname
|
|
var tagname = xmlData.substr(start, i - start);
|
|
if (i > 5 && tagname === 'xml') {
|
|
return getErrorObject('InvalidXml', 'XML declaration allowed only at the start of the document.', getLineNumberForPosition(xmlData, i));
|
|
} else if (xmlData[i] == '?' && xmlData[i + 1] == '>') {
|
|
//check if valid attribut string
|
|
i++;
|
|
break;
|
|
} else {
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
return i;
|
|
}
|
|
|
|
function readCommentAndCDATA(xmlData, i) {
|
|
if (xmlData.length > i + 5 && xmlData[i + 1] === '-' && xmlData[i + 2] === '-') {
|
|
//comment
|
|
for (i += 3; i < xmlData.length; i++) {
|
|
if (xmlData[i] === '-' && xmlData[i + 1] === '-' && xmlData[i + 2] === '>') {
|
|
i += 2;
|
|
break;
|
|
}
|
|
}
|
|
} else if (
|
|
xmlData.length > i + 8 &&
|
|
xmlData[i + 1] === 'D' &&
|
|
xmlData[i + 2] === 'O' &&
|
|
xmlData[i + 3] === 'C' &&
|
|
xmlData[i + 4] === 'T' &&
|
|
xmlData[i + 5] === 'Y' &&
|
|
xmlData[i + 6] === 'P' &&
|
|
xmlData[i + 7] === 'E'
|
|
) {
|
|
let angleBracketsCount = 1;
|
|
for (i += 8; i < xmlData.length; i++) {
|
|
if (xmlData[i] === '<') {
|
|
angleBracketsCount++;
|
|
} else if (xmlData[i] === '>') {
|
|
angleBracketsCount--;
|
|
if (angleBracketsCount === 0) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
} else if (
|
|
xmlData.length > i + 9 &&
|
|
xmlData[i + 1] === '[' &&
|
|
xmlData[i + 2] === 'C' &&
|
|
xmlData[i + 3] === 'D' &&
|
|
xmlData[i + 4] === 'A' &&
|
|
xmlData[i + 5] === 'T' &&
|
|
xmlData[i + 6] === 'A' &&
|
|
xmlData[i + 7] === '['
|
|
) {
|
|
for (i += 8; i < xmlData.length; i++) {
|
|
if (xmlData[i] === ']' && xmlData[i + 1] === ']' && xmlData[i + 2] === '>') {
|
|
i += 2;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
return i;
|
|
}
|
|
|
|
var doubleQuote = '"';
|
|
var singleQuote = "'";
|
|
|
|
/**
|
|
* Keep reading xmlData until '<' is found outside the attribute value.
|
|
* @param {string} xmlData
|
|
* @param {number} i
|
|
*/
|
|
function readAttributeStr(xmlData, i) {
|
|
let attrStr = '';
|
|
let startChar = '';
|
|
let tagClosed = false;
|
|
for (; i < xmlData.length; i++) {
|
|
if (xmlData[i] === doubleQuote || xmlData[i] === singleQuote) {
|
|
if (startChar === '') {
|
|
startChar = xmlData[i];
|
|
} else if (startChar !== xmlData[i]) {
|
|
//if vaue is enclosed with double quote then single quotes are allowed inside the value and vice versa
|
|
continue;
|
|
} else {
|
|
startChar = '';
|
|
}
|
|
} else if (xmlData[i] === '>') {
|
|
if (startChar === '') {
|
|
tagClosed = true;
|
|
break;
|
|
}
|
|
}
|
|
attrStr += xmlData[i];
|
|
}
|
|
if (startChar !== '') {
|
|
return false;
|
|
}
|
|
|
|
return {
|
|
value: attrStr,
|
|
index: i,
|
|
tagClosed: tagClosed
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Select all the attributes whether valid or invalid.
|
|
*/
|
|
const validAttrStrRegxp = new RegExp('(\\s*)([^\\s=]+)(\\s*=)?(\\s*([\'"])(([\\s\\S])*?)\\5)?', 'g');
|
|
|
|
//attr, ="sd", a="amit's", a="sd"b="saf", ab cd=""
|
|
|
|
function validateAttributeString(attrStr, options) {
|
|
//console.log("start:"+attrStr+":end");
|
|
|
|
//if(attrStr.trim().length === 0) return true; //empty string
|
|
|
|
const matches = util.getAllMatches(attrStr, validAttrStrRegxp);
|
|
const attrNames = {};
|
|
|
|
for (let i = 0; i < matches.length; i++) {
|
|
if (matches[i][1].length === 0) {
|
|
//nospace before attribute name: a="sd"b="saf"
|
|
return getErrorObject('InvalidAttr', "Attribute '"+matches[i][2]+"' has no space in starting.", getPositionFromMatch(attrStr, matches[i][0]))
|
|
} else if (matches[i][3] === undefined && !options.allowBooleanAttributes) {
|
|
//independent attribute: ab
|
|
return getErrorObject('InvalidAttr', "boolean attribute '"+matches[i][2]+"' is not allowed.", getPositionFromMatch(attrStr, matches[i][0]));
|
|
}
|
|
/* else if(matches[i][6] === undefined){//attribute without value: ab=
|
|
return { err: { code:"InvalidAttr",msg:"attribute " + matches[i][2] + " has no value assigned."}};
|
|
} */
|
|
const attrName = matches[i][2];
|
|
if (!validateAttrName(attrName)) {
|
|
return getErrorObject('InvalidAttr', "Attribute '"+attrName+"' is an invalid name.", getPositionFromMatch(attrStr, matches[i][0]));
|
|
}
|
|
if (!attrNames.hasOwnProperty(attrName)) {
|
|
//check for duplicate attribute.
|
|
attrNames[attrName] = 1;
|
|
} else {
|
|
return getErrorObject('InvalidAttr', "Attribute '"+attrName+"' is repeated.", getPositionFromMatch(attrStr, matches[i][0]));
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
function validateNumberAmpersand(xmlData, i) {
|
|
let re = /\d/;
|
|
if (xmlData[i] === 'x') {
|
|
i++;
|
|
re = /[\da-fA-F]/;
|
|
}
|
|
for (; i < xmlData.length; i++) {
|
|
if (xmlData[i] === ';')
|
|
return i;
|
|
if (!xmlData[i].match(re))
|
|
break;
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
function validateAmpersand(xmlData, i) {
|
|
// https://www.w3.org/TR/xml/#dt-charref
|
|
i++;
|
|
if (xmlData[i] === ';')
|
|
return -1;
|
|
if (xmlData[i] === '#') {
|
|
i++;
|
|
return validateNumberAmpersand(xmlData, i);
|
|
}
|
|
let count = 0;
|
|
for (; i < xmlData.length; i++, count++) {
|
|
if (xmlData[i].match(/\w/) && count < 20)
|
|
continue;
|
|
if (xmlData[i] === ';')
|
|
break;
|
|
return -1;
|
|
}
|
|
return i;
|
|
}
|
|
|
|
function getErrorObject(code, message, lineNumber) {
|
|
return {
|
|
err: {
|
|
code: code,
|
|
msg: message,
|
|
line: lineNumber,
|
|
},
|
|
};
|
|
}
|
|
|
|
function validateAttrName(attrName) {
|
|
return util.isName(attrName);
|
|
}
|
|
|
|
// const startsWithXML = /^xml/i;
|
|
|
|
function validateTagName(tagname) {
|
|
return util.isName(tagname) /* && !tagname.match(startsWithXML) */;
|
|
}
|
|
|
|
//this function returns the line number for the character at the given index
|
|
function getLineNumberForPosition(xmlData, index) {
|
|
var lines = xmlData.substring(0, index).split(/\r?\n/);
|
|
return lines.length;
|
|
}
|
|
|
|
//this function returns the position of the last character of match within attrStr
|
|
function getPositionFromMatch(attrStr, match) {
|
|
return attrStr.indexOf(match) + match.length;
|
|
}
|
|
|
|
var validator = {
|
|
validate: validate
|
|
};
|
|
|
|
const char = function(a) {
|
|
return String.fromCharCode(a);
|
|
};
|
|
|
|
const chars = {
|
|
nilChar: char(176),
|
|
missingChar: char(201),
|
|
nilPremitive: char(175),
|
|
missingPremitive: char(200),
|
|
|
|
emptyChar: char(178),
|
|
emptyValue: char(177), //empty Premitive
|
|
|
|
boundryChar: char(179),
|
|
|
|
objStart: char(198),
|
|
arrStart: char(204),
|
|
arrayEnd: char(185),
|
|
};
|
|
|
|
const charsArr = [
|
|
chars.nilChar,
|
|
chars.nilPremitive,
|
|
chars.missingChar,
|
|
chars.missingPremitive,
|
|
chars.boundryChar,
|
|
chars.emptyChar,
|
|
chars.emptyValue,
|
|
chars.arrayEnd,
|
|
chars.objStart,
|
|
chars.arrStart,
|
|
];
|
|
|
|
const _e = function(node, e_schema, options) {
|
|
if (typeof e_schema === 'string') {
|
|
//premitive
|
|
if (node && node[0] && node[0].val !== undefined) {
|
|
return getValue(node[0].val);
|
|
} else {
|
|
return getValue(node);
|
|
}
|
|
} else {
|
|
const hasValidData = hasData(node);
|
|
if (hasValidData === true) {
|
|
let str = '';
|
|
if (Array.isArray(e_schema)) {
|
|
//attributes can't be repeated. hence check in children tags only
|
|
str += chars.arrStart;
|
|
const itemSchema = e_schema[0];
|
|
//var itemSchemaType = itemSchema;
|
|
const arr_len = node.length;
|
|
|
|
if (typeof itemSchema === 'string') {
|
|
for (let arr_i = 0; arr_i < arr_len; arr_i++) {
|
|
const r = getValue(node[arr_i].val);
|
|
str = processValue(str, r);
|
|
}
|
|
} else {
|
|
for (let arr_i = 0; arr_i < arr_len; arr_i++) {
|
|
const r = _e(node[arr_i], itemSchema, options);
|
|
str = processValue(str, r);
|
|
}
|
|
}
|
|
str += chars.arrayEnd; //indicates that next item is not array item
|
|
} else {
|
|
//object
|
|
str += chars.objStart;
|
|
const keys = Object.keys(e_schema);
|
|
if (Array.isArray(node)) {
|
|
node = node[0];
|
|
}
|
|
for (let i in keys) {
|
|
const key = keys[i];
|
|
//a property defined in schema can be present either in attrsMap or children tags
|
|
//options.textNodeName will not present in both maps, take it's value from val
|
|
//options.attrNodeName will be present in attrsMap
|
|
let r;
|
|
if (!options.ignoreAttributes && node.attrsMap && node.attrsMap[key]) {
|
|
r = _e(node.attrsMap[key], e_schema[key], options);
|
|
} else if (key === options.textNodeName) {
|
|
r = _e(node.val, e_schema[key], options);
|
|
} else {
|
|
r = _e(node.child[key], e_schema[key], options);
|
|
}
|
|
str = processValue(str, r);
|
|
}
|
|
}
|
|
return str;
|
|
} else {
|
|
return hasValidData;
|
|
}
|
|
}
|
|
};
|
|
|
|
const getValue = function(a /*, type*/) {
|
|
switch (a) {
|
|
case undefined:
|
|
return chars.missingPremitive;
|
|
case null:
|
|
return chars.nilPremitive;
|
|
case '':
|
|
return chars.emptyValue;
|
|
default:
|
|
return a;
|
|
}
|
|
};
|
|
|
|
const processValue = function(str, r) {
|
|
if (!isAppChar(r[0]) && !isAppChar(str[str.length - 1])) {
|
|
str += chars.boundryChar;
|
|
}
|
|
return str + r;
|
|
};
|
|
|
|
const isAppChar = function(ch) {
|
|
return charsArr.indexOf(ch) !== -1;
|
|
};
|
|
|
|
function hasData(jObj) {
|
|
if (jObj === undefined) {
|
|
return chars.missingChar;
|
|
} else if (jObj === null) {
|
|
return chars.nilChar;
|
|
} else if (
|
|
jObj.child &&
|
|
Object.keys(jObj.child).length === 0 &&
|
|
(!jObj.attrsMap || Object.keys(jObj.attrsMap).length === 0)
|
|
) {
|
|
return chars.emptyChar;
|
|
} else {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
const buildOptions$2 = util.buildOptions;
|
|
|
|
const convert2nimn = function(node, e_schema, options) {
|
|
options = buildOptions$2(options, xmlstr2xmlnode.defaultOptions, xmlstr2xmlnode.props);
|
|
return _e(node, e_schema, options);
|
|
};
|
|
|
|
var convert2nimn_1 = convert2nimn;
|
|
|
|
var nimndata = {
|
|
convert2nimn: convert2nimn_1
|
|
};
|
|
|
|
const buildOptions$1 = util.buildOptions;
|
|
|
|
|
|
//TODO: do it later
|
|
const convertToJsonString = function(node, options) {
|
|
options = buildOptions$1(options, xmlstr2xmlnode.defaultOptions, xmlstr2xmlnode.props);
|
|
|
|
options.indentBy = options.indentBy || '';
|
|
return _cToJsonStr(node, options);
|
|
};
|
|
|
|
const _cToJsonStr = function(node, options, level) {
|
|
let jObj = '{';
|
|
|
|
//traver through all the children
|
|
const keys = Object.keys(node.child);
|
|
|
|
for (let index = 0; index < keys.length; index++) {
|
|
var tagname = keys[index];
|
|
if (node.child[tagname] && node.child[tagname].length > 1) {
|
|
jObj += '"' + tagname + '" : [ ';
|
|
for (var tag in node.child[tagname]) {
|
|
jObj += _cToJsonStr(node.child[tagname][tag], options) + ' , ';
|
|
}
|
|
jObj = jObj.substr(0, jObj.length - 1) + ' ] '; //remove extra comma in last
|
|
} else {
|
|
jObj += '"' + tagname + '" : ' + _cToJsonStr(node.child[tagname][0], options) + ' ,';
|
|
}
|
|
}
|
|
util.merge(jObj, node.attrsMap);
|
|
//add attrsMap as new children
|
|
if (util.isEmptyObject(jObj)) {
|
|
return util.isExist(node.val) ? node.val : '';
|
|
} else {
|
|
if (util.isExist(node.val)) {
|
|
if (!(typeof node.val === 'string' && (node.val === '' || node.val === options.cdataPositionChar))) {
|
|
jObj += '"' + options.textNodeName + '" : ' + stringval(node.val);
|
|
}
|
|
}
|
|
}
|
|
//add value
|
|
if (jObj[jObj.length - 1] === ',') {
|
|
jObj = jObj.substr(0, jObj.length - 2);
|
|
}
|
|
return jObj + '}';
|
|
};
|
|
|
|
function stringval(v) {
|
|
if (v === true || v === false || !isNaN(v)) {
|
|
return v;
|
|
} else {
|
|
return '"' + v + '"';
|
|
}
|
|
}
|
|
|
|
var convertToJsonString_1 = convertToJsonString;
|
|
|
|
var node2json_str = {
|
|
convertToJsonString: convertToJsonString_1
|
|
};
|
|
|
|
//parse Empty Node as self closing node
|
|
const buildOptions = util.buildOptions;
|
|
|
|
const defaultOptions = {
|
|
attributeNamePrefix: '@_',
|
|
attrNodeName: false,
|
|
textNodeName: '#text',
|
|
ignoreAttributes: true,
|
|
cdataTagName: false,
|
|
cdataPositionChar: '\\c',
|
|
format: false,
|
|
indentBy: ' ',
|
|
supressEmptyNode: false,
|
|
tagValueProcessor: function(a) {
|
|
return a;
|
|
},
|
|
attrValueProcessor: function(a) {
|
|
return a;
|
|
},
|
|
};
|
|
|
|
const props = [
|
|
'attributeNamePrefix',
|
|
'attrNodeName',
|
|
'textNodeName',
|
|
'ignoreAttributes',
|
|
'cdataTagName',
|
|
'cdataPositionChar',
|
|
'format',
|
|
'indentBy',
|
|
'supressEmptyNode',
|
|
'tagValueProcessor',
|
|
'attrValueProcessor',
|
|
];
|
|
|
|
function Parser(options) {
|
|
this.options = buildOptions(options, defaultOptions, props);
|
|
if (this.options.ignoreAttributes || this.options.attrNodeName) {
|
|
this.isAttribute = function(/*a*/) {
|
|
return false;
|
|
};
|
|
} else {
|
|
this.attrPrefixLen = this.options.attributeNamePrefix.length;
|
|
this.isAttribute = isAttribute;
|
|
}
|
|
if (this.options.cdataTagName) {
|
|
this.isCDATA = isCDATA;
|
|
} else {
|
|
this.isCDATA = function(/*a*/) {
|
|
return false;
|
|
};
|
|
}
|
|
this.replaceCDATAstr = replaceCDATAstr;
|
|
this.replaceCDATAarr = replaceCDATAarr;
|
|
|
|
if (this.options.format) {
|
|
this.indentate = indentate;
|
|
this.tagEndChar = '>\n';
|
|
this.newLine = '\n';
|
|
} else {
|
|
this.indentate = function() {
|
|
return '';
|
|
};
|
|
this.tagEndChar = '>';
|
|
this.newLine = '';
|
|
}
|
|
|
|
if (this.options.supressEmptyNode) {
|
|
this.buildTextNode = buildEmptyTextNode;
|
|
this.buildObjNode = buildEmptyObjNode;
|
|
} else {
|
|
this.buildTextNode = buildTextValNode;
|
|
this.buildObjNode = buildObjectNode;
|
|
}
|
|
|
|
this.buildTextValNode = buildTextValNode;
|
|
this.buildObjectNode = buildObjectNode;
|
|
}
|
|
|
|
Parser.prototype.parse = function(jObj) {
|
|
return this.j2x(jObj, 0).val;
|
|
};
|
|
|
|
Parser.prototype.j2x = function(jObj, level) {
|
|
let attrStr = '';
|
|
let val = '';
|
|
const keys = Object.keys(jObj);
|
|
const len = keys.length;
|
|
for (let i = 0; i < len; i++) {
|
|
const key = keys[i];
|
|
if (typeof jObj[key] === 'undefined') ; else if (jObj[key] === null) {
|
|
val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;
|
|
} else if (jObj[key] instanceof Date) {
|
|
val += this.buildTextNode(jObj[key], key, '', level);
|
|
} else if (typeof jObj[key] !== 'object') {
|
|
//premitive type
|
|
const attr = this.isAttribute(key);
|
|
if (attr) {
|
|
attrStr += ' ' + attr + '="' + this.options.attrValueProcessor('' + jObj[key]) + '"';
|
|
} else if (this.isCDATA(key)) {
|
|
if (jObj[this.options.textNodeName]) {
|
|
val += this.replaceCDATAstr(jObj[this.options.textNodeName], jObj[key]);
|
|
} else {
|
|
val += this.replaceCDATAstr('', jObj[key]);
|
|
}
|
|
} else {
|
|
//tag value
|
|
if (key === this.options.textNodeName) {
|
|
if (jObj[this.options.cdataTagName]) ; else {
|
|
val += this.options.tagValueProcessor('' + jObj[key]);
|
|
}
|
|
} else {
|
|
val += this.buildTextNode(jObj[key], key, '', level);
|
|
}
|
|
}
|
|
} else if (Array.isArray(jObj[key])) {
|
|
//repeated nodes
|
|
if (this.isCDATA(key)) {
|
|
val += this.indentate(level);
|
|
if (jObj[this.options.textNodeName]) {
|
|
val += this.replaceCDATAarr(jObj[this.options.textNodeName], jObj[key]);
|
|
} else {
|
|
val += this.replaceCDATAarr('', jObj[key]);
|
|
}
|
|
} else {
|
|
//nested nodes
|
|
const arrLen = jObj[key].length;
|
|
for (let j = 0; j < arrLen; j++) {
|
|
const item = jObj[key][j];
|
|
if (typeof item === 'undefined') ; else if (item === null) {
|
|
val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;
|
|
} else if (typeof item === 'object') {
|
|
const result = this.j2x(item, level + 1);
|
|
val += this.buildObjNode(result.val, key, result.attrStr, level);
|
|
} else {
|
|
val += this.buildTextNode(item, key, '', level);
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
//nested node
|
|
if (this.options.attrNodeName && key === this.options.attrNodeName) {
|
|
const Ks = Object.keys(jObj[key]);
|
|
const L = Ks.length;
|
|
for (let j = 0; j < L; j++) {
|
|
attrStr += ' ' + Ks[j] + '="' + this.options.attrValueProcessor('' + jObj[key][Ks[j]]) + '"';
|
|
}
|
|
} else {
|
|
const result = this.j2x(jObj[key], level + 1);
|
|
val += this.buildObjNode(result.val, key, result.attrStr, level);
|
|
}
|
|
}
|
|
}
|
|
return {attrStr: attrStr, val: val};
|
|
};
|
|
|
|
function replaceCDATAstr(str, cdata) {
|
|
str = this.options.tagValueProcessor('' + str);
|
|
if (this.options.cdataPositionChar === '' || str === '') {
|
|
return str + '<![CDATA[' + cdata + ']]' + this.tagEndChar;
|
|
} else {
|
|
return str.replace(this.options.cdataPositionChar, '<![CDATA[' + cdata + ']]' + this.tagEndChar);
|
|
}
|
|
}
|
|
|
|
function replaceCDATAarr(str, cdata) {
|
|
str = this.options.tagValueProcessor('' + str);
|
|
if (this.options.cdataPositionChar === '' || str === '') {
|
|
return str + '<![CDATA[' + cdata.join(']]><![CDATA[') + ']]' + this.tagEndChar;
|
|
} else {
|
|
for (let v in cdata) {
|
|
str = str.replace(this.options.cdataPositionChar, '<![CDATA[' + cdata[v] + ']]>');
|
|
}
|
|
return str + this.newLine;
|
|
}
|
|
}
|
|
|
|
function buildObjectNode(val, key, attrStr, level) {
|
|
if (attrStr && !val.includes('<')) {
|
|
return (
|
|
this.indentate(level) +
|
|
'<' +
|
|
key +
|
|
attrStr +
|
|
'>' +
|
|
val +
|
|
//+ this.newLine
|
|
// + this.indentate(level)
|
|
'</' +
|
|
key +
|
|
this.tagEndChar
|
|
);
|
|
} else {
|
|
return (
|
|
this.indentate(level) +
|
|
'<' +
|
|
key +
|
|
attrStr +
|
|
this.tagEndChar +
|
|
val +
|
|
//+ this.newLine
|
|
this.indentate(level) +
|
|
'</' +
|
|
key +
|
|
this.tagEndChar
|
|
);
|
|
}
|
|
}
|
|
|
|
function buildEmptyObjNode(val, key, attrStr, level) {
|
|
if (val !== '') {
|
|
return this.buildObjectNode(val, key, attrStr, level);
|
|
} else {
|
|
return this.indentate(level) + '<' + key + attrStr + '/' + this.tagEndChar;
|
|
//+ this.newLine
|
|
}
|
|
}
|
|
|
|
function buildTextValNode(val, key, attrStr, level) {
|
|
return (
|
|
this.indentate(level) +
|
|
'<' +
|
|
key +
|
|
attrStr +
|
|
'>' +
|
|
this.options.tagValueProcessor(val) +
|
|
'</' +
|
|
key +
|
|
this.tagEndChar
|
|
);
|
|
}
|
|
|
|
function buildEmptyTextNode(val, key, attrStr, level) {
|
|
if (val !== '') {
|
|
return this.buildTextValNode(val, key, attrStr, level);
|
|
} else {
|
|
return this.indentate(level) + '<' + key + attrStr + '/' + this.tagEndChar;
|
|
}
|
|
}
|
|
|
|
function indentate(level) {
|
|
return this.options.indentBy.repeat(level);
|
|
}
|
|
|
|
function isAttribute(name /*, options*/) {
|
|
if (name.startsWith(this.options.attributeNamePrefix)) {
|
|
return name.substr(this.attrPrefixLen);
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function isCDATA(name) {
|
|
return name === this.options.cdataTagName;
|
|
}
|
|
|
|
//formatting
|
|
//indentation
|
|
//\n after each closing or self closing tag
|
|
|
|
var json2xml = Parser;
|
|
|
|
var parser = createCommonjsModule(function (module, exports) {
|
|
|
|
|
|
|
|
const x2xmlnode = xmlstr2xmlnode;
|
|
const buildOptions = util.buildOptions;
|
|
|
|
|
|
exports.parse = function(xmlData, givenOptions = {}, validationOption) {
|
|
if( validationOption){
|
|
if(validationOption === true) validationOption = {};
|
|
|
|
const result = validator.validate(xmlData, validationOption);
|
|
if (result !== true) {
|
|
throw Error( result.err.msg)
|
|
}
|
|
}
|
|
if(givenOptions.parseTrueNumberOnly
|
|
&& givenOptions.parseNodeValue !== false
|
|
&& !givenOptions.numParseOptions){
|
|
|
|
givenOptions.numParseOptions = {
|
|
leadingZeros: false,
|
|
};
|
|
}
|
|
let options = buildOptions(givenOptions, x2xmlnode.defaultOptions, x2xmlnode.props);
|
|
|
|
const traversableObj = xmlstr2xmlnode.getTraversalObj(xmlData, options);
|
|
//print(traversableObj, " ");
|
|
return node2json.convertToJson(traversableObj, options);
|
|
};
|
|
exports.convertTonimn = nimndata.convert2nimn;
|
|
exports.getTraversalObj = xmlstr2xmlnode.getTraversalObj;
|
|
exports.convertToJson = node2json.convertToJson;
|
|
exports.convertToJsonString = node2json_str.convertToJsonString;
|
|
exports.validate = validator.validate;
|
|
exports.j2xParser = json2xml;
|
|
exports.parseToNimn = function(xmlData, schema, options) {
|
|
return exports.convertTonimn(exports.getTraversalObj(xmlData, options), schema, options);
|
|
};
|
|
});
|
|
|
|
const isSvg = input => {
|
|
if (input === undefined || input === null) {
|
|
return false;
|
|
}
|
|
|
|
input = input.toString().trim();
|
|
|
|
if (input.length === 0) {
|
|
return false;
|
|
}
|
|
|
|
// Has to be `!==` as it can also return an object with error info.
|
|
if (parser.validate(input) !== true) {
|
|
return false;
|
|
}
|
|
|
|
let jsonObject;
|
|
try {
|
|
jsonObject = parser.parse(input);
|
|
} catch (_) {
|
|
return false;
|
|
}
|
|
|
|
if (!jsonObject) {
|
|
return false;
|
|
}
|
|
|
|
if (!('svg' in jsonObject)) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
var isSvg_1 = isSvg;
|
|
// TODO: Remove this for the next major release
|
|
var _default$5 = isSvg;
|
|
isSvg_1.default = _default$5;
|
|
|
|
var matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g;
|
|
|
|
var escapeStringRegexp = function (str) {
|
|
if (typeof str !== 'string') {
|
|
throw new TypeError('Expected a string');
|
|
}
|
|
|
|
return str.replace(matchOperatorsRe, '\\$&');
|
|
};
|
|
|
|
var trimRepeated = function (str, target) {
|
|
if (typeof str !== 'string' || typeof target !== 'string') {
|
|
throw new TypeError('Expected a string');
|
|
}
|
|
|
|
return str.replace(new RegExp('(?:' + escapeStringRegexp(target) + '){2,}', 'g'), target);
|
|
};
|
|
|
|
/* eslint-disable no-control-regex */
|
|
// TODO: remove parens when Node.js 6 is targeted. Node.js 4 barfs at it.
|
|
var filenameReservedRegex = () => (/[<>:"\/\\|?*\x00-\x1F]/g);
|
|
var windowsNames = () => (/^(con|prn|aux|nul|com[0-9]|lpt[0-9])$/i);
|
|
filenameReservedRegex.windowsNames = windowsNames;
|
|
|
|
var stripOuter = function (str, sub) {
|
|
if (typeof str !== 'string' || typeof sub !== 'string') {
|
|
throw new TypeError();
|
|
}
|
|
|
|
sub = escapeStringRegexp(sub);
|
|
return str.replace(new RegExp('^' + sub + '|' + sub + '$', 'g'), '');
|
|
};
|
|
|
|
// Doesn't make sense to have longer filenames
|
|
const MAX_FILENAME_LENGTH = 100;
|
|
|
|
const reControlChars = /[\u0000-\u001F\u0080-\u009F]/g; // eslint-disable-line no-control-regex
|
|
const reRelativePath = /^\.+/;
|
|
const reTrailingPeriods = /\.+$/;
|
|
|
|
function filenamify(string, options = {}) {
|
|
if (typeof string !== 'string') {
|
|
throw new TypeError('Expected a string');
|
|
}
|
|
|
|
const replacement = options.replacement === undefined ? '!' : options.replacement;
|
|
|
|
if (filenameReservedRegex().test(replacement) && reControlChars.test(replacement)) {
|
|
throw new Error('Replacement string cannot contain reserved filename characters');
|
|
}
|
|
|
|
string = string.replace(filenameReservedRegex(), replacement);
|
|
string = string.replace(reControlChars, replacement);
|
|
string = string.replace(reRelativePath, replacement);
|
|
string = string.replace(reTrailingPeriods, '');
|
|
|
|
if (replacement.length > 0) {
|
|
string = trimRepeated(string, replacement);
|
|
string = string.length > 1 ? stripOuter(string, replacement) : string;
|
|
}
|
|
|
|
string = filenameReservedRegex.windowsNames().test(string) ? string + replacement : string;
|
|
string = string.slice(0, typeof options.maxLength === 'number' ? options.maxLength : MAX_FILENAME_LENGTH);
|
|
|
|
return string;
|
|
}
|
|
|
|
const FILENAME_TEMPLATE = "media";
|
|
const MAX_FILENAME_INDEX = 1000;
|
|
const FILENAME_ATTEMPTS = 5;
|
|
const EXTERNAL_MEDIA_LINK_PATTERN = /\!\[(?<anchor>.*?)\]\((?<link>.+?)\)/g;
|
|
const DIRTY_IMAGE_TAG = /\[\!\[\[(?<anchor>.*?)\]\]\((?<link>.+?)\)\]/g;
|
|
const ANY_URL_PATTERN = /[a-zA-Z\d]+:\/\/(\w+:\w+@)?([a-zA-Z\d.-]+\.[A-Za-z]{2,4})(:\d+)?(\/.*)?/i;
|
|
// Looks like timeouts in Obsidian API are set in milliseconds
|
|
const NOTICE_TIMEOUT = 10 * 1000;
|
|
const TIMEOUT_LIKE_INFINITY = 24 * 60 * 60 * 1000;
|
|
const FORBIDDEN_SYMBOLS_FILENAME_PATTERN = /\s+/g;
|
|
const DEFAULT_SETTINGS = {
|
|
realTimeUpdate: false,
|
|
realTimeUpdateInterval: 1000,
|
|
realTimeAttemptsToProcess: 3,
|
|
cleanContent: true,
|
|
showNotifications: false,
|
|
include: ".*\\.md",
|
|
mediaRootDirectory: "media",
|
|
};
|
|
|
|
/*
|
|
https://stackoverflow.com/a/48032528/1020973
|
|
It will be better to do it type-correct.
|
|
|
|
*/
|
|
function replaceAsync(str, regex, asyncFn) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const promises = [];
|
|
str.replace(regex, (match, ...args) => {
|
|
const promise = asyncFn(match, ...args);
|
|
promises.push(promise);
|
|
});
|
|
const data = yield Promise.all(promises);
|
|
return str.replace(regex, () => data.shift());
|
|
});
|
|
}
|
|
function isUrl(link) {
|
|
try {
|
|
return Boolean(new URL(link));
|
|
}
|
|
catch (_) {
|
|
return false;
|
|
}
|
|
}
|
|
function downloadImage(url) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const res = yield got(url, { responseType: "buffer" });
|
|
return res.body;
|
|
});
|
|
}
|
|
function fileExtByContent(content) {
|
|
var _a;
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const fileExt = (_a = (yield fileType_1.fromBuffer(content))) === null || _a === void 0 ? void 0 : _a.ext;
|
|
// if XML, probably it is SVG
|
|
if (fileExt == "xml") {
|
|
const buffer = Buffer.from(content);
|
|
if (isSvg_1(buffer))
|
|
return "svg";
|
|
}
|
|
return fileExt;
|
|
});
|
|
}
|
|
function recreateImageTag(match, anchor, link) {
|
|
return ``;
|
|
}
|
|
function cleanContent(content) {
|
|
const cleanedContent = content.replace(DIRTY_IMAGE_TAG, recreateImageTag);
|
|
return cleanedContent;
|
|
}
|
|
function cleanFileName(name) {
|
|
const cleanedName = filenamify(name).replace(FORBIDDEN_SYMBOLS_FILENAME_PATTERN, "_");
|
|
return cleanedName;
|
|
}
|
|
function pathJoin(dir, subpath) {
|
|
const result = path__default['default'].join(dir, subpath);
|
|
// it seems that obsidian do not understand paths with backslashes in Windows, so turn them into forward slashes
|
|
return result.replace(/\\/g, "/");
|
|
}
|
|
|
|
/**
|
|
C-like unsigned 32 bits integers in Javascript
|
|
Copyright (C) 2013, Pierre Curto
|
|
MIT license
|
|
*/
|
|
|
|
var uint32 = createCommonjsModule(function (module) {
|
|
(function (root) {
|
|
|
|
// Local cache for typical radices
|
|
({
|
|
36: UINT32( Math.pow(36, 5) )
|
|
, 16: UINT32( Math.pow(16, 7) )
|
|
, 10: UINT32( Math.pow(10, 9) )
|
|
, 2: UINT32( Math.pow(2, 30) )
|
|
});
|
|
({
|
|
36: UINT32(36)
|
|
, 16: UINT32(16)
|
|
, 10: UINT32(10)
|
|
, 2: UINT32(2)
|
|
});
|
|
|
|
/**
|
|
* Represents an unsigned 32 bits integer
|
|
* @constructor
|
|
* @param {Number|String|Number} low bits | integer as a string | integer as a number
|
|
* @param {Number|Number|Undefined} high bits | radix (optional, default=10)
|
|
* @return
|
|
*/
|
|
function UINT32 (l, h) {
|
|
if ( !(this instanceof UINT32) )
|
|
return new UINT32(l, h)
|
|
|
|
this._low = 0;
|
|
this._high = 0;
|
|
this.remainder = null;
|
|
if (typeof h == 'undefined')
|
|
return fromNumber.call(this, l)
|
|
|
|
if (typeof l == 'string')
|
|
return fromString.call(this, l, h)
|
|
|
|
fromBits.call(this, l, h);
|
|
}
|
|
|
|
/**
|
|
* Set the current _UINT32_ object with its low and high bits
|
|
* @method fromBits
|
|
* @param {Number} low bits
|
|
* @param {Number} high bits
|
|
* @return ThisExpression
|
|
*/
|
|
function fromBits (l, h) {
|
|
this._low = l | 0;
|
|
this._high = h | 0;
|
|
|
|
return this
|
|
}
|
|
UINT32.prototype.fromBits = fromBits;
|
|
|
|
/**
|
|
* Set the current _UINT32_ object from a number
|
|
* @method fromNumber
|
|
* @param {Number} number
|
|
* @return ThisExpression
|
|
*/
|
|
function fromNumber (value) {
|
|
this._low = value & 0xFFFF;
|
|
this._high = value >>> 16;
|
|
|
|
return this
|
|
}
|
|
UINT32.prototype.fromNumber = fromNumber;
|
|
|
|
/**
|
|
* Set the current _UINT32_ object from a string
|
|
* @method fromString
|
|
* @param {String} integer as a string
|
|
* @param {Number} radix (optional, default=10)
|
|
* @return ThisExpression
|
|
*/
|
|
function fromString (s, radix) {
|
|
var value = parseInt(s, radix || 10);
|
|
|
|
this._low = value & 0xFFFF;
|
|
this._high = value >>> 16;
|
|
|
|
return this
|
|
}
|
|
UINT32.prototype.fromString = fromString;
|
|
|
|
/**
|
|
* Convert this _UINT32_ to a number
|
|
* @method toNumber
|
|
* @return {Number} the converted UINT32
|
|
*/
|
|
UINT32.prototype.toNumber = function () {
|
|
return (this._high * 65536) + this._low
|
|
};
|
|
|
|
/**
|
|
* Convert this _UINT32_ to a string
|
|
* @method toString
|
|
* @param {Number} radix (optional, default=10)
|
|
* @return {String} the converted UINT32
|
|
*/
|
|
UINT32.prototype.toString = function (radix) {
|
|
return this.toNumber().toString(radix || 10)
|
|
};
|
|
|
|
/**
|
|
* Add two _UINT32_. The current _UINT32_ stores the result
|
|
* @method add
|
|
* @param {Object} other UINT32
|
|
* @return ThisExpression
|
|
*/
|
|
UINT32.prototype.add = function (other) {
|
|
var a00 = this._low + other._low;
|
|
var a16 = a00 >>> 16;
|
|
|
|
a16 += this._high + other._high;
|
|
|
|
this._low = a00 & 0xFFFF;
|
|
this._high = a16 & 0xFFFF;
|
|
|
|
return this
|
|
};
|
|
|
|
/**
|
|
* Subtract two _UINT32_. The current _UINT32_ stores the result
|
|
* @method subtract
|
|
* @param {Object} other UINT32
|
|
* @return ThisExpression
|
|
*/
|
|
UINT32.prototype.subtract = function (other) {
|
|
//TODO inline
|
|
return this.add( other.clone().negate() )
|
|
};
|
|
|
|
/**
|
|
* Multiply two _UINT32_. The current _UINT32_ stores the result
|
|
* @method multiply
|
|
* @param {Object} other UINT32
|
|
* @return ThisExpression
|
|
*/
|
|
UINT32.prototype.multiply = function (other) {
|
|
/*
|
|
a = a00 + a16
|
|
b = b00 + b16
|
|
a*b = (a00 + a16)(b00 + b16)
|
|
= a00b00 + a00b16 + a16b00 + a16b16
|
|
|
|
a16b16 overflows the 32bits
|
|
*/
|
|
var a16 = this._high;
|
|
var a00 = this._low;
|
|
var b16 = other._high;
|
|
var b00 = other._low;
|
|
|
|
/* Removed to increase speed under normal circumstances (i.e. not multiplying by 0 or 1)
|
|
// this == 0 or other == 1: nothing to do
|
|
if ((a00 == 0 && a16 == 0) || (b00 == 1 && b16 == 0)) return this
|
|
|
|
// other == 0 or this == 1: this = other
|
|
if ((b00 == 0 && b16 == 0) || (a00 == 1 && a16 == 0)) {
|
|
this._low = other._low
|
|
this._high = other._high
|
|
return this
|
|
}
|
|
*/
|
|
|
|
var c16, c00;
|
|
c00 = a00 * b00;
|
|
c16 = c00 >>> 16;
|
|
|
|
c16 += a16 * b00;
|
|
c16 &= 0xFFFF; // Not required but improves performance
|
|
c16 += a00 * b16;
|
|
|
|
this._low = c00 & 0xFFFF;
|
|
this._high = c16 & 0xFFFF;
|
|
|
|
return this
|
|
};
|
|
|
|
/**
|
|
* Divide two _UINT32_. The current _UINT32_ stores the result.
|
|
* The remainder is made available as the _remainder_ property on
|
|
* the _UINT32_ object. It can be null, meaning there are no remainder.
|
|
* @method div
|
|
* @param {Object} other UINT32
|
|
* @return ThisExpression
|
|
*/
|
|
UINT32.prototype.div = function (other) {
|
|
if ( (other._low == 0) && (other._high == 0) ) throw Error('division by zero')
|
|
|
|
// other == 1
|
|
if (other._high == 0 && other._low == 1) {
|
|
this.remainder = new UINT32(0);
|
|
return this
|
|
}
|
|
|
|
// other > this: 0
|
|
if ( other.gt(this) ) {
|
|
this.remainder = this.clone();
|
|
this._low = 0;
|
|
this._high = 0;
|
|
return this
|
|
}
|
|
// other == this: 1
|
|
if ( this.eq(other) ) {
|
|
this.remainder = new UINT32(0);
|
|
this._low = 1;
|
|
this._high = 0;
|
|
return this
|
|
}
|
|
|
|
// Shift the divisor left until it is higher than the dividend
|
|
var _other = other.clone();
|
|
var i = -1;
|
|
while ( !this.lt(_other) ) {
|
|
// High bit can overflow the default 16bits
|
|
// Its ok since we right shift after this loop
|
|
// The overflown bit must be kept though
|
|
_other.shiftLeft(1, true);
|
|
i++;
|
|
}
|
|
|
|
// Set the remainder
|
|
this.remainder = this.clone();
|
|
// Initialize the current result to 0
|
|
this._low = 0;
|
|
this._high = 0;
|
|
for (; i >= 0; i--) {
|
|
_other.shiftRight(1);
|
|
// If shifted divisor is smaller than the dividend
|
|
// then subtract it from the dividend
|
|
if ( !this.remainder.lt(_other) ) {
|
|
this.remainder.subtract(_other);
|
|
// Update the current result
|
|
if (i >= 16) {
|
|
this._high |= 1 << (i - 16);
|
|
} else {
|
|
this._low |= 1 << i;
|
|
}
|
|
}
|
|
}
|
|
|
|
return this
|
|
};
|
|
|
|
/**
|
|
* Negate the current _UINT32_
|
|
* @method negate
|
|
* @return ThisExpression
|
|
*/
|
|
UINT32.prototype.negate = function () {
|
|
var v = ( ~this._low & 0xFFFF ) + 1;
|
|
this._low = v & 0xFFFF;
|
|
this._high = (~this._high + (v >>> 16)) & 0xFFFF;
|
|
|
|
return this
|
|
};
|
|
|
|
/**
|
|
* Equals
|
|
* @method eq
|
|
* @param {Object} other UINT32
|
|
* @return {Boolean}
|
|
*/
|
|
UINT32.prototype.equals = UINT32.prototype.eq = function (other) {
|
|
return (this._low == other._low) && (this._high == other._high)
|
|
};
|
|
|
|
/**
|
|
* Greater than (strict)
|
|
* @method gt
|
|
* @param {Object} other UINT32
|
|
* @return {Boolean}
|
|
*/
|
|
UINT32.prototype.greaterThan = UINT32.prototype.gt = function (other) {
|
|
if (this._high > other._high) return true
|
|
if (this._high < other._high) return false
|
|
return this._low > other._low
|
|
};
|
|
|
|
/**
|
|
* Less than (strict)
|
|
* @method lt
|
|
* @param {Object} other UINT32
|
|
* @return {Boolean}
|
|
*/
|
|
UINT32.prototype.lessThan = UINT32.prototype.lt = function (other) {
|
|
if (this._high < other._high) return true
|
|
if (this._high > other._high) return false
|
|
return this._low < other._low
|
|
};
|
|
|
|
/**
|
|
* Bitwise OR
|
|
* @method or
|
|
* @param {Object} other UINT32
|
|
* @return ThisExpression
|
|
*/
|
|
UINT32.prototype.or = function (other) {
|
|
this._low |= other._low;
|
|
this._high |= other._high;
|
|
|
|
return this
|
|
};
|
|
|
|
/**
|
|
* Bitwise AND
|
|
* @method and
|
|
* @param {Object} other UINT32
|
|
* @return ThisExpression
|
|
*/
|
|
UINT32.prototype.and = function (other) {
|
|
this._low &= other._low;
|
|
this._high &= other._high;
|
|
|
|
return this
|
|
};
|
|
|
|
/**
|
|
* Bitwise NOT
|
|
* @method not
|
|
* @return ThisExpression
|
|
*/
|
|
UINT32.prototype.not = function() {
|
|
this._low = ~this._low & 0xFFFF;
|
|
this._high = ~this._high & 0xFFFF;
|
|
|
|
return this
|
|
};
|
|
|
|
/**
|
|
* Bitwise XOR
|
|
* @method xor
|
|
* @param {Object} other UINT32
|
|
* @return ThisExpression
|
|
*/
|
|
UINT32.prototype.xor = function (other) {
|
|
this._low ^= other._low;
|
|
this._high ^= other._high;
|
|
|
|
return this
|
|
};
|
|
|
|
/**
|
|
* Bitwise shift right
|
|
* @method shiftRight
|
|
* @param {Number} number of bits to shift
|
|
* @return ThisExpression
|
|
*/
|
|
UINT32.prototype.shiftRight = UINT32.prototype.shiftr = function (n) {
|
|
if (n > 16) {
|
|
this._low = this._high >> (n - 16);
|
|
this._high = 0;
|
|
} else if (n == 16) {
|
|
this._low = this._high;
|
|
this._high = 0;
|
|
} else {
|
|
this._low = (this._low >> n) | ( (this._high << (16-n)) & 0xFFFF );
|
|
this._high >>= n;
|
|
}
|
|
|
|
return this
|
|
};
|
|
|
|
/**
|
|
* Bitwise shift left
|
|
* @method shiftLeft
|
|
* @param {Number} number of bits to shift
|
|
* @param {Boolean} allow overflow
|
|
* @return ThisExpression
|
|
*/
|
|
UINT32.prototype.shiftLeft = UINT32.prototype.shiftl = function (n, allowOverflow) {
|
|
if (n > 16) {
|
|
this._high = this._low << (n - 16);
|
|
this._low = 0;
|
|
if (!allowOverflow) {
|
|
this._high &= 0xFFFF;
|
|
}
|
|
} else if (n == 16) {
|
|
this._high = this._low;
|
|
this._low = 0;
|
|
} else {
|
|
this._high = (this._high << n) | (this._low >> (16-n));
|
|
this._low = (this._low << n) & 0xFFFF;
|
|
if (!allowOverflow) {
|
|
// Overflow only allowed on the high bits...
|
|
this._high &= 0xFFFF;
|
|
}
|
|
}
|
|
|
|
return this
|
|
};
|
|
|
|
/**
|
|
* Bitwise rotate left
|
|
* @method rotl
|
|
* @param {Number} number of bits to rotate
|
|
* @return ThisExpression
|
|
*/
|
|
UINT32.prototype.rotateLeft = UINT32.prototype.rotl = function (n) {
|
|
var v = (this._high << 16) | this._low;
|
|
v = (v << n) | (v >>> (32 - n));
|
|
this._low = v & 0xFFFF;
|
|
this._high = v >>> 16;
|
|
|
|
return this
|
|
};
|
|
|
|
/**
|
|
* Bitwise rotate right
|
|
* @method rotr
|
|
* @param {Number} number of bits to rotate
|
|
* @return ThisExpression
|
|
*/
|
|
UINT32.prototype.rotateRight = UINT32.prototype.rotr = function (n) {
|
|
var v = (this._high << 16) | this._low;
|
|
v = (v >>> n) | (v << (32 - n));
|
|
this._low = v & 0xFFFF;
|
|
this._high = v >>> 16;
|
|
|
|
return this
|
|
};
|
|
|
|
/**
|
|
* Clone the current _UINT32_
|
|
* @method clone
|
|
* @return {Object} cloned UINT32
|
|
*/
|
|
UINT32.prototype.clone = function () {
|
|
return new UINT32(this._low, this._high)
|
|
};
|
|
|
|
if (module.exports) {
|
|
// Node.js
|
|
module.exports = UINT32;
|
|
} else {
|
|
// Browser
|
|
root['UINT32'] = UINT32;
|
|
}
|
|
|
|
})(commonjsGlobal);
|
|
});
|
|
|
|
/**
|
|
C-like unsigned 64 bits integers in Javascript
|
|
Copyright (C) 2013, Pierre Curto
|
|
MIT license
|
|
*/
|
|
|
|
var uint64 = createCommonjsModule(function (module) {
|
|
(function (root) {
|
|
|
|
// Local cache for typical radices
|
|
var radixPowerCache = {
|
|
16: UINT64( Math.pow(16, 5) )
|
|
, 10: UINT64( Math.pow(10, 5) )
|
|
, 2: UINT64( Math.pow(2, 5) )
|
|
};
|
|
var radixCache = {
|
|
16: UINT64(16)
|
|
, 10: UINT64(10)
|
|
, 2: UINT64(2)
|
|
};
|
|
|
|
/**
|
|
* Represents an unsigned 64 bits integer
|
|
* @constructor
|
|
* @param {Number} first low bits (8)
|
|
* @param {Number} second low bits (8)
|
|
* @param {Number} first high bits (8)
|
|
* @param {Number} second high bits (8)
|
|
* or
|
|
* @param {Number} low bits (32)
|
|
* @param {Number} high bits (32)
|
|
* or
|
|
* @param {String|Number} integer as a string | integer as a number
|
|
* @param {Number|Undefined} radix (optional, default=10)
|
|
* @return
|
|
*/
|
|
function UINT64 (a00, a16, a32, a48) {
|
|
if ( !(this instanceof UINT64) )
|
|
return new UINT64(a00, a16, a32, a48)
|
|
|
|
this.remainder = null;
|
|
if (typeof a00 == 'string')
|
|
return fromString.call(this, a00, a16)
|
|
|
|
if (typeof a16 == 'undefined')
|
|
return fromNumber.call(this, a00)
|
|
|
|
fromBits.apply(this, arguments);
|
|
}
|
|
|
|
/**
|
|
* Set the current _UINT64_ object with its low and high bits
|
|
* @method fromBits
|
|
* @param {Number} first low bits (8)
|
|
* @param {Number} second low bits (8)
|
|
* @param {Number} first high bits (8)
|
|
* @param {Number} second high bits (8)
|
|
* or
|
|
* @param {Number} low bits (32)
|
|
* @param {Number} high bits (32)
|
|
* @return ThisExpression
|
|
*/
|
|
function fromBits (a00, a16, a32, a48) {
|
|
if (typeof a32 == 'undefined') {
|
|
this._a00 = a00 & 0xFFFF;
|
|
this._a16 = a00 >>> 16;
|
|
this._a32 = a16 & 0xFFFF;
|
|
this._a48 = a16 >>> 16;
|
|
return this
|
|
}
|
|
|
|
this._a00 = a00 | 0;
|
|
this._a16 = a16 | 0;
|
|
this._a32 = a32 | 0;
|
|
this._a48 = a48 | 0;
|
|
|
|
return this
|
|
}
|
|
UINT64.prototype.fromBits = fromBits;
|
|
|
|
/**
|
|
* Set the current _UINT64_ object from a number
|
|
* @method fromNumber
|
|
* @param {Number} number
|
|
* @return ThisExpression
|
|
*/
|
|
function fromNumber (value) {
|
|
this._a00 = value & 0xFFFF;
|
|
this._a16 = value >>> 16;
|
|
this._a32 = 0;
|
|
this._a48 = 0;
|
|
|
|
return this
|
|
}
|
|
UINT64.prototype.fromNumber = fromNumber;
|
|
|
|
/**
|
|
* Set the current _UINT64_ object from a string
|
|
* @method fromString
|
|
* @param {String} integer as a string
|
|
* @param {Number} radix (optional, default=10)
|
|
* @return ThisExpression
|
|
*/
|
|
function fromString (s, radix) {
|
|
radix = radix || 10;
|
|
|
|
this._a00 = 0;
|
|
this._a16 = 0;
|
|
this._a32 = 0;
|
|
this._a48 = 0;
|
|
|
|
/*
|
|
In Javascript, bitwise operators only operate on the first 32 bits
|
|
of a number, even though parseInt() encodes numbers with a 53 bits
|
|
mantissa.
|
|
Therefore UINT64(<Number>) can only work on 32 bits.
|
|
The radix maximum value is 36 (as per ECMA specs) (26 letters + 10 digits)
|
|
maximum input value is m = 32bits as 1 = 2^32 - 1
|
|
So the maximum substring length n is:
|
|
36^(n+1) - 1 = 2^32 - 1
|
|
36^(n+1) = 2^32
|
|
(n+1)ln(36) = 32ln(2)
|
|
n = 32ln(2)/ln(36) - 1
|
|
n = 5.189644915687692
|
|
n = 5
|
|
*/
|
|
var radixUint = radixPowerCache[radix] || new UINT64( Math.pow(radix, 5) );
|
|
|
|
for (var i = 0, len = s.length; i < len; i += 5) {
|
|
var size = Math.min(5, len - i);
|
|
var value = parseInt( s.slice(i, i + size), radix );
|
|
this.multiply(
|
|
size < 5
|
|
? new UINT64( Math.pow(radix, size) )
|
|
: radixUint
|
|
)
|
|
.add( new UINT64(value) );
|
|
}
|
|
|
|
return this
|
|
}
|
|
UINT64.prototype.fromString = fromString;
|
|
|
|
/**
|
|
* Convert this _UINT64_ to a number (last 32 bits are dropped)
|
|
* @method toNumber
|
|
* @return {Number} the converted UINT64
|
|
*/
|
|
UINT64.prototype.toNumber = function () {
|
|
return (this._a16 * 65536) + this._a00
|
|
};
|
|
|
|
/**
|
|
* Convert this _UINT64_ to a string
|
|
* @method toString
|
|
* @param {Number} radix (optional, default=10)
|
|
* @return {String} the converted UINT64
|
|
*/
|
|
UINT64.prototype.toString = function (radix) {
|
|
radix = radix || 10;
|
|
var radixUint = radixCache[radix] || new UINT64(radix);
|
|
|
|
if ( !this.gt(radixUint) ) return this.toNumber().toString(radix)
|
|
|
|
var self = this.clone();
|
|
var res = new Array(64);
|
|
for (var i = 63; i >= 0; i--) {
|
|
self.div(radixUint);
|
|
res[i] = self.remainder.toNumber().toString(radix);
|
|
if ( !self.gt(radixUint) ) break
|
|
}
|
|
res[i-1] = self.toNumber().toString(radix);
|
|
|
|
return res.join('')
|
|
};
|
|
|
|
/**
|
|
* Add two _UINT64_. The current _UINT64_ stores the result
|
|
* @method add
|
|
* @param {Object} other UINT64
|
|
* @return ThisExpression
|
|
*/
|
|
UINT64.prototype.add = function (other) {
|
|
var a00 = this._a00 + other._a00;
|
|
|
|
var a16 = a00 >>> 16;
|
|
a16 += this._a16 + other._a16;
|
|
|
|
var a32 = a16 >>> 16;
|
|
a32 += this._a32 + other._a32;
|
|
|
|
var a48 = a32 >>> 16;
|
|
a48 += this._a48 + other._a48;
|
|
|
|
this._a00 = a00 & 0xFFFF;
|
|
this._a16 = a16 & 0xFFFF;
|
|
this._a32 = a32 & 0xFFFF;
|
|
this._a48 = a48 & 0xFFFF;
|
|
|
|
return this
|
|
};
|
|
|
|
/**
|
|
* Subtract two _UINT64_. The current _UINT64_ stores the result
|
|
* @method subtract
|
|
* @param {Object} other UINT64
|
|
* @return ThisExpression
|
|
*/
|
|
UINT64.prototype.subtract = function (other) {
|
|
return this.add( other.clone().negate() )
|
|
};
|
|
|
|
/**
|
|
* Multiply two _UINT64_. The current _UINT64_ stores the result
|
|
* @method multiply
|
|
* @param {Object} other UINT64
|
|
* @return ThisExpression
|
|
*/
|
|
UINT64.prototype.multiply = function (other) {
|
|
/*
|
|
a = a00 + a16 + a32 + a48
|
|
b = b00 + b16 + b32 + b48
|
|
a*b = (a00 + a16 + a32 + a48)(b00 + b16 + b32 + b48)
|
|
= a00b00 + a00b16 + a00b32 + a00b48
|
|
+ a16b00 + a16b16 + a16b32 + a16b48
|
|
+ a32b00 + a32b16 + a32b32 + a32b48
|
|
+ a48b00 + a48b16 + a48b32 + a48b48
|
|
|
|
a16b48, a32b32, a48b16, a48b32 and a48b48 overflow the 64 bits
|
|
so it comes down to:
|
|
a*b = a00b00 + a00b16 + a00b32 + a00b48
|
|
+ a16b00 + a16b16 + a16b32
|
|
+ a32b00 + a32b16
|
|
+ a48b00
|
|
= a00b00
|
|
+ a00b16 + a16b00
|
|
+ a00b32 + a16b16 + a32b00
|
|
+ a00b48 + a16b32 + a32b16 + a48b00
|
|
*/
|
|
var a00 = this._a00;
|
|
var a16 = this._a16;
|
|
var a32 = this._a32;
|
|
var a48 = this._a48;
|
|
var b00 = other._a00;
|
|
var b16 = other._a16;
|
|
var b32 = other._a32;
|
|
var b48 = other._a48;
|
|
|
|
var c00 = a00 * b00;
|
|
|
|
var c16 = c00 >>> 16;
|
|
c16 += a00 * b16;
|
|
var c32 = c16 >>> 16;
|
|
c16 &= 0xFFFF;
|
|
c16 += a16 * b00;
|
|
|
|
c32 += c16 >>> 16;
|
|
c32 += a00 * b32;
|
|
var c48 = c32 >>> 16;
|
|
c32 &= 0xFFFF;
|
|
c32 += a16 * b16;
|
|
c48 += c32 >>> 16;
|
|
c32 &= 0xFFFF;
|
|
c32 += a32 * b00;
|
|
|
|
c48 += c32 >>> 16;
|
|
c48 += a00 * b48;
|
|
c48 &= 0xFFFF;
|
|
c48 += a16 * b32;
|
|
c48 &= 0xFFFF;
|
|
c48 += a32 * b16;
|
|
c48 &= 0xFFFF;
|
|
c48 += a48 * b00;
|
|
|
|
this._a00 = c00 & 0xFFFF;
|
|
this._a16 = c16 & 0xFFFF;
|
|
this._a32 = c32 & 0xFFFF;
|
|
this._a48 = c48 & 0xFFFF;
|
|
|
|
return this
|
|
};
|
|
|
|
/**
|
|
* Divide two _UINT64_. The current _UINT64_ stores the result.
|
|
* The remainder is made available as the _remainder_ property on
|
|
* the _UINT64_ object. It can be null, meaning there are no remainder.
|
|
* @method div
|
|
* @param {Object} other UINT64
|
|
* @return ThisExpression
|
|
*/
|
|
UINT64.prototype.div = function (other) {
|
|
if ( (other._a16 == 0) && (other._a32 == 0) && (other._a48 == 0) ) {
|
|
if (other._a00 == 0) throw Error('division by zero')
|
|
|
|
// other == 1: this
|
|
if (other._a00 == 1) {
|
|
this.remainder = new UINT64(0);
|
|
return this
|
|
}
|
|
}
|
|
|
|
// other > this: 0
|
|
if ( other.gt(this) ) {
|
|
this.remainder = this.clone();
|
|
this._a00 = 0;
|
|
this._a16 = 0;
|
|
this._a32 = 0;
|
|
this._a48 = 0;
|
|
return this
|
|
}
|
|
// other == this: 1
|
|
if ( this.eq(other) ) {
|
|
this.remainder = new UINT64(0);
|
|
this._a00 = 1;
|
|
this._a16 = 0;
|
|
this._a32 = 0;
|
|
this._a48 = 0;
|
|
return this
|
|
}
|
|
|
|
// Shift the divisor left until it is higher than the dividend
|
|
var _other = other.clone();
|
|
var i = -1;
|
|
while ( !this.lt(_other) ) {
|
|
// High bit can overflow the default 16bits
|
|
// Its ok since we right shift after this loop
|
|
// The overflown bit must be kept though
|
|
_other.shiftLeft(1, true);
|
|
i++;
|
|
}
|
|
|
|
// Set the remainder
|
|
this.remainder = this.clone();
|
|
// Initialize the current result to 0
|
|
this._a00 = 0;
|
|
this._a16 = 0;
|
|
this._a32 = 0;
|
|
this._a48 = 0;
|
|
for (; i >= 0; i--) {
|
|
_other.shiftRight(1);
|
|
// If shifted divisor is smaller than the dividend
|
|
// then subtract it from the dividend
|
|
if ( !this.remainder.lt(_other) ) {
|
|
this.remainder.subtract(_other);
|
|
// Update the current result
|
|
if (i >= 48) {
|
|
this._a48 |= 1 << (i - 48);
|
|
} else if (i >= 32) {
|
|
this._a32 |= 1 << (i - 32);
|
|
} else if (i >= 16) {
|
|
this._a16 |= 1 << (i - 16);
|
|
} else {
|
|
this._a00 |= 1 << i;
|
|
}
|
|
}
|
|
}
|
|
|
|
return this
|
|
};
|
|
|
|
/**
|
|
* Negate the current _UINT64_
|
|
* @method negate
|
|
* @return ThisExpression
|
|
*/
|
|
UINT64.prototype.negate = function () {
|
|
var v = ( ~this._a00 & 0xFFFF ) + 1;
|
|
this._a00 = v & 0xFFFF;
|
|
v = (~this._a16 & 0xFFFF) + (v >>> 16);
|
|
this._a16 = v & 0xFFFF;
|
|
v = (~this._a32 & 0xFFFF) + (v >>> 16);
|
|
this._a32 = v & 0xFFFF;
|
|
this._a48 = (~this._a48 + (v >>> 16)) & 0xFFFF;
|
|
|
|
return this
|
|
};
|
|
|
|
/**
|
|
|
|
* @method eq
|
|
* @param {Object} other UINT64
|
|
* @return {Boolean}
|
|
*/
|
|
UINT64.prototype.equals = UINT64.prototype.eq = function (other) {
|
|
return (this._a48 == other._a48) && (this._a00 == other._a00)
|
|
&& (this._a32 == other._a32) && (this._a16 == other._a16)
|
|
};
|
|
|
|
/**
|
|
* Greater than (strict)
|
|
* @method gt
|
|
* @param {Object} other UINT64
|
|
* @return {Boolean}
|
|
*/
|
|
UINT64.prototype.greaterThan = UINT64.prototype.gt = function (other) {
|
|
if (this._a48 > other._a48) return true
|
|
if (this._a48 < other._a48) return false
|
|
if (this._a32 > other._a32) return true
|
|
if (this._a32 < other._a32) return false
|
|
if (this._a16 > other._a16) return true
|
|
if (this._a16 < other._a16) return false
|
|
return this._a00 > other._a00
|
|
};
|
|
|
|
/**
|
|
* Less than (strict)
|
|
* @method lt
|
|
* @param {Object} other UINT64
|
|
* @return {Boolean}
|
|
*/
|
|
UINT64.prototype.lessThan = UINT64.prototype.lt = function (other) {
|
|
if (this._a48 < other._a48) return true
|
|
if (this._a48 > other._a48) return false
|
|
if (this._a32 < other._a32) return true
|
|
if (this._a32 > other._a32) return false
|
|
if (this._a16 < other._a16) return true
|
|
if (this._a16 > other._a16) return false
|
|
return this._a00 < other._a00
|
|
};
|
|
|
|
/**
|
|
* Bitwise OR
|
|
* @method or
|
|
* @param {Object} other UINT64
|
|
* @return ThisExpression
|
|
*/
|
|
UINT64.prototype.or = function (other) {
|
|
this._a00 |= other._a00;
|
|
this._a16 |= other._a16;
|
|
this._a32 |= other._a32;
|
|
this._a48 |= other._a48;
|
|
|
|
return this
|
|
};
|
|
|
|
/**
|
|
* Bitwise AND
|
|
* @method and
|
|
* @param {Object} other UINT64
|
|
* @return ThisExpression
|
|
*/
|
|
UINT64.prototype.and = function (other) {
|
|
this._a00 &= other._a00;
|
|
this._a16 &= other._a16;
|
|
this._a32 &= other._a32;
|
|
this._a48 &= other._a48;
|
|
|
|
return this
|
|
};
|
|
|
|
/**
|
|
* Bitwise XOR
|
|
* @method xor
|
|
* @param {Object} other UINT64
|
|
* @return ThisExpression
|
|
*/
|
|
UINT64.prototype.xor = function (other) {
|
|
this._a00 ^= other._a00;
|
|
this._a16 ^= other._a16;
|
|
this._a32 ^= other._a32;
|
|
this._a48 ^= other._a48;
|
|
|
|
return this
|
|
};
|
|
|
|
/**
|
|
* Bitwise NOT
|
|
* @method not
|
|
* @return ThisExpression
|
|
*/
|
|
UINT64.prototype.not = function() {
|
|
this._a00 = ~this._a00 & 0xFFFF;
|
|
this._a16 = ~this._a16 & 0xFFFF;
|
|
this._a32 = ~this._a32 & 0xFFFF;
|
|
this._a48 = ~this._a48 & 0xFFFF;
|
|
|
|
return this
|
|
};
|
|
|
|
/**
|
|
* Bitwise shift right
|
|
* @method shiftRight
|
|
* @param {Number} number of bits to shift
|
|
* @return ThisExpression
|
|
*/
|
|
UINT64.prototype.shiftRight = UINT64.prototype.shiftr = function (n) {
|
|
n %= 64;
|
|
if (n >= 48) {
|
|
this._a00 = this._a48 >> (n - 48);
|
|
this._a16 = 0;
|
|
this._a32 = 0;
|
|
this._a48 = 0;
|
|
} else if (n >= 32) {
|
|
n -= 32;
|
|
this._a00 = ( (this._a32 >> n) | (this._a48 << (16-n)) ) & 0xFFFF;
|
|
this._a16 = (this._a48 >> n) & 0xFFFF;
|
|
this._a32 = 0;
|
|
this._a48 = 0;
|
|
} else if (n >= 16) {
|
|
n -= 16;
|
|
this._a00 = ( (this._a16 >> n) | (this._a32 << (16-n)) ) & 0xFFFF;
|
|
this._a16 = ( (this._a32 >> n) | (this._a48 << (16-n)) ) & 0xFFFF;
|
|
this._a32 = (this._a48 >> n) & 0xFFFF;
|
|
this._a48 = 0;
|
|
} else {
|
|
this._a00 = ( (this._a00 >> n) | (this._a16 << (16-n)) ) & 0xFFFF;
|
|
this._a16 = ( (this._a16 >> n) | (this._a32 << (16-n)) ) & 0xFFFF;
|
|
this._a32 = ( (this._a32 >> n) | (this._a48 << (16-n)) ) & 0xFFFF;
|
|
this._a48 = (this._a48 >> n) & 0xFFFF;
|
|
}
|
|
|
|
return this
|
|
};
|
|
|
|
/**
|
|
* Bitwise shift left
|
|
* @method shiftLeft
|
|
* @param {Number} number of bits to shift
|
|
* @param {Boolean} allow overflow
|
|
* @return ThisExpression
|
|
*/
|
|
UINT64.prototype.shiftLeft = UINT64.prototype.shiftl = function (n, allowOverflow) {
|
|
n %= 64;
|
|
if (n >= 48) {
|
|
this._a48 = this._a00 << (n - 48);
|
|
this._a32 = 0;
|
|
this._a16 = 0;
|
|
this._a00 = 0;
|
|
} else if (n >= 32) {
|
|
n -= 32;
|
|
this._a48 = (this._a16 << n) | (this._a00 >> (16-n));
|
|
this._a32 = (this._a00 << n) & 0xFFFF;
|
|
this._a16 = 0;
|
|
this._a00 = 0;
|
|
} else if (n >= 16) {
|
|
n -= 16;
|
|
this._a48 = (this._a32 << n) | (this._a16 >> (16-n));
|
|
this._a32 = ( (this._a16 << n) | (this._a00 >> (16-n)) ) & 0xFFFF;
|
|
this._a16 = (this._a00 << n) & 0xFFFF;
|
|
this._a00 = 0;
|
|
} else {
|
|
this._a48 = (this._a48 << n) | (this._a32 >> (16-n));
|
|
this._a32 = ( (this._a32 << n) | (this._a16 >> (16-n)) ) & 0xFFFF;
|
|
this._a16 = ( (this._a16 << n) | (this._a00 >> (16-n)) ) & 0xFFFF;
|
|
this._a00 = (this._a00 << n) & 0xFFFF;
|
|
}
|
|
if (!allowOverflow) {
|
|
this._a48 &= 0xFFFF;
|
|
}
|
|
|
|
return this
|
|
};
|
|
|
|
/**
|
|
* Bitwise rotate left
|
|
* @method rotl
|
|
* @param {Number} number of bits to rotate
|
|
* @return ThisExpression
|
|
*/
|
|
UINT64.prototype.rotateLeft = UINT64.prototype.rotl = function (n) {
|
|
n %= 64;
|
|
if (n == 0) return this
|
|
if (n >= 32) {
|
|
// A.B.C.D
|
|
// B.C.D.A rotl(16)
|
|
// C.D.A.B rotl(32)
|
|
var v = this._a00;
|
|
this._a00 = this._a32;
|
|
this._a32 = v;
|
|
v = this._a48;
|
|
this._a48 = this._a16;
|
|
this._a16 = v;
|
|
if (n == 32) return this
|
|
n -= 32;
|
|
}
|
|
|
|
var high = (this._a48 << 16) | this._a32;
|
|
var low = (this._a16 << 16) | this._a00;
|
|
|
|
var _high = (high << n) | (low >>> (32 - n));
|
|
var _low = (low << n) | (high >>> (32 - n));
|
|
|
|
this._a00 = _low & 0xFFFF;
|
|
this._a16 = _low >>> 16;
|
|
this._a32 = _high & 0xFFFF;
|
|
this._a48 = _high >>> 16;
|
|
|
|
return this
|
|
};
|
|
|
|
/**
|
|
* Bitwise rotate right
|
|
* @method rotr
|
|
* @param {Number} number of bits to rotate
|
|
* @return ThisExpression
|
|
*/
|
|
UINT64.prototype.rotateRight = UINT64.prototype.rotr = function (n) {
|
|
n %= 64;
|
|
if (n == 0) return this
|
|
if (n >= 32) {
|
|
// A.B.C.D
|
|
// D.A.B.C rotr(16)
|
|
// C.D.A.B rotr(32)
|
|
var v = this._a00;
|
|
this._a00 = this._a32;
|
|
this._a32 = v;
|
|
v = this._a48;
|
|
this._a48 = this._a16;
|
|
this._a16 = v;
|
|
if (n == 32) return this
|
|
n -= 32;
|
|
}
|
|
|
|
var high = (this._a48 << 16) | this._a32;
|
|
var low = (this._a16 << 16) | this._a00;
|
|
|
|
var _high = (high >>> n) | (low << (32 - n));
|
|
var _low = (low >>> n) | (high << (32 - n));
|
|
|
|
this._a00 = _low & 0xFFFF;
|
|
this._a16 = _low >>> 16;
|
|
this._a32 = _high & 0xFFFF;
|
|
this._a48 = _high >>> 16;
|
|
|
|
return this
|
|
};
|
|
|
|
/**
|
|
* Clone the current _UINT64_
|
|
* @method clone
|
|
* @return {Object} cloned UINT64
|
|
*/
|
|
UINT64.prototype.clone = function () {
|
|
return new UINT64(this._a00, this._a16, this._a32, this._a48)
|
|
};
|
|
|
|
if (module.exports) {
|
|
// Node.js
|
|
module.exports = UINT64;
|
|
} else {
|
|
// Browser
|
|
root['UINT64'] = UINT64;
|
|
}
|
|
|
|
})(commonjsGlobal);
|
|
});
|
|
|
|
var UINT32 = uint32;
|
|
var UINT64 = uint64;
|
|
|
|
var cuint = {
|
|
UINT32: UINT32,
|
|
UINT64: UINT64
|
|
};
|
|
|
|
/**
|
|
* Convert string to proper UTF-8 array
|
|
*/
|
|
function toUTF8Array(str) {
|
|
const len = str.length;
|
|
const utf8 = [];
|
|
for (let i = 0; i < len; i++) {
|
|
let c = str.charCodeAt(i);
|
|
if (c < 0x80) {
|
|
utf8.push(c);
|
|
}
|
|
else if (c < 0x800) {
|
|
utf8.push(0xc0 | (c >> 6), 0x80 | (c & 0x3f));
|
|
}
|
|
else if (c < 0xd800 || c >= 0xe000) {
|
|
utf8.push(0xe0 | (c >> 12), 0x80 | ((c >> 6) & 0x3f), 0x80 | (c & 0x3f));
|
|
}
|
|
else {
|
|
// surrogate pair
|
|
i++;
|
|
// UTF-16 encodes 0x10000-0x10FFFF by
|
|
// subtracting 0x10000 and splitting the
|
|
// 20 bits of 0x0-0xFFFFF into two halves
|
|
c = 0x10000 + (((c & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff));
|
|
utf8.push(0xf0 | (c >> 18), 0x80 | ((c >> 12) & 0x3f), 0x80 | ((c >> 6) & 0x3f), 0x80 | (c & 0x3f));
|
|
}
|
|
}
|
|
return new Uint8Array(utf8);
|
|
}
|
|
var _default$4 = toUTF8Array;
|
|
|
|
|
|
var toUtf8Array = /*#__PURE__*/Object.defineProperty({
|
|
default: _default$4
|
|
}, '__esModule', {value: true});
|
|
|
|
function default_1(input) {
|
|
if (input instanceof ArrayBuffer) {
|
|
return new Uint8Array(input);
|
|
}
|
|
else if (typeof input === "string") {
|
|
return toUtf8Array.default(input);
|
|
}
|
|
return input;
|
|
}
|
|
var _default$3 = default_1;
|
|
|
|
|
|
var toBuffer = /*#__PURE__*/Object.defineProperty({
|
|
default: _default$3
|
|
}, '__esModule', {value: true});
|
|
|
|
function isClonable(obj) {
|
|
return obj.hasOwnProperty("clone");
|
|
}
|
|
class XXHash extends cuint.UINT64 {
|
|
/**
|
|
* @param seed unsigned 32-bit integer
|
|
*/
|
|
constructor(uintConstructor) {
|
|
super(NaN);
|
|
this.uintConstructor = uintConstructor;
|
|
}
|
|
get vn() {
|
|
return [this.v1, this.v2, this.v3, this.v4];
|
|
}
|
|
getIncrement() {
|
|
return this.size / 4;
|
|
}
|
|
reseed(seed) {
|
|
this.seed = isClonable(seed)
|
|
? seed.clone()
|
|
: this.uintConstructor(seed);
|
|
this.v1 = this.seed
|
|
.clone()
|
|
.add(this.primes.P1)
|
|
.add(this.primes.P2);
|
|
this.v2 = this.seed.clone().add(this.primes.P2);
|
|
this.v3 = this.seed.clone();
|
|
this.v4 = this.seed.clone().subtract(this.primes.P1);
|
|
this.totalLen = 0;
|
|
this.memsize = 0;
|
|
this.memory = undefined;
|
|
}
|
|
/**
|
|
* Finalize the hash computation. The hash instance is ready for reuse for the given seed
|
|
*/
|
|
digest() {
|
|
const m = this.memory;
|
|
if (m === undefined)
|
|
throw new ReferenceError("Hash Memory not set, .update() has to be called before digest()");
|
|
const { P5 } = this.primes;
|
|
const h = this.totalLen >= this.size
|
|
? this.v1
|
|
.rotl(1)
|
|
.add(this.v2.clone().rotl(7))
|
|
.add(this.v3.clone().rotl(12))
|
|
.add(this.v4.clone().rotl(18))
|
|
: this.seed.clone().add(P5);
|
|
const hash = this.digestCore(m, h);
|
|
// Reset the state
|
|
this.reseed(this.seed);
|
|
return hash;
|
|
}
|
|
/**
|
|
* Add data to be computed for the hash
|
|
*/
|
|
update(v) {
|
|
const input = toBuffer.default(v);
|
|
const len = input.length;
|
|
if (len === 0)
|
|
return this;
|
|
this.totalLen += len;
|
|
const memory = this.memsize === 0
|
|
? input instanceof Buffer
|
|
? new Buffer(this.size)
|
|
: new Uint8Array(this.size)
|
|
: this.memory;
|
|
if (this.memsize + len < this.size) {
|
|
// fill in tmp buffer
|
|
// XXH64_memcpy(memory + this.memsize, input, len)
|
|
if (input instanceof Buffer) {
|
|
input.copy(memory, this.memsize, 0, len);
|
|
}
|
|
else {
|
|
memory.set(input.subarray(0, len), this.memsize);
|
|
}
|
|
this.memsize += len;
|
|
this.memory = memory;
|
|
return this;
|
|
}
|
|
let p = 0;
|
|
const bEnd = p + len;
|
|
const inc = this.getIncrement();
|
|
if (this.memsize > 0) {
|
|
// some data left from previous update
|
|
// XXH64_memcpy(memory + this.memsize, input, 16-this.memsize);
|
|
if (input instanceof Buffer) {
|
|
input.copy(memory, this.memsize, 0, this.size - this.memsize);
|
|
}
|
|
else {
|
|
memory.set(input.subarray(0, this.size - this.memsize), this.memsize);
|
|
}
|
|
let i = 0;
|
|
for (const v of this.vn) {
|
|
this.shiftUpdate(v, memory, i);
|
|
i += inc;
|
|
}
|
|
p += this.size - this.memsize;
|
|
this.memsize = 0;
|
|
}
|
|
if (p <= bEnd - this.size) {
|
|
const limit = bEnd - this.size;
|
|
do {
|
|
for (const v of this.vn) {
|
|
this.shiftUpdate(v, input, p);
|
|
p += inc;
|
|
}
|
|
} while (p <= limit);
|
|
}
|
|
if (p < bEnd) {
|
|
// XXH64_memcpy(memory, p, bEnd-p);
|
|
if (input instanceof Buffer) {
|
|
input.copy(memory, this.memsize, p, bEnd);
|
|
}
|
|
else {
|
|
memory.set(input.subarray(p, bEnd), this.memsize);
|
|
}
|
|
this.memsize = bEnd - p;
|
|
}
|
|
this.memory = memory;
|
|
return this;
|
|
}
|
|
}
|
|
var _default$2 = XXHash;
|
|
|
|
|
|
var xxhash = /*#__PURE__*/Object.defineProperty({
|
|
default: _default$2
|
|
}, '__esModule', {value: true});
|
|
|
|
class XXHash64 extends xxhash.default {
|
|
constructor(seed) {
|
|
super(cuint.UINT64);
|
|
this.size = 32;
|
|
this.primes = {
|
|
P1: this.uintConstructor("11400714785074694791"),
|
|
P2: this.uintConstructor("14029467366897019727"),
|
|
P3: this.uintConstructor("1609587929392839161"),
|
|
P4: this.uintConstructor("9650029242287828579"),
|
|
P5: this.uintConstructor("2870177450012600261")
|
|
};
|
|
this.reseed(seed);
|
|
}
|
|
static hash(seed, input) {
|
|
const instance = new this(seed);
|
|
if (input === undefined)
|
|
return instance;
|
|
return instance.update(input).digest();
|
|
}
|
|
shiftDigest(h, v) {
|
|
h.xor(v
|
|
.multiply(this.primes.P2)
|
|
.rotl(31)
|
|
.multiply(this.primes.P1));
|
|
h.multiply(this.primes.P1).add(this.primes.P4);
|
|
}
|
|
shiftUpdate(v, m, p) {
|
|
v.add(this.uintConstructor((m[p + 1] << 8) | m[p], (m[p + 3] << 8) | m[p + 2], (m[p + 5] << 8) | m[p + 4], (m[p + 7] << 8) | m[p + 6]).multiply(this.primes.P2))
|
|
.rotl(31)
|
|
.multiply(this.primes.P1);
|
|
}
|
|
digestCore(m, h) {
|
|
const { P1, P2, P3, P4, P5 } = this.primes;
|
|
if (this.totalLen >= this.size) {
|
|
for (const v of this.vn) {
|
|
this.shiftDigest(h, v);
|
|
}
|
|
}
|
|
const u = this.uintConstructor(NaN);
|
|
h.add(u.fromNumber(this.totalLen));
|
|
let i = 0;
|
|
const inc = this.getIncrement();
|
|
while (i <= this.memsize - inc) {
|
|
u.fromBits((m[i + 1] << 8) | m[i], (m[i + 3] << 8) | m[i + 2], (m[i + 5] << 8) | m[i + 4], (m[i + 7] << 8) | m[i + 6]);
|
|
u.multiply(P2)
|
|
.rotl(31)
|
|
.multiply(P1);
|
|
h.xor(u)
|
|
.rotl(27)
|
|
.multiply(P1)
|
|
.add(P4);
|
|
i += inc;
|
|
}
|
|
if (i + 4 <= this.memsize) {
|
|
u.fromBits((m[i + 1] << 8) | m[i], (m[i + 3] << 8) | m[i + 2], 0, 0);
|
|
h.xor(u.multiply(P1))
|
|
.rotl(23)
|
|
.multiply(P2)
|
|
.add(P3);
|
|
i += 4;
|
|
}
|
|
while (i < this.memsize) {
|
|
u.fromBits(m[i++], 0, 0, 0);
|
|
h.xor(u.multiply(P5))
|
|
.rotl(11)
|
|
.multiply(P1);
|
|
}
|
|
h.xor(h.clone().shiftRight(33)).multiply(P2);
|
|
h.xor(h.clone().shiftRight(29)).multiply(P3);
|
|
h.xor(h.clone().shiftRight(32));
|
|
return h;
|
|
}
|
|
}
|
|
var _default$1 = XXHash64;
|
|
|
|
|
|
var xxhash64 = /*#__PURE__*/Object.defineProperty({
|
|
default: _default$1
|
|
}, '__esModule', {value: true});
|
|
|
|
class XXHash32$1 extends xxhash.default {
|
|
constructor(seed) {
|
|
super(cuint.UINT32);
|
|
this.size = 16;
|
|
this.primes = {
|
|
P1: this.uintConstructor("2654435761"),
|
|
P2: this.uintConstructor("2246822519"),
|
|
P3: this.uintConstructor("3266489917"),
|
|
P4: this.uintConstructor("668265263"),
|
|
P5: this.uintConstructor("374761393")
|
|
};
|
|
this.reseed(seed);
|
|
}
|
|
static hash(seed, input) {
|
|
const instance = new this(seed);
|
|
if (input === undefined)
|
|
return instance;
|
|
return instance.update(input).digest();
|
|
}
|
|
/**
|
|
* Merged this sequence of method calls as it speeds up
|
|
the calculations by a factor of 2
|
|
*/
|
|
updateUint(uint, low, high) {
|
|
const { P1, P2 } = this.primes;
|
|
let b00 = P2._low;
|
|
let b16 = P2._high;
|
|
let c00 = low * b00;
|
|
let c16 = c00 >>> 16;
|
|
c16 += high * b00;
|
|
c16 &= 0xffff; // Not required but improves performance
|
|
c16 += low * b16;
|
|
let a00 = uint._low + (c00 & 0xffff);
|
|
let a16 = a00 >>> 16;
|
|
a16 += uint._high + (c16 & 0xffff);
|
|
let v = (a16 << 16) | (a00 & 0xffff);
|
|
v = (v << 13) | (v >>> 19);
|
|
a00 = v & 0xffff;
|
|
a16 = v >>> 16;
|
|
b00 = P1._low;
|
|
b16 = P1._high;
|
|
c00 = a00 * b00;
|
|
c16 = c00 >>> 16;
|
|
c16 += a16 * b00;
|
|
c16 &= 0xffff; // Not required but improves performance
|
|
c16 += a00 * b16;
|
|
uint._low = c00 & 0xffff;
|
|
uint._high = c16 & 0xffff;
|
|
}
|
|
shiftUpdate(v, m, p) {
|
|
this.updateUint(v, (m[p + 1] << 8) | m[p], (m[p + 3] << 8) | m[p + 2]);
|
|
}
|
|
digestCore(m, h) {
|
|
const { P1, P2, P3, P4, P5 } = this.primes;
|
|
const u = this.uintConstructor(NaN);
|
|
h.add(u.fromNumber(this.totalLen));
|
|
let i = 0;
|
|
const inc = this.getIncrement();
|
|
while (i <= this.memsize - inc) {
|
|
u.fromBits((m[i + 1] << 8) | m[i], (m[i + 3] << 8) | m[i + 2]);
|
|
h.add(u.multiply(P3))
|
|
.rotl(17)
|
|
.multiply(P4);
|
|
i += inc;
|
|
}
|
|
while (i < this.memsize) {
|
|
u.fromBits(m[i++], 0);
|
|
h.add(u.multiply(P5))
|
|
.rotl(11)
|
|
.multiply(P1);
|
|
}
|
|
h.xor(h.clone().shiftRight(15)).multiply(P2);
|
|
h.xor(h.clone().shiftRight(13)).multiply(P3);
|
|
h.xor(h.clone().shiftRight(16));
|
|
return h;
|
|
}
|
|
}
|
|
var _default = XXHash32$1;
|
|
|
|
|
|
var xxhash32 = /*#__PURE__*/Object.defineProperty({
|
|
default: _default
|
|
}, '__esModule', {value: true});
|
|
|
|
xxhash64.default;
|
|
|
|
var XXHash32 = xxhash32.default;
|
|
|
|
class LinkHashes {
|
|
constructor() {
|
|
this.linksInfo = {};
|
|
}
|
|
ensureHashGenerated(link, data) {
|
|
if (!this.linksInfo[link]) {
|
|
this.linksInfo[link] = XXHash32.hash(0, data).toNumber();
|
|
}
|
|
}
|
|
isSame(link, data) {
|
|
const fileHash = XXHash32.hash(0, data).toNumber();
|
|
return this.linksInfo[link] == fileHash;
|
|
}
|
|
}
|
|
const linkHashes = new LinkHashes();
|
|
|
|
function imageTagProcessor(app, mediaDir) {
|
|
function processImageTag(match, anchor, link) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
if (!isUrl(link)) {
|
|
return match;
|
|
}
|
|
try {
|
|
const fileData = yield downloadImage(link);
|
|
// when several images refer to the same file they can be partly
|
|
// failed to download because file already exists, so try to resuggest filename several times
|
|
let attempt = 0;
|
|
while (attempt < FILENAME_ATTEMPTS) {
|
|
try {
|
|
const { fileName, needWrite } = yield chooseFileName(app.vault.adapter, mediaDir, anchor, link, fileData);
|
|
if (needWrite && fileName) {
|
|
yield app.vault.createBinary(fileName, fileData);
|
|
}
|
|
if (fileName) {
|
|
return ``;
|
|
}
|
|
else {
|
|
return match;
|
|
}
|
|
}
|
|
catch (error) {
|
|
if (error.message === "File already exists.") {
|
|
attempt++;
|
|
}
|
|
else {
|
|
throw error;
|
|
}
|
|
}
|
|
}
|
|
return match;
|
|
}
|
|
catch (error) {
|
|
console.warn("Image processing failed: ", error);
|
|
return match;
|
|
}
|
|
});
|
|
}
|
|
return processImageTag;
|
|
}
|
|
function chooseFileName(adapter, dir, baseName, link, contentData) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
const fileExt = yield fileExtByContent(contentData);
|
|
if (!fileExt) {
|
|
return { fileName: "", needWrite: false };
|
|
}
|
|
// if there is no anchor try get file name from url
|
|
if (!baseName) {
|
|
const parsedUrl = new url_1.URL(link);
|
|
baseName = path__default['default'].basename(parsedUrl.pathname);
|
|
}
|
|
// if there is no part for file name from url use name template
|
|
if (!baseName) {
|
|
baseName = FILENAME_TEMPLATE;
|
|
}
|
|
// if filename already ends with correct extension, remove it to work with base name
|
|
if (baseName.endsWith(`.${fileExt}`)) {
|
|
baseName = baseName.slice(0, -1 * (fileExt.length + 1));
|
|
}
|
|
baseName = cleanFileName(baseName);
|
|
let fileName = "";
|
|
let needWrite = true;
|
|
let index = 0;
|
|
while (!fileName && index < MAX_FILENAME_INDEX) {
|
|
const suggestedName = index
|
|
? pathJoin(dir, `${baseName}-${index}.${fileExt}`)
|
|
: pathJoin(dir, `${baseName}.${fileExt}`);
|
|
if (yield adapter.exists(suggestedName, false)) {
|
|
linkHashes.ensureHashGenerated(link, contentData);
|
|
const fileData = yield adapter.readBinary(suggestedName);
|
|
if (linkHashes.isSame(link, fileData)) {
|
|
fileName = suggestedName;
|
|
needWrite = false;
|
|
}
|
|
}
|
|
else {
|
|
fileName = suggestedName;
|
|
}
|
|
index++;
|
|
}
|
|
if (!fileName) {
|
|
throw new Error("Failed to generate file name for media file.");
|
|
}
|
|
linkHashes.ensureHashGenerated(link, contentData);
|
|
return { fileName, needWrite };
|
|
});
|
|
}
|
|
|
|
// Queue that keep only unique values and counts attempts
|
|
class UniqueQueue {
|
|
constructor() {
|
|
this.queue = new Array();
|
|
}
|
|
push(value, attempts) {
|
|
if (attempts < 1) {
|
|
console.error("Triyng to enqueue item with attempts < 1");
|
|
return;
|
|
}
|
|
this.remove(value);
|
|
this.queue.push({ value, attempts });
|
|
}
|
|
remove(value) {
|
|
this.queue = this.queue.filter((item) => item.value !== value);
|
|
}
|
|
iterationQueue() {
|
|
const extractIteration = (prev, curr) => {
|
|
prev.iteration.push(curr.value);
|
|
if (curr.attempts > 1) {
|
|
prev.queue.push(curr.value, curr.attempts - 1);
|
|
}
|
|
return prev;
|
|
};
|
|
const { queue, iteration } = this.queue.reduce(extractIteration, {
|
|
queue: new UniqueQueue(),
|
|
iteration: [],
|
|
});
|
|
this.queue = queue.queue;
|
|
return iteration;
|
|
}
|
|
}
|
|
|
|
class LocalImagesPlugin extends obsidian.Plugin {
|
|
constructor() {
|
|
super(...arguments);
|
|
this.modifiedQueue = new UniqueQueue();
|
|
this.intervalId = null;
|
|
// using arrow syntax for callbacks to correctly pass this context
|
|
this.processActivePage = () => __awaiter(this, void 0, void 0, function* () {
|
|
const activeFile = this.app.workspace.getActiveFile();
|
|
yield this.proccessPage(activeFile);
|
|
});
|
|
this.processAllPages = () => __awaiter(this, void 0, void 0, function* () {
|
|
const files = this.app.vault.getMarkdownFiles();
|
|
const includeRegex = new RegExp(this.settings.include, "i");
|
|
const pagesCount = files.length;
|
|
const notice = this.settings.showNotifications
|
|
? new obsidian.Notice(`Local Images \nStart processing. Total ${pagesCount} pages. `, TIMEOUT_LIKE_INFINITY)
|
|
: null;
|
|
for (const [index, file] of files.entries()) {
|
|
if (file.path.match(includeRegex)) {
|
|
if (notice) {
|
|
// setMessage() is undeclared but factically existing, so ignore the TS error
|
|
// @ts-expect-error
|
|
notice.setMessage(`Local Images: Processing \n"${file.path}" \nPage ${index} of ${pagesCount}`);
|
|
}
|
|
yield this.proccessPage(file, true);
|
|
}
|
|
}
|
|
if (notice) {
|
|
// @ts-expect-error
|
|
notice.setMessage(`Local Images: ${pagesCount} pages were processed.`);
|
|
setTimeout(() => {
|
|
notice.hide();
|
|
}, NOTICE_TIMEOUT);
|
|
}
|
|
});
|
|
this.processModifiedQueue = () => __awaiter(this, void 0, void 0, function* () {
|
|
const iteration = this.modifiedQueue.iterationQueue();
|
|
for (const page of iteration) {
|
|
this.proccessPage(page);
|
|
}
|
|
});
|
|
}
|
|
proccessPage(file, silent = false) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
// const content = await this.app.vault.read(file);
|
|
const content = yield this.app.vault.cachedRead(file);
|
|
yield this.ensureFolderExists(this.settings.mediaRootDirectory);
|
|
const cleanedContent = this.settings.cleanContent
|
|
? cleanContent(content)
|
|
: content;
|
|
const fixedContent = yield replaceAsync(cleanedContent, EXTERNAL_MEDIA_LINK_PATTERN, imageTagProcessor(this.app, this.settings.mediaRootDirectory));
|
|
if (content != fixedContent) {
|
|
this.modifiedQueue.remove(file);
|
|
yield this.app.vault.modify(file, fixedContent);
|
|
if (!silent && this.settings.showNotifications) {
|
|
new obsidian.Notice(`Images for "${file.path}" were processed.`);
|
|
}
|
|
}
|
|
else {
|
|
if (!silent && this.settings.showNotifications) {
|
|
new obsidian.Notice(`Page "${file.path}" has been processed, but nothing was changed.`);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
onload() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
yield this.loadSettings();
|
|
this.addCommand({
|
|
id: "download-images",
|
|
name: "Download images locally",
|
|
callback: this.processActivePage,
|
|
});
|
|
this.addCommand({
|
|
id: "download-images-all",
|
|
name: "Download images locally for all your notes",
|
|
callback: this.processAllPages,
|
|
});
|
|
this.registerCodeMirror((cm) => {
|
|
// on("beforeChange") can not execute async function in event handler, so we use queue to pass modified pages to timeouted handler
|
|
cm.on("change", (instance, changeObj) => __awaiter(this, void 0, void 0, function* () {
|
|
if (changeObj.origin == "paste" &&
|
|
ANY_URL_PATTERN.test(changeObj.text)) {
|
|
this.enqueueActivePage();
|
|
}
|
|
}));
|
|
});
|
|
this.setupQueueInterval();
|
|
this.addSettingTab(new SettingTab(this.app, this));
|
|
});
|
|
}
|
|
setupQueueInterval() {
|
|
if (this.intervalId) {
|
|
const intervalId = this.intervalId;
|
|
this.intervalId = null;
|
|
window.clearInterval(intervalId);
|
|
}
|
|
if (this.settings.realTimeUpdate &&
|
|
this.settings.realTimeUpdateInterval > 0) {
|
|
this.intervalId = window.setInterval(this.processModifiedQueue, this.settings.realTimeUpdateInterval);
|
|
this.registerInterval(this.intervalId);
|
|
}
|
|
}
|
|
enqueueActivePage() {
|
|
const activeFile = this.app.workspace.getActiveFile();
|
|
this.modifiedQueue.push(activeFile, this.settings.realTimeAttemptsToProcess);
|
|
}
|
|
// It is good idea to create the plugin more verbose
|
|
displayError(error, file) {
|
|
if (file) {
|
|
new obsidian.Notice(`LocalImages: Error while handling file ${file.name}, ${error.toString()}`);
|
|
}
|
|
else {
|
|
new obsidian.Notice(error.toString());
|
|
}
|
|
console.error(`LocalImages: error: ${error}`);
|
|
}
|
|
onunload() { }
|
|
loadSettings() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
this.settings = Object.assign({}, DEFAULT_SETTINGS, yield this.loadData());
|
|
this.setupQueueInterval();
|
|
});
|
|
}
|
|
saveSettings() {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
try {
|
|
yield this.saveData(this.settings);
|
|
}
|
|
catch (error) {
|
|
this.displayError(error);
|
|
}
|
|
});
|
|
}
|
|
ensureFolderExists(folderPath) {
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
try {
|
|
yield this.app.vault.createFolder(folderPath);
|
|
}
|
|
catch (error) {
|
|
if (!error.message.contains("Folder already exists")) {
|
|
throw error;
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
class SettingTab extends obsidian.PluginSettingTab {
|
|
constructor(app, plugin) {
|
|
super(app, plugin);
|
|
this.plugin = plugin;
|
|
}
|
|
display() {
|
|
let { containerEl } = this;
|
|
containerEl.empty();
|
|
containerEl.createEl("h2", { text: "Local images" });
|
|
new obsidian.Setting(containerEl)
|
|
.setName("On paste processing")
|
|
.setDesc("Process active page if external link was pasted.")
|
|
.addToggle((toggle) => toggle
|
|
.setValue(this.plugin.settings.realTimeUpdate)
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
this.plugin.settings.realTimeUpdate = value;
|
|
yield this.plugin.saveSettings();
|
|
this.plugin.setupQueueInterval();
|
|
})));
|
|
new obsidian.Setting(containerEl)
|
|
.setName("On paste processing interval")
|
|
.setDesc("Interval in milliseconds for processing update.")
|
|
.setTooltip("I could not process content on the fly when it is pasted. So real processing implements periodically with the given here timeout.")
|
|
.addText((text) => text
|
|
.setValue(String(this.plugin.settings.realTimeUpdateInterval))
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
const numberValue = Number(value);
|
|
if (isNaN(numberValue) ||
|
|
!Number.isInteger(numberValue) ||
|
|
numberValue < 0) {
|
|
this.plugin.displayError("Realtime processing interval should be a positive integer number!");
|
|
return;
|
|
}
|
|
this.plugin.settings.realTimeUpdateInterval = numberValue;
|
|
yield this.plugin.saveSettings();
|
|
this.plugin.setupQueueInterval();
|
|
})));
|
|
new obsidian.Setting(containerEl)
|
|
.setName("Attempts to process")
|
|
.setDesc("Number of attempts to process content on paste. For me 3 attempts is enouth with 1 second update interval.")
|
|
.setTooltip("I could not find the way to access newly pasted content immediatily, after pasting, Plugin's API returns old text for a while. The workaround is to process page several times until content is changed.")
|
|
.addText((text) => text
|
|
.setValue(String(this.plugin.settings.realTimeAttemptsToProcess))
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
const numberValue = Number(value);
|
|
if (isNaN(numberValue) ||
|
|
!Number.isInteger(numberValue) ||
|
|
numberValue < 1 ||
|
|
numberValue > 100) {
|
|
this.plugin.displayError("Realtime processing interval should be a positive integer number greater than 1 and lower than 100!");
|
|
return;
|
|
}
|
|
this.plugin.settings.realTimeAttemptsToProcess = numberValue;
|
|
yield this.plugin.saveSettings();
|
|
})));
|
|
new obsidian.Setting(containerEl)
|
|
.setName("Clean content")
|
|
.setDesc("Clean malformed image tags before processing.")
|
|
.addToggle((toggle) => toggle
|
|
.setValue(this.plugin.settings.cleanContent)
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
this.plugin.settings.cleanContent = value;
|
|
yield this.plugin.saveSettings();
|
|
})));
|
|
new obsidian.Setting(containerEl)
|
|
.setName("Show notifications")
|
|
.setDesc("Show notifications when pages were processed.")
|
|
.addToggle((toggle) => toggle
|
|
.setValue(this.plugin.settings.showNotifications)
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
this.plugin.settings.showNotifications = value;
|
|
yield this.plugin.saveSettings();
|
|
})));
|
|
new obsidian.Setting(containerEl)
|
|
.setName("Include")
|
|
.setDesc("Include only files matching this regex pattern when running on all notes.")
|
|
.addText((text) => text.setValue(this.plugin.settings.include).onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
if (!safeRegex_1(value)) {
|
|
this.plugin.displayError("Unsafe regex! https://www.npmjs.com/package/safe-regex");
|
|
return;
|
|
}
|
|
this.plugin.settings.include = value;
|
|
yield this.plugin.saveSettings();
|
|
})));
|
|
new obsidian.Setting(containerEl)
|
|
.setName("Media folder")
|
|
.setDesc("Folder to keep all downloaded media files.")
|
|
.addText((text) => text
|
|
.setValue(this.plugin.settings.mediaRootDirectory)
|
|
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
|
|
this.plugin.settings.mediaRootDirectory = value;
|
|
yield this.plugin.saveSettings();
|
|
})));
|
|
}
|
|
}
|
|
|
|
module.exports = LocalImagesPlugin;
|
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIi4uL25vZGVfbW9kdWxlcy9zYWZlLXJlZ2V4L2xpYi9hbmFseXplci5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWdleHAtdHJlZS9kaXN0L2NvbXBhdC10cmFuc3BpbGVyL3RyYW5zZm9ybXMvY29tcGF0LWRvdGFsbC1zLXRyYW5zZm9ybS5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWdleHAtdHJlZS9kaXN0L2NvbXBhdC10cmFuc3BpbGVyL3RyYW5zZm9ybXMvY29tcGF0LW5hbWVkLWNhcHR1cmluZy1ncm91cHMtdHJhbnNmb3JtLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlZ2V4cC10cmVlL2Rpc3QvY29tcGF0LXRyYW5zcGlsZXIvdHJhbnNmb3Jtcy9jb21wYXQteC1mbGFnLXRyYW5zZm9ybS5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWdleHAtdHJlZS9kaXN0L2NvbXBhdC10cmFuc3BpbGVyL3RyYW5zZm9ybXMvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcmVnZXhwLXRyZWUvZGlzdC9nZW5lcmF0b3IvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcmVnZXhwLXRyZWUvZGlzdC9wYXJzZXIvdW5pY29kZS9wYXJzZXItdW5pY29kZS1wcm9wZXJ0aWVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlZ2V4cC10cmVlL2Rpc3QvcGFyc2VyL2dlbmVyYXRlZC9yZWdleHAtdHJlZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWdleHAtdHJlZS9kaXN0L3BhcnNlci9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWdleHAtdHJlZS9kaXN0L3RyYXZlcnNlL25vZGUtcGF0aC5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWdleHAtdHJlZS9kaXN0L3RyYXZlcnNlL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlZ2V4cC10cmVlL2Rpc3QvdHJhbnNmb3JtL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlZ2V4cC10cmVlL2Rpc3QvY29tcGF0LXRyYW5zcGlsZXIvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcmVnZXhwLXRyZWUvZGlzdC91dGlscy9jbG9uZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWdleHAtdHJlZS9kaXN0L29wdGltaXplci90cmFuc2Zvcm1zL2NoYXItc3Vycm9nYXRlLXBhaXItdG8tc2luZ2xlLXVuaWNvZGUtdHJhbnNmb3JtLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlZ2V4cC10cmVlL2Rpc3Qvb3B0aW1pemVyL3RyYW5zZm9ybXMvY2hhci1jb2RlLXRvLXNpbXBsZS1jaGFyLXRyYW5zZm9ybS5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWdleHAtdHJlZS9kaXN0L29wdGltaXplci90cmFuc2Zvcm1zL2NoYXItY2FzZS1pbnNlbnNpdGl2ZS1sb3dlcmNhc2UtdHJhbnNmb3JtLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlZ2V4cC10cmVlL2Rpc3Qvb3B0aW1pemVyL3RyYW5zZm9ybXMvY2hhci1jbGFzcy1yZW1vdmUtZHVwbGljYXRlcy10cmFuc2Zvcm0uanMiLCIuLi9ub2RlX21vZHVsZXMvcmVnZXhwLXRyZWUvZGlzdC90cmFuc2Zvcm0vdXRpbHMuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVnZXhwLXRyZWUvZGlzdC9vcHRpbWl6ZXIvdHJhbnNmb3Jtcy9xdWFudGlmaWVycy1tZXJnZS10cmFuc2Zvcm0uanMiLCIuLi9ub2RlX21vZHVsZXMvcmVnZXhwLXRyZWUvZGlzdC9vcHRpbWl6ZXIvdHJhbnNmb3Jtcy9xdWFudGlmaWVyLXJhbmdlLXRvLXN5bWJvbC10cmFuc2Zvcm0uanMiLCIuLi9ub2RlX21vZHVsZXMvcmVnZXhwLXRyZWUvZGlzdC9vcHRpbWl6ZXIvdHJhbnNmb3Jtcy9jaGFyLWNsYXNzLWNsYXNzcmFuZ2VzLXRvLWNoYXJzLXRyYW5zZm9ybS5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWdleHAtdHJlZS9kaXN0L29wdGltaXplci90cmFuc2Zvcm1zL2NoYXItY2xhc3MtdG8tbWV0YS10cmFuc2Zvcm0uanMiLCIuLi9ub2RlX21vZHVsZXMvcmVnZXhwLXRyZWUvZGlzdC9vcHRpbWl6ZXIvdHJhbnNmb3Jtcy9jaGFyLWNsYXNzLXRvLXNpbmdsZS1jaGFyLXRyYW5zZm9ybS5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWdleHAtdHJlZS9kaXN0L29wdGltaXplci90cmFuc2Zvcm1zL2NoYXItZXNjYXBlLXVuZXNjYXBlLXRyYW5zZm9ybS5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWdleHAtdHJlZS9kaXN0L29wdGltaXplci90cmFuc2Zvcm1zL2NoYXItY2xhc3MtY2xhc3NyYW5nZXMtbWVyZ2UtdHJhbnNmb3JtLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlZ2V4cC10cmVlL2Rpc3Qvb3B0aW1pemVyL3RyYW5zZm9ybXMvZGlzanVuY3Rpb24tcmVtb3ZlLWR1cGxpY2F0ZXMtdHJhbnNmb3JtLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlZ2V4cC10cmVlL2Rpc3Qvb3B0aW1pemVyL3RyYW5zZm9ybXMvZ3JvdXAtc2luZ2xlLWNoYXJzLXRvLWNoYXItY2xhc3MuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVnZXhwLXRyZWUvZGlzdC9vcHRpbWl6ZXIvdHJhbnNmb3Jtcy9yZW1vdmUtZW1wdHktZ3JvdXAtdHJhbnNmb3JtLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlZ2V4cC10cmVlL2Rpc3Qvb3B0aW1pemVyL3RyYW5zZm9ybXMvdW5ncm91cC10cmFuc2Zvcm0uanMiLCIuLi9ub2RlX21vZHVsZXMvcmVnZXhwLXRyZWUvZGlzdC9vcHRpbWl6ZXIvdHJhbnNmb3Jtcy9jb21iaW5lLXJlcGVhdGluZy1wYXR0ZXJucy10cmFuc2Zvcm0uanMiLCIuLi9ub2RlX21vZHVsZXMvcmVnZXhwLXRyZWUvZGlzdC9vcHRpbWl6ZXIvdHJhbnNmb3Jtcy9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWdleHAtdHJlZS9kaXN0L29wdGltaXplci9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWdleHAtdHJlZS9kaXN0L2ludGVycHJldGVyL2Zpbml0ZS1hdXRvbWF0b24vc3BlY2lhbC1zeW1ib2xzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlZ2V4cC10cmVlL2Rpc3QvaW50ZXJwcmV0ZXIvZmluaXRlLWF1dG9tYXRvbi9uZmEvbmZhLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlZ2V4cC10cmVlL2Rpc3QvaW50ZXJwcmV0ZXIvZmluaXRlLWF1dG9tYXRvbi9kZmEvZGZhLW1pbmltaXplci5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWdleHAtdHJlZS9kaXN0L2ludGVycHJldGVyL2Zpbml0ZS1hdXRvbWF0b24vZGZhL2RmYS5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWdleHAtdHJlZS9kaXN0L2ludGVycHJldGVyL2Zpbml0ZS1hdXRvbWF0b24vc3RhdGUuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVnZXhwLXRyZWUvZGlzdC9pbnRlcnByZXRlci9maW5pdGUtYXV0b21hdG9uL25mYS9uZmEtc3RhdGUuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVnZXhwLXRyZWUvZGlzdC9pbnRlcnByZXRlci9maW5pdGUtYXV0b21hdG9uL25mYS9idWlsZGVycy5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWdleHAtdHJlZS9kaXN0L2ludGVycHJldGVyL2Zpbml0ZS1hdXRvbWF0b24vbmZhL25mYS1mcm9tLXJlZ2V4cC5qcyIsIi4uL25vZGVfbW9kdWxlcy9yZWdleHAtdHJlZS9kaXN0L2ludGVycHJldGVyL2Zpbml0ZS1hdXRvbWF0b24vaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcmVnZXhwLXRyZWUvZGlzdC9jb21wYXQtdHJhbnNwaWxlci9ydW50aW1lL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JlZ2V4cC10cmVlL2Rpc3QvcmVnZXhwLXRyZWUuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVnZXhwLXRyZWUvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvc2FmZS1yZWdleC9saWIvaGV1cmlzdGljLWFuYWx5emVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3NhZmUtcmVnZXgvbGliL2FuYWx5emVyLWZhbWlseS5qcyIsIi4uL25vZGVfbW9kdWxlcy9zYWZlLXJlZ2V4L2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BzaW5kcmVzb3JodXMvaXMvZGlzdC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wLWNhbmNlbGFibGUvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvZGVmZXItdG8tY29ubmVjdC9kaXN0L3NvdXJjZS9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9Ac3ptYXJjemFrL2h0dHAtdGltZXIvZGlzdC9zb3VyY2UvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvY2FjaGVhYmxlLWxvb2t1cC9zb3VyY2UvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvbm9ybWFsaXplLXVybC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy93cmFwcHkvd3JhcHB5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL29uY2Uvb25jZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9lbmQtb2Ytc3RyZWFtL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3B1bXAvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvZ2V0LXN0cmVhbS9idWZmZXItc3RyZWFtLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dldC1zdHJlYW0vaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvaHR0cC1jYWNoZS1zZW1hbnRpY3MvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvbG93ZXJjYXNlLWtleXMvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcmVzcG9uc2VsaWtlL3NyYy9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9taW1pYy1yZXNwb25zZS9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9jbG9uZS1yZXNwb25zZS9zcmMvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvanNvbi1idWZmZXIvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMva2V5di9zcmMvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvY2FjaGVhYmxlLXJlcXVlc3Qvc3JjL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2RlY29tcHJlc3MtcmVzcG9uc2Uvbm9kZV9tb2R1bGVzL21pbWljLXJlc3BvbnNlL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2RlY29tcHJlc3MtcmVzcG9uc2UvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcXVpY2stbHJ1L2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2h0dHAyLXdyYXBwZXIvc291cmNlL2FnZW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2h0dHAyLXdyYXBwZXIvc291cmNlL2luY29taW5nLW1lc3NhZ2UuanMiLCIuLi9ub2RlX21vZHVsZXMvaHR0cDItd3JhcHBlci9zb3VyY2UvdXRpbHMvdXJsLXRvLW9wdGlvbnMuanMiLCIuLi9ub2RlX21vZHVsZXMvaHR0cDItd3JhcHBlci9zb3VyY2UvdXRpbHMvcHJveHktZXZlbnRzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2h0dHAyLXdyYXBwZXIvc291cmNlL3V0aWxzL2lzLXJlcXVlc3QtcHNldWRvLWhlYWRlci5qcyIsIi4uL25vZGVfbW9kdWxlcy9odHRwMi13cmFwcGVyL3NvdXJjZS91dGlscy9lcnJvcnMuanMiLCIuLi9ub2RlX21vZHVsZXMvaHR0cDItd3JhcHBlci9zb3VyY2UvY2xpZW50LXJlcXVlc3QuanMiLCIuLi9ub2RlX21vZHVsZXMvcmVzb2x2ZS1hbHBuL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2h0dHAyLXdyYXBwZXIvc291cmNlL3V0aWxzL2NhbGN1bGF0ZS1zZXJ2ZXItbmFtZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9odHRwMi13cmFwcGVyL3NvdXJjZS9hdXRvLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2h0dHAyLXdyYXBwZXIvc291cmNlL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dvdC9kaXN0L3NvdXJjZS9jb3JlL3V0aWxzL2lzLWZvcm0tZGF0YS5qcyIsIi4uL25vZGVfbW9kdWxlcy9nb3QvZGlzdC9zb3VyY2UvY29yZS91dGlscy9nZXQtYm9keS1zaXplLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dvdC9kaXN0L3NvdXJjZS9jb3JlL3V0aWxzL3Byb3h5LWV2ZW50cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9nb3QvZGlzdC9zb3VyY2UvY29yZS91dGlscy91bmhhbmRsZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9nb3QvZGlzdC9zb3VyY2UvY29yZS91dGlscy90aW1lZC1vdXQuanMiLCIuLi9ub2RlX21vZHVsZXMvZ290L2Rpc3Qvc291cmNlL2NvcmUvdXRpbHMvdXJsLXRvLW9wdGlvbnMuanMiLCIuLi9ub2RlX21vZHVsZXMvZ290L2Rpc3Qvc291cmNlL2NvcmUvdXRpbHMvb3B0aW9ucy10by11cmwuanMiLCIuLi9ub2RlX21vZHVsZXMvZ290L2Rpc3Qvc291cmNlL2NvcmUvdXRpbHMvd2Vha2FibGUtbWFwLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dvdC9kaXN0L3NvdXJjZS9jb3JlL3V0aWxzL2dldC1idWZmZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvZ290L2Rpc3Qvc291cmNlL2NvcmUvdXRpbHMvZG5zLWlwLXZlcnNpb24uanMiLCIuLi9ub2RlX21vZHVsZXMvZ290L2Rpc3Qvc291cmNlL2NvcmUvdXRpbHMvaXMtcmVzcG9uc2Utb2suanMiLCIuLi9ub2RlX21vZHVsZXMvZ290L2Rpc3Qvc291cmNlL3V0aWxzL2RlcHJlY2F0aW9uLXdhcm5pbmcuanMiLCIuLi9ub2RlX21vZHVsZXMvZ290L2Rpc3Qvc291cmNlL2FzLXByb21pc2Uvbm9ybWFsaXplLWFyZ3VtZW50cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9nb3QvZGlzdC9zb3VyY2UvY29yZS9jYWxjdWxhdGUtcmV0cnktZGVsYXkuanMiLCIuLi9ub2RlX21vZHVsZXMvZ290L2Rpc3Qvc291cmNlL2NvcmUvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvZ290L2Rpc3Qvc291cmNlL2FzLXByb21pc2UvdHlwZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvZ290L2Rpc3Qvc291cmNlL2FzLXByb21pc2UvcGFyc2UtYm9keS5qcyIsIi4uL25vZGVfbW9kdWxlcy9nb3QvZGlzdC9zb3VyY2UvYXMtcHJvbWlzZS9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9nb3QvZGlzdC9zb3VyY2UvYXMtcHJvbWlzZS9jcmVhdGUtcmVqZWN0aW9uLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dvdC9kaXN0L3NvdXJjZS91dGlscy9kZWVwLWZyZWV6ZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9nb3QvZGlzdC9zb3VyY2UvY3JlYXRlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dvdC9kaXN0L3NvdXJjZS9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9zdHJ0b2szL2xpYi9Gc1Byb21pc2UuanMiLCIuLi9ub2RlX21vZHVsZXMvcGVlay1yZWFkYWJsZS9saWIvRW5kT2ZGaWxlU3RyZWFtLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3BlZWstcmVhZGFibGUvbGliL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3N0cnRvazMvbGliL0Fic3RyYWN0VG9rZW5pemVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3N0cnRvazMvbGliL1JlYWRTdHJlYW1Ub2tlbml6ZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvc3RydG9rMy9saWIvQnVmZmVyVG9rZW5pemVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3N0cnRvazMvbGliL2NvcmUuanMiLCIuLi9ub2RlX21vZHVsZXMvc3RydG9rMy9saWIvRmlsZVRva2VuaXplci5qcyIsIi4uL25vZGVfbW9kdWxlcy9zdHJ0b2szL2xpYi9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9pZWVlNzU0L2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Rva2VuLXR5cGVzL2xpYi9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9maWxlLXR5cGUvdXRpbC5qcyIsIi4uL25vZGVfbW9kdWxlcy9maWxlLXR5cGUvc3VwcG9ydGVkLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZpbGUtdHlwZS9jb3JlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZpbGUtdHlwZS9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3V0aWwuanMiLCIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy9ub2RlMmpzb24uanMiLCIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy94bWxOb2RlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3N0cm51bS9zdHJudW0uanMiLCIuLi9ub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyL3NyYy94bWxzdHIyeG1sbm9kZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL3ZhbGlkYXRvci5qcyIsIi4uL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL25pbW5kYXRhLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2Zhc3QteG1sLXBhcnNlci9zcmMvbm9kZTJqc29uX3N0ci5qcyIsIi4uL25vZGVfbW9kdWxlcy9mYXN0LXhtbC1wYXJzZXIvc3JjL2pzb24yeG1sLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2Zhc3QteG1sLXBhcnNlci9zcmMvcGFyc2VyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2lzLXN2Zy9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9lc2NhcGUtc3RyaW5nLXJlZ2V4cC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy90cmltLXJlcGVhdGVkL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZpbGVuYW1lLXJlc2VydmVkLXJlZ2V4L2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3N0cmlwLW91dGVyL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2ZpbGVuYW1pZnkvZmlsZW5hbWlmeS5qcyIsIi4uL3NyYy9jb25maWcudHMiLCIuLi9zcmMvdXRpbHMudHMiLCIuLi9ub2RlX21vZHVsZXMvY3VpbnQvbGliL3VpbnQzMi5qcyIsIi4uL25vZGVfbW9kdWxlcy9jdWludC9saWIvdWludDY0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2N1aW50L2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3RzLXh4aGFzaC9kaXN0L3RvLXV0ZjgtYXJyYXkuanMiLCIuLi9ub2RlX21vZHVsZXMvdHMteHhoYXNoL2Rpc3QvdG8tYnVmZmVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3RzLXh4aGFzaC9kaXN0L3h4aGFzaC5qcyIsIi4uL25vZGVfbW9kdWxlcy90cy14eGhhc2gvZGlzdC94eGhhc2g2NC5qcyIsIi4uL25vZGVfbW9kdWxlcy90cy14eGhhc2gvZGlzdC94eGhhc2gzMi5qcyIsIi4uL25vZGVfbW9kdWxlcy90cy14eGhhc2gvZGlzdC9pbmRleC5qcyIsIi4uL3NyYy9saW5rc0hhc2gudHMiLCIuLi9zcmMvY29udGVudFByb2Nlc3Nvci50cyIsIi4uL3NyYy91bmlxdWVRdWV1ZS50cyIsIi4uL3NyYy9tYWluLnRzIl0sInNvdXJjZXNDb250ZW50IjpudWxsLCJuYW1lcyI6WyJyZXF1aXJlJCQwIiwicmVxdWlyZSQkMSIsInJlcXVpcmUkJDIiLCJnZW4iLCJnZW5lcmF0b3IiLCJfc2xpY2VkVG9BcnJheSIsIl90b0NvbnN1bWFibGVBcnJheSIsInVuaWNvZGVQcm9wZXJ0aWVzIiwicmVnZXhwVHJlZVBhcnNlciIsIl9jcmVhdGVDbGFzcyIsIl9jbGFzc0NhbGxDaGVjayIsIk5vZGVQYXRoIiwibm9kZVBhdGgiLCJwYXJzZXIiLCJ0cmFuc2Zvcm0iLCJjb21wYXRUcmFuc2Zvcm1zIiwiX3RyYW5zZm9ybSIsIlVQUEVSX0FfQ1AiLCJVUFBFUl9aX0NQIiwiZGlzanVuY3Rpb25Ub0xpc3QiLCJsaXN0VG9EaXNqdW5jdGlvbiIsImluY3JlYXNlUXVhbnRpZmllckJ5T25lIiwiX3JlcXVpcmUiLCJoYXNBcHByb3ByaWF0ZVNpYmxpbmdzIiwiaXNNZXRhIiwicmVxdWlyZSQkMyIsInJlcXVpcmUkJDQiLCJyZXF1aXJlJCQ1IiwicmVxdWlyZSQkNiIsInJlcXVpcmUkJDciLCJyZXF1aXJlJCQ4IiwicmVxdWlyZSQkOSIsInJlcXVpcmUkJDEwIiwicmVxdWlyZSQkMTEiLCJyZXF1aXJlJCQxMiIsInJlcXVpcmUkJDEzIiwicmVxdWlyZSQkMTQiLCJyZXF1aXJlJCQxNSIsIm9wdGltaXphdGlvblRyYW5zZm9ybXMiLCJFUFNJTE9OIiwiRVBTSUxPTl9DTE9TVVJFIiwiREZBTWluaW1pemVyIiwiU3RhdGUiLCJjaGFyIiwiTkZBU3RhdGUiLCJORkEiLCJhbHQiLCJvciIsInJlcCIsInBsdXNSZXAiLCJxdWVzdGlvblJlcCIsIkRGQSIsIm5mYUZyb21SZWdFeHAiLCJSZWdFeHBUcmVlIiwicmVnZXhwVHJlZSIsImZhIiwidHJhdmVyc2UiLCJfdHJhdmVyc2UiLCJ1dGlsXzEiLCJkZWZlcl90b19jb25uZWN0XzEiLCJvcyIsIndyYXBweSIsIm5vb3AiLCJpc1JlcXVlc3QiLCJvbmNlIiwiZnMiLCJlb3MiLCJwdW1wIiwiUmVhZGFibGUiLCJQYXNzVGhyb3VnaCIsIm1pbWljUmVzcG9uc2UiLCJyZXF1aXJlIiwiRXZlbnRFbWl0dGVyIiwiSlNPTkIiLCJLZXl2IiwidXJsTGliIiwibm9ybWFsaXplVXJsIiwiQ2FjaGVQb2xpY3kiLCJSZXNwb25zZSIsImNsb25lUmVzcG9uc2UiLCJnZXRTdHJlYW0iLCJ6bGliIiwiQWdlbnQiLCJRdWlja0xSVSIsImh0dHAyIiwidGxzIiwidXJsVG9PcHRpb25zIiwicHJveHlFdmVudHMiLCJJbmNvbWluZ01lc3NhZ2UiLCJuZXQiLCJyZXNvbHZlQUxQTiIsImh0dHBzIiwiaHR0cCIsIkh0dHAyQ2xpZW50UmVxdWVzdCIsIkNsaWVudFJlcXVlc3QiLCJmc18xIiwiZGVmYXVsdF8xIiwidXJsXzEiLCJzdHJlYW1fMSIsIkNhY2hlYWJsZVJlcXVlc3QiLCJjYWNoZWFibGVfbG9va3VwXzEiLCJodHRwX3RpbWVyXzEiLCJodHRwMndyYXBwZXIiLCJ0aGlzIiwiZXZlbnRzXzEiLCJQQ2FuY2VsYWJsZSIsImFzX3Byb21pc2VfMSIsIkVuZE9mRmlsZVN0cmVhbV8xIiwicGVla19yZWFkYWJsZV8xIiwiY29yZSIsInN0cnRvazMiLCJUb2tlbiIsImZpbGVUeXBlIiwiYnVpbGRPcHRpb25zIiwiZGVmYXVsdE9wdGlvbnMiLCJwcm9wcyIsInRvTnVtYmVyIiwieDJqIiwieG1sVG9Ob2Rlb2JqIiwibm9kZVRvSnNvbiIsImZyb21CdWZmZXIiLCJpc1N2ZyIsInBhdGgiLCJ0b191dGY4X2FycmF5XzEiLCJjdWludF8xIiwidG9fYnVmZmVyXzEiLCJ4eGhhc2hfMSIsIlhYSGFzaDMyIiwieHhoYXNoNjRfMSIsInh4aGFzaDMyXzEiLCJVUkwiLCJQbHVnaW4iLCJOb3RpY2UiLCJQbHVnaW5TZXR0aW5nVGFiIiwiU2V0dGluZyIsInNhZmVSZWdleCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXVEQTtBQUNPLFNBQVMsU0FBUyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRTtBQUM3RCxJQUFJLFNBQVMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sS0FBSyxZQUFZLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsVUFBVSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtBQUNoSCxJQUFJLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLFVBQVUsT0FBTyxFQUFFLE1BQU0sRUFBRTtBQUMvRCxRQUFRLFNBQVMsU0FBUyxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENB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LGdCQUFjLEdBQUcsWUFBWSxFQUFFLFNBQVMsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLFVBQVUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLE9BQU8sR0FBRyxDQUFDLEVBQUUsTUFBTSxJQUFJLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsT0FBTyxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxTQUFTLENBQUMsc0RBQXNELENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN4cEI7QUFDQSxTQUFTQyxvQkFBa0IsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUU7QUFDbk07QUFDQSxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQztBQU1wQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNuQjtBQUNBLFNBQVMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUU7QUFDM0IsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRTtBQUNwQyxJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBO0FBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ3RCLElBQUksT0FBTyxLQUFLLElBQUksR0FBRyxDQUFDO0FBQ3hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTztBQUNULElBQUksV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO0FBQ2xDLElBQUksU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTO0FBQzVCLElBQUksU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO0FBQzlCLElBQUksT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPO0FBQ3hCLElBQUksV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO0FBQ2xDLElBQUksU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTO0FBQzVCLEdBQUcsQ0FBQztBQUNKLENBQUM7QUFDRDtBQUNBLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUU7QUFDaEQsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3RDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDakUsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5QixFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDWixJQUFJLElBQUksRUFBRSxRQUFRO0FBQ2xCLElBQUksSUFBSSxFQUFFLEVBQUU7QUFDWixJQUFJLEtBQUssRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDO0FBQ3pCLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUU7QUFDaEMsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3RDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxZQUFZO0FBQ3ZCLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUU7QUFDaEMsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3RDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRTtBQUMzQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUU7QUFDaEMsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3RDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUU7QUFDaEMsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3RDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUss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RUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN0QyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFO0FBQ2hDLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN0QyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFO0FBQ2hDLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN0QyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzdELENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUU7QUFDakMsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3hGLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUU7QUFDakMsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7QUFDeEYsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRTtBQUNqQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5RCxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLGVBQWUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUQsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRTtBQUNqQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5RCxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzFELENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUU7QUFDakMsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDMUQsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRTtBQUNqQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDaEUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRTtBQUNqQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMzRCxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzNELENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUU7QUFDakMsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsb0JBQW9CLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ25FLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUU7QUFDakMsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3RDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUU7QUFDMUMsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3RDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRTtBQUM1QyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzlCLEVBQUUsRUFBRSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDcEIsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ1YsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRTtBQUNqQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzlCLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNaLElBQUksSUFBSSxFQUFFLFlBQVk7QUFDdEIsSUFBSSxJQUFJLEVBQUUsRUFBRTtBQUNaLElBQUksTUFBTSxFQUFFLElBQUk7QUFDaEIsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ1osQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRTtBQUNqQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzlCLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNaLElBQUksSUFBSSxFQUFFLFlBQVk7QUFDdEIsSUFBSSxJQUFJLEVBQUUsRUFBRTtBQUNaLElBQUksTUFBTSxFQUFFLElBQUk7QUFDaEIsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ1osQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRTtBQUNqQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzlCLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNaLElBQUksSUFBSSxFQUFFLFlBQVk7QUFDdEIsSUFBSSxJQUFJLEVBQUUsRUFBRTtBQUNaLElBQUksTUFBTSxFQUFFLElBQUk7QUFDaEIsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ1osQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRTtBQUNqQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzlCLEVBQUUsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzNCLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNaLElBQUksSUFBSSxFQUFFLFlBQVk7QUFDdEIsSUFBSSxJQUFJLEVBQUUsT0FBTztBQUNqQixJQUFJLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLElBQUksRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEIsSUFBSSxNQUFNLEVBQUUsSUFBSTtBQUNoQixHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDWixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUIsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ1osSUFBSSxJQUFJLEVBQUUsWUFBWTtBQUN0QixJQUFJLElBQUksRUFBRSxPQUFPO0FB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QUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxL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LElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxTQUFTLEdBQUcsT0FBTyxDQUFDLENBQUMsT0FBTyxXQUFXLENBQUM7QUFDbEgsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNKLElBQUksb0JBQW9CLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxD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LEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFFLE1BQU0sSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLE9BQU8sYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLElBQUksU0FBUyxDQUFDLHNEQUFzRCxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDeHBCO0FBQ0EsSUFBSUksY0FBWSxHQUFHLFlBQVksRUFBRSxTQUFTLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsQ0FBQyxVQUFVLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksT0FBTyxJQUFJLFVBQVUsRUFBRSxVQUFVLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENB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SyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUMvQixRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCLEtBQUs7QUFDTCxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFO0FBQ2xDLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsS0FBSztBQUNMLElBQUksT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2xDLENBQUMsQ0FBQztBQUNGLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsS0FBSyxNQUFNLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQVcsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQzdSLEVBQUUsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZFLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDOUYsRUFBRSxDQUFDLFFBQVEsR0FBRyxDQUFDLEtBQUssS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDakksRUFBRSxDQUFDLGFBQWEsR0FBRyxDQUFDLEtBQUssS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0ksRUFBRSxDQUFDLFNBQVMsR0FBRyxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RHLEVBQUUsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoSCxFQUFFLENBQUMsYUFBYSxHQUFHLENBQUMsS0FBSyxLQUFLLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRCxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQUssS0FBSztBQUNqQyxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNmLElBQUksT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDbEYsUUFBUSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssTUFBTSxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqRixDQUFDLENBQUM7QUFDRixFQUFFLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hFLEVBQUUsQ0FBQyxpQkFBaUIsR0FBRyxjQUFjLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUMzRCxFQUFFLENBQUMsc0JBQXNCLEdBQUcsQ0FBQyxLQUFLLEtBQUssYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLHdCQUF3QixDQUFDO0FBQ3pGLEVBQUUsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxLQUFLLEtBQUssYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLGVBQWUsQ0FBQztBQUN2RTtBQUNBLEVBQUUsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDeEYsRUFBRSxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDckMsRUFBRSxDQUFDLElBQUksR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDakMsRUFBRSxDQUFDLEtBQUssR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbkMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssS0FBSyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakQsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssS0FBSyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakQsRUFBRSxDQUFDLE9BQU8sR0FBRyxDQUFDLEtBQUssS0FBSyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekQsRUFBRSxDQUFDLE9BQU8sR0FBRyxDQUFDLEtBQUssS0FBSyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekQsRUFBRSxDQUFDLFNBQVMsR0FBRyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDM0MsRUFBRSxDQUFDLFVBQVUsR0FBRyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDN0MsRUFBRSxDQUFDLGlCQUFpQixHQUFHLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQzNELEVBQUUsQ0FBQyxVQUFVLEdBQUcsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzdDLEVBQUUsQ0FBQyxXQUFXLEdBQUcsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQy9DLEVBQUUsQ0FBQyxVQUFVLEdBQUcsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzdDLEVBQUUsQ0FBQyxXQUFXLEdBQUcsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQy9DLEVBQUUsQ0FBQyxZQUFZLEdBQUcsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ2pELEVBQUUsQ0FBQyxZQUFZLEdBQUcsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ2pELEVBQUUsQ0FBQyxhQUFhLEdBQUcsY0FBYyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ25ELEVBQUUsQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDckQsRUFBRSxDQUFDLFdBQVcsR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDL0MsRUFBRSxDQUFDLGlCQUFpQixHQUFHLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQzNELEVBQUUsQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3pDLEVBQUUsQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLEtBQUssTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxNQUFNLENBQUMsU0FBUyxDQUFDO0FBQ2pHLEVBQUUsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxLQUFLLEtBQUssY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3pELEVBQUUsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxLQUFLLEtBQUs7QUFDMUIsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUMzQixRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCLEtBQUs7QUFDTCxJQUFJLElBQUk7QUFDUixRQUFRLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsS0FBSztBQUNMLElBQUksT0FBTyxFQUFFLEVBQUU7QUFDZixRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCLEtBQUs7QUFDTCxDQUFDLENBQUM7QUFDRjtBQUNBO0FBQ0EsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQUssS0FBSyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEM7QUFDQSxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsS0FBSyxLQUFLLENBQUMsS0FBSyxDQUFDO0FBQzdCLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEtBQUssTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4QyxFQUFFLENBQUMsU0FBUyxHQUFHLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksbUJBQW1CLENBQUMsT0FBTyxLQUFLLENBQUMsQ0FBQztBQUMvRSxFQUFFLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBSyxLQUFLLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDaEQsRUFBRSxDQUFDLFdBQVcsR0FBRyxDQUFDLEtBQUssS0FBSyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hELEVBQUUsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxLQUFLLEtBQUs7QUFDNUI7QUFDQSxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxpQkFBaUIsRUFBRTtBQUNwRCxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCLEtBQUs7QUFDTCxJQUFJLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkQsSUFBSSxPQUFPLFNBQVMsS0FBSyxJQUFJLElBQUksU0FBUyxLQUFLLE1BQU0sQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekUsQ0FBQyxDQUFDO0FBQ0YsRUFBRSxDQUFDLFVBQVUsR0FBRyxDQUFDLEtBQUssS0FBSyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNsRSxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7QUFDckUsRUFBRSxDQUFDLFNBQVMsR0FBRyxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUcsRUFBRSxDQUFDLE9BQU8sR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEtBQUs7QUFDL0IsSUFBSSxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDMUIsUUFBUSxPQUFPLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUUsS0FBSztBQUNMLElBQUksSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQy9DLFFBQVEsT0FBTyxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDMUUsS0FBSztBQUNMLElBQUksTUFBTSxJQUFJLFNBQVMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25FLENBQUMsQ0FBQztBQUNGLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLE1BQU0sdUJBQXVCLEdBQUc7QUFDaEMsSUFBSSxXQUFXO0FBQ2YsSUFBSSxlQUFlO0FBQ25CLElBQUksT0FBTztBQUNYLElBQUksWUFBWTtBQUNoQixJQUFJLFdBQVc7QUFDZixDQUFDLENBQUM7QUFDRixFQUFFLENBQUMsVUFBVSxHQUFHLENBQUMsS0FBSyxLQUFLO0FBQzNCLElBQUksT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUMzQixRQUFRLEtBQUssQ0FBQyxRQUFRLEtBQUssaUJBQWlCO0FBQzVDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO0FBQ2pDLFFBQVEsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztBQUM5QixRQUFRLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxDQUFDO0FBQ3JFLENBQUMsQ0FBQztBQUNGLEVBQUUsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxLQUFLLEtBQUs7QUFDM0IsSUFBSSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN2QixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDaEIsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksS0FBSyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7QUFDN0csUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQixLQUFLO0FBQ0wsSUFBSSxJQUFJLEtBQUssTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsY0FBYyxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7QUFDMUcsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQixLQUFLO0FBQ0wsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDLENBQUM7QUFDRixFQUFFLENBQUMsVUFBVSxHQUFHLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2pHLEVBQUUsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxLQUFLLEtBQUssS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssQ0FBQyxRQUFRLENBQUM7QUFDbkUsTUFBTSxjQUFjLEdBQUcsQ0FBQyxTQUFTLEtBQUssQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUM7QUFDeEcsRUFBRSxDQUFDLFdBQVcsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsRUFBRSxDQUFDLFVBQVUsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEMsRUFBRSxDQUFDLFVBQVUsR0FBRyxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0FBQ2pFLEVBQUUsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNsRSxFQUFFLENBQUMsV0FBVyxHQUFHLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7QUFDbkU7QUFDQSxFQUFFLENBQUMsY0FBYyxHQUFHLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDcEUsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1RSxFQUFFLENBQUMsdUJBQXVCLEdBQUcsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzRixFQUFFLENBQUMsV0FBVyxHQUFHLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7QUFDcEg7QUFDQTtBQUNBLEVBQUUsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNySCxFQUFFLENBQUMsUUFBUSxHQUFHLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7QUFDM0QsRUFBRSxDQUFDLFdBQVcsR0FBRyxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzVELEVBQUUsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztBQUMzRCxFQUFFLENBQUMsV0FBVyxHQUFHLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDNUQ7QUFDQSxFQUFFLENBQUMsV0FBVyxHQUFHLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzdFLEVBQUUsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxLQUFLLEtBQUssY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNELEVBQUUsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxLQUFLLEtBQUssY0FBYyxDQUFDLGlCQUFpQixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekUsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxLQUFLO0FBQ3hELElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUU7QUFDbEMsUUFBUSxNQUFNLElBQUksU0FBUyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvRSxLQUFLO0FBQ0wsSUFBSSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQzdCLFFBQVEsTUFBTSxJQUFJLFNBQVMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0FBQ3hELEtBQUs7QUFDTCxJQUFJLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDMUMsQ0FBQyxDQUFDO0FBQ0YsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLFNBQVMsRUFBRSxHQUFHLE1BQU0sS0FBSztBQUNuQyxJQUFJLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsU0FBUyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDckUsSUFBSSxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQy9HLENBQUMsQ0FBQztBQUNGLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxTQUFTLEVBQUUsR0FBRyxNQUFNLEtBQUssZ0JBQWdCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzlGLE1BQU0sVUFBVSxHQUFHLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsT0FBTyxHQUFHLEVBQUUsS0FBSztBQUNwRSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDcEIsUUFBUSxNQUFNLEVBQUUsY0FBYyxFQUFFLEdBQUcsT0FBTyxDQUFDO0FBQzNDLFFBQVEsTUFBTSxhQUFhLEdBQUcsY0FBYztBQUM1QyxZQUFZLENBQUMseUJBQXlCLEVBQUU7QUFDeEMsZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUUsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFlBQVksQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEQsUUFBUSxNQUFNLElBQUksU0FBUyxDQUFDLENBQUMsMEJBQTBCLEVBQUUsV0FBVyxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RixLQUFLO0FBQ0wsQ0FBQyxDQUFDO0FBQ0YsaUJBQWlCO0FBQ2pCO0FBQ0EsSUFBSSxTQUFTLEVBQUUsQ0FBQyxLQUFLLEtBQUssVUFBVSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQztBQUM3RSxJQUFJLE1BQU0sRUFBRSxDQUFDLEtBQUssS0FBSyxVQUFVLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDO0FBQ3BFLElBQUksTUFBTSxFQUFFLENBQUMsS0FBSyxLQUFLLFVBQVUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUM7QUFDcEUsSUFBSSxNQUFNLEVBQUUsQ0FBQyxLQUFLLEtBQUssVUFBVSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQztBQUNwRTtBQUNBLElBQUksU0FBUyxFQUFFLENBQUMsS0FBSyxLQUFLLFVBQVUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUM7QUFDNUUsSUFBSSxLQUFLLEVBQUUsQ0FBQyxLQUFLLEtBQUssVUFBVSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQztBQUNoRSxJQUFJLE1BQU0sRUFBRSxDQUFDLEtBQUssS0FBSyxVQUFVLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLGVBQWUsS0FBSyxDQUFDO0FBQ2hGLElBQUksT0FBTyxFQUFFLENBQUMsS0FBSyxLQUFLLFVBQVUsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUM7QUFDdkUsSUFBSSxNQUFNLEVBQUUsQ0FBQyxLQUFLLEtBQUssVUFBVSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQztBQUNwRSxJQUFJLGFBQWEsRUFBRSxDQUFDLEtBQUssS0FBSyxVQUFVLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FB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R0FBRyxDQUFDLEVBQUM7QUFDbEUsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUM7QUFDakMsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBQztBQUN2QixFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFDO0FBQzdEO0FBQ0EsRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUM7QUFDekI7QUFDQSxFQUFFLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxRQUFRLEVBQUU7QUFDMUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFDO0FBQzVCLElBQUksQ0FBQyxHQUFHLEtBQUk7QUFDWixHQUFHLE1BQU07QUFDVCxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBQztBQUM5QyxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQzNDLE1BQU0sQ0FBQyxHQUFFO0FBQ1QsTUFBTSxDQUFDLElBQUksRUFBQztBQUNaLEtBQUs7QUFDTCxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEVBQUU7QUFDeEIsTUFBTSxLQUFLLElBQUksRUFBRSxHQUFHLEVBQUM7QUFDckIsS0FBSyxNQUFNO0FBQ1gsTUFBTSxLQUFLLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFL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RyxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQzVCLFFBQVEsT0FBTyxjQUFjLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4RSxLQUFLO0FBQ0wsQ0FBQztBQUNELHlCQUF5QixjQUFjLENBQUM7QUFDeEMsY0FBYyxDQUFDLFdBQVcsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHO0FBQzFGLElBQUksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUc7QUFDaEYsSUFBSSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO0FBQ3BGLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztBQUNsRixJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7QUFDbEYsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO0FBQ2xGLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztBQUNsRixJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztBQUM3RSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7OztBQ3BjM0MsbUJBQXFCLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQWdDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLENBQUMsS0FBSztBQUMzRCxDQUFDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1RixDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ3JCLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDZixFQUFFO0FBQ0Y7QUFDQSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDcEI7QUFDQSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzdDLEVBQUUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQixFQUFFO0FBQ0Y7QUFDQSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuRCxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxPQUFPLE9BQU8sS0FBSyxHQUFHLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUEyQixHQUFHO0FBQzlCLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sS0FBSztBQUMxQixFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQzdILEVBQUU7QUFDRixDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ1AsQ0FBQzs7Ozs7Ozs7QUNyQ0QsYUFBYyxHQUFHO0FBQ2pCLENBQUMsVUFBVSxFQUFFO0FBQ2IsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxNQUFNO0FBQ1IsRUFBRSxLQUFLO0FBQ1AsRUFBRSxNQUFNO0FBQ1IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxNQUFNO0FBQ1IsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxNQUFNO0FBQ1IsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxJQUFJO0FBQ04sRUFBRSxLQUFLO0FBQ1AsRUFBRSxJQUFJO0FBQ04sRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxNQUFNO0FBQ1IsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxNQUFNO0FBQ1IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxNQUFNO0FBQ1IsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxNQUFNO0FBQ1IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxPQUFPO0FBQ1QsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxJQUFJO0FBQ04sRUFBRSxJQUFJO0FBQ04sRUFBRSxRQUFRO0FBQ1YsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxJQUFJO0FBQ04sRUFBRSxLQUFLO0FBQ1AsRUFBRSxHQUFHO0FBQ0wsRUFBRSxJQUFJO0FBQ04sRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxPQUFPO0FBQ1QsRUFBRSxLQUFLO0FBQ1AsRUFBRSxNQUFNO0FBQ1IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxNQUFNO0FBQ1IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxJQUFJO0FBQ04sRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxNQUFNO0FBQ1IsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxPQUFPO0FBQ1QsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFBRSxLQUFLO0FBQ1AsRUFB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RyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2pDLEdBQUcsTUFBTSxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BDLEdBQUcsT0FBTztBQUNWLElBQUksRUFBRSxFQUFFLElBQUk7QUFDWixJQUFJLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxTQUFTLENBQUMsU0FBUyxDQUFDQSxHQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDNUQsSUFBSSxDQUFDO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0I7QUFDQSxFQUFFLE9BQU8sU0FBUyxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUU7QUFDNUQsR0FBRyxNQUFNLE1BQU0sR0FBRyxNQUFNLFVBQVUsRUFBRSxDQUFDO0FBQ3JDLEdBQUcsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7QUFDbEMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtBQUM1SDtBQUNBLElBQUksTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQyxJQUFJLE9BQU8sSUFBSSxNQUFNLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEQ7QUFDQSxJQUFJLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElB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Q0E7QUFDQTtBQUNBLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLEVBQUU7QUFDcEUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFJO0FBQ3hDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFDO0FBQ2pDLEVBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsT0FBTTtBQUN4QixFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLEdBQUU7QUFDdkI7QUFDQSxFQUFFLE9BQU8sSUFBSTtBQUNiLEdBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLEVBQUU7QUFDckUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFJO0FBQ3hDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFDO0FBQ2pDLEVBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsT0FBTTtBQUN4QixFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLEdBQUU7QUFDdkI7QUFDQSxFQUFFLE9BQU8sSUFBSTtBQUNiLEdBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLFlBQVk7QUFDdEMsRUFBRSxPQUFPLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJ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QUFJO0FBQy9CO0FBQ0EsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRTtBQUN0QixFQUFFLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFJO0FBQy9CO0FBQ0EsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRTtBQUN0QixFQUFFLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFJO0FBQy9CO0FBQ0EsRUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxPQUFNO0FBQzFCLEVBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsT0FBTTtBQUMxQixFQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLE9BQU07QUFDMUIsRUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxPQUFNO0FBQzFCO0FBQ0EsRUFBRSxPQUFPLElBQUk7QUFDYixHQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLFVBQVUsS0FBSyxFQUFFO0FBQzlDLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtBQUMzQyxHQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLFVBQVUsS0FBSyxFQUFFO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFJO0FBQ3JCLEVBQUUsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUk7QUFDckIsRUFBRSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSTtBQUNyQixFQUFFLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFJO0FBQ3JCLEVBQUUsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLEtBQUk7QUFDdEIsRUFBRSxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsS0FBSTtBQUN0QixFQUFFLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFJO0FBQ3RCLEVBQUUsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLEtBQUk7QUFDdEI7QUFDQSxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFHO0FBQ3JCO0FBQ0EsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRTtBQUN0QixFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsSUFBRztBQUNsQixFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFFO0FBQ3RCLEVBQUUsR0FBRyxJQUFJLE9BQU07QUFDZixFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsSUFBRztBQUNsQjtBQUNBLEVBQUUsR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFFO0FBQ25CLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxJQUFHO0FBQ2xCLEVBQUUsSUFBSSxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUU7QUFDdEIsRUFBRSxHQUFHLElBQUksT0FBTTtBQUNmLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxJQUFHO0FBQ2xCLEVBQUUsR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFFO0FBQ25CLEVBQUUsR0FBRyxJQUFJLE9BQU07QUFDZixFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsSUFBRztBQUNsQjtBQUNBLEVBQUUsR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFFO0FBQ25CLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxJQUFHO0FBQ2xCLEVBQUUsR0FBRyxJQUFJLE9BQU07QUFDZixFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsSUFBRztBQUNsQixFQUFFLEdBQUcsSUFBSSxPQUFNO0FB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RSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLElBQUk7QUFDekMsRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLEtBQUs7QUFDMUMsRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLElBQUk7QUFDekMsRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLEtBQUs7QUFDMUMsRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUk7QUFDL0IsR0FBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxVQUFVLEtBQUssRUFBRTtBQUNwRSxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sSUFBSTtBQUN6QyxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sS0FBSztBQUMxQyxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sSUFBSTtBQUN6QyxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sS0FBSztBQUMxQyxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sSUFBSTtBQUN6QyxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sS0FBSztBQUMxQyxFQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSTtBQUMvQixHQUFFO0FBQ0Y7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QyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkQsS0FBSztBQUNMLElBQUksV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3pCLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEssYUFBYSxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3JCLGFBQWEsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEMsS0FBSztBQUNMLElBQUksVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDckIsUUFBUSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDbkQsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtBQUN4QyxZQUFZLEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUs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QUFDMUIsS0FBSztBQUNMLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUM3QixRQUFRLE1BQU0sUUFBUSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hDLFFBQVEsSUFBSSxLQUFLLEtBQUssU0FBUztBQUMvQixZQUFZLE9BQU8sUUFBUSxDQUFDO0FBQzVCLFFBQVEsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQy9DLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFO0FBQ2hDLFFBQVEsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3ZDLFFBQVEsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztBQUMxQixRQUFRLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7QUFDM0IsUUFBUSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQzVCLFFBQVEsSUFBSSxHQUFHLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztBQUM3QixRQUFRLEdBQUcsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQzFCLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQztBQUN0QixRQUFRLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDN0MsUUFBUSxJQUFJLEdBQUcsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDO0FBQzdCLFFBQVEsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0FBQzNDLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxLQUFLLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUM3QyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ25DLFFBQVEsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekIsUUFBUSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN2QixRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ3RCLFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7QUFDdkIsUUFBUSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUN4QixRQUFRLEdBQUcsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDO0FBQ3pCLFFBQVEsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDekIsUUFBUSxHQUFHLElBQUksTUFBTSxDQUFDO0FBQ3RCLFFBQVEsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDekIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDakMsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDbEMsS0FBSztBQUNMLElBQUksV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0UsS0FBSztBQUNMLElBQUksVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDckIsUUFBUSxN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
|